oxigrid 0.1.2

Pure Rust Energy Systems Simulation & Optimization Library
Documentation
use super::electrical::{PerUnit, Power, Voltage};

pub trait ToPerUnit {
    fn to_per_unit(&self, base: f64) -> PerUnit;
}

pub trait FromPerUnit {
    fn from_per_unit(pu: PerUnit, base: f64) -> Self;
}

pub fn base_impedance(base_kv: Voltage, base_mva: Power) -> f64 {
    (base_kv.0 * base_kv.0) / base_mva.0
}

pub fn base_current(base_mva: Power, base_kv: Voltage) -> f64 {
    base_mva.0 / (base_kv.0 * 3.0_f64.sqrt())
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_base_impedance() {
        let z_base = base_impedance(Voltage(230.0), Power(100.0));
        assert!((z_base - 529.0).abs() < 1e-10);
    }
}