From 7452cbeeeb48ac4db1b1f3deab89cb98dc3af86d Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Tue, 30 Aug 2016 16:50:35 +0200
Subject: [PATCH] adding column tc_active to driving cycle (measured speed),
 extending cycle gearbox by torque converter, adding testdata for measured
 speed test AT gearbox

---
 .../Utils/StringExtensionMethods.cs           |  11 +-
 .../Reader/DrivingCycleDataReader.cs          |  31 +-
 .../Simulation/Impl/PowertrainBuilder.cs      |  14 +-
 .../Data/DrivingCycleData.cs                  |   2 +
 .../SimulationComponent/Impl/CycleGearbox.cs  |  87 +++---
 .../Impl/PowertrainDrivingCycle.cs            |   3 +-
 .../Utils/DataTableExtensionMethods.cs        |   8 +
 .../Simulation/MeasuredSpeedModeTest.cs       |   9 +
 .../TestData/MeasuredSpeed/EngineAT.veng      |  20 ++
 .../TestData/MeasuredSpeed/EngineAT.vfld      |  11 +
 .../TestData/MeasuredSpeed/EngineAT.vmap      | 116 ++++++++
 .../MeasuredSpeed/GearboxPowerSplit.vgbx      |  56 ++++
 .../MeasuredSpeed/MeasuredSpeedGearAT.vdri    | 274 ++++++++++++++++++
 .../MeasuredSpeed/MeasuredSpeedGearAT.vecto   |  44 +++
 .../MeasuredSpeed/ShiftPolygonsAT.vgbs        |   5 +
 .../TorqueConverterPowerSplit.vtcc            |  18 ++
 .../TestData/MeasuredSpeed/VehicleAT.vveh     |  55 ++++
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |  27 ++
 18 files changed, 724 insertions(+), 67 deletions(-)
 create mode 100644 VectoCore/VectoCoreTest/TestData/MeasuredSpeed/EngineAT.veng
 create mode 100644 VectoCore/VectoCoreTest/TestData/MeasuredSpeed/EngineAT.vfld
 create mode 100644 VectoCore/VectoCoreTest/TestData/MeasuredSpeed/EngineAT.vmap
 create mode 100644 VectoCore/VectoCoreTest/TestData/MeasuredSpeed/GearboxPowerSplit.vgbx
 create mode 100644 VectoCore/VectoCoreTest/TestData/MeasuredSpeed/MeasuredSpeedGearAT.vdri
 create mode 100644 VectoCore/VectoCoreTest/TestData/MeasuredSpeed/MeasuredSpeedGearAT.vecto
 create mode 100644 VectoCore/VectoCoreTest/TestData/MeasuredSpeed/ShiftPolygonsAT.vgbs
 create mode 100644 VectoCore/VectoCoreTest/TestData/MeasuredSpeed/TorqueConverterPowerSplit.vtcc
 create mode 100644 VectoCore/VectoCoreTest/TestData/MeasuredSpeed/VehicleAT.vveh

diff --git a/VectoCommon/VectoCommon/Utils/StringExtensionMethods.cs b/VectoCommon/VectoCommon/Utils/StringExtensionMethods.cs
index 5612a1d2d8..6b7d0a6496 100644
--- a/VectoCommon/VectoCommon/Utils/StringExtensionMethods.cs
+++ b/VectoCommon/VectoCommon/Utils/StringExtensionMethods.cs
@@ -50,12 +50,21 @@ namespace TUGraz.VectoCommon.Utils
 			try {
 				return double.Parse(self, CultureInfo.InvariantCulture);
 			} catch (FormatException) {
-				if (defaultValue.HasValue)
+				if (defaultValue.HasValue) {
 					return defaultValue.Value;
+				}
 				throw;
 			}
 		}
 
