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