private void EnsureInitialized() { if (context != null) { return; } context = new SimulationContext(SimulationParameters); TotalNonLinearIterationCount = 0; // build equation system equationSystemAdapter = EquationSystemAdapterFactory.GetEquationSystemAdapter(); for (var i = 0; i < NodeCount; i++) { equationSystemAdapter.AddVariable(); } foreach (var device in Devices) { device.RegisterAdditionalVariables(equationSystemAdapter); } foreach (var device in Devices) { device.Initialize(equationSystemAdapter, context); } // get proxies for initial conditions initVoltProxies.Clear(); for (var i = 0; i < initialVoltages.Length; i++) { if (initialVoltages[i].HasValue) { initVoltProxies.Add(equationSystemAdapter.GetMatrixCoefficientProxy(i, i)); initVoltProxies.Add(equationSystemAdapter.GetRightHandSideCoefficientProxy(i)); } else { initVoltProxies.Add(null); initVoltProxies.Add(null); } } // finalize making changes equationSystemAdapter.Freeze(); // allocate temporary arrays currentSolution = new double[equationSystemAdapter.VariableCount]; previousSolution = new double[equationSystemAdapter.VariableCount]; }
public void SetQuadDouble() { EquationSystemAdapterFactory.SetFactory(() => new QdEquationSystemAdapter()); LoadCircuit(); }