package mods.eln.sim.mna.component;
import mods.eln.sim.mna.SubSystem;
import mods.eln.sim.mna.misc.ISubSystemProcessI;
public class Delay extends Bipole implements ISubSystemProcessI {
double impedance, conductance;
double oldIa, oldIb;
public Delay set(double impedance) {
this.impedance = impedance;
this.conductance = 1 / impedance;
return this;
}
@Override
public void addedTo(SubSystem s) {
super.addedTo(s);
s.addProcess(this);
}
@Override
public void applyTo(SubSystem s) {
s.addToA(aPin, aPin, conductance);
s.addToA(bPin, bPin, conductance);
}
/*@Override
public void simProcessI(SubSystem s) {
double aPinI = 2 * s.getX(bPin) * conductance + oldIb;
double bPinI = 2 * s.getX(aPin) * conductance + oldIa;
s.addToI(aPin, aPinI);
s.addToI(bPin, bPinI);
oldIa = -aPinI;
oldIb = -bPinI;
}*/
@Override
public void simProcessI(SubSystem s) {
double iA = aPin.state * conductance + oldIa;
double iB = bPin.state * conductance + oldIb;
double iTarget = (iA - iB) / 2;
double aPinI = iTarget - (aPin.state + bPin.state) * 0.5 * conductance;
double bPinI = -iTarget - (aPin.state + bPin.state) * 0.5 * conductance;
s.addToI(aPin, -aPinI);
s.addToI(bPin, -bPinI);
oldIa = aPinI;
oldIb = bPinI;
}
@Override
public double getCurrent() {
return oldIa - oldIb;
}
}