From f4077b399ac379b781f087fd8c78ae85ea25a015 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Mon, 1 Aug 2016 12:50:08 +0200
Subject: [PATCH] adding test for at gearbox, considering torque converter's
 inertia at engine

---
 .../DeclarationDataAdapter.cs                 |   4 +-
 .../EngineeringDataAdapter.cs                 |  20 +-
 .../DeclarationModeVectoRunDataFactory.cs     |   2 +-
 .../Impl/EngineOnlyVectoRunDataFactory.cs     |   2 +-
 .../EngineeringModeVectoRunDataFactory.cs     |   2 +-
 .../Models/Declaration/DeclarationData.cs     |   7 +-
 .../SimulationComponent/Data/GearboxData.cs   |   7 +-
 .../SimulationComponent/Impl/ATGearbox.cs     |  17 +-
 .../Models/Declaration/ShiftPolygonTest.cs    |   4 +-
 .../SimulationComponentData/ValidationTest.cs |   4 +-
 .../TestData/Components/AT_GBX/AT-Shift.vgbs  |   4 +
 .../TestData/Components/AT_GBX/Engine.veng    |  20 ++
 .../TestData/Components/AT_GBX/FCMap.vmap     | 212 ++++++++++++++++++
 .../TestData/Components/AT_GBX/FullLoad.vfld  |  14 ++
 .../TestData/Components/AT_GBX/Gearbox.vgbx   |  62 +++++
 .../Components/AT_GBX/TorqueConverter.vtcc    |   9 +
 .../Utils/MockSimulationDataFactory.cs        |   8 +-
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |  19 ++
 18 files changed, 391 insertions(+), 26 deletions(-)
 create mode 100644 VectoCore/VectoCoreTest/TestData/Components/AT_GBX/AT-Shift.vgbs
 create mode 100644 VectoCore/VectoCoreTest/TestData/Components/AT_GBX/Engine.veng
 create mode 100644 VectoCore/VectoCoreTest/TestData/Components/AT_GBX/FCMap.vmap
 create mode 100644 VectoCore/VectoCoreTest/TestData/Components/AT_GBX/FullLoad.vfld
 create mode 100644 VectoCore/VectoCoreTest/TestData/Components/AT_GBX/Gearbox.vgbx
 create mode 100644 VectoCore/VectoCoreTest/TestData/Components/AT_GBX/TorqueConverter.vtcc

diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
index 77cc69ecfa..a0dda94380 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
@@ -142,7 +142,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			return retVal;
 		}
 
-		internal CombustionEngineData CreateEngineData(IEngineDeclarationInputData engine)
+		internal CombustionEngineData CreateEngineData(IEngineDeclarationInputData engine, GearboxType gearboxType)
 		{
 			if (!engine.SavedInDeclarationMode) {
 				WarnDeclarationMode("EngineData");
@@ -152,7 +152,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			retVal.WHTCUrban = engine.WHTCUrban;
 			retVal.WHTCMotorway = engine.WHTCMotorway;
 			retVal.WHTCRural = engine.WHTCRural;
-			retVal.Inertia = DeclarationData.Engine.EngineInertia(retVal.Displacement);
+			retVal.Inertia = DeclarationData.Engine.EngineInertia(retVal.Displacement, gearboxType);
 			retVal.FullLoadCurve = EngineFullLoadCurve.Create(engine.FullLoadCurve, true);
 			retVal.FullLoadCurve.EngineData = retVal;
 			return retVal;
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
index 223e245d2b..5940693be0 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
@@ -36,6 +36,7 @@ using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
@@ -102,14 +103,15 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			Log.Error("{0} is in Declaration Mode but is used for Engineering Mode!", msg);
 		}
 
-		internal CombustionEngineData CreateEngineData(IEngineEngineeringInputData engine)
+		internal CombustionEngineData CreateEngineData(IEngineEngineeringInputData engine, IGearboxEngineeringInputData gbx)
 		{
 			if (engine.SavedInDeclarationMode) {
 				WarnEngineeringMode("EngineData");
 			}
 
 			var retVal = SetCommonCombustionEngineData(engine);
-			retVal.Inertia = engine.Inertia;
+			retVal.Inertia = engine.Inertia +
+							(gbx != null && gbx.Type == GearboxType.AT ? gbx.TorqueConverter.Inertia : 0.SI<KilogramSquareMeter>());
 			retVal.FullLoadCurve = EngineFullLoadCurve.Create(engine.FullLoadCurve);
 			retVal.FullLoadCurve.EngineData = retVal;
 			return retVal;
@@ -149,7 +151,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				} else {
 					throw new InvalidFileFormatException("Gear {0} LossMap or Efficiency missing.", i + 1);
 				}
-				
+
 				var fullLoadCurve = IntersectFullLoadCurves(engineData.FullLoadCurve, gear.MaxTorque);
 				var shiftPolygon = gear.ShiftPolygon != null
 					? ShiftPolygonReader.Create(gear.ShiftPolygon)
@@ -164,6 +166,18 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				});
 			}).ToDictionary(kv => kv.Key, kv => kv.Value);
 
+			if (gears.Any(g => g.TorqueConverterActive)) {
+				if (retVal.Type != GearboxType.AT) {
+					throw new VectoException("Torque Converter can only be used with AT gearbox model");
+				}
+				retVal.TorqueConverterData = TorqueConverterDataReader.Create(gearbox.TorqueConverter.TCData,
+					gearbox.TorqueConverter.ReferenceRPM);
+			} else {
+				if (retVal.Type == GearboxType.AT) {
+					throw new VectoException("AT gearbox model requires torque converter");
+				}
+			}
+
 			retVal.DownshiftAfterUpshiftDelay = gearbox.DownshiftAferUpshiftDelay;
 			retVal.UpshiftAfterDownshiftDelay = gearbox.UpshiftAfterDownshiftDelay;
 			retVal.UpshiftMinAcceleration = gearbox.UpshiftMinAcceleration;
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs
index a2da101383..8c47da9100 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs
@@ -70,7 +70,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 
 			var tempVehicle = dao.CreateVehicleData(InputDataProvider.VehicleInputData, segment.Missions.First(),
 				segment.Missions.First().Loadings.First().Value);
-			var engineData = dao.CreateEngineData(InputDataProvider.EngineInputData);
+			var engineData = dao.CreateEngineData(InputDataProvider.EngineInputData, InputDataProvider.GearboxInputData.Type);
 			var axlegearData = dao.CreateAxleGearData(InputDataProvider.AxleGearInputData, false);
 			var angularGearData = dao.CreateAngularGearData(InputDataProvider.AngularGearInputData, false);
 			var gearboxData = dao.CreateGearboxData(InputDataProvider.GearboxInputData, engineData, axlegearData.AxleGear.Ratio,
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs
index 2d17c6f02a..2fdaf732bb 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs
@@ -52,7 +52,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 			foreach (var cycle in InputDataProvider.JobInputData().Cycles) {
 				var simulationRunData = new VectoRunData {
 					JobName = InputDataProvider.JobInputData().JobName,
-					EngineData = dao.CreateEngineData(InputDataProvider.EngineInputData),
+					EngineData = dao.CreateEngineData(InputDataProvider.EngineInputData, null),
 					Cycle = DrivingCycleDataReader.ReadFromDataTable(cycle.CycleData, CycleType.EngineOnly, cycle.Name, false),
 					ExecutionMode = ExecutionMode.Engineering
 				};
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs
index 5d9dc695b3..c63b92ae05 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs
@@ -61,7 +61,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 		{
 			var dao = new EngineeringDataAdapter();
 			var driver = dao.CreateDriverData(InputDataProvider.DriverInputData);
-			var engineData = dao.CreateEngineData(InputDataProvider.EngineInputData);
+			var engineData = dao.CreateEngineData(InputDataProvider.EngineInputData, InputDataProvider.GearboxInputData);
 
 			var tempVehicle = dao.CreateVehicleData(InputDataProvider.VehicleInputData);
 
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 0e71f25597..308f228e52 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -233,13 +233,16 @@ namespace TUGraz.VectoCore.Models.Declaration
 		public static class Engine
 		{
 			public static readonly KilogramSquareMeter ClutchInertia = 1.3.SI<KilogramSquareMeter>();
+			public static readonly KilogramSquareMeter TorqueConverterInertia = 1.2.SI<KilogramSquareMeter>();
+
 			public static readonly KilogramSquareMeter EngineBaseInertia = 0.41.SI<KilogramSquareMeter>();
 			public static readonly SI EngineDisplacementInertia = (0.27 * 1000).SI().Kilo.Gramm.Per.Meter; // [kg/m]
 
-			public static KilogramSquareMeter EngineInertia(SI displacement)
+			public static KilogramSquareMeter EngineInertia(SI displacement, GearboxType gbxType)
 			{
 				// VB Code:    Return 1.3 + 0.41 + 0.27 * (Displ / 1000)
-				return ClutchInertia + EngineBaseInertia + EngineDisplacementInertia * displacement;
+				return (gbxType == GearboxType.AT ? TorqueConverterInertia : ClutchInertia) + EngineBaseInertia +
+						EngineDisplacementInertia * displacement;
 			}
 		}
 
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
index be064b5242..5c4160abec 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
@@ -32,6 +32,7 @@
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Runtime.Serialization;
+using Newtonsoft.Json;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
@@ -45,12 +46,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 	[DataContract]
 	public class GearboxData : SimulationComponentData
 	{
+		public GearboxType Type { get; internal set; }
+
 		/// <summary>
 		/// The gear data.
 		/// </summary>
 		[Required, ValidateObject] public Dictionary<uint, GearData> Gears = new Dictionary<uint, GearData>();
 
-		public GearboxType Type { get; internal set; }
+		public TorqueConverterData TorqueConverterData { get; internal set; }
 
 		[Required, SIRange(0, 10)]
 		public KilogramSquareMeter Inertia { get; internal set; }
@@ -86,9 +89,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 		[Required, Range(0, 0.5)]
 		public double StartTorqueReserve { get; internal set; }
 
+		// MQ: TODO: move to Driver Data ?
 		[Required, SIRange(double.Epsilon, 5)]
 		public MeterPerSecond StartSpeed { get; internal set; }
 
+		// MQ: TODO: move to Driver Data ?
 		[Required, SIRange(double.Epsilon, 2)]
 		public MeterPerSquareSecond StartAcceleration { get; internal set; }
 
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs
index 02c4ed516e..828f553fd4 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs
@@ -8,13 +8,10 @@ using TUGraz.VectoCore.OutputData;
 
 namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 {
-	public class ATGearbox : AbstractGearbox<GearboxState>, IGearbox, ITnOutPort, ITnInPort,
+	public class ATGearbox : AbstractGearbox<ATGearbox.ATGearboxState>, IGearbox, ITnOutPort, ITnInPort,
 		IClutchInfo
 	{
-		public ATGearbox(IVehicleContainer container, GearboxData gearboxModelData) : base(container, gearboxModelData)
-		{
-		
-		}
+		public ATGearbox(IVehicleContainer container, GearboxData gearboxModelData) : base(container, gearboxModelData) {}
 
 		protected override void DoWriteModalResults(IModalDataContainer container)
 		{
@@ -26,8 +23,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			throw new System.NotImplementedException();
 		}
 
-		
-		public override IResponse Request(Second absTime, Second dt, NewtonMeter torque, PerSecond angularVelocity, bool dryRun = false)
+
+		public override IResponse Request(Second absTime, Second dt, NewtonMeter torque, PerSecond angularVelocity,
+			bool dryRun = false)
 		{
 			throw new System.NotImplementedException();
 		}
@@ -42,6 +40,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			throw new System.NotImplementedException();
 		}
 
-		public class GearboxState : SimpleComponentState {}
+		public class ATGearboxState : GearboxState
+		{
+			public bool TorqueConverterOpen;
+		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs
index c1c167cd38..4d27acea0b 100644
--- a/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs
@@ -35,6 +35,7 @@ using System.IO;
 using System.Linq;
 using NUnit.Framework;
 using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
@@ -341,7 +342,8 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 			};
 
 			var dao = new DeclarationDataAdapter();
-			var engineData = dao.CreateEngineData(new JSONEngineDataV3(JSONInputDataFactory.ReadFile(engineFile), engineFile));
+			var engineData = dao.CreateEngineData(new JSONEngineDataV3(JSONInputDataFactory.ReadFile(engineFile), engineFile),
+				GearboxType.AMT);
 
 			var gearboxData = new JSONGearboxDataV5(JSONInputDataFactory.ReadFile(gearboxFile), gearboxFile);
 
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs
index 889858f55b..c77e8df022 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs
@@ -123,7 +123,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 			};
 			var dao = new EngineeringDataAdapter();
 
-			var engineData = dao.CreateEngineData(data);
+			var engineData = dao.CreateEngineData(data, null);
 
 			var results = engineData.Validate();
 			Assert.IsFalse(results.Any(), "Validation failed: " + "; ".Join(results.Select(r => r.ErrorMessage)));
@@ -161,7 +161,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 			};
 			var dao = new DeclarationDataAdapter();
 
-			var engineData = dao.CreateEngineData(data);
+			var engineData = dao.CreateEngineData(data, GearboxType.AMT);
 
 			var results = engineData.Validate();
 			Assert.IsFalse(results.Any(), "Validation failed: " + "; ".Join(results.Select(r => r.ErrorMessage)));
diff --git a/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/AT-Shift.vgbs b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/AT-Shift.vgbs
new file mode 100644
index 0000000000..91acd23a7a
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/AT-Shift.vgbs
@@ -0,0 +1,4 @@
+M_shift in Nm,n_down in rpm,n_up in rpm
+-200,600,800
+0,600,800
+3000,600,800
diff --git a/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/Engine.veng b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/Engine.veng
new file mode 100644
index 0000000000..87cae4ef3a
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/Engine.veng
@@ -0,0 +1,20 @@
+{
+  "Header": {
+    "CreatedBy": "Raphael Luz IVT TU-Graz (14fea510-e457-4bf6-860f-a9514dc327f1)",
+    "Date": "25.06.2015 11:23:46",
+    "AppVersion": "2.2 beta",
+    "FileVersion": 3
+  },
+  "Body": {
+    "SavedInDeclMode": false,
+    "ModelName": "Demo Engine",
+    "Displacement": 7700.0,
+    "IdlingSpeed": 600.0,
+    "Inertia": 3.8,
+    "FullLoadCurve": "FullLoad.vfld",
+    "FuelMap": "FCMap.vmap",
+    "WHTC-Urban": 0.0,
+    "WHTC-Rural": 0.0,
+    "WHTC-Motorway": 0.0
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/FCMap.vmap b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/FCMap.vmap
new file mode 100644
index 0000000000..48be004d68
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/FCMap.vmap
@@ -0,0 +1,212 @@
+n in rpm,M in Nm,FC in g/h,
+600,-45,0,
+600,0,767,
+600,100,1759,
+600,200,2890,
+600,300,4185,
+600,400,5404,
+600,500,6535,
+600,600,7578,
+800,-55,0,
+800,0,951,
+800,100,2346,
+800,200,3653,
+800,300,5328,
+800,400,6903,
+800,500,8503,
+800,600,10003,
+800,700,11641,
+800,836,13867,
+1000,-63,0,
+1000,0,1006,
+1000,100,2932,
+1000,200,4503,
+1000,300,6472,
+1000,400,8503,
+1000,500,10472,
+1000,600,12504,
+1000,700,14514,
+1000,800,16546,
+1000,900,18567,
+1000,1000,20577,
+1000,1070,21962,
+1100,-69,0,
+1100,0,1235,
+1200,-75,0,
+1200,0,1467,
+1200,100,3063,
+1200,200,5359,
+1200,300,7701,
+1200,400,10082,
+1200,500,12504,
+1200,600,14902,
+1200,700,17182,
+1200,800,19569,
+1200,900,21989,
+1200,1000,24411,
+1200,1100,26819,
+1200,1200,29601,
+1300,-81,0,
+1300,0,1684,
+1300,100,3302,
+1300,200,5828,
+1300,300,8367,
+1300,400,10926,
+1300,500,13533,
+1300,600,16046,
+1300,700,18591,
+1300,800,21172,
+1300,900,23733,
+1300,1000,26321,
+1300,1100,28756,
+1300,1200,31288,
+1400,-88,0,
+1400,0,1943,
+1400,100,3660,
+1400,200,6304,
+1400,300,9031,
+1400,400,11783,
+1400,500,14466,
+1400,600,17180,
+1400,700,20015,
+1400,800,22828,
+1400,900,25498,
+1400,1000,28127,
+1400,1100,30815,
+1400,1200,33609,
+1500,-93,0,
+1500,0,2167,
+1500,100,3963,
+1500,200,6793,
+1500,300,9721,
+1500,400,12670,
+1500,500,15534,
+1500,600,18413,
+1500,700,21467,
+1500,800,24495,
+1500,900,27363,
+1500,1000,30056,
+1500,1100,33082,
+1500,1200,36100,
+1600,-98,0,
+1600,0,2391,
+1600,100,4272,
+1600,200,7257,
+1600,300,10398,
+1600,400,13535,
+1600,500,16711,
+1600,600,19835,
+1600,700,22965,
+1600,800,26115,
+1600,900,29164,
+1600,1000,32057,
+1600,1100,35231,
+1600,1200,38423,
+1700,-101,0,
+1700,0,2641,
+1700,100,4578,
+1700,200,7768,
+1700,300,11114,
+1700,400,14439,
+1700,500,17759,
+1700,600,21069,
+1700,700,24380,
+1700,800,27739,
+1700,900,31000,
+1700,1000,34205,
+1700,1100,37738,
+1700,1165,40006,
+1800,-104,0,
+1800,0,2890,
+1800,100,4965,
+1800,200,8233,
+1800,300,11783,
+1800,400,15307,
+1800,500,18849,
+1800,600,22267,
+1800,700,25749,
+1800,800,29389,
+1800,900,32951,
+1800,1000,36568,
+1800,1124,41263,
+1900,-108,0,
+1900,0,3192,
+1900,100,5416,
+1900,200,8777,
+1900,300,12531,
+1900,400,16204,
+1900,500,19993,
+1900,600,23620,
+1900,700,27255,
+1900,800,31168,
+1900,900,35024,
+1900,1000,38907,
+1900,1080,41993,
+2000,-112,0,
+2000,0,3496,
+2000,100,5853,
+2000,200,9345,
+2000,300,13315,
+2000,400,17188,
+2000,500,21137,
+2000,600,25058,
+2000,700,28927,
+2000,800,33026,
+2000,900,37178,
+2000,1038,42689,
+2100,-119,0,
+2100,0,3873,
+2100,100,6296,
+2100,200,9929,
+2100,300,14095,
+2100,400,18157,
+2100,500,22233,
+2100,600,26479,
+2100,700,30774,
+2100,800,35001,
+2100,900,39377,
+2100,997,43557,
+2200,-126,0,
+2200,0,4247,
+2200,100,6689,
+2200,200,10535,
+2200,300,14855,
+2200,400,19151,
+2200,500,23395,
+2200,600,27834,
+2200,700,32507,
+2200,800,37130,
+2200,900,41619,
+2200,954,44014,
+2300,-131,0,
+2300,0,4523,
+2300,100,7178,
+2300,200,11221,
+2300,300,15658,
+2300,400,20237,
+2300,500,24761,
+2300,600,29476,
+2300,700,34611,
+2300,800,39599,
+2300,898,44083,
+2400,-136,0,
+2400,0,4945,
+2400,100,7525,
+2400,200,11830,
+2400,300,16443,
+2400,400,21307,
+2400,500,26324,
+2400,600,31334,
+2400,700,36714,
+2400,815,42842,
+2500,-141,0,
+2500,0,5338,
+2500,100,7731,
+2500,200,12385,
+2500,300,17231,
+2500,400,22333,
+2500,500,27940,
+2500,600,33195,
+2500,711,39440,
+2600,-149,0,
+2600,0,5700,
diff --git a/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/FullLoad.vfld b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/FullLoad.vfld
new file mode 100644
index 0000000000..e45108378b
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/FullLoad.vfld
@@ -0,0 +1,14 @@
+n in rpm,M_FL in Nm,M_frict in Nm,PT1 in s
+575,570,-12,0.21
+800,834,-16,0.47
+1000,1068,-24,0.58
+1200,1198,-33,0.53
+1400,1198,-44,0.46
+1600,1198,-56,0.35
+1800,1122,-67,0.20
+2000,1036,-82,0.11
+2100,995,-89,0.11
+2200,952,-97,0.11
+2400,813,-119,0.11
+2500,709,-134,0.11
+2600,0,-148,0.11
diff --git a/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/Gearbox.vgbx b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/Gearbox.vgbx
new file mode 100644
index 0000000000..acac788219
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/Gearbox.vgbx
@@ -0,0 +1,62 @@
+{
+  "Header": {
+    "CreatedBy": "Raphael Luz IVT TU-Graz (14fea510-e457-4bf6-860f-a9514dc327f1)",
+    "Date": "25.06.2015 11:23:52",
+    "AppVersion": "2.2 beta",
+    "FileVersion": 5
+  },
+  "Body": {
+    "SavedInDeclMode": false,
+    "ModelName": "Gearbox",
+    "Inertia": 0.0,
+    "TracInt": 0.0,
+    "Gears": [
+      {
+        "Ratio": 6.2,
+        "Efficiency": "0.95"
+      },
+      {
+        "Ratio": 3.0,
+        "Efficiency": "0.96",
+        "TCactive": true,
+        "ShiftPolygon": "AT-Shift.vgbs",
+        "FullLoadCurve": "<NOFILE>"
+      },
+      {
+        "Ratio": 3.0,
+        "Efficiency": "0.96",
+        "TCactive": false,
+        "ShiftPolygon": "AT-Shift.vgbs",
+        "FullLoadCurve": "<NOFILE>"
+      },
+      {
+        "Ratio": 1.0,
+        "Efficiency": "0.98",
+        "TCactive": false,
+        "ShiftPolygon": "AT-Shift.vgbs",
+        "FullLoadCurve": "<NOFILE>"
+      },
+      {
+        "Ratio": 0.8,
+        "Efficiency": "0.96",
+        "TCactive": false,
+        "ShiftPolygon": "AT-Shift.vgbs",
+        "FullLoadCurve": "<NOFILE>"
+      }
+    ],
+    "TqReserve": 5.0,
+    "SkipGears": false,
+    "ShiftTime": 1,
+    "EaryShiftUp": false,
+    "StartTqReserve": 40.0,
+    "StartSpeed": 4.0,
+    "StartAcc": 0.8,
+    "GearboxType": "AT",
+    "TorqueConverter": {
+      "Enabled": true,
+      "File": "TorqueConverter.vtcc",
+      "RefRPM": 1000.0,
+      "Inertia": 0.5
+    }
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/TorqueConverter.vtcc b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/TorqueConverter.vtcc
new file mode 100644
index 0000000000..1a329800c2
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/TorqueConverter.vtcc
@@ -0,0 +1,9 @@
+Speed Ratio, Torque Ratio,MP1000
+0,3.935741,563.6598
+0.1,3.296827,534.1364
+0.2,2.701476,504.6129
+0.3,2.265852,472.1372
+0.4,1.931875,421.9474
+0.5,1.554335,354.0435
+0.6,1.249399,268.4255
+0.7,1.075149,114.9037
diff --git a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs
index 422b40d4e1..71717c378c 100644
--- a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs
@@ -53,14 +53,14 @@ namespace TUGraz.VectoCore.Tests.Utils
 			var engineInput = JSONInputDataFactory.ReadEngine(engineFile);
 			if (declarationMode) {
 				var dao = new DeclarationDataAdapter();
-				var engineData = dao.CreateEngineData(engineInput);
+				var engineData = dao.CreateEngineData(engineInput, gearboxInput.Type);
 				return dao.CreateGearboxData(gearboxInput, engineData, ((IAxleGearInputData)gearboxInput).Ratio, 0.5.SI<Meter>(),
 					false);
 			} else {
 				var dao = new EngineeringDataAdapter();
-				var engineData = dao.CreateEngineData(engineInput);
+				var engineData = dao.CreateEngineData(engineInput, gearboxInput);
 				return dao.CreateGearboxData(gearboxInput, engineData, ((IAxleGearInputData)gearboxInput).Ratio, 0.5.SI<Meter>(),
-					false);
+					true);
 			}
 		}
 
@@ -75,7 +75,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 		{
 			var dao = new EngineeringDataAdapter();
 			var engineInput = JSONInputDataFactory.ReadEngine(engineFile);
-			return dao.CreateEngineData(engineInput);
+			return dao.CreateEngineData(engineInput, null);
 		}
 
 		public static VehicleData CreateVehicleDataFromFile(string vehicleDataFile)
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 0bff5b61e7..dbf7a019e0 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -95,6 +95,7 @@
     <Compile Include="Models\Declaration\ShiftPolygonTest.cs" />
     <Compile Include="Models\SimulationComponentData\TorqueConverterDataTest.cs" />
     <Compile Include="Models\SimulationComponentData\ValidationTest.cs" />
+    <Compile Include="Models\SimulationComponent\ATGearboxTest.cs" />
     <Compile Include="Models\Simulation\FactoryTest.cs" />
     <Compile Include="Models\Simulation\LossMapRangeValidationTest.cs" />
     <Compile Include="Models\Simulation\LACDecisionFactorTest.cs" />
@@ -215,6 +216,24 @@
     <None Include="TestData\Components\40t_Long_Haul_Truck_NoAng.vveh">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\Components\AT_GBX\AT-Shift.vgbs">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="TestData\Components\AT_GBX\Engine.veng">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="TestData\Components\AT_GBX\FCMap.vmap">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="TestData\Components\AT_GBX\FullLoad.vfld">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="TestData\Components\AT_GBX\Gearbox.vgbx">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="TestData\Components\AT_GBX\TorqueConverter.vtcc">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\Components\Class4_40t_Long_Haul_Truck.vveh">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
-- 
GitLab