public List <double> SimulateFor(LargeSignalCircuitModel model, double time, double timestep) { var voltages = new List <double>(); Output.WriteLine("Voltages:"); Output.WriteLine( $"Time |{string.Join("|", Enumerable.Range(0, model.NodeCount).Select(c => c.ToString().PadLeft(10)))}"); var elapsed = 0.0; model.EstablishDcBias(); while (true) { Output.WriteLine( $"{elapsed,10:G4}|{string.Join("|", model.NodeVoltages.Select(c => c.ToString("F").PadLeft(10)))}"); voltages.Add(model.NodeVoltages[1]); if (elapsed > time) { break; } model.AdvanceInTime(timestep); elapsed += timestep; } return(voltages); }
protected new void Parse(string netlist) { Result = base.Parse(netlist); Assert.Empty(Result.Errors); Model = Result.CircuitDefinition.GetLargeSignalModel(); }
protected void PrintStatistics(LargeSignalCircuitModel model, SpiceNetlistParserResult result) { Output.WriteLine($"Iterations: {model.LastNonLinearIterationCount}"); for (var i = 0; i < result.NodeNames.Count; i++) { Output.WriteLine($"V({result.NodeNames[i]}) = {model.NodeVoltages[i]}"); } }
private static void PrintStats(LargeSignalCircuitModel model, double time, params double[] vals) { // Console.WriteLine($"{(time * 1e6),+20:#0.## 'us'}|{string.Join("|", model.NodeVoltages.Select(v => $"{v,20:G10}"))}|{-val,20:G10}"); // Console.WriteLine($"{time} {-val}"); Console.WriteLine( $"{time} {model.NodeVoltages[2]} {model.NodeVoltages[2] - model.NodeVoltages[3]} {string.Join(" ", vals.Select(v => v.ToString(CultureInfo.InvariantCulture)))}"); // Console.WriteLine(model.IterationCount); // Console.WriteLine($"{model.NodeVoltages[1]} {-val}"); }
public static void PrintCircuitStats(this ITestOutputHelper output, LargeSignalCircuitModel model) { output.WriteLine($"Iterations: {model.LastNonLinearIterationCount}"); output.WriteLine($"Iterations total: {model.TotalNonLinearIterationCount}"); output.WriteLine("Voltages:"); for (var id = 0; id < model.NodeVoltages.Length; id++) { output.WriteLine($"[{id}]:\t{model.NodeVoltages[id]}"); } output.WriteLine(""); }
private void PrintValues(LargeSignalCircuitModel model, List <PrintStatement <LargeSignalCircuitModel> > printers, TextWriter output) { output.Write(model.CurrentTimePoint); foreach (var printer in printers) { output.Write(" "); printer.PrintValue(output); } output.WriteLine(); }
private void PrintHeader(LargeSignalCircuitModel model, List <PrintStatement <LargeSignalCircuitModel> > printers, TextWriter output) { output.Write("Time"); foreach (var printer in printers) { output.Write(" "); output.Write(printer.Header); } output.WriteLine(); }
private void GetPrintersForAll(LargeSignalCircuitModel model, List <PrintStatement <LargeSignalCircuitModel> > printers) { // get printers for all nodes and two terminal devices for (var i = 1; i < model.NodeCount; i++) // no need to print ground voltage { printers.Add(new NodeVoltagePrintStatement(nodeNames[i], i)); } foreach (var device in model.Devices) { printers.AddRange(device.GetDeviceStateProviders() .Select(pr => new DevicePrintStatement(pr.Name, device.DefinitionDevice.Tag as string, new Token()))); } }
private static void SimulateAndPrint(LargeSignalCircuitModel model, double time, double step) { var elapsed = 0.0; //model.EstablishDcBias(); // Console.WriteLine("Voltages:"); // Console.WriteLine($"Time |{string.Join("|", Enumerable.Range(0, model.NodeCount).Select(i => $"{i,20}"))}|Il"); // Console.WriteLine("-------------------------------------------------------------------------------------------------"); var voltageSource = model.Devices.OfType <LargeSignalVoltageSource>() .Single(d => d.DefinitionDevice.Tag as string == "VS"); var device = model.Devices.OfType <LargeSignalDiode>().Single(d => d.DefinitionDevice.Tag as string == "D1"); // var device2 = model.Devices.OfType<LargeSignalDiodeModel>().Single(d => d.Name == "D2"); // var device = model.Devices.OfType<LargeSignalCapacitorModel>().Single(); // PrintStats(model, elapsed, device.Current); while (elapsed < time) { model.AdvanceInTime(step); elapsed += step; PrintStats(model, elapsed, voltageSource.Voltage, device.Current); // PrintStats(model, elapsed, device.Voltage); } }
private void LoadCircuit() { var result = SpiceNetlistParser.WithDefaults().Parse(new StreamReader(path + simulation.circuit + suffix)); model = result.CircuitDefinition.GetLargeSignalModel(); }