altrios-core 1.0.0

ALTRIOS Core model for train simulation
Documentation
use crate::imports::*;
use crate::train::TrainState;

#[serde_api]
#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default, PartialEq)]
#[cfg_attr(feature = "pyo3", pyclass(module = "altrios", subclass, eq))]
pub struct Basic {
    davis_b: si::InverseVelocity,
}

#[pyo3_api]
impl Basic {}

impl Init for Basic {}
impl SerdeAPI for Basic {}

impl Basic {
    pub fn new(davis_b: si::InverseVelocity) -> Self {
        Self { davis_b }
    }
    pub fn calc_res(&mut self, state: &TrainState) -> anyhow::Result<si::Force> {
        Ok(self.davis_b
            * *state.speed.get_unchecked(|| format_dbg!())?
            * *state.weight_static.get_unchecked(|| format_dbg!())?)
    }
}