From 8738ea59b2d5aea8b72caf871ea62d54a7d3c621 Mon Sep 17 00:00:00 2001
From: Michael Krisper <michael.krisper@tugraz.at>
Date: Mon, 18 Jul 2022 18:06:19 +0200
Subject: [PATCH] SerialHybridStrategy finished refactoring to IUpdateable

---
 .../Simulation/Impl/PowertrainBuilder.cs      |  6 +--
 .../Strategies/SerialHybridStrategy.cs        | 47 ++-----------------
 .../Integration/Hybrid/SerialHybridTest.cs    |  2 +-
 3 files changed, 8 insertions(+), 47 deletions(-)

diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
index 966448ffbe..ace82db767 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
@@ -542,8 +542,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			var container = new VehicleContainer(data.ExecutionMode, modData, sumWriter) { RunData = data };
 			var es = ConnectREESS(data, container);
 			var strategy = data.GearboxData != null && data.GearboxData.Type.AutomaticTransmission()
-				? (IHybridControlStrategy)new SerialHybridStrategyAT(data, container)
-				: new SerialHybridStrategy(data, container);
+				? (IHybridControlStrategy)new SerialHybridStrategy<APTNGearbox>(data, container)
+				: new SerialHybridStrategy<Gearbox>(data, container);
 
 			var aux = new ElectricAuxiliary(container);
 			aux.AddConstant("P_aux_el", data.ElectricAuxDemand ?? 0.SI<Watt>());
@@ -957,7 +957,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			var container = new VehicleContainer(data.ExecutionMode, modData, _sumWriter) { RunData = data };
 			var es = ConnectREESS(data, container);
 
-			var strategy = new SerialHybridStrategy(data, container);
+			var strategy = new SerialHybridStrategy<Gearbox>(data, container);
 			var ctl = new SerialHybridController(container, strategy, es);
 
 			var engine = new StopStartCombustionEngine(container, data.EngineData);
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs
index 6898975b00..0c0257ab04 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs
@@ -19,15 +19,14 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 {
-
-	public class SerialHybridStrategyAT : AbstractSerialHybridStrategy<APTNGearbox>
+	public class SerialHybridStrategy<T> : AbstractSerialHybridStrategy<T> where T : class, IHybridControlledGearbox, IGearbox, IUpdateable
 	{
-		public SerialHybridStrategyAT(VectoRunData runData, IVehicleContainer container) : base(runData, container) { }
+		public SerialHybridStrategy(VectoRunData runData, IVehicleContainer container) : base(runData, container) { }
 
 		#region Overrides of AbstractSerialHybridStrategy<ATGearbox>
 
 		protected override DrivetrainDemand GetDrivetrainPowerDemand(Second absTime, Second dt, NewtonMeter outTorque,
-		PerSecond outAngularVelocity, GenSetOperatingPoint maxPowerGenset)
+			PerSecond outAngularVelocity, GenSetOperatingPoint maxPowerGenset)
 		{
 			TestPowertrain.UpdateComponents();
 			TestPowertrain.Charger.UpdateFrom(maxPowerGenset);
@@ -36,44 +35,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 			TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, Controller.PreviousState.OutAngularVelocity);
 
 			TestPowertrain.Gearbox?.UpdateFrom((DataBus.GearboxInfo as AbstractGearbox<GearboxState>).PreviousState);
-			
-			var testResponse = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false);
-			TestPowertrain.HybridController.ApplyStrategySettings(new HybridStrategyResponse {
-				CombustionEngineOn = false,
-				MechanicalAssistPower = new Dictionary<PowertrainPosition, Tuple<PerSecond, NewtonMeter>> {
-					{ EmPosition, Tuple.Create(testResponse.ElectricMotor.AvgDrivetrainSpeed, -testResponse.ElectricMotor.TorqueRequest) } }
-			});
-			var testResponse2 = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false);
-			return new DrivetrainDemand {
-				AvgEmDrivetrainSpeed = testResponse2.ElectricMotor.AvgDrivetrainSpeed,
-				EmTorqueDemand = testResponse2.ElectricMotor.TorqueRequest,
-				ElectricPowerDemand = testResponse2.ElectricSystem.ConsumerPower,
-				Response = testResponse2
-			};
-		}
-
-		#endregion
-	}
-
-	// =======================================================================
-
-
-	public class SerialHybridStrategy : AbstractSerialHybridStrategy<Gearbox>
-	{
-
-		public SerialHybridStrategy(VectoRunData runData, IVehicleContainer container) : base(runData, container) { }
-
-		protected override DrivetrainDemand GetDrivetrainPowerDemand(Second absTime, Second dt, NewtonMeter outTorque,
-				PerSecond outAngularVelocity, GenSetOperatingPoint maxPowerGenset) 
-		{
-			TestPowertrain.UpdateComponents();
-			TestPowertrain.Charger.UpdateFrom(maxPowerGenset);
 
-			TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>());
-			TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, Controller.PreviousState.OutAngularVelocity);
-
-			TestPowertrain.Gearbox?.UpdateFrom((DataBus.GearboxInfo as AbstractGearbox<GearboxState>).PreviousState);
-			
 			var testResponse = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false);
 			TestPowertrain.HybridController.ApplyStrategySettings(new HybridStrategyResponse {
 				CombustionEngineOn = false,
@@ -89,10 +51,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 			};
 		}
 
+		#endregion
 	}
 
-	// =======================================================================
-
 	public abstract class AbstractSerialHybridStrategy<T> : LoggingObject, IHybridControlStrategy where T : class, IHybridControlledGearbox, IGearbox
 	{
 
diff --git a/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs b/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs
index 8a6f72a615..24cc137eb5 100644
--- a/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Hybrid/SerialHybridTest.cs
@@ -684,7 +684,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 			var container = new VehicleContainer(ExecutionMode.Engineering, modData, 
 				x => { sumData?.Write(x, 1, 1, runData); }) { RunData = runData };
 
-			var strategy = new SerialHybridStrategy(runData, container);
+			var strategy = new SerialHybridStrategy<Gearbox>(runData, container);
 			var es = new ElectricSystem(container);
 			var battery = new BatterySystem(container, batteryData);
 			battery.Initialize(initialBatCharge);
-- 
GitLab