mechanical_engineering/
compression.rs

1//! A collection of functions used for performing
2//! engineering calculations related to gas compression.
3
4use crate::errors::EngCalcError;
5use crate::states::GasState;
6use crate::units::pressure::Pressure;
7use crate::units::temperature;
8
9/// Calculates isentropic efficiency of compression.
10pub fn isentropic_eff(state_1: &GasState, state_2: &GasState) -> Result<f32, EngCalcError> {
11    let mut t1 = state_1.temperature().clone();
12    t1.convert_unit(temperature::Unit::K);
13    let t1 = t1.value();
14
15    let mut t2 = state_2.temperature().clone();
16    t2.convert_unit(temperature::Unit::K);
17    let t2 = t2.value();
18
19    let k = state_1.gas().specific_heat_ratio();
20    let pr = Pressure::pressure_ratio(state_1.pressure(), state_2.pressure());
21
22    match pr {
23        Ok(pr) => Ok(t1 * (pr.powf((k - 1.0) / k) - 1.0) / (t2 - t1)),
24        Err(e) => Err(e),
25    }
26}