diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs index 4c680443814b8c0afda04b06a366e3cdae7b7569..041f8e37e0f3aef2f7f65ae5d3f59b054c279273 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs @@ -200,6 +200,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl foreach (var loading in mission.Loadings) { var simulationRunData = new VectoRunData { Loading = loading.Key, + VehicleDesignSpeed = _segment.DesignSpeed, VehicleData = _dao.CreateVehicleData(vehicle, mission, loading.Value), AirdragData = _dao.CreateAirdragData(vehicle.Components.AirdragInputData, mission, _segment), EngineData = _engineData.Copy(), // a copy is necessary because every run has a different correction factor! diff --git a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs index e2c6d18ddc29ba7b5b46e6716241b3befd118d18..e20a5645884e841aedecff317af4f19dd7b32738 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs @@ -49,11 +49,14 @@ namespace TUGraz.VectoCore.Models.Simulation.Data [CustomValidation(typeof(VectoRunData), "ValidateRunData")] public class VectoRunData : SimulationComponentData { + public VectoRunData() { Exempted = false; } + public MeterPerSecond VehicleDesignSpeed { get; internal set; } + [ValidateObject] public VehicleData VehicleData { get; internal set; } @@ -157,7 +160,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data private static ValidationResult CheckPowertrainLossMapsSize(VectoRunData runData, GearboxData gearboxData, CombustionEngineData engineData) { - var maxSpeed = 95.KMPHtoMeterPerSecond(); + var axleGearData = runData.AxleGearData; var angledriveData = runData.AngledriveData; var hasAngleDrive = angledriveData != null && angledriveData.Angledrive != null; @@ -167,6 +170,11 @@ namespace TUGraz.VectoCore.Models.Simulation.Data var axlegearRatio = axleGearData != null ? axleGearData.AxleGear.Ratio : 1.0; var dynamicTyreRadius = runData.VehicleData != null ? runData.VehicleData.DynamicTyreRadius : 0.0.SI<Meter>(); + var vehicleMaxSpeed = runData.EngineData.FullLoadCurves[0].N95hSpeed / + runData.GearboxData.Gears[runData.GearboxData.Gears.Keys.Max()].Ratio / axlegearRatio / + angledriveRatio * dynamicTyreRadius; + var maxSpeed = VectoMath.Min(vehicleMaxSpeed, (runData.VehicleDesignSpeed ?? 90.KMPHtoMeterPerSecond()) + (runData.DriverData?.OverSpeedEcoRoll?.OverSpeed ?? 0.KMPHtoMeterPerSecond())); + if (gearboxData.Gears.Count + 1 != engineData.FullLoadCurves.Count) { return new ValidationResult( @@ -202,7 +210,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data } private static ValidationResult CheckLossMapsEntries(KeyValuePair<uint, GearData> gear, PerSecond angularVelocity, - NewtonMeter inTorque, AngledriveData angledriveData, AxleGearData axleGearData, SI velocity) + NewtonMeter inTorque, AngledriveData angledriveData, AxleGearData axleGearData, MeterPerSecond velocity) { var hasAngleDrive = angledriveData != null && angledriveData.Angledrive != null; var angledriveRatio = hasAngleDrive && angledriveData.Type == AngledriveType.SeparateAngledrive