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

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

Merge branch...

Merge branch 'hm/feature/VECTO-1638-rundatafactories-and-declarationdataadapter-for-xev' of https://citnet.tech.ec.europa.eu/CITnet/stash/scm/vecto/hm_vecto-dev into hm/feature/VECTO-1638-rundatafactories-and-declarationdataadapter-for-xev

# Conflicts:
#	VectoCore/VectoCoreTest/TestData/Integration/DeclarationMode/2nd_AmendmDeclMode/JSON/PEV/GenericIEPC/IEPC_Gbx3Speed/IEPCVehicle_Gbx3.vveh
parents 183c0a8c f8ab9029
No related branches found
No related tags found
No related merge requests found
Showing
with 394 additions and 116 deletions
......@@ -765,5 +765,15 @@ namespace TUGraz.VectoCore.OutputData
{
return (data.GetValues<SI>(ModalResultField.REESSStateOfCharge).Last()?.Value() ?? 0) * 100;
}
public static double REESSMinSoc(this IModalDataContainer data)
{
return (data.GetValues<Scalar>(ModalResultField.REESSStateOfCharge).Min()?.Value() ?? 0) * 100;
}
public static double REESSMaxSoc(this IModalDataContainer data)
{
return (data.GetValues<Scalar>(ModalResultField.REESSStateOfCharge).Max()?.Value() ?? 0) * 100;
}
}
}
\ No newline at end of file
......@@ -124,10 +124,10 @@ namespace TUGraz.VectoCore.OutputData
public const string FCFINAL_LiterPer100M3KM = "FC-Final{0} [l/100m³km]";
public const string FCFINAL_LiterPer100PassengerKM = "FC-Final{0} [l/100Pkm]";
public const string ElectricEnergyConsumption_total = "EC_el_final [kWh]";
public const string ElectricEnergyConsumption_KM = "EC_el_final [kWh/km]";
public const string ElectricEnergyConsumption_TKM = "EC_el_final [kWh/tkm]";
public const string ElectricEnergyConsumption_M3KM = "EC_el_final [g/m³km]";
public const string EC_el_final = "EC_el_final [kWh]";
public const string EC_el_final_KM = "EC_el_final [kWh/km]";
public const string EC_el_final_TKM = "EC_el_final [kWh/tkm]";
public const string EC_el_final_M3KM = "EC_el_final [g/m³km]";
public const string ElectricEnergyConsumption_PKM = "EC_el_final [g/Pkm]";
public const string CO2_KM = "CO2 [g/km]";
......@@ -285,6 +285,8 @@ namespace TUGraz.VectoCore.OutputData
public const string REESS_CAPACITY = "REESS Capacity";
public const string REESS_StartSoC = "REESS Start SoC [%]";
public const string REESS_EndSoC = "REESS End SoC [%]";
public const string REESS_MinSoC = "REESS Min SoC [%]";
public const string REESS_MaxSoC = "REESS Max SoC [%]";
public const string REESS_DeltaEnergy = "ΔE_REESS [kWh]";
public const string E_REESS_LOSS = "E_REESS_loss [kWh]";
......@@ -303,6 +305,8 @@ namespace TUGraz.VectoCore.OutputData
public const string E_IEPC_LOSS_FORMAT = "E_{0}_loss [kWh]";
public const string E_IEPC_OFF_TIME_SHARE = "{0} off time share [%]";
public const string f_equiv = "f_equiv";
public delegate object WriteSumEntry(VectoRunData r, IModalDataContainer m);
public delegate object WriteFuelEntry(VectoRunData r, IModalDataContainer m, IFuelProperties f);
......@@ -513,8 +517,13 @@ namespace TUGraz.VectoCore.OutputData
{ REESS_StartSoC, SumFunc((r, m) => r.BatteryData != null ? r.BatteryData.InitialSoC * 100 : r.SuperCapData != null ? r.SuperCapData.InitialSoC * 100 : double.NaN)},
{ REESS_EndSoC, SumFunc((r, m) => m.REESSEndSoC(), ModalResultField.REESSStateOfCharge)},
{ REESS_MinSoC, SumFunc((r, m) => m.REESSMinSoc(), ModalResultField.REESSStateOfCharge)},
{ REESS_MaxSoC, SumFunc((r, m) => m.REESSMaxSoc(), ModalResultField.REESSStateOfCharge)},
{ REESS_DeltaEnergy, SumFunc((r, m) => m.TimeIntegral<WattSecond>(ModalResultField.P_reess_int.GetName()).ConvertToKiloWattHour(), ModalResultField.P_reess_int)},
//P-HEV
{ f_equiv, SumFunc((r, m) => r.HybridStrategyParameters.EquivalenceFactor)},
// performance entries
{ ACC, SumFunc((r, m) => (ConvertedSI)m.AccelerationAverage(), ModalResultField.acc)},
{ ACC_POS, SumFunc((r, m) => (ConvertedSI)m.AccelerationsPositive(), ModalResultField.acc)},
......@@ -614,16 +623,16 @@ namespace TUGraz.VectoCore.OutputData
null : (m.CorrectedModalData.KilogramCO2PerMeter / r.VehicleData.PassengerCount.Value).ConvertToGrammPerKiloMeter(), ModalResultField.dist) },
// electric consumption
{ ElectricEnergyConsumption_total, SumFunc( (r , m )
{ EC_el_final, SumFunc( (r , m )
=> (m.CorrectedModalData.ElectricEnergyConsumption?.ConvertToKiloWattHour()))},
{ ElectricEnergyConsumption_KM, SumFunc((r, m)
{ EC_el_final_KM, SumFunc((r, m)
=> (m.CorrectedModalData.ElectricEnergyConsumptionPerMeter)?.ConvertToKiloWattHourPerKiloMeter())},
{ ElectricEnergyConsumption_TKM, SumFunc((r, m)
{ EC_el_final_TKM, SumFunc((r, m)
=> r.VehicleData?.Loading == null ||
r.VehicleData.Loading.IsEqual(0) ||
m.CorrectedModalData.ElectricEnergyConsumption == null
? null : (m.CorrectedModalData.ElectricEnergyConsumptionPerMeter / r.VehicleData.Loading).ConvertToKiloWattHourPerTonKiloMeter())},
{ ElectricEnergyConsumption_M3KM, SumFunc((r, m)
{ EC_el_final_M3KM, SumFunc((r, m)
=> r.VehicleData.CargoVolume == null ||
r.VehicleData.CargoVolume.IsEqual(0) ||
m.CorrectedModalData.ElectricEnergyConsumption == null
......@@ -704,6 +713,7 @@ namespace TUGraz.VectoCore.OutputData
};
public static readonly WriteAuxEntry AuxDataValue = (r, m, a) => m.AuxiliaryWork(a).ConvertToKiloWattHour();
}
}
\ No newline at end of file
......@@ -66,22 +66,39 @@ namespace TUGraz.VectoCore.OutputData
public class SummaryDataContainer : LoggingObject, ISumData, IDisposable
{
public static readonly string[] FcColumns = {
SumDataFields.FCMAP_H, SumDataFields.FCMAP_KM,
SumDataFields.FCNCVC_H, SumDataFields.FCNCVC_KM,
SumDataFields.FCWHTCC_H, SumDataFields.FCWHTCC_KM,
SumDataFields.FCESS_H, SumDataFields.FCESS_KM,
SumDataFields.FCESS_H_CORR, SumDataFields.FCESS_KM_CORR,
SumDataFields.FC_BusAux_PS_CORR_H, SumDataFields.FC_BusAux_PS_CORR_KM,
SumDataFields.FC_BusAux_ES_CORR_H, SumDataFields.FC_BusAux_ES_CORR_KM,
SumDataFields.FCWHR_H_CORR, SumDataFields.FCWHR_KM_CORR,
SumDataFields.FC_HEV_SOC_H, SumDataFields.FC_HEV_SOC_KM,
SumDataFields.FC_HEV_SOC_CORR_H, SumDataFields.FC_HEV_SOC_CORR_KM,
SumDataFields.FC_AUXHTR_H, SumDataFields.FC_AUXHTR_KM,
SumDataFields.FC_AUXHTR_H_CORR, SumDataFields.FC_AUXHTR_KM_CORR,
SumDataFields.FCFINAL_H, SumDataFields.FCFINAL_KM, SumDataFields.FCFINAL_LITERPER100KM,
SumDataFields.FCMAP_H,
SumDataFields.FCMAP_KM,
SumDataFields.FCNCVC_H,
SumDataFields.FCNCVC_KM,
SumDataFields.FCWHTCC_H,
SumDataFields.FCWHTCC_KM,
SumDataFields.FCESS_H,
SumDataFields.FCESS_KM,
SumDataFields.FCESS_H_CORR,
SumDataFields.FCESS_KM_CORR,
SumDataFields.FC_BusAux_PS_CORR_H,
SumDataFields.FC_BusAux_PS_CORR_KM,
SumDataFields.FC_BusAux_ES_CORR_H,
SumDataFields.FC_BusAux_ES_CORR_KM,
SumDataFields.FCWHR_H_CORR,
SumDataFields.FCWHR_KM_CORR,
SumDataFields.FC_HEV_SOC_H,
SumDataFields.FC_HEV_SOC_KM,
SumDataFields.FC_HEV_SOC_CORR_H,
SumDataFields.FC_HEV_SOC_CORR_KM,
SumDataFields.FC_AUXHTR_H,
SumDataFields.FC_AUXHTR_KM,
SumDataFields.FC_AUXHTR_H_CORR,
SumDataFields.FC_AUXHTR_KM_CORR,
SumDataFields.FCFINAL_H,
SumDataFields.FCFINAL_KM,
SumDataFields.FCFINAL_LITERPER100KM,
SumDataFields.FCFINAL_LITERPER100TKM,
SumDataFields.FCFINAL_LiterPer100M3KM, SumDataFields.FCFINAL_LiterPer100PassengerKM,
SumDataFields.SPECIFIC_FC, SumDataFields.K_VEHLINE, SumDataFields.K_ENGLINE
SumDataFields.FCFINAL_LiterPer100M3KM,
SumDataFields.FCFINAL_LiterPer100PassengerKM,
SumDataFields.SPECIFIC_FC,
SumDataFields.K_VEHLINE,
SumDataFields.K_ENGLINE
};
......@@ -216,6 +233,9 @@ namespace TUGraz.VectoCore.OutputData
Tuple.Create(SumDataFields.OVCHEVMode, typeof(string))
};
public static readonly Tuple<string, Type>[] PHEVColumns = {
Tuple.Create(SumDataFields.f_equiv, typeof(double))
};
public static readonly Tuple<string, Type>[] VehilceColumns = {
Tuple.Create(SumDataFields.E_VEHICLE_INERTIA, typeof(ConvertedSI)),
......@@ -233,6 +253,8 @@ namespace TUGraz.VectoCore.OutputData
Tuple.Create(SumDataFields.PassengerCount, typeof(double)),
};
public static readonly Tuple<string, Type>[] ClutchColumns = {
Tuple.Create(SumDataFields.E_CLUTCH_LOSS, typeof(ConvertedSI)),
};
......@@ -284,6 +306,9 @@ namespace TUGraz.VectoCore.OutputData
Tuple.Create(SumDataFields.REESS_StartSoC, typeof(double)),
Tuple.Create(SumDataFields.REESS_EndSoC, typeof(double)),
Tuple.Create(SumDataFields.REESS_DeltaEnergy, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.REESS_MinSoC, typeof(double)),
Tuple.Create(SumDataFields.REESS_MaxSoC, typeof(double)),
Tuple.Create(SumDataFields.E_REESS_LOSS, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.E_REESS_T_chg, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.E_REESS_T_dischg, typeof(ConvertedSI)),
......@@ -327,10 +352,10 @@ namespace TUGraz.VectoCore.OutputData
};
public static readonly Tuple<string, Type>[] ElectricEnergyConsumption = {
Tuple.Create(SumDataFields.ElectricEnergyConsumption_total, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.ElectricEnergyConsumption_KM, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.ElectricEnergyConsumption_TKM, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.ElectricEnergyConsumption_M3KM, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.EC_el_final, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.EC_el_final_KM, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.EC_el_final_TKM, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.EC_el_final_M3KM, typeof(ConvertedSI)),
Tuple.Create(SumDataFields.ElectricEnergyConsumption_PKM, typeof(ConvertedSI)),
};
......@@ -368,9 +393,9 @@ namespace TUGraz.VectoCore.OutputData
internal readonly DataTable Table;
private readonly ISummaryWriter _sumWriter;
protected HashSet<string> FcCols = new HashSet<string>();
protected HashSet<string> GearColumns = new HashSet<string>();
protected HashSet<string> AuxColumns = new HashSet<string>();
protected IList<string> FcCols = new List<string>();
protected IList<string> GearColumns = new List<string>();
protected IList<string> AuxColumns = new List<string>();
/// <summary>
......@@ -383,8 +408,8 @@ namespace TUGraz.VectoCore.OutputData
Table = new DataTable();
//InitTableColumns();
CreateColumns(CommonColumns);
CreateColumns(CO2Columns);
CreateColumns(ElectricEnergyConsumption);
}
public void RegisterComponent(VectoSimulationComponent component, VectoRunData runData)
......@@ -393,6 +418,7 @@ namespace TUGraz.VectoCore.OutputData
case ICombustionEngine _:
CreateColumns(CombustionEngineColumns);
UpdateTableColumns(runData.EngineData);
CreateColumns(CO2Columns);
break;
case BusAuxiliariesAdapter _:
CreateColumns(BusAuxiliariesSignals);
......@@ -446,6 +472,11 @@ namespace TUGraz.VectoCore.OutputData
CreateColumns(BusVehicleColumns);
}
if (runData.JobType == VectoSimulationJobType.ParallelHybridVehicle ||
runData.JobType == VectoSimulationJobType.IHPC) {
CreateColumns(PHEVColumns);
}
if (runData.OVCMode != VectoRunData.OvcHevMode.NotApplicable) {
CreateColumns(OVCModeColumns);
}
......@@ -457,9 +488,11 @@ namespace TUGraz.VectoCore.OutputData
CreateElectricMotorColumns(c4, runData, ElectricMotorColumns);
break;
case IElectricEnergyStorage c5 when c5 is BatterySystem:
CreateColumns(ElectricEnergyConsumption.Where(x => runData.VehicleData.VehicleCategory.IsBus() || x.Item1 != SumDataFields.ElectricEnergyConsumption_PKM).ToArray());
CreateColumns(BatteryColumns);
break;
case IElectricEnergyStorage _:
CreateColumns(ElectricEnergyConsumption.Where(x => runData.VehicleData.VehicleCategory.IsBus() || x.Item1 != SumDataFields.ElectricEnergyConsumption_PKM).ToArray());
CreateColumns(BatteryColumns);
break;
case IElectricSystem _:
......@@ -500,10 +533,12 @@ namespace TUGraz.VectoCore.OutputData
private void CreateGearTimeShareColumns(GearList gears)
{
lock (Table) {
var gearColNames = gears
.Select(x => string.Format(SumDataFields.TIME_SHARE_PER_GEAR_FORMAT, x.Gear))
.Concat(new[] { string.Format(SumDataFields.TIME_SHARE_PER_GEAR_FORMAT, 0) }).Distinct()
var gearNumbers = new uint[] { 0 }.Concat(gears.Select(x => x.Gear)).Distinct().OrderBy(x => x);
var gearColNames = gearNumbers
.Select(x => string.Format(SumDataFields.TIME_SHARE_PER_GEAR_FORMAT, x))
.Where(x => !Table.Columns.Contains(x)).Select(x => new DataColumn(x, typeof(ConvertedSI)))
.ToArray();
Table.Columns.AddRange(gearColNames);
......@@ -611,7 +646,7 @@ namespace TUGraz.VectoCore.OutputData
SumDataFields.ALTITUDE_DELTA,
});
cols.AddRange(FcCols);
cols.AddRange(FcCols.Reverse());
cols.AddRange(new[] {
SumDataFields.CO2_KM,
......@@ -628,12 +663,28 @@ namespace TUGraz.VectoCore.OutputData
});
cols.AddRange(new [] {
SumDataFields.ElectricEnergyConsumption_total,
SumDataFields.ElectricEnergyConsumption_KM,
SumDataFields.ElectricEnergyConsumption_TKM,
SumDataFields.ElectricEnergyConsumption_M3KM,
SumDataFields.EC_el_final,
SumDataFields.EC_el_final_KM,
SumDataFields.EC_el_final_TKM,
SumDataFields.EC_el_final_M3KM,
SumDataFields.ElectricEnergyConsumption_PKM,
});
cols.AddRange( new [] {
SumDataFields.f_equiv,
});
cols.AddRange(new[] {
SumDataFields.REESS_StartSoC,
SumDataFields.REESS_EndSoC,
SumDataFields.REESS_DeltaEnergy,
SumDataFields.REESS_MinSoC,
SumDataFields.REESS_MaxSoC,
SumDataFields.E_REESS_LOSS,
SumDataFields.E_REESS_T_chg,
SumDataFields.E_REESS_T_dischg,
SumDataFields.E_REESS_int_chg,
SumDataFields.E_REESS_int_dischg,
});
cols.AddRange(AuxColumns.OrderBy(x => x));
cols.AddRange(new[] {
SumDataFields.E_AUX,
......@@ -708,19 +759,7 @@ namespace TUGraz.VectoCore.OutputData
SumDataFields.AIRDRAG_CERTIFICATION_NUMBER,
SumDataFields.AIRDRAG_CERTIFICATION_METHOD,
});
cols.AddRange(GearColumns.OrderBy(x => x));
cols.AddRange(new[] {
SumDataFields.REESS_StartSoC,
SumDataFields.REESS_EndSoC,
SumDataFields.REESS_DeltaEnergy,
SumDataFields.E_REESS_LOSS,
SumDataFields.E_REESS_T_chg,
SumDataFields.E_REESS_T_dischg,
SumDataFields.E_REESS_int_chg,
SumDataFields.E_REESS_int_dischg,
});
cols.AddRange(GearColumns);
return cols.Where(x => Table.Columns.Contains(x)).ToArray();
}
......@@ -885,10 +924,12 @@ namespace TUGraz.VectoCore.OutputData
Table.Columns.Add(col);
col.SetOrdinal(Table.Columns.IndexOf(SumDataFields.ALTITUDE_DELTA) + 1);
FcCols.Add(colName);
}
}
}
}
}
/// <summary>
......@@ -1052,15 +1093,15 @@ namespace TUGraz.VectoCore.OutputData
// } else {
// if (runData.ElectricMachinesData.Count > 0) {
// //lock (Table) {
// // if (!Table.Columns.Contains(SumDataFields.ElectricEnergyConsumption_KM)) {
// // if (!Table.Columns.Contains(SumDataFields.EC_el_final_KM)) {
// // lock (_tableLock) {
// // var col = Table.Columns.Add(SumDataFields.ElectricEnergyConsumption_KM, typeof(ConvertedSI));
// // var col = Table.Columns.Add(SumDataFields.EC_el_final_KM, typeof(ConvertedSI));
// // col.SetOrdinal(Table.Columns[SumDataFields.CO2_KM].Ordinal);
// // }
// // }
// //}
// //row[SumDataFields.ElectricEnergyConsumption_KM] =
// //row[SumDataFields.EC_el_final_KM] =
// // (-modData.TimeIntegral<WattSecond>(ModalResultField.P_reess_int) / modData.Distance).Cast<JoulePerMeter>().ConvertToKiloWattHourPerKiloMeter();
// }
// }
......
......@@ -6,6 +6,7 @@ using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
......@@ -67,6 +68,7 @@ public class LorrySimulation
private const string Group5_PEV_E3 = @"HeavyLorry\PEV\Group5_ PEV_E3_ES_Standard.xml";
private const string Group2_HEV_IEPC_S_StdVal = @"HeavyLorry\S-HEV\Group2_HEV_IEPC_S_standard_values.xml";
private const string ConventionalHeavyLorry = @"HeavyLorry\Conventional\Group5_Conv_ES_Standard.xml";
private StandardKernel _kernel;
......@@ -81,7 +83,7 @@ public class LorrySimulation
}
//Conventional
[TestCase(@"HeavyLorry\Conventional\Group5_Conv_ES_Standard.xml", TestName = "Stefan_Conv")]
[TestCase(ConventionalHeavyLorry, TestName = "Stefan_Conv")]
//S-HEV
[TestCase(Group5_HEV_S2_OVC)]
[TestCase(@"HeavyLorry\S-HEV\Group2_HEV_S3_stefan.xml", TestName = "Stefan_S2")]
......@@ -149,6 +151,8 @@ public class LorrySimulation
var mrfSchema = XMLValidator.GetXMLSchema(XmlDocumentType.ManufacturerReport);
XDocument.Load(mrfPath).Validate(mrfSchema, (sender, args) => Assert.Fail(args.Message));
XDocument.Load(cifPath).Validate(cifSchema, (sender, args) => Assert.Fail(args.Message));
VSUM_order_test(fileWriter.SumFileName, jobContainer.Runs.First().Run.GetContainer().RunData);
}
private ISimulatorFactory GetSimulatorFactory(string filePath, out IDeclarationInputDataProvider dataProvider,
......@@ -177,22 +181,7 @@ public class LorrySimulation
// .ToHashSet();
var filePath = Path.Combine(BASE_DIR, jobFile);
SummaryDataContainer sumDataContainer;
var jobContainer = GetJobContainer(jobFile, null, out var fileWriter, out var runs, out sumDataContainer, false);
var run = runs.First();
jobContainer.AddRun(run);
run.GetContainer().ModalData[ModalResultField.time] = 1.SI<Second>(); //fake duration for run
run.GetContainer().ModalData[ModalResultField.Gear] = 2;
run.GetContainer().ModalData.CommitSimulationStep();
run.GetContainer().FinishSingleSimulationRun(null);
var modFileName = fileWriter.GetModDataFileName(run.RunName, run.CycleName, run.RunSuffix);
var sumFileName = fileWriter.SumFileName;
Assert.IsTrue(File.Exists(modFileName));
var mod = VectoCSVFile.Read(modFileName, false, true);
GetEmptySumAndModData(jobFile, out var sumDataContainer, out var run, out var modData, out var sumData);
var columnsWithoutUnitHashSet = new HashSet<string>();
foreach (var col in columnsWithoutUnit) {
......@@ -204,7 +193,7 @@ public class LorrySimulation
List<string> columnHeaders = new List<string>();
foreach (DataColumn modColumn in mod.Columns) {
foreach (DataColumn modColumn in modData.Columns) {
columnHeaders.Add(modColumn.Caption);
}
......@@ -233,38 +222,214 @@ public class LorrySimulation
}
}
//[Test]
//public void HEVS4()
//{
// var jobContainer = GetJobContainer(HeavylorryGroup2HevS4XML, 6, out var fileWriter, out var runs, out var sumDataContainer);
// //var simFactory = GetSimulatorFactory(Path.Combine(BASE_DIR, HeavylorryGroup2HevS4XML), out var dataProvider,
// // out var fileWriter, out var mockSumWriter);
private void GetEmptySumAndModData(string jobFile, out SummaryDataContainer sumDataContainer, out IVectoRun run,
out TableData modData, out TableData sumData)
{
var filePath = Path.Combine(BASE_DIR, jobFile);
sumDataContainer = null;
var jobContainer = GetJobContainer(jobFile, null, out var fileWriter, out var runs, out sumDataContainer, false);
//sumDataContainer.Finish();
run = runs.First();
jobContainer.AddRun(run);
run.GetContainer().ModalData[ModalResultField.time] = 1.SI<Second>(); //fake duration for run
run.GetContainer().ModalData[ModalResultField.Gear] = 2;
run.GetContainer().ModalData.CommitSimulationStep();
run.GetContainer().FinishSingleSimulationRun(null);
var modFileName = fileWriter.GetModDataFileName(run.RunName, run.CycleName, run.RunSuffix);
var sumFileName = fileWriter.SumFileName;
Assert.IsTrue(File.Exists(modFileName));
Assert.IsTrue(File.Exists(sumFileName));
modData = VectoCSVFile.Read(modFileName, false, true);
sumData = VectoCSVFile.Read(sumFileName, false, true);
}
// foreach (var vectoRun in runs) {
// var rd = vectoRun.GetContainer().RunData;
// }
// var container = runs.First().GetContainer();
// var runData = container.RunData;
public void VSUM_order_test(string fileName, VectoRunData runData)
{
List<string> GbxTimeShareFields()
{
// runs = runs.Where(run => {
// var rd = run.GetContainer().RunData;
// return rd.Mission.MissionType == MissionType.UrbanDelivery && rd.Loading == LoadingType.ReferenceLoad;
// }).ToList();
var gbxTimeShareFields = new List<string> { };
if (runData.GearboxData?.Gears != null && runData.GearboxData.Gears.Count > 0) {
for (var i = 0; i <= runData.GearboxData.Gears.Count; i++)
{
gbxTimeShareFields.Add(string.Format(SumDataFields.TIME_SHARE_PER_GEAR_FORMAT, i));
}
// jobContainer.AddRun(runs.Single());
}
return gbxTimeShareFields;
}
// Assert.AreEqual(1, jobContainer.Runs.Count);
#region local helper
void AssertColumnNotPresent(TableData tableData, List<string> notPresent)
{
foreach (var name in notPresent) {
Assert.IsFalse(tableData.Columns.Contains(name), name);
}
}
// var modData = ((ModalDataContainer)((VehicleContainer)runs.Single().GetContainer()).ModData).Data;
// jobContainer.Execute(false);
// WaitAndAssertSuccess(jobContainer, fileWriter);
void AssertOrder(TableData tableData, List<string> ordered)
{
}
void SearchForPattern(TableData tableData, List<string> pattern)
{
if (pattern.Count == 0) {
return;
}
var comparePattern = false;
using (var enumerator = pattern.GetEnumerator()) {
enumerator.MoveNext();
foreach (DataColumn column in tableData.Columns)
{
if (!comparePattern && column.ColumnName == enumerator.Current)
{
comparePattern = true;
}
// //Pneumatic system data test
// var ps = runData.Aux.Where(x => x.ID == Constants.Auxiliaries.IDs.PneumaticSystem).Single();
// Assume.That(ps.IsFullyElectric);
// Assert.That(ps.ConnectToREESS);
//}
if (comparePattern) {
TestContext.Write(column.ColumnName + "|" + enumerator.Current);
if (column.ColumnName != enumerator.Current) {
TestContext.WriteLine("X");
Assert.Fail($"expected {enumerator.Current} got {column.ColumnName}");
}
TestContext.WriteLine("OK");
if (!enumerator.MoveNext()) {
return;
}
}
}
Assert.Fail($"Reached end of table searching for {enumerator.Current}");
}
}
#endregion
var sumData = VectoCSVFile.Read(fileName, false, true);
var fcFields = new List<string>() {
//FUEL
SumDataFields.FCMAP_H,
SumDataFields.FCMAP_KM,
SumDataFields.FCNCVC_H,
SumDataFields.FCNCVC_KM,
SumDataFields.FCWHTCC_H,
SumDataFields.FCWHTCC_KM,
SumDataFields.FCESS_H,
SumDataFields.FCESS_KM,
SumDataFields.FCESS_H_CORR,
SumDataFields.FCESS_KM_CORR,
SumDataFields.FC_BusAux_PS_CORR_H,
SumDataFields.FC_BusAux_PS_CORR_KM,
SumDataFields.FC_BusAux_ES_CORR_H,
SumDataFields.FC_BusAux_ES_CORR_KM,
SumDataFields.FCWHR_H_CORR,
SumDataFields.FCWHR_KM_CORR,
SumDataFields.FC_HEV_SOC_H,
SumDataFields.FC_HEV_SOC_KM,
SumDataFields.FC_HEV_SOC_CORR_H,
SumDataFields.FC_HEV_SOC_CORR_KM,
SumDataFields.FC_AUXHTR_H,
SumDataFields.FC_AUXHTR_KM,
SumDataFields.FC_AUXHTR_H_CORR,
SumDataFields.FC_AUXHTR_KM_CORR,
SumDataFields.FCFINAL_H,
SumDataFields.FCFINAL_KM,
SumDataFields.FCFINAL_LITERPER100KM,
SumDataFields.FCFINAL_LITERPER100TKM,
SumDataFields.FCFINAL_LiterPer100M3KM,
SumDataFields.FCFINAL_LiterPer100PassengerKM,
SumDataFields.SPECIFIC_FC,
SumDataFields.K_VEHLINE,
SumDataFields.K_ENGLINE,
};
var CO2fields = new List<string> {
SumDataFields.CO2_KM,
SumDataFields.CO2_TKM,
SumDataFields.CO2_M3KM,
};
var EC_el = new List<string> {
SumDataFields.EC_el_final,
SumDataFields.EC_el_final_KM,
SumDataFields.EC_el_final_TKM,
SumDataFields.EC_el_final_M3KM,
};
var p_hev_fields = new List<string> {
SumDataFields.f_equiv
};
var REESS_fields = new List<string> {
SumDataFields.REESS_StartSoC,
SumDataFields.REESS_EndSoC,
SumDataFields.REESS_DeltaEnergy,
SumDataFields.REESS_MinSoC,
SumDataFields.REESS_MaxSoC,
SumDataFields.E_REESS_LOSS,
SumDataFields.E_REESS_T_chg,
SumDataFields.E_REESS_T_dischg,
SumDataFields.E_REESS_int_chg,
SumDataFields.E_REESS_int_dischg,
};
if (runData.JobType == VectoSimulationJobType.ConventionalVehicle) {
var gbxTimeShareFields = GbxTimeShareFields();
SearchForPattern(sumData, gbxTimeShareFields);
if (runData.EngineData.Fuels.Count > 1) {
foreach (var fuel in runData.EngineData.Fuels.Select(f => f.FuelData.FuelType.GetLabel())) {
SearchForPattern(sumData, new List<string>(fcFields.Select(fc => string.Format(fc, fuel)).Concat(CO2fields)));
}
} else {
SearchForPattern(sumData, new List<string>(fcFields.Select(fc => string.Format(fc, "")).Concat(CO2fields)));
}
}
if (runData.JobType is VectoSimulationJobType.BatteryElectricVehicle or VectoSimulationJobType.IEPC_E) {
//PEV CHECKS
AssertColumnNotPresent(sumData, CO2fields);
AssertColumnNotPresent(sumData, fcFields);
SearchForPattern(sumData, new List<string>(EC_el.Concat(REESS_fields)));
SearchForPattern(sumData, GbxTimeShareFields());
}
if (runData.JobType is VectoSimulationJobType.SerialHybridVehicle or VectoSimulationJobType.IEPC_S) {
if (runData.EngineData.Fuels.Count > 1) {
foreach (var fuel in runData.EngineData.Fuels.Select(f => f.FuelData.FuelType.GetLabel())) {
SearchForPattern(sumData, new List<string>(fcFields.Select(fc => string.Format(fc, fuel)).Concat(CO2fields)));
}
} else {
SearchForPattern(sumData, new List<string>(fcFields.Select(fc => string.Format(fc, "")).Concat(CO2fields)));
}
SearchForPattern(sumData, new List<string>(EC_el.Concat(REESS_fields)));
SearchForPattern(sumData, GbxTimeShareFields());
}
if (runData.JobType is VectoSimulationJobType.ParallelHybridVehicle or VectoSimulationJobType.IHPC) {
if (runData.EngineData.Fuels.Count > 1) {
foreach (var fuel in runData.EngineData.Fuels.Select(f => f.FuelData.FuelType.GetLabel())) {
SearchForPattern(sumData, new List<string>(fcFields.Select(fc => string.Format(fc, fuel)).Concat(CO2fields)));
}
}
else {
SearchForPattern(sumData, new List<string>(fcFields.Select(fc => string.Format(fc, "")).Concat(CO2fields)));
}
SearchForPattern(sumData, new List<string>(EC_el.Concat(p_hev_fields).Concat(REESS_fields)));
SearchForPattern(sumData,GbxTimeShareFields());
}
}
[TestCase(@"HeavyLorry\S-HEV\Group2_HEV_S4_invalid_pto.xml")]
......@@ -334,9 +499,37 @@ public class LorrySimulation
jobContainer.AddRun(runs.Single());
var modData = ((ModalDataContainer)((VehicleContainer)runs.Single().GetContainer()).ModData).Data;
jobContainer.Execute(false);
WaitAndAssertSuccess(jobContainer, fileWriter);
}
[TestCase(Group5_HEV_P2_OVC)]
public void PHEV_CD_CS_weighted(string jobFile)
{
var jobContainer = GetJobContainer(jobFile, null, out var fileWriter, out var runs, out var sumDataContainer);
Assert.AreEqual(0, runs.Count(r => r.GetContainer().RunData.OVCMode == VectoRunData.OvcHevMode.NotApplicable));
runs = runs.Where(run => {
var rd = run.GetContainer().RunData;
return (rd.OVCMode == VectoRunData.OvcHevMode.ChargeSustaining || rd.OVCMode == VectoRunData.OvcHevMode.ChargeDepleting) &&
rd.Mission.MissionType == MissionType.RegionalDelivery && rd.Loading == LoadingType.ReferenceLoad;
}).ToList();
Assert.AreEqual(2, runs.Count);
foreach (var run in runs) {
jobContainer.AddRun(run);
}
SetResultCountInReport(2, runs.First().GetContainer().RunData.Report);
jobContainer.Execute(false);
WaitAndAssertSuccess(jobContainer, fileWriter);
}
[TestCase(Group5_HEV_P2_OVC, 20)]
[TestCase(Group5_HEV_P3_OVC, 20)]
[TestCase(Group5_HEV_P4_OVC, 20)]
......@@ -676,27 +869,51 @@ public class LorrySimulation
jobContainer.AddRun(simulatedRun);
SetResultCountInReport(1, simulatedRun.GetContainer().RunData.Report);
if (writeReports) {
SetResultCountInReport(1, simulatedRun.GetContainer().RunData.Report);
}
jobContainer.Execute(true);
WaitAndAssertSuccess(jobContainer, fileWriter);
}
public void SetResultCountInReport(int count, IDeclarationReport report)
private void SetResultCountInReport(int count, IDeclarationReport report)
{
if (report is XMLDeclarationReport09 rep09) {
FieldInfo[] fields = rep09.GetType().GetFields(
BindingFlags.NonPublic |
BindingFlags.Instance);
fields.First().SetValue(rep09, count);
GetField("_resultCount", rep09.GetType()).SetValue(rep09, count);
return;
}
Assert.Fail("Reflection failed");
}
private FieldInfo GetField(string name, Type type)
{
bool found = false;
while (!found) {
FieldInfo[] fields = type.GetFields(
BindingFlags.NonPublic |
BindingFlags.Instance);
var field = fields.FirstOrDefault(f => f.Name == name);
if (field == null) {
type = type.BaseType;
if (type == null) {
Assert.Fail("Field not found");
}
} else {
return field;
}
}
return null;
}
public void DisableIterativeRuns(ISimulatorFactory factory)
{
factory.ModifyRunData = (rd) => rd.IterativeRunStrategy.Enabled = false;
......@@ -841,7 +1058,7 @@ public class LorrySimulation
//runsFactory.ActualModalData = true;
runsFactory.SerializeVectoRunData = true;
runsFactory.WriteModalResults = true;
var sumWriter = new MockSumWriter();
var sumWriter = new SummaryDataContainer(fileWriter);
var jobContainer = new JobContainer(sumWriter);
runsFactory.SumData = sumWriter;
......
......@@ -8,7 +8,7 @@
"Body": {
"SavedInDeclMode": true,
"VehCat": "RigidTruck",
"LegislativeClass": "Unknown",
"LegislativeClass": "N3",
"CurbWeight": 4670.0,
"CurbWeightExtra": 1900.0,
"Loading": 3020.0,
......
......@@ -8,7 +8,7 @@
"Body": {
"SavedInDeclMode": true,
"VehCat": "RigidTruck",
"LegislativeClass": "Unknown",
"LegislativeClass": "N3",
"CurbWeight": 4670.0,
"CurbWeightExtra": 1900.0,
"Loading": 3020.0,
......
......@@ -8,7 +8,7 @@
"Body": {
"SavedInDeclMode": true,
"VehCat": "RigidTruck",
"LegislativeClass": "Unknown",
"LegislativeClass": "N3",
"CurbWeight": 4670.0,
"CurbWeightExtra": 1900.0,
"Loading": 3020.0,
......
......@@ -8,7 +8,7 @@
"Body": {
"SavedInDeclMode": true,
"VehCat": "RigidTruck",
"LegislativeClass": "Unknown",
"LegislativeClass": "N3",
"CurbWeight": 4670.0,
"CurbWeightExtra": 1900.0,
"Loading": 3020.0,
......
......@@ -8,7 +8,7 @@
"Body": {
"SavedInDeclMode": true,
"VehCat": "RigidTruck",
"LegislativeClass": "Unknown",
"LegislativeClass": "N3",
"CurbWeight": 4670.0,
"CurbWeightExtra": 1900.0,
"Loading": 3020.0,
......
......@@ -47,7 +47,7 @@
"VehicleHeight": 3.0,
"InitialSoC": 80.0,
"PowertrainConfiguration": "IEPC_E",
"IEPC": "E:\\QUAM\\Workspace\\VECTO_DEV_Buses\\VectoCore\\VectoCoreTest\\TestData\\Integration\\DeclarationMode\\2nd_AmendmDeclMode\\JSON\\PEV\\GenericIEPC\\IEPC_Gbx3Speed-Whl1\\GenericIEPC_Gbx3Whl1.viepc",
"IEPC": "GenericIEPC_Gbx3Whl1.viepc",
"Batteries": [
{
"NumPacks": 1,
......
......@@ -8,7 +8,7 @@
"Body": {
"SavedInDeclMode": true,
"VehCat": "RigidTruck",
"LegislativeClass": "Unknown",
"LegislativeClass": "N3",
"CurbWeight": 4670.0,
"CurbWeightExtra": 1900.0,
"Loading": 3020.0,
......
......@@ -8,7 +8,7 @@
"Body": {
"SavedInDeclMode": true,
"VehCat": "RigidTruck",
"LegislativeClass": "M3",
"LegislativeClass": "N3",
"CurbWeight": 4670.0,
"CurbWeightExtra": 0.0,
"MassMax": 11.99,
......
......@@ -8,7 +8,7 @@
"Body": {
"SavedInDeclMode": true,
"VehCat": "RigidTruck",
"LegislativeClass": "Unknown",
"LegislativeClass": "N3",
"CurbWeight": 4670.0,
"CurbWeightExtra": 1900.0,
"Loading": 3020.0,
......
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