From 6e36399740f4727594a64538e7d61913225b5908 Mon Sep 17 00:00:00 2001
From: Michael Krisper <michael.krisper@tugraz.at>
Date: Tue, 11 Aug 2015 15:32:46 +0200
Subject: [PATCH] very simple first implementation of gearbox

---
 .../SimulationComponent/Data/GearboxData.cs   | 50 -------------------
 .../SimulationComponent/Impl/Gearbox.cs       | 29 +++++++++--
 VectoCore/VectoCore.csproj                    |  1 +
 VectoCoreTest/Models/Simulation/AuxTests.cs   |  9 ++--
 4 files changed, 29 insertions(+), 60 deletions(-)

diff --git a/VectoCore/Models/SimulationComponent/Data/GearboxData.cs b/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
index 99d6a9cdeb..3cf4eaa505 100644
--- a/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
+++ b/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
@@ -28,56 +28,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 
 		internal readonly Dictionary<uint, GearData> _gearData = new Dictionary<uint, GearData>();
 
-		// @@@quam: according to Raphael no longer required
-		//public void CalculateAverageEfficiency(CombustionEngineData engineData)
-		//{
-		//	var angularVelocityStep = (2.0 / 3.0) * (engineData.GetFullLoadCurve(0).RatedSpeed() - engineData.IdleSpeed) / 10.0;
-
-		//	var axleGearEfficiencySum = 0.0;
-		//	var axleGearSumCount = 0;
-
-		//	foreach (var gearEntry in _gearData) {
-		//		var gearEfficiencySum = 0.0;
-		//		var gearSumCount = 0;
-		//		for (var angularVelocity = engineData.IdleSpeed + angularVelocityStep;
-		//			angularVelocity < engineData.GetFullLoadCurve(0).RatedSpeed();
-		//			angularVelocity += angularVelocityStep) {
-		//			var fullLoadStationaryTorque = engineData.GetFullLoadCurve(gearEntry.Key).FullLoadStationaryTorque(angularVelocity);
-		//			var torqueStep = (2.0 / 3.0) * fullLoadStationaryTorque / 10.0;
-		//			for (var engineOutTorque = (1.0 / 3.0) * fullLoadStationaryTorque;
-		//				engineOutTorque < fullLoadStationaryTorque;
-		//				engineOutTorque += torqueStep) {
-		//				var engineOutPower = Formulas.TorqueToPower(engineOutTorque, angularVelocity);
-		//				var gearboxOutPower =
-		//					Formulas.TorqueToPower(
-		//						gearEntry.Value.LossMap.GearboxOutTorque(angularVelocity, engineOutTorque), angularVelocity);
-		//				if (gearboxOutPower > engineOutPower) {
-		//					gearboxOutPower = engineOutPower;
-		//				}
-
-		//				gearEfficiencySum += ((engineOutPower - gearboxOutPower) / engineOutPower).Double();
-		//				gearSumCount += 1;
-
-
-		//				// axle gear
-		//				var angularVelocityAxleGear = angularVelocity / gearEntry.Value.Ratio;
-		//				var axlegearOutPower =
-		//					Formulas.TorqueToPower(
-		//						AxleGearData.LossMap.GearboxOutTorque(angularVelocityAxleGear,
-		//							Formulas.PowerToTorque(engineOutPower, angularVelocityAxleGear)),
-		//						angularVelocityAxleGear);
-		//				if (axlegearOutPower > engineOutPower) {
-		//					axlegearOutPower = engineOutPower;
-		//				}
-		//				axleGearEfficiencySum += (axlegearOutPower / engineOutPower).Double();
-		//				axleGearSumCount += 1;
-		//			}
-		//		}
-		//		gearEntry.Value.AverageEfficiency = gearEfficiencySum / gearSumCount;
-		//	}
-		//	AxleGearData.AverageEfficiency = axleGearEfficiencySum / axleGearSumCount;
-		//}
-
 		public int GearsCount()
 		{
 			return _gearData.Count;
diff --git a/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs b/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
index c93ad34387..f312c048df 100644
--- a/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
+++ b/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
@@ -1,9 +1,11 @@
 using System;
+using System.Runtime.InteropServices;
 using TUGraz.VectoCore.Models.Connector.Ports;
 using TUGraz.VectoCore.Models.Simulation;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.DataBus;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
@@ -11,12 +13,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 	public class Gearbox : VectoSimulationComponent, IGearbox, ITnOutPort, ITnInPort
 	{
 		protected ITnOutPort Next;
+		private uint _gear;
 
 		internal GearboxData Data;
 
 		public Gearbox(IVehicleContainer container, GearboxData gearboxData) : base(container)
 		{
 			Data = gearboxData;
+			_gear = 0;
 		}
 
 		#region ITnInProvider
@@ -41,21 +45,36 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 		uint IGearboxInfo.Gear()
 		{
-			throw new NotImplementedException();
+			return _gear;
 		}
 
 		#endregion
 
 		#region ITnOutPort
 
+		private GearData CurrentGear
+		{
+			get { return Data[_gear]; }
+		}
+
+
 		IResponse ITnOutPort.Request(Second absTime, Second dt, NewtonMeter torque, PerSecond engineSpeed, bool dryRun)
 		{
-			throw new NotImplementedException();
+			// todo check fulloadcurve for overload
+
+
+			// todo check shiftpolygon for shifting
+
+
+			engineSpeed *= CurrentGear.Ratio;
+			torque = CurrentGear.LossMap.GearboxInTorque(engineSpeed, torque);
+
+			return Next.Request(absTime, dt, torque, engineSpeed);
 		}
 
 		public IResponse Initialize(NewtonMeter torque, PerSecond engineSpeed)
 		{
-			// todo: add gearbox losses
+			_gear = 0;
 			return Next.Initialize(torque, engineSpeed);
 		}
 
@@ -74,12 +93,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 		protected override void DoWriteModalResults(IModalDataWriter writer)
 		{
-			throw new NotImplementedException();
+			//todo implement
 		}
 
 		protected override void DoCommitSimulationStep()
 		{
-			throw new NotImplementedException();
+			//todo implement
 		}
 
 		#endregion
diff --git a/VectoCore/VectoCore.csproj b/VectoCore/VectoCore.csproj
index 7dc29ca4aa..8ed691bf8b 100644
--- a/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore.csproj
@@ -276,6 +276,7 @@
     <EmbeddedResource Include="Resources\Declaration\DefaultTC.vtcc" />
     <EmbeddedResource Include="Resources\Declaration\VCDV\parameters.csv" />
     <EmbeddedResource Include="Resources\Declaration\WHTC-Weighting-Factors.csv" />
+    <EmbeddedResource Include="Resources\Declaration\VAUX\ALT-Tech.csv" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
diff --git a/VectoCoreTest/Models/Simulation/AuxTests.cs b/VectoCoreTest/Models/Simulation/AuxTests.cs
index f96d05f25a..cb09ce6051 100644
--- a/VectoCoreTest/Models/Simulation/AuxTests.cs
+++ b/VectoCoreTest/Models/Simulation/AuxTests.cs
@@ -18,15 +18,14 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 		[TestMethod]
 		public void AuxWriteModFileSumFile()
 		{
-			var dataWriter = new ModalDataWriter(@"40t_Long_Haul_Truck_Long_Haul_Empty Loading.vmod",
-				SimulatorFactory.FactoryMode.EngineeringMode);
+			var dataWriter = new ModalDataWriter(@"40t_Long_Haul_Truck_Long_Haul_Empty Loading AUX.vmod");
 			dataWriter.AddAuxiliary("FAN");
 			dataWriter.AddAuxiliary("PS");
 			dataWriter.AddAuxiliary("STP");
 			dataWriter.AddAuxiliary("ES");
 			dataWriter.AddAuxiliary("AC");
 
-			var sumWriter = new SummaryFileWriter(@"40t_Long_Haul_Truck.vsum");
+			var sumWriter = new SummaryFileWriter(@"40t_Long_Haul_Truck AUX.vsum");
 			var deco = new SumWriterDecoratorFullPowertrain(sumWriter, "", "", "");
 
 			var container = new VehicleContainer(dataWriter, deco);
@@ -67,9 +66,9 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var testColumns = new[] { "Paux_FAN", "Paux_STP", "Paux_AC", "Paux_ES", "Paux_PS", "Paux" };
 
 			ResultFileHelper.TestModFile(@"TestData\Results\EngineOnlyCycles\40t_Long_Haul_Truck_Long_Haul_Empty Loading.vmod",
-				@"40t_Long_Haul_Truck_Long_Haul_Empty Loading.vmod", testColumns);
+				@"40t_Long_Haul_Truck_Long_Haul_Empty Loading AUX.vmod", testColumns);
 			ResultFileHelper.TestSumFile(@"40t_Long_Haul_Truck.vsum",
-				@"TestData\Results\EngineOnlyCycles\40t_Long_Haul_Truck.vsum");
+				@"TestData\Results\EngineOnlyCycles\40t_Long_Haul_Truck AUX.vsum");
 		}
 
 		[TestMethod]
-- 
GitLab