diff --git a/VectoCore/VectoCore/Configuration/Constants.cs b/VectoCore/VectoCore/Configuration/Constants.cs index 150b39398b0faec56f498fb2f9edc78f43c99893..d8b0f2f0aacfbbd861ec2d399228573b117f09c3 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 b2072fb3c0550293bca801894d1b5af075d63884..5726ab35655ef6f6168f73b2537034431e466b64 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 47ba95d989897ddc8ed9804e754225ddcb23a88a..3237bc773b1a9ed346e2c5cf97478d88eb2c5ac6 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 31a73f78d5bcd38017592d788635af74350649ee..3dc38204ca63f0b23e93b9893343ac66fb3abdf4 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 ad1dc7fa068d2183578f1baf8d0cee15bee61268..d5eb87ca328db6894fce02ff07e0b2fb22170559 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 4056d61288a3efc3d51f731fef9a14ed6b943c26..82e5d44bb4f97ecece54c980879e1bc9bd399750 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 950d2c8f414317474f9f32968eebba533a137e45..883f245c7488f40b2679d581dd6646382ac68f10 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);