-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,7 +13,11 @@ Cargo.lock | |
|
||
examples.sh | ||
|
||
_*.msh | ||
*.btr | ||
|
||
.vscode/ | ||
|
||
# Files generated by tests | ||
_*.msh | ||
_*.ron | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
//? mpirun -n {{NPROCESSES}} --features "mpi,serde" | ||
|
||
#[cfg(feature = "mpi,serde")] | ||
Check failure on line 3 in examples/test_parallel_io.rs
|
||
use mpi::{collective::CommunicatorCollectives, environment::Universe, traits::Communicator}; | ||
#[cfg(feature = "mpi,serde")] | ||
Check failure on line 5 in examples/test_parallel_io.rs
|
||
use ndelement::{ciarlet::CiarletElement, types::ReferenceCellType}; | ||
#[cfg(feature = "mpi,serde")] | ||
Check failure on line 7 in examples/test_parallel_io.rs
|
||
use ndgrid::{ | ||
grid::parallel::ParallelGrid, | ||
traits::{Builder, Grid, ParallelBuilder, RONExportParallel, RONImportParallel}, | ||
SingleElementGrid, SingleElementGridBuilder, | ||
}; | ||
|
||
#[cfg(feature = "mpi,serde")] | ||
Check failure on line 14 in examples/test_parallel_io.rs
|
||
fn create_single_element_grid_data(b: &mut SingleElementGridBuilder<f64>, n: usize) { | ||
for y in 0..n { | ||
for x in 0..n { | ||
b.add_point( | ||
y * n + x, | ||
&[x as f64 / (n - 1) as f64, y as f64 / (n - 1) as f64, 0.0], | ||
); | ||
} | ||
} | ||
|
||
for i in 0..n - 1 { | ||
for j in 0..n - 1 { | ||
b.add_cell( | ||
i * (n - 1) + j, | ||
&[j * n + i, j * n + i + 1, j * n + i + n, j * n + i + n + 1], | ||
); | ||
} | ||
} | ||
} | ||
|
||
#[cfg(feature = "mpi,serde")] | ||
Check failure on line 35 in examples/test_parallel_io.rs
|
||
fn example_single_element_grid<C: Communicator>( | ||
comm: &C, | ||
n: usize, | ||
) -> ParallelGrid<'_, C, SingleElementGrid<f64, CiarletElement<f64>>> { | ||
let rank = comm.rank(); | ||
|
||
let mut b = SingleElementGridBuilder::<f64>::new(3, (ReferenceCellType::Quadrilateral, 1)); | ||
|
||
if rank == 0 { | ||
create_single_element_grid_data(&mut b, n); | ||
b.create_parallel_grid(comm) | ||
} else { | ||
b.receive_parallel_grid(comm, 0) | ||
} | ||
} | ||
|
||
#[cfg(feature = "mpi,serde")] | ||
Check failure on line 52 in examples/test_parallel_io.rs
|
||
fn test_parallel_export<C: Communicator>(comm: &C) { | ||
let size = comm.size(); | ||
|
||
let n = 10; | ||
let grid = example_single_element_grid(comm, n); | ||
let filename = format!("_examples_parallel_io_{}ranks.ron", size); | ||
grid.export_as_ron(&filename); | ||
} | ||
|
||
#[cfg(feature = "mpi,serde")] | ||
Check failure on line 62 in examples/test_parallel_io.rs
|
||
fn test_parallel_import<C: Communicator>(comm: &C) { | ||
let size = comm.size(); | ||
|
||
let filename = format!("_examples_parallel_io_{}ranks.ron", size); | ||
let grid = ParallelGrid::<'_, C, SingleElementGrid<f64, CiarletElement<f64>>>::import_from_ron( | ||
comm, &filename, | ||
); | ||
|
||
let n = 10; | ||
let grid2 = example_single_element_grid(comm, n); | ||
|
||
assert_eq!( | ||
grid.entity_count(ReferenceCellType::Point), | ||
grid2.entity_count(ReferenceCellType::Point) | ||
); | ||
} | ||
|
||
#[cfg(feature = "mpi,serde")] | ||
Check failure on line 80 in examples/test_parallel_io.rs
|
||
fn main() { | ||
let universe: Universe = mpi::initialize().unwrap(); | ||
let world = universe.world(); | ||
let rank = world.rank(); | ||
|
||
if rank == 0 { | ||
println!("Testing parallel grid export"); | ||
} | ||
test_parallel_export(&world); | ||
|
||
world.barrier(); | ||
|
||
if rank == 0 { | ||
println!("Testing parallel grid import"); | ||
} | ||
test_parallel_import(&world); | ||
} | ||
#[cfg(not(feature = "mpi,serde"))] | ||
Check failure on line 98 in examples/test_parallel_io.rs
|
||
fn main() {} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
//! Grid geometry | ||
mod geometry_map; | ||
mod point; | ||
mod single_element; | ||
pub(crate) mod single_element; | ||
pub use geometry_map::GeometryMap; | ||
pub use point::{Point, PointIter}; | ||
pub use single_element::{SingleElementEntityGeometry, SingleElementGeometry}; |