From 84490828fb4f792c0d47f025523167b8d7dd09b6 Mon Sep 17 00:00:00 2001
From: Michael Krisper <michael.krisper@tugraz.at>
Date: Mon, 4 May 2015 13:37:23 +0200
Subject: [PATCH] V79 structurally finished. Still some changes needed (which
 fields in engineonly mode, correct calculation of the 3second average in sum
 file).

---
 .../Simulation/Data/ISummaryDataWriter.cs     | 11 ++++++
 .../Simulation/Data/SummaryFileWriter.cs      |  6 ++--
 .../Simulation/Impl/SimulatorFactory.cs       |  4 ++-
 .../Data/Engine/FullLoadCurve.cs              |  2 +-
 .../Models/SimulationComponent/Impl/Clutch.cs |  2 +-
 .../Impl/CombustionEngine.cs                  |  2 +-
 .../Models/Simulation/DrivingCycleTests.cs    |  4 +--
 .../Models/Simulation/SimulationTests.cs      | 11 +++---
 .../CombustionEngineTest.cs                   |  4 +--
 .../FullLoadCurveTest.cs                      | 34 +++++++++----------
 .../Utils/DoubleExtensionMethodTest.cs        |  6 ++--
 VectoCoreTest/Utils/SITest.cs                 |  4 +--
 12 files changed, 49 insertions(+), 41 deletions(-)

diff --git a/VectoCore/Models/Simulation/Data/ISummaryDataWriter.cs b/VectoCore/Models/Simulation/Data/ISummaryDataWriter.cs
index a86af5ca9b..a9db518834 100644
--- a/VectoCore/Models/Simulation/Data/ISummaryDataWriter.cs
+++ b/VectoCore/Models/Simulation/Data/ISummaryDataWriter.cs
@@ -2,7 +2,18 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 {
 	public interface ISummaryDataWriter
 	{
+		/// <summary>
+		/// Writes a single sum entry for the given modaldata of the job.
+		/// </summary>
+		/// <param name="data">The modal data.</param>
+		/// <param name="jobFileName">Name of the job file.</param>
+		/// <param name="jobName">Name of the job.</param>
+		/// <param name="cycleFileName">Name of the cycle file.</param>
 		void Write(IModalDataWriter data, string jobFileName, string jobName, string cycleFileName);
+
+		/// <summary>
+		/// Writes the data to the sum file.
+		/// </summary>
 		void Finish();
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/Models/Simulation/Data/SummaryFileWriter.cs b/VectoCore/Models/Simulation/Data/SummaryFileWriter.cs
index 234677871d..639963b616 100644
--- a/VectoCore/Models/Simulation/Data/SummaryFileWriter.cs
+++ b/VectoCore/Models/Simulation/Data/SummaryFileWriter.cs
@@ -1,5 +1,4 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
 using System.Data;
 using System.Linq;
 using TUGraz.VectoCore.Utils;
@@ -133,10 +132,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 				}
 			}
 
-
 			row["pStop [%]"] = 100.0 * timeSum / (double)data.Compute("Max(time)", "");
 
-			_table.ImportRow(row);
+			_table.Rows.Add(row);
 		}
 
 		public void Finish()
diff --git a/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
index b93e57be16..885dfd3710 100644
--- a/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
+++ b/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
@@ -1,4 +1,5 @@
 using System.Collections.Generic;
