diff --git a/VectoCore/VectoCoreTest/Integration/ATPowerTrain.cs b/VectoCore/VectoCoreTest/Integration/ATPowerTrain.cs index 2a79558071a616de25cd39f4025e73a51336b791..abfa03730ab76178750e975f0380fa14b93dcc6d 100644 --- a/VectoCore/VectoCoreTest/Integration/ATPowerTrain.cs +++ b/VectoCore/VectoCoreTest/Integration/ATPowerTrain.cs @@ -29,222 +29,223 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.InputData.Reader; -using TUGraz.VectoCore.InputData.Reader.ComponentData; -using TUGraz.VectoCore.Models.Declaration; -using TUGraz.VectoCore.Models.Simulation.Data; -using TUGraz.VectoCore.Models.Simulation.Impl; -using TUGraz.VectoCore.Models.SimulationComponent.Data; -using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; -using TUGraz.VectoCore.Models.SimulationComponent.Impl; -using TUGraz.VectoCore.OutputData; -using TUGraz.VectoCore.OutputData.FileIO; -using TUGraz.VectoCore.Tests.Utils; -using TUGraz.VectoCore.Utils; -using Wheels = TUGraz.VectoCore.Models.SimulationComponent.Impl.Wheels; - -namespace TUGraz.VectoCore.Tests.Integration -{ - public class ATPowerTrain - { - protected static readonly PerSecond MaxTcSpeed = 1500.RPMtoRad(); - - public const string AccelerationFile = @"TestData\Components\Truck.vacc"; - public const string EngineFile = @"TestData\Components\AT_GBX\Engine.veng"; - //public const string AxleGearLossMap = @"TestData\Components\AT_GBX\Axle.vtlm"; - //public const string GearboxIndirectLoss = @"TestData\Components\AT_GBX\Indirect Gear.vtlm"; - //public const string GearboxDirectLoss = @"TestData\Components\AT_GBX\Direct Gear.vtlm"; - public const string TorqueConverterGenericFile = @"TestData\Components\AT_GBX\TorqueConverter.vtcc"; - public const string TorqueConverterPowerSplitFile = @"TestData\Components\AT_GBX\TorqueConverterPowerSplit.vtcc"; - public const string GearboxShiftPolygonFile = @"TestData\Components\AT_GBX\AT-Shift.vgbs"; - - public static VectoRun CreateEngineeringRun(DrivingCycleData cycleData, GearboxType gbxType, string modFileName, - bool overspeed = false, KilogramSquareMeter gearBoxInertia = null) - { - var container = CreatePowerTrain(cycleData, gbxType, Path.GetFileNameWithoutExtension(modFileName), overspeed, - gearBoxInertia); - return new DistanceRun(container); - } - - public static VehicleContainer CreatePowerTrain(DrivingCycleData cycleData, GearboxType gbxType, string modFileName, - bool overspeed = false, KilogramSquareMeter gearBoxInertia = null) - { - var fileWriter = new FileOutputWriter(modFileName); - var modData = new ModalDataContainer(modFileName, FuelType.DieselCI, fileWriter) { - WriteModalResults = true, - HasTorqueConverter = true - }; - - var gearboxData = CreateGearboxData(gbxType); - var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(EngineFile, gearboxData.Gears.Count); - var axleGearData = CreateAxleGearData(gbxType); - - if (gearBoxInertia != null) { - gearboxData.Inertia = gearBoxInertia; - } - - var vehicleData = CreateVehicleData(3300.SI<Kilogram>()); - var airdragData = CreateAirdragData(); - var driverData = CreateDriverData(AccelerationFile, overspeed); - - var runData = new VectoRunData() { - JobRunId = 0, - AxleGearData = axleGearData, - VehicleData = vehicleData, - AirdragData = airdragData, - GearboxData = gearboxData, - EngineData = engineData, - JobName = modFileName, - Cycle = cycleData, - Retarder = new RetarderData() { Type = RetarderType.None }, - Aux = new List<VectoRunData.AuxData>() - }; - var container = new VehicleContainer(ExecutionMode.Engineering, modData) { - RunData = runData, - }; - var cycle = new DistanceBasedDrivingCycle(container, cycleData); - var engine = new CombustionEngine(container, engineData); - var tmp = cycle.AddComponent(new Driver(container, driverData, new DefaultDriverStrategy())) - .AddComponent(new Vehicle(container, vehicleData, airdragData)) - .AddComponent(new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia)) - .AddComponent(new Brakes(container)) - .AddComponent(new AxleGear(container, axleGearData)) - .AddComponent(new DummyRetarder(container)) - .AddComponent(new ATGearbox(container, new ATShiftStrategy(gearboxData, container), runData)) - .AddComponent(engine); - - var aux = new EngineAuxiliary(container); - aux.AddConstant("ZERO", 0.SI<Watt>()); - container.ModalData.AddAuxiliary("ZERO"); - - engine.Connect(aux.Port()); - - return container; - } - - public static GearboxData CreateGearboxData(GearboxType gbxType) - { - var ratios = gbxType == GearboxType.ATSerial - ? new[] { 3.4, 1.9, 1.42, 1.0, 0.7, 0.62 } - : new[] { 1.35, 1.0, 0.73 }; - var torqueConverterFile = gbxType == GearboxType.ATSerial - ? TorqueConverterGenericFile - : TorqueConverterPowerSplitFile; - return new GearboxData { - Type = gbxType == GearboxType.ATSerial ? GearboxType.ATSerial : GearboxType.ATPowerSplit, - Gears = ratios.Select((ratio, i) => - Tuple.Create((uint)i, - new GearData { +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.InputData.Reader; +using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; +using TUGraz.VectoCore.Models.SimulationComponent.Impl; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.Tests.Utils; +using TUGraz.VectoCore.Utils; +using Wheels = TUGraz.VectoCore.Models.SimulationComponent.Impl.Wheels; + +namespace TUGraz.VectoCore.Tests.Integration +{ + public class ATPowerTrain + { + protected static readonly PerSecond MaxTcSpeed = 1500.RPMtoRad(); + + public const string AccelerationFile = @"TestData\Components\Truck.vacc"; + public const string EngineFile = @"TestData\Components\AT_GBX\Engine.veng"; + //public const string AxleGearLossMap = @"TestData\Components\AT_GBX\Axle.vtlm"; + //public const string GearboxIndirectLoss = @"TestData\Components\AT_GBX\Indirect Gear.vtlm"; + //public const string GearboxDirectLoss = @"TestData\Components\AT_GBX\Direct Gear.vtlm"; + public const string TorqueConverterGenericFile = @"TestData\Components\AT_GBX\TorqueConverter.vtcc"; + public const string TorqueConverterPowerSplitFile = @"TestData\Components\AT_GBX\TorqueConverterPowerSplit.vtcc"; + public const string GearboxShiftPolygonFile = @"TestData\Components\AT_GBX\AT-Shift.vgbs"; + + public static VectoRun CreateEngineeringRun(DrivingCycleData cycleData, GearboxType gbxType, string modFileName, + bool overspeed = false, KilogramSquareMeter gearBoxInertia = null) + { + var container = CreatePowerTrain(cycleData, gbxType, Path.GetFileNameWithoutExtension(modFileName), overspeed, + gearBoxInertia); + return new DistanceRun(container); + } + + public static VehicleContainer CreatePowerTrain(DrivingCycleData cycleData, GearboxType gbxType, string modFileName, + bool overspeed = false, KilogramSquareMeter gearBoxInertia = null) + { + var fileWriter = new FileOutputWriter(modFileName); + var modData = new ModalDataContainer(modFileName, FuelType.DieselCI, fileWriter) { + WriteModalResults = true, + HasTorqueConverter = true + }; + + var gearboxData = CreateGearboxData(gbxType); + var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(EngineFile, gearboxData.Gears.Count); + var axleGearData = CreateAxleGearData(gbxType); + + if (gearBoxInertia != null) { + gearboxData.Inertia = gearBoxInertia; + } + + var vehicleData = CreateVehicleData(3300.SI<Kilogram>()); + var airdragData = CreateAirdragData(); + var driverData = CreateDriverData(AccelerationFile, overspeed); + + var runData = new VectoRunData() { + JobRunId = 0, + AxleGearData = axleGearData, + VehicleData = vehicleData, + AirdragData = airdragData, + GearboxData = gearboxData, + EngineData = engineData, + JobName = modFileName, + Cycle = cycleData, + Retarder = new RetarderData() { Type = RetarderType.None }, + Aux = new List<VectoRunData.AuxData>() + }; + var container = new VehicleContainer(ExecutionMode.Engineering, modData) { + RunData = runData, + }; + var cycle = new DistanceBasedDrivingCycle(container, cycleData); + var engine = new CombustionEngine(container, engineData); + var tmp = cycle.AddComponent(new Driver(container, driverData, new DefaultDriverStrategy())) + .AddComponent(new Vehicle(container, vehicleData, airdragData)) + .AddComponent(new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia)) + .AddComponent(new Brakes(container)) + .AddComponent(new AxleGear(container, axleGearData)) + .AddComponent(new DummyRetarder(container)) + .AddComponent(new ATGearbox(container, new ATShiftStrategy(gearboxData, container), runData)) + .AddComponent(engine); + + var aux = new EngineAuxiliary(container); + aux.AddConstant("ZERO", 0.SI<Watt>()); + container.ModalData.AddAuxiliary("ZERO"); + + engine.Connect(aux.Port()); + + return container; + } + + public static GearboxData CreateGearboxData(GearboxType gbxType) + { + var ratios = gbxType == GearboxType.ATSerial + ? new[] { 3.4, 1.9, 1.42, 1.0, 0.7, 0.62 } + : new[] { 1.35, 1.0, 0.73 }; + var torqueConverterFile = gbxType == GearboxType.ATSerial + ? TorqueConverterGenericFile + : TorqueConverterPowerSplitFile; + return new GearboxData { + Type = gbxType == GearboxType.ATSerial ? GearboxType.ATSerial : GearboxType.ATPowerSplit, + Gears = ratios.Select((ratio, i) => + Tuple.Create((uint)i, + new GearData { //MaxTorque = 2300.SI<NewtonMeter>(), - LossMap = ratio.IsEqual(1) - ? TransmissionLossMapReader.Create(0.96, ratio, string.Format("Gear {0}", i)) - : TransmissionLossMapReader.Create(0.98, ratio, string.Format("Gear {0}", i)), - Ratio = ratio, - ShiftPolygon = ShiftPolygonReader.ReadFromFile(GearboxShiftPolygonFile), - TorqueConverterRatio = i == 0 ? (gbxType == GearboxType.ATPowerSplit ? 1.0 : ratio) : double.NaN, - TorqueConverterGearLossMap = i == 0 - ? TransmissionLossMapReader.Create(gbxType == GearboxType.ATPowerSplit ? 1.0 : 0.98, ratio, - string.Format("Gear {0}", i)) - : null, - TorqueConverterShiftPolygon = i == 0 ? ShiftPolygonReader.ReadFromFile(GearboxShiftPolygonFile) : null - })) - .ToDictionary(k => k.Item1 + 1, v => v.Item2), - ShiftTime = 1.SI<Second>(), - Inertia = 0.SI<KilogramSquareMeter>(), - TractionInterruption = 0.SI<Second>(), - StartSpeed = 2.SI<MeterPerSecond>(), - StartAcceleration = 0.6.SI<MeterPerSquareSecond>(), - StartTorqueReserve = 0.2, - TorqueReserve = 0.2, - DownshiftAfterUpshiftDelay = DeclarationData.Gearbox.DownshiftAfterUpshiftDelay, - UpshiftAfterDownshiftDelay = DeclarationData.Gearbox.UpshiftAfterDownshiftDelay, - UpshiftMinAcceleration = DeclarationData.Gearbox.UpshiftMinAcceleration, - PowershiftShiftTime = 0.8.SI<Second>(), - TorqueConverterData = - TorqueConverterDataReader.ReadFromFile(torqueConverterFile, 1000.RPMtoRad(), - MaxTcSpeed, ExecutionMode.Engineering, gbxType == GearboxType.ATSerial ? 1 : 1 / ratios[0], - DeclarationData.Gearbox.UpshiftMinAcceleration, DeclarationData.Gearbox.UpshiftMinAcceleration) - }; - } - - private static AxleGearData CreateAxleGearData(GearboxType gbxType) - { - var ratio = gbxType == GearboxType.ATSerial ? 6.2 : 5.8; - return new AxleGearData { - AxleGear = new GearData { - Ratio = ratio, - LossMap = TransmissionLossMapReader.Create(0.95, ratio, "Axlegear"), - } - }; - } - - private static VehicleData CreateVehicleData(Kilogram loading) - { - var axles = new List<Axle> { - new Axle { - AxleWeightShare = 0.38, - Inertia = 20.SI<KilogramSquareMeter>(), - RollResistanceCoefficient = 0.007, - TwinTyres = false, - TyreTestLoad = 30436.0.SI<Newton>() - }, - new Axle { - AxleWeightShare = 0.62, - Inertia = 18.SI<KilogramSquareMeter>(), - RollResistanceCoefficient = 0.007, - TwinTyres = true, - TyreTestLoad = 30436.SI<Newton>() - }, - }; - return new VehicleData { - AxleConfiguration = AxleConfiguration.AxleConfig_4x2, - CurbWeight = 11500.SI<Kilogram>(), - Loading = loading, - DynamicTyreRadius = 0.465.SI<Meter>(), - AxleData = axles, - SavedInDeclarationMode = false - }; - } - - private static AirdragData CreateAirdragData() - { - return new AirdragData() { - CrossWindCorrectionCurve = - new CrosswindCorrectionCdxALookup(3.2634.SI<SquareMeter>(), - CrossWindCorrectionCurveReader.GetNoCorrectionCurve(3.2634.SI<SquareMeter>()), - CrossWindCorrectionMode.NoCorrection), - }; - } - - - private static DriverData CreateDriverData(string accelerationFile, bool overspeed = false) - { - return new DriverData { - AccelerationCurve = AccelerationCurveReader.ReadFromFile(accelerationFile), - LookAheadCoasting = new DriverData.LACData { - Enabled = true, - MinSpeed = 50.KMPHtoMeterPerSecond(), + LossMap = ratio.IsEqual(1) + ? TransmissionLossMapReader.Create(0.96, ratio, string.Format("Gear {0}", i)) + : TransmissionLossMapReader.Create(0.98, ratio, string.Format("Gear {0}", i)), + Ratio = ratio, + ShiftPolygon = ShiftPolygonReader.ReadFromFile(GearboxShiftPolygonFile), + TorqueConverterRatio = i == 0 ? (gbxType == GearboxType.ATPowerSplit ? 1.0 : ratio) : double.NaN, + TorqueConverterGearLossMap = i == 0 + ? TransmissionLossMapReader.Create(gbxType == GearboxType.ATPowerSplit ? 1.0 : 0.98, ratio, + string.Format("Gear {0}", i)) + : null, + TorqueConverterShiftPolygon = i == 0 ? ShiftPolygonReader.ReadFromFile(GearboxShiftPolygonFile) : null + })) + .ToDictionary(k => k.Item1 + 1, v => v.Item2), + ShiftTime = 1.SI<Second>(), + Inertia = 0.SI<KilogramSquareMeter>(), + TractionInterruption = 0.SI<Second>(), + StartSpeed = 2.SI<MeterPerSecond>(), + StartAcceleration = 0.6.SI<MeterPerSquareSecond>(), + StartTorqueReserve = 0.2, + TorqueReserve = 0.2, + DownshiftAfterUpshiftDelay = DeclarationData.Gearbox.DownshiftAfterUpshiftDelay, + UpshiftAfterDownshiftDelay = DeclarationData.Gearbox.UpshiftAfterDownshiftDelay, + UpshiftMinAcceleration = DeclarationData.Gearbox.UpshiftMinAcceleration, + PowershiftShiftTime = 0.8.SI<Second>(), + TorqueConverterData = + TorqueConverterDataReader.ReadFromFile(torqueConverterFile, 1000.RPMtoRad(), + MaxTcSpeed, ExecutionMode.Engineering, gbxType == GearboxType.ATSerial ? 1 : 1 / ratios[0], + DeclarationData.Gearbox.UpshiftMinAcceleration, DeclarationData.Gearbox.UpshiftMinAcceleration) + }; + } + + private static AxleGearData CreateAxleGearData(GearboxType gbxType) + { + var ratio = gbxType == GearboxType.ATSerial ? 6.2 : 5.8; + return new AxleGearData { + AxleGear = new GearData { + Ratio = ratio, + LossMap = TransmissionLossMapReader.Create(0.95, ratio, "Axlegear"), + } + }; + } + + private static VehicleData CreateVehicleData(Kilogram loading) + { + var axles = new List<Axle> { + new Axle { + AxleWeightShare = 0.38, + Inertia = 20.SI<KilogramSquareMeter>(), + RollResistanceCoefficient = 0.007, + TwinTyres = false, + TyreTestLoad = 30436.0.SI<Newton>() + }, + new Axle { + AxleWeightShare = 0.62, + Inertia = 18.SI<KilogramSquareMeter>(), + RollResistanceCoefficient = 0.007, + TwinTyres = true, + TyreTestLoad = 30436.SI<Newton>() + }, + }; + return new VehicleData { + AirDensity = DeclarationData.AirDensity, + AxleConfiguration = AxleConfiguration.AxleConfig_4x2, + CurbWeight = 11500.SI<Kilogram>(), + Loading = loading, + DynamicTyreRadius = 0.465.SI<Meter>(), + AxleData = axles, + SavedInDeclarationMode = false + }; + } + + private static AirdragData CreateAirdragData() + { + return new AirdragData() { + CrossWindCorrectionCurve = + new CrosswindCorrectionCdxALookup(3.2634.SI<SquareMeter>(), + CrossWindCorrectionCurveReader.GetNoCorrectionCurve(3.2634.SI<SquareMeter>()), + CrossWindCorrectionMode.NoCorrection), + }; + } + + + private static DriverData CreateDriverData(string accelerationFile, bool overspeed = false) + { + return new DriverData { + AccelerationCurve = AccelerationCurveReader.ReadFromFile(accelerationFile), + LookAheadCoasting = new DriverData.LACData { + Enabled = true, + MinSpeed = 50.KMPHtoMeterPerSecond(), //Deceleration = -0.5.SI<MeterPerSquareSecond>() - LookAheadDistanceFactor = DeclarationData.Driver.LookAhead.LookAheadDistanceFactor, - LookAheadDecisionFactor = new LACDecisionFactor() - }, - OverSpeedEcoRoll = overspeed - ? new DriverData.OverSpeedEcoRollData { - Mode = DriverMode.Overspeed, - MinSpeed = 50.KMPHtoMeterPerSecond(), - OverSpeed = 5.KMPHtoMeterPerSecond() - } - : new DriverData.OverSpeedEcoRollData { - Mode = DriverMode.Off - }, - }; - } - } + LookAheadDistanceFactor = DeclarationData.Driver.LookAhead.LookAheadDistanceFactor, + LookAheadDecisionFactor = new LACDecisionFactor() + }, + OverSpeedEcoRoll = overspeed + ? new DriverData.OverSpeedEcoRollData { + Mode = DriverMode.Overspeed, + MinSpeed = 50.KMPHtoMeterPerSecond(), + OverSpeed = 5.KMPHtoMeterPerSecond() + } + : new DriverData.OverSpeedEcoRollData { + Mode = DriverMode.Off + }, + }; + } + } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs b/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs index 5cdd090255da983b82dca553a3ef4ac7f88b7cae..f2f64156c4c3ac2c075b7b762af9d27189707a06 100644 --- a/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs +++ b/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs @@ -187,6 +187,7 @@ namespace TUGraz.VectoCore.Tests.Integration } }; return new VehicleData { + AirDensity = DeclarationData.AirDensity, AxleConfiguration = AxleConfiguration.AxleConfig_6x2, CurbWeight = 15700.SI<Kilogram>(), Loading = loading, diff --git a/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs b/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs index 1667a0f535f22004fcb8a329ee88f0909b78953a..01d338e7619542e875a9729859e7ace7f0a4da8c 100644 --- a/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs +++ b/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs @@ -81,7 +81,8 @@ namespace TUGraz.VectoCore.Tests.Integration }; var gearboxData = CreateGearboxData(); - var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(engineHighPower ? EngineFileHigh : EngineFile, gearboxData.Gears.Count); + var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(engineHighPower ? EngineFileHigh : EngineFile, + gearboxData.Gears.Count); var axleGearData = CreateAxleGearData(); if (gearBoxInertia != null) { gearboxData.Inertia = gearBoxInertia; @@ -189,6 +190,7 @@ namespace TUGraz.VectoCore.Tests.Integration } }; return new VehicleData { + AirDensity = DeclarationData.AirDensity, AxleConfiguration = AxleConfiguration.AxleConfig_6x2, //AerodynamicDragAera = 3.2634.SI<SquareMeter>(), //CrossWindCorrectionMode = CrossWindCorrectionMode.NoCorrection, @@ -205,7 +207,8 @@ namespace TUGraz.VectoCore.Tests.Integration { return new AirdragData() { CrossWindCorrectionCurve = - new CrosswindCorrectionCdxALookup(3.2634.SI<SquareMeter>(), CrossWindCorrectionCurveReader.GetNoCorrectionCurve(3.2634.SI<SquareMeter>()), + new CrosswindCorrectionCdxALookup(3.2634.SI<SquareMeter>(), + CrossWindCorrectionCurveReader.GetNoCorrectionCurve(3.2634.SI<SquareMeter>()), CrossWindCorrectionMode.NoCorrection), }; } diff --git a/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs b/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs index 7e350453665b6c3a3e6c50e7e6133d9119508c0b..a8c325b978b7d54b7252614ebd8cf23662f5ed2a 100644 --- a/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs +++ b/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs @@ -94,7 +94,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns }; cycle.AddComponent(new Driver(container, driverData, new DefaultDriverStrategy())) - .AddComponent(new Vehicle(container, vehicleData,airDragData)) + .AddComponent(new Vehicle(container, vehicleData, airDragData)) .AddComponent(new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia)) .AddComponent(new Brakes(container)) .AddComponent(new AxleGear(container, axleGearData)) @@ -159,7 +159,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns var cyclePort = cycle.OutPort(); cycle.AddComponent(new Driver(container, driverData, new DefaultDriverStrategy())) - .AddComponent(new Vehicle(container, vehicleData,airDragData)) + .AddComponent(new Vehicle(container, vehicleData, airDragData)) .AddComponent(new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia)) .AddComponent(new Brakes(container)) .AddComponent(new AxleGear(container, axleGearData)) @@ -405,7 +405,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns }; return new VehicleData { AxleConfiguration = AxleConfiguration.AxleConfig_6x2, - + AirDensity = DeclarationData.AirDensity, CurbWeight = 15700.SI<Kilogram>(), Loading = loading, DynamicTyreRadius = 0.52.SI<Meter>(), @@ -416,11 +416,12 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns private static AirdragData CreateAirdragData() { - return new AirdragData(){ + return new AirdragData() { CrossWindCorrectionCurve = new CrosswindCorrectionCdxALookup(3.2634.SI<SquareMeter>(), CrossWindCorrectionCurveReader.GetNoCorrectionCurve(3.2634.SI<SquareMeter>()), - CrossWindCorrectionMode.NoCorrection),}; + CrossWindCorrectionMode.NoCorrection), + }; } private static DriverData CreateDriverData(string accelerationFile) diff --git a/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs b/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs index c2d71d2899c22398f022107134bbf745dd1975c5..f08f921cafc0452b7280b181b7a926b0ae44c215 100644 --- a/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs +++ b/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs @@ -275,7 +275,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns }; return new VehicleData { AxleConfiguration = AxleConfiguration.AxleConfig_6x2, - + AirDensity = DeclarationData.AirDensity, CurbWeight = 15700.SI<Kilogram>(), Loading = loading, DynamicTyreRadius = 0.52.SI<Meter>(), diff --git a/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs b/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs index 2bb855d596e50825e1a2cbe00766433e7328c6d2..900a1a51d80eeb5cdc8a4f29509853b6f85fd342 100644 --- a/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs +++ b/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs @@ -222,6 +222,7 @@ namespace TUGraz.VectoCore.Tests.Integration } }; return new VehicleData { + AirDensity = DeclarationData.AirDensity, AxleConfiguration = AxleConfiguration.AxleConfig_4x2, CurbWeight = 7100.SI<Kilogram>() + massExtra, Loading = loading, diff --git a/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs index e3a0d787ceae63f165f705cd5d223d93344bdd1e..841ce58b226a59918162cab3b5d49f14dde246e1 100644 --- a/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs +++ b/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs @@ -29,507 +29,507 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.InputData.FileIO.JSON; -using TUGraz.VectoCore.InputData.Reader; -using TUGraz.VectoCore.InputData.Reader.ComponentData; -using TUGraz.VectoCore.Models.Declaration; -using TUGraz.VectoCore.Models.Simulation.Data; -using TUGraz.VectoCore.Models.Simulation.Impl; -using TUGraz.VectoCore.Models.SimulationComponent.Data; -using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; -using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; -using TUGraz.VectoCore.Models.SimulationComponent.Impl; -using TUGraz.VectoCore.OutputData; -using TUGraz.VectoCore.OutputData.FileIO; -using TUGraz.VectoCore.Tests.Utils; -using TUGraz.VectoCore.Utils; - -// ReSharper disable UnusedVariable - -// ReSharper disable AccessToModifiedClosure - -namespace TUGraz.VectoCore.Tests.Models.Simulation -{ - [TestClass] - public class MeasuredSpeedModeTest - { - /// <summary> - /// Test if the cycle file can be read. - /// </summary> - /// <remarks>VECTO-181</remarks> - [TestMethod] - public void MeasuredSpeed_ReadCycle_Gear() - { - // all data +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.JSON; +using TUGraz.VectoCore.InputData.Reader; +using TUGraz.VectoCore.InputData.Reader.ComponentData; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; +using TUGraz.VectoCore.Models.SimulationComponent.Impl; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.Tests.Utils; +using TUGraz.VectoCore.Utils; + +// ReSharper disable UnusedVariable + +// ReSharper disable AccessToModifiedClosure + +namespace TUGraz.VectoCore.Tests.Models.Simulation +{ + [TestClass] + public class MeasuredSpeedModeTest + { + /// <summary> + /// Test if the cycle file can be read. + /// </summary> + /// <remarks>VECTO-181</remarks> + [TestMethod] + public void MeasuredSpeed_ReadCycle_Gear() + { + // all data var inputData = @"<t>,<v>,<grad>,<Padd>,<n> ,<gear>,<vair_res>,<vair_beta>,<Aux_Alt> - 0 ,0 ,0 ,3.2018,595.75,0 ,0 ,0 ,0.504"; - TestCycleRead(inputData, CycleType.MeasuredSpeedGear); - - // vair only + 0 ,0 ,0 ,3.2018,595.75,0 ,0 ,0 ,0.504"; + TestCycleRead(inputData, CycleType.MeasuredSpeedGear); + + // vair only inputData = @"<t>,<v>,<grad>,<Padd>,<n> ,<gear>,<vair_res>,<vair_beta> - 0 ,0 ,0 ,3.2018,595.75,0 ,0 ,0 "; - TestCycleRead(inputData, CycleType.MeasuredSpeedGear, crossWindRequired: true); - - // vair required, but not there: error + 0 ,0 ,0 ,3.2018,595.75,0 ,0 ,0 "; + TestCycleRead(inputData, CycleType.MeasuredSpeedGear, crossWindRequired: true); + + // vair required, but not there: error inputData = @"<t>,<v>,<grad>,<Padd>,<n> ,<gear> - 0 ,0 ,0 ,3.2018,595.75,0"; - AssertHelper.Exception<VectoException>( - () => TestCycleRead(inputData, CycleType.MeasuredSpeedGear, crossWindRequired: true), - "ERROR while reading DrivingCycle Stream: Column vair_res was not found in DataRow."); - - // no aux, no vair + 0 ,0 ,0 ,3.2018,595.75,0"; + AssertHelper.Exception<VectoException>( + () => TestCycleRead(inputData, CycleType.MeasuredSpeedGear, crossWindRequired: true), + "ERROR while reading DrivingCycle Stream: Column vair_res was not found in DataRow."); + + // no aux, no vair inputData = @"<t>,<v>,<grad>,<Padd>,<n> ,<gear> - 0 ,0 ,0 ,3.2018,595.75,0 "; - TestCycleRead(inputData, CycleType.MeasuredSpeedGear); - - // aux only + 0 ,0 ,0 ,3.2018,595.75,0 "; + TestCycleRead(inputData, CycleType.MeasuredSpeedGear); + + // aux only inputData = @"<t>,<v>,<grad>,<Padd>,<n> ,<gear>,<Aux_Alt> - 0 ,0 ,0 ,3.2018,595.75,0 ,0.504"; - TestCycleRead(inputData, CycleType.MeasuredSpeedGear); - - // missing columns + 0 ,0 ,0 ,3.2018,595.75,0 ,0.504"; + TestCycleRead(inputData, CycleType.MeasuredSpeedGear); + + // missing columns inputData = @"<t>,<grad>,<Padd>,<n>,<gear> - 0 ,0 ,3.2018,595.75,0"; - AssertHelper.Exception<VectoException>( - () => TestCycleRead(inputData, CycleType.MeasuredSpeedGear, autoCycle: false), - "ERROR while reading DrivingCycle Stream: Column(s) required: v"); - - // auto find cycle type - AssertHelper.Exception<VectoException>( - () => TestCycleRead(inputData, CycleType.MeasuredSpeedGear), - "CycleFile format is unknown."); - - // not allowed columns + 0 ,0 ,3.2018,595.75,0"; + AssertHelper.Exception<VectoException>( + () => TestCycleRead(inputData, CycleType.MeasuredSpeedGear, autoCycle: false), + "ERROR while reading DrivingCycle Stream: Column(s) required: v"); + + // auto find cycle type + AssertHelper.Exception<VectoException>( + () => TestCycleRead(inputData, CycleType.MeasuredSpeedGear), + "CycleFile format is unknown."); + + // not allowed columns inputData = @"<t>,<v>,<grad>,<Padd>,<n> ,<gear>,<wrong> - 0 ,0 ,0 ,3.2018,595.75,0 ,0.504"; - AssertHelper.Exception<VectoException>(() => TestCycleRead(inputData, CycleType.MeasuredSpeedGear, autoCycle: false), - "ERROR while reading DrivingCycle Stream: Column(s) not allowed: wrong"); - - // wrong data + 0 ,0 ,0 ,3.2018,595.75,0 ,0.504"; + AssertHelper.Exception<VectoException>(() => TestCycleRead(inputData, CycleType.MeasuredSpeedGear, autoCycle: false), + "ERROR while reading DrivingCycle Stream: Column(s) not allowed: wrong"); + + // wrong data inputData = @"<t>,<grad>,<Padd>,<n>,<gear> - 0 ,0"; - AssertHelper.Exception<VectoException>(() => TestCycleRead(inputData, CycleType.MeasuredSpeedGear), - "Line 1: The number of values is not correct. Expected 5 Columns, Got 2 Columns"); - } - - /// <summary> - /// Test if the cycle file can be read. - /// </summary> - /// <remarks>VECTO-181</remarks> - [TestMethod] - public void MeasuredSpeed_ReadCycle() - { - // all data + 0 ,0"; + AssertHelper.Exception<VectoException>(() => TestCycleRead(inputData, CycleType.MeasuredSpeedGear), + "Line 1: The number of values is not correct. Expected 5 Columns, Got 2 Columns"); + } + + /// <summary> + /// Test if the cycle file can be read. + /// </summary> + /// <remarks>VECTO-181</remarks> + [TestMethod] + public void MeasuredSpeed_ReadCycle() + { + // all data string inputData = @"<t>,<v>,<grad>,<Padd>,<vair_res>,<vair_beta>,<Aux_Alt> - 0 ,0 ,0 ,3.2018,0 ,0 ,0.504"; - TestCycleRead(inputData, CycleType.MeasuredSpeed); - - // vair only + 0 ,0 ,0 ,3.2018,0 ,0 ,0.504"; + TestCycleRead(inputData, CycleType.MeasuredSpeed); + + // vair only inputData = @"<t>,<v>,<grad>,<Padd>,<vair_res>,<vair_beta> - 0 ,0 ,0 ,3.2018,0 ,0 "; - TestCycleRead(inputData, CycleType.MeasuredSpeed, crossWindRequired: true); - - // vair required, but not there: error + 0 ,0 ,0 ,3.2018,0 ,0 "; + TestCycleRead(inputData, CycleType.MeasuredSpeed, crossWindRequired: true); + + // vair required, but not there: error inputData = @"<t>,<v>,<grad>,<Padd> - 0 ,0 ,0 ,3.2018"; - AssertHelper.Exception<VectoException>( - () => TestCycleRead(inputData, CycleType.MeasuredSpeed, crossWindRequired: true), - "ERROR while reading DrivingCycle Stream: Column vair_res was not found in DataRow."); - - // no aux, no vair + 0 ,0 ,0 ,3.2018"; + AssertHelper.Exception<VectoException>( + () => TestCycleRead(inputData, CycleType.MeasuredSpeed, crossWindRequired: true), + "ERROR while reading DrivingCycle Stream: Column vair_res was not found in DataRow."); + + // no aux, no vair inputData = @"<t>,<v>,<grad>,<Padd> - 0 ,0 ,0 ,3.2018"; - TestCycleRead(inputData, CycleType.MeasuredSpeed); - - // aux only + 0 ,0 ,0 ,3.2018"; + TestCycleRead(inputData, CycleType.MeasuredSpeed); + + // aux only inputData = @"<t>,<v>,<grad>,<Padd>,<Aux_Alt> - 0 ,0 ,0 ,3.2018,0.504"; - TestCycleRead(inputData, CycleType.MeasuredSpeed); - - // missing columns + 0 ,0 ,0 ,3.2018,0.504"; + TestCycleRead(inputData, CycleType.MeasuredSpeed); + + // missing columns inputData = @"<t>,<grad>,<Padd>,<vair_res>,<vair_beta>,<Aux_Alt> - 0 ,0 ,3.2018,0 ,0 ,0.504"; - AssertHelper.Exception<VectoException>(() => TestCycleRead(inputData, CycleType.MeasuredSpeed, autoCycle: false), - "ERROR while reading DrivingCycle Stream: Column(s) required: v"); - - // not allowed columns + 0 ,0 ,3.2018,0 ,0 ,0.504"; + AssertHelper.Exception<VectoException>(() => TestCycleRead(inputData, CycleType.MeasuredSpeed, autoCycle: false), + "ERROR while reading DrivingCycle Stream: Column(s) required: v"); + + // not allowed columns inputData = @"<t>,<v>,<wrong>,<grad>,<Padd>,<vair_res>,<vair_beta>,<Aux_Alt> - 0 ,0 ,0 ,3.2018,0 ,0 ,0.504,0"; - AssertHelper.Exception<VectoException>(() => TestCycleRead(inputData, CycleType.MeasuredSpeed, autoCycle: false), - "ERROR while reading DrivingCycle Stream: Column(s) not allowed: wrong"); - - // auto find cycle - AssertHelper.Exception<VectoException>(() => TestCycleRead(inputData, CycleType.MeasuredSpeed), - "CycleFile format is unknown."); - - // wrong data + 0 ,0 ,0 ,3.2018,0 ,0 ,0.504,0"; + AssertHelper.Exception<VectoException>(() => TestCycleRead(inputData, CycleType.MeasuredSpeed, autoCycle: false), + "ERROR while reading DrivingCycle Stream: Column(s) not allowed: wrong"); + + // auto find cycle + AssertHelper.Exception<VectoException>(() => TestCycleRead(inputData, CycleType.MeasuredSpeed), + "CycleFile format is unknown."); + + // wrong data inputData = @"<t>,<v>,<grad>,<Padd>,<vair_res>,<vair_beta>,<Aux_Alt> - 0 ,0"; - AssertHelper.Exception<VectoException>(() => TestCycleRead(inputData, CycleType.MeasuredSpeed), - "Line 1: The number of values is not correct. Expected 7 Columns, Got 2 Columns"); - } - - private static void TestCycleRead(string inputData, CycleType cycleType, bool autoCycle = true, - bool crossWindRequired = false) - { - var container = new VehicleContainer(ExecutionMode.Engineering); - - if (autoCycle) { - var cycleTypeCalc = DrivingCycleDataReader.DetectCycleType(VectoCSVFile.ReadStream(inputData.ToStream())); - Assert.AreEqual(cycleType, cycleTypeCalc); - } - var drivingCycle = DrivingCycleDataReader.ReadFromStream(inputData.ToStream(), cycleType, "", crossWindRequired); - Assert.AreEqual(cycleType, drivingCycle.CycleType); - - var cycle = new MeasuredSpeedDrivingCycle(container, drivingCycle); - } - - /// <summary> - /// Tests if the powertrain can be created in MeasuredSpeed mode. - /// </summary> - /// <remarks>VECTO-181</remarks> - [TestMethod] - public void MeasuredSpeed_CreatePowertrain_Gear() - { - // prepare input data + 0 ,0"; + AssertHelper.Exception<VectoException>(() => TestCycleRead(inputData, CycleType.MeasuredSpeed), + "Line 1: The number of values is not correct. Expected 7 Columns, Got 2 Columns"); + } + + private static void TestCycleRead(string inputData, CycleType cycleType, bool autoCycle = true, + bool crossWindRequired = false) + { + var container = new VehicleContainer(ExecutionMode.Engineering); + + if (autoCycle) { + var cycleTypeCalc = DrivingCycleDataReader.DetectCycleType(VectoCSVFile.ReadStream(inputData.ToStream())); + Assert.AreEqual(cycleType, cycleTypeCalc); + } + var drivingCycle = DrivingCycleDataReader.ReadFromStream(inputData.ToStream(), cycleType, "", crossWindRequired); + Assert.AreEqual(cycleType, drivingCycle.CycleType); + + var cycle = new MeasuredSpeedDrivingCycle(container, drivingCycle); + } + + /// <summary> + /// Tests if the powertrain can be created in MeasuredSpeed mode. + /// </summary> + /// <remarks>VECTO-181</remarks> + [TestMethod] + public void MeasuredSpeed_CreatePowertrain_Gear() + { + // prepare input data var inputData = @"<t>,<v> ,<grad> ,<Padd> ,<n> ,<gear> 1 ,0 ,0 ,3.201815003,595.75 ,0 2 ,0.3112 ,0 ,4.532197507,983.75 ,1 3 ,5.2782 ,-0.041207832,2.453370264,723.75 ,1 - 4 ,10.5768,-0.049730127,3.520827362,1223.25,1"; - - var drivingCycle = DrivingCycleDataReader.ReadFromStream(inputData.ToStream(), CycleType.MeasuredSpeedGear, "", - false); - - var fuelConsumption = new DataTable(); - fuelConsumption.Columns.Add(""); - fuelConsumption.Columns.Add(""); - fuelConsumption.Columns.Add(""); - fuelConsumption.Rows.Add("1", "1", "1"); - fuelConsumption.Rows.Add("2", "2", "2"); - fuelConsumption.Rows.Add("3", "3", "3"); - - var fullLoad = new DataTable(); - fullLoad.Columns.Add("Engine speed"); - fullLoad.Columns.Add("max torque"); - fullLoad.Columns.Add("drag torque"); - fullLoad.Columns.Add("PT1"); - fullLoad.Rows.Add("0", "5000", "-5000", "0"); - fullLoad.Rows.Add("3000", "5000", "-5000", "0"); - - var fullLoadCurve = FullLoadCurveReader.Create(fullLoad); - var data = new VectoRunData { - Cycle = drivingCycle, - VehicleData = - new VehicleData { - VehicleCategory = VehicleCategory.RigidTruck, - GrossVehicleWeight = 12000.SI<Kilogram>(), - CurbWeight = 3400.SI<Kilogram>(), - DynamicTyreRadius = 0.5.SI<Meter>(), - AxleData = - new List<Axle> { - new Axle { AxleWeightShare = 1.0, TyreTestLoad = 52532.SI<Newton>(), Inertia = 10.SI<KilogramSquareMeter>() } - } - }, - AirdragData = new AirdragData() { - CrossWindCorrectionCurve = - new CrosswindCorrectionCdxALookup(6.16498344.SI<SquareMeter>(), - CrossWindCorrectionCurveReader.GetNoCorrectionCurve(6.16498344.SI<SquareMeter>()), - CrossWindCorrectionMode.NoCorrection), - }, - AxleGearData = new AxleGearData { AxleGear = new GearData { Ratio = 2.3 } }, - EngineData = - new CombustionEngineData { - IdleSpeed = 560.RPMtoRad(), - FullLoadCurves = new Dictionary<uint, EngineFullLoadCurve>() { { 0, fullLoadCurve }, { 1, fullLoadCurve } } - }, - GearboxData = new GearboxData { Gears = new Dictionary<uint, GearData> { { 1, new GearData { Ratio = 6.2 } } } }, - Retarder = new RetarderData() - }; - - // call builder (actual test) - var builder = new PowertrainBuilder(new MockModalDataContainer()); - builder.Build(data); - } - - /// <summary> - /// Tests if the powertrain can be created in MeasuredSpeed mode. - /// </summary> - /// <remarks>VECTO-181</remarks> - [TestMethod] - public void MeasuredSpeed_CreatePowertrain() - { - // prepare input data + 4 ,10.5768,-0.049730127,3.520827362,1223.25,1"; + + var drivingCycle = DrivingCycleDataReader.ReadFromStream(inputData.ToStream(), CycleType.MeasuredSpeedGear, "", + false); + + var fuelConsumption = new DataTable(); + fuelConsumption.Columns.Add(""); + fuelConsumption.Columns.Add(""); + fuelConsumption.Columns.Add(""); + fuelConsumption.Rows.Add("1", "1", "1"); + fuelConsumption.Rows.Add("2", "2", "2"); + fuelConsumption.Rows.Add("3", "3", "3"); + + var fullLoad = new DataTable(); + fullLoad.Columns.Add("Engine speed"); + fullLoad.Columns.Add("max torque"); + fullLoad.Columns.Add("drag torque"); + fullLoad.Columns.Add("PT1"); + fullLoad.Rows.Add("0", "5000", "-5000", "0"); + fullLoad.Rows.Add("3000", "5000", "-5000", "0"); + + var fullLoadCurve = FullLoadCurveReader.Create(fullLoad); + var data = new VectoRunData { + Cycle = drivingCycle, + VehicleData = + new VehicleData { + VehicleCategory = VehicleCategory.RigidTruck, + GrossVehicleWeight = 12000.SI<Kilogram>(), + CurbWeight = 3400.SI<Kilogram>(), + DynamicTyreRadius = 0.5.SI<Meter>(), + AxleData = + new List<Axle> { + new Axle { AxleWeightShare = 1.0, TyreTestLoad = 52532.SI<Newton>(), Inertia = 10.SI<KilogramSquareMeter>() } + } + }, + AirdragData = new AirdragData() { + CrossWindCorrectionCurve = + new CrosswindCorrectionCdxALookup(6.16498344.SI<SquareMeter>(), + CrossWindCorrectionCurveReader.GetNoCorrectionCurve(6.16498344.SI<SquareMeter>()), + CrossWindCorrectionMode.NoCorrection), + }, + AxleGearData = new AxleGearData { AxleGear = new GearData { Ratio = 2.3 } }, + EngineData = + new CombustionEngineData { + IdleSpeed = 560.RPMtoRad(), + FullLoadCurves = new Dictionary<uint, EngineFullLoadCurve>() { { 0, fullLoadCurve }, { 1, fullLoadCurve } } + }, + GearboxData = new GearboxData { Gears = new Dictionary<uint, GearData> { { 1, new GearData { Ratio = 6.2 } } } }, + Retarder = new RetarderData() + }; + + // call builder (actual test) + var builder = new PowertrainBuilder(new MockModalDataContainer()); + builder.Build(data); + } + + /// <summary> + /// Tests if the powertrain can be created in MeasuredSpeed mode. + /// </summary> + /// <remarks>VECTO-181</remarks> + [TestMethod] + public void MeasuredSpeed_CreatePowertrain() + { + // prepare input data var inputData = @"<t>,<v> ,<grad> ,<Padd> 1 ,0 ,0 ,3.201815003 2 ,0.3112 ,0 ,4.532197507 3 ,5.2782 ,-0.041207832,2.453370264 - 4 ,10.5768,-0.049730127,3.520827362"; - - var drivingCycle = DrivingCycleDataReader.ReadFromStream(inputData.ToStream(), CycleType.MeasuredSpeed, "", false); - - var fuelConsumption = new DataTable(); - fuelConsumption.Columns.Add(""); - fuelConsumption.Columns.Add(""); - fuelConsumption.Columns.Add(""); - fuelConsumption.Rows.Add("1", "1", "1"); - fuelConsumption.Rows.Add("2", "2", "2"); - fuelConsumption.Rows.Add("3", "3", "3"); - - var fullLoad = new DataTable(); - fullLoad.Columns.Add("Engine speed"); - fullLoad.Columns.Add("max torque"); - fullLoad.Columns.Add("drag torque"); - fullLoad.Columns.Add("PT1"); - fullLoad.Rows.Add("0", "5000", "-5000", "0"); - fullLoad.Rows.Add("3000", "5000", "-5000", "0"); - - var fullLoadCurve = FullLoadCurveReader.Create(fullLoad); - var data = new VectoRunData { - Cycle = drivingCycle, - VehicleData = - new VehicleData { - VehicleCategory = VehicleCategory.RigidTruck, - WheelsInertia = 2.SI<KilogramSquareMeter>(), - DynamicTyreRadius = 0.85.SI<Meter>(), - }, - AirdragData = new AirdragData() { - CrossWindCorrectionCurve = - new CrosswindCorrectionCdxALookup(6.16498344.SI<SquareMeter>(), - CrossWindCorrectionCurveReader.GetNoCorrectionCurve(6.16498344.SI<SquareMeter>()), - CrossWindCorrectionMode.NoCorrection) - }, - AxleGearData = new AxleGearData { AxleGear = new GearData { Ratio = 2.3 } }, - EngineData = new CombustionEngineData { - IdleSpeed = 560.RPMtoRad(), - FullLoadCurves = new Dictionary<uint, EngineFullLoadCurve> { - { 0, fullLoadCurve }, - { 1, fullLoadCurve }, - { 2, fullLoadCurve }, - { 3, fullLoadCurve } - } - }, - GearboxData = new GearboxData { - Gears = new Dictionary<uint, GearData> { - { 1, new GearData { Ratio = 6.696 } }, - { 2, new GearData { Ratio = 3.806 } }, - { 3, new GearData { Ratio = 2.289 } } - }, - StartSpeed = 2.SI<MeterPerSecond>() - }, - Retarder = new RetarderData() - }; - - // call builder (actual test) - var builder = new PowertrainBuilder(new MockModalDataContainer()); - var jobContainer = builder.Build(data); - } - - private static void RunJob(string jobFile, string expectedModFile, string actualModFile, string expectedSumFile, - string actualSumFile, bool actualModData = false) - { - var fileWriter = new FileOutputWriter(jobFile); - var sumWriter = new SummaryDataContainer(fileWriter); - var jobContainer = new JobContainer(sumWriter); - - var inputData = JSONInputDataFactory.ReadJsonJob(jobFile); - var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter); - runsFactory.ActualModalData = actualModData; - runsFactory.WriteModalResults = true; - - jobContainer.AddRuns(runsFactory); - jobContainer.Execute(); - - jobContainer.WaitFinished(); - - Assert.IsTrue(jobContainer.Runs.All(r => r.Success), string.Concat(jobContainer.Runs.Select(r => r.ExecException))); - - ResultFileHelper.TestModFile(expectedModFile, actualModFile); - ResultFileHelper.TestSumFile(expectedSumFile, actualSumFile); - } - - [TestMethod] - public void MeasuredSpeed_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeed.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeed_MeasuredSpeed.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeed_MeasuredSpeed.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeed.vsum", @"TestData\MeasuredSpeed\MeasuredSpeed.vsum"); - } - - [TestMethod] - public void MeasuredSpeedAux_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedAux.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedAux_MeasuredSpeedAux.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeedAux_MeasuredSpeedAux.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedAux.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedAux.vsum"); - } - - [TestMethod] - public void MeasuredSpeedVair_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedVair.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedVair_MeasuredSpeedVair.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeedVair_MeasuredSpeedVair.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedVair.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedVair.vsum"); - } - - [TestMethod] - public void MeasuredSpeedVair_WindFromFront_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedVairFront.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairFront_MeasuredSpeedVairFront.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeedVairFront_MeasuredSpeedVairFront.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairFront.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedVairFront.vsum"); - } - - [TestMethod] - public void MeasuredSpeedVair_WindFromBack_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedVairBack.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairBack_MeasuredSpeedVairBack.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeedVairBack_MeasuredSpeedVairBack.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairBack.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedVairBack.vsum"); - } - - [TestMethod] - public void MeasuredSpeedVair_NoWind_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedVairNoWind.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairNoWind_MeasuredSpeedVairNoWind.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeedVairNoWind_MeasuredSpeedVairNoWind.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairNoWind.vsum", - @"TestData\MeasuredSpeed\MeasuredSpeedVairNoWind.vsum"); - } - - [TestMethod] - public void MeasuredSpeedVairAux_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedVairAux.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairAux_MeasuredSpeedVairAux.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeedVairAux_MeasuredSpeedVairAux.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairAux.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedVairAux.vsum"); - } - - [TestMethod] - public void MeasuredSpeed_Gear_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGear.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGear_MeasuredSpeed_Gear_Rural.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeedGear_MeasuredSpeed_Gear_Rural.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGear.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedGear.vsum"); - } - - [TestMethod] - public void MeasuredSpeed_Gear_TractionInterruption_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGear_TractionInterruption.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGear_TractionInterruption_MeasuredSpeed_Gear_Rural_TractionInterruption.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeedGear_TractionInterruption_MeasuredSpeed_Gear_Rural_TractionInterruption.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGear_TractionInterruption.vsum", - @"TestData\MeasuredSpeed\MeasuredSpeedGear_TractionInterruption.vsum"); - } - - [TestMethod] - public void MeasuredSpeed_Gear_Aux_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGearAux.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearAux_MeasuredSpeed_Gear_Rural_Aux.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeedGearAux_MeasuredSpeed_Gear_Rural_Aux.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearAux.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedGearAux.vsum"); - } - - [TestMethod] - public void MeasuredSpeed_Gear_Vair_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGearVair.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearVair_MeasuredSpeed_Gear_Rural_Vair.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeedGearVair_MeasuredSpeed_Gear_Rural_Vair.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearVair.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedGearVair.vsum"); - } - - [TestMethod] - public void MeasuredSpeed_Gear_VairAux_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGearVairAux.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearVairAux_MeasuredSpeed_Gear_Rural_VairAux.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeedGearVairAux_MeasuredSpeed_Gear_Rural_VairAux.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearVairAux.vsum", - @"TestData\MeasuredSpeed\MeasuredSpeedGearVairAux.vsum"); - } - - [TestMethod] - public void MeasuredSpeed_Gear_AT_PS_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGearAT-PS.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearAT-PS_MeasuredSpeedGear_AT-PS.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeedGearAT-PS_MeasuredSpeedGear_AT-PS.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearAT-PS.vsum", - @"TestData\MeasuredSpeed\MeasuredSpeedGearAT-PS.vsum"); - } - - [TestMethod] - public void MeasuredSpeed_Gear_AT_Ser_Run() - { - RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGearAT-Ser.vecto", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearAT-Ser_MeasuredSpeedGear_AT-Ser.vmod", - @"TestData\MeasuredSpeed\MeasuredSpeedGearAT-Ser_MeasuredSpeedGear_AT-Ser.vmod", - @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearAT-Ser.vsum", - @"TestData\MeasuredSpeed\MeasuredSpeedGearAT-Ser.vsum"); - } - - [TestMethod] - public void VcdbTest() - { - var tbl = VectoCSVFile.Read(@"TestData/MeasuredSpeed/VairBetaFull.vcdb"); - - var dataBus = new MockVehicleContainer(); - - var vairbeta = new CrosswindCorrectionVAirBeta(5.SI<SquareMeter>(), - CrossWindCorrectionCurveReader.ReadCdxABetaTable(tbl)); - vairbeta.SetDataBus(dataBus); - - var cycleEntry = new DrivingCycleData.DrivingCycleEntry() { - AirSpeedRelativeToVehicle = 20.KMPHtoMeterPerSecond(), - WindYawAngle = 0 - }; - dataBus.CycleData = new CycleData() { LeftSample = cycleEntry }; - - var pAvg = - vairbeta.AverageAirDragPowerLoss(20.KMPHtoMeterPerSecond(), 20.KMPHtoMeterPerSecond()).Value(); - Assert.AreEqual(509.259, pAvg, 1e-3); - - pAvg = - vairbeta.AverageAirDragPowerLoss(20.KMPHtoMeterPerSecond(), 21.KMPHtoMeterPerSecond()).Value(); - Assert.AreEqual(521.990, pAvg, 1e-3); - - pAvg = - vairbeta.AverageAirDragPowerLoss(20.KMPHtoMeterPerSecond(), 30.KMPHtoMeterPerSecond()).Value(); - Assert.AreEqual(636.574, pAvg, 1e-3); - - cycleEntry.WindYawAngle = 20; - - pAvg = - vairbeta.AverageAirDragPowerLoss(20.KMPHtoMeterPerSecond(), 20.KMPHtoMeterPerSecond()).Value(); - Assert.AreEqual(829.074, pAvg, 1e-3); - - pAvg = - vairbeta.AverageAirDragPowerLoss(20.KMPHtoMeterPerSecond(), 30.KMPHtoMeterPerSecond()).Value(); - Assert.AreEqual(1036.343, pAvg, 1e-3); - - cycleEntry.WindYawAngle = -120; - - pAvg = - vairbeta.AverageAirDragPowerLoss(20.KMPHtoMeterPerSecond(), 20.KMPHtoMeterPerSecond()).Value(); - Assert.AreEqual(-1019.5370, pAvg, 1e-3); - } - } + 4 ,10.5768,-0.049730127,3.520827362"; + + var drivingCycle = DrivingCycleDataReader.ReadFromStream(inputData.ToStream(), CycleType.MeasuredSpeed, "", false); + + var fuelConsumption = new DataTable(); + fuelConsumption.Columns.Add(""); + fuelConsumption.Columns.Add(""); + fuelConsumption.Columns.Add(""); + fuelConsumption.Rows.Add("1", "1", "1"); + fuelConsumption.Rows.Add("2", "2", "2"); + fuelConsumption.Rows.Add("3", "3", "3"); + + var fullLoad = new DataTable(); + fullLoad.Columns.Add("Engine speed"); + fullLoad.Columns.Add("max torque"); + fullLoad.Columns.Add("drag torque"); + fullLoad.Columns.Add("PT1"); + fullLoad.Rows.Add("0", "5000", "-5000", "0"); + fullLoad.Rows.Add("3000", "5000", "-5000", "0"); + + var fullLoadCurve = FullLoadCurveReader.Create(fullLoad); + var data = new VectoRunData { + Cycle = drivingCycle, + VehicleData = + new VehicleData { + VehicleCategory = VehicleCategory.RigidTruck, + WheelsInertia = 2.SI<KilogramSquareMeter>(), + DynamicTyreRadius = 0.85.SI<Meter>(), + }, + AirdragData = new AirdragData() { + CrossWindCorrectionCurve = + new CrosswindCorrectionCdxALookup(6.16498344.SI<SquareMeter>(), + CrossWindCorrectionCurveReader.GetNoCorrectionCurve(6.16498344.SI<SquareMeter>()), + CrossWindCorrectionMode.NoCorrection) + }, + AxleGearData = new AxleGearData { AxleGear = new GearData { Ratio = 2.3 } }, + EngineData = new CombustionEngineData { + IdleSpeed = 560.RPMtoRad(), + FullLoadCurves = new Dictionary<uint, EngineFullLoadCurve> { + { 0, fullLoadCurve }, + { 1, fullLoadCurve }, + { 2, fullLoadCurve }, + { 3, fullLoadCurve } + } + }, + GearboxData = new GearboxData { + Gears = new Dictionary<uint, GearData> { + { 1, new GearData { Ratio = 6.696 } }, + { 2, new GearData { Ratio = 3.806 } }, + { 3, new GearData { Ratio = 2.289 } } + }, + StartSpeed = 2.SI<MeterPerSecond>() + }, + Retarder = new RetarderData() + }; + + // call builder (actual test) + var builder = new PowertrainBuilder(new MockModalDataContainer()); + var jobContainer = builder.Build(data); + } + + private static void RunJob(string jobFile, string expectedModFile, string actualModFile, string expectedSumFile, + string actualSumFile, bool actualModData = false) + { + var fileWriter = new FileOutputWriter(jobFile); + var sumWriter = new SummaryDataContainer(fileWriter); + var jobContainer = new JobContainer(sumWriter); + + var inputData = JSONInputDataFactory.ReadJsonJob(jobFile); + var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter); + runsFactory.ActualModalData = actualModData; + runsFactory.WriteModalResults = true; + + jobContainer.AddRuns(runsFactory); + jobContainer.Execute(); + + jobContainer.WaitFinished(); + + Assert.IsTrue(jobContainer.Runs.All(r => r.Success), string.Concat(jobContainer.Runs.Select(r => r.ExecException))); + + ResultFileHelper.TestModFile(expectedModFile, actualModFile); + ResultFileHelper.TestSumFile(expectedSumFile, actualSumFile); + } + + [TestMethod] + public void MeasuredSpeed_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeed.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeed_MeasuredSpeed.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeed_MeasuredSpeed.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeed.vsum", @"TestData\MeasuredSpeed\MeasuredSpeed.vsum"); + } + + [TestMethod] + public void MeasuredSpeedAux_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedAux.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedAux_MeasuredSpeedAux.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeedAux_MeasuredSpeedAux.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedAux.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedAux.vsum"); + } + + [TestMethod] + public void MeasuredSpeedVair_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedVair.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedVair_MeasuredSpeedVair.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeedVair_MeasuredSpeedVair.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedVair.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedVair.vsum"); + } + + [TestMethod] + public void MeasuredSpeedVair_WindFromFront_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedVairFront.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairFront_MeasuredSpeedVairFront.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeedVairFront_MeasuredSpeedVairFront.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairFront.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedVairFront.vsum"); + } + + [TestMethod] + public void MeasuredSpeedVair_WindFromBack_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedVairBack.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairBack_MeasuredSpeedVairBack.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeedVairBack_MeasuredSpeedVairBack.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairBack.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedVairBack.vsum"); + } + + [TestMethod] + public void MeasuredSpeedVair_NoWind_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedVairNoWind.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairNoWind_MeasuredSpeedVairNoWind.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeedVairNoWind_MeasuredSpeedVairNoWind.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairNoWind.vsum", + @"TestData\MeasuredSpeed\MeasuredSpeedVairNoWind.vsum"); + } + + [TestMethod] + public void MeasuredSpeedVairAux_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedVairAux.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairAux_MeasuredSpeedVairAux.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeedVairAux_MeasuredSpeedVairAux.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedVairAux.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedVairAux.vsum"); + } + + [TestMethod] + public void MeasuredSpeed_Gear_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGear.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGear_MeasuredSpeed_Gear_Rural.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeedGear_MeasuredSpeed_Gear_Rural.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGear.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedGear.vsum"); + } + + [TestMethod] + public void MeasuredSpeed_Gear_TractionInterruption_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGear_TractionInterruption.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGear_TractionInterruption_MeasuredSpeed_Gear_Rural_TractionInterruption.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeedGear_TractionInterruption_MeasuredSpeed_Gear_Rural_TractionInterruption.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGear_TractionInterruption.vsum", + @"TestData\MeasuredSpeed\MeasuredSpeedGear_TractionInterruption.vsum"); + } + + [TestMethod] + public void MeasuredSpeed_Gear_Aux_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGearAux.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearAux_MeasuredSpeed_Gear_Rural_Aux.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeedGearAux_MeasuredSpeed_Gear_Rural_Aux.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearAux.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedGearAux.vsum"); + } + + [TestMethod] + public void MeasuredSpeed_Gear_Vair_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGearVair.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearVair_MeasuredSpeed_Gear_Rural_Vair.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeedGearVair_MeasuredSpeed_Gear_Rural_Vair.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearVair.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedGearVair.vsum"); + } + + [TestMethod] + public void MeasuredSpeed_Gear_VairAux_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGearVairAux.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearVairAux_MeasuredSpeed_Gear_Rural_VairAux.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeedGearVairAux_MeasuredSpeed_Gear_Rural_VairAux.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearVairAux.vsum", + @"TestData\MeasuredSpeed\MeasuredSpeedGearVairAux.vsum"); + } + + [TestMethod] + public void MeasuredSpeed_Gear_AT_PS_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGearAT-PS.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearAT-PS_MeasuredSpeedGear_AT-PS.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeedGearAT-PS_MeasuredSpeedGear_AT-PS.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearAT-PS.vsum", + @"TestData\MeasuredSpeed\MeasuredSpeedGearAT-PS.vsum"); + } + + [TestMethod] + public void MeasuredSpeed_Gear_AT_Ser_Run() + { + RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGearAT-Ser.vecto", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearAT-Ser_MeasuredSpeedGear_AT-Ser.vmod", + @"TestData\MeasuredSpeed\MeasuredSpeedGearAT-Ser_MeasuredSpeedGear_AT-Ser.vmod", + @"TestData\MeasuredSpeed\Results\MeasuredSpeedGearAT-Ser.vsum", + @"TestData\MeasuredSpeed\MeasuredSpeedGearAT-Ser.vsum"); + } + + [TestMethod] + public void VcdbTest() + { + var tbl = VectoCSVFile.Read(@"TestData/MeasuredSpeed/VairBetaFull.vcdb"); + + var dataBus = new MockVehicleContainer(); + + var vairbeta = new CrosswindCorrectionVAirBeta(5.SI<SquareMeter>(), + CrossWindCorrectionCurveReader.ReadCdxABetaTable(tbl)); + vairbeta.SetDataBus(dataBus); + + var cycleEntry = new DrivingCycleData.DrivingCycleEntry() { + AirSpeedRelativeToVehicle = 20.KMPHtoMeterPerSecond(), + WindYawAngle = 0 + }; + dataBus.CycleData = new CycleData() { LeftSample = cycleEntry }; + + var pAvg = + vairbeta.AverageAirDragPowerLoss(20.KMPHtoMeterPerSecond(), 20.KMPHtoMeterPerSecond(), Physics.AirDensity).Value(); + Assert.AreEqual(509.259, pAvg, 1e-3); + + pAvg = + vairbeta.AverageAirDragPowerLoss(20.KMPHtoMeterPerSecond(), 21.KMPHtoMeterPerSecond(), Physics.AirDensity).Value(); + Assert.AreEqual(521.990, pAvg, 1e-3); + + pAvg = + vairbeta.AverageAirDragPowerLoss(20.KMPHtoMeterPerSecond(), 30.KMPHtoMeterPerSecond(), Physics.AirDensity).Value(); + Assert.AreEqual(636.574, pAvg, 1e-3); + + cycleEntry.WindYawAngle = 20; + + pAvg = + vairbeta.AverageAirDragPowerLoss(20.KMPHtoMeterPerSecond(), 20.KMPHtoMeterPerSecond(), Physics.AirDensity).Value(); + Assert.AreEqual(829.074, pAvg, 1e-3); + + pAvg = + vairbeta.AverageAirDragPowerLoss(20.KMPHtoMeterPerSecond(), 30.KMPHtoMeterPerSecond(), Physics.AirDensity).Value(); + Assert.AreEqual(1036.343, pAvg, 1e-3); + + cycleEntry.WindYawAngle = -120; + + pAvg = + vairbeta.AverageAirDragPowerLoss(20.KMPHtoMeterPerSecond(), 20.KMPHtoMeterPerSecond(), Physics.AirDensity).Value(); + Assert.AreEqual(-1019.5370, pAvg, 1e-3); + } + } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs index 377c893758a0806862a08f05e77843f56596f6f0..b2d47b097db56f02d9b3fdfbf3f2346612d370c4 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs @@ -65,7 +65,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent public void DriverCoastingTest() { var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(EngineFile, 1); - + var vehicleData = CreateVehicleData(33000.SI<Kilogram>()); var airdragData = CreateAirdragData(); vehicleData.DynamicTyreRadius = 0.026372213.SI<Meter>(); // take into account axle ratio, gear ratio @@ -398,7 +398,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent }; return new VehicleData { AxleConfiguration = AxleConfiguration.AxleConfig_4x2, - + AirDensity = DeclarationData.AirDensity, CurbWeight = 15700.SI<Kilogram>(), Loading = loading, DynamicTyreRadius = 0.52.SI<Meter>(),