diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs index 9de62b6f48df1ecd6cb0a348572b746084c5d107..ccd4adf4377c2d5f135a4a6e4cb83112f5a59831 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs @@ -431,18 +431,22 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl CurrentState.StationaryFullLoadTorque = ModelData.FullLoadCurve.FullLoadStationaryTorque(angularVelocity); var stationaryFullLoadPower = CurrentState.StationaryFullLoadTorque * angularVelocity; - Watt dynFullPowerCalculated; + Watt dynFullPowerCalculated = 0.SI<Watt>(); // disable pt1 behaviour if PT1Disabled is true, or if the previous enginepower is greater than the current stationary fullload power (in this case the pt1 calculation fails) if (PT1Disabled || PreviousState.EnginePower.IsGreaterOrEqual(stationaryFullLoadPower)) { dynFullPowerCalculated = stationaryFullLoadPower; } else { - var pt1 = ModelData.FullLoadCurve.PT1(angularVelocity).Value(); - var powerRatio = (PreviousState.EnginePower / stationaryFullLoadPower).Value(); - var tStarPrev = pt1 * Math.Log(1.0 / (1 - powerRatio), Math.E).SI<Second>(); - var tStar = tStarPrev + PreviousState.dt; - dynFullPowerCalculated = stationaryFullLoadPower * (1 - Math.Exp((-tStar / pt1).Value())); - dynFullPowerCalculated = VectoMath.Max(PreviousState.EnginePower, dynFullPowerCalculated); + try { + var pt1 = ModelData.FullLoadCurve.PT1(angularVelocity).Value(); + var powerRatio = (PreviousState.EnginePower / stationaryFullLoadPower).Value(); + var tStarPrev = pt1 * Math.Log(1.0 / (1 - powerRatio), Math.E).SI<Second>(); + var tStar = tStarPrev + PreviousState.dt; + dynFullPowerCalculated = stationaryFullLoadPower * (1 - Math.Exp((-tStar / pt1).Value())); + dynFullPowerCalculated = VectoMath.Max(PreviousState.EnginePower, dynFullPowerCalculated); + } catch (Exception ) { + Log.Error("failed to calculate dynamic full-load power - using stationary idle full-load. n: {0}", angularVelocity); + } } // new check in vecto 3.x (according to Martin Rexeis)