예제 #1
0
        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);
            });
        }
예제 #2
0
        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]);
                    }
                };
            }
        }