diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs index 2bf6548ebe01b3bc6cad9559e3205df2bdfb89c6..3da0b1a2c9b3d45a2fa0ed2d314dc29a2b8bd4f5 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs @@ -129,14 +129,16 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData VectoMath.LeastSquaresFitting(speedBucket.Value, x => x.InputTorque.Value(), x => x.TorqueLoss.Value(), out k, out d, out r); - var inTq = DeclarationData.LossMapExtrapolationFactor * maxTorque; - if (k > 0) { - entries.Add(new TransmissionLossMap.GearLossMapEntry(speedBucket.Key, inTq, k * inTq + d.SI<NewtonMeter>())); - entries.Add(new TransmissionLossMap.GearLossMapEntry(speedBucket.Key, -inTq, k * inTq + d.SI<NewtonMeter>())); - } else { - var torqueLossLastEntry = speedBucket.Value.OrderBy(x => x.InputSpeed).Last().TorqueLoss; - entries.Add(new TransmissionLossMap.GearLossMapEntry(speedBucket.Key, inTq, torqueLossLastEntry)); - entries.Add(new TransmissionLossMap.GearLossMapEntry(speedBucket.Key, -inTq, torqueLossLastEntry)); + for (var i = 2; i <= DeclarationData.LossMapExtrapolationFactor; i++) { + var inTq = i * maxTorque; + if (k > 0) { + entries.Add(new TransmissionLossMap.GearLossMapEntry(speedBucket.Key, inTq, k * inTq + d.SI<NewtonMeter>())); + entries.Add(new TransmissionLossMap.GearLossMapEntry(speedBucket.Key, -inTq, k * inTq + d.SI<NewtonMeter>())); + } else { + var torqueLossLastEntry = speedBucket.Value.OrderBy(x => x.InputSpeed).Last().TorqueLoss; + entries.Add(new TransmissionLossMap.GearLossMapEntry(speedBucket.Key, inTq, torqueLossLastEntry)); + entries.Add(new TransmissionLossMap.GearLossMapEntry(speedBucket.Key, -inTq, torqueLossLastEntry)); + } } } diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs index 31010b77dc19219c5b8d7ce36a54d3b0d442940b..53d2910afbfa77f9dca276a71a70763506d87971 100644 --- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs @@ -77,7 +77,7 @@ namespace TUGraz.VectoCore.Models.Declaration public static readonly StandardBodies StandardBodies = new StandardBodies(); public static readonly Payloads Payloads = new Payloads(); public static readonly PTOTransmission PTOTransmission = new PTOTransmission(); - public const double LossMapExtrapolationFactor = 3; + public const double LossMapExtrapolationFactor = 6; public static readonly ADASCombinations ADASCombinations = new ADASCombinations(); public static readonly ADASBenefits ADASBenefits = new ADASBenefits(); diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs index ed2361653ed526e7c4ab849757500e14d65bdd5b..330f6ebd9aea26dd11a263fac9757533129f8ba8 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs @@ -285,8 +285,8 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent }; } - [TestCase(GearboxDataFile, EngineDataFile, 6.38, 9600, 1600, 9756.1054377), - TestCase(GearboxDataFile, EngineDataFile, 6.38, -9600, 1000, -9445.40776858)] + [TestCase(GearboxDataFile, EngineDataFile, 6.38, 96000, 1600, 96499.10109), + TestCase(GearboxDataFile, EngineDataFile, 6.38, -96000, 1000, -95502.403188)] public void Gearbox_LossMapExtrapolation_Declaration(string gbxFile, string engineFile, double ratio, double torque, double inAngularSpeed, double expectedTorque) { @@ -314,15 +314,15 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent Assert.AreEqual(absTime, port.AbsTime); Assert.AreEqual(dt, port.Dt); Assert.AreEqual(inAngularSpeed, port.AngularVelocity.Value() / Constants.RPMToRad, 1e-3); - AssertHelper.AreRelativeEqual(expectedTorque.SI<NewtonMeter>(), port.Torque); + AssertHelper.AreRelativeEqual(expectedTorque.SI<NewtonMeter>(), port.Torque, 1e-2); var modData = new MockModalDataContainer(); Assert.IsTrue(gearbox.CurrentState.TorqueLossResult.Extrapolated); AssertHelper.Exception<VectoException>(() => { gearbox.CommitSimulationStep(modData); }); } - [TestCase(GearboxDataFile, EngineDataFile, 6.38, 9600, 1600, 9756.1054377), - TestCase(GearboxDataFile, EngineDataFile, 6.38, -9600, 1000, -9445.40776858)] + [TestCase(GearboxDataFile, EngineDataFile, 6.38, 96000, 1600, 96499.10109), + TestCase(GearboxDataFile, EngineDataFile, 6.38, -96000, 1000, -95502.403188)] public void Gearbox_LossMapExtrapolation_Engineering(string gbxFile, string engineFile, double ratio, double torque, double inAngularSpeed, double expectedTorque) { @@ -350,14 +350,14 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent Assert.AreEqual(absTime, port.AbsTime); Assert.AreEqual(dt, port.Dt); Assert.AreEqual(n, port.AngularVelocity); - AssertHelper.AreRelativeEqual(expectedTorque.SI<NewtonMeter>(), port.Torque); + AssertHelper.AreRelativeEqual(expectedTorque.SI<NewtonMeter>(), port.Torque, 1e-2); var modData = new MockModalDataContainer(); Assert.IsTrue(gearbox.CurrentState.TorqueLossResult.Extrapolated); gearbox.CommitSimulationStep(modData); } - [TestCase(GearboxDataFile, EngineDataFile, 6.38, 9600, 1600, true, 9756.10543), + [TestCase(GearboxDataFile, EngineDataFile, 6.38, 96000, 1600, true, 96499.10109), TestCase(GearboxDataFile, EngineDataFile, 6.38, -2500, 1000, false, -2443.5392), TestCase(GearboxDataFile, EngineDataFile, 6.38, -3000, 1000, false, -2933.73529)] public void Gearbox_LossMapExtrapolation_DryRun(string gbxFile, string engineFile, double ratio, double torque, @@ -387,7 +387,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent Assert.AreEqual(dt, port.Dt); Assert.AreEqual(n, port.AngularVelocity); Assert.AreEqual(extrapolated, gearbox.CurrentState.TorqueLossResult.Extrapolated); - AssertHelper.AreRelativeEqual(expectedTorque.SI<NewtonMeter>(), port.Torque); + AssertHelper.AreRelativeEqual(expectedTorque.SI<NewtonMeter>(), port.Torque, 1e-2); var modData = new MockModalDataContainer(); gearbox.CommitSimulationStep(modData);