From 9fa8284f1d4b038f8025eb6269b9bfcdc6320574 Mon Sep 17 00:00:00 2001 From: "VKMTHD\\haraldmartini" <harald.martini@student.tugraz.at> Date: Fri, 20 Jan 2023 11:41:50 +0100 Subject: [PATCH] added lookup class for medium lorry electric system --- .../AuxiliaryDataAdapter.cs | 7 +- .../Declaration/Auxiliaries/ElectricSystem.cs | 137 +++-- .../Models/Declaration/DeclarationDataTest.cs | 510 +++++++++--------- .../Models/Simulation/AuxTests.cs | 2 +- 4 files changed, 365 insertions(+), 291 deletions(-) diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs index 270608f4bc..b04a8036f6 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs @@ -175,7 +175,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen AddPneumaticSystem(mission, jobType, auxData, alternatorEfficiency, aux,retVal); break; case AuxiliaryType.ElectricSystem: - AddElectricSystem(mission, jobType, aux, auxData, alternatorEfficiency, retVal); + AddElectricSystem(mission, hdvClass, jobType, aux, auxData, alternatorEfficiency, retVal); break; default: continue; } @@ -206,11 +206,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen } - private static void AddElectricSystem(MissionType mission, VectoSimulationJobType vectoSimulationJobType, + private static void AddElectricSystem(MissionType mission, VehicleClass hdvClass, + VectoSimulationJobType vectoSimulationJobType, VectoRunData.AuxData aux, IAuxiliaryDeclarationInputData auxData, double alternatorEfficiency, List<VectoRunData.AuxData> auxDataList) { - aux.PowerDemandMech = DeclarationData.ElectricSystem.Lookup(mission, auxData.Technology.FirstOrDefault()).PowerDemand; + aux.PowerDemandMech = DeclarationData.ElectricSystem.Lookup(hdvClass, mission, auxData.Technology.FirstOrDefault()).PowerDemand; aux.ID = Constants.Auxiliaries.IDs.ElectricSystem; aux.PowerDemandElectric = aux.PowerDemandMech * alternatorEfficiency; aux.ConnectToREESS = vectoSimulationJobType.IsOneOf(VectoSimulationJobType.BatteryElectricVehicle, diff --git a/VectoCore/VectoCore/Models/Declaration/Auxiliaries/ElectricSystem.cs b/VectoCore/VectoCore/Models/Declaration/Auxiliaries/ElectricSystem.cs index bfb6a16b57..d963419a6b 100644 --- a/VectoCore/VectoCore/Models/Declaration/Auxiliaries/ElectricSystem.cs +++ b/VectoCore/VectoCore/Models/Declaration/Auxiliaries/ElectricSystem.cs @@ -38,66 +38,123 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.Declaration.Auxiliaries { - public sealed class ElectricSystem : LookupData<MissionType, string, AuxDemandEntry>, IDeclarationAuxiliaryTable - { - private readonly Alternator _alternator = new Alternator(); - protected override string ResourceId => DeclarationData.DeclarationDataResourcePrefix + ".VAUX.ES-Tech.csv"; - protected override string ErrorMessage => "Auxiliary Lookup Error: No value found for Electric System. Mission: '{0}', Technology: '{1}'"; - protected override void ParseData(DataTable table) - { - foreach (DataRow row in table.Rows) { - var name = row.Field<string>("technology"); - foreach (DataColumn col in table.Columns) { - if (col.Caption != "technology") { - Data[Tuple.Create(col.Caption.ParseEnum<MissionType>(), name)] = - new AuxDemandEntry() { PowerDemand = row.ParseDouble(col).SI<Watt>() }; - } - } - } - } - public override AuxDemandEntry Lookup(MissionType missionType, string technology = null) + + public sealed class ElectricSystem : IDeclarationAuxiliaryTable + { + //private readonly Alternator _alternator = new Alternator(); + private readonly ElectricSystemHeavyLorry _heavyLorry = new ElectricSystemHeavyLorry(); + private readonly ElectricSystemMediumLorry _mediumLorry = new ElectricSystemMediumLorry(); + + + + public AuxDemandEntry Lookup(VehicleClass vehicleClass, MissionType missionType, string technology = null) { - if (string.IsNullOrWhiteSpace(technology)) { + if (string.IsNullOrWhiteSpace(technology)) + { technology = "Standard technology"; } - var value = base.Lookup(missionType, technology); - return new AuxDemandEntry() { PowerDemand = value.PowerDemand }; - } + + if (vehicleClass.IsMediumLorry()) { + return _mediumLorry.Lookup(missionType, technology); + } else { + return _heavyLorry.Lookup(missionType, technology); + } + } internal sealed class Alternator : LookupData<MissionType, string, double> + { + protected override string ResourceId => + DeclarationData.DeclarationDataResourcePrefix + ".VAUX.ALT-Tech.csv"; + + protected override string ErrorMessage => + "Auxiliary Lookup Error: No value found for Alternator. Mission: '{0}', Technology: '{1}'"; + + protected override void ParseData(DataTable table) + { + foreach (DataRow row in table.Rows) + { + var name = row.Field<string>("technology"); + foreach (DataColumn col in table.Columns) + { + if (col.Caption != "technology") + { + Data[Tuple.Create(col.Caption.ParseEnum<MissionType>(), name)] = row.ParseDouble(col); + } + } + } + } + + public override double Lookup(MissionType missionType, string technology = null) + { + if (string.IsNullOrWhiteSpace(technology)) + { + technology = "Standard alternator efficiency"; + } + + return base.Lookup(missionType, technology); + } + } + + + #region Implementation of IDeclarationAuxiliaryTable + + public string[] GetTechnologies() { - protected override string ResourceId => DeclarationData.DeclarationDataResourcePrefix + ".VAUX.ALT-Tech.csv"; + return _heavyLorry.GetTechnologies(); + } + + #endregion + } + + + internal abstract class ElectricSystemLookup : LookupData<MissionType, string, AuxDemandEntry> + { + - protected override string ErrorMessage => "Auxiliary Lookup Error: No value found for Alternator. Mission: '{0}', Technology: '{1}'"; + protected override string ErrorMessage => + "Auxiliary Lookup Error: No value found for Electric System. Mission: '{0}', Technology: '{1}'"; - protected override void ParseData(DataTable table) + protected override void ParseData(DataTable table) + { + foreach (DataRow row in table.Rows) { - foreach (DataRow row in table.Rows) { - var name = row.Field<string>("technology"); - foreach (DataColumn col in table.Columns) { - if (col.Caption != "technology") { - Data[Tuple.Create(col.Caption.ParseEnum<MissionType>(), name)] = row.ParseDouble(col); + var name = row.Field<string>("technology"); + foreach (DataColumn col in table.Columns) + { + if (col.Caption != "technology") + { + if (row[col].ToString() == "---") { + continue; } + Data[Tuple.Create(col.Caption.ParseEnum<MissionType>(), name)] = + new AuxDemandEntry() { + PowerDemand = row.ParseDouble(col).SI<Watt>() + }; } } } - - public override double Lookup(MissionType missionType, string technology = null) - { - if (string.IsNullOrWhiteSpace(technology)) { - technology = "Standard alternator efficiency"; - } - return base.Lookup(missionType, technology); - } } public string[] GetTechnologies() { return Data.Keys.Select(x => x.Item2).Distinct().ToArray(); } - } -} \ No newline at end of file + + } + + + internal class ElectricSystemHeavyLorry : ElectricSystemLookup + { + protected override string ResourceId => DeclarationData.DeclarationDataResourcePrefix + ".VAUX.ES-Tech.csv"; + + } + + internal class ElectricSystemMediumLorry : ElectricSystemLookup + { + protected override string ResourceId => DeclarationData.DeclarationDataResourcePrefix + ".VAUX.ES-Tech_Medium.csv"; + } +} diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs index bb9b4711e9..71a9b5fc8e 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs @@ -51,289 +51,305 @@ using TUGraz.VectoCore.Tests.Utils; namespace TUGraz.VectoCore.Tests.Models.Declaration { - [TestFixture] + [TestFixture] [Parallelizable(ParallelScope.All)] - public class DeclarationDataTest - { - private const double Tolerance = 0.0001; - - private readonly MissionType[] _missions = { - MissionType.LongHaul, - MissionType.RegionalDelivery, - MissionType.UrbanDelivery, - MissionType.MunicipalUtility, - MissionType.Construction, - }; - - [OneTimeSetUp] - public void RunBeforeAnyTests() - { - Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); - } - + public class DeclarationDataTest + { + private const double Tolerance = 0.0001; + + private readonly MissionType[] _missions = { + MissionType.LongHaul, + MissionType.RegionalDelivery, + MissionType.UrbanDelivery, + MissionType.MunicipalUtility, + MissionType.Construction, + }; + + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } - [TestCase("285/60 R22.5", 10.6, 0.914, 3.03, 0.440766), - TestCase("285/70 R19.5", 7.9, 0.895, 3.05, 0.434453), - TestCase("395/85 R20", 27.9, 1.18, 3.05, 0.572798)] - public void WheelDataTest(string wheels, double inertia, double wheelsDiameter, double circumferenceFactor, - double expectedDynamicRadius) - { - var tmp = DeclarationData.Wheels.Lookup(wheels); - AssertHelper.AreRelativeEqual(inertia, tmp.Inertia); - AssertHelper.AreRelativeEqual(wheelsDiameter, tmp.WheelsDiameter); - AssertHelper.AreRelativeEqual(circumferenceFactor, tmp.CircumferenceFactor); - Assert.AreEqual(expectedDynamicRadius, tmp.DynamicTyreRadius.Value(), 1e-6); - } + [TestCase("285/60 R22.5", 10.6, 0.914, 3.03, 0.440766), + TestCase("285/70 R19.5", 7.9, 0.895, 3.05, 0.434453), + TestCase("395/85 R20", 27.9, 1.18, 3.05, 0.572798)] + public void WheelDataTest(string wheels, double inertia, double wheelsDiameter, double circumferenceFactor, + double expectedDynamicRadius) + { + var tmp = DeclarationData.Wheels.Lookup(wheels); - [ - // fixed points - TestCase(400, 0), - TestCase(800, 0.47), - TestCase(1000, 0.58), - TestCase(1200, 0.53), - TestCase(1400, 0.46), - TestCase(1500, 0.43), - TestCase(1750, 0.22), - TestCase(1800, 0.2), - TestCase(2000, 0.11), - TestCase(2500, 0.11), - // interpolate - TestCase(600, 0.235), - TestCase(900, 0.525), - TestCase(1100, 0.555), - TestCase(1300, 0.495), - TestCase(1450, 0.445), - TestCase(1625, 0.325), - TestCase(1775, 0.21), - TestCase(1900, 0.155), - TestCase(2250, 0.11), - ] - public void PT1Test(double rpm, double expectedPt1) - { - var pt1 = DeclarationData.PT1.Lookup(rpm.RPMtoRad()); - Assert.AreEqual(expectedPt1, pt1.Value.Value(), Tolerance); - Assert.IsFalse(pt1.Extrapolated); - } + AssertHelper.AreRelativeEqual(inertia, tmp.Inertia); + AssertHelper.AreRelativeEqual(wheelsDiameter, tmp.WheelsDiameter); + AssertHelper.AreRelativeEqual(circumferenceFactor, tmp.CircumferenceFactor); + Assert.AreEqual(expectedDynamicRadius, tmp.DynamicTyreRadius.Value(), 1e-6); + } - [TestCase(200), - TestCase(0), - TestCase(13000),] - public void PT1ExceptionsTest(double rpm) - { - // EXTRAPOLATE - var tmp = DeclarationData.PT1.Lookup(rpm.RPMtoRad()); - Assert.IsTrue(tmp.Extrapolated); - } + [ + // fixed points + TestCase(400, 0), + TestCase(800, 0.47), + TestCase(1000, 0.58), + TestCase(1200, 0.53), + TestCase(1400, 0.46), + TestCase(1500, 0.43), + TestCase(1750, 0.22), + TestCase(1800, 0.2), + TestCase(2000, 0.11), + TestCase(2500, 0.11), + // interpolate + TestCase(600, 0.235), + TestCase(900, 0.525), + TestCase(1100, 0.555), + TestCase(1300, 0.495), + TestCase(1450, 0.445), + TestCase(1625, 0.325), + TestCase(1775, 0.21), + TestCase(1900, 0.155), + TestCase(2250, 0.11), + ] + public void PT1Test(double rpm, double expectedPt1) + { + var pt1 = DeclarationData.PT1.Lookup(rpm.RPMtoRad()); + Assert.AreEqual(expectedPt1, pt1.Value.Value(), Tolerance); + Assert.IsFalse(pt1.Extrapolated); + } - [TestCase] - public void WHTCTest() - { - var whtc = DeclarationData.WHTCCorrection; + [TestCase(200), + TestCase(0), + TestCase(13000),] + public void PT1ExceptionsTest(double rpm) + { + // EXTRAPOLATE + var tmp = DeclarationData.PT1.Lookup(rpm.RPMtoRad()); + Assert.IsTrue(tmp.Extrapolated); + } - var factors = new - { - urban = new[] { 0.0, 0.17, 0.69, 0.98, 0.62, 1.0, 1.0, 1.0, 0.45, 0.0 }, - rural = new[] { 0.0, 0.3, 0.27, 0.0, 0.32, 0.0, 0.0, 0.0, 0.36, 0.22 }, - motorway = new[] { 1.0, 0.53, 0.04, 0.02, 0.06, 0.0, 0.0, 0.0, 0.19, 0.78 } - }; + [TestCase] + public void WHTCTest() + { + var whtc = DeclarationData.WHTCCorrection; - var r = new Random(); - for (var i = 0; i < _missions.Length; i++) - { - var urban = r.NextDouble() * 2; - var rural = r.NextDouble() * 2; - var motorway = r.NextDouble() * 2; - var whtcValue = whtc.Lookup(_missions[i], rural: rural, urban: urban, motorway: motorway); - Assert.AreEqual(urban * factors.urban[i] + rural * factors.rural[i] + motorway * factors.motorway[i], - whtcValue); - } - } + var factors = new { + urban = new[] { 0.0, 0.17, 0.69, 0.98, 0.62, 1.0, 1.0, 1.0, 0.45, 0.0 }, + rural = new[] { 0.0, 0.3, 0.27, 0.0, 0.32, 0.0, 0.0, 0.0, 0.36, 0.22 }, + motorway = new[] { 1.0, 0.53, 0.04, 0.02, 0.06, 0.0, 0.0, 0.0, 0.19, 0.78 } + }; - [TestCase] - public void WHTCLookupTestLongHaul() - { - var expected = 1.0057; + var r = new Random(); + for (var i = 0; i < _missions.Length; i++) { + var urban = r.NextDouble() * 2; + var rural = r.NextDouble() * 2; + var motorway = r.NextDouble() * 2; + var whtcValue = whtc.Lookup(_missions[i], rural: rural, urban: urban, motorway: motorway); + Assert.AreEqual(urban * factors.urban[i] + rural * factors.rural[i] + motorway * factors.motorway[i], + whtcValue); + } + } - var rural = 1.0265; - var urban = 1.0948; - var motorway = 1.0057; + [TestCase] + public void WHTCLookupTestLongHaul() + { + var expected = 1.0057; - var lookup = DeclarationData.WHTCCorrection.Lookup(MissionType.LongHaul, rural: rural, urban: urban, - motorway: motorway); - Assert.AreEqual(expected, lookup, 1e-8); - } + var rural = 1.0265; + var urban = 1.0948; + var motorway = 1.0057; - [TestCase] - public void WHTCLookupTestRegionalDelivery() - { - var expected = 1.02708700; + var lookup = DeclarationData.WHTCCorrection.Lookup(MissionType.LongHaul, rural: rural, urban: urban, + motorway: motorway); + Assert.AreEqual(expected, lookup, 1e-8); + } - var rural = 1.0265; - var urban = 1.0948; - var motorway = 1.0057; + [TestCase] + public void WHTCLookupTestRegionalDelivery() + { + var expected = 1.02708700; - var lookup = DeclarationData.WHTCCorrection.Lookup(MissionType.RegionalDelivery, rural: rural, urban: urban, - motorway: motorway); - Assert.AreEqual(expected, lookup, 1e-8); - } + var rural = 1.0265; + var urban = 1.0948; + var motorway = 1.0057; - [ - //TestCase("MediumLorryVan",), - //TestCase("MediumLorryRigid"), - TestCase("RigidSolo", 0.013526, 0.017746, -0.000666), - TestCase("RigidTrailer", 0.017125, 0.072275, -0.004148), - TestCase("TractorSemitrailer", 0.030042, 0.040817, -0.00213), - TestCase("CoachBus", -0.000794, 0.02109, -0.00109), - TestCase("MediumLorriesRigid",-0.0015 ,0.0086, -0.00029), - TestCase("MediumLorriesVan", 0.0032, 0.00532, -0.00028)] - - public void AirDrag_WithStringKey(string key, double a1, double a2, double a3) - { - var value = DeclarationData.AirDrag.Lookup(key); - AssertHelper.AreRelativeEqual(a1, value.A1); - AssertHelper.AreRelativeEqual(a2, value.A2); - AssertHelper.AreRelativeEqual(a3, value.A3); - } + var lookup = DeclarationData.WHTCCorrection.Lookup(MissionType.RegionalDelivery, rural: rural, urban: urban, + motorway: motorway); + Assert.AreEqual(expected, lookup, 1e-8); + } - [ - //TestCase("MediumLorryVan",), - //TestCase("MediumLorryRigid"), - TestCase("RigidSolo", 0.013526, 0.017746, -0.000666), - TestCase("TractorSemitrailer", 0.030042, 0.040817, -0.00213), - TestCase("RigidTrailer", 0.017125, 0.072275, -0.004148), - TestCase("CoachBus", -0.000794, 0.02109, -0.00109), - TestCase("MediumLorriesRigid", -0.0015, 0.0086, -0.00029), - TestCase("MediumLorriesVan", 0.0032, 0.00532, -0.00028)] - public void AirDrag_WithVehicleCategory(string parameterSet, double a1, double a2, double a3) - { - var value = DeclarationData.AirDrag.Lookup(parameterSet); - AssertHelper.AreRelativeEqual(a1, value.A1); - AssertHelper.AreRelativeEqual(a2, value.A2); - AssertHelper.AreRelativeEqual(a3, value.A3); - } + [ + //TestCase("MediumLorryVan",), + //TestCase("MediumLorryRigid"), + TestCase("RigidSolo", 0.013526, 0.017746, -0.000666), + TestCase("RigidTrailer", 0.017125, 0.072275, -0.004148), + TestCase("TractorSemitrailer", 0.030042, 0.040817, -0.00213), + TestCase("CoachBus", -0.000794, 0.02109, -0.00109), + TestCase("MediumLorriesRigid", -0.0015, 0.0086, -0.00029), + TestCase("MediumLorriesVan", 0.0032, 0.00532, -0.00028)] + + public void AirDrag_WithStringKey(string key, double a1, double a2, double a3) + { + var value = DeclarationData.AirDrag.Lookup(key); + AssertHelper.AreRelativeEqual(a1, value.A1); + AssertHelper.AreRelativeEqual(a2, value.A2); + AssertHelper.AreRelativeEqual(a3, value.A3); + } - [TestCase("TractorSemitrailer", 6.46, 0, 4.0, 7.71712257), - TestCase("TractorSemitrailer", 6.46, 60, 4.0, 7.71712257), - TestCase("TractorSemitrailer", 6.46, 75, 3.75, 7.35129203), - TestCase("TractorSemitrailer", 6.46, 100, 4.0, 7.03986404), - TestCase("TractorSemitrailer", 6.46, 62.1234, 4.0, 7.65751048), - TestCase("TractorSemitrailer", 6.46, 73.5432, 3.75, 7.37814098), - TestCase("TractorSemitrailer", 6.46, 92.8765, 4.0, 7.11234364), - TestCase("TractorSemitrailer", 6.46, 100.449, 4.0, 7.03571556), - TestCase("TractorSemitrailer", 6.46, 103, 3.6, 6.99454230), - TestCase("TractorSemitrailer", 6.46, 105, 3.9, 6.99177143), - TestCase("TractorSemitrailer", 6.46, 115, 4.0, 6.92267778), - TestCase("TractorSemitrailer", 6.46, 130, 4.0, 6.83867361),] - public void CrossWindCorrectionTest(string parameterSet, double crossSectionArea, double kmph, double height, - double expected) - { - var crossWindCorrectionCurve = new CrosswindCorrectionCdxALookup(crossSectionArea.SI<SquareMeter>(), - new AirdragDataAdapter().GetDeclarationAirResistanceCurve(parameterSet, crossSectionArea.SI<SquareMeter>(), - height.SI<Meter>()), - CrossWindCorrectionMode.DeclarationModeCorrection); + [ + //TestCase("MediumLorryVan",), + //TestCase("MediumLorryRigid"), + TestCase("RigidSolo", 0.013526, 0.017746, -0.000666), + TestCase("TractorSemitrailer", 0.030042, 0.040817, -0.00213), + TestCase("RigidTrailer", 0.017125, 0.072275, -0.004148), + TestCase("CoachBus", -0.000794, 0.02109, -0.00109), + TestCase("MediumLorriesRigid", -0.0015, 0.0086, -0.00029), + TestCase("MediumLorriesVan", 0.0032, 0.00532, -0.00028)] + public void AirDrag_WithVehicleCategory(string parameterSet, double a1, double a2, double a3) + { + var value = DeclarationData.AirDrag.Lookup(parameterSet); + AssertHelper.AreRelativeEqual(a1, value.A1); + AssertHelper.AreRelativeEqual(a2, value.A2); + AssertHelper.AreRelativeEqual(a3, value.A3); + } - var tmp = crossWindCorrectionCurve.EffectiveAirDragArea(kmph.KMPHtoMeterPerSecond()); - AssertHelper.AreRelativeEqual(expected, tmp.Value(), toleranceFactor: 1e-3); - } + [TestCase("TractorSemitrailer", 6.46, 0, 4.0, 7.71712257), + TestCase("TractorSemitrailer", 6.46, 60, 4.0, 7.71712257), + TestCase("TractorSemitrailer", 6.46, 75, 3.75, 7.35129203), + TestCase("TractorSemitrailer", 6.46, 100, 4.0, 7.03986404), + TestCase("TractorSemitrailer", 6.46, 62.1234, 4.0, 7.65751048), + TestCase("TractorSemitrailer", 6.46, 73.5432, 3.75, 7.37814098), + TestCase("TractorSemitrailer", 6.46, 92.8765, 4.0, 7.11234364), + TestCase("TractorSemitrailer", 6.46, 100.449, 4.0, 7.03571556), + TestCase("TractorSemitrailer", 6.46, 103, 3.6, 6.99454230), + TestCase("TractorSemitrailer", 6.46, 105, 3.9, 6.99177143), + TestCase("TractorSemitrailer", 6.46, 115, 4.0, 6.92267778), + TestCase("TractorSemitrailer", 6.46, 130, 4.0, 6.83867361),] + public void CrossWindCorrectionTest(string parameterSet, double crossSectionArea, double kmph, double height, + double expected) + { + var crossWindCorrectionCurve = new CrosswindCorrectionCdxALookup(crossSectionArea.SI<SquareMeter>(), + new AirdragDataAdapter().GetDeclarationAirResistanceCurve(parameterSet, + crossSectionArea.SI<SquareMeter>(), + height.SI<Meter>()), + CrossWindCorrectionMode.DeclarationModeCorrection); + + var tmp = crossWindCorrectionCurve.EffectiveAirDragArea(kmph.KMPHtoMeterPerSecond()); + AssertHelper.AreRelativeEqual(expected, tmp.Value(), toleranceFactor: 1e-3); + } - [TestCase("TractorSemitrailer", 5.8, 4.0)] - public void CrossWindGetDeclarationAirResistance(string parameterSet, double cdxa0, double height) - { - var curve = - new AirdragDataAdapter().GetDeclarationAirResistanceCurve(parameterSet, cdxa0.SI<SquareMeter>(), height.SI<Meter>()); + [TestCase("TractorSemitrailer", 5.8, 4.0)] + public void CrossWindGetDeclarationAirResistance(string parameterSet, double cdxa0, double height) + { + var curve = + new AirdragDataAdapter().GetDeclarationAirResistanceCurve(parameterSet, cdxa0.SI<SquareMeter>(), + height.SI<Meter>()); - AssertHelper.AreRelativeEqual(60.KMPHtoMeterPerSecond(), curve[1].Velocity); - AssertHelper.AreRelativeEqual(7.0418009.SI<SquareMeter>(), curve[1].EffectiveCrossSectionArea); + AssertHelper.AreRelativeEqual(60.KMPHtoMeterPerSecond(), curve[1].Velocity); + AssertHelper.AreRelativeEqual(7.0418009.SI<SquareMeter>(), curve[1].EffectiveCrossSectionArea); - AssertHelper.AreRelativeEqual(65.KMPHtoMeterPerSecond(), curve[2].Velocity); - AssertHelper.AreRelativeEqual(6.90971991.SI<SquareMeter>(), curve[2].EffectiveCrossSectionArea); + AssertHelper.AreRelativeEqual(65.KMPHtoMeterPerSecond(), curve[2].Velocity); + AssertHelper.AreRelativeEqual(6.90971991.SI<SquareMeter>(), curve[2].EffectiveCrossSectionArea); - AssertHelper.AreRelativeEqual(85.KMPHtoMeterPerSecond(), curve[6].Velocity); - AssertHelper.AreRelativeEqual(6.54224222.SI<SquareMeter>(), curve[6].EffectiveCrossSectionArea); + AssertHelper.AreRelativeEqual(85.KMPHtoMeterPerSecond(), curve[6].Velocity); + AssertHelper.AreRelativeEqual(6.54224222.SI<SquareMeter>(), curve[6].EffectiveCrossSectionArea); - AssertHelper.AreRelativeEqual(100.KMPHtoMeterPerSecond(), curve[9].Velocity); - AssertHelper.AreRelativeEqual(6.37434824.SI<SquareMeter>(), curve[9].EffectiveCrossSectionArea); + AssertHelper.AreRelativeEqual(100.KMPHtoMeterPerSecond(), curve[9].Velocity); + AssertHelper.AreRelativeEqual(6.37434824.SI<SquareMeter>(), curve[9].EffectiveCrossSectionArea); - AssertHelper.AreRelativeEqual(105.KMPHtoMeterPerSecond(), curve[10].Velocity); - AssertHelper.AreRelativeEqual(6.33112792.SI<SquareMeter>(), curve[10].EffectiveCrossSectionArea); + AssertHelper.AreRelativeEqual(105.KMPHtoMeterPerSecond(), curve[10].Velocity); + AssertHelper.AreRelativeEqual(6.33112792.SI<SquareMeter>(), curve[10].EffectiveCrossSectionArea); Assert.AreEqual(16, curve.Count); - } + } - [ - TestCase("TractorSemitrailer", 6.46, -0.1, 3.0), + [ + TestCase("TractorSemitrailer", 6.46, -0.1, 3.0), TestCase("TractorSemitrailer", 6.46, 200.1, 3.0), - ] - public void CrossWindCorrectionExceptionTest(string parameterSet, double crossSectionArea, double kmph, double height) - { - var crossWindCorrectionCurve = new CrosswindCorrectionCdxALookup(crossSectionArea.SI<SquareMeter>(), - new AirdragDataAdapter().GetDeclarationAirResistanceCurve(parameterSet, crossSectionArea.SI<SquareMeter>(), - height.SI<Meter>()), - CrossWindCorrectionMode.DeclarationModeCorrection); - - AssertHelper.Exception<VectoException>(() => - crossWindCorrectionCurve.EffectiveAirDragArea(kmph.KMPHtoMeterPerSecond())); - } - - [TestCase] - public void CrossWindAreaCdxANotSet_DeclarationMode() - { - var airDrag = new AirdragData() - { - CrossWindCorrectionMode = CrossWindCorrectionMode.DeclarationModeCorrection, - CrossWindCorrectionCurve = - new CrosswindCorrectionCdxALookup(null, null, CrossWindCorrectionMode.DeclarationModeCorrection) - }; + ] + public void CrossWindCorrectionExceptionTest(string parameterSet, double crossSectionArea, double kmph, + double height) + { + var crossWindCorrectionCurve = new CrosswindCorrectionCdxALookup(crossSectionArea.SI<SquareMeter>(), + new AirdragDataAdapter().GetDeclarationAirResistanceCurve(parameterSet, + crossSectionArea.SI<SquareMeter>(), + height.SI<Meter>()), + CrossWindCorrectionMode.DeclarationModeCorrection); + + AssertHelper.Exception<VectoException>(() => + crossWindCorrectionCurve.EffectiveAirDragArea(kmph.KMPHtoMeterPerSecond())); + } - Assert.IsTrue(airDrag.IsValid(), - "In Speed Dependent (Declaration Mode) Crosswind Correction the CdxA Value can be empty."); - } + [TestCase] + public void CrossWindAreaCdxANotSet_DeclarationMode() + { + var airDrag = new AirdragData() { + CrossWindCorrectionMode = CrossWindCorrectionMode.DeclarationModeCorrection, + CrossWindCorrectionCurve = + new CrosswindCorrectionCdxALookup(null, null, CrossWindCorrectionMode.DeclarationModeCorrection) + }; - [TestCase] - public void CrossWindAreaCdxANotSet_Other() - { - foreach (var correctionMode in EnumHelper.GetValues<CrossWindCorrectionMode>()) - { - if (correctionMode == CrossWindCorrectionMode.DeclarationModeCorrection) - { - continue; - } + Assert.IsTrue(airDrag.IsValid(), + "In Speed Dependent (Declaration Mode) Crosswind Correction the CdxA Value can be empty."); + } - var airDrag = new AirdragData - { - CrossWindCorrectionMode = correctionMode, - CrossWindCorrectionCurve = - new CrosswindCorrectionCdxALookup(null, null, correctionMode) - }; + [TestCase] + public void CrossWindAreaCdxANotSet_Other() + { + foreach (var correctionMode in EnumHelper.GetValues<CrossWindCorrectionMode>()) { + if (correctionMode == CrossWindCorrectionMode.DeclarationModeCorrection) { + continue; + } + + var airDrag = new AirdragData { + CrossWindCorrectionMode = correctionMode, + CrossWindCorrectionCurve = + new CrosswindCorrectionCdxALookup(null, null, correctionMode) + }; + + Assert.IsFalse(airDrag.IsValid(), + "Only in Speed Dependent (Declaration Mode) Crosswind Correction the CdxA Value can be empty."); + } + } - Assert.IsFalse(airDrag.IsValid(), - "Only in Speed Dependent (Declaration Mode) Crosswind Correction the CdxA Value can be empty."); - } - } + //Heavy Lorry + [TestCase(VehicleClass.Class6, MissionType.LongHaul, "Standard technology", 1200, 0.7), + TestCase(VehicleClass.Class6, MissionType.RegionalDelivery, "Standard technology", 1000, 0.7), + TestCase(VehicleClass.Class6, MissionType.UrbanDelivery, "Standard technology", 1000, 0.7), + TestCase(VehicleClass.Class6, MissionType.MunicipalUtility, "Standard technology", 1000, 0.7), + TestCase(VehicleClass.Class6, MissionType.Construction, "Standard technology", 1000, 0.7), + TestCase(VehicleClass.Class6, MissionType.LongHaul, "Standard technology - LED headlights, all", 1150, 0.7), + TestCase(VehicleClass.Class6, MissionType.RegionalDelivery, "Standard technology - LED headlights, all", 950, + 0.7), + TestCase(VehicleClass.Class6, MissionType.UrbanDelivery, "Standard technology - LED headlights, all", 950, 0.7), + TestCase(VehicleClass.Class6, MissionType.MunicipalUtility, "Standard technology - LED headlights, all", 950, + 0.7), + TestCase(VehicleClass.Class6, MissionType.Construction, "Standard technology - LED headlights, all", 950, 0.7),] + + //Medium Lorry + [TestCase(VehicleClass.Class51, MissionType.RegionalDelivery, "Standard technology", 600, 0.7), + TestCase(VehicleClass.Class52, MissionType.UrbanDelivery, "Standard technology", 600, 0.7), + TestCase(VehicleClass.Class53, MissionType.RegionalDelivery, "Standard technology - LED headlights, all", 550, + 0.7), + TestCase(VehicleClass.Class55, MissionType.UrbanDelivery, "Standard technology - LED headlights, all", 550, + 0.7)] + public void AuxElectricSystemTest(VehicleClass hdvClass, MissionType mission, string technology, double value, + double efficiency) + { + AssertHelper.AreRelativeEqual(value / efficiency, + DeclarationData.ElectricSystem.Lookup(hdvClass, mission, technology).PowerDemand.Value()); + } - [TestCase(MissionType.LongHaul, "Standard technology", 1200, 0.7), - TestCase(MissionType.RegionalDelivery, "Standard technology", 1000, 0.7), - TestCase(MissionType.UrbanDelivery, "Standard technology", 1000, 0.7), - TestCase(MissionType.MunicipalUtility, "Standard technology", 1000, 0.7), - TestCase(MissionType.Construction, "Standard technology", 1000, 0.7), - TestCase(MissionType.LongHaul, "Standard technology - LED headlights, all", 1150, 0.7), - TestCase(MissionType.RegionalDelivery, "Standard technology - LED headlights, all", 950, 0.7), - TestCase(MissionType.UrbanDelivery, "Standard technology - LED headlights, all", 950, 0.7), - TestCase(MissionType.MunicipalUtility, "Standard technology - LED headlights, all", 950, 0.7), - TestCase(MissionType.Construction, "Standard technology - LED headlights, all", 950, 0.7),] - public void AuxElectricSystemTest(MissionType mission, string technology, double value, double efficiency) - { - AssertHelper.AreRelativeEqual(value / efficiency, - DeclarationData.ElectricSystem.Lookup(mission, technology).PowerDemand.Value()); - } + //Heavy Lorry + [TestCase(VehicleClass.Class6, MissionType.Interurban, "Standard technology"), + TestCase(VehicleClass.Class6, MissionType.LongHaul, "Standard technology - Flux-Compensator")] + //Medium Lorry + [TestCase(VehicleClass.Class55, MissionType.LongHaul, "Standard technology"), + TestCase(VehicleClass.Class55, MissionType.UrbanDelivery, "Standard technology - Flux-Compensator"), + TestCase(VehicleClass.Class55, MissionType.LongHaul, "Standard technology - LED headlights, all")] - [TestCase(MissionType.Interurban, "Standard technology"), - TestCase(MissionType.LongHaul, "Standard technology - Flux-Compensator")] - public void AuxElectricSystem_NotExistingError(MissionType mission, string technology) + public void AuxElectricSystem_NotExistingError(VehicleClass hdvClass, MissionType mission, string technology) { - AssertHelper.Exception<VectoException>(() => { DeclarationData.ElectricSystem.Lookup(mission, technology); }); + AssertHelper.Exception<VectoException>(() => { DeclarationData.ElectricSystem.Lookup(hdvClass, mission, technology); }); } [TestCase("only the drive shaft of the PTO - shift claw, synchronizer, sliding gearwheel", 50), diff --git a/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs b/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs index 17fba4958f..d09beccc80 100644 --- a/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs +++ b/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs @@ -128,7 +128,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation aux.AddConstant("STP", DeclarationData.SteeringPump.Lookup(MissionType.LongHaul, hdvClass, new[] { "Variable displacement mech. controlled" }).mechanicalPumps); - aux.AddConstant("ES", DeclarationData.ElectricSystem.Lookup(mission).PowerDemand); + aux.AddConstant("ES", DeclarationData.ElectricSystem.Lookup(hdvClass, mission).PowerDemand); aux.AddConstant("AC", DeclarationData.HeatingVentilationAirConditioning.Lookup(mission, "Default", hdvClass).PowerDemand); -- GitLab