diff --git a/VectoCore/InputData/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs b/VectoCore/InputData/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs index 0933ecb6cd90efda8ab3c81330bfa8e37909135f..4a95a42f7e3c09ea2cd55444bc584eb48ba77632 100644 --- a/VectoCore/InputData/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs +++ b/VectoCore/InputData/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs @@ -16,6 +16,7 @@ * limitations under the Licence. */ +using System.Collections.Generic; using System.Linq; using TUGraz.VectoCore.Models; using TUGraz.VectoCore.Models.SimulationComponent.Data; @@ -141,13 +142,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdaper return engineCurve; } var entries = gearCurve.FullLoadEntries.Concat(engineCurve.FullLoadEntries) - .Select(entry => entry.EngineSpeed) - .OrderBy(engineSpeed => engineSpeed) - .Distinct() - .Select(engineSpeed => new FullLoadCurve.FullLoadCurveEntry { - EngineSpeed = engineSpeed, + .OrderBy(x => x.EngineSpeed) + .Distinct(new FullLoadEntryEqualityComparer()) + .Select(x => new FullLoadCurve.FullLoadCurveEntry { + EngineSpeed = x.EngineSpeed, TorqueFullLoad = - VectoMath.Min(engineCurve.FullLoadStationaryTorque(engineSpeed), gearCurve.FullLoadStationaryTorque(engineSpeed)) + VectoMath.Min(engineCurve.FullLoadStationaryTorque(x.EngineSpeed), + gearCurve.FullLoadStationaryTorque(x.EngineSpeed)) }); var flc = new EngineFullLoadCurve { @@ -157,5 +158,18 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdaper }; return flc; } + + internal class FullLoadEntryEqualityComparer : IEqualityComparer<FullLoadCurve.FullLoadCurveEntry> + { + public bool Equals(FullLoadCurve.FullLoadCurveEntry x, FullLoadCurve.FullLoadCurveEntry y) + { + return x.EngineSpeed.Value().IsEqual(y.EngineSpeed.Value()); + } + + public int GetHashCode(FullLoadCurve.FullLoadCurveEntry obj) + { + return obj.EngineSpeed.Value().GetHashCode(); + } + } } } \ No newline at end of file