From 8d328387014a87c9550d446bfc9ac8dfc5f4a7f2 Mon Sep 17 00:00:00 2001
From: "VKMTHD\\haraldmartini" <harald.martini@student.tugraz.at>
Date: Wed, 28 Sep 2022 14:42:03 +0200
Subject: [PATCH] added P_aux_el to modal data container

---
 .../AuxiliaryDataAdapter.cs                     | 17 ++++++++---------
 .../Models/Simulation/Data/ModalResult.cs       | 12 ++++++++----
 .../Models/Simulation/Data/ModalResultField.cs  |  7 ++++++-
 .../Impl/Auxiliaries/Conditioning.cs            |  3 +++
 .../Impl/Auxiliaries/ElectricAuxiliaries.cs     |  9 ++++++---
 .../SimulationComponent/Impl/EngineAuxiliary.cs |  6 +++---
 .../VectoCore/OutputData/ModalDataContainer.cs  | 10 ++++++++++
 7 files changed, 44 insertions(+), 20 deletions(-)

diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs
index abfed569a0..3e4a566508 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs
@@ -194,6 +194,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 				DemandType = AuxiliaryDemandType.Dynamic,
 				ID = Constants.Auxiliaries.IDs.Cond,
 				ConnectToREESS = true,
+				PowerDemandElectric = DeclarationData.Conditioning.LookupPowerDemand(hdv, mission),
 			};
 
 			auxDataList.Add(aux);
@@ -305,22 +306,20 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 					ID = Constants.Auxiliaries.IDs.SteeringPump_el,
 					PowerDemandElectric = powerDemand.electricPumps * alternatorEfficiency,
 					PowerDemandMech = powerDemand.electricPumps,
-
-					//PowerDemandElectricDataBusFunc = (db, mech) => {
-					//	if (db.VehicleInfo.VehicleStopped) {
-					//		return 0.SI<Watt>();
-					//	} else {
-					//		return powerDemand.electricPumps;
-					//	}
-					//},
 					MissionType = mission,
 				};
 
-				auxDataList.Add(spElectric);
+				
+	
 
 				if (jobType.IsOneOf(VectoSimulationJobType.ConventionalVehicle,
 						VectoSimulationJobType.EngineOnlySimulation)) {
+					//For a conventional vehicle the electric steering pump power demand is added to the power demand of the mechanical steering pumpss
 					spElectric.ConnectToREESS = false;
+					spMech.PowerDemandMech += spElectric.PowerDemandMech;
+				} else {
+					//For a vehicle with REESS the electric part of the steering pump power demand is treated as separate component
+					auxDataList.Add(spElectric);
 				}
 			}
 			
diff --git a/VectoCore/VectoCore/Models/Simulation/Data/ModalResult.cs b/VectoCore/VectoCore/Models/Simulation/Data/ModalResult.cs
index 3989005867..c0ced7d6d3 100644
--- a/VectoCore/VectoCore/Models/Simulation/Data/ModalResult.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Data/ModalResult.cs
@@ -309,6 +309,10 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 			ModalResultField.P_Aux_el_HV,
 		};
 
+		public static readonly ModalResultField[] ElectricAuxiliarySignals = {
+			ModalResultField.P_aux_el,
+		};
+
 		// ------------------------------------------------------------------------------------
 		public static readonly ModalResultField[] HybridControllerSignals = {
 			ModalResultField.HybridStrategyScore,
@@ -413,15 +417,15 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 					break;
 				case IDCDCConverter _: CreateColumns(DCDCConverterSignals);
 					break;
-				case ElectricAuxiliaries elAux:
-					CreateElectricAuxColumns(elAux);
+				case ElectricAuxiliaries _:
+					CreateElectricAuxColumns();
 					break;
 			}
 		}
 
-		private void CreateElectricAuxColumns(ElectricAuxiliaries elAux)
+		private void CreateElectricAuxColumns()
 		{
-			
+			CreateColumns(ElectricAuxiliarySignals);
 		}
 
 		private void CreateBatteryColumns(VectoRunData vectoRunData)
diff --git a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs
index 600af83d19..0c4043daa5 100644
--- a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs
@@ -110,10 +110,15 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 		[ModalResultField(typeof(SI), name: "P_ice_inertia", caption: "P_ice_inertia [kW]", outputFactor: 1e-3)] P_ice_inertia,
 
 		/// <summary>
-		///     [kW]	Total auxiliary power demand .
+		///     [kW]	Total mechanic auxiliary power demand .
 		/// </summary>
 		[ModalResultField(typeof(SI), caption: "P_aux_mech [kW]", outputFactor: 1e-3)] P_aux_mech,
 
+		/// <summary>
+		///     [kW]	Total electric auxiliary power demand .
+		/// </summary>
+		[ModalResultField(typeof(SI), caption: "P_aux_el [kW]", outputFactor: 1e-3)] P_aux_el,
+
 		/// <summary>
 		///     [kW]	Total auxiliary power demand .
 		/// </summary>
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Auxiliaries/Conditioning.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Auxiliaries/Conditioning.cs
index 135c3cc1ac..294ca3afaf 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Auxiliaries/Conditioning.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Auxiliaries/Conditioning.cs
@@ -40,6 +40,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Auxiliaries
 				throw new VectoException($"Invalid {nameof(condAuxData)}: ID must be {Constants.Auxiliaries.IDs.Cond}");
 			}
 
+			if (condAuxData.PowerDemandElectric == null) {
+				throw new VectoException($"No electric powerdemand set for {condAuxData.ID}");
+			}
 			electricPowerDemand = condAuxData.PowerDemandElectric;
 			AuxID = condAuxData.ID;
 		}
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Auxiliaries/ElectricAuxiliaries.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Auxiliaries/ElectricAuxiliaries.cs
index d3a36831e8..af5074b444 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Auxiliaries/ElectricAuxiliaries.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Auxiliaries/ElectricAuxiliaries.cs
@@ -114,12 +114,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 		protected override void DoWriteModalResults(Second time, Second simulationInterval, IModalDataContainer container)
 		{
+			var sum = 0.SI<Watt>();
             foreach (var aux in _auxData)
             {
-				
-				container[_auxColumnName[aux.Key]] = _powerDemands[aux.Key];
-				
+				var pd = _powerDemands[aux.Key];
+				container[_auxColumnName[aux.Key]] = pd;
+
 			}
+
+			container[ModalResultField.P_aux_el] = sum;
 		}
 
 		protected override void DoCommitSimulationStep(Second time, Second simulationInterval)
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs
index e3a2ca416a..f90aa85611 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs
@@ -149,12 +149,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				Constants.Auxiliaries.IDs.Fan,
 				Constants.Auxiliaries.IDs.PTOConsumer, 
 				Constants.Auxiliaries.IDs.PTOTransmission,
-				Constants.Auxiliaries.IDs.ENG_AUX_MECH_FAN, 
-				Constants.Auxiliaries.IDs.ENG_AUX_MECH_STP
+				Constants.Auxiliaries.IDs.ENGMode_AUX_MECH_FAN, 
+				Constants.Auxiliaries.IDs.ENGMode_AUX_MECH_STP
 			};
 			var auxiliarieIgnoredDuringDrive = new[] {
 				Constants.Auxiliaries.IDs.Fan,
-				Constants.Auxiliaries.IDs.ENG_AUX_MECH_FAN
+				Constants.Auxiliaries.IDs.ENGMode_AUX_MECH_FAN
 			};
 			var powerDemands = new Dictionary<string, Watt>(Auxiliaries.Count);
 			var engineOffDemand = 0.SI<Watt>();
diff --git a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
index 63936a6e75..3f3b671781 100644
--- a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
@@ -663,6 +663,7 @@ namespace TUGraz.VectoCore.OutputData
 					ModalResultField.P_clutch_out,
 					// Aux
 					ModalResultField.P_aux_mech,
+					ModalResultField.P_aux_el,
 					ModalResultField.P_Aux_el_HV,
 					// Gbx
 					ModalResultField.P_gbx_in,
@@ -829,6 +830,10 @@ namespace TUGraz.VectoCore.OutputData
 						ModalResultField.P_clutch_out,
 					}.Select(x => x.GetName()));
 			}
+
+			if (HasElectricAuxiliaries) {
+				dataColumns.Add(ModalResultField.P_aux_el.GetName());
+			}
 			dataColumns.AddRange(
 				new[] {
 					ModalResultField.P_aux_mech,
@@ -904,6 +909,11 @@ namespace TUGraz.VectoCore.OutputData
 			return dataColumns;
 		}
 
+		public bool HasElectricAuxiliaries
+		{
+			get => _runData.Aux.Any(aux => aux.ConnectToREESS);
+		}
+
 		public IEnumerable<T> GetValues<T>(DataColumn col) => GetValues(x => x.Field<T>(col));
 
 		public IEnumerable<T> GetValues<T>(Func<DataRow, T> selectorFunc) =>
-- 
GitLab