From e061ce526c9e3cb5337f08507c93b16616b11f7d Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Thu, 1 Feb 2018 09:19:53 +0100
Subject: [PATCH] corrected retarder testcases: retarder losses are higher when
 retarder ratio > 1!

---
 .../SimulationComponent/RetarderTest.cs       | 77 +++++++++++--------
 1 file changed, 45 insertions(+), 32 deletions(-)

diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/RetarderTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/RetarderTest.cs
index 17da8c5f8f..32354458e9 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponent/RetarderTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/RetarderTest.cs
@@ -29,6 +29,7 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
+using System.IO;
 using NUnit.Framework;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.Models;
@@ -47,8 +48,16 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 		private const string RetarderLossMapFile = @"TestData\Components\Retarder.vrlm";
 		private const double Delta = 0.0001;
 
-		[TestCase]
-		public void RetarderBasicTest()
+		[OneTimeSetUp]
+		public void RunBeforeAnyTests()
+		{
+			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+		}
+
+		[TestCase(0, 10, 10.002),
+		 TestCase(100, 1000, 12)
+			]
+		public void RetarderBasicTest(double cardanTorque, double cardanSpeed, double expectedRetarderLoss)
 		{
 			var vehicle = new VehicleContainer(ExecutionMode.Declaration);
 			var retarderData = RetarderLossMapReader.ReadFromFile(RetarderLossMapFile);
@@ -63,19 +72,34 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var dt = 0.SI<Second>();
 
 			// --------
-			outPort.Initialize(0.SI<NewtonMeter>(), 10.RPMtoRad());
-			outPort.Request(absTime, dt, 0.SI<NewtonMeter>(), 10.RPMtoRad());
+			outPort.Initialize(cardanTorque.SI<NewtonMeter>(), cardanSpeed.RPMtoRad());
+			outPort.Request(absTime, dt, cardanTorque.SI<NewtonMeter>(), cardanSpeed.RPMtoRad());
 
-			Assert.AreEqual(10.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
-			Assert.AreEqual(10.002, nextRequest.Torque.Value(), Delta);
+			Assert.AreEqual(cardanSpeed.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
+			Assert.AreEqual(cardanTorque + expectedRetarderLoss, nextRequest.Torque.Value(), Delta);
 
-			// --------
-			outPort.Initialize(100.SI<NewtonMeter>(), 1000.RPMtoRad());
-			outPort.Request(absTime, dt, 100.SI<NewtonMeter>(), 1000.RPMtoRad());
+			//// --------
+			//outPort.Initialize(100.SI<NewtonMeter>(), 1000.RPMtoRad());
+			//outPort.Request(absTime, dt, 100.SI<NewtonMeter>(), 1000.RPMtoRad());
+
+			//Assert.AreEqual(1000.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
+			//Assert.AreEqual(112, nextRequest.Torque.Value(), Delta);
+		}
+
+		[TestCase]
+		public void RetarderSubsequentRequestTest()
+		{
+			var vehicle = new VehicleContainer(ExecutionMode.Declaration);
+			var retarderData = RetarderLossMapReader.ReadFromFile(RetarderLossMapFile);
+			var retarder = new Retarder(vehicle, retarderData, 1.0);
+
+			var nextRequest = new MockTnOutPort();
 
-			Assert.AreEqual(1000.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
-			Assert.AreEqual(112, nextRequest.Torque.Value(), Delta);
+			retarder.InPort().Connect(nextRequest);
+			var outPort = retarder.OutPort();
 
+			var absTime = 0.SI<Second>();
+			var dt = 0.SI<Second>();
 			// --------
 			outPort.Initialize(50.SI<NewtonMeter>(), 650.RPMtoRad());
 			outPort.Request(absTime, dt, 50.SI<NewtonMeter>(), 1550.RPMtoRad());
@@ -92,8 +116,11 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			Assert.AreEqual(50 + 12, nextRequest.Torque.Value(), Delta);
 		}
 
-		[TestCase]
-		public void RetarderRatioTest()
+		[TestCase(0, 10, 20.008),
+		 TestCase(100, 1000, 36),
+		 TestCase(50, 1550, 55.56) // extrapolated
+		]
+		public void RetarderRatioTest(double cardanTorque, double cardanSpeed, double expectedRetarderLoss)
 		{
 			var vehicle = new VehicleContainer(ExecutionMode.Engineering);
 			var retarderData = RetarderLossMapReader.ReadFromFile(RetarderLossMapFile);
@@ -107,26 +134,12 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var absTime = 0.SI<Second>();
 			var dt = 0.SI<Second>();
 
-			// --------
-			outPort.Initialize(0.SI<NewtonMeter>(), 10.RPMtoRad());
-			outPort.Request(absTime, dt, 0.SI<NewtonMeter>(), 10.RPMtoRad());
-
-			Assert.AreEqual(10.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
-			Assert.AreEqual(5.002, nextRequest.Torque.Value(), Delta);
-
-			// --------
-			outPort.Initialize(100.SI<NewtonMeter>(), 1000.RPMtoRad());
-			outPort.Request(absTime, dt, 100.SI<NewtonMeter>(), 1000.RPMtoRad());
+			outPort.Initialize(cardanTorque.SI<NewtonMeter>(), cardanSpeed.RPMtoRad());
+			outPort.Request(absTime, dt, cardanTorque.SI<NewtonMeter>(), cardanSpeed.RPMtoRad());
 
-			Assert.AreEqual(1000.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
-			Assert.AreEqual(109, nextRequest.Torque.Value(), Delta);
+			Assert.AreEqual(cardanSpeed.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
+			Assert.AreEqual(cardanTorque + expectedRetarderLoss, nextRequest.Torque.Value(), Delta);
 
-			// --------
-			outPort.Initialize(50.SI<NewtonMeter>(), 1550.RPMtoRad());
-			outPort.Request(absTime, dt, 50.SI<NewtonMeter>(), 1550.RPMtoRad());
-
-			Assert.AreEqual(1550.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
-			Assert.AreEqual(50 + 13.89, nextRequest.Torque.Value(), Delta); // extrapolated
 		}
 
 		[TestCase]
@@ -177,7 +190,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			outPort.Request(absTime, dt, 100.SI<NewtonMeter>(), 125.RPMtoRad());
 
 			Assert.AreEqual(125.RPMtoRad().Value(), nextRequest.AngularVelocity.Value(), Delta);
-			Assert.AreEqual(100 + 5.065, nextRequest.Torque.Value(), Delta);
+			Assert.AreEqual(100 + 20.26, nextRequest.Torque.Value(), Delta);
 		}
 	}
 }
\ No newline at end of file
-- 
GitLab