Skip to content

Commit d35a49d

Browse files
committed
Update computation of particle rest volume
1 parent 5e6b658 commit d35a49d

File tree

4 files changed

+22
-9
lines changed

4 files changed

+22
-9
lines changed

splashsurf_lib/examples/minimal_sph_levelset.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ fn reconstruct() -> Result<(), anyhow::Error> {
244244
let grid = UniformGrid::<I, R>::from_aabb(&particle_aabb, cube_size)?;
245245
let kernel = kernel::CubicSplineKernel::new(compact_support_radius);
246246

247-
let particle_rest_volume = (2.0 * args.particle_radius).powi(3);
247+
let particle_rest_volume = kernel::Volume::cube_particle(args.particle_radius);
248248
let particle_rest_mass = particle_rest_volume * args.rest_density;
249249

250250
info!(

splashsurf_lib/src/dense_subdomains.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ use crate::neighborhood_search::{
2222
use crate::topology::Direction;
2323
use crate::uniform_grid::{EdgeIndex, GridConstructionError, UniformCartesianCubeGrid3d};
2424
use crate::{
25-
Aabb3d, MapType, Parameters, RealConvert, SpatialDecomposition, SurfaceReconstruction, new_map,
26-
new_parallel_map, profile,
25+
Aabb3d, MapType, Parameters, RealConvert, SpatialDecomposition, SurfaceReconstruction, kernel,
26+
new_map, new_parallel_map, profile,
2727
};
2828
use crate::{Index, Real};
2929

@@ -110,7 +110,7 @@ pub(crate) fn initialize_parameters<I: Index, R: Real>(
110110
let cube_size = parameters.cube_size;
111111
let surface_threshold = parameters.iso_surface_threshold;
112112

113-
let particle_rest_volume = R::from_float(4.0) * R::frac_pi_3() * particle_radius.powi(3);
113+
let particle_rest_volume = kernel::Volume::cube_particle(particle_radius);
114114
let particle_rest_mass = particle_rest_volume * particle_rest_density;
115115

116116
let ghost_particle_margin =

splashsurf_lib/src/kernel.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,21 @@ use numeric_literals::replace_float_literals;
66

77
// TODO: Add reference for the kernel function, document formula
88

9+
/// Utility functions for computing the volume of fluid particles
10+
pub struct Volume;
11+
12+
impl Volume {
13+
/// Returns the volume of a particle representing a cube of fluid
14+
pub fn cube_particle<R: Real>(particle_radius: R) -> R {
15+
(particle_radius + particle_radius).powi(3)
16+
}
17+
18+
/// Returns the volume of a particle representing a sphere of fluid
19+
pub fn sphere_particle<R: Real>(particle_radius: R) -> R {
20+
R::from_float(4.0) * R::frac_pi_3() * particle_radius.powi(3)
21+
}
22+
}
23+
924
/// Trait for symmetric kernel functions in three dimensions
1025
pub trait SymmetricKernel3d<R: Real> {
1126
/// Evaluates the kernel at the radial distance `r` relative to the origin

splashsurf_lib/src/reconstruction.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::mesh::TriMesh3d;
66
use crate::uniform_grid::UniformGrid;
77
use crate::workspace::LocalReconstructionWorkspace;
88
use crate::{
9-
Index, Parameters, Real, ReconstructionError, SurfaceReconstruction, density_map,
9+
Index, Parameters, Real, ReconstructionError, SurfaceReconstruction, density_map, kernel,
1010
marching_cubes, neighborhood_search, profile,
1111
};
1212
use anyhow::Context;
@@ -120,8 +120,7 @@ pub(crate) fn compute_particle_densities_and_neighbors<I: Index, R: Real>(
120120
profile!("compute_particle_densities_and_neighbors");
121121

122122
let particle_rest_density = parameters.rest_density;
123-
let particle_rest_volume =
124-
R::from_float(4.0) * R::frac_pi_3() * parameters.particle_radius.powi(3);
123+
let particle_rest_volume = kernel::Volume::cube_particle(parameters.particle_radius);
125124
let particle_rest_mass = particle_rest_volume * particle_rest_density;
126125

127126
trace!("Starting neighborhood search...");
@@ -153,8 +152,7 @@ pub(crate) fn reconstruct_single_surface_append<I: Index, R: Real>(
153152
output_mesh: &mut TriMesh3d<R>,
154153
) -> Result<(), ReconstructionError<I, R>> {
155154
let particle_rest_density = parameters.rest_density;
156-
let particle_rest_volume =
157-
R::from_float(4.0) * R::frac_pi_3() * parameters.particle_radius.powi(3);
155+
let particle_rest_volume = kernel::Volume::cube_particle(parameters.particle_radius);
158156
let particle_rest_mass = particle_rest_volume * particle_rest_density;
159157

160158
let particle_densities = {

0 commit comments

Comments
 (0)