Exemple #1
0
        private BackgroundSimulationInput GetSimulationInput()
        {
            var input = new BackgroundSimulationInput();

            input.timeHorizon = double.Parse(tbTimeHorizon.Text);
            input.timeStep    = double.Parse(tbTimeStep.Text);

            pointsPerSecond = int.Parse(tbPointsPerSecond.Text);
            iterativeSimulator.initialMode = (ControlSystemMode)cbMode.SelectedValue;

            iterativeSimulator.waveType = (SignalType)cbInputType.SelectedValue;
            StepsParametersConverter stepsConverter = new StepsParametersConverter();

            double[] stepTimes, stepValues;
            stepsConverter.Convert(tbStepTimes.Text, tbStepValues.Text, out stepTimes, out stepValues);
            iterativeSimulator.SignalGenerator.SetStepsParameters(stepTimes, stepValues);

            double frequency, amplitude, offset;
            WavesParametersConverter wavesConverter = new WavesParametersConverter();

            wavesConverter.Convert(tbFrequency.Text, tbAmplitude.Text, tbOffset.Text, out frequency, out amplitude, out offset);
            iterativeSimulator.SignalGenerator.SetWavesParameters(frequency, amplitude, offset);

            input.iterativeSimulator = iterativeSimulator;
            return(input);
        }
Exemple #2
0
 public void Start(BackgroundSimulationInput iterativeSimulator)
 {
     if (!IsRunning())
     {
         worker.RunWorkerAsync(iterativeSimulator);
     }
 }
Exemple #3
0
        private void Worker_DoWork(object sender, DoWorkEventArgs e)
        {
            Debug.WriteLine("Worker started");
            worker.ReportProgress(0);

            // extract all data from worker input
            BackgroundSimulationInput input = (BackgroundSimulationInput)e.Argument;
            double             timeHorizon  = input.timeHorizon;
            double             timeStep     = input.timeStep;
            IterativeSimulator simulator    = input.iterativeSimulator;

            int iterations    = (int)Math.Floor(timeHorizon / timeStep) + 1;
            var executionTime = ExecTime.Run(() =>
            {
                // first iteration - simulation initialization
                simulator.PrepareSimulation(timeStep);
                progressCounter.Initialize(iterations);
                progressCounter.NextIteration();

                // perform calculations
                for (int i = 1; i < iterations; i++)
                {
                    if (worker.CancellationPending)
                    {
                        e.Cancel = true;
                        break;
                    }

                    simulator.NextIteration();
                    progressCounter.NextIteration();
                }
            });

            // return result
            BackgroundSimulationOutput output = new BackgroundSimulationOutput()
            {
                totalIterations = iterations,
                timeStep        = timeStep,
                executionTime   = executionTime,
                data            = simulator.GetData()
            };

            e.Result = output;
        }