From 450493dec628a0abaabde511e293f6e95b8bfbe2 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Mon, 7 May 2018 17:43:00 +0200 Subject: [PATCH] avoid loops if only a single mission is simulated, VTP declaration: simulate only first given cycle --- .../DeclarationVTPModeVectoRunDataFactory.cs | 86 ++++++++++--------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs index a209cf9728..d664f4bb89 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; @@ -119,49 +120,54 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl } // simulate the LongHaul cycle with RefLoad - foreach (var mission in _segment.Missions.Where(m => m.MissionType == DeclarationData.VTPMode.SelectedMission)) { - foreach (var loading in mission.Loadings.Where(l => l.Key == DeclarationData.VTPMode.SelectedLoading)) { - var runData = CreateVectoRunData(_segment, mission, loading.Value); - runData.ModFileSuffix = loading.Key.ToString(); - var cycle = DrivingCycleDataReader.ReadFromStream(mission.CycleFile, CycleType.DistanceBased, "", false); - runData.Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()); - runData.DriverData = _driverdata; - runData.Aux = _dao.CreateAuxiliaryData( - JobInputData.Vehicle.AuxiliaryInputData(), mission.MissionType, _segment.VehicleClass); - runData.ExecutionMode = ExecutionMode.Declaration; - runData.SimulationType = SimulationType.DistanceCycle; - runData.Mission = mission; - runData.Loading = loading.Key; - yield return runData; - } + var mission = _segment.Missions.FirstOrDefault(m => m.MissionType == DeclarationData.VTPMode.SelectedMission); + if (mission == null) { + throw new VectoException("Mission {0} not found in segmentation matrix", DeclarationData.VTPMode.SelectedMission); } - + var loading = mission.Loadings.FirstOrDefault(l => l.Key == DeclarationData.VTPMode.SelectedLoading); + var runData = CreateVectoRunData(_segment, mission, loading.Value); + runData.ModFileSuffix = loading.Key.ToString(); + var cycle = DrivingCycleDataReader.ReadFromStream(mission.CycleFile, CycleType.DistanceBased, "", false); + runData.Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()); + runData.DriverData = _driverdata; + runData.Aux = _dao.CreateAuxiliaryData( + JobInputData.Vehicle.AuxiliaryInputData(), mission.MissionType, _segment.VehicleClass); + runData.ExecutionMode = ExecutionMode.Declaration; + runData.SimulationType = SimulationType.DistanceCycle; + runData.Mission = mission; + runData.Loading = loading.Key; + yield return runData; + + // simulate the Measured cycle - foreach (var cycle in JobInputData.Cycles) { - var drivingCycle = DrivingCycleDataReader.ReadFromDataTable(cycle.CycleData, cycle.Name, false); - - // Loading is not relevant as we use P_wheel - var runData = CreateVectoRunData(_segment, _segment.Missions.First(), 0.SI<Kilogram>()); - runData.Cycle = new DrivingCycleProxy(drivingCycle, cycle.Name); - runData.Aux = _auxVTP; - runData.FanData = new AuxFanData() { - FanCoefficients = JobInputData.FanPowerCoefficents.ToArray(), - FanDiameter = JobInputData.FanDiameter, - }; - runData.ExecutionMode = ExecutionMode.Declaration; - runData.SimulationType = SimulationType.VerificationTest; - runData.Mission = new Mission() { - MissionType = MissionType.VerificationTest - }; - var ncvStd = DeclarationData.FuelData.Lookup(JobInputData.Vehicle.EngineInputData.FuelType).LowerHeatingValue; - var ncvCorrection = ncvStd / JobInputData.NetCalorificValueTestFuel; - var mileageCorrection = GetMileagecorrectionFactor(JobInputData.Mileage); - runData.VTPData = new VTPData() { - CorrectionFactor = ncvCorrection * mileageCorrection, - FuelNetCalorificValue = JobInputData.NetCalorificValueTestFuel //0.SI<JoulePerKilogramm>() - }; - yield return runData; + var vtpCycle = JobInputData.Cycles.FirstOrDefault(); + if (vtpCycle == null) { + throw new VectoException("no VTP-Cycle provided!"); } + var drivingCycle = DrivingCycleDataReader.ReadFromDataTable(vtpCycle.CycleData, vtpCycle.Name, false); + + // Loading is not relevant as we use P_wheel + var vtpRunData = CreateVectoRunData(_segment, _segment.Missions.First(), 0.SI<Kilogram>()); + vtpRunData.Cycle = new DrivingCycleProxy(drivingCycle, vtpCycle.Name); + vtpRunData.Aux = _auxVTP; + vtpRunData.FanData = new AuxFanData() { + FanCoefficients = JobInputData.FanPowerCoefficents.ToArray(), + FanDiameter = JobInputData.FanDiameter, + }; + vtpRunData.ExecutionMode = ExecutionMode.Declaration; + vtpRunData.SimulationType = SimulationType.VerificationTest; + vtpRunData.Mission = new Mission() { + MissionType = MissionType.VerificationTest + }; + var ncvStd = DeclarationData.FuelData.Lookup(JobInputData.Vehicle.EngineInputData.FuelType).LowerHeatingValue; + var ncvCorrection = ncvStd / JobInputData.NetCalorificValueTestFuel; + var mileageCorrection = GetMileagecorrectionFactor(JobInputData.Mileage); + vtpRunData.VTPData = new VTPData() { + CorrectionFactor = ncvCorrection * mileageCorrection, + FuelNetCalorificValue = JobInputData.NetCalorificValueTestFuel //0.SI<JoulePerKilogramm>() + }; + yield return vtpRunData; + } private double GetMileagecorrectionFactor(Meter mileage) -- GitLab