Skip to content

Commit 16113bf

Browse files
committed
Add KinematicViscosity quantity
1 parent d385d79 commit 16113bf

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

src/si/kinematic_viscosity.rs

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
//! Kinematic viscosity (base unit square meter per second, m² · s⁻¹).
2+
3+
quantity! {
4+
/// Kinematic viscosity (base unit square meter per second, m² · s⁻¹).
5+
quantity: KinematicViscosity; "kinematic viscosity";
6+
/// Dimension of kinematic viscosity, L²T⁻¹ (base unit square meter per second, m² · s⁻¹).
7+
dimension: ISQ<
8+
P2, // length
9+
Z0, // mass
10+
N1, // time
11+
Z0, // electric current
12+
Z0, // thermodynamic temperature
13+
Z0, // amount of substance
14+
Z0>; // luminous intensity
15+
kind: dyn (crate::si::marker::KinematicViscosityKind);
16+
units {
17+
@square_meter_per_second: prefix!(none);
18+
"m²/s", "square meter per second", "square meters per second";
19+
@square_centimeter_per_second: prefix!(centi) * prefix!(centi);
20+
"cm²/s", "square centimeter per second", "square centimeters per second";
21+
@square_millimeter_per_second: prefix!(milli) * prefix!(milli);
22+
"mm²/s", "square millimeter per second", "square millimeters per second";
23+
@square_micrometer_per_second: prefix!(micro) * prefix!(micro);
24+
"µm²/s", "square micrometer per second", "square micrometers per second";
25+
@square_nanometer_per_second: prefix!(nano) * prefix!(nano);
26+
"nm²/s", "square nanometer per second", "square nanometers per second";
27+
@kilostokes: prefix!(kilo) * prefix!(centi) * prefix!(centi);
28+
"kSt", "kilostokes", "kilostokes";
29+
@stokes: prefix!(centi) * prefix!(centi); "St", "stokes", "stokes";
30+
@decistokes: prefix!(deci) * prefix!(centi) * prefix!(centi);
31+
"dSt", "decistokes", "decistokes";
32+
@centistokes: prefix!(centi) * prefix!(centi) * prefix!(centi);
33+
"cSt", "centistokes", "centistokes";
34+
@millistokes: prefix!(milli) * prefix!(centi) * prefix!(centi);
35+
"mSt", "millistokes", "millistokes";
36+
@microstokes: prefix!(micro) * prefix!(centi) * prefix!(centi);
37+
"µSt", "microstokes", "microstokes";
38+
@nanostokes: prefix!(nano) * prefix!(centi) * prefix!(centi);
39+
"nSt", "nanostokes", "nanostokes";
40+
}
41+
}
42+
43+
#[cfg(test)]
44+
mod test {
45+
storage_types! {
46+
use crate::num::One;
47+
use crate::si::area as a;
48+
use crate::si::kinematic_viscosity as kv;
49+
use crate::si::quantities::*;
50+
use crate::si::time as t;
51+
52+
use crate::tests::Test;
53+
54+
#[test]
55+
fn check_dimension() {
56+
let _: KinematicViscosity<V> = (Area::new::<a::square_meter>(V::one())
57+
/ Time::new::<t::second>(V::one())).into();
58+
}
59+
60+
#[test]
61+
fn check_units() {
62+
test::<a::square_meter, t::second, kv::square_meter_per_second>();
63+
test::<a::square_centimeter, t::second, kv::square_centimeter_per_second>();
64+
test::<a::square_millimeter, t::second, kv::square_millimeter_per_second>();
65+
test::<a::square_micrometer, t::second, kv::square_micrometer_per_second>();
66+
test::<a::square_nanometer, t::second, kv::square_nanometer_per_second>();
67+
test::<a::square_centimeter, t::millisecond, kv::kilostokes>();
68+
test::<a::square_centimeter, t::second, kv::stokes>();
69+
test::<a::square_centimeter, t::decasecond, kv::decistokes>();
70+
test::<a::square_centimeter, t::hectosecond, kv::centistokes>();
71+
test::<a::square_centimeter, t::kilosecond, kv::millistokes>();
72+
test::<a::square_centimeter, t::megasecond, kv::microstokes>();
73+
test::<a::square_centimeter, t::gigasecond, kv::nanostokes>();
74+
75+
fn test<A: a::Conversion<V>, T: t::Conversion<V>, KV: kv::Conversion<V>>() {
76+
Test::assert_approx_eq(&KinematicViscosity::new::<KV>(V::one()),
77+
&(Area::new::<A>(V::one()) / Time::new::<T>(V::one())).into());
78+
}
79+
}
80+
}
81+
}

src/si/mod.rs

+17
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ system! {
9898
information_rate::InformationRate,
9999
inverse_velocity::InverseVelocity,
100100
jerk::Jerk,
101+
kinematic_viscosity::KinematicViscosity,
101102
length::Length,
102103
linear_density_of_states::LinearDensityOfStates,
103104
linear_mass_density::LinearMassDensity,
@@ -234,6 +235,20 @@ pub mod marker {
234235
/// activity concentration.
235236
pub trait ConstituentConcentrationKind: Kind {}
236237

238+
/// `KinematicViscosityKind` is a `Kind` for separating quantities of
239+
/// kinematic viscosity from other identically dimensioned quantities.
240+
/// Conversions to and from `KinematicViscosityKind` quantities are
241+
/// supported through implementations of the `From` trait.
242+
///
243+
#[cfg_attr(feature = "f32", doc = " ```rust")]
244+
#[cfg_attr(not(feature = "f32"), doc = " ```rust,ignore")]
245+
/// # use uom::si::f32::*;
246+
/// # use uom::si::kinematic_viscosity::stokes;
247+
/// let kv: KinematicViscosity = KinematicViscosity::new::<stokes>(1.0);
248+
/// let dc: DiffusionCoefficient = kv.into();
249+
/// ```
250+
pub trait KinematicViscosityKind: Kind {}
251+
237252
/// `impl_from` generates generic inter-Kind implementations of `From`.
238253
#[cfg(feature = "autoconvert")]
239254
#[macro_export]
@@ -393,4 +408,6 @@ pub mod marker {
393408
impl_from!(Kind, InformationKind);
394409
impl_from!(ConstituentConcentrationKind, Kind);
395410
impl_from!(Kind, ConstituentConcentrationKind);
411+
impl_from!(KinematicViscosityKind, Kind);
412+
impl_from!(Kind, KinematicViscosityKind);
396413
}

0 commit comments

Comments
 (0)