+using System.IO;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.SimulationComponent;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
@@ -29,7 +30,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			for (var i = 0; i < data.Cycles.Count; i++) {
 				var cycleFile = data.Cycles[i];
 				var jobName = string.Format("{0}-{1}", jobNumber, i);
-				var modFileName = string.Format("{0}_{1}.vmod", data.JobFileName, cycleFile);
+				var modFileName = string.Format("{0}_{1}.vmod", Path.GetFileNameWithoutExtension(data.JobFileName),
+					Path.GetFileNameWithoutExtension(cycleFile));
 				_dataWriter = new ModalDataWriter(modFileName);
 
 				var builder = new SimulatorBuilder(_dataWriter, sumWriter, data.JobFileName, jobName, cycleFile, data.IsEngineOnly);
diff --git a/VectoCore/Models/SimulationComponent/Data/Engine/FullLoadCurve.cs b/VectoCore/Models/SimulationComponent/Data/Engine/FullLoadCurve.cs
index 0704829ed5..0d8ceaeca3 100644
--- a/VectoCore/Models/SimulationComponent/Data/Engine/FullLoadCurve.cs
+++ b/VectoCore/Models/SimulationComponent/Data/Engine/FullLoadCurve.cs
@@ -198,7 +198,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
 			// y = kx + d
 			var k = (p2.TorqueFullLoad - p1.TorqueFullLoad) / (p2.EngineSpeed - p1.EngineSpeed);
 			var d = p2.TorqueFullLoad - k * p2.EngineSpeed;
-			if (k == 0.0.SI()) {
+			if (k == 0.SI()) {
 				return new Tuple<PerSecond, Watt>(p2.EngineSpeed, Formulas.TorqueToPower(p2.TorqueFullLoad, p2.EngineSpeed));
 			}
 			var engineSpeedMaxPower = (-1 * d / (2 * k)).Cast<PerSecond>();
diff --git a/VectoCore/Models/SimulationComponent/Impl/Clutch.cs b/VectoCore/Models/SimulationComponent/Impl/Clutch.cs
index 447b04450f..5c378cf3cd 100644
--- a/VectoCore/Models/SimulationComponent/Impl/Clutch.cs
+++ b/VectoCore/Models/SimulationComponent/Impl/Clutch.cs
@@ -60,7 +60,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			if (Cockpit.Gear() == 0) {
 				_clutchState = ClutchState.ClutchOpened;
 				engineSpeedIn = _idleSpeed;
-				torqueIn = 0.0.SI<NewtonMeter>();
+				torqueIn = 0.SI<NewtonMeter>();
 			} else {
 				var engineSpeedNorm = (angularVelocity - _idleSpeed) /
 									(_ratedSpeed - _idleSpeed);
diff --git a/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs b/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
index 26636b8f36..175a63a387 100644
--- a/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
+++ b/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
@@ -266,7 +266,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 		protected Watt InertiaPowerLoss(NewtonMeter torque, PerSecond angularVelocity)
 		{
 			var deltaEngineSpeed = angularVelocity - _previousState.EngineSpeed;
-			var avgEngineSpeed = (_previousState.EngineSpeed + angularVelocity) / 2.0.SI<Second>();
+			var avgEngineSpeed = (_previousState.EngineSpeed + angularVelocity) / 2.SI<Second>();
 			var result = _data.Inertia * deltaEngineSpeed * avgEngineSpeed;
 			return result.Cast<Watt>();
 		}
diff --git a/VectoCoreTest/Models/Simulation/DrivingCycleTests.cs b/VectoCoreTest/Models/Simulation/DrivingCycleTests.cs
index d9ca397766..d92b22c296 100644
--- a/VectoCoreTest/Models/Simulation/DrivingCycleTests.cs
+++ b/VectoCoreTest/Models/Simulation/DrivingCycleTests.cs
@@ -41,7 +41,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 
 			Assert.AreEqual(absTime, outPort.AbsTime);
 			Assert.AreEqual(dt, outPort.Dt);
-			Assert.AreEqual(600.0.RPMtoRad(), outPort.AngularVelocity);
+			Assert.AreEqual(600.RPMtoRad(), outPort.AngularVelocity);
 			Assert.AreEqual(0.SI<NewtonMeter>(), outPort.Torque);
 		}
 
@@ -68,7 +68,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 
 			Assert.AreEqual(absTime, outPort.AbsTime);
 			Assert.AreEqual(dt, outPort.Dt);
-			Assert.AreEqual(0.0.SI<MeterPerSecond>(), outPort.Velocity);
+			Assert.AreEqual(0.SI<MeterPerSecond>(), outPort.Velocity);
 			Assert.AreEqual((-0.020237973).SI().GradientPercent.Cast<Radian>(), outPort.Gradient);
 		}
 
diff --git a/VectoCoreTest/Models/Simulation/SimulationTests.cs b/VectoCoreTest/Models/Simulation/SimulationTests.cs
index 79ffffbf2d..aaba93a7c3 100644
--- a/VectoCoreTest/Models/Simulation/SimulationTests.cs
+++ b/VectoCoreTest/Models/Simulation/SimulationTests.cs
@@ -23,7 +23,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 
 			var container = job.GetContainer();
 
-			Assert.AreEqual(560.0.RPMtoRad(), container.EngineSpeed());
+			Assert.AreEqual(560.RPMtoRad(), container.EngineSpeed());
 			Assert.AreEqual(0U, container.Gear());
 
 			try {
@@ -133,7 +133,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			};
 
 			var expectedSumFile = @"TestData\Results\EngineOnlyCycles\24t Coach.vsum";
-			var sumFile = @"24t Coach.vsum";
+			var sumFile = @"TestData\Jobs\24t Coach.vsum";
 			var resultFiles = expectedResultFiles.Select(x => Path.GetFileName(x));
 
 			Assert.IsTrue(File.Exists(sumFile), "sum file is missing: " + sumFile);
@@ -141,8 +141,8 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 				Assert.IsTrue(File.Exists(result), "vmod file is missing: " + result);
 			}
 
-			//Assert.AreEqual(File.ReadAllLines(sumFile).Length, File.ReadAllLines(expectedSumFile).Length,
-			//	"sum file row count differs.");
+			Assert.AreEqual(File.ReadAllLines(sumFile).Length, File.ReadAllLines(expectedSumFile).Length,
+				"sum file row count differs.");
 
 			var resultFileIt = resultFiles.GetEnumerator();
 
