Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit f45c21ce authored by Markus QUARITSCH's avatar Markus QUARITSCH
Browse files

Merge pull request #451 in VECTO/vecto-sim from...

Merge pull request #451 in VECTO/vecto-sim from ~EMKRISPMI/vecto-sim:VECTO-478-airdrag-default-area-in-engineering-mode to develop

* commit 'e3faf774':
  More explicit error message when Air Drag Area is empty in wrong CrossWindCorrection Mode
  AirDrag Area CdxA can now be left empty in Engineering Mode also when the CrossWindCorrection is set to Speed Dependent (Declaration Mode)
parents 531a4893 e3faf774
No related branches found
No related tags found
No related merge requests found
......@@ -62,7 +62,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
retVal.DynamicTyreRadius = data.DynamicTyreRadius;
var axles = data.Axles;
retVal.AxleData = axles.Select(axle => new Axle {
WheelsDimension = axle.Wheels,
Inertia = axle.Inertia,
......@@ -82,8 +81,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
switch (airdragData.CrossWindCorrectionMode) {
case CrossWindCorrectionMode.NoCorrection:
retVal.CrossWindCorrectionCurve =
new CrosswindCorrectionCdxALookup(airdragData.AirDragArea,
retVal.CrossWindCorrectionCurve = new CrosswindCorrectionCdxALookup(airdragData.AirDragArea,
CrossWindCorrectionCurveReader.GetNoCorrectionCurve(airdragData.AirDragArea),
CrossWindCorrectionMode.NoCorrection);
break;
......@@ -97,13 +95,14 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
CrossWindCorrectionCurveReader.ReadCdxABetaTable(airdragData.CrosswindCorrectionMap));
break;
case CrossWindCorrectionMode.DeclarationModeCorrection:
var airDragArea = airdragData.AirDragArea ??
DeclarationData.Segments.LookupCdA(data.VehicleCategory, data.AxleConfiguration, data.GrossVehicleMassRating);
var height = DeclarationData.Segments.LookupHeight(data.VehicleCategory, data.AxleConfiguration,
data.GrossVehicleMassRating);
retVal.CrossWindCorrectionCurve =
new CrosswindCorrectionCdxALookup(airdragData.AirDragArea,
retVal.CrossWindCorrectionCurve = new CrosswindCorrectionCdxALookup(airDragArea,
DeclarationDataAdapter.GetDeclarationAirResistanceCurve(
GetAirdragParameterSet(data.VehicleCategory, data.AxleConfiguration, data.Axles.Count),
airdragData.AirDragArea, height), CrossWindCorrectionMode.DeclarationModeCorrection);
GetAirdragParameterSet(data.VehicleCategory, data.AxleConfiguration, data.Axles.Count), airDragArea, height),
CrossWindCorrectionMode.DeclarationModeCorrection);
break;
default:
throw new ArgumentOutOfRangeException("CrosswindCorrection", airdragData.CrossWindCorrectionMode.ToString());
......@@ -231,7 +230,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
gearbox.TorqueConverter.CLUpshiftMinAcceleration, gearbox.TorqueConverter.CCUpshiftMinAcceleration);
}
return retVal;
}
......@@ -249,7 +247,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
retVal.UpshiftMinAcceleration = gearbox.UpshiftMinAcceleration;
}
public IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesEngineeringInputData auxInputData)
{
var auxList = new List<VectoRunData.AuxData>(auxInputData.Auxiliaries.Count + 1) {
......
......@@ -155,6 +155,16 @@ namespace TUGraz.VectoCore.Models.Declaration
return vehicleHeight;
}
/// <summary>
/// Looks up the default CdxA value for the cross wind correction.
/// </summary>
public SquareMeter LookupCdA(VehicleCategory vehicleCategory, AxleConfiguration axleConfiguration,
Kilogram grossVehicleMassRating)
{
var row = GetSegmentDataRow(vehicleCategory, axleConfiguration, grossVehicleMassRating, true);
return row.SI<SquareMeter>("cdxa_default");
}
private static Mission[] CreateMissions(ref Kilogram grossVehicleWeight, Kilogram curbWeight, DataRow row)
{
var missionTypes = Enum.GetValues(typeof(MissionType)).Cast<MissionType>();
......
......@@ -42,6 +42,7 @@ using TUGraz.VectoCore.Utils;
namespace TUGraz.VectoCore.Models.SimulationComponent.Data
{
[CustomValidation(typeof(AirdragData), "ValidateAirDragData")]
public class AirdragData : SimulationComponentData
{
public CrossWindCorrectionMode CrossWindCorrectionMode { get; set; }
......@@ -50,6 +51,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
public ICrossWindCorrection CrossWindCorrectionCurve { get; internal set; }
public SquareMeter DeclaredAirdragArea { get; internal set; }
// ReSharper disable once UnusedMember.Global -- used via Validation
public static ValidationResult ValidateAirDragData(AirdragData airDragData, ValidationContext validationContext)
{
if (airDragData.CrossWindCorrectionMode != CrossWindCorrectionMode.DeclarationModeCorrection &&
airDragData.CrossWindCorrectionCurve.AirDragArea == null)
return new ValidationResult(
"AirDrag Area (CdxA) must not be empty when the cross wind correction mode is not \"Speed dependent (Declaration Mode)\"");
return ValidationResult.Success;
}
}
/// <summary>
......@@ -178,7 +190,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
get { return (CurbWeight ?? 0.SI<Kilogram>()) + (BodyAndTrailerWeight ?? 0.SI<Kilogram>()); }
}
protected void ComputeRollResistanceAndReducedMassWheels()
{
if (TotalVehicleWeight == 0.SI<Kilogram>()) {
......@@ -217,7 +228,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
WheelsInertia = wheelsInertia;
}
// ReSharper disable once UnusedMember.Global -- used via Validation
public static ValidationResult ValidateVehicleData(VehicleData vehicleData, ValidationContext validationContext)
{
......@@ -240,7 +250,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
}
}
if (vehicleData.TotalRollResistanceCoefficient <= 0) {
return
new ValidationResult(string.Format("Total rolling resistance must be greater than 0! {0}",
......@@ -275,7 +284,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
return new ValidationResult("Exactly one axle has to be defined as driven!");
}
return ValidationResult.Success;
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment