Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

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

sum data: for new columns handle case no data for efficiency calculation is available

parent 563ebaef
Branches
Tags
No related merge requests found
...@@ -37,6 +37,7 @@ using System.Runtime.CompilerServices; ...@@ -37,6 +37,7 @@ using System.Runtime.CompilerServices;
using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils; using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.InputData.Reader.Impl;
using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Declaration;
using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Data;
using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data;
...@@ -54,6 +55,7 @@ namespace TUGraz.VectoCore.OutputData ...@@ -54,6 +55,7 @@ namespace TUGraz.VectoCore.OutputData
{ {
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
public const string INTERNAL_PREFIX = "INTERNAL"; public const string INTERNAL_PREFIX = "INTERNAL";
public const string SORT = INTERNAL_PREFIX + " Sorting"; public const string SORT = INTERNAL_PREFIX + " Sorting";
public const string JOB = "Job [-]"; public const string JOB = "Job [-]";
public const string INPUTFILE = "Input File [-]"; public const string INPUTFILE = "Input File [-]";
...@@ -109,7 +111,9 @@ namespace TUGraz.VectoCore.OutputData ...@@ -109,7 +111,9 @@ namespace TUGraz.VectoCore.OutputData
public const string HDV_CO2_VEHICLE_CLASS = "HDV CO2 vehicle class [-]"; public const string HDV_CO2_VEHICLE_CLASS = "HDV CO2 vehicle class [-]";
public const string TOTAL_VEHICLE_MASS = "Total vehicle mass [kg]"; public const string TOTAL_VEHICLE_MASS = "Total vehicle mass [kg]";
public const string CD_x_A_DECLARED = "Declared CdxA [m²]"; public const string CD_x_A_DECLARED = "Declared CdxA [m²]";
public const string CD_x_A = "CdxA [m²]"; public const string CD_x_A = "CdxA [m²]";
//public const string ROLLING_RESISTANCE_COEFFICIENT = "weighed RRC [-]"; //public const string ROLLING_RESISTANCE_COEFFICIENT = "weighed RRC [-]";
public const string R_DYN = "r_dyn [m]"; public const string R_DYN = "r_dyn [m]";
...@@ -203,15 +207,22 @@ namespace TUGraz.VectoCore.OutputData ...@@ -203,15 +207,22 @@ namespace TUGraz.VectoCore.OutputData
public const string DECLARED_RRC_AXLE4 = "Declared RRC axle 4 [-]"; public const string DECLARED_RRC_AXLE4 = "Declared RRC axle 4 [-]";
public const string DECLARED_FZISO_AXLE4 = "Declared FzISO axle 4 [N]"; public const string DECLARED_FZISO_AXLE4 = "Declared FzISO axle 4 [N]";
public const string ADAS_TECHNOLOGY_COMBINATION = "ADAS technology combination [-]"; public const string ADAS_TECHNOLOGY_COMBINATION = "ADAS technology combination [-]";
public const string PTO_TECHNOLOGY = "PTOShaftsGearWheels"; public const string PTO_TECHNOLOGY = "PTOShaftsGearWheels";
//public const string PTO_OTHER_ELEMENTS = "PTOOtherElements"; //public const string PTO_OTHER_ELEMENTS = "PTOOtherElements";
public const string ENGINE_CERTIFICATION_NUMBER = "Engine certification number"; public const string ENGINE_CERTIFICATION_NUMBER = "Engine certification number";
public const string AVERAGE_ENGINE_EFFICIENCY = "Average engine efficiency [%]"; public const string AVERAGE_ENGINE_EFFICIENCY = "Average engine efficiency [%]";
public const string TORQUE_CONVERTER_CERTIFICATION_NUMBER = "TorqueConverter certification number"; public const string TORQUE_CONVERTER_CERTIFICATION_NUMBER = "TorqueConverter certification number";
public const string TORQUE_CONVERTER_CERTIFICATION_METHOD = "Torque converter certification option"; public const string TORQUE_CONVERTER_CERTIFICATION_METHOD = "Torque converter certification option";
public const string AVERAGE_TORQUE_CONVERTER_EFFICIENCY_WITH_LOCKUP = "Average torque converter efficiency with lockup [%]";
public const string AVERAGE_TORQUE_CONVERTER_EFFICIENCY_WITHOUT_LOCKUP = "Average torque converter efficiency w/o lockup [%]"; public const string AVERAGE_TORQUE_CONVERTER_EFFICIENCY_WITH_LOCKUP =
"Average torque converter efficiency with lockup [%]";
public const string AVERAGE_TORQUE_CONVERTER_EFFICIENCY_WITHOUT_LOCKUP =
"Average torque converter efficiency w/o lockup [%]";
public const string GEARBOX_CERTIFICATION_NUMBER = "Gearbox certification number"; public const string GEARBOX_CERTIFICATION_NUMBER = "Gearbox certification number";
public const string GEARBOX_CERTIFICATION_METHOD = "Gearbox certification option"; public const string GEARBOX_CERTIFICATION_METHOD = "Gearbox certification option";
public const string AVERAGE_GEARBOX_EFFICIENCY = "Average gearbox efficiency [%]"; public const string AVERAGE_GEARBOX_EFFICIENCY = "Average gearbox efficiency [%]";
...@@ -237,14 +248,14 @@ namespace TUGraz.VectoCore.OutputData ...@@ -237,14 +248,14 @@ namespace TUGraz.VectoCore.OutputData
/// Initializes a new instance of the <see cref="SummaryDataContainer"/> class. /// Initializes a new instance of the <see cref="SummaryDataContainer"/> class.
/// </summary> /// </summary>
/// <param name="writer"></param> /// <param name="writer"></param>
public SummaryDataContainer(ISummaryWriter writer) public SummaryDataContainer(ISummaryWriter writer)
{ {
_sumWriter = writer; _sumWriter = writer;
Table = new DataTable(); Table = new DataTable();
Table.Columns.AddRange(new[] { Table.Columns.AddRange(
new[] {
Tuple.Create(SORT, typeof(int)), Tuple.Create(SORT, typeof(int)),
Tuple.Create(JOB, typeof(string)), Tuple.Create(JOB, typeof(string)),
Tuple.Create(INPUTFILE, typeof(string)), Tuple.Create(INPUTFILE, typeof(string)),
...@@ -307,16 +318,19 @@ namespace TUGraz.VectoCore.OutputData ...@@ -307,16 +318,19 @@ namespace TUGraz.VectoCore.OutputData
Tuple.Create(AXLE_RATIO, typeof(ConvertedSI)), Tuple.Create(AXLE_RATIO, typeof(ConvertedSI)),
Tuple.Create(string.Format(AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.SteeringPump), typeof(string)), Tuple.Create(string.Format(AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.SteeringPump), typeof(string)),
Tuple.Create(string.Format(AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.Fan), typeof(string)), Tuple.Create(string.Format(AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.Fan), typeof(string)),
Tuple.Create(string.Format(AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.HeatingVentilationAirCondition), Tuple.Create(
string.Format(AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.HeatingVentilationAirCondition),
typeof(string)), typeof(string)),
Tuple.Create(string.Format(AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.PneumaticSystem), typeof(string)), Tuple.Create(string.Format(AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.PneumaticSystem), typeof(string)),
Tuple.Create(string.Format(AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.ElectricSystem), typeof(string)), Tuple.Create(string.Format(AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.ElectricSystem), typeof(string)),
Tuple.Create(ADAS_TECHNOLOGY_COMBINATION, typeof(string)), Tuple.Create(ADAS_TECHNOLOGY_COMBINATION, typeof(string)),
Tuple.Create(PTO_TECHNOLOGY, typeof(string)), Tuple.Create(PTO_TECHNOLOGY, typeof(string)),
//Tuple.Create(PTO_OTHER_ELEMENTS, typeof(string)), //Tuple.Create(PTO_OTHER_ELEMENTS, typeof(string)),
}.Select(x => new DataColumn(x.Item1, x.Item2)).ToArray()); }.Select(x => new DataColumn(x.Item1, x.Item2)).ToArray());
Table.Columns.AddRange(new[] { Table.Columns.AddRange(
new[] {
CARGO_VOLUME, CARGO_VOLUME,
TIME, DISTANCE, TIME, DISTANCE,
SPEED, ALTITUDE_DELTA, SPEED, ALTITUDE_DELTA,
...@@ -337,7 +351,8 @@ namespace TUGraz.VectoCore.OutputData ...@@ -337,7 +351,8 @@ namespace TUGraz.VectoCore.OutputData
STOP_TIMESHARE, ENGINE_FULL_LOAD_TIME_SHARE, COASTING_TIME_SHARE, BRAKING_TIME_SHARE STOP_TIMESHARE, ENGINE_FULL_LOAD_TIME_SHARE, COASTING_TIME_SHARE, BRAKING_TIME_SHARE
}.Select(x => new DataColumn(x, typeof(ConvertedSI))).ToArray()); }.Select(x => new DataColumn(x, typeof(ConvertedSI))).ToArray());
Table.Columns.AddRange(new[] { Table.Columns.AddRange(
new[] {
Tuple.Create(ENGINE_CERTIFICATION_NUMBER, typeof(string)), Tuple.Create(ENGINE_CERTIFICATION_NUMBER, typeof(string)),
Tuple.Create(AVERAGE_ENGINE_EFFICIENCY, typeof(double)), Tuple.Create(AVERAGE_ENGINE_EFFICIENCY, typeof(double)),
Tuple.Create(TORQUE_CONVERTER_CERTIFICATION_METHOD, typeof(string)), Tuple.Create(TORQUE_CONVERTER_CERTIFICATION_METHOD, typeof(string)),
...@@ -379,6 +394,7 @@ namespace TUGraz.VectoCore.OutputData ...@@ -379,6 +394,7 @@ namespace TUGraz.VectoCore.OutputData
foreach (var dataColumn in toRemove) { foreach (var dataColumn in toRemove) {
view.Columns.Remove(dataColumn); view.Columns.Remove(dataColumn);
} }
_sumWriter.WriteSumData(view); _sumWriter.WriteSumData(view);
} }
} }
...@@ -461,7 +477,8 @@ namespace TUGraz.VectoCore.OutputData ...@@ -461,7 +477,8 @@ namespace TUGraz.VectoCore.OutputData
WriteGearshiftStats(modData, row, gearCount); WriteGearshiftStats(modData, row, gearCount);
} }
private static void WriteFuelconsumptionEntries(IModalDataContainer modData, DataRow row, Kilogram vehicleLoading, private static void WriteFuelconsumptionEntries(
IModalDataContainer modData, DataRow row, Kilogram vehicleLoading,
CubicMeter cargoVolume, bool vtpCycle) CubicMeter cargoVolume, bool vtpCycle)
{ {
var tmp = modData.FCMapPerSecond(); var tmp = modData.FCMapPerSecond();
...@@ -501,7 +518,8 @@ namespace TUGraz.VectoCore.OutputData ...@@ -501,7 +518,8 @@ namespace TUGraz.VectoCore.OutputData
} }
if (vtpCycle) { if (vtpCycle) {
row[SPECIFIC_FC] = (modData.TimeIntegral<Kilogram>(ModalResultField.FCFinal) / modData.WorkWheelsPos()).ConvertToGramPerKiloWattHour(); row[SPECIFIC_FC] = (modData.TimeIntegral<Kilogram>(ModalResultField.FCFinal) / modData.WorkWheelsPos())
.ConvertToGramPerKiloWattHour();
} }
} }
...@@ -518,6 +536,7 @@ namespace TUGraz.VectoCore.OutputData ...@@ -518,6 +536,7 @@ namespace TUGraz.VectoCore.OutputData
if (!Table.Columns.Contains(colName)) { if (!Table.Columns.Contains(colName)) {
var col = Table.Columns.Add(colName, typeof(ConvertedSI)); var col = Table.Columns.Add(colName, typeof(ConvertedSI));
// move the new column to correct position // move the new column to correct position
col.SetOrdinal(Table.Columns[E_AUX].Ordinal); col.SetOrdinal(Table.Columns[E_AUX].Ordinal);
} }
...@@ -572,19 +591,23 @@ namespace TUGraz.VectoCore.OutputData ...@@ -572,19 +591,23 @@ namespace TUGraz.VectoCore.OutputData
var eFC = modData.TimeIntegral<Kilogram>(ModalResultField.FCFinal) * modData.FuelData.LowerHeatingValueVecto; var eFC = modData.TimeIntegral<Kilogram>(ModalResultField.FCFinal) * modData.FuelData.LowerHeatingValueVecto;
var eIcePos = modData.TimeIntegral<WattSecond>(ModalResultField.P_eng_fcmap, x => x > 0); var eIcePos = modData.TimeIntegral<WattSecond>(ModalResultField.P_eng_fcmap, x => x > 0);
row[AVERAGE_ENGINE_EFFICIENCY] = (eIcePos / eFC).Value(); row[AVERAGE_ENGINE_EFFICIENCY] = eFC.IsEqual(0, 1e-9) ? 0 : (eIcePos / eFC).Value();
if (runData.SimulationType == SimulationType.EngineOnly) {
return;
}
var gbxOutSignal = runData.Retarder.Type == RetarderType.TransmissionOutputRetarder var gbxOutSignal = runData.Retarder.Type == RetarderType.TransmissionOutputRetarder
? ModalResultField.P_retarder_in ? ModalResultField.P_retarder_in
: (runData.AngledriveData == null ? ModalResultField.P_axle_in : ModalResultField.P_angle_in); : (runData.AngledriveData == null ? ModalResultField.P_axle_in : ModalResultField.P_angle_in);
var eGbxIn = modData.TimeIntegral<WattSecond>(ModalResultField.P_gbx_in, x => x > 0); var eGbxIn = modData.TimeIntegral<WattSecond>(ModalResultField.P_gbx_in, x => x > 0);
var eGbxOut = modData.TimeIntegral<WattSecond>(gbxOutSignal, x => x > 0); var eGbxOut = modData.TimeIntegral<WattSecond>(gbxOutSignal, x => x > 0);
row[AVERAGE_GEARBOX_EFFICIENCY] = (eGbxOut / eGbxIn).Value(); row[AVERAGE_GEARBOX_EFFICIENCY] = eGbxIn.IsEqual(0, 1e-9) ? 0 : (eGbxOut / eGbxIn).Value();
if (runData.GearboxData.Type.AutomaticTransmission()) { if (runData.GearboxData.Type.AutomaticTransmission()) {
var eTcIn = modData.TimeIntegral<WattSecond>(ModalResultField.P_TC_in, x => x > 0); var eTcIn = modData.TimeIntegral<WattSecond>(ModalResultField.P_TC_in, x => x > 0);
var eTcOut = eGbxIn; var eTcOut = eGbxIn;
row[AVERAGE_TORQUE_CONVERTER_EFFICIENCY_WITHOUT_LOCKUP] = (eTcOut / eTcIn).Value(); row[AVERAGE_TORQUE_CONVERTER_EFFICIENCY_WITHOUT_LOCKUP] = eTcIn.IsEqual(0, 1e-9) ? 0 : (eTcOut / eTcIn).Value();
var tcData = modData.GetValues( var tcData = modData.GetValues(
x => new { x => new {
...@@ -600,7 +623,7 @@ namespace TUGraz.VectoCore.OutputData ...@@ -600,7 +623,7 @@ namespace TUGraz.VectoCore.OutputData
eTcOut += entry.dt * entry.P_TCout; eTcOut += entry.dt * entry.P_TCout;
} }
row[AVERAGE_TORQUE_CONVERTER_EFFICIENCY_WITH_LOCKUP] = (eTcOut / eTcIn).Value(); row[AVERAGE_TORQUE_CONVERTER_EFFICIENCY_WITH_LOCKUP] = eTcIn.IsEqual(0, 1e-9) ? 0 : (eTcOut / eTcIn).Value();
} }
if (runData.AngledriveData != null) { if (runData.AngledriveData != null) {
...@@ -612,7 +635,7 @@ namespace TUGraz.VectoCore.OutputData ...@@ -612,7 +635,7 @@ namespace TUGraz.VectoCore.OutputData
var eAxlIn = modData.TimeIntegral<WattSecond>(ModalResultField.P_axle_in, x => x > 0); var eAxlIn = modData.TimeIntegral<WattSecond>(ModalResultField.P_axle_in, x => x > 0);
var eAxlOut = modData.TimeIntegral<WattSecond>(ModalResultField.P_brake_in, x => x > 0); var eAxlOut = modData.TimeIntegral<WattSecond>(ModalResultField.P_brake_in, x => x > 0);
row[AVERAGE_AXLEGEAR_EFFICIENCY] = (eAxlOut / eAxlIn).Value(); row[AVERAGE_AXLEGEAR_EFFICIENCY] = eAxlIn.IsEqual(0, 1e-9) ? 0 : (eAxlOut / eAxlIn).Value();
} }
private static void WriteWorkEntries(IModalDataContainer modData, DataRow row, bool vtpMode) private static void WriteWorkEntries(IModalDataContainer modData, DataRow row, bool vtpMode)
...@@ -644,7 +667,6 @@ namespace TUGraz.VectoCore.OutputData ...@@ -644,7 +667,6 @@ namespace TUGraz.VectoCore.OutputData
row[PTO_TECHNOLOGY] = runData.PTO?.TransmissionType ?? ""; row[PTO_TECHNOLOGY] = runData.PTO?.TransmissionType ?? "";
WriteEngineData(runData.EngineData, row); WriteEngineData(runData.EngineData, row);
WriteGearboxData(runData.GearboxData, row); WriteGearboxData(runData.GearboxData, row);
...@@ -660,7 +682,6 @@ namespace TUGraz.VectoCore.OutputData ...@@ -660,7 +682,6 @@ namespace TUGraz.VectoCore.OutputData
WriteAxleWheelsData(runData.VehicleData.AxleData, row); WriteAxleWheelsData(runData.VehicleData.AxleData, row);
WriteAirdragData(runData.AirdragData, row); WriteAirdragData(runData.AirdragData, row);
} }
private static void WriteVehicleData(VehicleData data, DataRow row) private static void WriteVehicleData(VehicleData data, DataRow row)
...@@ -687,7 +708,7 @@ namespace TUGraz.VectoCore.OutputData ...@@ -687,7 +708,7 @@ namespace TUGraz.VectoCore.OutputData
row[R_DYN] = (ConvertedSI)data.DynamicTyreRadius; row[R_DYN] = (ConvertedSI)data.DynamicTyreRadius;
row[ADAS_TECHNOLOGY_COMBINATION] = DeclarationData.ADASCombinations.Lookup(data.ADAS).ID; row[ADAS_TECHNOLOGY_COMBINATION] = data.ADAS != null ? DeclarationData.ADASCombinations.Lookup(data.ADAS).ID : "";
} }
private static void WriteAirdragData(AirdragData data, DataRow row) private static void WriteAirdragData(AirdragData data, DataRow row)
...@@ -743,7 +764,6 @@ namespace TUGraz.VectoCore.OutputData ...@@ -743,7 +764,6 @@ namespace TUGraz.VectoCore.OutputData
row[NUM_AXLES_DRIVEN] = data.Count(x => x.AxleType == AxleType.VehicleDriven); row[NUM_AXLES_DRIVEN] = data.Count(x => x.AxleType == AxleType.VehicleDriven);
row[NUM_AXLES_NON_DRIVEN] = data.Count(x => x.AxleType == AxleType.VehicleNonDriven); row[NUM_AXLES_NON_DRIVEN] = data.Count(x => x.AxleType == AxleType.VehicleNonDriven);
row[NUM_AXLES_TRAILER] = data.Count(x => x.AxleType == AxleType.Trailer); row[NUM_AXLES_TRAILER] = data.Count(x => x.AxleType == AxleType.Trailer);
} }
private static void WriteAxlegearData(AxleGearData data, DataRow row) private static void WriteAxlegearData(AxleGearData data, DataRow row)
...@@ -763,10 +783,12 @@ namespace TUGraz.VectoCore.OutputData ...@@ -763,10 +783,12 @@ namespace TUGraz.VectoCore.OutputData
if (aux.ID == Constants.Auxiliaries.IDs.PTOConsumer || aux.ID == Constants.Auxiliaries.IDs.PTOTransmission) { if (aux.ID == Constants.Auxiliaries.IDs.PTOConsumer || aux.ID == Constants.Auxiliaries.IDs.PTOTransmission) {
continue; continue;
} }
var colName = string.Format(AUX_TECH_FORMAT, aux.ID); var colName = string.Format(AUX_TECH_FORMAT, aux.ID);
if (!Table.Columns.Contains(colName)) { if (!Table.Columns.Contains(colName)) {
var col = Table.Columns.Add(colName, typeof(string)); var col = Table.Columns.Add(colName, typeof(string));
// move the new column to correct position // move the new column to correct position
col.SetOrdinal(Table.Columns[CARGO_VOLUME].Ordinal); col.SetOrdinal(Table.Columns[CARGO_VOLUME].Ordinal);
} }
...@@ -837,7 +859,6 @@ namespace TUGraz.VectoCore.OutputData ...@@ -837,7 +859,6 @@ namespace TUGraz.VectoCore.OutputData
? "" ? ""
: data.TorqueConverterData.CertificationNumber; : data.TorqueConverterData.CertificationNumber;
row[TORQUE_CONVERTER_CERTIFICATION_METHOD] = data.TorqueConverterData.CertificationMethod.GetName(); row[TORQUE_CONVERTER_CERTIFICATION_METHOD] = data.TorqueConverterData.CertificationMethod.GetName();
} else { } else {
row[GEAR_RATIO_FIRST_GEAR] = data.Gears.Count > 0 row[GEAR_RATIO_FIRST_GEAR] = data.Gears.Count > 0
? (ConvertedSI)data.Gears.First().Value.Ratio.SI<Scalar>() ? (ConvertedSI)data.Gears.First().Value.Ratio.SI<Scalar>()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment