private static void RunModel() { var circuit = new CircuitBuilder() .AddVoltageSource(1, 0, new PieceWiseLinearBehavior { DefinitionPoints = new Dictionary <double, double> { [100e-6] = 1 }, InitialValue = 0 }, "V") .AddDiode(1, 0, d => { d.ReverseBreakdownVoltage = 2; }, "D") .BuildCircuit(); var model = circuit.GetLargeSignalModel(); model.MaxDcPointIterations = 10000; model.EstablishDcBias(); SimulateAndPrint(model, 1000e-6, 1e-6); }
public static void SimpleRlc() { var circuit = new CircuitBuilder() .AddVoltageSource(1, 0, new PulseBehavior { InitialLevel = 0, PulseLevel = 5, Delay = 5e-3, // 5 ms PulseWidth = 25e-3 // 25 ms }, "vc") .AddResistor(1, 2, 50) .AddInductor(2, 3, 0.125) .AddCapacitor(3, 0, 1e-6) .BuildCircuit(); var model = circuit.GetLargeSignalModel(); var vc = (ITwoTerminalLargeSignalDevice)model.FindDevice("vc"); model.EstablishDcBias(); Console.WriteLine("Time V(1) V(3)"); var timestep = 0.2e-3; // use 0.2 ms timestep while (model.CurrentTimePoint <= 55e-3) // simulate for 55 ms { var time = model.CurrentTimePoint; var v1 = model.NodeVoltages[1]; var v3 = model.NodeVoltages[3]; Console.WriteLine($"{time} {v1} {v3} {vc.Current}"); model.AdvanceInTime(timestep); } // model.SimulationParameters.IntegrationMethodFactory = // new SimpleIntegrationMethodFactory(() => new TrapezoidalIntegrationMethod()); }