From e5e902f3b658c2b54010a21c470427b5e5caee09 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Tue, 27 Sep 2016 16:03:08 +0200
Subject: [PATCH] more clear implementation of wheels class (confusion about
 dynamic tyre radius and wheel diameter), extending testcase

---
 .../DataObjectAdapter/DeclarationDataAdapter.cs       |  2 +-
 .../VectoCore/Models/Declaration/DeclarationData.cs   |  6 ------
 VectoCore/VectoCore/Models/Declaration/Wheels.cs      | 10 ++++++++--
 .../Models/Declaration/DeclarationDataTest.cs         | 11 ++++++-----
 4 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
index 783e7af47f..a4820e35cd 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
@@ -97,7 +97,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			retVal.CurbWeight += mission.BodyCurbWeight + mission.TrailerCurbWeight;
 			retVal.Loading = loading;
 			retVal.DynamicTyreRadius =
-				DeclarationData.DynamicTyreRadius(data.Axles[DeclarationData.PoweredAxle()].Wheels); // TODO!
+				DeclarationData.Wheels.Lookup(data.Axles[DeclarationData.PoweredAxle()].Wheels).DynamicTyreRadius; // TODO!
 
 			var aerodynamicDragArea = data.AirDragArea + mission.DeltaCdA;
 
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 1fd9e7bbf9..a43efdd042 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -89,12 +89,6 @@ namespace TUGraz.VectoCore.Models.Declaration
 			get { return Instance()._electricSystem ?? (Instance()._electricSystem = new ElectricSystem()); }
 		}
 
-		public static Meter DynamicTyreRadius(string wheels)
-		{
-			var wheelsEntry = Wheels.Lookup(wheels.RemoveWhitespace());
-			return wheelsEntry.DynamicTyreRadius * wheelsEntry.CircumferenceFactor / (2 * Math.PI);
-		}
-
 		/// <summary>
 		/// Formula for calculating the payload for a given gross vehicle weight.
 		/// (so called "pc-formula", Whitebook Apr 2016, Part 1, p.187)
diff --git a/VectoCore/VectoCore/Models/Declaration/Wheels.cs b/VectoCore/VectoCore/Models/Declaration/Wheels.cs
index d6d82850b5..8ca627c872 100644
--- a/VectoCore/VectoCore/Models/Declaration/Wheels.cs
+++ b/VectoCore/VectoCore/Models/Declaration/Wheels.cs
@@ -29,6 +29,7 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
+using System;
 using System.Collections.Generic;
 using System.Data;
 using System.Linq;
@@ -62,7 +63,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 				.Select(row => new Entry {
 					WheelType = row.Field<string>(0).RemoveWhitespace(),
 					Inertia = row.ParseDouble("inertia").SI<KilogramSquareMeter>(),
-					DynamicTyreRadius = row.ParseDouble("d").SI().Milli.Meter.Cast<Meter>(),
+					WheelsDiameter = row.ParseDouble("d").SI().Milli.Meter.Cast<Meter>(),
 					CircumferenceFactor = row.ParseDouble("f")
 				}).ToDictionary(e => e.WheelType);
 			_dimensions = table.Rows.Cast<DataRow>().Select(row => row.Field<string>(0)).ToArray();
@@ -72,8 +73,13 @@ namespace TUGraz.VectoCore.Models.Declaration
 		{
 			public string WheelType;
 			public KilogramSquareMeter Inertia;
-			public Meter DynamicTyreRadius;
+			public Meter WheelsDiameter;
 			public double CircumferenceFactor;
+
+			public Meter DynamicTyreRadius
+			{
+				get { return WheelsDiameter * CircumferenceFactor / (2 * Math.PI); }
+			}
 		}
 
 		public string[] GetWheelsDimensions()
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs
index 8b6df9fe57..0bdaec17b2 100644
--- a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs
@@ -60,16 +60,17 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 			MissionType.Construction,
 		};
 
-		[TestCase("285/60 R22.5", 10.6, 0.914, 3.03),
-		TestCase("285/70 R19.5", 7.9, 0.895, 3.05),
-		TestCase("395/85 R20", 27.9, 1.18, 3.05)]
-		public void WheelDataTest(string wheels, double inertia, double dynamicRadius, double circumferenceFactor)
+		[TestCase("285/60 R22.5", 10.6, 0.914, 3.03, 0.440766),
+		TestCase("285/70 R19.5", 7.9, 0.895, 3.05, 0.434453),
+		TestCase("395/85 R20", 27.9, 1.18, 3.05, 0.572798)]
+		public void WheelDataTest(string wheels, double inertia, double wheelsDiameter, double circumferenceFactor, double expectedDynamicRadius)
 		{
 			var tmp = DeclarationData.Wheels.Lookup(wheels);
 
 			AssertHelper.AreRelativeEqual(inertia, tmp.Inertia);
-			AssertHelper.AreRelativeEqual(dynamicRadius, tmp.DynamicTyreRadius);
+			AssertHelper.AreRelativeEqual(wheelsDiameter, tmp.WheelsDiameter);
 			AssertHelper.AreRelativeEqual(circumferenceFactor, tmp.CircumferenceFactor);
+			Assert.AreEqual(expectedDynamicRadius, tmp.DynamicTyreRadius.Value(), 1e-6);
 		}
 
 		[
-- 
GitLab