Exemple #1
0
        private void ReadLin(Parameter variableParameter, ParameterCollection parameters, ICircuitContext context)
        {
            var pSweep = new ParameterSweep()
            {
                Parameter = variableParameter,
                Sweep     = new LinearSweep(
                    context.Evaluator.EvaluateDouble(parameters[0].Image),
                    context.Evaluator.EvaluateDouble(parameters[1].Image),
                    context.Evaluator.EvaluateDouble(parameters[2].Image)),
            };

            context.Result.SimulationConfiguration.ParameterSweeps.Add(pSweep);
        }
        private void AddOpPointToSeries(ParameterSweep firstParameterSweep, Export export, ICircuitContext context, Series series)
        {
            export.Simulation.ExportSimulationData += (object sender, ExportDataEventArgs e) =>
            {
                var expressionContext            = context.Evaluator.GetEvaluationContext(export.Simulation);
                var firstParameterSweepParameter = expressionContext.Parameters[firstParameterSweep.Parameter.Image];

                var value = context.Evaluator.GetEvaluationContext(export.Simulation).Evaluate(firstParameterSweepParameter);
                series.Points.Add(new Point()
                {
                    X = value, Y = export.Extract()
                });
            };
        }
        private void CreateOpSweepPlot(ParameterSweep firstParameterSweep, string variableName, List <Export> exports, ICircuitContext context)
        {
            var plot = new XyPlot("OP - Parameter sweep: " + variableName);

            foreach (var export in exports)
            {
                var series = new Series(export.Simulation.Name)
                {
                    XUnit = firstParameterSweep.Parameter.Image,
                    YUnit = export.QuantityUnit,
                };
                AddOpPointToSeries(firstParameterSweep, export, context, series);

                plot.Series.Add(series);
            }

            context.Result.AddPlot(plot);
        }
Exemple #4
0
        private DC CreateDCSimulation(string name, Control statement, ICircuitContext context)
        {
            int count = statement.Parameters.Count / 4;

            switch (statement.Parameters.Count - (4 * count))
            {
            case 0:
                if (statement.Parameters.Count == 0)
                {
                    context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, ".dc - Source Name expected", statement.LineInfo));
                    return(null);
                }

                break;

            case 1:
                context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, ".dc - Start value expected", statement.LineInfo));
                return(null);

            case 2:
                context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, ".dc - Stop value expected", statement.LineInfo));
                return(null);

            case 3:
                context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, ".dc - Step value expected", statement.LineInfo));
                return(null);
            }

            // Format: .DC SRCNAM VSTART VSTOP VINCR [SRC2 START2 STOP2 INCR2]
            List <ISweep> sweeps = new List <ISweep>();

            for (int i = 0; i < count; i++)
            {
                var            start = context.Evaluator.EvaluateDouble(statement.Parameters.Get((4 * i) + 1));
                var            stop  = context.Evaluator.EvaluateDouble(statement.Parameters.Get((4 * i) + 2));
                var            step  = context.Evaluator.EvaluateDouble(statement.Parameters.Get((4 * i) + 3));
                ParameterSweep sweep = new ParameterSweep(statement.Parameters.Get(4 * i).Image, Enumerable.Range(0, (int)((stop - start) / step) + 1).Select(index => start + (index * step)));

                sweeps.Add(sweep);
            }

            DC dc = new DC(name, sweeps);

            // TODO: Consult with Sven

            /*dc.OnParameterSearch += (sender, e) =>
             * {
             *  string sweepParameterName = e.Name;
             *  if (context.Evaluator.HaveParameter(dc, sweepParameterName))
             *  {
             *      e.TemperatureNeeded = true;
             *      e.Result = new EvaluationParameter(context.Evaluator.GetEvaluationContext(dc), sweepParameterName);
             *  }
             * };*/

            ConfigureCommonSettings(dc, context);
            ConfigureDcSettings(dc.DCParameters, context);

            context.Result.AddSimulation(dc);

            return(dc);
        }