use crate::BasicComponent;
use crate::Circuit;
use crate::ComponentRef;
use crate::ConnectionRef;
use crate::EquationRef;
use crate::NetRef;
use crate::TransientMatrix;
pub struct Ground {
nets: Vec<NetRef>,
connections: Vec<ConnectionRef>,
equations: Vec<EquationRef>,
}
impl BasicComponent for Ground {
fn initCircuit(
&mut self,
nets: Vec<NetRef>,
connections: Vec<ConnectionRef>,
equations: Vec<EquationRef>,
) {
self.nets = nets;
self.connections = connections;
self.equations = equations;
}
fn initTransient(&mut self, matrix: &mut TransientMatrix) {
matrix.clear_equation(self.equations[0]);
*matrix.voltage_term(self.equations[0], self.nets[0]) = 1.0;
matrix.clear_equation(self.equations[1]);
*matrix.voltage_derivative_term(self.equations[1], self.nets[0]) = 1.0;
}
}
impl Ground {
pub fn create(circuit: &mut Circuit, net: NetRef) -> ComponentRef {
let component = Self {
nets: Vec::new(),
connections: Vec::new(),
equations: Vec::new(),
};
circuit.createBasicComponent(Box::new(component), vec![net])
}
}