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 e022ce4a authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

working on single-bus implementation

parent 188c7e7a
No related branches found
No related tags found
No related merge requests found
Showing
with 824 additions and 249 deletions
......@@ -279,6 +279,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
.WhenInjectedExactlyInto<DeclarationModeSingleBusRunDataFactory.PEV_E4>();
Bind<ISingleBusDeclarationDataAdapter>().To<DeclarationDataAdapterSingleBus.PEV_E_IEPC>()
.WhenInjectedExactlyInto<DeclarationModeSingleBusRunDataFactory.PEV_E_IEPC>();
Bind<ISingleBusDeclarationDataAdapter>().To<DeclarationDataAdapterSingleBus.Exempted>()
.WhenInjectedExactlyInto<DeclarationModeSingleBusRunDataFactory.Exempted>();
#endregion
}
......
......@@ -123,10 +123,11 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment);
// serial hybrid strategy
HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData,
SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType);
// paralllel hybrid strategy
HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData,
SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode,
LoadingType loading, VehicleClass vehicleClass, MissionType missionType, TableData boostingLimitations,
......@@ -191,7 +192,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
}
public interface ISingleBusDeclarationDataAdapter
public interface ISingleBusDeclarationDataAdapter : IDeclarationDataAdapter
{
AirdragData CreateAirdragData(IVehicleDeclarationInputData completedVehicle, Mission mission);
CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle,
......@@ -203,7 +204,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData,
VectoRunData runData,
IShiftPolygonCalculator shiftPolygonCalc);
RetarderData CreateRetarderData(IRetarderInputData retarderData);
ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed);
IEnumerable<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData,
......@@ -213,5 +213,15 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
VehicleData CreateVehicleData(ISingleBusInputDataProvider vehicle, Segment segment, Mission mission,
KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational);
// serial hybrid strategy
HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData,
SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType);
// parallel hybrid strategy
HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData,
SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode,
LoadingType loading, VehicleClass vehicleClass, MissionType missionType, TableData boostingLimitations,
GearboxData gearboxData, CombustionEngineData engineData, ArchitectureID architectureId);
}
}
\ No newline at end of file
......@@ -190,7 +190,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
public abstract class Hybrid : PrimaryBusBase
{
private IElectricStorageAdapter _eletricStorageAdapter = new ElectricStorageAdapter();
private IElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter();
#region Overrides of PrimaryBusBase
......@@ -203,8 +203,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData)
{
var batteryData = _eletricStorageAdapter.CreateBatteryData(componentsElectricStorage, jobType, ovc);
var superCapData = _eletricStorageAdapter.CreateSuperCapData(componentsElectricStorage);
var batteryData = _electricStorageAdapter.CreateBatteryData(componentsElectricStorage, jobType, ovc);
var superCapData = _electricStorageAdapter.CreateSuperCapData(componentsElectricStorage);
if (batteryData != null) {
setBatteryData(batteryData);
......
......@@ -4,15 +4,19 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TUGraz.VectoCommon.BusAuxiliaries;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.StrategyDataAdapter;
using TUGraz.VectoCore.Models.Declaration;
using TUGraz.VectoCore.Models.Simulation.Data;
using TUGraz.VectoCore.Models.SimulationComponent;
using TUGraz.VectoCore.Models.SimulationComponent.Data;
using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.Battery;
using TUGraz.VectoCore.Models.SimulationComponent.Impl;
namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus
{
......@@ -23,18 +27,22 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus
public static readonly GearboxType[] SupportedGearboxTypes =
{ GearboxType.MT, GearboxType.AMT, GearboxType.ATPowerSplit, GearboxType.ATSerial };
private IAirdragDataAdapter _airdragDataAdapter = new SingleBusAirdragDataAdapter();
private IGearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(new TorqueConverterDataAdapter());
private ICompletedBusAuxiliaryDataAdapter _busAuxiliaryDataAdapter =
new SpecificCompletedBusAuxiliaryDataAdapter();
private IDriverDataAdapter _driverDataAdapter = new PrimaryBusDriverDataAdapter();
private SingleBusVehicleDataAdapter _vehicleDataAdapter = new SingleBusVehicleDataAdapter();
private IAxleGearDataAdapter _axleGearDataAdapter = new AxleGearDataAdapter();
private IDriverDataAdapter _driverDataAdapter = new PrimaryBusDriverDataAdapter();
private IAngledriveDataAdapter _angledriveDataAdapter = new AngledriveDataAdapter();
private IEngineDataAdapter _engineDataAdapter = new CombustionEngineComponentDataAdapter();
private IRetarderDataAdapter _retarderDataAdapter = new RetarderDataAdapter();
private IAirdragDataAdapter _airdragDataAdapter = new SingleBusAirdragDataAdapter();
private IAngledriveDataAdapter _angledriveDataAdapter = new AngledriveDataAdapter();
protected abstract IEngineDataAdapter EngineDataAdapter { get; }
protected abstract IGearboxDataAdapter GearboxDataAdapter { get; }
protected virtual IElectricMachinesDataAdapter ElectricMachinesDataAdapter => throw new NotImplementedException();
protected abstract IHybridStrategyDataAdapter HybridStrategyDataAdapter { get; }
protected virtual ICompletedBusAuxiliaryDataAdapter AuxDataAdapter { get; } = new SpecificCompletedBusAuxiliaryDataAdapter();
#region Implementation of IDeclarationDataAdapter
......@@ -45,6 +53,26 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus
, allowVocational);
}
public HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, SuperCapData runDataSuperCapData,
Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType)
{
return HybridStrategyDataAdapter.CreateHybridStrategyParameters(runDataBatteryData,
runDataSuperCapData, vehicleMass, ovcMode);
}
public HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, SuperCapData runDataSuperCapData,
Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType,
TableData boostingLimitations, GearboxData gearboxData, CombustionEngineData engineData,
ArchitectureID architectureId)
{
return HybridStrategyDataAdapter.CreateHybridStrategyParameters(
batterySystemData: runDataBatteryData,
superCap: runDataSuperCapData,
ovcMode: ovcMode,
loading: loading,
vehicleClass: vehicleClass,
missionType: missionType, architectureId, engineData, gearboxData, boostingLimitations);
}
#endregion
......@@ -55,81 +83,156 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus
return _airdragDataAdapter.CreateAirdragData(completedVehicle, mission);
}
public CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle,
public virtual CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle,
IEngineModeDeclarationInputData engineMode, Mission mission)
{
return _engineDataAdapter.CreateEngineData(vehicle, engineMode, mission);
return EngineDataAdapter.CreateEngineData(vehicle, engineMode, mission);
}
public DriverData CreateDriverData(Segment segment)
public virtual DriverData CreateDriverData(Segment segment)
{
return _driverDataAdapter.CreateDriverData(segment);
}
public AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gearboxInputData)
public virtual AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gearboxInputData)
{
return _axleGearDataAdapter.CreateDummyAxleGearData(gearboxInputData);
}
public AxleGearData CreateAxleGearData(IAxleGearInputData axleGearInputData)
public virtual AxleGearData CreateAxleGearData(IAxleGearInputData axleGearInputData)
{
return _axleGearDataAdapter.CreateAxleGearData(axleGearInputData);
}
public AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData)
public virtual AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData)
{
return _angledriveDataAdapter.CreateAngledriveData(angledriveData);
}
public GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
public virtual GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
IShiftPolygonCalculator shiftPolygonCalc)
{
return _gearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc,
return GearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc,
SupportedGearboxTypes);
}
public RetarderData CreateRetarderData(IRetarderInputData retarderData)
public virtual RetarderData CreateRetarderData(IRetarderInputData retarderData, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet)
{
return _retarderDataAdapter.CreateRetarderData(retarderData);
return _retarderDataAdapter.CreateRetarderData(retarderData, position);
}
public PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData)
public virtual PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData)
{
throw new NotImplementedException();
throw new VectoException("PTO is not allowed for buses!");
}
public ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio,
public virtual ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio,
PerSecond engineIdlingSpeed)
{
return _gearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, gbx.Type, gbx.Gears.Count);
return GearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, gbx.Type, gbx.Gears.Count);
}
public IEnumerable<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData,
public virtual IEnumerable<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData,
IBusAuxiliariesDeclarationData busAuxInput, MissionType mission,
VehicleClass segment, Meter vehicleLength, int? numSteeredAxles, VectoSimulationJobType jobType)
{
return _busAuxiliaryDataAdapter.CreateAuxiliaryData(auxInputData, busAuxInput, mission, segment,
return AuxDataAdapter.CreateAuxiliaryData(auxInputData, busAuxInput, mission, segment,
vehicleLength, numSteeredAxles, jobType);
}
public IAuxiliaryConfig CreateBusAuxiliariesData(Mission mission,
public virtual IAuxiliaryConfig CreateBusAuxiliariesData(Mission mission,
IVehicleDeclarationInputData primaryVehicle,
IVehicleDeclarationInputData completedVehicle, VectoRunData simulationRunData)
{
return _busAuxiliaryDataAdapter.CreateBusAuxiliariesData(mission, primaryVehicle, completedVehicle,
return AuxDataAdapter.CreateBusAuxiliariesData(mission, primaryVehicle, completedVehicle,
simulationRunData);
}
#endregion
#region Implementation of IDeclarationDataAdapter
public VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission first,
KeyValuePair<LoadingType, Tuple<Kilogram, double?>> keyValuePair, bool allowVocational)
{
throw new VectoException("Not applicable for Single Bus!");
}
public virtual List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(IIEPCDeclarationInputData iepc, Volt averageVoltage)
{
return ElectricMachinesDataAdapter.CreateIEPCElectricMachines(iepc, averageVoltage);
}
public virtual IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits,
Volt averageVoltage, GearList gears = null)
{
return ElectricMachinesDataAdapter.CreateElectricMachines(electricMachines, torqueLimits, averageVoltage, gears);
}
public abstract void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData,
Action<SuperCapData> setSuperCapData);
#endregion
}
public class Conventional : SingleBusBase
{
#region Overrides of SingleBusBase
protected override IEngineDataAdapter EngineDataAdapter { get; } = new CombustionEngineComponentDataAdapter();
protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter());
protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter =>
throw new NotImplementedException();
public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData)
{
throw new NotImplementedException();
}
#endregion
}
public class Conventional : SingleBusBase { }
public abstract class Hybrid : SingleBusBase
{
private IElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter();
protected override IEngineDataAdapter EngineDataAdapter { get; } = new CombustionEngineComponentDataAdapter();
public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData)
{
var batteryData = _electricStorageAdapter.CreateBatteryData(componentsElectricStorage, jobType, ovc);
var superCapData = _electricStorageAdapter.CreateSuperCapData(componentsElectricStorage);
if (batteryData != null) {
setBatteryData(batteryData);
}
if (superCapData != null) {
setSuperCapData(superCapData);
}
public abstract class Hybrid : SingleBusBase { }
if (batteryData != null && superCapData != null) {
throw new VectoException("Either battery or super cap must be provided");
}
}
}
public class SerialHybrid : Hybrid { }
public class SerialHybrid : Hybrid
{
protected override IGearboxDataAdapter GearboxDataAdapter => throw new NotImplementedException();
public class HEV_S2 : SerialHybrid { }
protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter { get; } = new
SerialHybridStrategyParameterDataAdapter();
}
public class HEV_S2 : SerialHybrid
{
protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter());
}
public class HEV_S3 : SerialHybrid { }
......@@ -137,7 +240,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus
public class HEV_S_IEPC : SerialHybrid { }
public class ParallelHybrid : Hybrid { }
public class ParallelHybrid : Hybrid
{
protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter());
protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter { get; } = new
ParallelHybridStrategyParameterDataAdapter();
}
public class HEV_P1 : ParallelHybrid { }
......@@ -149,9 +258,43 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus
public class HEV_P4 : ParallelHybrid { }
public class BatteryElectric : SingleBusBase { }
public class BatteryElectric : SingleBusBase
{
private readonly IElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter();
protected override IEngineDataAdapter EngineDataAdapter => throw new NotImplementedException();
protected override IGearboxDataAdapter GearboxDataAdapter => throw new NotImplementedException();
protected override IElectricMachinesDataAdapter ElectricMachinesDataAdapter { get; } =
new ElectricMachinesDataAdapter();
public class PEV_E2 : BatteryElectric { }
protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter => throw new NotImplementedException();
public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData)
{
var batteryData = _electricStorageAdapter.CreateBatteryData(componentsElectricStorage, jobType, ovc);
var superCapData = _electricStorageAdapter.CreateSuperCapData(componentsElectricStorage);
if (batteryData == null) {
throw new VectoException("Could not create BatterySystem for PEV");
}
setBatteryData(batteryData);
if (superCapData != null) {
throw new VectoException("Supercaps are not allowed for PEVs");
}
}
}
public class PEV_E2 : BatteryElectric
{
protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter());
}
public class PEV_E3 : BatteryElectric { }
......@@ -159,5 +302,20 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus
public class PEV_E_IEPC : BatteryElectric { }
public class Exempted : SingleBusBase
{
protected override IEngineDataAdapter EngineDataAdapter => throw new NotImplementedException();
protected override IGearboxDataAdapter GearboxDataAdapter => throw new NotImplementedException();
protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter => throw new NotImplementedException();
protected override ICompletedBusAuxiliaryDataAdapter AuxDataAdapter => throw new NotImplementedException();
public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData)
{
throw new NotImplementedException();
}
}
}
}
......@@ -239,7 +239,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
simulationRunData.Retarder =
DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
simulationRunData.EngineData.FuelMode = 0;
simulationRunData.EngineData.FuelMode = modeIdx.Value;
simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass;
simulationRunData.BusAuxiliaries =
DataAdapterGeneric.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, simulationRunData);
......@@ -277,7 +277,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass,
CompletedVehicle.Length, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType);
simulationRunData.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
simulationRunData.EngineData.FuelMode = 0;
simulationRunData.EngineData.FuelMode = modeIdx.Value;
simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass;
simulationRunData.BusAuxiliaries =
DataAdapterSpecific.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle,
......@@ -527,13 +527,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
if (PrimaryVehicle.ArchitectureID != ArchitectureID.E2) {
throw new ArgumentException(nameof(PrimaryVehicle));
}
runData.GearshiftParameters =
DataAdapterGeneric.CreateGearshiftData(
runData.GearboxData,
(runData.AxleGearData?.AxleGear.Ratio ?? 1.0) *
(runData.AngledriveData?.Angledrive.Ratio ?? 1.0),
null
);
var shiftStrategyName =
PowertrainBuilder.GetShiftStrategyName(PrimaryVehicle.Components.GearboxInputData.Type,
......@@ -541,6 +535,13 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
runData.GearboxData = DataAdapterGeneric.CreateGearboxData(PrimaryVehicle, runData,
ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters));
runData.GearshiftParameters =
DataAdapterGeneric.CreateGearshiftData(
runData.GearboxData,
(runData.AxleGearData?.AxleGear.Ratio ?? 1.0) *
(runData.AngledriveData?.Angledrive.Ratio ?? 1.0),
null
);
}
}
public class PEV_E3 : BatteryElectric
......
......@@ -269,6 +269,10 @@ namespace TUGraz.VectoCore.InputData.Reader
Bind<IVectoRunDataFactory>().To<DeclarationModeSingleBusRunDataFactory.PEV_E_IEPC>().Named(
_vehicleStringHelper.GetSingleBusName(VectoSimulationJobType.BatteryElectricVehicle,
ArchitectureID.E_IEPC));
Bind<IVectoRunDataFactory>().To<DeclarationModeSingleBusRunDataFactory.Exempted>().Named(
_vehicleStringHelper.GetSingleBusName(VectoSimulationJobType.ConventionalVehicle,
ArchitectureID.UNKNOWN, true));
#endregion
}
#endregion
......
......@@ -36,7 +36,8 @@ namespace TUGraz.VectoCore.OutputData.XML
case IMultistepBusInputDataProvider multistageBusInputDataProvider:
break;
case ISingleBusInputDataProvider singleBusInputDataProvider:
throw new NotImplementedException("Single Bus not implemented");
return null;
//throw new NotImplementedException("Single Bus not implemented");
//return new XMLDeclarationReportSingleBus(outputWriter, _mrfFactory, _cifFactory);
case IDeclarationInputDataProvider declarationInputDataProvider:
return CreateDeclarationReport(declarationInputDataProvider, outputWriter);
......
......@@ -200,6 +200,7 @@ namespace TUGraz.VectoCore.Utils.Ninject
_vehicleType = _singlebus;
_archId = singleBus.PrimaryVehicle.ArchitectureID;
_jobType = singleBus.PrimaryVehicle.VehicleType;
_exempted = singleBus.PrimaryVehicle.ExemptedVehicle;
}
public bool Equals(VehicleClassification other)
......
......@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml;
using Microsoft.VisualStudio.TestPlatform.ObjectModel;
using Newtonsoft.Json;
using Ninject;
......@@ -15,6 +16,7 @@ using TUGraz.VectoCore.Models.Simulation.Impl;
using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
using TUGraz.VectoCore.OutputData;
using TUGraz.VectoCore.OutputData.FileIO;
using TUGraz.VectoCore.Tests.Integration.CompletedBus;
using TUGraz.VectoCore.Tests.Models.Simulation;
namespace TUGraz.VectoCore.Tests.Integration.Declaration.PrimaryBus;
......@@ -52,9 +54,6 @@ public class PrimaryBusSimulation
TestCase(@"PrimaryBus/S-HEV/PrimaryCityBus_IEPC-S_Base.xml", 0, TestName = "2nd Amendment PrimaryBus CityBus S-HEV IEPC Base"),
TestCase(@"PrimaryBus/exempted/exempted_primary_heavyBus.xml", 0, TestName = "2nd Amendment PrimaryBus Exempted"),
TestCase(@"PrimaryBus/exempted/exempted_primary_heavyBus.xml", 0, TestName = "2nd Amendment PrimaryBus Exempted"),
]
public void PrimaryBusSimulationTest(string jobFile, int runIdx)
{
......@@ -82,6 +81,87 @@ public class PrimaryBusSimulation
//RunSimulationPrimary(finalVif, runIdx);
}
[
TestCase(@"PrimaryBus/Conventional/primary_heavyBus group41_nonSmart.xml", @"Conventional_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus Conventional"),
TestCase(@"PrimaryBus/PEV/PEV_primaryBus_AMT_E2.xml", @"PEV_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus PEV E2"),
TestCase(@"PrimaryBus/PEV/PrimaryCoach_E2_Base_AMT.xml", @"PEV_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus Coach PEV E2 Base"),
TestCase(@"PrimaryBus/PEV/PrimaryCityBus_IEPC_Base.xml", @"PEV_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus CityBus PEV IEPC Base"),
TestCase(@"PrimaryBus/P-HEV/PrimaryCoach_P2_HEV_Base_AMT.xml", @"HEV_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus Coach P-HEV P2 Base AMT"),
TestCase(@"PrimaryBus/P-HEV/PrimaryCoach_P2_HEV_AMT_OVC.xml", @"HEV_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus Coach P-HEV P2 AMT OVC"),
TestCase(@"PrimaryBus/P-HEV/PrimaryCityBus_P1_HEV_Base_AT.xml", @"HEV_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus CityBus P-HEV P1 Base AT"),
TestCase(@"PrimaryBus/S-HEV/PrimaryCoach_S2_Base_AMT.xml", @"HEV_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus Coach S-HEV S2 Base"),
TestCase(@"PrimaryBus/S-HEV/PrimaryCityBus_IEPC-S_Base.xml", @"HEV_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus CityBus S-HEV IEPC Base"),
//TestCase(@"PrimaryBus/exempted/exempted_primary_heavyBus.xml", @"exempted_completedBus_input_full.xml", 0, TestName = "2nd Amendment SingleBus Exempted"), // exempted single run not supported!
]
public void SingleBusSimulationTest(string jobFile, string completed, int runIdx)
{
RunSimulationSingle(jobFile, completed, runIdx);
}
private void RunSimulationSingle(string jobFile, string completed, int runIdx)
{
var completedJob = GenerateJsonJobSingleBus(Path.Combine(BASE_DIR, jobFile), Path.Combine(BASE_DIR_COMPLETED, completed));
//var filePath = Path.Combine(BASE_DIR, jobFile);
var dataProvider = JSONInputDataFactory.ReadJsonJob(completedJob);
var fileWriter = new FileOutputWriter(completedJob);
var simFactory = _kernel.Get<ISimulatorFactoryFactory>();
var runsFactory = simFactory.Factory(ExecutionMode.Declaration, dataProvider, fileWriter, null, null);
//runsFactory.WriteModalResults = true;
runsFactory.SerializeVectoRunData = true;
var jobContainer = new JobContainer(new SummaryDataContainer(fileWriter)) { };
if (runIdx < 0) {
jobContainer.AddRuns(runsFactory);
} else {
var run = runsFactory.SimulationRuns().Skip(runIdx).First();
jobContainer.AddRun(run);
//if (dataProvider.JobInputData.Vehicle.OvcHev) {
// var run2 = runsFactory.SimulationRuns().Skip(runIdx + 1).First();
// jobContainer.AddRun(run2);
//}
}
PrintRuns(jobContainer, null);
jobContainer.Execute();
jobContainer.WaitFinished();
Assert.IsTrue(jobContainer.AllCompleted);
Assert.IsTrue(jobContainer.Runs.TrueForAll(runEntry => runEntry.Success));
PrintRuns(jobContainer, fileWriter);
PrintFiles(fileWriter);
}
private string GenerateJsonJobSingleBus(string primary, string completed)
{
var subDirectory = Path.GetDirectoryName(primary);
var header = new Dictionary<string, object>() {
{ "FileVersion", 6 }
};
var body = new Dictionary<string, object>() {
{ "PrimaryVehicle", Path.GetRelativePath(subDirectory, Path.GetFullPath(primary)) },
{ "CompletedVehicle", Path.GetRelativePath(subDirectory, Path.GetFullPath(completed)) },
//{ "RunSimulation", true}
};
var json = new Dictionary<string, object>() {
{"Header", header},
{"Body", body}
};
Directory.CreateDirectory(Path.GetFullPath(subDirectory));
var path = Path.Combine(Path.Combine(Path.GetFullPath(subDirectory)), "Single_" + Path.GetFileNameWithoutExtension(primary) + ".vecto");
var str = JsonConvert.SerializeObject(json, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(path, str);
return path;
}
public string CreateCompletedVIF(string jobFile)
{
var filePath = Path.Combine(BASE_DIR, jobFile);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment