package mods.eln.sim.mna.component;
import mods.eln.sim.mna.SubSystem;
import mods.eln.sim.mna.misc.ISubSystemProcessI;
import mods.eln.sim.mna.state.State;
public class Capacitor extends Bipole implements ISubSystemProcessI {
private double c = 0;
double cdt;
public Capacitor() {
}
public Capacitor(State aPin, State bPin) {
connectTo(aPin, bPin);
}
@Override
public double getCurrent() {
return 0;
}
public void setC(double c) {
this.c = c;
dirty();
}
@Override
public void applyTo(SubSystem s) {
cdt = c / s.getDt();
s.addToA(aPin, aPin, cdt);
s.addToA(aPin, bPin, -cdt);
s.addToA(bPin, bPin, cdt);
s.addToA(bPin, aPin, -cdt);
}
@Override
public void simProcessI(SubSystem s) {
double add = (s.getXSafe(aPin) - s.getXSafe(bPin)) * cdt;
s.addToI(aPin, add);
s.addToI(bPin, -add);
}
@Override
public void quitSubSystem() {
subSystem.removeProcess(this);
super.quitSubSystem();
}
@Override
public void addedTo(SubSystem s) {
super.addedTo(s);
s.addProcess(this);
}
public double getE() {
double u = getU();
return u * u * c / 2;
}
public double getC() {
return c;
}
}