@@ -153,9 +153,6 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 
 				Assert.AreEqual(expectedResults.Rows.Count, results.Rows.Count, "Moddata: Row count differs.");
 			}
-
-			//todo compare sum file
-			Assert.Inconclusive("todo: compare sum file!!");
 		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs b/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs
index 8091c1a9aa..cc6401a990 100644
--- a/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs
+++ b/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs
@@ -68,7 +68,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var absTime = new TimeSpan(seconds: 0, minutes: 0, hours: 0);
 			var dt = new TimeSpan(seconds: 1, minutes: 0, hours: 0);
 			var torque = 400.SI<NewtonMeter>();
-			var engineSpeed = 1500.0.RPMtoRad();
+			var engineSpeed = 1500.RPMtoRad();
 
 			port.Request(absTime, dt, torque, engineSpeed);
 		}
@@ -86,7 +86,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var dt = new TimeSpan(seconds: 1, minutes: 0, hours: 0);
 
 			var torque = 0.SI<NewtonMeter>();
-			var engineSpeed = 600.0.RPMtoRad();
+			var engineSpeed = 600.RPMtoRad();
 			var dataWriter = new TestModalDataWriter();
 
 			for (var i = 0; i < 21; i++) {
diff --git a/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs b/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
index 6de77a4a1b..7d0d7c77f9 100644
--- a/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
+++ b/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
@@ -16,9 +16,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 		{
 			var fldCurve = FullLoadCurve.ReadFromFile(CoachEngineFLD);
 
-			Assert.AreEqual(1180, (double) fldCurve.FullLoadStationaryTorque(560.0.RPMtoRad()), Tolerance);
-			Assert.AreEqual(1352, (double) fldCurve.FullLoadStationaryTorque(2000.0.RPMtoRad()), Tolerance);
-			Assert.AreEqual(1231, (double) fldCurve.FullLoadStationaryTorque(580.0.RPMtoRad()), Tolerance);
+			Assert.AreEqual(1180, (double) fldCurve.FullLoadStationaryTorque(560.RPMtoRad()), Tolerance);
+			Assert.AreEqual(1352, (double) fldCurve.FullLoadStationaryTorque(2000.RPMtoRad()), Tolerance);
+			Assert.AreEqual(1231, (double) fldCurve.FullLoadStationaryTorque(580.RPMtoRad()), Tolerance);
 		}
 
     [TestMethod]
@@ -33,9 +33,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 		{
 			var fldCurve = FullLoadCurve.ReadFromFile(CoachEngineFLD);
 
-			Assert.AreEqual(69198.814183, (double) fldCurve.FullLoadStationaryPower(560.0.RPMtoRad()), Tolerance);
-			Assert.AreEqual(283162.218372, (double) fldCurve.FullLoadStationaryPower(2000.0.RPMtoRad()), Tolerance);
-			Assert.AreEqual(74767.810760, (double) fldCurve.FullLoadStationaryPower(580.0.RPMtoRad()), Tolerance);
+			Assert.AreEqual(69198.814183, (double) fldCurve.FullLoadStationaryPower(560.RPMtoRad()), Tolerance);
+			Assert.AreEqual(283162.218372, (double) fldCurve.FullLoadStationaryPower(2000.RPMtoRad()), Tolerance);
+			Assert.AreEqual(74767.810760, (double) fldCurve.FullLoadStationaryPower(580.RPMtoRad()), Tolerance);
 		}
 
 		[TestMethod]
@@ -43,11 +43,11 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 		{
 			var fldCurve = FullLoadCurve.ReadFromFile(CoachEngineFLD);
 
-			Assert.AreEqual(-149, (double) fldCurve.DragLoadStationaryTorque(560.0.RPMtoRad()), Tolerance);
-			Assert.AreEqual(-301, (double) fldCurve.DragLoadStationaryTorque(2000.0.RPMtoRad()), Tolerance);
-			Assert.AreEqual(-148.5, (double) fldCurve.DragLoadStationaryTorque(580.0.RPMtoRad()), Tolerance);
-			Assert.AreEqual(-150, (double) fldCurve.DragLoadStationaryTorque(520.0.RPMtoRad()), Tolerance);
-			Assert.AreEqual(-339, (double) fldCurve.DragLoadStationaryTorque(2200.0.RPMtoRad()), Tolerance);
+			Assert.AreEqual(-149, (double) fldCurve.DragLoadStationaryTorque(560.RPMtoRad()), Tolerance);
+			Assert.AreEqual(-301, (double) fldCurve.DragLoadStationaryTorque(2000.RPMtoRad()), Tolerance);
+			Assert.AreEqual(-148.5, (double) fldCurve.DragLoadStationaryTorque(580.RPMtoRad()), Tolerance);
+			Assert.AreEqual(-150, (double) fldCurve.DragLoadStationaryTorque(520.RPMtoRad()), Tolerance);
+			Assert.AreEqual(-339, (double) fldCurve.DragLoadStationaryTorque(2200.RPMtoRad()), Tolerance);
 		}
 
 		[TestMethod]
@@ -55,9 +55,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 		{
 			var fldCurve = FullLoadCurve.ReadFromFile(CoachEngineFLD);
 
-			Assert.AreEqual(-8737.81636, (double) fldCurve.DragLoadStationaryPower(560.0.RPMtoRad()), Tolerance);
-			Assert.AreEqual(-63041.29254, (double) fldCurve.DragLoadStationaryPower(2000.0.RPMtoRad()), Tolerance);
-			Assert.AreEqual(-9019.51251, (double) fldCurve.DragLoadStationaryPower(580.0.RPMtoRad()), Tolerance);
+			Assert.AreEqual(-8737.81636, (double) fldCurve.DragLoadStationaryPower(560.RPMtoRad()), Tolerance);
+			Assert.AreEqual(-63041.29254, (double) fldCurve.DragLoadStationaryPower(2000.RPMtoRad()), Tolerance);
+			Assert.AreEqual(-9019.51251, (double) fldCurve.DragLoadStationaryPower(580.RPMtoRad()), Tolerance);
 		}
 
 		[TestMethod]
@@ -65,9 +65,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 		{
 			var fldCurve = FullLoadCurve.ReadFromFile(CoachEngineFLD);
 
-			Assert.AreEqual(0.6, (double) fldCurve.PT1(560.0.RPMtoRad()), Tolerance);
-			Assert.AreEqual(0.25, (double) fldCurve.PT1(2000.0.RPMtoRad()), Tolerance);
-			Assert.AreEqual(0.37, (double) fldCurve.PT1(1700.0.RPMtoRad()), Tolerance);
+			Assert.AreEqual(0.6, (double) fldCurve.PT1(560.RPMtoRad()), Tolerance);
+			Assert.AreEqual(0.25, (double) fldCurve.PT1(2000.RPMtoRad()), Tolerance);
+			Assert.AreEqual(0.37, (double) fldCurve.PT1(1700.RPMtoRad()), Tolerance);
 		}
 
 		/// <summary>
diff --git a/VectoCoreTest/Utils/DoubleExtensionMethodTest.cs b/VectoCoreTest/Utils/DoubleExtensionMethodTest.cs
index fc28ed5b1a..aba3daa144 100644
--- a/VectoCoreTest/Utils/DoubleExtensionMethodTest.cs
+++ b/VectoCoreTest/Utils/DoubleExtensionMethodTest.cs
@@ -10,12 +10,12 @@ namespace TUGraz.VectoCore.Tests.Utils
 		[TestMethod]
 		public void DoubleExtensions_SI()
 		{
-			var val = 600.0.RPMtoRad();
+			var val = 600.RPMtoRad();
 			Assert.AreEqual(600 / 60 * 2 * Math.PI, val.Double());
 
-			Assert.IsTrue(0.0.SI<PerSecond>().HasEqualUnit(val));
+			Assert.IsTrue(0.SI<PerSecond>().HasEqualUnit(val));
 
-			var val2 = 1200.0.SI().Rounds.Per.Minute.ConvertTo().Radian.Per.Second.Cast<PerSecond>();
+			var val2 = 1200.SI().Rounds.Per.Minute.ConvertTo().Radian.Per.Second.Cast<PerSecond>();
 			val = val * 2;
 			Assert.AreEqual(val, val2);
 
diff --git a/VectoCoreTest/Utils/SITest.cs b/VectoCoreTest/Utils/SITest.cs
index 5b89dd80dd..69f33eab24 100644
--- a/VectoCoreTest/Utils/SITest.cs
+++ b/VectoCoreTest/Utils/SITest.cs
@@ -105,7 +105,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 			Assert.AreEqual("0 [-]", si.ToString());
 			Assert.IsTrue(si.HasEqualUnit(new SI()));
 
-			var si2 = 5.0.SI().Watt;
+			var si2 = 5.SI().Watt;
 			Assert.AreEqual("5 [W]", si2.ToString());
 
 			var si3 = 2.SI().Radian.Per.Second;
@@ -117,7 +117,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 			Assert.AreEqual("10 [kgmm/ssss]", si4.ToBasicUnits().ToString());
 
 
-			var kg = 5.0.SI().Kilo.Gramm;
+			var kg = 5.SI().Kilo.Gramm;
 			Assert.AreEqual(5.0, kg.Double());
 			Assert.AreEqual("5 [kg]", kg.ToString());
 
-- 
GitLab