From 71814ea3706e21442f7da890cffcb70155441cc6 Mon Sep 17 00:00:00 2001 From: "VKMTHD\\haraldmartini" <harald.martini@student.tugraz.at> Date: Mon, 6 Mar 2023 11:30:57 +0100 Subject: [PATCH] report was written before the simulation was finished in charge sustaining it mode --- .../Models/Simulation/Impl/VectoRun.cs | 5 ++++- .../SimulationFactoryNinjectModule.cs | 6 ++++-- .../VectoCore/OutputData/DeclarationReport.cs | 11 +++++++++-- .../Declaration/HeavyLorry/LorrySimulation.cs | 17 +++++++++-------- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs b/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs index 93fdc5cf2c..2eac8a330a 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs @@ -192,7 +192,10 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl Run(); }, this, - () => Container.FinishSingleSimulationRun()) ?? false; + () => { + Container.RunData.Report.PrepareResult(null); //<- increase number of expected results; + Container.FinishSingleSimulationRun(); + }) ?? false; if (!runAgain) { Container.FinishSimulationRun(); WritingResultsDone = true; diff --git a/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs b/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs index 477a70e70d..8124db9385 100644 --- a/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs +++ b/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs @@ -29,6 +29,7 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ +using System.Runtime.CompilerServices; using Ninject.Extensions.Factory; using Ninject.Modules; using TUGraz.VectoCommon.InputData; @@ -65,7 +66,7 @@ namespace TUGraz.VectoCore.Models.Simulation internal class NullDeclarationReport : IDeclarationReport { #region Implementation of IDeclarationReport - + private int _addedResults = 0; public void InitializeReport(VectoRunData modelData) { @@ -76,9 +77,10 @@ namespace TUGraz.VectoCore.Models.Simulation } + [MethodImpl(MethodImplOptions.Synchronized)] public void AddResult(VectoRunData runData, IModalDataContainer modData) { - + _addedResults++; } public IPrimaryVehicleInformationInputDataProvider PrimaryResults { get; set; } diff --git a/VectoCore/VectoCore/OutputData/DeclarationReport.cs b/VectoCore/VectoCore/OutputData/DeclarationReport.cs index d1437ad553..b699920dd7 100644 --- a/VectoCore/VectoCore/OutputData/DeclarationReport.cs +++ b/VectoCore/VectoCore/OutputData/DeclarationReport.cs @@ -185,7 +185,7 @@ namespace TUGraz.VectoCore.OutputData /// <summary> /// Class for creating a declaration report. /// </summary> - public abstract class DeclarationReport<T> : IDeclarationReport where T : IResultEntry, new() + public abstract class DeclarationReport<T> : IDeclarationReport where T : class, IResultEntry, new() { public class ResultContainer<TEntry> { @@ -250,8 +250,15 @@ namespace TUGraz.VectoCore.OutputData var entry = new T(); entry.Initialize(runData); lock (Results) { + var exÃstingResult = Results.SingleOrDefault(e => + e.Mission == entry.Mission && e.LoadingType == entry.LoadingType && e.OVCMode == entry.OVCMode); + if (exÃstingResult != null) { + //We already have a result for this run stored, this can happen with iterative runs, in this case we have to remove the old result + Results.Remove(exÃstingResult); + } + Results.Add(entry); - } + } DoStoreResult(entry, runData, modData); } diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/HeavyLorry/LorrySimulation.cs b/VectoCore/VectoCoreTest/Integration/Declaration/HeavyLorry/LorrySimulation.cs index 90ec851b56..ba4bca4ac9 100644 --- a/VectoCore/VectoCoreTest/Integration/Declaration/HeavyLorry/LorrySimulation.cs +++ b/VectoCore/VectoCoreTest/Integration/Declaration/HeavyLorry/LorrySimulation.cs @@ -113,7 +113,7 @@ public class LorrySimulation [TestCase(@"MediumLorry\PEV\Group5_ PEV_E3_ES_Standard.xml")] public void MediumLorrySimulationTest(string jobFile) { - RunSimulation(jobFile, true); + RunSimulation(jobFile, true, false); } [TestCase(@"HeavyLorry\Exempted\exempted_heavy_lorry.xml")] @@ -234,6 +234,7 @@ public class LorrySimulation } } +#region VSUM_HELPER private void GetEmptySumAndModData(string jobFile, out SummaryDataContainer sumDataContainer, out IVectoRun run, out TableData modData, out TableData sumData) { @@ -450,7 +451,7 @@ public class LorrySimulation SearchForPattern(sumData,GbxTimeShareFields()); } } - + #endregion [TestCase(@"HeavyLorry\S-HEV\Group2_HEV_S4_invalid_pto.xml")] [TestCase(@"HeavyLorry\PEV\PEV_heavyLorry_E3_pto_transmission_invalid.xml")] @@ -505,7 +506,8 @@ public class LorrySimulation [TestCase(Group5_HEV_P3_OVC, 20)] [TestCase(Group5_HEV_P4_OVC, 20)] [TestCase(Group5_HEV_P2_5_OVC, 20)] - public void PHEV_ChargeSustainingIt(string jobFile, int nrRuns) + [TestCase(@"MediumLorry\P-HEV\Group5_HEV_P3_ovc.xml", 8, MissionType.UrbanDelivery, LoadingType.LowLoading)] + public void PHEV_ChargeSustainingIt(string jobFile, int nrRuns, MissionType? missionType = MissionType.UrbanDelivery, LoadingType? loadingType = LoadingType.ReferenceLoad) { var jobContainer = GetJobContainer(jobFile, nrRuns, out var fileWriter, out var runs, out var sumDataContainer); @@ -514,7 +516,7 @@ public class LorrySimulation runs = runs.Where(run => { var rd = run.GetContainer().RunData; return rd.OVCMode == VectoRunData.OvcHevMode.ChargeSustaining && - rd.Mission.MissionType == MissionType.UrbanDelivery && rd.Loading == LoadingType.ReferenceLoad; + rd.Mission.MissionType == MissionType.UrbanDelivery && rd.Loading == loadingType; }).ToList(); jobContainer.AddRun(runs.Single()); @@ -557,18 +559,17 @@ public class LorrySimulation [TestCase(@"HeavyLorry\P-HEV\Group5_HEV_IHPC.xml", 20)] [TestCase(@"HeavyLorry\P-HEV\Group5_HEV_P2_OVC_stefan.xml", 20, MissionType.UrbanDelivery, LoadingType.LowLoading)] [TestCase(@"HeavyLorry\P-HEV\Group5_HEV_P3_OVC_stefan.xml", 20)] - public void PHEV_ChargeDepleting(string jobFile, int nrRuns, MissionType? missionType = null, LoadingType? loadingType = null) + public void PHEV_ChargeDepleting(string jobFile, int nrRuns, MissionType? missionType = MissionType.UrbanDelivery, LoadingType? loadingType = LoadingType.ReferenceLoad) { var jobContainer = GetJobContainer(jobFile, nrRuns, out var fileWriter, out var runs, out var sumDataContainer); - var mission = missionType ?? MissionType.UrbanDelivery; - var loading = loadingType ?? LoadingType.ReferenceLoad; + 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.ChargeDepleting && - rd.Mission.MissionType == mission && rd.Loading == loading; + rd.Mission.MissionType == missionType && rd.Loading == loadingType; }).ToList(); jobContainer.AddRun(runs.Single()); -- GitLab