diff --git a/VectoCore/VectoCore/Models/Declaration/Axle.cs b/VectoCore/VectoCore/Models/Declaration/Axle.cs index 8c80a9cafdcc671a67fc583058aff7405253cefd..15b27a6fe1dae4af8c5fe25e6efdea1e8c515f81 100644 --- a/VectoCore/VectoCore/Models/Declaration/Axle.cs +++ b/VectoCore/VectoCore/Models/Declaration/Axle.cs @@ -50,7 +50,7 @@ namespace TUGraz.VectoCore.Models.Declaration [Required, SIRange(500, 100000)] public Newton TyreTestLoad { get; internal set; } - [Required, SIRange(Double.MinValue, 1)] + [Required, SIRange(0, 1, ExecutionMode.Engineering), SIRange(double.MinValue, 1, ExecutionMode.Declaration)] public double AxleWeightShare { get; internal set; } public bool TwinTyres { get; internal set; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs index 053a0a8fa52814cabfa089c8754704fadbb9525b..8d484b39a51d16d93be0be34fd71fcc74330a512 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs @@ -155,13 +155,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data var rrc = 0.0.SI<Scalar>(); var wheelsInertia = 0.0.SI<KilogramSquareMeter>(); foreach (var axle in _axleData) { + if (axle.AxleWeightShare.IsEqual(0, 1e-12)) { + continue; + } var nrWheels = axle.TwinTyres ? 4 : 2; var baseValue = (axle.AxleWeightShare * TotalVehicleWeight() * g / axle.TyreTestLoad / nrWheels).Value(); - //if (baseValue.IsEqual(0)) { - // throw new VectoSimulationException( - // "Axle Roll Resistance Coefficient could not be calculated. One of the values is 0: AxleWeightShare: {0}, TotalVehicleWeight: {1}, TyreTestLoad: {2}, nrWheels: {3}", - // axle.AxleWeightShare, TotalVehicleWeight(), axle.TyreTestLoad, nrWheels); - //} + rrc += axle.AxleWeightShare * axle.RollResistanceCoefficient * Math.Pow(baseValue, Physics.RollResistanceExponent - 1); wheelsInertia += nrWheels * axle.Inertia; @@ -175,6 +174,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data { var mode = GetExecutionMode(validationContext); + if (vehicleData.AxleData.Count < 1) { + return new ValidationResult("At least two axles need to be specified"); + } + var weightShareSum = vehicleData.AxleData.Sum(axle => axle.AxleWeightShare); if (!weightShareSum.IsEqual(1.0, 1E-10)) { return new ValidationResult( @@ -202,6 +205,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data } // vvvvvvv these checks apply only for declaration mode! vvvvvv + if (vehicleData.AxleConfiguration.NumAxles() != vehicleData.AxleData.Count) { + return + new ValidationResult( + string.Format("For a {0} type vehicle exactly {1} number of axles have to pe specified. Found {2}", + vehicleData.AxleConfiguration.GetName(), vehicleData.AxleConfiguration.NumAxles(), vehicleData.AxleData.Count)); + } if (vehicleData.TotalVehicleWeight() > gvwTotal) { return new ValidationResult(