From ea3ea74d512bfeb86d9a827762c7af6960f644fb Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Mon, 16 Nov 2020 08:47:10 +0100
Subject: [PATCH] update .vmod and .vsum: consistent naming of EM related
 fields (use drive instead of motoring, correct units, add fields for em
 losses and em transmission losses .vsum: add ice off time share, correct
 units, adding energy demand electric aux high voltage system

---
 VECTO.sln.DotSettings                         |  1 +
 .../Simulation/Data/ModalResultField.cs       |  5 +-
 .../SimulationComponent/Impl/ElectricMotor.cs |  1 +
 .../OutputData/IModalDataContainer.cs         | 38 +++++++++----
 .../OutputData/ModalDataContainer.cs          | 27 +++++++--
 .../OutputData/SummaryDataContainer.cs        | 56 +++++++++++--------
 .../OutputData/XML/XMLDeclarationReport.cs    |  2 +-
 .../Utils/MockModalDataContainer.cs           | 16 +++++-
 8 files changed, 101 insertions(+), 45 deletions(-)

diff --git a/VECTO.sln.DotSettings b/VECTO.sln.DotSettings
index f44930e081..978725d131 100644
--- a/VECTO.sln.DotSettings
+++ b/VECTO.sln.DotSettings
@@ -38,6 +38,7 @@
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CSV/@EntryIndexedValue">CSV</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=EPTP/@EntryIndexedValue">EPTP</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=HVAC/@EntryIndexedValue">HVAC</s:String>
+	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ICE/@EntryIndexedValue">ICE</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=JSON/@EntryIndexedValue">JSON</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MT/@EntryIndexedValue">MT</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NS/@EntryIndexedValue">NS</s:String>
diff --git a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs
index 9dd32494cb..2bc2cc74bd 100644
--- a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs
@@ -380,7 +380,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 
 		[ModalResultField(typeof(SI), caption: "n_em-{0}_avg [1/min]", outputFactor: 60 / (2 * Math.PI))] n_electricMotor_,
 		[ModalResultField(typeof(SI), caption: "T_em-{0} [Nm]")] T_electricMotor_,
-		[ModalResultField(typeof(SI), caption: "T_em-{0}_mot_max [Nm]")] T_electricMotor_drive_max_,
+		[ModalResultField(typeof(SI), caption: "T_em-{0}_drive_max [Nm]")] T_electricMotor_drive_max_,
 		[ModalResultField(typeof(SI), caption: "T_em-{0}_gen_max [Nm]")] T_electricMotor_gen_max_,
 		[ModalResultField(typeof(SI), caption: "P_em-{0}_in [kW]", outputFactor: 1e-3)] P_electricMotor_in_,
 		[ModalResultField(typeof(SI), caption: "P_em-{0}_out [kW]", outputFactor: 1e-3)] P_electricMotor_out_,
@@ -390,6 +390,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 		[ModalResultField(typeof(SI), caption: "P_em-{0}_drive_max [kW]", outputFactor: 1e-3)] P_electricMotor_drive_max_,
 		//[ModalResultField(typeof(SI), caption: "P_em-{0}_brake [kW]", outputFactor: 1e-3)] P_electricMotor_brake_,
 		[ModalResultField(typeof(SI), caption: "P_em-{0}_loss [kW]", outputFactor: 1e-3)] P_electricMotorLoss_,
+		[ModalResultField(typeof(SI), caption: "P_em-{0}_transm_loss [kW]", outputFactor: 1e-3)] P_electricMotorTransmissionLoss_,
 		[ModalResultField(typeof(SI), caption: "P_em-{0}_inertia_loss [kW]", outputFactor: 1e-3)] P_electricMotorInertiaLoss_,
 		[ModalResultField(typeof(SI), caption: "EM-{0}_OverloadBuffer [%]", outputFactor: 100)] ElectricMotor_OvlBuffer_,
 
@@ -419,7 +420,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 		[ModalResultField(typeof(SI), caption: "P_reess discharge max [kW]", outputFactor: 1e-3)] P_reess_discharge_max,
 		[ModalResultField(typeof(SI), caption: "U_reess_terminal [V]")] U_reess_terminal,
 		[ModalResultField(typeof(SI), caption: "U_0_reess [V]")] U0_reess,
-		[ModalResultField(typeof(SI), caption: "I_reess [kW]")] I_reess,
+		[ModalResultField(typeof(SI), caption: "I_reess [A]")] I_reess,
 		
 		[ModalResultField(typeof(SI), caption: "E_reess [kWh]", outputFactor: 1/3600e3)] E_RESS,
     }
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
index 02b796e4f3..1ab7d3136d 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
@@ -421,6 +421,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			container[ModalResultField.P_electricMotor_gen_max_, Position] = (CurrentState.DragMax ?? 0.SI<NewtonMeter>()) * avgSpeed;
 			container[ModalResultField.P_electricMotor_drive_max_, Position] = (CurrentState.DriveMax ?? 0.SI<NewtonMeter>()) * avgSpeed;
 			container[ModalResultField.P_electricMotorLoss_, Position] = (CurrentState.InTorque - CurrentState.OutTorque) * avgSpeed - (CurrentState.ElectricPowerToBattery);
+			container[ModalResultField.P_electricMotorTransmissionLoss_, Position] = 0.SI<Watt>();
 			container[ModalResultField.P_electricMotorInertiaLoss_, Position] = CurrentState.InertiaTorqueLoss * avgSpeed;
 
 			var contribution =
diff --git a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
index 480279985e..fad3bc204a 100644
--- a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
@@ -130,11 +130,14 @@ namespace TUGraz.VectoCore.OutputData
 		double ElectricMotorEfficiencyDrive(PowertrainPosition emPos);
 		double ElectricMotorEfficiencyGenerate(PowertrainPosition emPos);
 		WattSecond ElectricMotorOffLosses(PowertrainPosition emPos);
-        double BatteryStartSoC();
-		double BatteryEndSoC();
-		WattSecond BatteryLoss();
-		WattSecond BatteryEnergyEnd();
-		
+		WattSecond ElectricMotorLosses(PowertrainPosition emPos);
+		WattSecond ElectricMotorTransmissionLosses(PowertrainPosition emPos);
+        
+		double BatteryStartSoC();
+		double REESSEndSoC();
+		WattSecond REESSLoss();
+		WattSecond REESSEnergyEnd();
+
 	}
 
 	public static class ModalDataContainerExtensions
@@ -353,23 +356,23 @@ namespace TUGraz.VectoCore.OutputData
 			return data.TimeIntegral<WattSecond>(ModalResultField.P_wheel_in) / data.Duration;
 		}
 
-		public static WattSecond WorkBatteryChargeTerminal(this IModalDataContainer data)
+		public static WattSecond WorkREESSChargeTerminal(this IModalDataContainer data)
 		{
 			return data.TimeIntegral<WattSecond>(ModalResultField.P_reess_terminal, x => x.IsGreater(0));
 		}
 
-		public static WattSecond WorkBatteryDischargeTerminal(this IModalDataContainer data)
+		public static WattSecond WorkREESSDischargeTerminal(this IModalDataContainer data)
 		{
 			return -data.TimeIntegral<WattSecond>(ModalResultField.P_reess_terminal, x => x.IsSmaller(0));
 		}
 
-        public static WattSecond WorkBatteryChargeInternal(this IModalDataContainer data)
+        public static WattSecond WorkREESSChargeInternal(this IModalDataContainer data)
 		{
 			return data.TimeIntegral<WattSecond>(ModalResultField.P_reess_int, x => x.IsGreater(0));
 
         }
 
-		public static WattSecond WorkBatteryDischargeInternal(this IModalDataContainer data)
+		public static WattSecond WorkREESSDischargeInternal(this IModalDataContainer data)
 		{
 			return -data.TimeIntegral<WattSecond>(ModalResultField.P_reess_int, x => x.IsSmaller(0));
 		}
@@ -532,16 +535,27 @@ namespace TUGraz.VectoCore.OutputData
 			return data.Max<PerSecond>(ModalResultField.n_ice_avg);
 		}
 
-		public static Scalar EngineMaxLoadTimeShare(this IModalDataContainer data)
+		public static Scalar ICEMaxLoadTimeShare(this IModalDataContainer data)
 		{
 			var sum = data.GetValues(x => new {
 				tMax = x.Field<NewtonMeter>(ModalResultField.T_ice_full.GetName()).DefaultIfNull(-1),
 				tEng = x.Field<NewtonMeter>(ModalResultField.T_ice_fcmap.GetName()).DefaultIfNull(0),
-				dt = x.Field<Second>(ModalResultField.simulationInterval.GetName())
-			}).Sum(x => x.tMax.IsEqual(x.tEng, 5.SI<NewtonMeter>()) ? x.dt : 0.SI<Second>()) ?? 0.SI<Second>();
+				dt = x.Field<Second>(ModalResultField.simulationInterval.GetName()),
+				iceOn =  !(x[ModalResultField.ICEOn.GetName()] is DBNull) && x.Field<bool>(ModalResultField.ICEOn.GetName())
+			}).Where(x => x.iceOn).Sum(x => x.tMax.IsEqual(x.tEng, 5.SI<NewtonMeter>()) ? x.dt : 0.SI<Second>()) ?? 0.SI<Second>();
 			return 100 * sum / data.Duration;
 		}
 
+		public static Scalar ICEOffTimeShare(this IModalDataContainer data)
+		{
+			var iceOff = data.GetValues(x => new {
+				dt = x[ModalResultField.ICEOn.GetName()] is DBNull
+					? 0.SI<Second>()
+					: x.Field<Second>(ModalResultField.simulationInterval.GetName())
+			}).Sum(x => x.dt) ?? 0.SI<Second>();
+			return 100 * iceOff / data.Duration;
+		}
+
 		/// <summary>
 		/// The following logic applies:
 		/// - shifting from gear A to gear B counts as gearshift (with or without traction interruption)
diff --git a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
index 57582061c3..82aed0a061 100644
--- a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
@@ -70,6 +70,7 @@ namespace TUGraz.VectoCore.OutputData
 			ModalResultField.P_electricMotor_in_, ModalResultField.P_electricMotor_out_,
 			ModalResultField.P_electricMotor_mech_, ModalResultField.P_electricMotor_el_,
 			ModalResultField.P_electricMotorLoss_, ModalResultField.P_electricMotorInertiaLoss_,
+			ModalResultField.P_electricMotorTransmissionLoss_,
 			/*ModalResultField.P_electricMotor_brake_,*/ ModalResultField.P_electricMotor_drive_max_,
 			ModalResultField.P_electricMotor_gen_max_, ModalResultField.ElectricMotor_OvlBuffer_
 		};
@@ -351,7 +352,25 @@ namespace TUGraz.VectoCore.OutputData
 			return selected.Where(x => x.P_em.IsEqual(0)).Sum(x => x.E_mech) ?? 0.SI<WattSecond>();
 		}
 
-        public PerSecond ElectricMotorAverageSpeed(PowertrainPosition emPos)
+		public WattSecond ElectricMotorLosses(PowertrainPosition emPos)
+		{
+			return Data.AsEnumerable().Cast<DataRow>().Sum(r => {
+				var dt = r.Field<Second>(ModalResultField.simulationInterval.GetName());
+				return r.Field<Watt>(string.Format(ModalResultField.P_electricMotorLoss_.GetCaption(),
+					emPos.GetName())) * dt;
+			});
+		}
+
+		public WattSecond ElectricMotorTransmissionLosses(PowertrainPosition emPos)
+		{
+			return Data.AsEnumerable().Cast<DataRow>().Sum(r => {
+				var dt = r.Field<Second>(ModalResultField.simulationInterval.GetName());
+				return r.Field<Watt>(string.Format(ModalResultField.P_electricMotorTransmissionLoss_.GetCaption(),
+					emPos.GetName())) * dt;
+			});
+		}
+
+		public PerSecond ElectricMotorAverageSpeed(PowertrainPosition emPos)
 		{
 			var integral = GetValues(x => x.Field<PerSecond>(string.Format(ModalResultField.n_electricMotor_.GetCaption(), emPos.GetName())).Value() *
 												x.Field<Second>(ModalResultField.simulationInterval.GetName()).Value()).Sum();
@@ -363,17 +382,17 @@ namespace TUGraz.VectoCore.OutputData
 			return Data.AsEnumerable().Cast<DataRow>().First().Field<SI>(ModalResultField.REESSStateOfCharge.GetName()).Value() * 100;
 		}
 
-		public double BatteryEndSoC()
+		public double REESSEndSoC()
 		{
 			return Data.AsEnumerable().Cast<DataRow>().Last().Field<SI>(ModalResultField.REESSStateOfCharge.GetName()).Value() * 100;
         }
 
-		public WattSecond BatteryLoss()
+		public WattSecond REESSLoss()
 		{
 			return TimeIntegral<WattSecond>(ModalResultField.P_reess_loss);
 		}
 
-		public WattSecond BatteryEnergyEnd()
+		public WattSecond REESSEnergyEnd()
 		{
 			return Data.AsEnumerable().Cast<DataRow>().Last().Field<SI>(ModalResultField.E_RESS.GetName())
 				.Cast<WattSecond>();
diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
index 5cb0ad09a9..16f553f788 100644
--- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
@@ -39,6 +39,7 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.InputData.Reader.Impl;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
@@ -177,7 +178,7 @@ namespace TUGraz.VectoCore.OutputData
 			Table.Columns.AddRange(
 				new[] {
 					Fields.CO2_KM, Fields.CO2_TKM, Fields.CO2_M3KM, Fields.CO2_PKM, Fields.P_WHEEL, Fields.P_WHEEL_POS, Fields.P_FCMAP, Fields.P_FCMAP_POS,
-					Fields.E_FCMAP_POS, Fields.E_FCMAP_NEG, Fields.E_POWERTRAIN_INERTIA, Fields.E_AUX, Fields.E_CLUTCH_LOSS,
+					Fields.E_FCMAP_POS, Fields.E_FCMAP_NEG, Fields.E_POWERTRAIN_INERTIA, Fields.E_AUX, Fields.E_AUX_EL_HV, Fields.E_CLUTCH_LOSS,
 					Fields.E_TC_LOSS, Fields.E_SHIFT_LOSS, Fields.E_GBX_LOSS, Fields.E_RET_LOSS, Fields.E_ANGLE_LOSS,
 					Fields.E_AXL_LOSS, Fields.E_BRAKE, Fields.E_VEHICLE_INERTIA, Fields.E_WHEEL, Fields.E_AIR, Fields.E_ROLL, Fields.E_GRAD,
 					Fields.AirConsumed, Fields.AirGenerated, Fields.E_PS_CompressorOff, Fields.E_PS_CompressorOn,
@@ -188,7 +189,7 @@ namespace TUGraz.VectoCore.OutputData
 					Fields.E_WHR_EL, Fields.E_WHR_MECH, Fields.E_AUX_ESS_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.ENGINE_FULL_LOAD_TIME_SHARE,
+					Fields.MAX_ENGINE_SPEED, Fields.NUM_GEARSHIFTS, Fields.STOP_TIMESHARE, Fields.ICE_FULL_LOAD_TIME_SHARE, Fields.ICE_OFF_TIME_SHARE,
 					Fields.COASTING_TIME_SHARE, Fields.BRAKING_TIME_SHARE, Fields.AVERAGE_POS_ACC
 				}.Select(x => new DataColumn(x, typeof(ConvertedSI))).ToArray());
 
@@ -357,7 +358,8 @@ namespace TUGraz.VectoCore.OutputData
 
 			WritePerformanceEntries(runData, modData, row);
 
-			row[Fields.ENGINE_FULL_LOAD_TIME_SHARE] = (ConvertedSI)modData.EngineMaxLoadTimeShare();
+			row[Fields.ICE_FULL_LOAD_TIME_SHARE] = (ConvertedSI)modData.ICEMaxLoadTimeShare();
+			row[Fields.ICE_OFF_TIME_SHARE] = (ConvertedSI)modData.ICEOffTimeShare();
 			row[Fields.COASTING_TIME_SHARE] = (ConvertedSI)modData.CoastingTimeShare();
 			row[Fields.BRAKING_TIME_SHARE] = (ConvertedSI)modData.BrakingTimeShare();
 
@@ -686,6 +688,7 @@ namespace TUGraz.VectoCore.OutputData
 			row[Fields.E_FCMAP_NEG] = (-modData.TotalEngineWorkNegative()).ConvertToKiloWattHour();
 			row[Fields.E_POWERTRAIN_INERTIA] = modData.PowerAccelerations().ConvertToKiloWattHour();
 			row[Fields.E_AUX] = modData.WorkAuxiliaries().ConvertToKiloWattHour();
+			row[Fields.E_AUX_EL_HV] = modData.TimeIntegral<WattSecond>(ModalResultField.P_aux_el).ConvertToKiloWattHour();
 			row[Fields.E_CLUTCH_LOSS] = modData.WorkClutch().ConvertToKiloWattHour();
 			row[Fields.E_TC_LOSS] = modData.WorkTorqueConverter().ConvertToKiloWattHour();
 			row[Fields.E_SHIFT_LOSS] = modData.WorkGearshift().ConvertToKiloWattHour();
@@ -724,9 +727,11 @@ namespace TUGraz.VectoCore.OutputData
 					Tuple.Create(Fields.E_EM_DRIVE_FORMAT, modData.TotalElectricMotorWorkDrive(em.Item1).ConvertToKiloWattHour()), 
 					Tuple.Create(Fields.E_EM_GENERATE_FORMAT, modData.TotalElectricMotorWorkRecuperate(em.Item1).ConvertToKiloWattHour()),
 					Tuple.Create(Fields.E_EM_AVG_SPEED_FORMAT, modData.ElectricMotorAverageSpeed(em.Item1).ConvertToRoundsPerMinute()),
-					Tuple.Create(Fields.E_EM_ETA_MOT_FORMAT, new ConvertedSI(modData.ElectricMotorEfficiencyDrive(em.Item1), "")),
+					Tuple.Create(Fields.E_EM_ETA_DRIVE_FORMAT, new ConvertedSI(modData.ElectricMotorEfficiencyDrive(em.Item1), "")),
 					Tuple.Create(Fields.E_EM_ETA_GEN_FORMAT, new ConvertedSI(modData.ElectricMotorEfficiencyGenerate(em.Item1), "")),
-					Tuple.Create(Fields.E_EM_OFF_Loss_Format, modData.ElectricMotorOffLosses(em.Item1).ConvertToKiloWattHour())
+					Tuple.Create(Fields.E_EM_OFF_Loss_Format, modData.ElectricMotorOffLosses(em.Item1).ConvertToKiloWattHour()),
+					Tuple.Create(Fields.E_EM_LOSS_FORMAT, modData.ElectricMotorLosses(em.Item1).ConvertToKiloWattHour()),
+					Tuple.Create(Fields.E_EM_LOSS_TRANSM_FORMAT, modData.ElectricMotorTransmissionLosses(em.Item1).ConvertToKiloWattHour())
 				};
 				emColumns.Reverse();
 				foreach (var entry in emColumns) {
@@ -760,32 +765,32 @@ namespace TUGraz.VectoCore.OutputData
 					var col = Table.Columns.Add(field, typeof(ConvertedSI));
 					col.SetOrdinal(Table.Columns[Fields.P_WHEEL].Ordinal);
 				}
-				row[Fields.E_REESS_LOSS] = modData.BatteryLoss().ConvertToKiloWattHour();
-				row[Fields.E_REESS_T_chg] = modData.WorkBatteryChargeTerminal().ConvertToKiloWattHour();
-				row[Fields.E_REESS_T_dischg] = modData.WorkBatteryDischargeTerminal().ConvertToKiloWattHour();
-				row[Fields.E_REESS_int_chg] = modData.WorkBatteryChargeInternal().ConvertToKiloWattHour();
-				row[Fields.E_REESS_int_dischg] = modData.WorkBatteryDischargeInternal().ConvertToKiloWattHour();
+				row[Fields.E_REESS_LOSS] = modData.REESSLoss().ConvertToKiloWattHour();
+				row[Fields.E_REESS_T_chg] = modData.WorkREESSChargeTerminal().ConvertToKiloWattHour();
+				row[Fields.E_REESS_T_dischg] = modData.WorkREESSDischargeTerminal().ConvertToKiloWattHour();
+				row[Fields.E_REESS_int_chg] = modData.WorkREESSChargeInternal().ConvertToKiloWattHour();
+				row[Fields.E_REESS_int_dischg] = modData.WorkREESSDischargeInternal().ConvertToKiloWattHour();
 			}
 
 			if (runData.BatteryData != null) {
 				row[Fields.REESS_StartSoC] = runData.BatteryData.InitialSoC * 100; 
-				row[Fields.REESS_EndSoC] = modData.BatteryEndSoC();
+				row[Fields.REESS_EndSoC] = modData.REESSEndSoC();
 				var cellVoltage = runData.BatteryData.SOCMap.Lookup(runData.BatteryData.InitialSoC);
 				row[Fields.REESS_DeltaSoC] =
-					(modData.BatteryEnergyEnd() - 
+					(modData.REESSEnergyEnd() - 
 					(runData.BatteryData.InitialSoC * runData.BatteryData.Capacity * cellVoltage).Cast<WattSecond>()).ConvertToKiloWattHour();
 
 				
 			}
 			if (runData.SuperCapData != null) {
 				row[Fields.REESS_StartSoC] = runData.SuperCapData.InitialSoC * 100;
-				row[Fields.REESS_EndSoC] = modData.BatteryEndSoC();
+				row[Fields.REESS_EndSoC] = modData.REESSEndSoC();
 				var initialCharge = runData.SuperCapData.Capacity *
 									((runData.SuperCapData.MaxVoltage - runData.SuperCapData.MinVoltage) *
 									runData.SuperCapData.InitialSoC +
 									runData.SuperCapData.MinVoltage);
 				row[Fields.REESS_DeltaSoC] =
-					(modData.BatteryEnergyEnd() -
+					(modData.REESSEnergyEnd() -
 					(initialCharge * initialCharge / runData.SuperCapData.Capacity / 2.0).Cast<WattSecond>()).ConvertToKiloWattHour();
 
 
@@ -1186,6 +1191,8 @@ namespace TUGraz.VectoCore.OutputData
 			public const string E_AUX_FORMAT = "E_aux_{0} [kWh]";
 			public const string E_AUX = "E_aux_sum [kWh]";
 
+			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 [-]";
@@ -1245,9 +1252,10 @@ namespace TUGraz.VectoCore.OutputData
 			public const string AVG_ENGINE_SPEED = "n_eng_avg [rpm]";
 			public const string MAX_ENGINE_SPEED = "n_eng_max [rpm]";
 			public const string NUM_GEARSHIFTS = "gear shifts [-]";
-			public const string ENGINE_FULL_LOAD_TIME_SHARE = "Engine max. Load time share [%]";
+			public const string ICE_FULL_LOAD_TIME_SHARE = "ICE max. Load time share [%]";
+			public const string ICE_OFF_TIME_SHARE = "ICE off time share [%]";
 			public const string COASTING_TIME_SHARE = "CoastingTimeShare [%]";
-			public const string BRAKING_TIME_SHARE = "BrakingTImeShare [%]";
+			public const string BRAKING_TIME_SHARE = "BrakingTimeShare [%]";
 
 			public const string TIME_SHARE_PER_GEAR_FORMAT = "Gear {0} TimeShare [%]";
 
@@ -1275,27 +1283,27 @@ namespace TUGraz.VectoCore.OutputData
 			//public const string PTO_OTHER_ELEMENTS = "PTOOtherElements";
 
 			public const string ENGINE_CERTIFICATION_NUMBER = "Engine certification number";
-			public const string AVERAGE_ENGINE_EFFICIENCY = "Average engine efficiency [%]";
+			public const string AVERAGE_ENGINE_EFFICIENCY = "Average engine efficiency [-]";
 			public const string TORQUE_CONVERTER_CERTIFICATION_NUMBER = "TorqueConverter certification number";
 			public const string TORQUE_CONVERTER_CERTIFICATION_METHOD = "Torque converter certification option";
 
 			public const string AVERAGE_TORQUE_CONVERTER_EFFICIENCY_WITH_LOCKUP =
-				"Average torque converter efficiency with lockup [%]";
+				"Average torque converter efficiency with lockup [-]";
 
 			public const string AVERAGE_TORQUE_CONVERTER_EFFICIENCY_WITHOUT_LOCKUP =
-				"Average torque converter efficiency w/o lockup [%]";
+				"Average torque converter efficiency w/o lockup [-]";
 
 			public const string GEARBOX_CERTIFICATION_NUMBER = "Gearbox certification number";
 			public const string GEARBOX_CERTIFICATION_METHOD = "Gearbox certification option";
-			public const string AVERAGE_GEARBOX_EFFICIENCY = "Average gearbox efficiency [%]";
+			public const string AVERAGE_GEARBOX_EFFICIENCY = "Average gearbox efficiency [-]";
 			public const string RETARDER_CERTIFICATION_NUMBER = "Retarder certification number";
 			public const string RETARDER_CERTIFICATION_METHOD = "Retarder certification option";
 			public const string ANGLEDRIVE_CERTIFICATION_NUMBER = "Angledrive certification number";
 			public const string ANGLEDRIVE_CERTIFICATION_METHOD = "Angledrive certification option";
-			public const string AVERAGE_ANGLEDRIVE_EFFICIENCY = "Average angledrive efficiency [%]";
+			public const string AVERAGE_ANGLEDRIVE_EFFICIENCY = "Average angledrive efficiency [-]";
 			public const string AXLEGEAR_CERTIFICATION_NUMBER = "Axlegear certification number";
 			public const string AXLEGEAR_CERTIFICATION_METHOD = "Axlegear certification method";
-			public const string AVERAGE_AXLEGEAR_EFFICIENCY = "Average axlegear efficiency [%]";
+			public const string AVERAGE_AXLEGEAR_EFFICIENCY = "Average axlegear efficiency [-]";
 			public const string AIRDRAG_CERTIFICATION_NUMBER = "AirDrag certification number";
 			public const string AIRDRAG_CERTIFICATION_METHOD = "AirDrag certification option";
 
@@ -1304,9 +1312,11 @@ namespace TUGraz.VectoCore.OutputData
 			public const string E_EM_DRIVE_FORMAT = "E_EM_{0}_drive [kWh]";
 			public const string E_EM_GENERATE_FORMAT = "E_EM_{0}_gen [kWh]";
 			public const string E_EM_AVG_SPEED_FORMAT = "n_EM_{0}_avg [rpm]";
-			public const string E_EM_ETA_MOT_FORMAT = "η_EM_{0}_mot";
+			public const string E_EM_ETA_DRIVE_FORMAT = "η_EM_{0}_drive";
 			public const string E_EM_ETA_GEN_FORMAT = "η_EM_{0}_gen";
 			public const string E_EM_OFF_Loss_Format = "E_EM_{0}_off_loss [kWh]";
+			public const string E_EM_LOSS_FORMAT = "E_EM_{0}_loss [kWh]";
+			public const string E_EM_LOSS_TRANSM_FORMAT = "E_EM_{0}_transm_loss [kWh]";
 
 
 			public const string REESS_StartSoC = "REESS Start SoC [%]";
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
index 57e6c057d6..9a19997d19 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
@@ -139,7 +139,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 				MaxSpeed = data.MaxSpeed();
 				MaxAcceleration = data.MaxAcceleration();
 				MaxDeceleration = data.MaxDeceleration();
-				FullLoadPercentage = data.EngineMaxLoadTimeShare();
+				FullLoadPercentage = data.ICEMaxLoadTimeShare();
 				GearshiftCount = data.GearshiftCount();
 
 				var entriesDriving = data.GetValues(
diff --git a/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs b/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs
index ef9f0f1d8c..23b5b02884 100644
--- a/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs
@@ -301,22 +301,32 @@ namespace TUGraz.VectoCore.Tests.Utils
 			throw new NotImplementedException();
 		}
 
+		public WattSecond ElectricMotorLosses(PowertrainPosition emPos)
+		{
+			throw new NotImplementedException();
+		}
+
+		public WattSecond ElectricMotorTransmissionLosses(PowertrainPosition emPos)
+		{
+			throw new NotImplementedException();
+		}
+
 		public double BatteryStartSoC()
 		{
 			throw new NotImplementedException();
 		}
 
-		public double BatteryEndSoC()
+		public double REESSEndSoC()
 		{
 			throw new NotImplementedException();
 		}
 
-		public WattSecond BatteryLoss()
+		public WattSecond REESSLoss()
 		{
 			throw new NotImplementedException();
 		}
 
-		public WattSecond BatteryEnergyEnd()
+		public WattSecond REESSEnergyEnd()
 		{
 			throw new NotImplementedException();
 		}
-- 
GitLab