Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 394ea32a authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

implementing new ESS correction

parent 1f45e1ec
No related branches found
No related tags found
No related merge requests found
......@@ -153,7 +153,6 @@ namespace TUGraz.VectoCore.OutputData
public interface ICorrectedModalData
{
WattSecond WorkESS { get; }
WattSecond WorkWHREl { get; }
WattSecond WorkWHRElMech { get; }
WattSecond WorkWHRMech { get; }
......@@ -392,11 +391,6 @@ namespace TUGraz.VectoCore.OutputData
return data.TimeIntegral<WattSecond>(ModalResultField.P_ice_fcmap, x => x < 0);
}
public static WattSecond WorkAuxiliariesDuringEngineStop(this IModalDataContainer data)
{
return data.TimeIntegral<WattSecond>(ModalResultField.P_aux_ESS_mech_ice_off);
}
public static WattSecond WorkEngineStart(this IModalDataContainer data)
{
return data.TimeIntegral<WattSecond>(ModalResultField.P_ice_start);
......
using System.Collections.Generic;
using System.Data;
using System.Linq;
using TUGraz.VectoCommon.BusAuxiliaries;
using TUGraz.VectoCommon.Exceptions;
......@@ -19,14 +20,37 @@ namespace TUGraz.VectoCore.OutputData
var r = new CorrectedModalData();
var duration = modData.Duration;
var distance = modData.Distance;
var essParams = runData.DriverData.EngineStopStart;
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()),
v = x.Field<MeterPerSecond>(ModalResultField.v_act.GetName()),
IceOn = x.Field<bool>(ModalResultField.ICEOn.GetName())
}).Where(x => 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()),
v = x.Field<MeterPerSecond>(ModalResultField.v_act.GetName()),
IceOn = x.Field<bool>(ModalResultField.ICEOn.GetName())
}).Where(x => !x.v.IsEqual(0) && !x.IceOn).ToList();
r.ICEOffTimeStandstill = entriesAuxICEStandstill.Sum(x => x.dt);
r.EnergyAuxICEOffStandstill = entriesAuxICEStandstill.Sum(x => x.P_off * x.dt);
r.EnergyAuxICEOnStandstill = entriesAuxICEStandstill.Sum(x => x.P_on * x.dt);
r.ICEOffTimeDriving = entriesAuxICEDriving.Sum(x => x.dt);
r.EnergyAuxICEOffDriving = entriesAuxICEDriving.Sum(x => x.P_off * x.dt);
r.EnergyPowerICEOnDriving = entriesAuxICEDriving.Sum(x => x.P_on * x.dt);
r.WorkESS = modData.WorkAuxiliariesDuringEngineStop() + modData.WorkEngineStart();
r.WorkWHREl = modData.TimeIntegral<WattSecond>(ModalResultField.P_WHR_el_corr);
r.WorkWHRElMech = -r.WorkWHREl / DeclarationData.AlternaterEfficiency;
r.WorkWHRMech = -modData.TimeIntegral<WattSecond>(ModalResultField.P_WHR_mech_corr);
//r.WorkWHR = r.WorkWHRElMech + r.WorkWHRMech;
if (runData.BusAuxiliaries != null) {
var workBusAuxPSCompOff = modData.EnergyPneumaticCompressorPowerOff();
var workBusAuxPSCompOn = modData.EnergyPneumaticCompressorAlwaysOn();
......@@ -59,6 +83,7 @@ namespace TUGraz.VectoCore.OutputData
var firstFuel = true;
foreach (var fuel in modData.FuelData) {
var engFuel = runData.EngineData.Fuels.First(x => x.FuelData.Equals(fuel));
var f = new FuelConsumptionCorrection();
f.Fuel = fuel;
f.Distance = distance != null && distance.IsGreater(0) ? distance : null;
......@@ -69,23 +94,35 @@ namespace TUGraz.VectoCore.OutputData
f.FcModSum = modData.TotalFuelConsumption(ModalResultField.FCFinal, fuel);
f.FcEssCorr = f.FcModSum + f.EngineLineCorrectionFactor * r.WorkESS;
f.FcBusAuxPsCorr = f.FcEssCorr + f.EngineLineCorrectionFactor * r.WorkBusAuxPSCorr;
f.FcBusAuxEsCorr = f.FcBusAuxPsCorr + f.EngineLineCorrectionFactor * r.WorkBusAuxESMech;
f.FcWHRCorr = f.FcBusAuxEsCorr + f.EngineLineCorrectionFactor * r.WorkWHR;
var fcIceOnAuxStandstill = engFuel.ConsumptionMap.GetFuelConsumptionValue(
r.AvgAuxPowerICEOnStandstill / runData.EngineData.IdleSpeed, runData.EngineData.IdleSpeed);
var fcIceOnAuxDriving = engFuel.ConsumptionMap.GetFuelConsumptionValue(
r.AvgAuxPowerICEOnDriving / runData.EngineData.IdleSpeed, runData.EngineData.IdleSpeed);
f.FcESS_EngineStart = f.EngineLineCorrectionFactor * modData.WorkEngineStart();
f.FcESS_AuxStandstill_ICEOff = r.EnergyAuxICEOffStandstill * f.EngineLineCorrectionFactor *
essParams.UtilityFactorStandstill;
f.FcESS_AuxStandstill_ICEOn = fcIceOnAuxStandstill * r.ICEOffTimeStandstill *
(1 - essParams.UtilityFactorStandstill);
f.FcESS_AuxDriving_ICEOn = r.EnergyAuxICEOffDriving * f.EngineLineCorrectionFactor *
essParams.UtilityFactorDriving;
f.FcESS_AuxDriving_ICEOff = fcIceOnAuxDriving * r.ICEOffTimeDriving *
(1 - essParams.UtilityFactorDriving);
f.FcBusAuxPs = f.EngineLineCorrectionFactor * r.WorkBusAuxPSCorr;
f.FcBusAuxEs = f.EngineLineCorrectionFactor * r.WorkBusAuxESMech;
f.FcWHR = f.EngineLineCorrectionFactor * r.WorkWHR;
f.FcAuxHtr = 0.SI<Kilogram>();
if (firstFuel) {
firstFuel = false;
f.FcAuxHtr = r.AuxHeaterDemand / fuel.LowerHeatingValueVecto;
}
f.FcAuxHtrCorr = f.FcWHRCorr + f.FcAuxHtr;
f.FcFinal = f.FcAuxHtrCorr;
kilogramCO2PerMeter += distance == null || distance.IsEqual(0)
? 0.SI<KilogramPerMeter>()
: f.FcFinal * fuel.CO2PerFuelWeight / distance;
//--
r.FuelCorrection[fuel.FuelType] = f;
}
......@@ -107,7 +144,7 @@ namespace TUGraz.VectoCore.OutputData
FuelCorrection = new Dictionary<FuelType, IFuelConsumptionCorrection>();
}
public WattSecond WorkESS { get; set; }
//public WattSecond WorkESS { get; set; }
public WattSecond WorkWHREl { get; set; }
public WattSecond WorkWHRElMech { get; set; }
public WattSecond WorkWHRMech { get; set; }
......@@ -151,24 +188,57 @@ namespace TUGraz.VectoCore.OutputData
}
}
public Second ICEOffTimeStandstill { get; set; }
public WattSecond EnergyAuxICEOffStandstill { get; set; }
public WattSecond EnergyAuxICEOnStandstill { get; set; }
public Watt AvgAuxPowerICEOnStandstill {
get { return EnergyAuxICEOnStandstill / ICEOffTimeStandstill; }
}
public Second ICEOffTimeDriving { get; set; }
public WattSecond EnergyAuxICEOffDriving { get; set; }
public WattSecond EnergyPowerICEOnDriving { get; set; }
public Watt AvgAuxPowerICEOnDriving
{
get { return EnergyPowerICEOnDriving / ICEOffTimeDriving; }
}
#endregion
}
public class FuelConsumptionCorrection : IFuelConsumptionCorrection
{
public IFuelProperties Fuel { get; set; }
public Meter Distance { get; set; }
public Second Duration { get; set; }
public Kilogram FcModSum { get; set; }
public Kilogram FcEssCorr { get; set; }
public Kilogram FcBusAuxPsCorr { get; set; }
public Kilogram FcBusAuxEsCorr { get; set; }
public Kilogram FcWHRCorr { get; set; }
public Kilogram FcAuxHtrCorr { get; set; }
public Kilogram FcESS_EngineStart { get; set; }
public Kilogram FcESS_AuxStandstill_ICEOff { get; set; }
public Kilogram FcESS_AuxStandstill_ICEOn { get; set; }
public Kilogram FcESS_AuxDriving_ICEOn { get; set; }
public Kilogram FcESS_AuxDriving_ICEOff { get; set; }
public Kilogram FcESS =>
FcESS_EngineStart + FcESS_AuxStandstill_ICEOff + FcESS_AuxStandstill_ICEOn
+ FcESS_AuxDriving_ICEOn + FcESS_AuxDriving_ICEOff;
public Kilogram FcBusAuxPs { get; set; }
public Kilogram FcBusAuxEs { get; set; }
public Kilogram FcWHR { get; set; }
public Kilogram FcAuxHtr { get; set; }
public Kilogram FcFinal { get; set; }
public Kilogram FcEssCorr => FcModSum + FcESS;
public Kilogram FcBusAuxPsCorr => FcEssCorr + FcBusAuxPs;
public Kilogram FcBusAuxEsCorr => FcBusAuxPsCorr + FcBusAuxEs;
public Kilogram FcWHRCorr => FcBusAuxEsCorr + FcWHR;
public Kilogram FcAuxHtrCorr => FcWHRCorr + FcAuxHtr;
public Kilogram FcFinal => FcAuxHtrCorr;
#region Implementation of IFuelConsumptionCorrection
......@@ -209,6 +279,7 @@ namespace TUGraz.VectoCore.OutputData
{
get { return FcFinal * Fuel.LowerHeatingValueVecto; }
}
#endregion
}
......
......@@ -186,7 +186,7 @@ namespace TUGraz.VectoCore.OutputData
Fields.E_BusAux_PS_corr, Fields.E_BusAux_ES_mech_corr,
Fields.E_BusAux_HVAC_Mech, Fields.E_BusAux_HVAC_El,
Fields.E_BusAux_AuxHeater,
Fields.E_WHR_EL, Fields.E_WHR_MECH, Fields.E_AUX_ESS_MECH, Fields.E_ICE_START, Fields.NUM_ICE_STARTS, Fields.ACC,
Fields.E_WHR_EL, Fields.E_WHR_MECH, Fields.E_ICE_START, Fields.NUM_ICE_STARTS, Fields.ACC,
Fields.ACC_POS, Fields.ACC_NEG, Fields.ACC_TIMESHARE, Fields.DEC_TIMESHARE, Fields.CRUISE_TIMESHARE,
Fields.MAX_SPEED, Fields.MAX_ACCELERATION, Fields.MAX_DECELERATION, Fields.AVG_ENGINE_SPEED,
Fields.MAX_ENGINE_SPEED, Fields.NUM_GEARSHIFTS, Fields.STOP_TIMESHARE, Fields.ICE_FULL_LOAD_TIME_SHARE, Fields.ICE_OFF_TIME_SHARE,
......@@ -428,8 +428,8 @@ namespace TUGraz.VectoCore.OutputData
row[FcCol(Fields.FCESS_H_CORR, suffix)] = fuelConsumption.FC_ESS_CORR_H?.ConvertToGrammPerHour();
row[FcCol(Fields.FC_BusAux_PS_CORR_H, suffix)] = fuelConsumption.FC_BusAux_PS_CORR_H?.ConvertToGrammPerHour();
row[FcCol(Fields.FC_BusAux_ES_CORR_H, suffix)] = fuelConsumption.FC_BusAux_ES_CORR_H;
row[FcCol(Fields.FCWHR_H_CORR, suffix)] = fuelConsumption.FC_WHR_CORR_H;
row[FcCol(Fields.FC_BusAux_ES_CORR_H, suffix)] = fuelConsumption.FC_BusAux_ES_CORR_H?.ConvertToGrammPerHour();
row[FcCol(Fields.FCWHR_H_CORR, suffix)] = fuelConsumption.FC_WHR_CORR_H?.ConvertToGrammPerHour();
row[FcCol(Fields.FC_AUXHTR_H, suffix)] = fuelConsumption.FC_AUXHTR_H?.ConvertToGrammPerHour();
row[FcCol(Fields.FC_AUXHTR_H_CORR, suffix)] = fuelConsumption.FC_AUXHTR_H_CORR?.ConvertToGrammPerHour();
......@@ -654,7 +654,6 @@ namespace TUGraz.VectoCore.OutputData
.ConvertToKiloWattHour();
}
row[Fields.E_AUX_ESS_MECH] = modData.WorkAuxiliariesDuringEngineStop().ConvertToKiloWattHour();
row[Fields.E_ICE_START] = modData.WorkEngineStart().ConvertToKiloWattHour();
foreach (var em in runData.ElectricMachinesData) {
......@@ -1075,8 +1074,6 @@ namespace TUGraz.VectoCore.OutputData
public const string CD_x_A = "CdxA [m²]";
//public const string ROLLING_RESISTANCE_COEFFICIENT = "weighed RRC [-]";
public const string R_DYN = "r_dyn [m]";
public const string CARGO_VOLUME = "Cargo Volume [m³]";
......@@ -1091,8 +1088,7 @@ namespace TUGraz.VectoCore.OutputData
public const string FCNCVC_KM = "FC-NCVc{0} [g/km]";
public const string FCWHTCC_H = "FC-WHTCc{0} [g/h]";
public const string FCWHTCC_KM = "FC-WHTCc{0} [g/km]";
//public const string FCAAUX_H = "FC-AAUX{0} [g/h]";
//public const string FCAAUX_KM = "FC-AAUX{0} [g/km]";
public const string FCESS_H = "FC-ESS{0} [g/h]";
public const string FCESS_KM = "FC-ESS{0} [g/km]";
public const string FCESS_H_CORR = "FC-ESS_Corr{0} [g/h]";
......@@ -1135,7 +1131,6 @@ namespace TUGraz.VectoCore.OutputData
public const string E_AUX_EL_HV = "E_aux_el(HV) [kWh]";
public const string E_AUX_ESS_MECH = "E_aux_ess_mech [kWh]";
public const string E_ICE_START = "E_ice_start [kWh]";
public const string NUM_ICE_STARTS = "ice_starts [-]";
public const string K_ENGLINE = "k_engline{0} [g/kWh]";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment