stem_material 0.3.4

Material definition for stem - a Simulation Toolbox for Electric Motors.
Documentation
use stem_material::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let field_strength: Vec<_> = vec![
        0.0, 11.57, 22.11, 31.71, 40.47, 48.50, 55.29, 64.02, 75.66, 89.24, 107.67, 134.83, 179.45,
        276.45, 582.98, 1583.11, 3578.65, 6665.91, 11303.32, 18871.00, 29765.16, 45905.16,
        69372.42, 102918.79, 150142.01, 215692.99, 219224.15,
    ]
    .into_iter()
    .map(MagneticFieldStrength::new::<ampere_per_meter>)
    .collect();
    let flux_density: Vec<_> = vec![
        0.0, 0.0970, 0.1940, 0.2910, 0.3880, 0.4851, 0.5821, 0.6791, 0.7761, 0.8731, 0.9701,
        1.0672, 1.1642, 1.2614, 1.3588, 1.4571, 1.5566, 1.6576, 1.7606, 1.8674, 1.9674, 2.0674,
        2.1674, 2.2674, 2.3674, 2.4674, 2.4720,
    ]
    .into_iter()
    .map(MagneticFluxDensity::new::<tesla>)
    .collect();

    let permeability: FerromagneticPermeability =
        MagnetizationCurve::new(field_strength.clone(), flux_density, 1.0)
            .unwrap()
            .try_into()?;

    for flux_density in [0.1, -0.1].into_iter() {
        approx::assert_abs_diff_eq!(
            permeability
                .call(&[MagneticFluxDensity::new::<tesla>(flux_density).into()])
                .value,
            8469.282,
            epsilon = 0.001
        );
    }
    for flux_density in [1.5, -1.5].into_iter() {
        approx::assert_abs_diff_eq!(
            permeability
                .call(&[MagneticFluxDensity::new::<tesla>(flux_density).into()])
                .value,
            503.64,
            epsilon = 0.001
        );
    }
    for flux_density in [2.5, -2.5].into_iter() {
        approx::assert_abs_diff_eq!(
            permeability
                .call(&[MagneticFluxDensity::new::<tesla>(flux_density).into()])
                .value,
            9.048,
            epsilon = 0.001
        );
    }
    return Ok(());
}