From 165bfd32274851e2ab5f65739f1a12d7c84e751b Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Thu, 23 May 2019 11:25:11 +0200
Subject: [PATCH] adding ESS corrected FC to xml reports

---
 .../OutputData/XML/XMLDeclarationReport.cs    | 33 +++++++++++++------
 1 file changed, 23 insertions(+), 10 deletions(-)

diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
index 8fd64eae4c..dc6d6f142a 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
@@ -75,7 +75,7 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 			public Kilogram CO2Total { get; private set; }
 
-			public Kilogram FuelConsumptionTotal { get; private set; }
+			public Kilogram FuelConsumptionFinal { get; private set; }
 
 			public Meter Distance { get; private set; }
 
@@ -149,9 +149,22 @@ namespace TUGraz.VectoCore.OutputData.XML
 				EngineSpeedDrivingMax = entriesDriving.Max(x => x.nEng);
 				Distance = data.Distance();
 
-				FuelConsumptionTotal = data.TimeIntegral<Kilogram>(ModalResultField.FCFinal);
-				CO2Total = FuelConsumptionTotal * data.FuelData.CO2PerFuelWeight;
-				EnergyConsumptionTotal = FuelConsumptionTotal * data.FuelData.LowerHeatingValueVecto;
+				var fuelConsumptionSum = data.TimeIntegral<Kilogram>(ModalResultField.FCFinal);
+				var workESS = data.TimeIntegral<WattSecond>(ModalResultField.P_aux_ice_off);
+
+				double k, d, s;
+				VectoMath.LeastSquaresFitting(
+					data.GetValues(
+						x => x.Field<bool>((int)ModalResultField.IgnitionOn) ? new Point(
+							x.Field<SI>((int)ModalResultField.P_eng_fcmap).Value(), x.Field<SI>((int)ModalResultField.FCFinal).Value()) : null).Where(x => x != null && x.Y > 0),
+					out k, out d, out s);
+
+				var correction = k.SI<KilogramPerWattSecond>();
+
+				FuelConsumptionFinal = fuelConsumptionSum + correction * workESS;
+
+				CO2Total = FuelConsumptionFinal * data.FuelData.CO2PerFuelWeight;
+				EnergyConsumptionTotal = FuelConsumptionFinal * data.FuelData.LowerHeatingValueVecto;
 
 				var gbxOutSignal = runData.Retarder.Type == RetarderType.TransmissionOutputRetarder
 					? ModalResultField.P_retarder_in
@@ -269,17 +282,17 @@ namespace TUGraz.VectoCore.OutputData.XML
 				new XElement(
 					tns + XMLNames.Report_Results_FuelConsumption,
 					new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/km"),
-					(result.FuelConsumptionTotal / result.Distance).ConvertToGrammPerKiloMeter().ToMinSignificantDigits(3, 1)),
+					(result.FuelConsumptionFinal / result.Distance).ConvertToGrammPerKiloMeter().ToMinSignificantDigits(3, 1)),
 				new XElement(
 					tns + XMLNames.Report_Results_FuelConsumption,
 					new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"),
-					(result.FuelConsumptionTotal / result.Distance / result.Payload)
+					(result.FuelConsumptionFinal / result.Distance / result.Payload)
 					.ConvertToGrammPerTonKilometer().ToMinSignificantDigits(3, 1)),
 				result.CargoVolume > 0
 					? new XElement(
 						tns + XMLNames.Report_Results_FuelConsumption,
 						new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/m³-km"),
-						(result.FuelConsumptionTotal.ConvertToGramm() / result.Distance.ConvertToKiloMeter() / result.CargoVolume)
+						(result.FuelConsumptionFinal.ConvertToGramm() / result.Distance.ConvertToKiloMeter() / result.CargoVolume)
 						.Value
 						().ToMinSignificantDigits(3, 1))
 					: null
@@ -312,20 +325,20 @@ namespace TUGraz.VectoCore.OutputData.XML
 					new XElement(
 						tns + XMLNames.Report_Results_FuelConsumption,
 						new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/100km"),
-						(result.FuelConsumptionTotal.ConvertToGramm() / fuel.FuelDensity / result.Distance.ConvertToKiloMeter() * 100)
+						(result.FuelConsumptionFinal.ConvertToGramm() / fuel.FuelDensity / result.Distance.ConvertToKiloMeter() * 100)
 						.Value().ToMinSignificantDigits(3, 1)));
 				retVal.Add(
 					new XElement(
 						tns + XMLNames.Report_Results_FuelConsumption,
 						new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/t-km"),
-						(result.FuelConsumptionTotal.ConvertToGramm() / fuel.FuelDensity / result.Distance.ConvertToKiloMeter() /
+						(result.FuelConsumptionFinal.ConvertToGramm() / fuel.FuelDensity / result.Distance.ConvertToKiloMeter() /
 						result.Payload.ConvertToTon()).Value().ToMinSignificantDigits(3, 1)));
 				if (result.CargoVolume > 0)
 					retVal.Add(
 						new XElement(
 							tns + XMLNames.Report_Results_FuelConsumption,
 							new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/m³-km"),
-							(result.FuelConsumptionTotal.ConvertToGramm() / fuel.FuelDensity / result.Distance.ConvertToKiloMeter() /
+							(result.FuelConsumptionFinal.ConvertToGramm() / fuel.FuelDensity / result.Distance.ConvertToKiloMeter() /
 							result.CargoVolume).Value().ToMinSignificantDigits(3, 1)));
 			}
 
-- 
GitLab