/// <summary> /// Run the simulation using a circuit /// </summary> /// <param name="circuit">Circuit</param> /// <param name="controller">Simulation flow controller</param> public virtual void Run(Circuit circuit, SimulationFlowController controller) { if (circuit == null) { throw new ArgumentNullException(nameof(circuit)); } // Setup the simulation Setup(circuit); InitializeSimulationExport?.Invoke(this, EventArgs.Empty); // Check that at least something is simulated if (Nodes.Count < 1) { throw new CircuitException("{0}: No circuit nodes for simulation".FormatString(Name)); } // Execute the simulation if (controller != null) { controller.Initialize(this); do { Execute(); } while (controller.ContinueExecution(this)); controller.Finalize(this); } else { Execute(); } // Finalize the simulation FinalizeSimulationExport?.Invoke(this, EventArgs.Empty); Unsetup(); }
/// <summary> /// Finalize the simulation /// </summary> /// <param name="ckt"></param> public virtual void Finalize(Circuit ckt) { FinalizeSimulationExport?.Invoke(this, ckt); }