diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs index 7e031ba8978a87b14815a99ed4b7d7ee6f956e7c..03adc8cc8f4a0f68a3d8e494ef84c93822ff3417 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs @@ -225,6 +225,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl { vtpRunData.VTPData = new VTPData() { CorrectionFactor = mileageCorrection, }; + vtpRunData.DriverData = Driverdata; yield return vtpRunData; } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryLorries.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryLorries.cs index 67930df90d75614ce9dbcd8cac15a31ce24c57f1..bde59609757b45bc58e35031fe297db5aca63559 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryLorries.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryLorries.cs @@ -175,6 +175,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl }; vtpRunData.VehicleData.VehicleClass = Segment.VehicleClass; vtpRunData.VehicleData.LegislativeClass = JobInputData.Vehicle.LegislativeClass; + vtpRunData.DriverData = Driverdata; //var ncvStd = DeclarationData.FuelData.Lookup(JobInputData.Vehicle.Components.EngineInputData.FuelType).LowerHeatingValueVecto; //var ncvCorrection = ncvStd / JobInputData.NetCalorificValueTestFuel; diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs index d09d57d396d3aa6e0aa9b1ae116adecf92e037e3..33a49023d1944435912b3daf207100e5d7eded4d 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs @@ -31,10 +31,13 @@ using System; using System.Collections.Generic; +using System.Linq; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.Reader.ComponentData; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; +using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data; @@ -62,11 +65,45 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl ExecutionMode = ExecutionMode.Engineering, SimulationType = SimulationType.EngineOnly, JobType = VectoSimulationJobType.EngineOnlySimulation, - ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>() + ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(), + DriverData = CreateDummyDriverData(), }; yield return simulationRunData; } } } + + private DriverData CreateDummyDriverData() + { + return new DriverData() { + EngineStopStart = new DriverData.EngineStopStartData() + { EngineOffStandStillActivationDelay = 0.SI<Second>(), MaxEngineOffTimespan = 0.SI<Second>() }, + LookAheadCoasting = new DriverData.LACData() { + Enabled = false, + MinSpeed = 0.KMPHtoMeterPerSecond(), + LookAheadDecisionFactor = new LACDecisionFactor() + }, + AccelerationCurve = new AccelerationCurveData(new[] { + new KeyValuePair<MeterPerSecond, AccelerationCurveData.AccelerationEntry>( + 0.KMPHtoMeterPerSecond(), + new AccelerationCurveData.AccelerationEntry() { + Acceleration = 1.SI<MeterPerSquareSecond>(), + Deceleration = -1.SI<MeterPerSquareSecond>() + }), + new KeyValuePair<MeterPerSecond, AccelerationCurveData.AccelerationEntry>( + 200.KMPHtoMeterPerSecond(), + new AccelerationCurveData.AccelerationEntry() { + Acceleration = 1.SI<MeterPerSquareSecond>(), + Deceleration = -1.SI<MeterPerSquareSecond>() + }), + }.ToList()), + EcoRoll = new DriverData.EcoRollData(), + OverSpeed = new DriverData.OverSpeedData() { + MinSpeed = 0.KMPHtoMeterPerSecond(), + OverSpeed = 0.KMPHtoMeterPerSecond(), + Enabled = false + } + }; + } } } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactoryHeavyBusPrimary.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactoryHeavyBusPrimary.cs index 5c4daa42cec6ad65015203899dd7e146dfc200de..934ea74c7e67be9d68cf07b84a7fadab9cc63fef 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactoryHeavyBusPrimary.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactoryHeavyBusPrimary.cs @@ -36,6 +36,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl { runData.Mission = new Mission() { MissionType = MissionType.VerificationTest }; + runData.DriverData = Driverdata; return runData; }); } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactoryLorries.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactoryLorries.cs index 72565f51413f2671518e0b857df7d044169ff575..cc9b43eaa0f8c72086cdc865be51b33f2411074e 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactoryLorries.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactoryLorries.cs @@ -70,6 +70,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl runData.Mission = new Mission() { MissionType = MissionType.VerificationTest }; + runData.DriverData = Driverdata; return runData; }); } diff --git a/VectoCore/VectoCore/OutputData/ModalDataPostprocessingCorrection.cs b/VectoCore/VectoCore/OutputData/ModalDataPostprocessingCorrection.cs index 2ba8a0a2fd11b4636a325b7dc9e6ecbdc0070277..4c3689044b42ea54e9ddcc1ce79e9ee9e41e33ed 100644 --- a/VectoCore/VectoCore/OutputData/ModalDataPostprocessingCorrection.cs +++ b/VectoCore/VectoCore/OutputData/ModalDataPostprocessingCorrection.cs @@ -25,18 +25,18 @@ namespace TUGraz.VectoCore.OutputData var entriesAuxICEStandstill = modData.GetValues(x => new { dt = x.Field<Second>(ModalResultField.simulationInterval.GetName()), - P_off = x.Field<Watt>(ModalResultField.P_aux_ESS_mech_ice_off.GetName()), - P_on = x.Field<Watt>(ModalResultField.P_aux_ESS_mech_ice_on.GetName()), + P_off = x.Field<Watt>(ModalResultField.P_aux_ESS_mech_ice_off.GetName()) ?? 0.SI<Watt>(), + P_on = x.Field<Watt>(ModalResultField.P_aux_ESS_mech_ice_on.GetName()) ?? 0.SI<Watt>(), v = x.Field<MeterPerSecond>(ModalResultField.v_act.GetName()), IceOn = x.Field<bool>(ModalResultField.ICEOn.GetName()) - }).Where(x => x.v.IsEqual(0) && !x.IceOn).ToList(); + }).Where(x => x.v != null && x.v.IsEqual(0) && !x.IceOn).ToList(); var entriesAuxICEDriving = modData.GetValues(x => new { dt = x.Field<Second>(ModalResultField.simulationInterval.GetName()), - P_off = x.Field<Watt>(ModalResultField.P_aux_ESS_mech_ice_off.GetName()), - P_on = x.Field<Watt>(ModalResultField.P_aux_ESS_mech_ice_on.GetName()), + P_off = x.Field<Watt>(ModalResultField.P_aux_ESS_mech_ice_off.GetName()) ?? 0.SI<Watt>(), + P_on = x.Field<Watt>(ModalResultField.P_aux_ESS_mech_ice_on.GetName()) ?? 0.SI<Watt>(), v = x.Field<MeterPerSecond>(ModalResultField.v_act.GetName()), IceOn = x.Field<bool>(ModalResultField.ICEOn.GetName()) - }).Where(x => !x.v.IsEqual(0) && !x.IceOn).ToList(); + }).Where(x => x.v != null && !x.v.IsEqual(0) && !x.IceOn).ToList(); r.ICEOffTimeStandstill = entriesAuxICEStandstill.Sum(x => x.dt) ?? 0.SI<Second>(); r.EnergyAuxICEOffStandstill = entriesAuxICEStandstill.Sum(x => x.P_off * x.dt) ?? 0.SI<WattSecond>(); @@ -57,7 +57,7 @@ namespace TUGraz.VectoCore.OutputData var airBusAuxPSON = modData.AirGeneratedAlwaysOn(); var deltaAir = modData.AirConsumed() - modData.AirGenerated(); - var kAir = (workBusAuxPSCompOn - workBusAuxPSCompOff) / (airBusAuxPSON - 0.SI<NormLiter>()); + var kAir = airBusAuxPSON.IsEqual(0) ? 0.SI(Unit.SI.Watt.Second.Per.Cubic.Meter) :(workBusAuxPSCompOn - workBusAuxPSCompOff) / (airBusAuxPSON - 0.SI<NormLiter>()); r.WorkBusAuxPSCorr = (kAir * deltaAir).Cast<WattSecond>(); var workBusAuxES = modData.EnergyBusAuxESConsumed() - modData.EnergyBusAuxESGenerated(); diff --git a/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs b/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs index 78c87246548ee208f7d79c40b88ddf48c4a2530b..8343b7e0c5a123b227065b14e9349c35b2ccb487 100644 --- a/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs +++ b/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs @@ -51,6 +51,7 @@ using TUGraz.VectoCore.Tests.Models.SimulationComponent; using TUGraz.VectoCore.Tests.Utils; using NUnit.Framework; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; // ReSharper disable ObjectCreationAsStatement @@ -76,12 +77,17 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation JobName = "AuxWriteModFileSumFile", EngineData = new CombustionEngineData() { Fuels = new[] {new CombustionEngineFuelData { - FuelData = FuelData.Diesel + FuelData = FuelData.Diesel, + ConsumptionMap = FuelConsumptionMapReader.ReadFromFile(@"TestData\Components\12t Delivery Truck.vmap"), }}.ToList(), + IdleSpeed = 600.RPMtoRad() }, ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(), Cycle = new DrivingCycleData() { Name = "MockCycle", + }, + DriverData = new DriverData() { + EngineStopStart = new DriverData.EngineStopStartData(), } }; var modData = new ModalDataContainer(runData, fileWriter, null) { @@ -129,6 +135,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation modData[ModalResultField.P_ice_out] = 0.SI<Watt>(); modData[ModalResultField.acc] = 0.SI<MeterPerSquareSecond>(); modData[ModalResultField.ICEOn] = false; + modData[ModalResultField.v_act] = 0.KMPHtoMeterPerSecond(); container.CommitSimulationStep(t, dt); t += dt; } diff --git a/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs b/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs index 5e4620de492fadcb2a90d076a4810c8e7fa650e6..61fb7e856fdfbd4450296526ecce5c75aeb33cc3 100644 --- a/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs +++ b/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs @@ -49,6 +49,7 @@ using TUGraz.VectoCore.Utils; using NUnit.Framework; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.InputData.Reader.ComponentData; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.SimulationComponent.Data; @@ -80,12 +81,17 @@ namespace TUGraz.VectoCore.Tests.Reports JobName = "AuxWriteModFileSumFile", EngineData = new CombustionEngineData() { Fuels = new[] {new CombustionEngineFuelData { - FuelData = FuelData.Diesel + FuelData = FuelData.Diesel, + ConsumptionMap = FuelConsumptionMapReader.ReadFromFile(@"TestData\Components\12t Delivery Truck.vmap") }}.ToList(), + IdleSpeed = 600.RPMtoRad() }, ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(), Cycle = new DrivingCycleData() { Name = "MockCycle", + }, + DriverData = new DriverData() { + EngineStopStart = new DriverData.EngineStopStartData() } }; var modData = new ModalDataContainer(rundata, writer, null); @@ -151,15 +157,18 @@ namespace TUGraz.VectoCore.Tests.Reports var rundata = new VectoRunData() { JobName = "testsumcalc_var", EngineData = new CombustionEngineData() { - Fuels = new[] { - new CombustionEngineFuelData { - FuelData = FuelData.Diesel - } - }.ToList(), + Fuels = new[] {new CombustionEngineFuelData { + FuelData = FuelData.Diesel, + ConsumptionMap = FuelConsumptionMapReader.ReadFromFile(@"TestData\Components\12t Delivery Truck.vmap") + }}.ToList(), + IdleSpeed = 600.RPMtoRad() }, ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(), Cycle = new DrivingCycleData() { Name = "MockCycle", + }, + DriverData = new DriverData() { + EngineStopStart = new DriverData.EngineStopStartData() } }; var modData = new ModalDataContainer(rundata, writer, null);