diff options
| author | sam-anthony <samanthony6@protonmail.com> | 2022-01-15 20:31:04 -0330 |
|---|---|---|
| committer | sam-anthony <samanthony6@protonmail.com> | 2022-01-15 20:31:04 -0330 |
| commit | ef3980225a0a0ed5bea0d748709c1f227e33c851 (patch) | |
| tree | eafe6e82c02224ea62b5c7acdf75ae2fd93f2187 /src | |
| download | volute-ef3980225a0a0ed5bea0d748709c1f227e33c851.zip | |
units of measurement
Diffstat (limited to 'src')
| -rw-r--r-- | src/flow_rate.rs | 32 | ||||
| -rw-r--r-- | src/lib.rs | 14 | ||||
| -rw-r--r-- | src/main.rs | 16 | ||||
| -rw-r--r-- | src/mass.rs | 31 | ||||
| -rw-r--r-- | src/pressure.rs | 11 | ||||
| -rw-r--r-- | src/temperature.rs | 11 | ||||
| -rw-r--r-- | src/volume.rs | 23 |
7 files changed, 138 insertions, 0 deletions
diff --git a/src/flow_rate.rs b/src/flow_rate.rs new file mode 100644 index 0000000..f8e15e0 --- /dev/null +++ b/src/flow_rate.rs @@ -0,0 +1,32 @@ +use crate::{mass::Mass, volume::Volume}; +use std::time::Duration; + +pub struct MassFlowRate { + pub mass: Mass, + pub duration: Duration, +} + +impl MassFlowRate { + pub fn as_kilograms_per_minute(&self) -> f64 { + self.mass.as_kilograms() / (self.duration.as_secs() as f64 / 60.) + } + + pub fn as_pounds_per_minute(&self) -> f64 { + self.mass.as_pounds() / (self.duration.as_secs() as f64 / 60.) + } +} + +pub struct VolumetricFlowRate { + pub volume: Volume, + pub duration: Duration, +} + +impl VolumetricFlowRate { + pub fn as_cubic_metres_per_second(&self) -> f64 { + self.volume.as_cubic_metres() / self.duration.as_secs() as f64 + } + + pub fn as_cubic_feet_per_minute(&self) -> f64 { + self.volume.as_cubic_feet() / (self.duration.as_secs() as f64 / 60.) + } +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..79dda37 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,14 @@ +pub mod flow_rate; +pub mod mass; +pub mod pressure; +pub mod temperature; +pub mod volume; + +use crate::{pressure::Pressure, temperature::Temperature, volume::Volume}; + +const GAS_CONSTANT: f64 = 8.314472; +const MOLAR_MASS_OF_AIR: f64 = 0.0289647; // Kg/mol + +fn moles_from_gas_law(pressure: Pressure, volume: Volume, temperature: Temperature) -> f64 { + (pressure.as_pascals() * volume.as_cubic_metres()) / (GAS_CONSTANT * temperature.as_kelvin()) +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..9c9692c --- /dev/null +++ b/src/main.rs @@ -0,0 +1,16 @@ +use std::time::Duration; +use volute::{flow_rate::MassFlowRate, mass::Mass, pressure::Pressure}; + +fn main() { + let mass = Mass::from_grams(1600.); + println!("{} Kg", mass.as_kilograms()); + + let mass_flow_rate = MassFlowRate { + mass: mass, + duration: Duration::from_secs(5), + }; + println!("{:.2} Kg/min.", mass_flow_rate.as_kilograms_per_minute()); + + let pressure = Pressure::from_pascals(1500.52); + println!("{} Pa", pressure.as_pascals()); +} diff --git a/src/mass.rs b/src/mass.rs new file mode 100644 index 0000000..9c57f16 --- /dev/null +++ b/src/mass.rs @@ -0,0 +1,31 @@ +pub struct Mass(f64); // Base unit is grams + +impl Mass { + /* constructors */ + pub fn from_grams(grams: f64) -> Mass { + Mass(grams) + } + + pub fn from_kilograms(kilos: f64) -> Mass { + Mass(kilos / 1000.) + } + + pub fn from_moles(moles: f64, molar_mass: f64) -> Mass { + let kilos = moles * molar_mass; + Mass::from_kilograms(kilos) + } + + /* metric */ + pub fn as_grams(&self) -> f64 { + self.0 + } + + pub fn as_kilograms(&self) -> f64 { + self.0 / 1000. + } + + /* imperial */ + pub fn as_pounds(&self) -> f64 { + self.0 * 0.002204623 + } +} diff --git a/src/pressure.rs b/src/pressure.rs new file mode 100644 index 0000000..f746186 --- /dev/null +++ b/src/pressure.rs @@ -0,0 +1,11 @@ +pub struct Pressure(f64); // Base unit is pascals + +impl Pressure { + pub fn from_pascals(pascals: f64) -> Self { + Self(pascals) + } + + pub fn as_pascals(&self) -> f64 { + self.0 + } +} diff --git a/src/temperature.rs b/src/temperature.rs new file mode 100644 index 0000000..2eac48d --- /dev/null +++ b/src/temperature.rs @@ -0,0 +1,11 @@ +pub struct Temperature(f64); // Base unit is kelvin + +impl Temperature { + pub fn from_kelvin(kelvin: f64) -> Temperature { + Temperature(kelvin) + } + + pub fn as_kelvin(&self) -> f64 { + self.0 + } +} diff --git a/src/volume.rs b/src/volume.rs new file mode 100644 index 0000000..d6ef206 --- /dev/null +++ b/src/volume.rs @@ -0,0 +1,23 @@ +pub struct Volume(f64); // Base unit is cubic metres + +impl Volume { + pub fn from_cubic_metres(cubic_metres: f64) -> Volume { + Volume(cubic_metres) + } + + pub fn from_cubic_centimetres(cubic_centimetres: f64) -> Volume { + Volume(cubic_centimetres / 1_000_000.) + } + + pub fn as_cubic_metres(&self) -> f64 { + self.0 + } + + pub fn as_cubic_centimetres(&self) -> f64 { + self.0 * 1_000_000. + } + + pub fn as_cubic_feet(&self) -> f64 { + self.0 * 35.3147 + } +} |