pub struct Fluid {
pub density: f64,
pub dynamic_viscosity: Option<f64>,
}Expand description
A simple fluid model with density and optional dynamic viscosity.
Fields§
§density: f64§dynamic_viscosity: Option<f64>Implementations§
Source§impl Fluid
impl Fluid
Sourcepub fn new(density: f64) -> Option<Self>
pub fn new(density: f64) -> Option<Self>
Creates a fluid from density when the density is non-negative and finite.
Sourcepub fn with_dynamic_viscosity(
density: f64,
dynamic_viscosity: f64,
) -> Option<Self>
pub fn with_dynamic_viscosity( density: f64, dynamic_viscosity: f64, ) -> Option<Self>
Creates a fluid from density and dynamic viscosity when both values are non-negative and finite.
Examples found in repository?
examples/basic_usage.rs (line 6)
5fn main() {
6 let Some(water) = Fluid::with_dynamic_viscosity(1000.0, 0.001) else {
7 unreachable!("valid fluid inputs")
8 };
9 let Some(flow) = PipeFlow::new(2.0, 3.0) else {
10 unreachable!("valid pipe-flow inputs")
11 };
12
13 assert_eq!(flow.volumetric_flow_rate(), Some(6.0));
14 assert_eq!(flow.mass_flow_rate(water.density), Some(6000.0));
15 assert!(
16 water
17 .reynolds_number(2.0, 0.1)
18 .is_some_and(|reynolds| (reynolds - 200_000.0).abs() < 1.0e-9)
19 );
20 assert!(
21 drag_force(1.225, 10.0, 0.47, 1.0).is_some_and(|force| (force - 28.7875).abs() < 1.0e-9)
22 );
23}Sourcepub fn buoyant_force(
&self,
displaced_volume: f64,
gravitational_acceleration: f64,
) -> Option<f64>
pub fn buoyant_force( &self, displaced_volume: f64, gravitational_acceleration: f64, ) -> Option<f64>
Computes buoyant force for a displaced volume in this fluid.
§Examples
use use_fluid::Fluid;
let water = Fluid::new(1000.0).unwrap();
let force = water.buoyant_force(0.01, 9.80665).unwrap();
assert!((force - 98.0665).abs() < 1.0e-10);Sourcepub fn hydrostatic_pressure(
&self,
gravitational_acceleration: f64,
depth: f64,
) -> Option<f64>
pub fn hydrostatic_pressure( &self, gravitational_acceleration: f64, depth: f64, ) -> Option<f64>
Computes hydrostatic pressure at a depth in this fluid.
Sourcepub fn dynamic_pressure(&self, velocity: f64) -> Option<f64>
pub fn dynamic_pressure(&self, velocity: f64) -> Option<f64>
Computes dynamic pressure for this fluid at a given velocity.
Sourcepub fn reynolds_number(
&self,
velocity: f64,
characteristic_length: f64,
) -> Option<f64>
pub fn reynolds_number( &self, velocity: f64, characteristic_length: f64, ) -> Option<f64>
Computes Reynolds number for this fluid when dynamic viscosity is available.
Examples found in repository?
examples/basic_usage.rs (line 17)
5fn main() {
6 let Some(water) = Fluid::with_dynamic_viscosity(1000.0, 0.001) else {
7 unreachable!("valid fluid inputs")
8 };
9 let Some(flow) = PipeFlow::new(2.0, 3.0) else {
10 unreachable!("valid pipe-flow inputs")
11 };
12
13 assert_eq!(flow.volumetric_flow_rate(), Some(6.0));
14 assert_eq!(flow.mass_flow_rate(water.density), Some(6000.0));
15 assert!(
16 water
17 .reynolds_number(2.0, 0.1)
18 .is_some_and(|reynolds| (reynolds - 200_000.0).abs() < 1.0e-9)
19 );
20 assert!(
21 drag_force(1.225, 10.0, 0.47, 1.0).is_some_and(|force| (force - 28.7875).abs() < 1.0e-9)
22 );
23}Trait Implementations§
impl Copy for Fluid
impl StructuralPartialEq for Fluid
Auto Trait Implementations§
impl Freeze for Fluid
impl RefUnwindSafe for Fluid
impl Send for Fluid
impl Sync for Fluid
impl Unpin for Fluid
impl UnsafeUnpin for Fluid
impl UnwindSafe for Fluid
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