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); }
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); }