From 825f27bedf88d3c01bb15eecb40cbdee8a28a7ae Mon Sep 17 00:00:00 2001
From: Michael Krisper <michael.krisper@tugraz.at>
Date: Mon, 18 Jul 2016 17:05:31 +0200
Subject: [PATCH] added test for angular gear losses

---
 .../Models/SimulationComponent/GearboxTest.cs | 63 +++++++++++++------
 1 file changed, 44 insertions(+), 19 deletions(-)

diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
index 1d7d580504..8a0851f9cb 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
@@ -72,6 +72,8 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 		public const string AxleGearValidRangeDataFile = @"TestData\Components\AxleGearValidRange.vgbx";
 		public const string AxleGearInvalidRangeDataFile = @"TestData\Components\AxleGearInvalidRange.vgbx";
 
+		public const string AngularGearLossMap = @"TestData\Components\AngleGear.vtlm";
+
 		private static GearboxData CreateGearboxData()
 		{
 			var ratios = new[] { 6.38, 4.63, 3.44, 2.59, 1.86, 1.35, 1, 0.76 };
@@ -98,8 +100,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			return ((60 * v) / (2 * r * Math.PI / 1000)).RPMtoRad();
 		}
 
-		[Test,
-		TestCase(520, 20.320, 279698.4, 9401.44062)]
+		[TestCase(520, 20.320, 279698.4, 9401.44062)]
 		public void AxleGearTest(double rdyn, double speed, double power, double expectedLoss)
 		{
 			var vehicle = new VehicleContainer(ExecutionMode.Engineering);
@@ -145,8 +146,39 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			Assert.AreEqual(1, errors.Count);
 		}
 
-		[Test,
-		TestCase(@"TestData\Components\24t Coach LessThanTwoGears.vgbx")]
+		[TestCase(520, 20.320, 279698.4, 9401.44062, 3.240355)]
+		public void AngularGear_Losses(double rdyn, double speed, double power, double expectedLoss, double ratio)
+		{
+			// convert to SI
+			var angSpeed = SpeedToAngularSpeed(speed, rdyn);
+			var PvD = power.SI<Watt>();
+			var torqueToWheels = PvD / angSpeed;
+			var loss = expectedLoss.SI<Watt>();
+
+			// setup components
+			var vehicle = new VehicleContainer(ExecutionMode.Engineering);
+			var angularGearData = new AngularGearData {
+				AngularGear = new TransmissionData {
+					LossMap = TransmissionLossMap.Create(VectoCSVFile.Read(AngularGearLossMap), ratio, "AngularGear"),
+					Ratio = ratio
+				}
+			};
+			var mockPort = new MockTnOutPort();
+			var angularGear = new AngularGear(vehicle, angularGearData);
+			angularGear.InPort().Connect(mockPort);
+
+			// issue request
+			angularGear.Request(0.SI<Second>(), 1.SI<Second>(), torqueToWheels, angSpeed);
+
+			// test
+			AssertHelper.AreRelativeEqual(angSpeed * angularGearData.AngularGear.Ratio, mockPort.AngularVelocity,
+				"AngularVelocity Engine Side");
+
+			AssertHelper.AreRelativeEqual((PvD + loss) / (angSpeed * angularGearData.AngularGear.Ratio), mockPort.Torque,
+				"Torque Engine Side");
+		}
+
+		[TestCase(@"TestData\Components\24t Coach LessThanTwoGears.vgbx")]
 		public void Gearbox_LessThanTwoGearsException(string wrongFile)
 		{
 			AssertHelper.Exception<VectoSimulationException>(
@@ -154,8 +186,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 				"At least one Gear-Entry must be defined in Gearbox!");
 		}
 
-		[Test,
-		TestCase(GearboxDataFile, EngineDataFile, 6.38, 2300, 1600, 2356.2326),
+		[TestCase(GearboxDataFile, EngineDataFile, 6.38, 2300, 1600, 2356.2326),
 		TestCase(GearboxDataFile, EngineDataFile, 6.38, -1300, 1000, -1267.0686)]
 		public void Gearbox_LossMapInterpolation(string gbxFile, string engineFile, double ratio, double torque,
 			double inAngularSpeed, double expectedTorque)
@@ -188,8 +219,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			gearbox.CommitSimulationStep(modData);
 		}
 
