From c4d58a5a2bc1f1f7b81fbf339d3f3c452f715609 Mon Sep 17 00:00:00 2001 From: "VKMTHD\\haraldmartini" <harald.martini@student.tugraz.at> Date: Mon, 22 May 2023 14:49:40 +0200 Subject: [PATCH] PEV Completed bus, calculate AuxHeater Fuel consumption in moddatapost processing, and write fuel consumption in MRF --- .../Release Notes Vecto3.x.pdf | Bin 1177048 -> 1177048 bytes .../Interfaces/IBusAuxiliaries.cs | 3 + .../IModalDataPostProcessor.cs | 3 +- ...BatteryElectricPostprocessingCorrection.cs | 41 ++++++-- ...tionalModalDataPostprocessingCorrection.cs | 91 ++++++++++-------- .../Impl/CorrectedModalData.cs | 2 +- .../Impl/FuelConsumptionCorrection.cs | 82 ++++++++++++++++ .../PostProcessingNinjectModule.cs | 2 - .../Common/FuelConsumptionWriter.cs | 21 ++-- .../Common/IResultsWriter.cs | 3 +- .../Common/ResultTotalWriter.cs | 15 +-- .../CIFResultsNinjectModule.cs | 5 +- .../MRFResultsNinjectModule.cs | 6 +- .../CompletedBusManufacturerReport.cs | 31 ++++-- .../OutputData/XML/XMLDeclarationReport.cs | 8 +- .../PrimaryBus/PrimaryBusSimulation.cs | 38 +++++++- 16 files changed, 264 insertions(+), 87 deletions(-) diff --git a/Documentation/User Manual Source/Release Notes Vecto3.x.pdf b/Documentation/User Manual Source/Release Notes Vecto3.x.pdf index fe4a9057fd06ea12cd30ff6aa1ae1244ac1f0e9c..6ac6b262a72c2d7bd76a9b01d18d80002d962f70 100644 GIT binary patch delta 422 zcmccd+Wp3B_l6e67N!>F7M2#)7Pc1l7LFFq7OpMa$98fUnj0D!7#LViKev-x3eIc) zu#>y}!%m*|4?B6=KkVdd|FDyP`-hzZ#Xq?X%|i^0tPBjS3@oSTZ5Gr=5m>QVuwTW% z$<5r<z{x<@&DF$0*TlraRoBAM$yL|D(bdS&)!5C%($H;s^cF!aqEv2QxkYdvhqIG` zsezlhfs=`ao2!MZi3!L=WCQJN2&$O=(UD1Z`|-VkpUj*HDkf;$^xt0u<EUZI?5~2h E0M$TvuK)l5 delta 422 zcmccd+Wp3B_l6e67N!>F7M2#)7Pc1l7LFFq7OpMa$98fUSQ;9dn3<YPKev-x3eIc) zu#>y}!%m*|4?B6=KkVdd|FDyP`-hzZ#Xq?XEJF+ptxU|UOiiZeZ5Gr=5m>QVuwTW^ z#n{Zn)yQ1e#MIDP*TmG#NY~Q9+)>xr(%jkD&CSK!%-D5$^cF!aqEv2QxkYdvhqIBn zi>tAjn~R|{$UqZQkcr3!+Sw3PG5w<>lkE26dj&t4IT2J$(75TpzX--r!<^Y)1#JN) C?|A<J diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/IBusAuxiliaries.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/IBusAuxiliaries.cs index 7c288f190e..faf4a3ea7f 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/IBusAuxiliaries.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/IBusAuxiliaries.cs @@ -161,6 +161,9 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces public class HeaterDemandResult { + /// <summary> + /// Fuel heater (Diesel) + /// </summary> public Joule AuxHeater => HeaterPower.AuxHeaterPower * CycleTime; public WattSecond HeatPumpElectricEnergy => HeaterPower.HeatPumpPowerEl * CycleTime; diff --git a/VectoCore/VectoCore/OutputData/ModDataPostprocessing/IModalDataPostProcessor.cs b/VectoCore/VectoCore/OutputData/ModDataPostprocessing/IModalDataPostProcessor.cs index d0e3c60d49..e1a932b3e8 100644 --- a/VectoCore/VectoCore/OutputData/ModDataPostprocessing/IModalDataPostProcessor.cs +++ b/VectoCore/VectoCore/OutputData/ModDataPostprocessing/IModalDataPostProcessor.cs @@ -16,5 +16,6 @@ namespace TUGraz.VectoCore.OutputData.ModDataPostprocessing public interface IModalDataPostProcessor { ICorrectedModalData ApplyCorrection(IModalDataContainer modData, VectoRunData runData); - } + + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/BatteryElectricPostprocessingCorrection.cs b/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/BatteryElectricPostprocessingCorrection.cs index 93c82e9ed0..dd358d499f 100644 --- a/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/BatteryElectricPostprocessingCorrection.cs +++ b/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/BatteryElectricPostprocessingCorrection.cs @@ -1,6 +1,8 @@ using System.Collections.Generic; +using System.Linq; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRunDataFactory; using TUGraz.VectoCore.Models.BusAuxiliaries; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Pneumatics; using TUGraz.VectoCore.Models.Declaration; @@ -9,11 +11,11 @@ using TUGraz.VectoCore.OutputData.ModDataPostprocessing; namespace TUGraz.VectoCore.OutputData.ModDataPostprocessing.Impl { - public class BatteryElectricPostprocessingCorrection : IModalDataPostProcessor + public class BatteryElectricPostprocessingCorrection : ModalDataPostProcessingCorrectionBase { #region Implementation of IModalDataPostProcessor - public ICorrectedModalData ApplyCorrection(IModalDataContainer modData, VectoRunData runData) + public override ICorrectedModalData ApplyCorrection(IModalDataContainer modData, VectoRunData runData) { var chgEfficiency = DeclarationData.CalculateChargingEfficiencyPEV(runData); @@ -34,15 +36,34 @@ namespace TUGraz.VectoCore.OutputData.ModDataPostprocessing.Impl runData.DCDCData.DCDCEfficiency; } + var corrected = new PEVCorrectedModalData(modData) + { + CorrectedAirDemand = airDemandCorr, + DeltaAir = deltaAir, + WorkBusAux_elPS_SoC_ElRange = deltaEPSel, + ElectricEnergyConsumption_SoC = -modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int), + ElectricEnergyConsumption_Final = (-modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int) + deltaEPSel) / chgEfficiency, + }; - return new PEVCorrectedModalData(modData) { - CorrectedAirDemand = airDemandCorr, - DeltaAir = deltaAir, - WorkBusAux_elPS_SoC_ElRange = deltaEPSel, - ElectricEnergyConsumption_SoC = -modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int), - ElectricEnergyConsumption_Final = (-modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int) + deltaEPSel) / chgEfficiency, - }; - } + SetAuxHeaterDemand(modData, runData, corrected); + if (corrected.AuxHeaterDemand?.IsGreater(0) ?? false) { + + var f = FuelData.Diesel; + + var fc = new PEVFuelConsumptionCorrection( + fuel: f, + distance: modData.Distance, + duration: modData.Duration, + fcAuxHeater: corrected.AuxHeaterDemand / f.LowerHeatingValueVecto); + + + corrected.FuelCorrection[f.FuelType] = fc; + } + + + + return corrected; + } #endregion } diff --git a/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/ConventionalModalDataPostprocessingCorrection.cs b/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/ConventionalModalDataPostprocessingCorrection.cs index 28d1fe9724..ad52825fa0 100644 --- a/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/ConventionalModalDataPostprocessingCorrection.cs +++ b/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/ConventionalModalDataPostprocessingCorrection.cs @@ -14,12 +14,62 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data; namespace TUGraz.VectoCore.OutputData.ModDataPostprocessing.Impl { - public class ConventionalModalDataPostprocessingCorrection : IModalDataPostProcessor + public abstract class ModalDataPostProcessingCorrectionBase : IModalDataPostProcessor + { + #region Implementation of IModalDataPostProcessor + + public abstract ICorrectedModalData ApplyCorrection(IModalDataContainer modData, VectoRunData runData); + + protected virtual void SetAuxHeaterDemand(IModalDataContainer modData, VectoRunData runData, AbstractCorrectedModalData r) + { + + if (modData.AuxHeaterDemandCalc == null) + { + r.AuxHeaterDemand = 0.SI<Joule>(); + r.WorkBusAuxHeatPumpHeatingMech = 0.SI<WattSecond>(); + r.WorkBusAuxHeatPumpHeatingElMech = 0.SI<WattSecond>(); + r.WorkBusAuxElectricHeater = 0.SI<WattSecond>(); + return; + } + var duration = modData.Duration; + var engineWasteheatSum = modData.FuelData.Aggregate( + 0.SI<Joule>(), + (current, fuel) => current + modData.TotalFuelConsumption(ModalResultField.FCFinal, fuel) * + fuel.LowerHeatingValueVecto); + var emLossEnergy = 0.SI<Joule>(); + //if (runData.ElectricMachinesData.Count > 0) { + foreach (var em in runData.ElectricMachinesData) + { + var emPos = em.Item1; //runData.ElectricMachinesData.First().Item1; + var colName = modData.GetColumnName(emPos, ModalResultField.P_EM_electricMotorLoss_); + if (emPos == PowertrainPosition.IEPC) + { + colName = modData.GetColumnName(emPos, ModalResultField.P_IEPC_electricMotorLoss_); + } + emLossEnergy += modData.TimeIntegral<WattSecond>(colName).Cast<Joule>(); + } + + //r.WorkBusAuxHeatPumpHeatingElMech = workBusAuxES / + // runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorMap.GetEfficiency(0.RPMtoRad(), 0.SI<Ampere>()) / + // runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorGearEfficiency; + var heatingDemand = modData.AuxHeaterDemandCalc(duration, engineWasteheatSum, emLossEnergy); + + r.WorkBusAuxHeatPumpHeatingMech = heatingDemand.HeatPumpMechanicalEnergy; + r.WorkBusAuxHeatPumpHeatingElMech = heatingDemand.HeatPumpElectricEnergy / + runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorMap.GetEfficiency(0.RPMtoRad(), 0.SI<Ampere>()) / + runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorGearEfficiency; + r.AuxHeaterDemand = heatingDemand.AuxHeater; + r.WorkBusAuxElectricHeater = heatingDemand.ElectricHeaterEnergy; + } + #endregion + } + + public class ConventionalModalDataPostprocessingCorrection : ModalDataPostProcessingCorrectionBase { #region Implementation of IModalDataPostProcessor - public virtual ICorrectedModalData ApplyCorrection(IModalDataContainer modData, VectoRunData runData) + public override ICorrectedModalData ApplyCorrection(IModalDataContainer modData, VectoRunData runData) { return DoApplyCorrection(modData, runData); } @@ -173,44 +223,7 @@ namespace TUGraz.VectoCore.OutputData.ModDataPostprocessing.Impl return f; } - protected virtual void SetAuxHeaterDemand(IModalDataContainer modData, VectoRunData runData, CorrectedModalData r) - { - - if (modData.AuxHeaterDemandCalc == null) { - r.AuxHeaterDemand = 0.SI<Joule>(); - r.WorkBusAuxHeatPumpHeatingMech = 0.SI<WattSecond>(); - r.WorkBusAuxHeatPumpHeatingElMech = 0.SI<WattSecond>(); - r.WorkBusAuxElectricHeater = 0.SI<WattSecond>(); - return; - } - var duration = modData.Duration; - var engineWasteheatSum = modData.FuelData.Aggregate( - 0.SI<Joule>(), - (current, fuel) => current + modData.TotalFuelConsumption(ModalResultField.FCFinal, fuel) * - fuel.LowerHeatingValueVecto); - var emLossEnergy = 0.SI<Joule>(); - //if (runData.ElectricMachinesData.Count > 0) { - foreach (var em in runData.ElectricMachinesData) { - var emPos = em.Item1; //runData.ElectricMachinesData.First().Item1; - var colName = modData.GetColumnName(emPos, ModalResultField.P_EM_electricMotorLoss_); - if (emPos == PowertrainPosition.IEPC) { - colName = modData.GetColumnName(emPos, ModalResultField.P_IEPC_electricMotorLoss_); - } - emLossEnergy += modData.TimeIntegral<WattSecond>(colName).Cast<Joule>(); - } - - //r.WorkBusAuxHeatPumpHeatingElMech = workBusAuxES / - // runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorMap.GetEfficiency(0.RPMtoRad(), 0.SI<Ampere>()) / - // runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorGearEfficiency; - var heatingDemand = modData.AuxHeaterDemandCalc(duration, engineWasteheatSum, emLossEnergy); - r.WorkBusAuxHeatPumpHeatingMech = heatingDemand.HeatPumpMechanicalEnergy; - r.WorkBusAuxHeatPumpHeatingElMech = heatingDemand.HeatPumpElectricEnergy / - runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorMap.GetEfficiency(0.RPMtoRad(), 0.SI<Ampere>()) / - runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorGearEfficiency; - r.AuxHeaterDemand = heatingDemand.AuxHeater; - r.WorkBusAuxElectricHeater = heatingDemand.ElectricHeaterEnergy; - } protected virtual void SetMissingDCDCEnergy(IModalDataContainer modData, VectoRunData runData, CorrectedModalData r) { diff --git a/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/CorrectedModalData.cs b/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/CorrectedModalData.cs index 579cedc966..7e3c2a765a 100644 --- a/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/CorrectedModalData.cs +++ b/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/CorrectedModalData.cs @@ -78,7 +78,7 @@ namespace TUGraz.VectoCore.OutputData.ModDataPostprocessing.Impl public CorrectedModalData(IModalDataContainer modData) : base(modData) { - FuelCorrection = new Dictionary<FuelType, IFuelConsumptionCorrection>(); + //FuelCorrection = new Dictionary<FuelType, IFuelConsumptionCorrection>(); } public override IFuelConsumptionCorrection FuelConsumptionCorrection(IFuelProperties fuel) diff --git a/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/FuelConsumptionCorrection.cs b/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/FuelConsumptionCorrection.cs index 63fead479e..1f3c6159d1 100644 --- a/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/FuelConsumptionCorrection.cs +++ b/VectoCore/VectoCore/OutputData/ModDataPostprocessing/Impl/FuelConsumptionCorrection.cs @@ -1,5 +1,6 @@ using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.SimulationComponent.Impl; namespace TUGraz.VectoCore.OutputData.ModDataPostprocessing.Impl { @@ -127,4 +128,85 @@ namespace TUGraz.VectoCore.OutputData.ModDataPostprocessing.Impl #endregion } + + + /// <summary> + /// Used for aux heaters + /// </summary> + public class PEVFuelConsumptionCorrection : IFuelConsumptionCorrection + { + private readonly Second _duration; + private readonly Meter _distance; + private readonly Kilogram _fcAuxHeater; + private readonly IFuelProperties _fuel; + + public PEVFuelConsumptionCorrection( + IFuelProperties fuel, + Second duration, + Meter distance, + Kilogram fcAuxHeater + ) + { + _fuel = fuel; + _duration = duration; + _distance = distance; + _fcAuxHeater = fcAuxHeater; + } + + #region Implementation of IFuelConsumptionCorrection + + public IFuelProperties Fuel => _fuel; + + public KilogramPerWattSecond EngineLineCorrectionFactor => throw new System.NotImplementedException(); + + public KilogramPerWattSecond VehicleLine => throw new System.NotImplementedException(); + + public KilogramPerSecond FC_ESS_H => throw new System.NotImplementedException(); + + public KilogramPerSecond FC_ESS_CORR_H => throw new System.NotImplementedException(); + + public KilogramPerSecond FC_BusAux_PS_CORR_H => throw new System.NotImplementedException(); + + public KilogramPerSecond FC_BusAux_ES_CORR_H => throw new System.NotImplementedException(); + + public KilogramPerSecond FC_WHR_CORR_H => throw new System.NotImplementedException(); + + public KilogramPerSecond FC_AUXHTR_H => _fcAuxHeater / _duration; + + public KilogramPerSecond FC_AUXHTR_H_CORR => FC_AUXHTR_H; + + public KilogramPerSecond FC_REESS_SOC_H => throw new System.NotImplementedException(); + + public KilogramPerSecond FC_REESS_SOC_CORR_H => throw new System.NotImplementedException(); + + public KilogramPerSecond FC_FINAL_H => throw new System.NotImplementedException(); + + public KilogramPerMeter FC_WHR_CORR_KM => throw new System.NotImplementedException(); + + public KilogramPerMeter FC_BusAux_PS_CORR_KM => throw new System.NotImplementedException(); + + public KilogramPerMeter FC_BusAux_ES_CORR_KM => throw new System.NotImplementedException(); + + public KilogramPerMeter FC_AUXHTR_KM => _fcAuxHeater / _distance; + + public KilogramPerMeter FC_AUXHTR_KM_CORR => FC_AUXHTR_KM; + + public KilogramPerMeter FC_REESS_SOC_KM => throw new System.NotImplementedException(); + + public KilogramPerMeter FC_REESS_SOC_CORR_KM => throw new System.NotImplementedException(); + + public KilogramPerMeter FC_ESS_KM => throw new System.NotImplementedException(); + + public KilogramPerMeter FC_ESS_CORR_KM => throw new System.NotImplementedException(); + + public KilogramPerMeter FC_FINAL_KM => throw new System.NotImplementedException(); + + public VolumePerMeter FuelVolumePerMeter => throw new System.NotImplementedException(); + + public Kilogram TotalFuelConsumptionCorrected => FC_AUXHTR_KM_CORR * _distance; + + public Joule EnergyDemand => throw new System.NotImplementedException(); + + #endregion + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/ModDataPostprocessing/PostProcessingNinjectModule.cs b/VectoCore/VectoCore/OutputData/ModDataPostprocessing/PostProcessingNinjectModule.cs index 512d0e4c3b..3cf6c76074 100644 --- a/VectoCore/VectoCore/OutputData/ModDataPostprocessing/PostProcessingNinjectModule.cs +++ b/VectoCore/VectoCore/OutputData/ModDataPostprocessing/PostProcessingNinjectModule.cs @@ -12,7 +12,6 @@ namespace TUGraz.VectoCore.OutputData.ModDataPostprocessing public override void Load() { - Bind<IModalDataPostProcessorFactory>().ToFactory(() => new UseFirstArgumentAsInstanceProvider()); Bind<IModalDataPostProcessor>().To<BatteryElectricPostprocessingCorrection>() @@ -35,7 +34,6 @@ namespace TUGraz.VectoCore.OutputData.ModDataPostprocessing Bind<IModalDataPostProcessor>().To<ConventionalModalDataPostprocessingCorrection>() .Named(VectoSimulationJobType.ConventionalVehicle.ToString()); - } #endregion diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/FuelConsumptionWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/FuelConsumptionWriter.cs index 2a947aee11..b89bb3c4d7 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/FuelConsumptionWriter.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/FuelConsumptionWriter.cs @@ -20,18 +20,20 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common public XElement GetElement(IResultEntry entry, IFuelConsumptionCorrection fc) { - return new XElement(TNS + XMLNames.Report_Results_Fuel, - new XAttribute(XMLNames.Report_Results_Fuel_Type_Attr, fc.Fuel.FuelType.ToXMLFormat()), - GetFuelConsumptionEntries(fc.TotalFuelConsumptionCorrected, fc.Fuel, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount).Select(x => new XElement(TNS + XMLNames.Report_Results_FuelConsumption, x.ValueAsUnit(3, 1))) - ); + return GetElement(fc.TotalFuelConsumptionCorrected, fc.Fuel, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount); } public XElement GetElement(IWeightedResult entry, IFuelProperties fuel, Kilogram consumption) - { - return new XElement(TNS + XMLNames.Report_Results_Fuel, - new XAttribute(XMLNames.Report_Results_Fuel_Type_Attr, fuel.FuelType.ToXMLFormat()), - GetFuelConsumptionEntries(consumption, fuel, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount).Select(x => new XElement(TNS + XMLNames.Report_Results_FuelConsumption, x.ValueAsUnit(3, 1))) - ); + { + return GetElement(consumption, fuel, entry.Distance, entry.Payload, entry.CargoVolume, entry.PassengerCount); + } + + protected virtual XElement GetElement(Kilogram consumption, IFuelProperties fuel, Meter distance, Kilogram payLoad, CubicMeter cargoVolume, double? passengerCount) + { + return new XElement(TNS + XMLNames.Report_Results_Fuel, + new XAttribute(XMLNames.Report_Results_Fuel_Type_Attr, fuel.FuelType.ToXMLFormat()), + GetFuelConsumptionEntries(consumption, fuel, distance, payLoad, cargoVolume, passengerCount).Select(x => new XElement(TNS + XMLNames.Report_Results_FuelConsumption, x.ValueAsUnit(3, 1))) + ); } #endregion @@ -114,5 +116,4 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common #endregion } - } \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/IResultsWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/IResultsWriter.cs index da451d48a4..b506435e5c 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/IResultsWriter.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/IResultsWriter.cs @@ -75,7 +75,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common IResultGroupWriter GetBusSimulationParameterWriter(ICommonResultsWriterFactory factory, XNamespace ns); IFuelConsumptionWriter GetFuelConsumptionBus(ICommonResultsWriterFactory factory, XNamespace ns); - IElectricEnergyConsumptionWriter GetElectricEnergyConsumptionBus(ICommonResultsWriterFactory factory, XNamespace ns); + + IElectricEnergyConsumptionWriter GetElectricEnergyConsumptionBus(ICommonResultsWriterFactory factory, XNamespace ns); ICO2Writer GetCO2ResultBus(ICommonResultsWriterFactory factory, XNamespace ns); ICO2Writer GetCO2ResultPEVBus(ICommonResultsWriterFactory factory, XNamespace ns); diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultTotalWriter.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultTotalWriter.cs index fb1e35a525..caef6f1b76 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultTotalWriter.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/Common/ResultTotalWriter.cs @@ -16,12 +16,12 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common public override XElement GetElement(IResultEntry entry) { - var fcWrtier = FuelConsumptionWriter; + var fcWriter = FuelConsumptionWriter; return new XElement(TNS + XMLNames.Report_ResultEntry_Total, VehiclePerformanceWriter.GetElement(entry), - fcWrtier != null + fcWriter != null ? entry.FuelData.Select(f => - fcWrtier.GetElement(entry, entry.FuelConsumptionFinal(f.FuelType))) + fcWriter.GetElement(entry, entry.FuelConsumptionFinal(f.FuelType))) : null, ElectricEnergyConsumptionWriter?.GetElement(entry), CO2Writer?.GetElements(entry), @@ -92,7 +92,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common protected override IResultGroupWriter VehiclePerformanceWriter => _factory.GetVehiclePerformancePEVLorry(_factory, TNS); - protected override IFuelConsumptionWriter FuelConsumptionWriter => null; + protected override IFuelConsumptionWriter FuelConsumptionWriter => null; + protected override IElectricEnergyConsumptionWriter ElectricEnergyConsumptionWriter => _factory.GetElectricEnergyConsumptionLorry(_factory, TNS); @@ -180,7 +181,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common #endregion } - + public class BusHEVNonOVCTotalWriter : NonOVCTotalWriterBase { public BusHEVNonOVCTotalWriter(ICommonResultsWriterFactory factory, XNamespace ns) : base(factory, ns) { } @@ -203,8 +204,8 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common #region Overrides of NonOVCTotalWriterBase protected override IResultGroupWriter VehiclePerformanceWriter => _factory.GetVehiclePerformancePEVBus(_factory, TNS); - protected override IFuelConsumptionWriter FuelConsumptionWriter => null; - + //protected override IFuelConsumptionWriter FuelConsumptionWriter => _factory.GetZEVFuelConsumptionBus(_factory, TNS); + protected override IFuelConsumptionWriter FuelConsumptionWriter => null; protected override IElectricEnergyConsumptionWriter ElectricEnergyConsumptionWriter => _factory.GetElectricEnergyConsumptionBus(_factory, TNS); protected override ICO2Writer CO2Writer => _factory.GetCO2ResultPEVBus(_factory, TNS); protected override IElectricRangeWriter ElectricRangeWriter => _factory.GetElectricRangeWriter(_factory, TNS); diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFResultsNinjectModule.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFResultsNinjectModule.cs index da90cf8a5a..125bafca30 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFResultsNinjectModule.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/CustomerInformationFile_0_9/CIFResultsNinjectModule.cs @@ -1,4 +1,5 @@ -using System.Xml.Linq; +using System.Diagnostics; +using System.Xml.Linq; using Ninject.Activation; using Ninject.Extensions.Factory; using Ninject.Modules; @@ -170,7 +171,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation .NamedLikeFactoryMethod((ICIFResultsWriterFactory c) => c.GetErrorDetailsWriter(null, XNamespace.None)); } - + [DebuggerStepThrough] private bool AccessedViaCIFResultsWriterFactory(IRequest request) { if (request.ParentRequest == null) { diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/MRFResultsNinjectModule.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/MRFResultsNinjectModule.cs index 30038bd8c0..17be243e64 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/MRFResultsNinjectModule.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/MRFResultsNinjectModule.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Xml.Linq; using Ninject.Activation; using Ninject.Extensions.Factory; @@ -156,7 +157,9 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation Bind<IFuelConsumptionWriter>().To<BusFuelConsumptionWriter>().When(AccessedViaMRFResultsWriterFactory) .NamedLikeFactoryMethod((IMRFResultsWriterFactory c) => c.GetFuelConsumptionBus(null, XNamespace.None)); - Bind<IElectricEnergyConsumptionWriter>().To<BusElectricEnergyConsumptionWriter>().When(AccessedViaMRFResultsWriterFactory) + + + Bind<IElectricEnergyConsumptionWriter>().To<BusElectricEnergyConsumptionWriter>().When(AccessedViaMRFResultsWriterFactory) .NamedLikeFactoryMethod((IMRFResultsWriterFactory c) => c.GetElectricEnergyConsumptionBus(null, XNamespace.None)); Bind<ICO2Writer>().To<BusCO2Writer>().When(AccessedViaMRFResultsWriterFactory) .NamedLikeFactoryMethod((IMRFResultsWriterFactory c) => c.GetCO2ResultBus(null, XNamespace.None)); @@ -178,6 +181,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation .NamedLikeFactoryMethod((ICIFResultsWriterFactory c) => c.GetErrorDetailsWriter(null, XNamespace.None)); } + [DebuggerStepThrough] private bool AccessedViaMRFResultsWriterFactory(IRequest request) { if (request.ParentRequest == null) { diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ManufacturerReport/CompletedBusManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ManufacturerReport/CompletedBusManufacturerReport.cs index 0a157ae807..f8daf58789 100644 --- a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ManufacturerReport/CompletedBusManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/ManufacturerReport_0_9/ManufacturerReport/CompletedBusManufacturerReport.cs @@ -75,9 +75,10 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport. public Meter ActualChargeDepletingRange { get; set; } public Meter EquivalentAllElectricRange { get; set; } public Meter ZeroCO2EmissionsRange { get; set; } - public IFuelProperties AuxHeaterFuel { get; } + public IFuelProperties AuxHeaterFuel { get; set; } public Kilogram ZEV_FuelConsumption_AuxHtr { get; set; } - public Kilogram ZEV_CO2 { get; } + public Kilogram ZEV_CO2 { get; set; } + public void SetResultData(VectoRunData runData, IModalDataContainer data, double weightingFactor) { throw new NotImplementedException(); @@ -253,11 +254,12 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport. //Fuels result.FuelData = specificResult.FuelData; var co2Sum = 0.SI<Kilogram>(); - foreach (var fuel in specificResult.CorrectedFinalFuelConsumption.Keys) { + + foreach (var fuel in genericResult.CorrectedFinalFuelConsumption.Keys) { var fuelFactor = CalculateFactor(combinedResults, r => r.FuelConsumptionFinal(fuel).TotalFuelConsumptionCorrected); var completedFuelConsumption = - fuelFactor * (primaryResult.EnergyConsumption[fuel] * specificResult.Distance ); + fuelFactor * (primaryResult.EnergyConsumption[fuel] * specificResult.Distance); var fuelConsumption = new CompletedBusFuelConsumption() { Fuel = specificResult.FuelData.Single(f => f.FuelType == fuel), EnergyDemand = completedFuelConsumption, @@ -268,19 +270,30 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport. result.CO2Total = co2Sum; - result.ElectricEnergyConsumption = null; + result.ElectricEnergyConsumption = null; if (!(primaryResult.ElectricEnergyConsumption?.IsEqual(0) ?? true)){ var electricEnergyFactor = CalculateFactor(combinedResults, r => r.ElectricEnergyConsumption); result.ElectricEnergyConsumption = electricEnergyFactor * primaryResult.ElectricEnergyConsumption * specificResult.Distance; + } - - result.ZEV_FuelConsumption_AuxHtr = -777.SI<Kilogram>(); + if (specificResult.ZEV_FuelConsumption_AuxHtr?.IsGreaterOrEqual(0) ?? false) { + result.ZEV_FuelConsumption_AuxHtr = specificResult.ZEV_FuelConsumption_AuxHtr; + var auxHeaterFuel = specificResult.AuxHeaterFuel; + + result.AuxHeaterFuel = auxHeaterFuel; + result.FuelData.Add(auxHeaterFuel); + + result.ZEV_CO2 = result.ZEV_FuelConsumption_AuxHtr * auxHeaterFuel.CO2PerFuelWeight; + } + + + if (genericResult.VectoRunData.JobType.IsOneOf(VectoSimulationJobType.BatteryElectricVehicle, VectoSimulationJobType.IEPC_E)) { @@ -290,9 +303,9 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport. result.EquivalentAllElectricRange = elRanges.EquivalentAllElectricRange; result.ActualChargeDepletingRange = elRanges.ActualChargeDepletingRange; result.ZeroCO2EmissionsRange = elRanges.ZeroCO2EmissionsRange; - } - + } + _results.Add(result); } #endregion diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs index d637e284fb..4b5fd91f53 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs @@ -34,7 +34,6 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Linq; -using System.Xml; using System.Xml.Linq; using System.Xml.XPath; using TUGraz.VectoCommon.BusAuxiliaries; @@ -230,6 +229,13 @@ namespace TUGraz.VectoCore.OutputData.XML EquivalentAllElectricRange = ranges.EquivalentAllElectricRange; ZeroCO2EmissionsRange = ranges.ZeroCO2EmissionsRange; ElectricEnergyConsumption = ranges.ElectricEnergyConsumption; + + var fc = data.CorrectedModalData.FuelCorrection.Values.FirstOrDefault(); + if (fc != null) { + ZEV_FuelConsumption_AuxHtr = fc.FC_AUXHTR_KM * Distance; + AuxHeaterFuel = fc.Fuel; + + } } if (data.HasGearbox && !runData.JobType.IsOneOf(VectoSimulationJobType.IEPC_E, VectoSimulationJobType.IEPC_S)) { diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs b/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs index 7a112c1f7b..f41d165c30 100644 --- a/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs +++ b/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs @@ -38,7 +38,9 @@ public class PrimaryBusSimulation private const string BASE_DIR = @"TestData\Integration\DeclarationMode\2nd_AmendmDeclMode\"; private const string BASE_DIR_COMPLETED = @"TestData\Integration\DeclarationMode\2nd_AmendmDeclMode\CompletedBus"; - private const string BASE_DIR_VIF = @"TestData\Integration\DeclarationMode\2nd_AmendmDeclMode\CompletedBus\VIF"; + + private const string BASE_DIR_FACTOR_METHOD_MODEL_DATA = @"TestData\Integration\DeclarationMode\2nd_AmendmDeclMode\CompletedBus\FactorMethod"; + private const string BASE_DIR_VIF = @"TestData\Integration\DeclarationMode\2nd_AmendmDeclMode\CompletedBus\VIF"; private ThreadLocal<StandardKernel> _kernel; private StandardKernel Kernel => _kernel.Value; @@ -178,6 +180,7 @@ public class PrimaryBusSimulation TestCase(@"PrimaryBus/P-HEV/PrimaryCityBus_P1_HEV_Supercap.xml", @"HEV_completedBus_2.xml", @"PrimaryCityBus_P1_HEV_Supercap.RSLT_VIF.xml", CycleCO, LowL, TestName = "2nd Amendment FactorMethodRunData CityBus HEV P1 SuperCap"), + ] public void TestFactorMethodRunData(string primary, string completed, string vifFile, MissionType mission, LoadingType loading) { @@ -230,6 +233,31 @@ public class PrimaryBusSimulation SerializeRunData(runsFactoryFinal, outputPath); } + + + + [TestCase()] + public void TestFactorMethodRunDataFromDedicatedFolder(string subfolder, string primary, string completed, MissionType mission, LoadingType loading, string testName) + { + + bool createVif = true; + + string vif = ""; + var testMissionFilter = GetTestMissionFilter(); + testMissionFilter.SetMissions((mission, loading)); + + + RunSimulationPrimary(primary, -1, out vif); + + + TestFactorMethodRunData(primary, completed, vif, mission, loading); + } + + public TestMissionFilter GetTestMissionFilter() + { + Kernel.Rebind<IMissionFilter>().To<TestMissionFilter>(); + return Kernel.Get<TestMissionFilter>(); + } private static void SerializeRunData(ISimulatorFactory runsFactorySingle, string outputPath) { @@ -312,7 +340,7 @@ public class PrimaryBusSimulation var runsFactory = simFactory.Factory(ExecutionMode.Declaration, dataProvider, fileWriter, null, null); - //runsFactory.WriteModalResults = true; + runsFactory.WriteModalResults = true; runsFactory.SerializeVectoRunData = true; var jobContainer = new JobContainer(new SummaryDataContainer(fileWriter)) { }; //var jobContainer = new JobContainer(new MockSumWriter()) { }; @@ -331,6 +359,10 @@ public class PrimaryBusSimulation } public void RunSimulationPrimary(string jobFile, int runIdx) + { + RunSimulationPrimary(jobFile, runIdx, out var _); + } + public void RunSimulationPrimary(string jobFile, int runIdx, out string vifFile) { var filePath = Path.Combine(BASE_DIR, jobFile); var dataProvider = _xmlReader.CreateDeclaration(filePath); @@ -370,7 +402,7 @@ public class PrimaryBusSimulation jobContainer.WaitFinished(); Assert.IsTrue(jobContainer.AllCompleted); Assert.IsTrue(jobContainer.Runs.TrueForAll(runEntry => runEntry.Success)); - + vifFile = fileWriter.XMLMultistageReportFileName; PrintRuns(jobContainer, fileWriter); PrintFiles(fileWriter); } -- GitLab