private EvaluationContext GetEvaluationContext() { var nodeNameGenerator = new MainCircuitNodeNameGenerator( new[] { "0" }, Settings.Reading.CaseSensitivity.IsNodeNameCaseSensitive); var objectNameGenerator = new ObjectNameGenerator(string.Empty); INameGenerator nameGenerator = new NameGenerator(nodeNameGenerator, objectNameGenerator); var expressionParserFactory = new ExpressionParserFactory(Settings.Reading.CaseSensitivity); EvaluationContext preprocessorContext = new SpiceEvaluationContext( string.Empty, Settings.Reading.EvaluatorMode, Settings.Reading.CaseSensitivity, new Randomizer( Settings.Reading.CaseSensitivity.IsDistributionNameCaseSensitive, seed: Settings.Reading.Seed), expressionParserFactory, new ExpressionFeaturesReader(expressionParserFactory), new ExpressionValueProvider(expressionParserFactory), nameGenerator, null); return(preprocessorContext); }
/// <summary> /// Translates Netlist object mode to SpiceSharp netlist. /// </summary> /// <param name="netlist">A object model of the netlist.</param> /// <returns> /// A new SpiceSharp netlist. /// </returns> public SpiceModel <SpiceSharp.Circuit, Simulation> Read(SpiceNetlist netlist) { if (netlist == null) { throw new System.ArgumentNullException(nameof(netlist)); } // Get result netlist var result = new SpiceModel <Circuit, Simulation>( new Circuit(StringComparerProvider.Get(Settings.CaseSensitivity.IsEntityNameCaseSensitive)), netlist.Title); // Get reading context var resultService = new ResultService(result); var nodeNameGenerator = new MainCircuitNodeNameGenerator( new [] { "0" }, Settings.CaseSensitivity.IsNodeNameCaseSensitive); var objectNameGenerator = new ObjectNameGenerator(string.Empty); INameGenerator nameGenerator = new NameGenerator(nodeNameGenerator, objectNameGenerator); IRandomizer randomizer = new Randomizer( Settings.CaseSensitivity.IsDistributionNameCaseSensitive, seed: Settings.Seed); IExpressionParserFactory expressionParserFactory = new ExpressionParserFactory(Settings.CaseSensitivity); IExpressionFeaturesReader expressionFeaturesReader = new ExpressionFeaturesReader(expressionParserFactory); IExpressionValueProvider expressionValueProvider = new ExpressionValueProvider(expressionParserFactory); EvaluationContext expressionContext = new SpiceEvaluationContext( string.Empty, Settings.EvaluatorMode, Settings.CaseSensitivity, randomizer, expressionParserFactory, expressionFeaturesReader, expressionValueProvider, nameGenerator, resultService); var simulationEvaluationContexts = new SimulationEvaluationContexts(expressionContext); ISimulationPreparations simulationPreparations = new SimulationPreparations( new EntityUpdates(Settings.CaseSensitivity.IsParameterNameCaseSensitive, simulationEvaluationContexts), new SimulationsUpdates(simulationEvaluationContexts)); ICircuitEvaluator circuitEvaluator = new CircuitEvaluator(simulationEvaluationContexts, expressionContext); ISpiceStatementsReader statementsReader = new SpiceStatementsReader(Settings.Mappings.Controls, Settings.Mappings.Models, Settings.Mappings.Components); IWaveformReader waveformReader = new WaveformReader(Settings.Mappings.Waveforms); ICircuitContext circuitContext = new CircuitContext( "Root circuit context", null, circuitEvaluator, simulationPreparations, resultService, nameGenerator, statementsReader, waveformReader, Settings.CaseSensitivity, Settings.Mappings.Exporters, Settings.WorkingDirectory, null); // Set initial seed circuitContext.Evaluator.Seed = Settings.Seed; // Read statements form input netlist using created context circuitContext.Read(netlist.Statements, Settings.Orderer); // Set final seed result.Seed = circuitContext.Evaluator.Seed; return(result); }