From 90f378b9c533a90817c0f8bdf0fe08d1827235d2 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Wed, 4 Nov 2015 13:52:09 +0100
Subject: [PATCH] option to write modal results also in declaration mode

---
 VECTO/GUI/F_MAINForm.vb                              |  4 ++--
 VectoConsole/Program.cs                              | 12 ++++++++++--
 VectoCore/Models/Simulation/Data/IModalDataWriter.cs |  2 ++
 VectoCore/Models/Simulation/Data/ModalDataWriter.cs  |  6 ++++--
 VectoCore/Models/Simulation/Impl/SimulatorFactory.cs |  3 +++
 .../Integration/FullCycleDeclarationTest.cs          |  2 +-
 VectoCoreTest/Utils/MockModalDataWriter.cs           |  2 ++
 7 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/VECTO/GUI/F_MAINForm.vb b/VECTO/GUI/F_MAINForm.vb
index 09fa1e4f57..5d43a699dd 100644
--- a/VECTO/GUI/F_MAINForm.vb
+++ b/VECTO/GUI/F_MAINForm.vb
@@ -1570,10 +1570,10 @@ Imports TUGraz.VectoCore.Models.Simulation
 				Return
 			End If
 
-			Dim progress As Dictionary(Of String, Double) = jobContainer.GetProgress()
+			Dim progress As Dictionary(Of String, JobContainer.ProgressEntry) = jobContainer.GetProgress()
 
 			Dim NumLines As Double = progress.Count
-			Dim sumProgress As Double = progress.Sum(Function(pair) pair.Value)
+			Dim sumProgress As Double = progress.Sum(Function(pair) pair.Value.Progress)
 
 
 			If sumProgress > 0 And start = DateTime.MinValue Then
diff --git a/VectoConsole/Program.cs b/VectoConsole/Program.cs
index 556a810ff1..2a3b1eb21c 100644
--- a/VectoConsole/Program.cs
+++ b/VectoConsole/Program.cs
@@ -105,6 +105,9 @@ Examples:
 				stopWatch.Start();
 				foreach (var file in fileList.Where(f => Path.GetExtension(f) == Constants.FileExtensions.VectoJobFile)) {
 					var runsFactory = new SimulatorFactory(SimulatorFactory.FactoryMode.DeclarationMode, file);
+					if (args.Contains("-mod")) {
+						runsFactory.WriteModalResults = true;
+					}
 					jobContainer.AddRuns(runsFactory);
 				}
 				stopWatch.Stop();
@@ -112,7 +115,12 @@ Examples:
 				stopWatch.Reset();
 
 				Console.WriteLine("Starting simulation runs");
-
+				if (debugEnabled) {
+					Console.ForegroundColor = ConsoleColor.White;
+					Console.WriteLine("Debug-Output is enabled, executing simulation runs sequentially");
+					Console.ResetColor();
+				}
+				Console.WriteLine();
 				stopWatch.Start();
 				jobContainer.Execute(!debugEnabled);
 
@@ -177,7 +185,7 @@ Examples:
 			Console.WriteLine();
 			Console.WriteLine("---- timing information ----");
 			foreach (var timing in timings) {
-				Console.Write("{0,-20}: {1:F2}s", timing.Key, timing.Value / 1000);
+				Console.WriteLine("{0,-20}: {1:F2}s", timing.Key, timing.Value / 1000);
 			}
 		}
 	}
diff --git a/VectoCore/Models/Simulation/Data/IModalDataWriter.cs b/VectoCore/Models/Simulation/Data/IModalDataWriter.cs
index 18af7ab6eb..a77cb630e0 100644
--- a/VectoCore/Models/Simulation/Data/IModalDataWriter.cs
+++ b/VectoCore/Models/Simulation/Data/IModalDataWriter.cs
@@ -34,6 +34,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 		/// </summary>
 		void Finish();
 
+		bool WriteModalResults { get; set; }
+
 		IEnumerable<T> GetValues<T>(ModalResultField key);
 
 		IEnumerable<T> GetValues<T>(DataColumn col);
