コード例 #1
0
        private void UpdateSimulation(bool Rebuild)
        {
            int id = Interlocked.Increment(ref update);

            new Task(() =>
            {
                ComputerAlgebra.Expression h = (ComputerAlgebra.Expression) 1 / (stream.SampleRate * Oversample);
                Circuit.TransientSolution s  = Circuit.TransientSolution.Solve(circuit.Analyze(), h, Rebuild ? (ILog)Log : new NullLog());
                lock (sync)
                {
                    if (id > clock)
                    {
                        if (Rebuild)
                        {
                            simulation = new Circuit.Simulation(s)
                            {
                                Log        = Log,
                                Input      = inputs.Keys,
                                Output     = probes.Select(i => i.V).Concat(OutputChannels.Select(i => i.Signal)),
                                Oversample = Oversample,
                                Iterations = Iterations,
                            };
                        }
                        else
                        {
                            simulation.Solution = s;
                            clock = id;
                        }
                    }
                }
            }).Start(scheduler);
        }
コード例 #2
0
        private void RebuildSolution()
        {
            lock (sync)
            {
                simulation = null;
                ProgressDialog.RunAsync(this, "Building circuit solution...", () =>
                {
                    try
                    {
                        ComputerAlgebra.Expression h       = (ComputerAlgebra.Expression) 1 / (stream.SampleRate * Oversample);
                        Circuit.TransientSolution solution = Circuit.TransientSolution.Solve(circuit.Analyze(), h, Log);

                        simulation = new Circuit.Simulation(solution)
                        {
                            Log        = Log,
                            Input      = inputs.Keys,
                            Output     = probes.Select(i => i.V).Concat(OutputChannels.Select(i => i.Signal)),
                            Oversample = Oversample,
                            Iterations = Iterations,
                        };
                    }
                    catch (Exception Ex)
                    {
                        Log.WriteException(Ex);
                    }
                });
            }
        }