twine-thermo 0.4.2

Thermodynamic and fluid property modeling for the Twine framework.
Documentation
use twine_core::TimeIntegrable;
use uom::si::{
    f64::{MassDensity, SpecificHeatCapacity, Time},
    mass_density::kilogram_per_cubic_meter,
    specific_heat_capacity::kilojoule_per_kilogram_kelvin,
};

use crate::model::incompressible::{IncompressibleFluid, IncompressibleParameters};

/// Canonical identifier for water.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Water;

impl TimeIntegrable for Water {
    type Derivative = ();

    fn step(self, _derivative: Self::Derivative, _dt: Time) -> Self {
        self
    }
}

impl IncompressibleFluid for Water {
    fn parameters() -> IncompressibleParameters {
        IncompressibleParameters::new(
            SpecificHeatCapacity::new::<kilojoule_per_kilogram_kelvin>(4.184),
            MassDensity::new::<kilogram_per_cubic_meter>(997.047),
        )
    }
}

#[cfg(feature = "coolprop")]
impl crate::model::coolprop::CoolPropFluid for Water {
    const BACKEND: &'static str = "HEOS";
    const NAME: &'static str = "Water";
}