-		[Test,
-		TestCase(GearboxDataFile, EngineDataFile, 6.38, 2600, 1600, 2658.10267),
+		[TestCase(GearboxDataFile, EngineDataFile, 6.38, 2600, 1600, 2658.10267),
 		TestCase(GearboxDataFile, EngineDataFile, 6.38, -2600, 1000, -2543.4076)]
 		public void Gearbox_LossMapExtrapolation_Declaration(string gbxFile, string engineFile, double ratio, double torque,
 			double inAngularSpeed, double expectedTorque)
@@ -222,8 +252,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			AssertHelper.Exception<VectoException>(() => { gearbox.CommitSimulationStep(modData); });
 		}
 
-		[Test,
-		TestCase(GearboxDataFile, EngineDataFile, 6.38, 2600, 1600, 2658.10267),
+		[TestCase(GearboxDataFile, EngineDataFile, 6.38, 2600, 1600, 2658.10267),
 		TestCase(GearboxDataFile, EngineDataFile, 6.38, -2600, 1000, -2543.4076)]
 		public void Gearbox_LossMapExtrapolation_Engineering(string gbxFile, string engineFile, double ratio, double torque,
 			double inAngularSpeed, double expectedTorque)
@@ -256,8 +285,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			gearbox.CommitSimulationStep(modData);
 		}
 
-		[Test,
-		TestCase(GearboxDataFile, EngineDataFile, 6.38, 2600, 1600, true, 2658.10267),
+		[TestCase(GearboxDataFile, EngineDataFile, 6.38, 2600, 1600, true, 2658.10267),
 		TestCase(GearboxDataFile, EngineDataFile, 6.38, -2500, 1000, false, -2443.5392),
 		TestCase(GearboxDataFile, EngineDataFile, 6.38, -1000, 1000, false, -972.95098)]
 		public void Gearbox_LossMapExtrapolation_DryRun(string gbxFile, string engineFile, double ratio, double torque,
@@ -306,7 +334,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 
 			gearbox.Initialize(0.SI<NewtonMeter>(), 0.RPMtoRad());
 
-			var ratio = 6.38;
+			const double ratio = 6.38;
 
 			var expected = new[] {
 				new { t = 2500, n = 900 },
@@ -335,8 +363,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			}
 		}
 
-		[Test,
-		TestCase(1, -1000, 600, 28.096, typeof(ResponseSuccess)),
+		[TestCase(1, -1000, 600, 28.096, typeof(ResponseSuccess)),
 		TestCase(2, -1000, 600, 28.096, typeof(ResponseSuccess)),
 		TestCase(7, -1000, 600, 13.096, typeof(ResponseSuccess)),
 		TestCase(7, 850, 600, 12.346, typeof(ResponseSuccess)),
@@ -394,8 +421,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			}
 		}
 
-		[Test,
-		TestCase(8, 7, 1500, 750, typeof(ResponseGearShift)),
+		[TestCase(8, 7, 1500, 750, typeof(ResponseGearShift)),
 		TestCase(7, 6, 1500, 750, typeof(ResponseGearShift)),
 		TestCase(6, 5, 1500, 750, typeof(ResponseGearShift)),
 		TestCase(5, 4, 1500, 750, typeof(ResponseGearShift)),
@@ -439,8 +465,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			Assert.AreEqual((uint)newGear, container.Gear);
 		}
 
-		[Test,
-		TestCase(7, 8, 1000, 1400, typeof(ResponseGearShift)),
+		[TestCase(7, 8, 1000, 1400, typeof(ResponseGearShift)),
 		TestCase(6, 7, 1000, 1400, typeof(ResponseGearShift)),
 		TestCase(5, 6, 1000, 1400, typeof(ResponseGearShift)),
 		TestCase(4, 5, 1000, 1400, typeof(ResponseGearShift)),
-- 
GitLab