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

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

adding output field in vsum file: electric energy consumption considering...

adding output field in vsum file: electric energy consumption considering re-charging losses for CD mode only
parent c38a8033
No related branches found
No related tags found
No related merge requests found
Showing
with 69 additions and 34 deletions
......@@ -1437,7 +1437,7 @@ namespace TUGraz.VectoCore.Models.Declaration
var D13_realWorldFactorUsageStartSoC = vehicleOperation.RealWorldUsageFactors.StartSoCBeforeMission;
var D14_realWorldFactorChargeDuringMission = vehicleOperation.RealWorldUsageFactors.StationaryChargingDuringMission;
var (etaChgBatDepot, etaChgBatInMission, etaChtBatWeighted) = CalculateChargingEfficiency(cdResult, vehicleOperation, batteryData);
var (etaChgBatDepot, etaChgBatInMission, etaChtBatWeighted) = CalculateChargingEfficiencyOVCHEV(cdResult.MaxChargingPower, vehicleOperation, batteryData);
var D17_maxStatChargingPower = cdResult.MaxChargingPower;
......@@ -1503,13 +1503,13 @@ namespace TUGraz.VectoCore.Models.Declaration
return retVal;
}
private static (double, double, double) CalculateChargingEfficiency(IResultEntry cdResult,
public static (double, double, double) CalculateChargingEfficiencyOVCHEV(Watt maxChargingPwrVeh,
VehicleOperationLookup.VehicleOperationData vehicleOperation, BatterySystemData batteryData)
{
var depotChargingPower =
VectoMath.Max(MinDepotChgPwr, batteryData.UseableStoredEnergy / DepotChargingDuration);
var inMissionChargingPower = VectoMath.Min(vehicleOperation.StationaryChargingMaxPwrInfrastructure,
cdResult.MaxChargingPower);
maxChargingPwrVeh);
var tmpBattery = new BatterySystem(null, batteryData);
var centerSoC = (tmpBattery.MinSoC + tmpBattery.MaxSoC) / 2.0;
......@@ -1535,7 +1535,7 @@ namespace TUGraz.VectoCore.Models.Declaration
totalChargedEnergy);
}
private static double CalculateChargingEfficiency(VectoRunData runData)
public static double CalculateChargingEfficiencyPEV(VectoRunData runData)
{
var batteryData = runData.BatteryData;
var tmpBattery = new BatterySystem(null, batteryData);
......@@ -1627,9 +1627,9 @@ namespace TUGraz.VectoCore.Models.Declaration
throw new VectoException("Battery Data is required for PEV range calculation");
}
var D9_chargingEfficiencyBattery = CalculateChargingEfficiency(runData);
var D9_chargingEfficiencyBattery = CalculateChargingEfficiencyPEV(runData);
var D15_useableBatteryCapacityForR_CDA = batteryData.UseableStoredEnergy;
var D13_electricEnergyConsumption = data.CorrectedModalData.ElectricEnergyConsumption;
var D13_electricEnergyConsumption = data.CorrectedModalData.ElectricEnergyConsumption_SoC;
var D16_actualChargeDepletingRange = D15_useableBatteryCapacityForR_CDA / D13_electricEnergyConsumption * data.Distance;
var D17_equivalentAllElectricRange = D16_actualChargeDepletingRange;
......
using System.Collections.Generic;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Models.Declaration;
using TUGraz.VectoCore.Models.Simulation.Data;
namespace TUGraz.VectoCore.OutputData
......@@ -11,9 +12,11 @@ namespace TUGraz.VectoCore.OutputData
public ICorrectedModalData ApplyCorrection(IModalDataContainer modData, VectoRunData runData)
{
var chgEfficiency = DeclarationData.CalculateChargingEfficiencyPEV(runData);
return new PEVCorrectedModalData(modData) {
ElectricEnergyConsumption = -modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int),
ElectricEnergyConsumption_SoC = -modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int),
ElectricEnergyConsumption_Final = -modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int) / chgEfficiency,
};
}
......
......@@ -181,8 +181,12 @@ namespace TUGraz.VectoCore.OutputData
Dictionary<FuelType, IFuelConsumptionCorrection> FuelCorrection { get; }
Kilogram CO2Total { get; }
Joule FuelEnergyConsumptionTotal { get; }
WattSecond ElectricEnergyConsumption { get; set; }
WattSecondPerMeter ElectricEnergyConsumptionPerMeter { get; }
WattSecond ElectricEnergyConsumption_SoC { get; set; }
WattSecondPerMeter ElectricEnergyConsumption_SoC_PerMeter { get; }
WattSecond ElectricEnergyConsumption_Final { get; set; }
WattSecondPerMeter ElectricEnergyConsumption_Final_PerMeter { get; }
}
public interface IFuelConsumptionCorrection
......
......@@ -347,11 +347,18 @@ namespace TUGraz.VectoCore.OutputData
{
_modData = modData;
}
public abstract WattSecond ElectricEnergyConsumption { get; set; }
public abstract WattSecond ElectricEnergyConsumption_SoC { get; set; }
public WattSecondPerMeter ElectricEnergyConsumptionPerMeter => ElectricEnergyConsumption == null || _modData.Distance.IsEqual(0)
public abstract WattSecond ElectricEnergyConsumption_Final { get; set; }
public WattSecondPerMeter ElectricEnergyConsumption_SoC_PerMeter => ElectricEnergyConsumption_SoC == null || _modData.Distance.IsEqual(0)
? null
: ElectricEnergyConsumption / _modData.Distance;
: ElectricEnergyConsumption_SoC / _modData.Distance;
public WattSecondPerMeter ElectricEnergyConsumption_Final_PerMeter =>
ElectricEnergyConsumption_Final == null || _modData.Distance.IsEqual(0)
? null
: ElectricEnergyConsumption_Final / _modData.Distance;
}
public class CorrectedModalData : AbstractCorrectedModalData, ICorrectedModalData
......@@ -417,9 +424,8 @@ namespace TUGraz.VectoCore.OutputData
}
}
public override WattSecond ElectricEnergyConsumption { get; set; }
public override WattSecond ElectricEnergyConsumption_SoC { get; set; }
public override WattSecond ElectricEnergyConsumption_Final { get; set; }
public Second ICEOffTimeStandstill { get; set; }
public WattSecond EnergyAuxICEOffStandstill { get; set; }
......@@ -582,7 +588,8 @@ namespace TUGraz.VectoCore.OutputData
public Dictionary<FuelType, IFuelConsumptionCorrection> FuelCorrection => new Dictionary<FuelType, IFuelConsumptionCorrection>();
public Kilogram CO2Total => 0.SI<Kilogram>();
public Joule FuelEnergyConsumptionTotal => 0.SI<Joule>();
public override WattSecond ElectricEnergyConsumption { get; set; } = 0.SI<WattSecond>();
public override WattSecond ElectricEnergyConsumption_SoC { get; set; } = 0.SI<WattSecond>();
public override WattSecond ElectricEnergyConsumption_Final { get; set; } = 0.SI<WattSecond>();
#endregion
}
......
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Models.Declaration;
using TUGraz.VectoCore.Models.Simulation.Data;
namespace TUGraz.VectoCore.OutputData
......@@ -10,10 +11,18 @@ namespace TUGraz.VectoCore.OutputData
public override ICorrectedModalData ApplyCorrection(IModalDataContainer modData, VectoRunData runData)
{
var r = base.ApplyCorrection(modData, runData);
var vehicleOperation = DeclarationData.VehicleOperation.LookupVehicleOperation(runData.VehicleData.VehicleClass, runData.Mission.MissionType);
var etaChtBatWeighted = 1.0;
if (runData.OVCMode == VectoRunData.OvcHevMode.ChargeDepleting) {
(_, _, etaChtBatWeighted) =
DeclarationData.CalculateChargingEfficiencyOVCHEV(runData.MaxChargingPower, vehicleOperation,
runData.BatteryData);
}
r.ElectricEnergyConsumption = -modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int);
r.ElectricEnergyConsumption_SoC = -modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int);
r.ElectricEnergyConsumption_Final = -modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int) / etaChtBatWeighted;
return r;
}
......
......@@ -2,6 +2,7 @@
using TUGraz.VectoCommon.BusAuxiliaries;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Models.Declaration;
using TUGraz.VectoCore.Models.Simulation.Data;
namespace TUGraz.VectoCore.OutputData
......@@ -14,9 +15,14 @@ namespace TUGraz.VectoCore.OutputData
{
var r = base.ApplyCorrection(modData, runData);
var chgEfficiency = 1.0;
r.ElectricEnergyConsumption = -modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int);
if (runData.OVCMode == VectoRunData.OvcHevMode.ChargeDepleting) {
chgEfficiency = DeclarationData.CalculateChargingEfficiencyPEV(runData);
}
r.ElectricEnergyConsumption_SoC = -modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int);
r.ElectricEnergyConsumption_Final = -modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int) / chgEfficiency;
return r;
}
......
......@@ -125,6 +125,8 @@ namespace TUGraz.VectoCore.OutputData
public const string FCFINAL_LiterPer100M3KM = "FC-Final{0} [l/100m³km]";
public const string FCFINAL_LiterPer100PassengerKM = "FC-Final{0} [l/100Pkm]";
public const string EC_el_SOC = "EC_el_SoC [kWh";
public const string EC_el_final = "EC_el_final [kWh]";
public const string EC_el_final_KM = "EC_el_final [kWh/km]";
public const string EC_el_final_TKM = "EC_el_final [kWh/tkm]";
......@@ -645,25 +647,26 @@ namespace TUGraz.VectoCore.OutputData
null : (m.CorrectedModalData.KilogramCO2PerMeter / r.VehicleData.PassengerCount.Value).ConvertToGrammPerKiloMeter(), ModalResultField.dist) },
// electric consumption
{ EC_el_SOC, SumFunc( (r, m) =>
m.CorrectedModalData.ElectricEnergyConsumption_SoC?.ConvertToKiloWattHour()) },
{ EC_el_final, SumFunc( (r , m )
=> (m.CorrectedModalData.ElectricEnergyConsumption?.ConvertToKiloWattHour()))},
=> (m.CorrectedModalData.ElectricEnergyConsumption_Final?.ConvertToKiloWattHour()))},
{ EC_el_final_KM, SumFunc((r, m)
=> (m.CorrectedModalData.ElectricEnergyConsumptionPerMeter)?.ConvertToKiloWattHourPerKiloMeter())},
=> (m.CorrectedModalData.ElectricEnergyConsumption_Final_PerMeter)?.ConvertToKiloWattHourPerKiloMeter())},
{ EC_el_final_TKM, SumFunc((r, m)
=> r.VehicleData?.Loading == null ||
r.VehicleData.Loading.IsEqual(0) ||
m.CorrectedModalData.ElectricEnergyConsumption == null ||
m.CorrectedModalData.ElectricEnergyConsumptionPerMeter == null
? null : (m.CorrectedModalData.ElectricEnergyConsumptionPerMeter / r.VehicleData.Loading).ConvertToKiloWattHourPerTonKiloMeter())},
m.CorrectedModalData.ElectricEnergyConsumption_Final_PerMeter == null
? null : (m.CorrectedModalData.ElectricEnergyConsumption_Final_PerMeter / r.VehicleData.Loading).ConvertToKiloWattHourPerTonKiloMeter())},
{ EC_el_final_M3KM, SumFunc((r, m)
=> r.VehicleData.CargoVolume == null ||
r.VehicleData.CargoVolume.IsEqual(0) ||
m.CorrectedModalData.ElectricEnergyConsumption == null ||
m.CorrectedModalData.ElectricEnergyConsumptionPerMeter == null
? null : (m.CorrectedModalData.ElectricEnergyConsumptionPerMeter / r.VehicleData.CargoVolume).ConvertToKiloWattHourPerCubicMeterKiloMeter())},
m.CorrectedModalData.ElectricEnergyConsumption_Final_PerMeter == null
? null : (m.CorrectedModalData.ElectricEnergyConsumption_Final_PerMeter / r.VehicleData.CargoVolume).ConvertToKiloWattHourPerCubicMeterKiloMeter())},
{ ElectricEnergyConsumption_PKM, SumFunc((r, m)
=> r.VehicleData?.PassengerCount == null || m.CorrectedModalData.ElectricEnergyConsumption == null || m.CorrectedModalData.ElectricEnergyConsumptionPerMeter == null ?
null : (m.CorrectedModalData.ElectricEnergyConsumptionPerMeter / r.VehicleData.PassengerCount.Value).ConvertToKiloWattHourPerPassengerKiloMeter())},
=> r.VehicleData?.PassengerCount == null ||
m.CorrectedModalData.ElectricEnergyConsumption_Final_PerMeter == null
? null : (m.CorrectedModalData.ElectricEnergyConsumption_Final_PerMeter / r.VehicleData.PassengerCount.Value).ConvertToKiloWattHourPerPassengerKiloMeter())},
// {, SumFunc((r, m) =>)},
};
......
......@@ -352,6 +352,7 @@ namespace TUGraz.VectoCore.OutputData
};
public static readonly Tuple<string, Type>[] ElectricEnergyConsumption = {
Tuple.Create(SumDataFields.EC_el_SOC, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.EC_el_final, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.EC_el_final_KM, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.EC_el_final_TKM, typeof(ConvertedSI)),
......@@ -663,6 +664,7 @@ namespace TUGraz.VectoCore.OutputData
});
cols.AddRange(new [] {
SumDataFields.EC_el_SOC,
SumDataFields.EC_el_final,
SumDataFields.EC_el_final_KM,
SumDataFields.EC_el_final_TKM,
......
......@@ -220,7 +220,7 @@ namespace TUGraz.VectoCore.OutputData.XML
CorrectedFinalFuelConsumption = data.CorrectedModalData.FuelCorrection;
CO2Total = data.CorrectedModalData.CO2Total;
EnergyConsumptionTotal = data.CorrectedModalData.FuelEnergyConsumptionTotal;
ElectricEnergyConsumption = data.CorrectedModalData.ElectricEnergyConsumption;
ElectricEnergyConsumption = data.CorrectedModalData.ElectricEnergyConsumption_SoC;
if (runData.JobType.IsOneOf(VectoSimulationJobType.BatteryElectricVehicle,
VectoSimulationJobType.IEPC_E)) {
......
......@@ -376,6 +376,7 @@ public class LorrySimulation
SumDataFields.CO2_M3KM,
};
var EC_el = new List<string> {
SumDataFields.EC_el_SOC,
SumDataFields.EC_el_final,
SumDataFields.EC_el_final_KM,
SumDataFields.EC_el_final_TKM,
......@@ -922,7 +923,7 @@ public class LorrySimulation
writeReports ? null : new NullDeclarationReport()); //, writeReports ? null : new NullDeclarationReport());
DisableIterativeRuns(runsFactory);
runsFactory.WriteModalResults = true;
var sumWriter = new MockSumWriter();
var sumWriter = new SummaryDataContainer(fileWriter); //new MockSumWriter();
var jobContainer = new JobContainer(sumWriter);
runsFactory.SumData = sumWriter;
......
......@@ -620,7 +620,7 @@ public class TestXMLResultsWriting
mc.Setup(x => x.FuelEnergyConsumptionTotal).Returns(1e9.SI<Joule>());
var elOvcFactor = ovcMode == VectoRunData.OvcHevMode.ChargeSustaining ? 0 : 1.0;
mc.Setup(x => x.ElectricEnergyConsumption).Returns(200.SI(Unit.SI.Mega.Joule).Cast<WattSecond>() * elOvcFactor);
mc.Setup(x => x.ElectricEnergyConsumption_SoC).Returns(200.SI(Unit.SI.Mega.Joule).Cast<WattSecond>() * elOvcFactor);
return modData.Object;
}
......
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