pub struct SphSimulation {Show 17 fields
pub particles: Vec<SphParticle>,
pub h: f32,
pub rest_density: f32,
pub stiffness: f32,
pub gamma: f32,
pub viscosity: f32,
pub surface_tension: f32,
pub gravity: Vec3,
pub max_dt: f32,
pub min_dt: f32,
pub dt: f32,
pub cfl_factor: f32,
pub speed_of_sound: f32,
pub xsph_epsilon: f32,
pub boundary_repulsion: f32,
pub domain_min: Vec3,
pub domain_max: Vec3,
/* private fields */
}Expand description
Weakly Compressible SPH (WCSPH) fluid simulation.
Reference: Becker & Teschner (2007). Uses cubic spline kernel, Tait equation of state, XSPH velocity correction, surface tension (Akinci 2013).
Fields§
§particles: Vec<SphParticle>§h: f32Smoothing length h.
rest_density: f32Reference rest density (kg/m³).
stiffness: f32Stiffness for Tait EOS (pressure term).
gamma: f32Adiabatic index gamma.
viscosity: f32Dynamic viscosity coefficient.
surface_tension: f32Surface tension coefficient (Akinci).
gravity: Vec3Gravity.
max_dt: f32Maximum timestep (CFL).
min_dt: f32Minimum timestep.
dt: f32Current adaptive dt.
cfl_factor: f32CFL number.
speed_of_sound: f32Speed of sound (for Tait EOS).
xsph_epsilon: f32XSPH epsilon (velocity smoothing).
boundary_repulsion: f32Boundary repulsion force strength.
domain_min: Vec3Domain bounding box.
domain_max: Vec3Implementations§
Source§impl SphSimulation
impl SphSimulation
pub fn new(h: f32, rest_density: f32) -> Self
Sourcepub fn add_cube(
&mut self,
center: Vec3,
half_extent: Vec3,
spacing: f32,
mass: f32,
)
pub fn add_cube( &mut self, center: Vec3, half_extent: Vec3, spacing: f32, mass: f32, )
Add a cubic block of particles.
Sourcepub fn step_with_dt(&mut self, dt: f32)
pub fn step_with_dt(&mut self, dt: f32)
Step with a fixed timestep.
pub fn particle_count(&self) -> usize
Sourcepub fn total_kinetic_energy(&self) -> f32
pub fn total_kinetic_energy(&self) -> f32
Total kinetic energy.
Sourcepub fn average_density(&self) -> f32
pub fn average_density(&self) -> f32
Average density.
Sourcepub fn sample_pressure(&self, pos: Vec3) -> f32
pub fn sample_pressure(&self, pos: Vec3) -> f32
Compute pressure at an arbitrary world point via SPH interpolation.
Auto Trait Implementations§
impl Freeze for SphSimulation
impl RefUnwindSafe for SphSimulation
impl Send for SphSimulation
impl Sync for SphSimulation
impl Unpin for SphSimulation
impl UnsafeUnpin for SphSimulation
impl UnwindSafe for SphSimulation
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.