Example #1
0
        protected override double BuildNode(Node node)
        {
            if (node is PropertyNode propertyNode)
            {
                var    modelName    = propertyNode.Name;
                var    propertyName = propertyNode.PropertyName;
                string key          = $"{Context.Name}_@_{modelName}_{propertyName}";

                if (_exporterInstances.TryGetValue(key, out Export cachedExport) && cachedExport.Simulation != null)
                {
                    return(cachedExport.Extract());
                }
                else
                {
                    var propertyExporter = new PropertyExporter();
                    var parameters       = new ParameterCollection();
                    var vectorParameter  = new VectorParameter();
                    vectorParameter.Elements.Add(new IdentifierParameter(modelName));
                    vectorParameter.Elements.Add(new IdentifierParameter(propertyName));
                    parameters.Add(vectorParameter);
                    var export = propertyExporter.CreateExport(
                        key,
                        "@",
                        parameters,
                        Context,
                        _caseSettings);

                    _exporterInstances[key] = export;

                    return(export.Extract());
                }
            }

            return(base.BuildNode(node));
        }
Example #2
0
        private void ApplySpiceProperty(EvaluationContext context, SpicePropertyFoundEventArgs <double> arg, bool applyVoltage)
        {
            var parameters = GetSpicePropertyParameters(context, arg);

            var propertyName = arg.Property.Identifier.ToLower();

            string key = $"{context.Name}_{propertyName}_{parameters}_{context.Simulation?.Name}";

            if (_exporterInstances.TryGetValue(key, out Export cachedExport))
            {
                ApplyExport(arg, cachedExport, applyVoltage);
            }
            else
            {
                var      voltageExportFactory = new VoltageExporter();
                var      currentExportFactory = new CurrentExporter();
                var      propertyExporter     = new PropertyExporter();
                Exporter factory = null;

                if (currentExportFactory.CreatedTypes.Contains(propertyName))
                {
                    factory = currentExportFactory;
                }

                if (voltageExportFactory.CreatedTypes.Contains(propertyName))
                {
                    factory = voltageExportFactory;
                }

                if (propertyName == "@")
                {
                    factory = propertyExporter;
                }

                if (factory == null)
                {
                    throw new SpiceSharpParserException($"Unknown spice property {propertyName}");
                }

                var export = factory.CreateExport(
                    $"{propertyName}_{parameters}",
                    propertyName,
                    parameters,
                    context,
                    _caseSettings);

                _exporterInstances[key] = export;

                ApplyExport(arg, export, applyVoltage);
            }
        }