diff --git a/VectoCommon/VectoCommon/Models/ExecutionMode.cs b/VectoCommon/VectoCommon/Models/ExecutionMode.cs index d9649eda77fb74ea84c1af8a719d700cda0eb477..66202daf7cb947cf9f35d11e7a5eca0d93d669c8 100644 --- a/VectoCommon/VectoCommon/Models/ExecutionMode.cs +++ b/VectoCommon/VectoCommon/Models/ExecutionMode.cs @@ -35,6 +35,5 @@ namespace TUGraz.VectoCommon.Models { Engineering, Declaration, - EngineOnly, } } \ No newline at end of file diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs index 1ef3792d93d24bcc4b05ad63bb9045a67b575eeb..8fc0f8181c9af05591320319ffbbf648c3ce30f0 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineOnlyVectoRunDataFactory.cs @@ -54,7 +54,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl JobName = InputDataProvider.JobInputData().JobName, EngineData = dao.CreateEngineData(InputDataProvider.EngineInputData), Cycle = DrivingCycleDataReader.ReadFromDataTable(cycle.CycleData, CycleType.EngineOnly, cycle.Name, false), - ExecutionMode = ExecutionMode.EngineOnly + ExecutionMode = ExecutionMode.Engineering }; yield return simulationRunData; } diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index 1a84dd10c4438513171acb7accb113ecd4a7aade..9c732b63f2d719b6f5f143ce8cb4d734d5acf6e9 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -59,25 +59,22 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl public VehicleContainer Build(VectoRunData data) { - if (data.ExecutionMode == ExecutionMode.EngineOnly) { - return BuildEngineOnly(data); + switch (data.Cycle.CycleType) { + case CycleType.EngineOnly: + return BuildEngineOnly(data); + case CycleType.PWheel: + return BuildPWheel(data); + case CycleType.MeasuredSpeed: + return BuildMeasuredSpeed(data); + case CycleType.MeasuredSpeedGear: + return BuildMeasuredSpeedGear(data); } - if (data.Cycle.CycleType == CycleType.PWheel) { - return BuildPWheel(data); - } - if (data.Cycle.CycleType == CycleType.MeasuredSpeed) { - return BuildMeasuredSpeed(data); - } - if (data.Cycle.CycleType == CycleType.MeasuredSpeedGear) { - return BuildMeasuredSpeedGear(data); - } - return BuildFullPowertrain(data); } private VehicleContainer BuildEngineOnly(VectoRunData data) { - var container = new VehicleContainer(ExecutionMode.EngineOnly, _modData, _sumWriter) { RunData = data }; + var container = new VehicleContainer(ExecutionMode.Engineering, _modData, _sumWriter) { RunData = data }; var cycle = new PowertrainDrivingCycle(container, data.Cycle); var directAux = new EngineAuxiliary(container); @@ -244,7 +241,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl private VehicleContainer BuildFullPowertrain(VectoRunData data) { if (data.Cycle.CycleType != CycleType.DistanceBased) { - throw new VectoSimulationException("Powertrain Builder cannot build FullPowertrain for Cycle Type {0}", + throw new VectoSimulationException("Powertrain Builder cannot build FullPowertrain for cycle type {0}", data.Cycle.CycleType); } diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs index 56b9e13be24dcface21170e45d1ad87bad930974..9e59a781d64ab5784b4b86b61422a35d18e7ded2 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs @@ -54,6 +54,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl private static int _jobNumberCounter; private readonly ExecutionMode _mode; + private readonly bool _engineOnlyMode; public SimulatorFactory(ExecutionMode mode, IInputDataProvider dataProvider, IOutputDataWriter writer, DeclarationReport declarationReport = null) @@ -80,14 +81,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl if (engDataProvider == null) { throw new VectoException("InputDataProvider does not implement Engineering interface"); } - DataReader = new EngineeringModeVectoRunDataFactory(engDataProvider); - break; - case ExecutionMode.EngineOnly: - var engineDataProvider = dataProvider as IEngineeringInputDataProvider; - if (engineDataProvider == null) { - throw new VectoException("InputDataProvider does not implement Engineering interface"); + if (engDataProvider.JobInputData().EngineOnlyMode) { + DataReader = new EngineOnlyVectoRunDataFactory(engDataProvider); + _engineOnlyMode = true; + } else { + DataReader = new EngineeringModeVectoRunDataFactory(engDataProvider); } - DataReader = new EngineOnlyVectoRunDataFactory(engineDataProvider); break; default: throw new VectoException("Unkown factory mode in SimulatorFactory: {0}", mode); @@ -118,17 +117,18 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl foreach (var data in DataReader.NextRun()) { var d = data; + Action<ModalDataContainer> addReportResult = writer => { + if (d.Report != null) { + d.Report.AddResult(d.Loading, d.Mission, writer); + } + }; IModalDataContainer modContainer = new ModalDataContainer(data, ModWriter, - addReportResult: writer => { - if (d.Report != null) { - d.Report.AddResult(d.Loading, d.Mission, writer); - } - }, - mode: _mode, + addReportResult: _mode == ExecutionMode.Declaration ? addReportResult : null, + writeEngineOnly: _engineOnlyMode, filter: modDataFilter) { WriteAdvancedAux = data.AdvancedAux != null && data.AdvancedAux.AuxiliaryAssembly == AuxiliaryModel.Advanced, - WriteModalResults = WriteModalResults + WriteModalResults = _mode != ExecutionMode.Declaration || WriteModalResults }; var current = i++; var builder = new PowertrainBuilder(modContainer, (writer, mass, loading) => diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs index bf7b8ff70d78ff536f258fdcad1f273c4b04931e..2974e10c576a6ea9ece28dbc5ce0d774fdfcdefb 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs @@ -266,7 +266,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl public void CommitSimulationStep(Second time, Second simulationInterval) { Log.Info("VehicleContainer committing simulation. time: {0}, dist: {1}, speed: {2}", time, - ExecutionMode == ExecutionMode.EngineOnly ? null : Distance, VehicleSpeed); + Distance, VehicleSpeed); foreach (var component in _components) { component.Item2.CommitSimulationStep(ModData); diff --git a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs index c04636749d6516fde46c0544cc87ae8ae0a9197e..29226905ae74d3404ab9e8dce06ff4d3a9c7d2c4 100644 --- a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs @@ -45,7 +45,7 @@ namespace TUGraz.VectoCore.OutputData { public class ModalDataContainer : IModalDataContainer { - private readonly ExecutionMode _mode; + private readonly bool _writeEngineOnly; private readonly IModalDataFilter[] _filters; private readonly Action<ModalDataContainer> _addReportResult; internal ModalResults Data { get; set; } @@ -64,15 +64,15 @@ namespace TUGraz.VectoCore.OutputData public bool WriteAdvancedAux { get; set; } - public ModalDataContainer(string runName, IModalDataWriter writer, ExecutionMode mode) - : this(runName, "", "", writer, _ => { }, mode) {} + public ModalDataContainer(string runName, IModalDataWriter writer, bool writeEngineOnly = false) + : this(runName, "", "", writer, _ => { }, writeEngineOnly) {} public ModalDataContainer(VectoRunData runData, IModalDataWriter writer, Action<ModalDataContainer> addReportResult, - ExecutionMode mode, params IModalDataFilter[] filter) - : this(runData.JobName, runData.Cycle.Name, runData.ModFileSuffix, writer, addReportResult, mode, filter) {} + bool writeEngineOnly, params IModalDataFilter[] filter) + : this(runData.JobName, runData.Cycle.Name, runData.ModFileSuffix, writer, addReportResult, writeEngineOnly, filter) {} protected ModalDataContainer(string runName, string cycleName, string runSuffix, IModalDataWriter writer, - Action<ModalDataContainer> addReportResult, ExecutionMode mode, params IModalDataFilter[] filters) + Action<ModalDataContainer> addReportResult, bool writeEngineOnly, params IModalDataFilter[] filters) { HasTorqueConverter = false; @@ -81,9 +81,9 @@ namespace TUGraz.VectoCore.OutputData RunSuffix = runSuffix; _writer = writer; - _mode = mode; + _writeEngineOnly = writeEngineOnly; _filters = filters; - _addReportResult = addReportResult; + _addReportResult = addReportResult ?? (x => { }); Data = new ModalResults(); Auxiliaries = new Dictionary<string, DataColumn>(); @@ -105,7 +105,7 @@ namespace TUGraz.VectoCore.OutputData RunStatus = runStatus; - if (_mode != ExecutionMode.EngineOnly) { + if (!_writeEngineOnly) { dataColumns.AddRange(new[] { ModalResultField.simulationInterval, ModalResultField.dist, @@ -115,7 +115,7 @@ namespace TUGraz.VectoCore.OutputData ModalResultField.grad }); } - if (_mode != ExecutionMode.EngineOnly) { + if (!_writeEngineOnly) { dataColumns.AddRange(new[] { ModalResultField.Gear, }); @@ -135,7 +135,7 @@ namespace TUGraz.VectoCore.OutputData ModalResultField.P_aux }); - if (_mode != ExecutionMode.EngineOnly) { + if (!_writeEngineOnly) { dataColumns.AddRange(new[] { ModalResultField.P_gbx_in, ModalResultField.P_gbx_loss, @@ -164,7 +164,7 @@ namespace TUGraz.VectoCore.OutputData }); } } - if (_mode != ExecutionMode.EngineOnly && WriteAdvancedAux) { + if (!_writeEngineOnly && WriteAdvancedAux) { dataColumns.AddRange(new[] { ModalResultField.AA_NonSmartAlternatorsEfficiency, ModalResultField.AA_SmartIdleCurrent_Amps, @@ -196,7 +196,7 @@ namespace TUGraz.VectoCore.OutputData ModalResultField.FCAAUX, ModalResultField.FCFinal }.Select(x => x.GetName())); - if (_mode != ExecutionMode.Declaration || WriteModalResults) { + if (WriteModalResults) { var filteredData = Data; foreach (var filter in _filters) { RunSuffix += "_" + filter.ID; @@ -205,9 +205,7 @@ namespace TUGraz.VectoCore.OutputData _writer.WriteModData(RunName, CycleName, RunSuffix, new DataView(filteredData).ToTable(false, strCols.ToArray())); } - if (_mode == ExecutionMode.Declaration) { - _addReportResult(this); - } + _addReportResult(this); } public IEnumerable<T> GetValues<T>(DataColumn col)