public bool HaveSpiceProperties(string expression, EvaluationContext context)
        {
            var parser    = _factory.Create(context, false);
            var variables = parser.GetVariables(expression);

            var voltageExportFactory = new VoltageExporter();
            var currentExportFactory = new CurrentExporter();

            foreach (var variable in variables)
            {
                var variableName = variable.ToLower();

                if (currentExportFactory.CreatedTypes.Any(type => variableName.StartsWith(type)))
                {
                    return(true);
                }

                if (voltageExportFactory.CreatedTypes.Any(type => variableName.StartsWith(type)))
                {
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 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);
            }
        }
Ejemplo n.º 3
0
        private void ExportProcess(List <DataTuple> data)
        {
            try
            {
                ProgressBarMaximum         = data.Count;
                CurrentExporter.ExportPath = ExportPath;
                CurrentExporter.Init("OutData");

                IsStartButtonEnabled = false;
                IsStopButtonEnabled  = true;
                IsPauseButtonEnabled = true;

                for (var index = 0; index < data.Count; ++index)
                {
                    //check if we need to pause
                    WaitHandle.WaitAny(new WaitHandle[] { pauseEvent, cancelEvent });

                    if (cancelationRequested)
                    {
                        PLogger.Log("Export cancellation requested");
                        cancelationRequested = false;
                        ProgressBarValue     = 0;
                        return;
                    }

                    CurrentExporter.Export(data[index]);
                    ProgressBarValue = index;
                }

                IsStartButtonEnabled = true;
                IsStopButtonEnabled  = false;
                IsPauseButtonEnabled = false;

                ProgressBarValue = 0;
            }
            catch (Exception ex)
            {
                MessageBoxInstance.Raise(ex.Message);
                PLogger.Log(ex.Message);
            }
        }
Ejemplo n.º 4
0
        private void OnVariableFound(object sender, SpiceSharpBehavioral.Builders.Direct.VariableFoundEventArgs <double> e)
        {
            if (e.Node.NodeType != NodeTypes.Voltage && e.Node.NodeType != NodeTypes.Current && e.Node.NodeType != NodeTypes.Property)
            {
                var found = Variables.SingleOrDefault(variable => StringComparerProvider.Get(_caseSettings.IsParameterNameCaseSensitive).Equals(variable.Name, e.Node.Name));
                if (found != null)
                {
                    e.Result = found.Value();
                }
            }
            else
            {
                if (Context.Simulation == null)
                {
                    e.Result = 0;
                }
                else
                {
                    if (e.Node.NodeType == NodeTypes.Current)
                    {
                        var name = e.Node.Name;

                        var parameters      = new ParameterCollection();
                        var vectorParameter = new VectorParameter();
                        vectorParameter.Elements.Add(new IdentifierParameter(e.Node.Name.ToString()));
                        parameters.Add(vectorParameter);

                        string key = $"{Context.Name}_I_{parameters}_{Context.Simulation?.Name}";

                        if (_exporterInstances.TryGetValue(key, out Export cachedExport))
                        {
                            e.Result = cachedExport.Extract();
                        }
                        else
                        {
                            var currentExporter = new CurrentExporter();

                            var export = currentExporter.CreateExport(
                                key,
                                "I",
                                parameters,
                                Context,
                                _caseSettings);

                            _exporterInstances[key] = export;

                            e.Result = export.Extract();
                        }
                    }
                    else if (e.Node.NodeType == NodeTypes.Voltage)
                    {
                        var name = e.Node.Name;

                        var variable = Variables.FirstOrDefault(v => v.Name == name);
                        if (variable != null)
                        {
                            name = variable.Value().ToString();
                        }

                        var parameters      = new ParameterCollection();
                        var vectorParameter = new VectorParameter();
                        vectorParameter.Elements.Add(new IdentifierParameter(name));
                        parameters.Add(vectorParameter);

                        string key = $"{Context.Name}_V_{parameters}_{Context.Simulation?.Name}";

                        if (_exporterInstances.TryGetValue(key, out Export cachedExport))
                        {
                            e.Result = cachedExport.Extract();
                        }
                        else
                        {
                            var currentExporter = new VoltageExporter();

                            var export = currentExporter.CreateExport(
                                key,
                                "V",
                                parameters,
                                Context,
                                _caseSettings);

                            _exporterInstances[key] = export;

                            try
                            {
                                e.Result = export.Extract();
                            }
                            catch (Exception ex)
                            {
                                if (ThrowOnErrors)
                                {
                                    throw;
                                }

                                e.Result = 0;
                            }
                        }
                    }
                }
            }
        }