コード例 #1
0
ファイル: Examples.cs プロジェクト: rzikm/NextGenSpice
        public static void LiveSimExample()
        {
            var builder = new CircuitBuilder();

            builder
            .AddVoltageSource(1, 0, new SinusoidalBehavior
            {
                Amplitude = 5,
                Frequency = 1e3
            })
            .AddCapacitor(1, 2, 0.125, null, "C1")
            .AddResistor(2, 0, 1);

            var m1 = builder.BuildCircuit().GetLargeSignalModel();

            m1.EstablishDcBias();


            Console.WriteLine("Time V_1 V_2");
            var timestep = 10e-6;

            while (m1.CurrentTimePoint <= 1e-3)
            {
                var time = m1.CurrentTimePoint;
                Console.WriteLine($"{time} {m1.NodeVoltages[1]} {m1.NodeVoltages[2]}");

                m1.AdvanceInTime(timestep);
            }

            builder.AddCapacitor(2, 0, 0.125, null, "C2");
            var m2 = builder.BuildCircuit().GetLargeSignalModel();

            var c1      = (LargeSignalCapacitor)m1.FindDevice("C1");
            var intprop = typeof(LargeSignalCapacitor).GetProperty("IntegrationMethod",
                                                                   BindingFlags.Instance | BindingFlags.NonPublic);

            intprop.SetValue(m2.FindDevice("C1"), intprop.GetValue(c1));

            var ctxprop =
                typeof(LargeSignalCircuitModel).GetField("context", BindingFlags.Instance | BindingFlags.NonPublic);
            var ctx = (ISimulationContext)ctxprop.GetValue(m1);

            // too complex not worth it

            var tpprop = ctx.GetType().GetProperty("TimePoint", BindingFlags.NonPublic | BindingFlags.Instance);

            tpprop.SetValue(ctxprop.GetValue(m2), ctx.TimePoint);
        }