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);
        }
Beispiel #2
0
        public void GenerateNoSubcircuit()
        {
            var generator = new MainCircuitNodeNameGenerator(new string[] { "0" }, true);

            // ground nodes
            Assert.Equal("0", generator.Generate("0"));
            Assert.Equal("gnd", generator.Generate("gnd"));
            Assert.Equal("Gnd", generator.Generate("Gnd"));
            Assert.Equal("GND", generator.Generate("GND"));

            // ordinary nodes
            Assert.Equal("a", generator.Generate("a"));
            Assert.Equal("Ab", generator.Generate("Ab"));
        }
Beispiel #3
0
        /// <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);
        }