From 34a5b87d3c73acf45339038a3bfb5a33e24d2b44 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Tue, 10 Nov 2020 09:51:28 +0100
Subject: [PATCH] sum data container: add info about REESS capacity, fix output
 for supercaps

---
 .../OutputData/SummaryDataContainer.cs        | 94 +++++++++++++------
 1 file changed, 64 insertions(+), 30 deletions(-)

diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
index aabcfd8380..5cb0ad09a9 100644
--- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
@@ -164,7 +164,7 @@ namespace TUGraz.VectoCore.OutputData
 				Tuple.Create(Fields.TCU_MODEL, typeof(string)),
 					Tuple.Create(Fields.ADAS_TECHNOLOGY_COMBINATION, typeof(string)),
 					Tuple.Create(Fields.PTO_TECHNOLOGY, typeof(string)),
-
+					Tuple.Create(Fields.REESS_CAPACITY, typeof(string)),
 					//Tuple.Create(PTO_OTHER_ELEMENTS, typeof(string)),
 				}.Select(x => new DataColumn(x.Item1, x.Item2)).ToArray());
 
@@ -333,7 +333,7 @@ namespace TUGraz.VectoCore.OutputData
 					row[Fields.ElectricEnergyConsumptionPerKm] =
 						(-modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_terminal) / modData.Distance).Cast<JoulePerMeter>().ConvertToKiloWattHourPerKiloMeter();
 				}
-            }
+			}
 
 			if (runData.Mission?.MissionType == MissionType.VerificationTest) {
 				var fuelsWhtc = runData.EngineData.Fuels.Select(
@@ -736,40 +736,61 @@ namespace TUGraz.VectoCore.OutputData
 						col.SetOrdinal(Table.Columns[Fields.E_GRAD].Ordinal + 1);
 					}
 					row[colName] = entry.Item2;
-                }
+				}
 			}
 
-			if (runData.BatteryData != null) {
-				foreach (var field in new[] { Fields.BatteryStartSoC, Fields.BatteryEndSoC }) {
+			if (runData.BatteryData != null || runData.SuperCapData != null) {
+				foreach (var field in new[] { Fields.REESS_StartSoC, Fields.REESS_EndSoC }) {
 					if (Table.Columns.Contains(field)) {
 						continue;
 					}
+
 					var col = Table.Columns.Add(field, typeof(double));
 					col.SetOrdinal(Table.Columns[Fields.P_WHEEL].Ordinal);
 				}
 
-				foreach (var field in new[] { Fields.BatteryDeltaSoC, Fields.E_BAT_LOSS, Fields.E_Batt_T_chg, Fields.E_Batt_T_dischg, Fields.E_Batt_int_chg, Fields.E_Batt_int_dischg}) {
+				foreach (var field in new[] {
+					Fields.REESS_DeltaSoC, Fields.E_REESS_LOSS, Fields.E_REESS_T_chg, Fields.E_REESS_T_dischg,
+					Fields.E_REESS_int_chg, Fields.E_REESS_int_dischg
+				}) {
 					if (Table.Columns.Contains(field)) {
 						continue;
 					}
+
 					var col = Table.Columns.Add(field, typeof(ConvertedSI));
 					col.SetOrdinal(Table.Columns[Fields.P_WHEEL].Ordinal);
-                }
-				
-				row[Fields.BatteryStartSoC] = runData.BatteryData.InitialSoC * 100; // modData.BatteryStartSoC();
-				row[Fields.BatteryEndSoC] = modData.BatteryEndSoC();
+				}
+				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();
+			}
+
+			if (runData.BatteryData != null) {
+				row[Fields.REESS_StartSoC] = runData.BatteryData.InitialSoC * 100; 
+				row[Fields.REESS_EndSoC] = modData.BatteryEndSoC();
 				var cellVoltage = runData.BatteryData.SOCMap.Lookup(runData.BatteryData.InitialSoC);
-				row[Fields.BatteryDeltaSoC] =
+				row[Fields.REESS_DeltaSoC] =
 					(modData.BatteryEnergyEnd() - 
 					(runData.BatteryData.InitialSoC * runData.BatteryData.Capacity * cellVoltage).Cast<WattSecond>()).ConvertToKiloWattHour();
 
-				row[Fields.E_BAT_LOSS] = modData.BatteryLoss().ConvertToKiloWattHour();
-				row[Fields.E_Batt_T_chg] = modData.WorkBatteryChargeTerminal().ConvertToKiloWattHour();
-				row[Fields.E_Batt_T_dischg] = modData.WorkBatteryDischargeTerminal().ConvertToKiloWattHour();
-				row[Fields.E_Batt_int_chg] = modData.WorkBatteryChargeInternal().ConvertToKiloWattHour();
-				row[Fields.E_Batt_int_dischg] = modData.WorkBatteryDischargeInternal().ConvertToKiloWattHour();
+				
 			}
-        }
+			if (runData.SuperCapData != null) {
+				row[Fields.REESS_StartSoC] = runData.SuperCapData.InitialSoC * 100;
+				row[Fields.REESS_EndSoC] = modData.BatteryEndSoC();
+				var initialCharge = runData.SuperCapData.Capacity *
+									((runData.SuperCapData.MaxVoltage - runData.SuperCapData.MinVoltage) *
+									runData.SuperCapData.InitialSoC +
+									runData.SuperCapData.MinVoltage);
+				row[Fields.REESS_DeltaSoC] =
+					(modData.BatteryEnergyEnd() -
+					(initialCharge * initialCharge / runData.SuperCapData.Capacity / 2.0).Cast<WattSecond>()).ConvertToKiloWattHour();
+
+
+			}
+		}
 
 		private void WriteFullPowertrain(VectoRunData runData, DataRow row)
 		{
@@ -830,6 +851,17 @@ namespace TUGraz.VectoCore.OutputData
 			row[Fields.R_DYN] = (ConvertedSI)data.DynamicTyreRadius;
 
 			row[Fields.ADAS_TECHNOLOGY_COMBINATION] = data.ADAS != null ? DeclarationData.ADASCombinations.Lookup(data.ADAS, gbxType).ID : "";
+
+			var cap = "";
+			if (runData.BatteryData?.Capacity != null) {
+				cap = $"{runData.BatteryData.Capacity.AsAmpHour} Ah";
+			}
+
+			if (runData.SuperCapData?.Capacity != null) {
+				cap = $"{runData.SuperCapData.Capacity} F";
+			}
+
+			row[Fields.REESS_CAPACITY] = cap;
 		}
 
 		private static void WriteAirdragData(AirdragData data, DataRow row)
@@ -895,7 +927,7 @@ namespace TUGraz.VectoCore.OutputData
 			if (data == null) {
 				return;
 			}
-            row[Fields.AXLE_MANUFACTURER] = data.Manufacturer;
+			row[Fields.AXLE_MANUFACTURER] = data.Manufacturer;
 			row[Fields.AXLE_MODEL] = data.ModelName;
 			row[Fields.AXLE_RATIO] = (ConvertedSI)data.AxleGear.Ratio.SI<Scalar>();
 			row[Fields.AXLEGEAR_CERTIFICATION_METHOD] = data.CertificationMethod.GetName();
@@ -975,7 +1007,7 @@ namespace TUGraz.VectoCore.OutputData
 			if (data == null) {
 				return;
 			}
-            row[Fields.GEARBOX_MANUFACTURER] = data.Manufacturer;
+			row[Fields.GEARBOX_MANUFACTURER] = data.Manufacturer;
 			row[Fields.GEARBOX_MODEL] = data.ModelName;
 			row[Fields.GEARBOX_TYPE] = data.Type;
 			row[Fields.GEARBOX_CERTIFICATION_NUMBER] = data.CertificationMethod == CertificationMethod.StandardValues
@@ -1140,7 +1172,7 @@ namespace TUGraz.VectoCore.OutputData
 
 			public const string ElectricEnergyConsumptionPerKm = "EC_el_final [kWh/km]";
 			
-            public const string CO2_KM = "CO2 [g/km]";
+			public const string CO2_KM = "CO2 [g/km]";
 			public const string CO2_TKM = "CO2 [g/tkm]";
 			public const string CO2_M3KM = "CO2 [g/m³km]";
 			public const string CO2_PKM = "CO2 [g/Pkm]";
@@ -1277,14 +1309,16 @@ namespace TUGraz.VectoCore.OutputData
 			public const string E_EM_OFF_Loss_Format = "E_EM_{0}_off_loss [kWh]";
 
 
-            public const string BatteryStartSoC = "Battery Start SoC [%]";
-			public const string BatteryEndSoC = "Battery end SoC [%]";
-			public const string BatteryDeltaSoC = "Battery Delta SoC [kWh]";
-			public const string E_BAT_LOSS = "E_Batt_loss [kWh]";
-			public const string E_Batt_T_chg = "E_Batt_T_chg [kWh]";
-			public const string E_Batt_T_dischg = "E_Batt_T_dischg [kWh]";
-			public const string E_Batt_int_chg = "E_Batt_int_chg [kWh]";
-			public const string E_Batt_int_dischg = "E_Batt_int_dischg [kWh]";
-        }
-    }
+			public const string REESS_StartSoC = "REESS Start SoC [%]";
+			public const string REESS_EndSoC = "REESS End SoC [%]";
+			public const string REESS_DeltaSoC = "REESS Delta SoC [kWh]";
+			public const string REESS_CAPACITY = "REESS Capacity";
+
+			public const string E_REESS_LOSS = "E_REESS_loss [kWh]";
+			public const string E_REESS_T_chg = "E_REESS_T_chg [kWh]";
+			public const string E_REESS_T_dischg = "E_REESS_T_dischg [kWh]";
+			public const string E_REESS_int_chg = "E_REESS_int_chg [kWh]";
+			public const string E_REESS_int_dischg = "E_REESS_int_dischg [kWh]";
+		}
+	}
 }
-- 
GitLab