diff --git a/VectoCore/Models/Simulation/Data/ModalDataWriter.cs b/VectoCore/Models/Simulation/Data/ModalDataWriter.cs
index 4ef22cbfa0..cfc9e766e2 100644
--- a/VectoCore/Models/Simulation/Data/ModalDataWriter.cs
+++ b/VectoCore/Models/Simulation/Data/ModalDataWriter.cs
@@ -15,6 +15,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 		private DataRow CurrentRow { get; set; }
 		private string ModFileName { get; set; }
 
+		public bool WriteModalResults { get; set; }
+
+
 		public ModalDataWriter(string modFileName,
 			SimulatorFactory.FactoryMode mode = SimulatorFactory.FactoryMode.EngineeringMode) : this(modFileName, _ => {}, mode) {}
 
@@ -96,7 +99,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 				.Concat((Auxiliaries.Values.Select(c => c.ColumnName)))
 				.Concat(new[] { ModalResultField.FCMap, ModalResultField.FCAUXc, ModalResultField.FCWHTCc }.Select(x => x.GetName()));
 
-			if (_mode != SimulatorFactory.FactoryMode.DeclarationMode) {
+			if (_mode != SimulatorFactory.FactoryMode.DeclarationMode || WriteModalResults) {
 				VectoCSVFile.Write(ModFileName, new DataView(Data).ToTable(false, strCols.ToArray()));
 			}
 
@@ -105,7 +108,6 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 			}
 		}
 
-
 		public IEnumerable<T> GetValues<T>(DataColumn col)
 		{
 			return Data.Rows.Cast<DataRow>().Select(x => x.Field<T>(col));
diff --git a/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
index 655f14e211..393b5693d5 100644
--- a/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
+++ b/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
@@ -48,6 +48,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 		public int JobNumber { get; set; }
 
+		public bool WriteModalResults { get; set; }
+
 		/// <summary>
 		/// Creates powertrain and initializes it with the component's data.
 		/// </summary>
@@ -63,6 +65,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 				IModalDataWriter modWriter =
 					new ModalDataWriter(string.Format(modFileName, data.Cycle.Name, data.ModFileSuffix ?? ""),
 						writer => d.Report.AddResult(d.Loading, d.Mission, writer), _mode);
+				modWriter.WriteModalResults = WriteModalResults;
 				var jobName = string.Format("{0}-{1}", JobNumber, i++);
 				var sumWriterDecorator = DecorateSumWriter(data.IsEngineOnly, SumWriter, data.JobFileName, jobName, data.Cycle.Name);
 				var builder = new PowertrainBuilder(modWriter, sumWriterDecorator, DataReader.IsEngineOnly);
diff --git a/VectoCoreTest/Integration/FullCycleDeclarationTest.cs b/VectoCoreTest/Integration/FullCycleDeclarationTest.cs
index fd00c6030c..4f072b84ea 100644
--- a/VectoCoreTest/Integration/FullCycleDeclarationTest.cs
+++ b/VectoCoreTest/Integration/FullCycleDeclarationTest.cs
@@ -123,10 +123,10 @@ namespace TUGraz.VectoCore.Tests.Integration
 			LogManager.DisableLogging();
 
 			var factory = new SimulatorFactory(SimulatorFactory.FactoryMode.DeclarationMode, TruckDeclarationJob);
+			factory.WriteModalResults = true;
 			var sumFileName = Path.GetFileNameWithoutExtension(TruckDeclarationJob) + Constants.FileExtensions.SumFile;
 			var sumWriter = new SummaryFileWriter(sumFileName);
 			var jobContainer = new JobContainer(sumWriter);
-
 			jobContainer.AddRuns(factory);
 
 			jobContainer.Execute();
diff --git a/VectoCoreTest/Utils/MockModalDataWriter.cs b/VectoCoreTest/Utils/MockModalDataWriter.cs
index ddad107d87..19d073b91c 100644
--- a/VectoCoreTest/Utils/MockModalDataWriter.cs
+++ b/VectoCoreTest/Utils/MockModalDataWriter.cs
@@ -37,6 +37,8 @@ namespace TUGraz.VectoCore.Tests.Utils
 
 		public void Finish() {}
 
+		public bool WriteModalResults { get; set; }
+
 		public IEnumerable<T> GetValues<T>(ModalResultField key)
 		{
 			return Data.Rows.Cast<DataRow>().Select(x => x.Field<T>((int)key));
-- 
GitLab