Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 272e2d10 authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

refactor code to work with modified segmentation table, adapt testcases

parent 97884085
No related branches found
No related tags found
No related merge requests found
......@@ -126,19 +126,15 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
axleData.Add(axle);
}
axleData.AddRange(mission.TrailerAxleWeightDistribution.Select(tmp => {
var wheel = mission.TrailerType != TrailerType.None
? DeclarationData.StandardBodies.Lookup(mission.TrailerType.ToString()).Wheels
: DeclarationData.Wheels.Lookup(DeclarationData.Trailer.WheelsType);
return new Axle {
AxleType = AxleType.Trailer,
AxleWeightShare = tmp,
TwinTyres = DeclarationData.Trailer.TwinTyres,
RollResistanceCoefficient = DeclarationData.Trailer.RollResistanceCoefficient,
TyreTestLoad = DeclarationData.Trailer.TyreTestLoad.SI<Newton>(),
Inertia = wheel.Inertia
};
axleData.AddRange(mission.TrailerWheels.Select(trailerWheel => new Axle {
AxleType = AxleType.Trailer,
AxleWeightShare = mission.TrailerAxleWeightShare / mission.TrailerWheels.Count,
TwinTyres = DeclarationData.Trailer.TwinTyres,
RollResistanceCoefficient = DeclarationData.Trailer.RollResistanceCoefficient,
TyreTestLoad = DeclarationData.Trailer.TyreTestLoad.SI<Newton>(),
Inertia = trailerWheel.Inertia
}));
retVal.AxleData = axleData;
return retVal;
}
......
......@@ -119,8 +119,7 @@ namespace TUGraz.VectoCore.Models.Declaration
public static HeatingVentilationAirConditioning HeatingVentilationAirConditioning
{
get
{
get {
return Instance()._heatingVentilationAirConditioning ??
(Instance()._heatingVentilationAirConditioning = new HeatingVentilationAirConditioning());
}
......@@ -222,7 +221,7 @@ namespace TUGraz.VectoCore.Models.Declaration
public const double RollResistanceCoefficient = 0.00555;
public const double TyreTestLoad = 37500;
public const bool TwinTyres = false;
public const string WheelsType = "385/65 R 22.5";
//public const string WheelsType = "385/65 R 22.5";
}
public static class Engine
......
......@@ -65,7 +65,7 @@ namespace TUGraz.VectoCore.Models.Declaration
public MissionType MissionType;
public string CrossWindCorrectionParameters;
public double[] AxleWeightDistribution;
public double[] TrailerAxleWeightDistribution;
public double TrailerAxleWeightShare;
public Kilogram CurbWeight;
public Kilogram BodyCurbWeight;
......@@ -73,6 +73,7 @@ namespace TUGraz.VectoCore.Models.Declaration
public TrailerType TrailerType;
public Kilogram TrailerCurbWeight;
public Kilogram TrailerGrossVehicleWeight;
public List<Wheels.Entry> TrailerWheels;
public Stream CycleFile;
public SquareMeter DeltaCdA;
......@@ -98,6 +99,7 @@ namespace TUGraz.VectoCore.Models.Declaration
{
None,
T1,
T2
T2,
ST1
}
}
\ No newline at end of file
......@@ -53,8 +53,7 @@ namespace TUGraz.VectoCore.Models.Declaration
protected override string ErrorMessage
{
get
{
get {
return
"ERROR: Could not find the declaration segment for vehicle. Category: {0}, AxleConfiguration: {1}, GrossVehicleWeight: {2}";
}
......@@ -135,12 +134,12 @@ namespace TUGraz.VectoCore.Models.Declaration
? DeclarationData.StandardBodies.Lookup(trailerField)
: StandardBodies.Empty;
var semiTrailerField = row.Field<string>("semitrailer");
var semiTrailer = !string.IsNullOrWhiteSpace(semiTrailerField)
? DeclarationData.StandardBodies.Lookup(semiTrailerField)
: StandardBodies.Empty;
//var semiTrailerField = row.Field<string>("semitrailer");
//var semiTrailer = !string.IsNullOrWhiteSpace(semiTrailerField)
// ? DeclarationData.StandardBodies.Lookup(semiTrailerField)
// : StandardBodies.Empty;
trailer += semiTrailer;
//trailer += semiTrailer;
// limit gvw to MaxGVW (40t)
var gvw = VectoMath.Min(grossVehicleWeight + trailer.GrossVehicleWeight,
......@@ -171,11 +170,12 @@ namespace TUGraz.VectoCore.Models.Declaration
TrailerType = trailerType,
TrailerCurbWeight = trailer.CurbWeight,
TrailerGrossVehicleWeight = trailer.GrossVehicleWeight,
TrailerWheels = trailer.Wheels,
TrailerAxleWeightShare = GetTrailerAxleWeightDistribution(row, missionType),
DeltaCdA = trailer.DeltaCrossWindArea,
MinLoad = 0.SI<Kilogram>(),
MaxLoad = maxLoad,
RefLoad = refLoad,
TrailerAxleWeightDistribution = GetTrailerAxleWeightDistribution(row, missionType),
CargoVolume = body.CargoVolume + trailer.CargoVolume,
};
missions.Add(mission);
......@@ -191,15 +191,14 @@ namespace TUGraz.VectoCore.Models.Declaration
return !string.IsNullOrWhiteSpace(row.Field<string>("traileraxles" + GetMissionSuffix(missionType)));
}
private static double[] GetTrailerAxleWeightDistribution(DataRow row, MissionType missionType)
private static double GetTrailerAxleWeightDistribution(DataRow row, MissionType missionType)
{
var trailerAxles =
row.Field<string>("traileraxles" + GetMissionSuffix(missionType)).Split('/');
if (!string.IsNullOrWhiteSpace(trailerAxles[0])) {
var count = int.Parse(trailerAxles[1]);
return (trailerAxles[0].ToDouble() / 100.0 / count).Repeat(count).ToArray();
row.Field<string>("traileraxles" + GetMissionSuffix(missionType));
if (!string.IsNullOrWhiteSpace(trailerAxles)) {
return trailerAxles.ToDouble() / 100.0;
}
return new double[0];
return 0;
}
private static double[] GetAxleWeightDistribution(DataRow row, MissionType missionType)
......
......@@ -29,6 +29,8 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using TUGraz.VectoCommon.Utils;
......@@ -42,7 +44,7 @@ namespace TUGraz.VectoCore.Models.Declaration
public Kilogram GrossVehicleWeight;
public SquareMeter DeltaCrossWindArea;
public string Name;
public Wheels.Entry Wheels;
public List<Wheels.Entry> Wheels;
public CubicMeter CargoVolume;
public Kilogram MaxPayLoad
......@@ -51,7 +53,12 @@ namespace TUGraz.VectoCore.Models.Declaration
}
public StandardBody(string name, Kilogram curbWeight, Kilogram grossVehicleWeight, SquareMeter deltaCrossWindArea,
Wheels.Entry wheels, CubicMeter volume)
Wheels.Entry wheels, int axleCount, CubicMeter volume) :
this(name, curbWeight, grossVehicleWeight, deltaCrossWindArea,
wheels == null ? new List<Wheels.Entry>() : Enumerable.Repeat(wheels, axleCount).ToList(), volume) {}
private StandardBody(string name, Kilogram curbWeight, Kilogram grossVehicleWeight, SquareMeter deltaCrossWindArea,
List<Wheels.Entry> wheels, CubicMeter volume)
{
Name = name;
CurbWeight = curbWeight;
......@@ -61,13 +68,14 @@ namespace TUGraz.VectoCore.Models.Declaration
CargoVolume = volume;
}
public static StandardBody operator +(StandardBody first, StandardBody second)
{
var wheels = new List<Wheels.Entry>(first.Wheels);
wheels.AddRange(second.Wheels);
return new StandardBody(first.Name + second.Name, first.CurbWeight + second.CurbWeight,
first.GrossVehicleWeight + second.GrossVehicleWeight,
first.DeltaCrossWindArea + second.DeltaCrossWindArea,
null, first.CargoVolume + second.CargoVolume);
wheels, first.CargoVolume + second.CargoVolume);
}
}
......@@ -83,7 +91,7 @@ namespace TUGraz.VectoCore.Models.Declaration
public sealed class StandardBodies : LookupData<string, StandardBody>
{
public static readonly StandardBody Empty = new StandardBody("", 0.SI<Kilogram>(), 0.SI<Kilogram>(),
0.SI<SquareMeter>(), null, 0.SI<CubicMeter>());
0.SI<SquareMeter>(), null, 0, 0.SI<CubicMeter>());
protected override string ResourceId
{
......@@ -110,6 +118,7 @@ namespace TUGraz.VectoCore.Models.Declaration
!string.IsNullOrWhiteSpace(k.Field<string>("wheels"))
? DeclarationData.Wheels.Lookup(k.Field<string>("wheels"))
: null,
Int32.Parse(k.Field<string>("axlecount")),
k.ParseDouble("cargovolume").SI<CubicMeter>()))
.ToDictionary(kv => kv.Name);
}
......
......@@ -75,7 +75,7 @@ namespace TUGraz.VectoCore.Tests.FileIO
AssertHelper.AreRelativeEqual(0.40726954, runData.VehicleData.DynamicTyreRadius);
Assert.AreEqual(VehicleClass.Class2, runData.VehicleData.VehicleClass);
Assert.AreEqual(3, runData.VehicleData.AxleData.Count);
Assert.AreEqual(4, runData.VehicleData.AxleData.Count);
Assert.AreEqual(6, runData.VehicleData.AxleData[0].Inertia.Value(), Tolerance);
Assert.AreEqual(true, runData.DriverData.LookAheadCoasting.Enabled);
......
......@@ -169,6 +169,7 @@ namespace TUGraz.VectoCore.Tests.Integration
private static VehicleData CreateVehicleData(Kilogram massExtra, Kilogram loading)
{
var wheelsType = "385/65 R 22.5";
var axles = new List<Axle> {
new Axle {
AxleWeightShare = 0.2,
......@@ -191,21 +192,21 @@ namespace TUGraz.VectoCore.Tests.Integration
TwinTyres = DeclarationData.Trailer.TwinTyres,
RollResistanceCoefficient = DeclarationData.Trailer.RollResistanceCoefficient,
TyreTestLoad = DeclarationData.Trailer.TyreTestLoad.SI<Newton>(),
Inertia = DeclarationData.Wheels.Lookup(DeclarationData.Trailer.WheelsType).Inertia
Inertia = DeclarationData.Wheels.Lookup(wheelsType).Inertia
},
new Axle {
AxleWeightShare = 0.55 / 3,
TwinTyres = DeclarationData.Trailer.TwinTyres,
RollResistanceCoefficient = DeclarationData.Trailer.RollResistanceCoefficient,
TyreTestLoad = DeclarationData.Trailer.TyreTestLoad.SI<Newton>(),
Inertia = DeclarationData.Wheels.Lookup(DeclarationData.Trailer.WheelsType).Inertia
Inertia = DeclarationData.Wheels.Lookup(wheelsType).Inertia
},
new Axle {
AxleWeightShare = 0.55 / 3,
TwinTyres = DeclarationData.Trailer.TwinTyres,
RollResistanceCoefficient = DeclarationData.Trailer.RollResistanceCoefficient,
TyreTestLoad = DeclarationData.Trailer.TyreTestLoad.SI<Newton>(),
Inertia = DeclarationData.Wheels.Lookup(DeclarationData.Trailer.WheelsType).Inertia
Inertia = DeclarationData.Wheels.Lookup(wheelsType).Inertia
}
};
return new VehicleData {
......
......@@ -609,19 +609,19 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.LongHaul,
cosswindCorrection: "RigidTrailer", axleWeightDistribution: new[] { 0.225, 0.325 },
trailerAxleWeightDistribution: new[] { 0.45 }, bodyCurbWeight: 1900, trailerCurbWeight: 3400,
trailerAxleWeightDistribution: 0.45, trailerAxleCount: 1, bodyCurbWeight: 1900, trailerCurbWeight: 3400,
trailerType: TrailerType.T1, minLoad: 0, refLoad: 9813.2353, trailerGrossVehicleWeight: 10500, deltaCdA: 0.6,
maxLoad: 11250);
AssertMission(segment.Missions[1], vehicleData: vehicleData, missionType: MissionType.RegionalDelivery,
cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.45, 0.55 },
trailerAxleWeightDistribution: new double[] { }, bodyCurbWeight: 1900, trailerCurbWeight: 0,
trailerAxleWeightDistribution: 0, trailerAxleCount: 0, bodyCurbWeight: 1900, trailerCurbWeight: 0,
trailerType: TrailerType.None, minLoad: 0, refLoad: 2984.1176, trailerGrossVehicleWeight: 0, deltaCdA: 0,
maxLoad: 4150);
AssertMission(segment.Missions[2], vehicleData: vehicleData, missionType: MissionType.UrbanDelivery,
cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.45, 0.55 },
trailerAxleWeightDistribution: new double[] { }, bodyCurbWeight: 1900, trailerCurbWeight: 0,
trailerAxleWeightDistribution: 0, trailerAxleCount: 0, bodyCurbWeight: 1900, trailerCurbWeight: 0,
trailerType: TrailerType.None, minLoad: 0, refLoad: 2984.1176, trailerGrossVehicleWeight: 0, deltaCdA: 0,
maxLoad: 4150);
}
......@@ -648,13 +648,13 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.RegionalDelivery,
cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.4, 0.6 },
trailerAxleWeightDistribution: new double[] { }, bodyCurbWeight: 2000, trailerCurbWeight: 0,
trailerAxleWeightDistribution: 0, trailerAxleCount: 0, bodyCurbWeight: 2000, trailerCurbWeight: 0,
trailerType: TrailerType.None, minLoad: 0, refLoad: 3811.7647, trailerGrossVehicleWeight: 0, deltaCdA: 0,
maxLoad: 6150);
AssertMission(segment.Missions[1], vehicleData: vehicleData, missionType: MissionType.UrbanDelivery,
cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.4, 0.6 },
trailerAxleWeightDistribution: new double[] { }, bodyCurbWeight: 2000, trailerCurbWeight: 0,
trailerAxleWeightDistribution: 0, trailerAxleCount: 0, bodyCurbWeight: 2000, trailerCurbWeight: 0,
trailerType: TrailerType.None, minLoad: 0, refLoad: 3811.7647, trailerGrossVehicleWeight: 0, deltaCdA: 0,
maxLoad: 6150);
}
......@@ -684,18 +684,18 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.LongHaul,
cosswindCorrection: "RigidTrailer", axleWeightDistribution: new[] { 0.2, 0.3 },
trailerAxleWeightDistribution: new[] { 0.25, 0.25 }, bodyCurbWeight: 2100, trailerCurbWeight: 5400,
trailerAxleWeightDistribution: .5, trailerAxleCount: 3, bodyCurbWeight: 2100, trailerCurbWeight: 5400,
trailerType: TrailerType.T2, minLoad: 0, refLoad: 14000, trailerGrossVehicleWeight: 18000, deltaCdA: 0.6,
maxLoad: 21000);
AssertMission(segment.Missions[1], vehicleData: vehicleData, missionType: MissionType.RegionalDelivery,
cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.45, 0.55 },
trailerAxleWeightDistribution: new double[] { }, bodyCurbWeight: 2100, trailerCurbWeight: 0,
trailerAxleWeightDistribution: 0, trailerAxleCount: 0, bodyCurbWeight: 2100, trailerCurbWeight: 0,
trailerType: TrailerType.None, minLoad: 0, refLoad: 4400, trailerGrossVehicleWeight: 0, deltaCdA: 0, maxLoad: 8400);
AssertMission(segment.Missions[2], vehicleData: vehicleData, missionType: MissionType.MunicipalUtility,
cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.45, 0.55 },
trailerAxleWeightDistribution: new double[] { }, bodyCurbWeight: 2100, trailerCurbWeight: 0,
trailerAxleWeightDistribution: 0, trailerAxleCount: 0, bodyCurbWeight: 2100, trailerCurbWeight: 0,
trailerType: TrailerType.None, minLoad: 0, refLoad: 4400, trailerGrossVehicleWeight: 0, deltaCdA: 0, maxLoad: 8400);
}
......@@ -724,19 +724,19 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.LongHaul,
cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.2, 0.25 },
trailerAxleWeightDistribution: (0.55 / 3).Repeat(3).ToArray(), bodyCurbWeight: 0, trailerCurbWeight: 7500,
trailerType: TrailerType.None, minLoad: 0, refLoad: 19300, trailerGrossVehicleWeight: 24000, deltaCdA: 0,
trailerAxleWeightDistribution: 0.55, trailerAxleCount: 3, bodyCurbWeight: 0, trailerCurbWeight: 7500,
trailerType: TrailerType.ST1, minLoad: 0, refLoad: 19300, trailerGrossVehicleWeight: 24000, deltaCdA: 0,
maxLoad: 25000);
AssertMission(segment.Missions[1], vehicleData: vehicleData, missionType: MissionType.RegionalDelivery,
cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.25, 0.25 },
trailerAxleWeightDistribution: (0.5 / 3).Repeat(3).ToArray(), bodyCurbWeight: 0, trailerCurbWeight: 7500,
trailerType: TrailerType.None, minLoad: 0, refLoad: 12900, trailerGrossVehicleWeight: 24000, deltaCdA: 0,
trailerAxleWeightDistribution: 0.5, trailerAxleCount: 3, bodyCurbWeight: 0, trailerCurbWeight: 7500,
trailerType: TrailerType.ST1, minLoad: 0, refLoad: 12900, trailerGrossVehicleWeight: 24000, deltaCdA: 0,
maxLoad: 25000);
}
public static void AssertMission(Mission m, dynamic vehicleData, MissionType missionType, string cosswindCorrection,
double[] axleWeightDistribution, double[] trailerAxleWeightDistribution, double bodyCurbWeight,
double[] axleWeightDistribution, double trailerAxleWeightDistribution, int trailerAxleCount, double bodyCurbWeight,
double trailerCurbWeight, TrailerType trailerType, double minLoad, double refLoad, double maxLoad,
double trailerGrossVehicleWeight, double deltaCdA)
{
......@@ -745,9 +745,9 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
CollectionAssert.AreEqual(axleWeightDistribution, m.AxleWeightDistribution,
"Axle distribution not equal.\nexpected: {0}\nactual: {1}", string.Join(",", axleWeightDistribution),
string.Join(",", m.AxleWeightDistribution));
CollectionAssert.AreEqual(trailerAxleWeightDistribution, m.TrailerAxleWeightDistribution,
Assert.AreEqual(trailerAxleWeightDistribution, m.TrailerAxleWeightShare,
"Trailer axle distribution not equal.\nexpected: {0}\nactual: {1}", string.Join(",", trailerAxleWeightDistribution),
string.Join(",", m.TrailerAxleWeightDistribution));
string.Join(",", m.TrailerAxleWeightShare));
Assert.AreEqual(bodyCurbWeight.SI<Kilogram>(), m.BodyCurbWeight);
Assert.AreEqual(trailerCurbWeight.SI<Kilogram>(), m.TrailerCurbWeight);
Assert.AreEqual(trailerType, m.TrailerType);
......@@ -802,7 +802,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
var runs = dataReader.NextRun().ToList();
Assert.AreEqual(9, runs.Count);
var withT1 = new[] { 6.0, 6.0, 4.5 };
var withT1 = new[] { 6.0, 6.0, 4.5, 4.5 };
CollectionAssert.AreEqual(withT1, runs[0].VehicleData.AxleData.Select(a => a.Inertia.Value()));
CollectionAssert.AreEqual(withT1, runs[1].VehicleData.AxleData.Select(a => a.Inertia.Value()));
CollectionAssert.AreEqual(withT1, runs[2].VehicleData.AxleData.Select(a => a.Inertia.Value()));
......
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