diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs b/VectoCore/VectoCore/Models/Simulation/Impl/VectoRun.cs index 93fdc5cf2ce22bef60d538e26c89e421417dde7b..2eac8a330a31d3c4f6dac2fbf44de97bef48e2aa 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 477a70e70dae02d410aa0a682685088bce2e0d94..8124db93853a8011497260a326936009fc0ce3f0 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 d1437ad5536236af134480d21c49b135b59ce9ee..b699920dd7c54af7230f02b7ca1f04176ebda37f 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 90ec851b56e1f5ab518dcaea912232c9d137e3f7..ba4bca4ac960c627bab9f68d92a1314c0bfa736e 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());