private void RunSimulation(SpiceNetlistReaderResult model, BaseSimulation simulation, int index) { var simulationStats = new SimulationStatistics() { SimulationNo = index, SimulationName = simulation.Name }; simulation.Run(model.Circuit); simulationStats.Iterations = simulation.Statistics.Get <BaseSimulationStatistics>().Iterations; simulationStats.SolveTime = simulation.Statistics.Get <BaseSimulationStatistics>().SolveTime.ElapsedMilliseconds; simulationStats.LoadTime = simulation.Statistics.Get <BaseSimulationStatistics>().LoadTime.ElapsedMilliseconds; simulationStats.ReorderTime = simulation.Statistics.Get <BaseSimulationStatistics>().ReorderTime.ElapsedMilliseconds; simulationStats.BehaviorCreationTime = simulation.Statistics .Get <SpiceSharp.Simulations.SimulationStatistics>().BehaviorCreationTime.ElapsedMilliseconds; if (simulation is TimeSimulation) { simulationStats.Timepoints = simulation.Statistics.Get <TimeSimulationStatistics>().TimePoints; simulationStats.TransientIterations = simulation.Statistics.Get <TimeSimulationStatistics>().TransientIterations; simulationStats.TransientTime = simulation.Statistics.Get <TimeSimulationStatistics>().TransientTime .ElapsedMilliseconds; simulationStats.AcceptedTimepoints = simulation.Statistics.Get <TimeSimulationStatistics>().Accepted; simulationStats.RejectedTimepoints = simulation.Statistics.Get <TimeSimulationStatistics>().Rejected; } Dispatcher.Invoke(() => { Stats.Add(simulationStats); }); }
private void SaveExportsToFile(SpiceNetlistReaderResult model) { Dictionary <Export, List <string> > results = new Dictionary <Export, List <string> >(); foreach (var export in model.Exports) { results[export] = new List <string>(); export.Simulation.ExportSimulationData += (sender, e) => { try { if (export.Simulation is DC) { results[export].Add($"{e.SweepValue};{export.Extract()}"); } if (export.Simulation is OP) { results[export].Add($"{export.Extract()}"); } if (export.Simulation is Transient) { results[export].Add($"{e.Time};{export.Extract()}"); } if (export.Simulation is AC) { results[export].Add($"{e.Frequency};{export.Extract()}"); } } catch { } }; } foreach (var export in results.Keys) { export.Simulation.AfterExecute += (sender, args) => { var exportTime = Environment.TickCount; var outputPath = Path.Combine(Directory.GetCurrentDirectory(), $"{Path.GetFileName(NetlistPath)}.{export.Simulation.Name}_{export.Name}_{exportTime}.RES"); if (results[export].Any()) { File.WriteAllLines(outputPath, results[export]); } }; } }