Skip to content

Commit

Permalink
Refactor decomposition parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
w1th0utnam3 committed Jul 26, 2023
1 parent 4c0ea27 commit 1ecc72c
Show file tree
Hide file tree
Showing 8 changed files with 275 additions and 144 deletions.
30 changes: 17 additions & 13 deletions splashsurf/src/reconstruction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -363,9 +363,13 @@ mod arguments {
let compact_support_radius = args.particle_radius * 2.0 * args.smoothing_length;
let cube_size = args.particle_radius * args.cube_size;

let spatial_decomposition = if !args.octree_decomposition.into_bool() {
None
} else {
let spatial_decomposition = if args.subdomain_grid.into_bool() {
Some(splashsurf_lib::SpatialDecomposition::UniformGrid(
splashsurf_lib::GridDecompositionParameters {
subdomain_num_cubes_per_dim: args.subdomain_cubes,
},
))
} else if args.octree_decomposition.into_bool() {
let subdivision_criterion = if let Some(max_particles) = args.octree_max_particles {
splashsurf_lib::SubdivisionCriterion::MaxParticleCount(max_particles)
} else {
Expand All @@ -388,12 +392,16 @@ mod arguments {
}
};

Some(splashsurf_lib::SpatialDecompositionParameters {
subdivision_criterion,
ghost_particle_safety_factor,
enable_stitching,
particle_density_computation,
})
Some(splashsurf_lib::SpatialDecomposition::Octree(
splashsurf_lib::OctreeDecompositionParameters {
subdivision_criterion,
ghost_particle_safety_factor,
enable_stitching,
particle_density_computation,
},
))
} else {
None
};

// Assemble all parameters for the surface reconstruction
Expand All @@ -404,10 +412,6 @@ mod arguments {
cube_size,
iso_surface_threshold: args.surface_threshold,
domain_aabb,
subdomain_num_cubes_per_dim: args
.subdomain_grid
.into_bool()
.then_some(args.subdomain_cubes),
enable_multi_threading: args.parallelize_over_particles.into_bool(),
spatial_decomposition,
};
Expand Down
123 changes: 72 additions & 51 deletions splashsurf_lib/benches/benches/bench_full.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ use splashsurf_lib::io::particles_from_file;
#[allow(dead_code)]
use splashsurf_lib::io::vtk_format::write_vtk;
use splashsurf_lib::{
reconstruct_surface, reconstruct_surface_inplace, Parameters,
ParticleDensityComputationStrategy, SpatialDecompositionParameters, SubdivisionCriterion,
SurfaceReconstruction,
reconstruct_surface, reconstruct_surface_inplace, GridDecompositionParameters,
OctreeDecompositionParameters, Parameters, ParticleDensityComputationStrategy,
SpatialDecomposition, SubdivisionCriterion, SurfaceReconstruction,
};
use std::time::Duration;

Expand Down Expand Up @@ -103,7 +103,6 @@ pub fn surface_reconstruction_dam_break(c: &mut Criterion) {
iso_surface_threshold: 0.6,
domain_aabb: None,
enable_multi_threading: true,
subdomain_num_cubes_per_dim: None,
spatial_decomposition: None,
};

Expand All @@ -124,13 +123,15 @@ pub fn surface_reconstruction_dam_break(c: &mut Criterion) {
group.bench_function("surface_reconstruction_dam_break_par_octree", |b| {
b.iter(|| {
let mut parameters = parameters.clone();
parameters.spatial_decomposition = Some(SpatialDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: Some(1.0),
enable_stitching: false,
particle_density_computation:
ParticleDensityComputationStrategy::SynchronizeSubdomains,
});
parameters.spatial_decomposition = Some(SpatialDecomposition::Octree(
OctreeDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: Some(1.0),
enable_stitching: false,
particle_density_computation:
ParticleDensityComputationStrategy::SynchronizeSubdomains,
},
));

reconstruction =
reconstruct_surface::<i64, _>(particle_positions.as_slice(), &parameters).unwrap()
Expand All @@ -142,13 +143,15 @@ pub fn surface_reconstruction_dam_break(c: &mut Criterion) {
|b| {
b.iter(|| {
let mut parameters = parameters.clone();
parameters.spatial_decomposition = Some(SpatialDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: Some(1.0),
enable_stitching: true,
particle_density_computation:
ParticleDensityComputationStrategy::SynchronizeSubdomains,
});
parameters.spatial_decomposition = Some(SpatialDecomposition::Octree(
OctreeDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: Some(1.0),
enable_stitching: true,
particle_density_computation:
ParticleDensityComputationStrategy::SynchronizeSubdomains,
},
));

reconstruction =
reconstruct_surface::<i64, _>(particle_positions.as_slice(), &parameters)
Expand All @@ -160,7 +163,11 @@ pub fn surface_reconstruction_dam_break(c: &mut Criterion) {
group.bench_function("surface_reconstruction_dam_break_par_grid_64", |b| {
b.iter(|| {
let mut parameters = parameters.clone();
parameters.subdomain_num_cubes_per_dim = Some(64);
parameters.spatial_decomposition = Some(SpatialDecomposition::UniformGrid(
GridDecompositionParameters {
subdomain_num_cubes_per_dim: 64,
},
));
reconstruction =
reconstruct_surface::<i64, _>(particle_positions.as_slice(), &parameters).unwrap()
})
Expand Down Expand Up @@ -194,7 +201,6 @@ pub fn surface_reconstruction_double_dam_break(c: &mut Criterion) {
iso_surface_threshold: 0.6,
domain_aabb: None,
enable_multi_threading: true,
subdomain_num_cubes_per_dim: None,
spatial_decomposition: None,
};

Expand All @@ -215,13 +221,15 @@ pub fn surface_reconstruction_double_dam_break(c: &mut Criterion) {
group.bench_function("surface_reconstruction_double_dam_break_par_octree", |b| {
b.iter(|| {
let mut parameters = parameters.clone();
parameters.spatial_decomposition = Some(SpatialDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: Some(1.0),
enable_stitching: false,
particle_density_computation:
ParticleDensityComputationStrategy::SynchronizeSubdomains,
});
parameters.spatial_decomposition = Some(SpatialDecomposition::Octree(
OctreeDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: Some(1.0),
enable_stitching: false,
particle_density_computation:
ParticleDensityComputationStrategy::SynchronizeSubdomains,
},
));

reconstruction =
reconstruct_surface::<i64, _>(particle_positions.as_slice(), &parameters).unwrap()
Expand All @@ -233,13 +241,15 @@ pub fn surface_reconstruction_double_dam_break(c: &mut Criterion) {
|b| {
b.iter(|| {
let mut parameters = parameters.clone();
parameters.spatial_decomposition = Some(SpatialDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: Some(1.0),
enable_stitching: true,
particle_density_computation:
ParticleDensityComputationStrategy::SynchronizeSubdomains,
});
parameters.spatial_decomposition = Some(SpatialDecomposition::Octree(
OctreeDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: Some(1.0),
enable_stitching: true,
particle_density_computation:
ParticleDensityComputationStrategy::SynchronizeSubdomains,
},
));

reconstruction =
reconstruct_surface::<i64, _>(particle_positions.as_slice(), &parameters)
Expand All @@ -251,7 +261,11 @@ pub fn surface_reconstruction_double_dam_break(c: &mut Criterion) {
group.bench_function("surface_reconstruction_double_dam_break_par_grid_64", |b| {
b.iter(|| {
let mut parameters = parameters.clone();
parameters.subdomain_num_cubes_per_dim = Some(64);
parameters.spatial_decomposition = Some(SpatialDecomposition::UniformGrid(
GridDecompositionParameters {
subdomain_num_cubes_per_dim: 64,
},
));
reconstruction =
reconstruct_surface::<i64, _>(particle_positions.as_slice(), &parameters).unwrap()
})
Expand Down Expand Up @@ -285,7 +299,6 @@ pub fn surface_reconstruction_double_dam_break_inplace(c: &mut Criterion) {
iso_surface_threshold: 0.6,
domain_aabb: None,
enable_multi_threading: true,
subdomain_num_cubes_per_dim: None,
spatial_decomposition: None,
};

Expand Down Expand Up @@ -315,13 +328,15 @@ pub fn surface_reconstruction_double_dam_break_inplace(c: &mut Criterion) {
|b| {
b.iter(|| {
let mut parameters = parameters.clone();
parameters.spatial_decomposition = Some(SpatialDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: Some(1.0),
enable_stitching: false,
particle_density_computation:
ParticleDensityComputationStrategy::SynchronizeSubdomains,
});
parameters.spatial_decomposition = Some(SpatialDecomposition::Octree(
OctreeDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: Some(1.0),
enable_stitching: false,
particle_density_computation:
ParticleDensityComputationStrategy::SynchronizeSubdomains,
},
));

reconstruct_surface_inplace::<i64, _>(
particle_positions.as_slice(),
Expand All @@ -338,13 +353,15 @@ pub fn surface_reconstruction_double_dam_break_inplace(c: &mut Criterion) {
|b| {
b.iter(|| {
let mut parameters = parameters.clone();
parameters.spatial_decomposition = Some(SpatialDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: Some(1.0),
enable_stitching: true,
particle_density_computation:
ParticleDensityComputationStrategy::SynchronizeSubdomains,
});
parameters.spatial_decomposition = Some(SpatialDecomposition::Octree(
OctreeDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: Some(1.0),
enable_stitching: true,
particle_density_computation:
ParticleDensityComputationStrategy::SynchronizeSubdomains,
},
));

reconstruct_surface_inplace::<i64, _>(
particle_positions.as_slice(),
Expand All @@ -361,7 +378,11 @@ pub fn surface_reconstruction_double_dam_break_inplace(c: &mut Criterion) {
|b| {
b.iter(|| {
let mut parameters = parameters.clone();
parameters.subdomain_num_cubes_per_dim = Some(64);
parameters.spatial_decomposition = Some(SpatialDecomposition::UniformGrid(
GridDecompositionParameters {
subdomain_num_cubes_per_dim: 64,
},
));
reconstruct_surface_inplace::<i64, _>(
particle_positions.as_slice(),
&parameters,
Expand Down
21 changes: 12 additions & 9 deletions splashsurf_lib/benches/benches/bench_mesh.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ use criterion::{criterion_group, Criterion};
use splashsurf_lib::io::particles_from_file;
use splashsurf_lib::nalgebra::Vector3;
use splashsurf_lib::{
reconstruct_surface, Parameters, ParticleDensityComputationStrategy,
SpatialDecompositionParameters, SubdivisionCriterion, SurfaceReconstruction,
reconstruct_surface, OctreeDecompositionParameters, Parameters,
ParticleDensityComputationStrategy, SpatialDecomposition, SubdivisionCriterion,
SurfaceReconstruction,
};
use std::path::Path;
use std::time::Duration;
Expand All @@ -23,13 +24,15 @@ fn reconstruct_particles<P: AsRef<Path>>(particle_file: P) -> SurfaceReconstruct
iso_surface_threshold: 0.6,
domain_aabb: None,
enable_multi_threading: true,
subdomain_num_cubes_per_dim: None,
spatial_decomposition: Some(SpatialDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: None,
enable_stitching: true,
particle_density_computation: ParticleDensityComputationStrategy::SynchronizeSubdomains,
}),
spatial_decomposition: Some(SpatialDecomposition::Octree(
OctreeDecompositionParameters {
subdivision_criterion: SubdivisionCriterion::MaxParticleCountAuto,
ghost_particle_safety_factor: None,
enable_stitching: true,
particle_density_computation:
ParticleDensityComputationStrategy::SynchronizeSubdomains,
},
)),
};

reconstruct_surface::<i64, _>(particle_positions.as_slice(), &parameters).unwrap()
Expand Down
36 changes: 29 additions & 7 deletions splashsurf_lib/benches/benches/bench_subdomain_grid.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
use criterion::{criterion_group, Criterion, SamplingMode};
use nalgebra::Vector3;
use splashsurf_lib::io::particles_from_file;
use splashsurf_lib::{reconstruct_surface, Parameters, SurfaceReconstruction};
use splashsurf_lib::{
reconstruct_surface, GridDecompositionParameters, Parameters, SpatialDecomposition,
SurfaceReconstruction,
};
use std::time::Duration;

fn parameters_canyon() -> Parameters<f32> {
Expand All @@ -17,8 +20,11 @@ fn parameters_canyon() -> Parameters<f32> {
iso_surface_threshold: 0.6,
domain_aabb: None,
enable_multi_threading: true,
subdomain_num_cubes_per_dim: Some(32),
spatial_decomposition: None,
spatial_decomposition: Some(SpatialDecomposition::UniformGrid(
GridDecompositionParameters {
subdomain_num_cubes_per_dim: 32,
},
)),
};

parameters
Expand All @@ -40,7 +46,11 @@ pub fn grid_canyon(c: &mut Criterion) {
b.iter(|| {
let mut parameters = parameters.clone();
parameters.cube_size = 1.5 * parameters.particle_radius;
parameters.subdomain_num_cubes_per_dim = Some(32);
parameters.spatial_decomposition = Some(SpatialDecomposition::UniformGrid(
GridDecompositionParameters {
subdomain_num_cubes_per_dim: 32,
},
));
reconstruction =
reconstruct_surface::<i64, _>(particle_positions.as_slice(), &parameters).unwrap()
})
Expand All @@ -50,7 +60,11 @@ pub fn grid_canyon(c: &mut Criterion) {
b.iter(|| {
let mut parameters = parameters.clone();
parameters.cube_size = 1.0 * parameters.particle_radius;
parameters.subdomain_num_cubes_per_dim = Some(48);
parameters.spatial_decomposition = Some(SpatialDecomposition::UniformGrid(
GridDecompositionParameters {
subdomain_num_cubes_per_dim: 48,
},
));
reconstruction =
reconstruct_surface::<i64, _>(particle_positions.as_slice(), &parameters).unwrap()
})
Expand All @@ -60,7 +74,11 @@ pub fn grid_canyon(c: &mut Criterion) {
b.iter(|| {
let mut parameters = parameters.clone();
parameters.cube_size = 0.75 * parameters.particle_radius;
parameters.subdomain_num_cubes_per_dim = Some(48);
parameters.spatial_decomposition = Some(SpatialDecomposition::UniformGrid(
GridDecompositionParameters {
subdomain_num_cubes_per_dim: 64,
},
));
reconstruction =
reconstruct_surface::<i64, _>(particle_positions.as_slice(), &parameters).unwrap()
})
Expand Down Expand Up @@ -89,7 +107,11 @@ pub fn grid_optimal_num_cubes_canyon(c: &mut Criterion) {
group.bench_function(format!("subdomain_num_cubes_{}", num_cubes), |b| {
b.iter(|| {
let mut parameters = parameters.clone();
parameters.subdomain_num_cubes_per_dim = Some(num_cubes);
parameters.spatial_decomposition = Some(SpatialDecomposition::UniformGrid(
GridDecompositionParameters {
subdomain_num_cubes_per_dim: num_cubes,
},
));
reconstruction =
reconstruct_surface::<i64, _>(particle_positions.as_slice(), &parameters)
.unwrap()
Expand Down
Loading

0 comments on commit 1ecc72c

Please sign in to comment.