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

Skip to content
Snippets Groups Projects
Commit 143285c7 authored by Michael KRISPER's avatar Michael KRISPER
Browse files

AirDrag Area CdxA can now be left empty in Engineering Mode also when the...

AirDrag Area CdxA can now be left empty in Engineering Mode also when the CrossWindCorrection is set to Speed Dependent (Declaration Mode)
parent 531a4893
No related branches found
No related tags found
No related merge requests found
...@@ -62,7 +62,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter ...@@ -62,7 +62,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
retVal.DynamicTyreRadius = data.DynamicTyreRadius; retVal.DynamicTyreRadius = data.DynamicTyreRadius;
var axles = data.Axles; var axles = data.Axles;
retVal.AxleData = axles.Select(axle => new Axle { retVal.AxleData = axles.Select(axle => new Axle {
WheelsDimension = axle.Wheels, WheelsDimension = axle.Wheels,
Inertia = axle.Inertia, Inertia = axle.Inertia,
...@@ -82,8 +81,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter ...@@ -82,8 +81,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
switch (airdragData.CrossWindCorrectionMode) { switch (airdragData.CrossWindCorrectionMode) {
case CrossWindCorrectionMode.NoCorrection: case CrossWindCorrectionMode.NoCorrection:
retVal.CrossWindCorrectionCurve = retVal.CrossWindCorrectionCurve = new CrosswindCorrectionCdxALookup(airdragData.AirDragArea,
new CrosswindCorrectionCdxALookup(airdragData.AirDragArea,
CrossWindCorrectionCurveReader.GetNoCorrectionCurve(airdragData.AirDragArea), CrossWindCorrectionCurveReader.GetNoCorrectionCurve(airdragData.AirDragArea),
CrossWindCorrectionMode.NoCorrection); CrossWindCorrectionMode.NoCorrection);
break; break;
...@@ -97,13 +95,14 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter ...@@ -97,13 +95,14 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
CrossWindCorrectionCurveReader.ReadCdxABetaTable(airdragData.CrosswindCorrectionMap)); CrossWindCorrectionCurveReader.ReadCdxABetaTable(airdragData.CrosswindCorrectionMap));
break; break;
case CrossWindCorrectionMode.DeclarationModeCorrection: 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, var height = DeclarationData.Segments.LookupHeight(data.VehicleCategory, data.AxleConfiguration,
data.GrossVehicleMassRating); data.GrossVehicleMassRating);
retVal.CrossWindCorrectionCurve = retVal.CrossWindCorrectionCurve = new CrosswindCorrectionCdxALookup(airDragArea,
new CrosswindCorrectionCdxALookup(airdragData.AirDragArea,
DeclarationDataAdapter.GetDeclarationAirResistanceCurve( DeclarationDataAdapter.GetDeclarationAirResistanceCurve(
GetAirdragParameterSet(data.VehicleCategory, data.AxleConfiguration, data.Axles.Count), GetAirdragParameterSet(data.VehicleCategory, data.AxleConfiguration, data.Axles.Count), airDragArea, height),
airdragData.AirDragArea, height), CrossWindCorrectionMode.DeclarationModeCorrection); CrossWindCorrectionMode.DeclarationModeCorrection);
break; break;
default: default:
throw new ArgumentOutOfRangeException("CrosswindCorrection", airdragData.CrossWindCorrectionMode.ToString()); throw new ArgumentOutOfRangeException("CrosswindCorrection", airdragData.CrossWindCorrectionMode.ToString());
...@@ -231,7 +230,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter ...@@ -231,7 +230,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
gearbox.TorqueConverter.CLUpshiftMinAcceleration, gearbox.TorqueConverter.CCUpshiftMinAcceleration); gearbox.TorqueConverter.CLUpshiftMinAcceleration, gearbox.TorqueConverter.CCUpshiftMinAcceleration);
} }
return retVal; return retVal;
} }
...@@ -249,7 +247,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter ...@@ -249,7 +247,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
retVal.UpshiftMinAcceleration = gearbox.UpshiftMinAcceleration; retVal.UpshiftMinAcceleration = gearbox.UpshiftMinAcceleration;
} }
public IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesEngineeringInputData auxInputData) public IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesEngineeringInputData auxInputData)
{ {
var auxList = new List<VectoRunData.AuxData>(auxInputData.Auxiliaries.Count + 1) { var auxList = new List<VectoRunData.AuxData>(auxInputData.Auxiliaries.Count + 1) {
......
...@@ -155,6 +155,16 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -155,6 +155,16 @@ namespace TUGraz.VectoCore.Models.Declaration
return vehicleHeight; 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) private static Mission[] CreateMissions(ref Kilogram grossVehicleWeight, Kilogram curbWeight, DataRow row)
{ {
var missionTypes = Enum.GetValues(typeof(MissionType)).Cast<MissionType>(); var missionTypes = Enum.GetValues(typeof(MissionType)).Cast<MissionType>();
......
...@@ -42,6 +42,7 @@ using TUGraz.VectoCore.Utils; ...@@ -42,6 +42,7 @@ using TUGraz.VectoCore.Utils;
namespace TUGraz.VectoCore.Models.SimulationComponent.Data namespace TUGraz.VectoCore.Models.SimulationComponent.Data
{ {
[CustomValidation(typeof(AirdragData), "ValidateAirDragData")]
public class AirdragData : SimulationComponentData public class AirdragData : SimulationComponentData
{ {
public CrossWindCorrectionMode CrossWindCorrectionMode { get; set; } public CrossWindCorrectionMode CrossWindCorrectionMode { get; set; }
...@@ -50,6 +51,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data ...@@ -50,6 +51,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
public ICrossWindCorrection CrossWindCorrectionCurve { get; internal set; } public ICrossWindCorrection CrossWindCorrectionCurve { get; internal set; }
public SquareMeter DeclaredAirdragArea { 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\"");
return ValidationResult.Success;
}
} }
/// <summary> /// <summary>
...@@ -178,7 +190,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data ...@@ -178,7 +190,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
get { return (CurbWeight ?? 0.SI<Kilogram>()) + (BodyAndTrailerWeight ?? 0.SI<Kilogram>()); } get { return (CurbWeight ?? 0.SI<Kilogram>()) + (BodyAndTrailerWeight ?? 0.SI<Kilogram>()); }
} }
protected void ComputeRollResistanceAndReducedMassWheels() protected void ComputeRollResistanceAndReducedMassWheels()
{ {
if (TotalVehicleWeight == 0.SI<Kilogram>()) { if (TotalVehicleWeight == 0.SI<Kilogram>()) {
...@@ -217,7 +228,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data ...@@ -217,7 +228,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
WheelsInertia = wheelsInertia; WheelsInertia = wheelsInertia;
} }
// ReSharper disable once UnusedMember.Global -- used via Validation // ReSharper disable once UnusedMember.Global -- used via Validation
public static ValidationResult ValidateVehicleData(VehicleData vehicleData, ValidationContext validationContext) public static ValidationResult ValidateVehicleData(VehicleData vehicleData, ValidationContext validationContext)
{ {
...@@ -240,7 +250,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data ...@@ -240,7 +250,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
} }
} }
if (vehicleData.TotalRollResistanceCoefficient <= 0) { if (vehicleData.TotalRollResistanceCoefficient <= 0) {
return return
new ValidationResult(string.Format("Total rolling resistance must be greater than 0! {0}", new ValidationResult(string.Format("Total rolling resistance must be greater than 0! {0}",
...@@ -275,7 +284,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data ...@@ -275,7 +284,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
return new ValidationResult("Exactly one axle has to be defined as driven!"); return new ValidationResult("Exactly one axle has to be defined as driven!");
} }
return ValidationResult.Success; 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