From d76ea79ef12267aee293d63e8592dae2e2faa477 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <quaritsch@ivt.tugraz.at>
Date: Fri, 23 Dec 2022 11:18:08 +0100
Subject: [PATCH] set ICE values and gearbox efficiency / axlegear efficiency
 only if the respective component is present in the powertrain

---
 .../OutputData/XML/XMLDeclarationReport.cs    | 42 ++++++++++++-------
 1 file changed, 26 insertions(+), 16 deletions(-)

diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
index 59c0b8e48c..e35310450e 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
@@ -163,13 +163,15 @@ namespace TUGraz.VectoCore.OutputData.XML
 				FullLoadPercentage = data.ICEMaxLoadTimeShare();
 				GearshiftCount = data.GearshiftCount();
 
-				var entriesDriving = data.GetValues(
-					r => new {
-						dt = r.Field<Second>(ModalResultField.simulationInterval.GetName()),
-						v = r.Field<MeterPerSecond>(ModalResultField.v_act.GetName()),
-						nEng = r.Field<PerSecond>(ModalResultField.n_ice_avg.GetName())
-					}).Where(x => x.v.IsGreater(0)).ToArray();
-				if (entriesDriving.Length > 0) {
+				var entriesDriving = data.HasCombustionEngine
+					? data.GetValues(
+						r => new {
+							dt = r.Field<Second>(ModalResultField.simulationInterval.GetName()),
+							v = r.Field<MeterPerSecond>(ModalResultField.v_act.GetName()),
+							nEng = r.Field<PerSecond>(ModalResultField.n_ice_avg.GetName())
+						}).Where(x => x.v.IsGreater(0)).ToArray()
+					: null;
+				if (entriesDriving?.Length > 0) {
 					var drivingTime = entriesDriving.Sum(x => x.dt);
 
 					AverageDrivingSpeed = entriesDriving.Sum(x => x.v * x.dt) / drivingTime;
@@ -196,16 +198,24 @@ namespace TUGraz.VectoCore.OutputData.XML
 					DeclarationData.SetElectricRangesPEV(this, runData, data);
 				}
 
-				var gbxOutSignal = runData.Retarder.Type == RetarderType.TransmissionOutputRetarder
-					? ModalResultField.P_retarder_in
-					: (runData.AngledriveData == null ? ModalResultField.P_axle_in : ModalResultField.P_angle_in);
-				var eGbxIn = data.TimeIntegral<WattSecond>(ModalResultField.P_gbx_in, x => x > 0);
-				var eGbxOut = data.TimeIntegral<WattSecond>(gbxOutSignal, x => x > 0);
-				AverageGearboxEfficiency = eGbxOut / eGbxIn;
+				if (data.HasGearbox) {
+					var gbxOutSignal = runData.Retarder.Type == RetarderType.TransmissionOutputRetarder
+						? ModalResultField.P_retarder_in
+						: (runData.AngledriveData == null ? ModalResultField.P_axle_in : ModalResultField.P_angle_in);
+					var eGbxIn = data.TimeIntegral<WattSecond>(ModalResultField.P_gbx_in, x => x > 0);
+					var eGbxOut = data.TimeIntegral<WattSecond>(gbxOutSignal, x => x > 0);
+					AverageGearboxEfficiency = eGbxOut / eGbxIn;
+				} else {
+					AverageGearboxEfficiency = double.NaN;
+				}
 
-				var eAxlIn = data.TimeIntegral<WattSecond>(ModalResultField.P_axle_in, x => x > 0);
-				var eAxlOut = data.TimeIntegral<WattSecond>(ModalResultField.P_brake_in, x => x > 0);
-				AverageAxlegearEfficiency = eAxlOut == null || eAxlIn == null ? double.NaN : eAxlOut / eAxlIn;
+				if (data.HasAxlegear) {
+					var eAxlIn = data.TimeIntegral<WattSecond>(ModalResultField.P_axle_in, x => x > 0);
+					var eAxlOut = data.TimeIntegral<WattSecond>(ModalResultField.P_brake_in, x => x > 0);
+					AverageAxlegearEfficiency = eAxlOut == null || eAxlIn == null ? double.NaN : eAxlOut / eAxlIn;
+				} else {
+					AverageAxlegearEfficiency = double.NaN;
+				}
 
 				WeightingFactor = weightingFactor;
 
-- 
GitLab