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

Skip to content
Snippets Groups Projects
Commit f57601ed authored by Harald MARTINI's avatar Harald MARTINI
Browse files

added helper method to get Architecture ID from jobtype and em position

parent 45014ab6
No related branches found
No related tags found
No related merge requests found
......@@ -31,6 +31,8 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Models.SimulationComponent.Impl;
......@@ -89,7 +91,101 @@ namespace TUGraz.VectoCommon.InputData
throw new ArgumentOutOfRangeException(nameof(jobType), jobType, null);
}
}
public static ArchitectureID GetArchitectureID(this VectoSimulationJobType jobType, PowertrainPosition em)
{
switch (jobType) {
case VectoSimulationJobType.ConventionalVehicle:
case VectoSimulationJobType.EngineOnlySimulation:
return ArchitectureID.UNKNOWN;
case VectoSimulationJobType.ParallelHybridVehicle:
return GetPHEVArchitectureId(em);
case VectoSimulationJobType.SerialHybridVehicle:
return GetSHEVArchitecureID(em);
case VectoSimulationJobType.BatteryElectricVehicle:
return GetPEVArchId(emPos: em);
case VectoSimulationJobType.IEPC_E:
case VectoSimulationJobType.IEPC_S:
return GetIepcArchitectureId(jobType, em);
case VectoSimulationJobType.IHPC:
break;
default:
throw new ArgumentOutOfRangeException(nameof(jobType), jobType, null);
}
return ArchitectureID.UNKNOWN;
}
private static ArchitectureID GetIepcArchitectureId(VectoSimulationJobType jobType, PowertrainPosition em)
{
if (em != PowertrainPosition.IEPC) {
throw new ArgumentException(nameof(em));
}
switch (jobType) {
case VectoSimulationJobType.IEPC_E:
return ArchitectureID.E_IEPC;
case VectoSimulationJobType.IEPC_S:
return ArchitectureID.S_IEPC;
default:
throw new ArgumentException(nameof(jobType));
}
}
private static ArchitectureID GetPHEVArchitectureId(PowertrainPosition emPos)
{
switch (emPos) {
case PowertrainPosition.HybridP1:
return ArchitectureID.P1;
case PowertrainPosition.HybridP2:
return ArchitectureID.P2;
case PowertrainPosition.HybridP2_5:
return ArchitectureID.P2_5;
case PowertrainPosition.HybridP3:
return ArchitectureID.P3;
case PowertrainPosition.HybridP4:
return ArchitectureID.P4;
default:
throw new ArgumentOutOfRangeException(nameof(emPos));
}
}
private static ArchitectureID GetSHEVArchitecureID(PowertrainPosition emPos)
{
switch (emPos) {
case PowertrainPosition.BatteryElectricE4:
return ArchitectureID.S4;
case PowertrainPosition.BatteryElectricE3:
return ArchitectureID.S3;
case PowertrainPosition.BatteryElectricE2:
return ArchitectureID.S2;
default:
throw new ArgumentOutOfRangeException(nameof(emPos));
}
}
private static ArchitectureID GetPEVArchId(PowertrainPosition emPos)
{
switch (emPos) {
case PowertrainPosition.BatteryElectricE4:
return ArchitectureID.E4;
case PowertrainPosition.BatteryElectricE3:
return ArchitectureID.E3;
case PowertrainPosition.BatteryElectricE2:
return ArchitectureID.E2;
default:
throw new ArgumentOutOfRangeException(nameof(emPos));
}
}
}
public interface IHybridStrategyParameters
{
......
......@@ -5,7 +5,7 @@ using TUGraz.VectoCommon.Utils;
namespace TUGraz.VectoCommon.InputData {
public enum PowertrainPosition
{
HybridPositionNotSet, // this has to be the first entrie so that it is used as default for not initialized fields!
HybridPositionNotSet, // this has to be the first entry so that it is used as default for not initialized fields!
HybridP0,
HybridP1,
HybridP2,
......
......@@ -340,8 +340,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
public Watt MaxNetPower1 => null;
public Watt MaxNetPower2 => null;
public string ExemptedTechnology => null;
public RegistrationClass? RegisteredClass => RegistrationClass.unknown;
......
......@@ -497,57 +497,35 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
protected virtual IList<IAuxiliaryDeclarationInputData> AuxData()
{
var retVal = new List<IAuxiliaryDeclarationInputData>();
foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) {
foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>())
{
try
{
aux.GetEx("Technology").ToObject<List<string>>();
}
catch (Exception)
{
throw new VectoException(
"Aux: Technology for aux '{0}' list could not be read. Maybe it is a single string instead of a list of strings?",
aux.GetEx<string>("ID"));
}
var type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type"));
var auxData = new DeclarationAuxiliaryDataInputData() {
var auxData = new DeclarationAuxiliaryDataInputData
{
ID = aux.GetEx<string>("ID"),
Type = type,
Technology = new List<string>(),
Technology = aux.GetEx("Technology").ToObject<List<string>>()
};
var tech = aux.GetEx<string>("Technology");
if (auxData.Type == AuxiliaryType.ElectricSystem) {
if (aux["TechList"] == null || aux["TechList"].Any()) {
auxData.Technology.Add("Standard technology");
} else {
auxData.Technology.Add("Standard technology - LED headlights, all");
}
}
if (auxData.Type == AuxiliaryType.SteeringPump) {
auxData.Technology.Add(tech);
}
if (auxData.Type == AuxiliaryType.Fan) {
auxData.Technology.Add(MapLegacyFanTechnologies(tech));
}
retVal.Add(auxData);
}
return retVal;
}
private static string MapLegacyFanTechnologies(string tech)
{
string newTech;
switch (tech) {
case "Crankshaft mounted - Electronically controlled visco clutch (Default)":
newTech = "Crankshaft mounted - Electronically controlled visco clutch";
break;
case "Crankshaft mounted - On/Off clutch":
newTech = "Crankshaft mounted - On/off clutch";
break;
case "Belt driven or driven via transm. - On/Off clutch":
newTech = "Belt driven or driven via transm. - On/off clutch";
break;
default:
newTech = tech;
break;
}
return newTech;
return retVal;
}
#endregion
......@@ -580,34 +558,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
public JSONInputDataV3(JObject data, string filename, bool tolerateMissing = false)
: base(data, filename, tolerateMissing) { }
protected override IList<IAuxiliaryDeclarationInputData> AuxData()
{
var retVal = new List<IAuxiliaryDeclarationInputData>();
foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) {
try {
aux.GetEx("Technology").ToObject<List<string>>();
} catch (Exception) {
throw new VectoException(
"Aux: Technology for aux '{0}' list could not be read. Maybe it is a single string instead of a list of strings?",
aux.GetEx<string>("ID"));
}
var type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type"));
var auxData = new DeclarationAuxiliaryDataInputData {
ID = aux.GetEx<string>("ID"),
Type = type,
Technology = aux.GetEx("Technology").ToObject<List<string>>()
};
retVal.Add(auxData);
}
return retVal;
}
}
......
......@@ -617,7 +617,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
_entries = entries;
IList<ElectricMachineEntry<IElectricMotorDeclarationInputData>> IElectricMachinesDeclarationInputData.Entries =>
_entries.Cast<ElectricMachineEntry<IElectricMotorDeclarationInputData>>().ToList();
_entries.Select(entry => new ElectricMachineEntry<IElectricMotorDeclarationInputData>() {
ElectricMachine = entry.ElectricMachine,
ADC = entry.ADC,
Count = entry.Count,
MechanicalTransmissionEfficiency = entry.MechanicalTransmissionEfficiency,
MechanicalTransmissionLossMap = entry.MechanicalTransmissionLossMap,
Position = entry.Position,
RatioADC = entry.RatioADC,
RatioPerGear = entry.RatioPerGear
}).ToList();
//_entries.Cast<ElectricMachineEntry<IElectricMotorDeclarationInputData>>().ToList();
public virtual IList<ElectricMachineEntry<IElectricMotorEngineeringInputData>> Entries =>
_entries;
......
......@@ -91,6 +91,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
return _batteries ?? (_batteries = ReadBatteries());
}
public override ArchitectureID ArchitectureID
{
get
{
return VehicleType.GetArchitectureID(GetElectricMachines().Entries
.First(e => e.Position != PowertrainPosition.GEN).Position);
}
}
public override VectoSimulationJobType VehicleType
{
get {
......@@ -339,7 +348,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
public int? NumSteeredAxles => null;
XmlNode IVehicleDeclarationInputData.XMLSource => null;
public virtual string VehicleTypeApprovalNumber { get; }
public ArchitectureID ArchitectureID { get; }
public virtual ArchitectureID ArchitectureID { get; }
public bool OvcHev { get; }
public Watt MaxChargingPower { get; }
......@@ -497,8 +506,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
public virtual Watt MaxNetPower1 => null;
public virtual Watt MaxNetPower2 => null;
public virtual string ExemptedTechnology => null;
public virtual RegistrationClass? RegisteredClass => RegistrationClass.unknown;
......
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