+		public static bool ToBoolean(this string self)
+		{
+			if (string.IsNullOrEmpty(self)) {
+				return false;
+			}
+			return int.Parse(self) != 0;
+		}
+
 		public static double IndulgentParse(this string self)
 		{
 			return double.Parse(new string(self.Trim().TakeWhile(c => char.IsDigit(c) || c == '.').ToArray()),
diff --git a/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs b/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs
index 2e02f9d19f..85eae3d14d 100644
--- a/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs
@@ -245,13 +245,14 @@ namespace TUGraz.VectoCore.InputData.Reader
 
 		private static void AdjustDistanceAfterStop(List<DrivingCycleData.DrivingCycleEntry> entries)
 		{
-			using (var currentIt = entries.GetEnumerator())
-			using (var nextIt = entries.GetEnumerator()) {
-				nextIt.MoveNext();
-				while (currentIt.MoveNext() && nextIt.MoveNext()) {
-					if (currentIt.Current != null && !currentIt.Current.StoppingTime.IsEqual(0)) {
-						if (nextIt.Current != null) {
-							nextIt.Current.Distance = currentIt.Current.Distance;
+			using (var currentIt = entries.GetEnumerator()) {
+				using (var nextIt = entries.GetEnumerator()) {
+					nextIt.MoveNext();
+					while (currentIt.MoveNext() && nextIt.MoveNext()) {
+						if (currentIt.Current != null && !currentIt.Current.StoppingTime.IsEqual(0)) {
+							if (nextIt.Current != null) {
+								nextIt.Current.Distance = currentIt.Current.Distance;
+							}
 						}
 					}
 				}
@@ -307,6 +308,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 			public const string WindYawAngle = "vair_beta";
 			public const string EnginePower = "Pe";
 			public const string EngineTorque = "Me";
+			public const string TorqueConverterActive = "tc_active";
 		}
 
 		#region DataParser
@@ -591,7 +593,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 		/// <summary>
 		/// Parser for Measured Speed Mode Option 2.
 		/// </summary>
-		// <t>, <v>, <n>, <gear>[, <grad>, <Padd>, <vair_res>, <vair_beta>, Aux_...]
+		// <t>, <v>, <n>, <gear>[, <tc_active>, <grad>, <Padd>, <vair_res>, <vair_beta>, Aux_...]
 		private class MeasuredSpeedGearDataParser : AbstractCycleDataParser
 		{
 			public override IEnumerable<DrivingCycleData.DrivingCycleEntry> Parse(DataTable table, bool crossWindRequired)
@@ -603,10 +605,14 @@ namespace TUGraz.VectoCore.InputData.Reader
 					VehicleTargetSpeed = row.ParseDouble(Fields.VehicleSpeed).KMPHtoMeterPerSecond(),
 					RoadGradient = VectoMath.InclinationToAngle(row.ParseDoubleOrGetDefault(Fields.RoadGradient) / 100.0),
 					AdditionalAuxPowerDemand = row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI().Kilo.Watt.Cast<Watt>(),
-					AngularVelocity = row.ParseDouble(Fields.EngineSpeed).RPMtoRad(),
+					AngularVelocity = row.ParseDoubleOrGetDefault(Fields.EngineSpeed).RPMtoRad(),
 					Gear = (uint)row.ParseDouble(Fields.Gear),
-					AirSpeedRelativeToVehicle =
-						crossWindRequired ? row.ParseDouble(Fields.AirSpeedRelativeToVehicle).KMPHtoMeterPerSecond() : null,
+					TorqueConverterActive = table.Columns.Contains(Fields.TorqueConverterActive)
+						? row.ParseBoolean(Fields.TorqueConverterActive)
+						: (bool?)null,
+					AirSpeedRelativeToVehicle = crossWindRequired
+						? row.ParseDouble(Fields.AirSpeedRelativeToVehicle).KMPHtoMeterPerSecond()
+						: null,
 					WindYawAngle = crossWindRequired ? row.ParseDoubleOrGetDefault(Fields.WindYawAngle) : 0,
 					AuxiliarySupplyPower = row.GetAuxiliaries()
 				}).ToArray();
@@ -619,7 +625,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 				var requiredCols = new[] {
 					Fields.Time,
 					Fields.VehicleSpeed,
-					Fields.EngineSpeed,
+					//Fields.EngineSpeed,
 					Fields.Gear
 				};
 				var allowedCols = new[] {
@@ -627,6 +633,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 					Fields.VehicleSpeed,
 					Fields.EngineSpeed,
 					Fields.Gear,
+					Fields.TorqueConverterActive,
 					Fields.AdditionalAuxPowerDemand,
 					Fields.RoadGradient,
 					Fields.AirSpeedRelativeToVehicle,
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
index 289164f7f4..82fcc98308 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
@@ -108,7 +108,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 				.AddComponent(new AxleGear(container, data.AxleGearData))
 				.AddComponent(data.AngularGearData != null ? new AngularGear(container, data.AngularGearData) : null)
 				.AddRetarderAndGearbox(data.Retarder, gearbox, container)
-				.AddComponent(new CycleClutch(container))
+				.AddComponent(new Clutch(container, data.EngineData))
 				.AddComponent(new CombustionEngine(container, data.EngineData, pt1Disabled: true))
 				.AddAuxiliaries(container, data);
 
@@ -124,7 +124,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			var container = new VehicleContainer(ExecutionMode.Engineering, _modData, _sumWriter) { RunData = data };
 
 			// MeasuredSpeedDrivingCycle --> vehicle --> wheels --> brakes 
-			// --> axleGear --> (retarder) --> CycleGearBox --> (retarder) --> CycleClutch --> engine <-- Aux
+			// --> axleGear --> (retarder) --> GearBox --> (retarder) --> Clutch --> engine <-- Aux
 			var powertrain = new MeasuredSpeedDrivingCycle(container, data.Cycle)
 				.AddComponent(new Vehicle(container, data.VehicleData))
 				.AddComponent(new Wheels(container, data.VehicleData.DynamicTyreRadius, data.VehicleData.WheelsInertia))
@@ -152,15 +152,17 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 			// MeasuredSpeedDrivingCycle --> vehicle --> wheels --> brakes 
 			// --> axleGear --> (retarder) --> CycleGearBox --> (retarder) --> CycleClutch --> engine <-- Aux
-			new MeasuredSpeedDrivingCycle(container, data.Cycle)
+			var powertrain = new MeasuredSpeedDrivingCycle(container, data.Cycle)
 				.AddComponent(new Vehicle(container, data.VehicleData))
 				.AddComponent(new Wheels(container, data.VehicleData.DynamicTyreRadius, data.VehicleData.WheelsInertia))
 				.AddComponent(new Brakes(container))
 				.AddComponent(new AxleGear(container, data.AxleGearData))
 				.AddComponent(data.AngularGearData != null ? new AngularGear(container, data.AngularGearData) : null)
-				.AddRetarderAndGearbox(data.Retarder, new CycleGearbox(container, data.GearboxData), container)
-				.AddComponent(new CycleClutch(container))
-				.AddComponent(new CombustionEngine(container, data.EngineData))
+				.AddRetarderAndGearbox(data.Retarder, new CycleGearbox(container, data.GearboxData), container);
+			if (data.GearboxData.Type.ManualTransmission()) {
+				powertrain = powertrain.AddComponent(new CycleClutch(container));
+			}
+			powertrain.AddComponent(new CombustionEngine(container, data.EngineData))
 				.AddAuxiliaries(container, data);
 
 			return container;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/DrivingCycleData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/DrivingCycleData.cs
index 28f7540235..b19c172a81 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/DrivingCycleData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/DrivingCycleData.cs
@@ -160,6 +160,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 			/// </summary>
 			public Watt PWheel { get; set; }
 
+			public bool? TorqueConverterActive { get; set; }
+
 			/// <summary>
 			/// The angular velocity at the wheel. only used in PWheelCycle.
 			/// </summary>
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs
index a0921ac24a..2bb377a7a9 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs
@@ -38,6 +38,7 @@ 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.OutputData;
 using TUGraz.VectoCore.Utils;
 
@@ -45,14 +46,32 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 {
 	public class CycleGearbox : AbstractGearbox<GearboxState>, IGearbox, IClutchInfo
 	{
+		protected bool? TorqueConverterActive;
+
+		protected internal TorqueConverterData TorqueConverter;
+
 		public CycleGearbox(IVehicleContainer container, GearboxData gearboxModelData)
-			: base(container, gearboxModelData) {}
+			: base(container, gearboxModelData)
+		{
+			if (!gearboxModelData.Type.AutomaticTransmission()) {
+				return;
+			}
+			TorqueConverter = gearboxModelData.TorqueConverterData;
+			if (TorqueConverter == null) {
+				throw new VectoException("Torque Converter required for AT transmission!");
+			}
+		}
 
 		public override IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity)
 		{
 			var dt = Constants.SimulationSettings.TargetTimeInterval;
 
 			Gear = DataBus.CycleData.LeftSample.Gear;
+			TorqueConverterActive = DataBus.CycleData.LeftSample.TorqueConverterActive;
+
+			if (TorqueConverter != null && TorqueConverterActive == null) {
+				throw new VectoSimulationException("Driving cycle does not contain information about TorqueConverter!");
+			}
 
 			PerSecond inAngularVelocity;
 			NewtonMeter inTorque;
@@ -82,51 +101,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			return response;
 		}
 
-		/// <summary>
-		/// Special Initialize with gear as additional param. For initial Gear-Searching Purposes.
-		/// </summary>
-		/// <param name="gear"></param>
-		/// <param name="outTorque"></param>
-		/// <param name="outAngularVelocity"></param>
-		/// <returns></returns>
-		internal ResponseDryRun Initialize(uint gear, NewtonMeter outTorque, PerSecond outAngularVelocity)
-		{
-			var inAngularVelocity = outAngularVelocity * ModelData.Gears[gear].Ratio;
-			var inTorqueLossResult = ModelData.Gears[Gear].LossMap.GetTorqueLoss(outAngularVelocity, outTorque);
-			CurrentState.TorqueLossResult = inTorqueLossResult;
-			var inTorque = outTorque / ModelData.Gears[Gear].Ratio - inTorqueLossResult.Value;
-
-			if (!inAngularVelocity.IsEqual(0)) {
-				var alpha = ModelData.Inertia.IsEqual(0)
-					? 0.SI<PerSquareSecond>()
-					: outTorque / ModelData.Inertia;
-
-				var inertiaPowerLoss = Formulas.InertiaPower(inAngularVelocity, alpha, ModelData.Inertia,
-					Constants.SimulationSettings.TargetTimeInterval);
-				inTorque += inertiaPowerLoss / inAngularVelocity;
-			}
-
-			var response = NextComponent.Initialize(inTorque, inAngularVelocity);
-			response.Switch().
-				Case<ResponseSuccess>().
-				Case<ResponseOverload>().
-				Case<ResponseUnderload>().
-				Default(r => { throw new UnexpectedResponseException("Gearbox.Initialize", r); });
-
-			var fullLoadGearbox = ModelData.Gears[gear].MaxTorque * inAngularVelocity;
-			var fullLoadEngine = DataBus.EngineStationaryFullPower(inAngularVelocity);
-
-			var fullLoad = VectoMath.Min(fullLoadGearbox, fullLoadEngine);
-
-			return new ResponseDryRun {
-				Source = this,
-				EnginePowerRequest = response.EnginePowerRequest,
-				ClutchPowerRequest = response.ClutchPowerRequest,
-				GearboxPowerRequest = outTorque * outAngularVelocity,
-				DeltaFullLoad = response.EnginePowerRequest - fullLoad
-			};
-		}
-
 		/// <summary>
 		/// Requests the Gearbox to deliver torque and angularVelocity
 		/// </summary>
@@ -145,6 +119,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				? DataBus.CycleData.LeftSample.Gear
 				: DataBus.CycleData.RightSample.Gear;
 
+			TorqueConverterActive = DataBus.DriverBehavior == DrivingBehavior.Braking
+				? DataBus.CycleData.LeftSample.TorqueConverterActive
+				: DataBus.CycleData.RightSample.TorqueConverterActive;
+
+			if (TorqueConverter != null && TorqueConverterActive == null) {
+				throw new VectoSimulationException("Driving cycle does not contain information about TorqueConverter!");
+			}
+
 			var avgOutAngularVelocity = (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0;
 
 			if (Gear == 0) {
@@ -216,6 +198,19 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				CurrentState.Gear = Gear;
 				// end critical section
 
+				if (TorqueConverter != null && TorqueConverterActive != null && TorqueConverterActive.Value) {
+					var tcOperatingPoint = TorqueConverter.FindOperatingPoint(inTorque, inAngularVelocity);
+					if (tcOperatingPoint.InAngularVelocity.IsSmaller(DataBus.EngineIdleSpeed)) {
+						throw new VectoException("Invalid operating point, inAngularVelocity below engine's idle speed: {0}",
+							tcOperatingPoint.InAngularVelocity);
+					}
+					if (tcOperatingPoint.InAngularVelocity.IsGreater(TorqueConverter.TorqueConverterSpeedLimit)) {
+						tcOperatingPoint = TorqueConverter.GetOutTorque(TorqueConverter.TorqueConverterSpeedLimit, outAngularVelocity);
+					}
+					var tcResponse = NextComponent.Request(absTime, dt, tcOperatingPoint.InTorque, tcOperatingPoint.InAngularVelocity);
+					return tcResponse;
+				}
+
 				var response = NextComponent.Request(absTime, dt, inTorque, inAngularVelocity);
 				response.GearboxPowerRequest = outTorque * avgOutAngularVelocity;
 				return response;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/PowertrainDrivingCycle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/PowertrainDrivingCycle.cs
index c2d195028f..b4d488ccf2 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/PowertrainDrivingCycle.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/PowertrainDrivingCycle.cs
@@ -324,8 +324,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 	/// <summary>
 	/// Driving Cycle for the Measured Speed Gear driving cycle.
 	/// </summary>
-	public class MeasuredSpeedDrivingCycle :
-		StatefulProviderComponent
+	public class MeasuredSpeedDrivingCycle : StatefulProviderComponent
 			<MeasuredSpeedDrivingCycle.DrivingCycleState, ISimulationOutPort, IDriverDemandInPort, IDriverDemandOutPort>,
 		IDriverInfo, IDrivingCycleInfo, IMileageCounter, IDriverDemandInProvider, IDriverDemandInPort, ISimulationOutProvider,
 		ISimulationOutPort
diff --git a/VectoCore/VectoCore/Utils/DataTableExtensionMethods.cs b/VectoCore/VectoCore/Utils/DataTableExtensionMethods.cs
index 0e0b708f3a..7afba99f94 100644
--- a/VectoCore/VectoCore/Utils/DataTableExtensionMethods.cs
+++ b/VectoCore/VectoCore/Utils/DataTableExtensionMethods.cs
@@ -86,6 +86,14 @@ namespace TUGraz.VectoCore.Utils
 			}
 		}
 
+		public static bool ParseBoolean(this DataRow row, string columnName)
+		{
+			if (!row.Table.Columns.Contains(columnName)) {
+				throw new KeyNotFoundException(string.Format("Column {0} was not found in DataRow.", columnName));
+			}
+			return row.Field<string>(row.Table.Columns[columnName]).ToBoolean();
+		}
+
 		public static IEnumerable<T> Values<T>(this DataColumn column)
 		{
 			return column.Table.AsEnumerable().Select(r => r.Field<T>(column));
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs
index e434ef9292..eb5d233d8c 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs
@@ -437,6 +437,15 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 				@"TestData\MeasuredSpeed\MeasuredSpeedGearVairAux.vsum");
 		}
 
+		[TestMethod]
+		public void MeasuredSpeed_Gear_AT_Run()
+		{
+			RunJob(@"TestData\MeasuredSpeed\MeasuredSpeedGearAT.vecto",
+				@"TestData\MeasuredSpeed\Results\MeasuredSpeedGear_MeasuredSpeed_GearAT_SORT.vmod",
+				@"TestData\MeasuredSpeed\MeasuredSpeedGear_MeasuredSpeed_GearAT_SORT.vmod",
+				@"TestData\MeasuredSpeed\Results\MeasuredSpeedGearAT.vsum", @"TestData\MeasuredSpeed\MeasuredSpeedGearAT.vsum");
+		}
+
 		[TestMethod]
 		public void VcdbTest()
 		{
diff --git a/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/EngineAT.veng b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/EngineAT.veng
new file mode 100644
index 0000000000..5cecb6012a
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/EngineAT.veng
@@ -0,0 +1,20 @@
+{
+  "Header": {
+    "CreatedBy": "Raphael Luz IVT TU-Graz (14fea510-e457-4bf6-860f-a9514dc327f1)",
+    "Date": "25.06.2015 11:23:22",
+    "AppVersion": "2.2 beta",
+    "FileVersion": 3
+  },
+  "Body": {
+    "SavedInDeclMode": false,
+    "ModelName": "Generic Engine",
+    "Displacement": 12730.0,
+    "IdlingSpeed": 560.0,
+    "Inertia": 3.8,
+    "FullLoadCurve": "EngineAT.vfld",
+    "FuelMap": "EngineAT.vmap",
+    "WHTC-Urban": 1.0,
+    "WHTC-Rural": 1.0,
+    "WHTC-Motorway": 1.0
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/EngineAT.vfld b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/EngineAT.vfld
new file mode 100644
index 0000000000..0d3a2784f3
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/EngineAT.vfld
@@ -0,0 +1,11 @@
+engine speed [1/min],full load torque [Nm],motoring torque [Nm],PT1 [s]
+560,1180,-149,0.6
+600,1282,-148,0.6
+799.9999999,1791,-149,0.6
+1000,2300,-160,0.6
+1200,2300,-179,0.6
+1400,2300,-203,0.6
+1599.999999,2079,-235,0.49
+1800,1857,-264,0.25
+2000.000001,1352,-301,0.25
+2100,1100,-320,0.25
diff --git a/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/EngineAT.vmap b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/EngineAT.vmap
new file mode 100644
index 0000000000..414dcd4b36
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/EngineAT.vmap
@@ -0,0 +1,116 @@
+engine speed [1/min],torque [Nm],fuel consumption [g/h]
+560,-149,0
+560,0,1256
+560,200,3197
+560,400,5295
+560,600,7615
+560,800,9375
+560,1000,11239
+560,1180,12869
+600,-148,0
+600,0,1459
+600,200,3358
+600,400,5498
+600,600,8101
+600,800,10014
+600,1000,12071
+600,1200,14201
+600,1282,15304
+800,-149,0
+800,0,1879
+800,200,4286
+800,400,7021
+800,600,10059
+800,800,13086
+800,1000,16015
+800,1200,19239
+800,1400,22426
+800,1600,25483
+800,1791,28905
+1000,-160,0
+1000,0,2865
+1000,200,5963
+1000,400,9198
+1000,600,12354
+1000,800,15965
+1000,1000,19864
+1000,1200,23530
+1000,1400,27202
+1000,1600,31165
+1000,1800,35103
+1000,2000,39360
+1000,2200,44120
+1000,2300,46836
+1200,-179,0
+1200,0,3307
+1200,200,6897
+1200,400,10651
+1200,600,14645
+1200,800,19115
+1200,1000,23677
+1200,1200,28180
+1200,1400,32431
+1200,1600,36698
+1200,1800,41691
+1200,2000,46915
+1200,2200,51783
+1200,2300,54932
+1400,-203,0
+1400,0,4306
+1400,200,8143
+1400,400,12723
+1400,600,17523
+1400,800,22288
+1400,1000,27093
+1400,1200,32536
+1400,1400,37746
+1400,1600,43194
+1400,1800,49453
+1400,2000,55830
+1400,2200,61072
+1400,2300,64377
+1600,-235,0
+1600,0,5209
+1600,200,9669
+1600,400,14838
+1600,600,20127
+1600,800,25894
+1600,1000,31631
+1600,1200,37248
+1600,1400,42826
+1600,1600,49752
+1600,1800,57020
+1600,2000,63914
+1600,2079,66520
+1800,-264,0
+1800,0,6409
+1800,200,11777
+1800,400,17320
+1800,600,23394
+1800,800,30501
+1800,1000,36378
+1800,1200,43079
+1800,1400,49796
+1800,1600,57436
+1800,1800,65157
+1800,1857,67574
+2000,-301,0
+2000,0,9127
+2000,200,14822
+2000,400,20655
+2000,600,27076
+2000,800,34188
+2000,1000,42837
+2000,1200,51018
+2000,1352,56618
+2100,-320,0
+2100,0,10470
+2100,200,16332
+2100,400,22396
+2100,600,28914
+2100,800,35717
+2100,1000,45643
+2100,1100,50653
+500,-500,0
+3000,1500,0
+3000,-500,0
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/GearboxPowerSplit.vgbx b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/GearboxPowerSplit.vgbx
new file mode 100644
index 0000000000..04646e7882
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/GearboxPowerSplit.vgbx
@@ -0,0 +1,56 @@
+{
+  "Header": {
+    "CreatedBy": " ()",
+    "Date": "03.08.2016 14:21:23",
+    "AppVersion": "2.2",
+    "FileVersion": 6
+  },
+  "Body": {
+    "SavedInDeclMode": false,
+    "ModelName": "AT Serial",
+    "Inertia": 0.0,
+    "TracInt": 0.0,
+    "Gears": [
+      {
+        "Ratio": 5.8,
+        "Efficiency": "0.98"
+      },
+      {
+        "Ratio": 1.35,
+        "Efficiency": "0.98",
+        "ShiftPolygon": "ShiftPolygonsAT.vgbs",
+        "FullLoadCurve": "<NOFILE>"
+      },
+      {
+        "Ratio": 1.0,
+        "Efficiency": "0.98",
+        "ShiftPolygon": "ShiftPolygonsAT.vgbs",
+        "FullLoadCurve": "<NOFILE>"
+      },
+      {
+        "Ratio": 0.73,
+        "Efficiency": "0.98",
+        "ShiftPolygon": "ShiftPolygonsAT.vgbs",
+        "FullLoadCurve": "<NOFILE>"
+      },
+    ],
+    "TqReserve": 0.0,
+    "SkipGears": false,
+    "ShiftTime": 0,
+    "EaryShiftUp": false,
+    "StartTqReserve": 0.0,
+    "StartSpeed": 2.0,
+    "StartAcc": 0.6,
+    "GearboxType": "ATPowerSplit",
+    "TorqueConverter": {
+      "Enabled": true,
+      "File": "TorqueConverterPowerSplit.vtcc",
+	  "ShiftPolygon": "ShiftPolygonsAT.vgbs",
+      "RefRPM": 1000.0,
+      "Inertia": 0.0
+    },
+    "DownshiftAferUpshiftDelay": 0.0,
+    "UpshiftAfterDownshiftDelay": 0.0,
+    "UpshiftMinAcceleration": 0.0
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/MeasuredSpeedGearAT.vdri b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/MeasuredSpeedGearAT.vdri
new file mode 100644
index 0000000000..925d3dbda1
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/MeasuredSpeedGearAT.vdri
@@ -0,0 +1,274 @@
+<t>,<v>,<grad>,<gear>,<tc_active>,<Padd>
+1,0.2,-0.3,1,1,4.5
+2,2.3,-0.3,1,1,4.5
+3,6.6,-0.3,1,1,4.5
+4,10.5,-0.3,1,1,4.5
+5,13.9,-0.3,1,1,4.5
+6,17.6,-0.3,1,0,4.5
+7,20.0,-0.3,1,0,4.5
+8,21.2,-0.3,2,0,4.5
+9,21.8,-0.3,3,0,4.5
+10,21.8,-0.3,3,0,4.5
+11,21.6,-0.3,3,0,4.5
+12,21.3,-0.3,3,0,4.5
+13,20.7,-0.3,3,0,4.5
+14,20.3,-0.3,2,0,4.5
+15,20.5,-0.3,2,0,4.5
+16,20.6,-0.3,3,0,4.5
+17,21.0,-0.3,3,0,4.5
+18,20.5,-0.3,3,0,4.5
+19,18.1,-0.3,3,0,4.5
+20,15.1,-0.3,2,0,4.5
+21,11.5,-0.3,1,0,4.5
+22,8.0,-0.3,1,0,4.5
+23,4.2,-0.3,1,1,4.5
+24,0.6,-0.3,1,1,4.5
+25,0.0,-0.3,1,1,4.5
+26,0.0,-0.3,1,1,4.5
+27,0.0,-0.3,1,1,4.5
+28,0.0,-0.3,1,1,4.5
+29,0.0,-0.3,1,1,4.5
+30,0.0,-0.3,1,1,4.5
+31,0.0,-0.3,1,1,4.5
+32,0.0,-0.3,1,1,4.5
+33,0.0,-0.3,1,1,4.5
+34,0.0,-0.3,1,1,4.5
+35,0.0,-0.3,1,1,4.5
+36,0.0,-0.3,1,1,4.5
+37,0.0,-0.3,1,1,4.5
+38,0.0,-0.3,1,1,4.5
+39,0.0,-0.3,1,1,4.5
+40,0.0,-0.3,1,1,4.5
+41,0.0,-0.3,1,1,4.5
+42,0.0,-0.3,1,1,4.5
+43,0.0,-0.3,1,1,4.5
+44,0.0,-0.3,1,1,4.5
+45,1.7,-0.3,1,1,4.5
+46,5.5,-0.3,1,1,4.5
+47,9.3,-0.3,1,1,4.5
+48,12.6,-0.3,1,1,4.5
+49,16.2,-0.3,1,0,4.5
+50,19.5,-0.3,1,0,4.5
+51,22.8,-0.3,2,0,4.5
+52,26.0,-0.3,2,0,4.5
+53,28.6,-0.3,3,0,4.5
+54,30.4,-0.3,3,0,4.5
+55,30.6,-0.3,4,0,4.5
+56,30.5,-0.3,4,0,4.5
+57,30.3,-0.3,4,0,4.5
+58,30.0,-0.3,4,0,4.5
+59,29.9,-0.3,4,0,4.5
+60,29.9,-0.3,4,0,4.5
+61,30.0,-0.3,4,0,4.5
+62,30.0,-0.3,4,0,4.5
+63,30.1,-0.3,4,0,4.5
+64,30.1,-0.3,4,0,4.5
+65,30.0,-0.3,4,0,4.5
+66,29.9,-0.3,4,0,4.5
+67,29.7,-0.3,4,0,4.5
+68,29.1,-0.3,4,0,4.5
+69,27.1,-0.3,4,0,4.5
+70,24.5,-0.3,3,0,4.5
+71,20.9,-0.3,2,0,4.5
+72,17.4,-0.3,1,0,4.5
+73,13.8,-0.3,1,0,4.5
+74,10.3,-0.3,1,0,4.5
+75,7.0,-0.3,1,0,4.5
+76,2.5,-0.3,1,1,4.5
+77,0.0,-0.3,1,1,4.5
+78,0.0,-0.3,1,1,4.5
+79,0.0,-0.3,1,1,4.5
+80,0.0,-0.3,1,1,4.5
+81,0.0,-0.3,1,1,4.5
+82,0.0,-0.3,1,1,4.5
+83,0.0,-0.3,1,1,4.5
+84,0.0,-0.3,1,1,4.5
+85,0.0,-0.3,1,1,4.5
+86,0.0,-0.3,1,1,4.5
+87,0.0,-0.3,1,1,4.5
+88,0.0,-0.3,1,1,4.5
+89,0.0,-0.3,1,1,4.5
+90,0.0,-0.3,1,1,4.5
+91,0.0,-0.3,1,1,4.5
+92,0.0,-0.3,1,1,4.5
+93,0.0,-0.3,1,1,4.5
+94,0.0,-0.3,1,1,4.5
+95,0.0,-0.3,1,1,4.5
+96,0.0,-0.3,1,1,4.5
+97,1.9,-0.3,1,1,4.5
+98,6.0,-0.3,1,1,4.5
+99,9.9,-0.3,1,1,4.5
+100,13.0,-0.3,1,1,4.5
+101,16.8,-0.3,1,0,4.5
+102,20.1,-0.3,1,0,4.5
+103,23.4,-0.3,2,0,4.5
+104,26.5,-0.3,2,0,4.5
+105,29.0,-0.3,3,0,4.5
+106,31.1,-0.3,3,0,4.5
+107,33.4,-0.3,3,0,4.5
+108,35.8,-0.3,3,0,4.5
+109,38.4,-0.3,3,0,4.5
+110,40.5,-0.3,4,0,4.5
+111,40.7,-0.3,5,0,4.5
+112,40.5,-0.3,5,0,4.5
+113,40.4,-0.3,5,0,4.5
+114,40.3,-0.3,5,0,4.5
+115,40.1,-0.3,5,0,4.5
+116,38.9,-0.3,5,0,4.5
+117,36.8,-0.3,4,0,4.5
+118,33.8,-0.3,4,0,4.5
+119,30.0,-0.3,3,0,4.5
+120,26.4,-0.3,2,0,4.5
+121,23.4,-0.3,2,0,4.5
+122,20.1,-0.3,2,0,4.5
+123,16.8,-0.3,1,0,4.5
+124,13.5,-0.3,1,0,4.5
+125,10.1,-0.3,1,0,4.5
+126,7.0,-0.3,1,0,4.5
+127,3.1,-0.3,1,1,4.5
+128,0.2,-0.3,1,1,4.5
+129,0.0,-0.3,1,1,4.5
+130,0.0,-0.3,1,1,4.5
+131,0.0,-0.3,1,1,4.5
+132,0.0,-0.3,1,1,4.5
+133,0.1,0.3,1,1,4.5
+134,1.8,0.3,1,1,4.5
+135,5.8,0.3,1,1,4.5
+136,9.9,0.3,1,1,4.5
+137,13.1,0.3,1,1,4.5
+138,16.7,0.3,1,0,4.5
+139,19.9,0.3,1,0,4.5
+140,21.0,0.3,2,0,4.5
+141,20.9,0.3,3,0,4.5
+142,21.3,0.3,3,0,4.5
+143,21.4,0.3,3,0,4.5
+144,21.3,0.3,3,0,4.5
+145,21.2,0.3,3,0,4.5
+146,20.9,0.3,3,0,4.5
+147,20.7,0.3,3,0,4.5
+148,20.8,0.3,3,0,4.5
+149,20.8,0.3,3,0,4.5
+150,20.6,0.3,3,0,4.5
+151,18.9,0.3,2,0,4.5
+152,16.5,0.3,2,0,4.5
+153,12.8,0.3,1,0,4.5
+154,8.5,0.3,1,0,4.5
+155,3.8,0.3,1,1,4.5
+156,0.2,0.3,1,1,4.5
+157,0.0,0.3,1,1,4.5
+158,0.0,0.3,1,1,4.5
+159,0.0,0.3,1,1,4.5
+160,0.0,0.3,1,1,4.5
+161,0.0,0.3,1,1,4.5
+162,0.0,0.3,1,1,4.5
+163,0.0,0.3,1,1,4.5
+164,0.0,0.3,1,1,4.5
+165,0.0,0.3,1,1,4.5
+166,0.0,0.3,1,1,4.5
+167,0.0,0.3,1,1,4.5
+168,0.0,0.3,1,1,4.5
+169,0.0,0.3,1,1,4.5
+170,0.0,0.3,1,1,4.5
+171,0.0,0.3,1,1,4.5
+172,0.0,0.3,1,1,4.5
+173,0.0,0.3,1,1,4.5
+174,0.0,0.3,1,1,4.5
+175,0.0,0.3,1,1,4.5
+176,0.5,0.3,1,1,4.5
+177,3.8,0.3,1,1,4.5
+178,8.0,0.3,1,1,4.5
+179,11.6,0.3,1,1,4.5
+180,14.9,0.3,1,0,4.5
+181,18.5,0.3,1,0,4.5
+182,21.7,0.3,2,0,4.5
+183,25.0,0.3,2,0,4.5
+184,27.8,0.3,2,0,4.5
+185,29.7,0.3,3,0,4.5
+186,30.6,0.3,4,0,4.5
+187,30.9,0.3,4,0,4.5
+188,30.8,0.3,4,0,4.5
+189,30.4,0.3,4,0,4.5
+190,30.0,0.3,4,0,4.5
+191,29.7,0.3,4,0,4.5
+192,29.5,0.3,4,0,4.5
+193,29.5,0.3,4,0,4.5
+194,29.8,0.3,4,0,4.5
+195,30.2,0.3,4,0,4.5
+196,30.4,0.3,4,0,4.5
+197,30.5,0.3,4,0,4.5
+198,30.5,0.3,4,0,4.5
+199,30.1,0.3,4,0,4.5
+200,28.1,0.3,4,0,4.5
+201,25.2,0.3,3,0,4.5
+202,21.4,0.3,2,0,4.5
+203,17.8,0.3,1,0,4.5
+204,15.0,0.3,1,0,4.5
+205,11.7,0.3,1,0,4.5
+206,9.2,0.3,1,0,4.5
+207,5.4,0.3,1,1,4.5
+208,0.8,0.3,1,1,4.5
+209,0.0,0.3,1,1,4.5
+210,0.0,0.3,1,1,4.5
+211,0.0,0.3,1,1,4.5
+212,0.0,0.3,1,1,4.5
+213,0.0,0.3,1,1,4.5
+214,0.0,0.3,1,1,4.5
+215,0.0,0.3,1,1,4.5
+216,0.0,0.3,1,1,4.5
+217,0.0,0.3,1,1,4.5
+218,0.0,0.3,1,1,4.5
+219,0.0,0.3,1,1,4.5
+220,0.0,0.3,1,1,4.5
+221,0.0,0.3,1,1,4.5
+222,0.0,0.3,1,1,4.5
+223,0.0,0.3,1,1,4.5
+224,0.0,0.3,1,1,4.5
+225,0.0,0.3,1,1,4.5
+226,0.0,0.3,1,1,4.5
+227,0.0,0.3,1,1,4.5
+228,0.0,0.3,1,1,4.5
+229,0.1,0.3,1,1,4.5
+230,2.1,0.3,1,1,4.5
+231,6.0,0.3,1,1,4.5
+232,9.9,0.3,1,1,4.5
+233,13.0,0.3,1,1,4.5
+234,16.5,0.3,1,0,4.5
+235,19.8,0.3,1,0,4.5
+236,22.9,0.3,2,0,4.5
+237,26.0,0.3,2,0,4.5
+238,28.6,0.3,3,0,4.5
+239,30.4,0.3,3,0,4.5
+240,32.4,0.3,3,0,4.5
+241,34.4,0.3,3,0,4.5
+242,36.6,0.3,3,0,4.5
+243,38.9,0.3,3,0,4.5
+244,40.3,0.3,4,0,4.5
+245,40.6,0.3,5,0,4.5
+246,40.3,0.3,5,0,4.5
+247,40.1,0.3,5,0,4.5
+248,39.7,0.3,5,0,4.5
+249,38.6,0.3,5,0,4.5
+250,36.0,0.3,5,0,4.5
+251,32.8,0.3,4,0,4.5
+252,28.9,0.3,3,0,4.5
+253,25.1,0.3,2,0,4.5
+254,21.8,0.3,2,0,4.5
+255,18.3,0.3,1,0,4.5
+256,15.5,0.3,1,0,4.5
+257,13.2,0.3,1,0,4.5
+258,10.9,0.3,1,0,4.5
+259,9.0,0.3,1,0,4.5
+260,6.4,0.3,1,1,4.5
+261,3.6,0.3,1,1,4.5
+262,0.7,0.3,1,1,4.5
+263,0.0,0.3,1,1,4.5
+264,0.0,0.3,1,1,4.5
+265,0.0,0.3,1,1,4.5
+266,0.0,0.3,1,1,4.5
+267,0.0,0.3,1,1,4.5
+268,0.0,0.3,1,1,4.5
+269,0.0,0.3,1,1,4.5
+270,0.0,0.3,1,1,4.5
+271,0.0,0.3,1,1,4.5
+272,0.0,0.3,1,1,4.5
+273,0.0,0.3,1,1,4.5
diff --git a/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/MeasuredSpeedGearAT.vecto b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/MeasuredSpeedGearAT.vecto
new file mode 100644
index 0000000000..bb4b1949e8
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/MeasuredSpeedGearAT.vecto
@@ -0,0 +1,44 @@
+{
+  "Header": {
+    "CreatedBy": "Raphael Luz IVT TU-Graz (f513c787-07a6-4a67-8bd9-81abd760bcfc)",
+    "Date": "2016-08-02 14:42:10",
+    "AppVersion": "2.2",
+    "FileVersion": 2
+  },
+  "Body": {
+    "SavedInDeclMode": false,
+    "VehicleFile": "VehicleAT.vveh",
+    "EngineFile": "EngineAT.veng",
+    "GearboxFile": "GearboxPowerSplit.vgbx",
+    "Cycles": [
+      "MeasuredSpeedGearAT.vdri"
+    ],
+    "AuxiliaryAssembly": "CLASSIC",
+    "AuxiliaryVersion": "CLASSIC",
+    "AdvancedAuxiliaryFilePath": "",
+    "VACC": "Driver.vacc",
+    "EngineOnlyMode": false,
+    "StartStop": {
+      "Enabled": false,
+      "MaxSpeed": 5.0,
+      "MinTime": 5.0,
+      "Delay": 0
+    },
+    "LAC": {
+      "Enabled": false,
+      "Dec": -0.5,
+      "MinSpeed": 50.0,
+      "PreviewDistanceFactor": 10.0,
+      "DF_offset": 2.5,
+      "DF_scaling": 1.5,
+      "DF_targetSpeedLookup": "",
+      "Df_velocityDropLookup": ""
+    },
+    "OverSpeedEcoRoll": {
+      "Mode": "Off",
+      "MinSpeed": 0.0,
+      "OverSpeed": 0.0,
+      "UnderSpeed": 0.0
+    }
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/ShiftPolygonsAT.vgbs b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/ShiftPolygonsAT.vgbs
new file mode 100644
index 0000000000..f56e75f0b8
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/ShiftPolygonsAT.vgbs
@@ -0,0 +1,5 @@
+c M,nDown,nUp
+# [Nm],[rpm],[rpm]
+-500, 700, 800
+   0, 700, 800
+2800, 700, 800
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/TorqueConverterPowerSplit.vtcc b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/TorqueConverterPowerSplit.vtcc
new file mode 100644
index 0000000000..7a208e8924
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/TorqueConverterPowerSplit.vtcc
@@ -0,0 +1,18 @@
+Speed Ratio, Torque Ratio,MP1000
+0.0,  4.5, 700
+0.1,  3.5, 640
+0.2,  2.7, 560
+0.3,  2.2, 460
+0.4,  1.6, 350
+0.5,  1.2, 250
+0.6,  0.9, 160
+0.74, 0.9,   1
+0.81,1.000,-40.34
+0.91,1.000,-80.34
+1.02,1.000,-136.11
+1.16,1.000,-216.52
+1.36,1.000,-335.19
+1.63,1.000,-528.77
+2.04,1.000,-883.40
+3.26,1.000,-2462.17
+8.15,1.000,-16540.98
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/VehicleAT.vveh b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/VehicleAT.vveh
new file mode 100644
index 0000000000..2da3ae2b59
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/MeasuredSpeed/VehicleAT.vveh
@@ -0,0 +1,55 @@
+{
+  "Header": {
+    "CreatedBy": "Raphael Luz IVT TU-Graz (f513c787-07a6-4a67-8bd9-81abd760bcfc)",
+    "Date": "2016-08-02 14:08:15",
+    "AppVersion": "2.2",
+    "FileVersion": 7
+  },
+  "Body": {
+    "SavedInDeclMode": false,
+    "VehCat": "Citybus",
+    "CurbWeight": 17000.0,
+    "CurbWeightExtra": 0.0,
+    "Loading": 4800.0,
+    "MassMax": 22.0,
+    "CdA": 3.25,
+    "rdyn": 470.0,
+    "Rim": "-",
+    "CdCorrMode": "Off",
+    "CdCorrFile": "<NOFILE>",
+    "Retarder": {
+      "Type": "None",
+      "Ratio": 1.0,
+      "File": "<NOFILE>"
+    },
+    "AxleConfig": {
+      "Type": "6x2",
+      "Axles": [
+        {
+          "Inertia": 11.9,
+          "Wheels": "275/70 R22.5",
+          "AxleWeightShare": 0.25,
+          "TwinTyres": false,
+          "RRCISO": 0.0058,
+          "FzISO": 26265.0
+        },
+        {
+          "Inertia": 11.9,
+          "Wheels": "275/70 R22.5",
+          "AxleWeightShare": 0.28,
+          "TwinTyres": true,
+          "RRCISO": 0.0058,
+          "FzISO": 26265.0
+        },
+        {
+          "Inertia": 11.9,
+          "Wheels": "275/70 R22.5",
+          "AxleWeightShare": 0.47,
+          "TwinTyres": true,
+          "RRCISO": 0.0058,
+          "FzISO": 26265.0
+        }
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 7b95cc9248..900d584e1d 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -1109,6 +1109,15 @@
     <None Include="TestData\MeasuredSpeed\Engine.veng">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\MeasuredSpeed\EngineAT.veng">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="TestData\MeasuredSpeed\EngineAT.vfld">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="TestData\MeasuredSpeed\EngineAT.vmap">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\MeasuredSpeed\FuelConsumption.vmap">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
@@ -1118,6 +1127,9 @@
     <None Include="TestData\MeasuredSpeed\Gearbox.vgbx">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\MeasuredSpeed\GearboxPowerSplit.vgbx">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\MeasuredSpeed\Gear_Axle_loss.vtlm">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
@@ -1142,6 +1154,12 @@
     <None Include="TestData\MeasuredSpeed\MeasuredSpeed.vecto">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\MeasuredSpeed\MeasuredSpeedGearAT.vdri">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="TestData\MeasuredSpeed\MeasuredSpeedGearAT.vecto">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\MeasuredSpeed\MeasuredSpeedGearAux.vecto">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
@@ -1262,6 +1280,12 @@
     <None Include="TestData\MeasuredSpeed\ShiftPolygons.vgbs">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\MeasuredSpeed\ShiftPolygonsAT.vgbs">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="TestData\MeasuredSpeed\TorqueConverterPowerSplit.vtcc">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\MeasuredSpeed\VairBeta.vcdb">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
@@ -1271,6 +1295,9 @@
     <None Include="TestData\MeasuredSpeed\Vehicle.vveh">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\MeasuredSpeed\VehicleAT.vveh">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\MeasuredSpeed\VehicleVair.vveh">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
-- 
GitLab