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