rspice 0.1.0

Pure-Rust circuit simulation backend
Documentation
use crate::ConnectionRef;
use crate::EquationRef;
use crate::NetRef;
use crate::TransientMatrix;
use crate::TransientVector;

/// Component that directly interacts with the simulator.
///
/// You may implement this trait to add new fundamental
/// components that are not equivalent to a circuit made of
/// existing ones.
///
/// Implementors of this trait should not provide any constructor,
/// but instead a `create(&mut Circuit, NetRef, NetRef, ...)` method
/// that takes a circuit, an appropriate number of net references
/// and any required configuration values, and calls
/// [circuit.crateBasicComponent()](crate::Circuit::createBasicComponent) directly.
pub trait BasicComponent {
    /// Initialize component with information it needs to interact with simulation matrices.
    fn initCircuit(
        &mut self,
        nets: Vec<NetRef>,
        connections: Vec<ConnectionRef>,
        equations: Vec<EquationRef>,
    );

    /// Initialize component and matrix for transient simulation.
    fn initTransient(&mut self, matrix: &mut TransientMatrix);

    /// Update component and matrix every time step during transient simulation.
    fn updateTransient(
        &mut self,
        matrix: &mut TransientMatrix,
        vector: &TransientVector,
        t: f64,
        step: f64,
    ) {
    }
}