From c051401aa4a16bd4d896209aacd7f07d13ace750 Mon Sep 17 00:00:00 2001 From: Michael Krisper <michael.krisper@tugraz.at> Date: Wed, 24 Aug 2016 11:48:09 +0200 Subject: [PATCH] Auxiliary-ID: Problem with different cases (lower/upper) solved --- .../VectoCore/Configuration/Constants.cs | 2 ++ .../InputData/FileIO/JSON/JSONInputData.cs | 10 ++-------- .../ComponentData/AuxiliaryDataReader.cs | 15 ++++---------- .../Models/Declaration/AuxiliaryTypeHelper.cs | 5 +---- .../Data/AuxSupplyPowerReader.cs | 20 ++++++++++--------- .../SimulationComponent/Data/AuxiliaryData.cs | 13 ++++-------- .../Impl/EngineAuxiliary.cs | 8 +++++--- 7 files changed, 29 insertions(+), 44 deletions(-) diff --git a/VectoCore/VectoCore/Configuration/Constants.cs b/VectoCore/VectoCore/Configuration/Constants.cs index 150b39398b..d8b0f2f0aa 100644 --- a/VectoCore/VectoCore/Configuration/Constants.cs +++ b/VectoCore/VectoCore/Configuration/Constants.cs @@ -43,6 +43,8 @@ namespace TUGraz.VectoCore.Configuration public static class Auxiliaries { + public const string Prefix = "AUX_"; + public static class IDs { public const string Fan = "FAN"; diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs index b2072fb3c0..5726ab3565 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs @@ -470,10 +470,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON { var retVal = new List<AuxiliaryDataInputData>(); foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) { - var type = (AuxiliaryType)0; - try { - type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type")); - } catch (ArgumentOutOfRangeException) {} + var type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type")); var auxData = new AuxiliaryDataInputData { ID = aux.GetEx<string>("ID"), @@ -573,10 +570,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON aux.GetEx<string>("ID")); } - var type = (AuxiliaryType)0; - try { - type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type")); - } catch (ArgumentOutOfRangeException) {} + var type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type")); var auxData = new AuxiliaryDataInputData { ID = aux.GetEx<string>("ID"), diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/AuxiliaryDataReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/AuxiliaryDataReader.cs index 47ba95d989..3237bc773b 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/AuxiliaryDataReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/AuxiliaryDataReader.cs @@ -10,7 +10,7 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.Reader.ComponentData { - public sealed class AuxiliaryDataReader + public static class AuxiliaryDataReader { public static AuxiliaryData Create(IAuxiliaryEngineeringInputData data) { @@ -34,7 +34,6 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData var map = ReadAuxMap(id, table); return new AuxiliaryData(transmissionRatio, efficiencyToEngine, efficiencyToSupply, map); - } catch (FileNotFoundException e) { throw new VectoException("Auxiliary file not found: " + fileName, e); } @@ -85,19 +84,13 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData public static class Fields { - /// <summary> - /// [1/min] - /// </summary> + /// <summary>[1/min]</summary> public const string AuxSpeed = "Auxiliary speed"; - /// <summary> - /// [kW] - /// </summary> + /// <summary>[kW]</summary> public const string MechPower = "Mechanical power"; - /// <summary> - /// [kW] - /// </summary> + /// <summary>[kW]</summary> public const string SupplyPower = "Supply power"; } } diff --git a/VectoCore/VectoCore/Models/Declaration/AuxiliaryTypeHelper.cs b/VectoCore/VectoCore/Models/Declaration/AuxiliaryTypeHelper.cs index 31a73f78d5..3dc38204ca 100644 --- a/VectoCore/VectoCore/Models/Declaration/AuxiliaryTypeHelper.cs +++ b/VectoCore/VectoCore/Models/Declaration/AuxiliaryTypeHelper.cs @@ -22,10 +22,7 @@ namespace TUGraz.VectoCore.Models.Declaration public static AuxiliaryType Parse(string s) { AuxiliaryType aux; - if (StrToAux.TryGetValue(s, out aux)) - return aux; - - throw new ArgumentOutOfRangeException("s", s, "Could not parse auxiliary type string."); + return StrToAux.TryGetValue(s, out aux) ? aux : AuxiliaryType.Fan; } public static string ToString(AuxiliaryType t) diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/AuxSupplyPowerReader.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/AuxSupplyPowerReader.cs index ad1dc7fa06..d5eb87ca32 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/AuxSupplyPowerReader.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/AuxSupplyPowerReader.cs @@ -31,10 +31,9 @@ using System.Collections.Generic; using System.Data; -using System.Globalization; -using System.Linq; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.SimulationComponent.Data { @@ -48,13 +47,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data /// </summary> public static Dictionary<string, Watt> GetAuxiliaries(this DataRow row) { - return row.Table.Columns.Cast<DataColumn>() - .Where(col => { - var s = col.ColumnName; - return s[0] == 'A' && s[1] == 'u' && s[2] == 'x' && s[3] == '_'; - }) - .ToDictionary(col => "Aux_" + col.ColumnName.Substring(4).ToUpper(), - col => SIBase<Watt>.Create(double.Parse(row.Field<string>(col), CultureInfo.InvariantCulture) * Constants.Kilo)); + var aux = new Dictionary<string, Watt>(); + var cols = row.Table.Columns; + var auxLen = Constants.Auxiliaries.Prefix.Length; + for (var i = 0; i < cols.Count; i++) { + var c = cols[i].ColumnName.ToUpper(); + if (c.Length >= auxLen && c.Substring(0, auxLen) == Constants.Auxiliaries.Prefix) { + aux[c.Substring(auxLen)] = (row.ParseDouble(i) * Constants.Kilo).SI<Watt>(); + } + } + return aux; } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/AuxiliaryData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/AuxiliaryData.cs index 4056d61288..82e5d44bb4 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/AuxiliaryData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/AuxiliaryData.cs @@ -29,15 +29,9 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Data; -using System.IO; -using System.Linq; -using System.Text; using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.Reader.ComponentData; @@ -49,13 +43,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data public sealed class AuxiliaryData { [Required, Range(double.Epsilon, 1)] - public double EfficiencyToSupply { get; set; } + public double EfficiencyToSupply { get; private set; } [Required, Range(double.Epsilon, double.MaxValue)] - public double TransmissionRatio { get; set; } + public double TransmissionRatio { get; private set; } [Required, Range(double.Epsilon, 1)] - public double EfficiencyToEngine { get; set; } + public double EfficiencyToEngine { get; private set; } [Required] private readonly DelaunayMap _map; @@ -84,6 +78,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data /// <param name="data">The data.</param> /// <param name="context">The validation context.</param> /// <returns></returns> + // ReSharper disable once UnusedMember.Global public static ValidationResult ValidateAuxMap(AuxiliaryData data, ValidationContext context) { var xValidationRules = new[] { new RangeAttribute(0, double.MaxValue) }; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs index 950d2c8f41..883f245c74 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs @@ -34,6 +34,7 @@ using System.Collections.Generic; using System.Linq; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.Models.Simulation; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data; @@ -104,14 +105,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public void AddMapping(string auxId, AuxiliaryData data) { - if (!DataBus.CycleData.LeftSample.AuxiliarySupplyPower.ContainsKey("Aux_" + auxId)) { - var error = string.Format("driving cycle does not contain column for auxiliary: {0}", auxId); + if (!DataBus.CycleData.LeftSample.AuxiliarySupplyPower.ContainsKey(auxId)) { + var error = string.Format("driving cycle does not contain column for auxiliary: {0}", + Constants.Auxiliaries.Prefix + auxId); Log.Error(error); throw new VectoException(error); } _auxDict[auxId] = speed => { - var powerSupply = DataBus.CycleData.LeftSample.AuxiliarySupplyPower["Aux_" + auxId]; + var powerSupply = DataBus.CycleData.LeftSample.AuxiliarySupplyPower[auxId]; var nAuxiliary = speed * data.TransmissionRatio; var powerAuxOut = powerSupply / data.EfficiencyToSupply; var powerAuxIn = data.GetPowerDemand(nAuxiliary, powerAuxOut); -- GitLab