From 23d15ef874a1f4dde7ca71dc6d11d5e03fe53d7e Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Mon, 6 Mar 2017 13:33:13 +0100
Subject: [PATCH] modContainer extension methods: add default values for
 aggregates

---
 VectoCore/VectoCore/OutputData/IModalDataContainer.cs | 10 +++++-----
 VectoCore/VectoCoreTest/Reports/SumWriterTest.cs      |  2 ++
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
index 069ba9ce5d..beaf772e13 100644
--- a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
@@ -152,7 +152,7 @@ namespace TUGraz.VectoCore.OutputData
 		{
 			var accelerationTimeShare = data.Data.Rows.Cast<DataRow>()
 				.Select(x => new {
-					a = x.Field<MeterPerSquareSecond>((int)ModalResultField.acc),
+					a = x.Field<MeterPerSquareSecond>((int)ModalResultField.acc).DefaultIfNull(0),
 					dt = x.Field<Second>((int)ModalResultField.simulationInterval)
 				})
 				.Sum(x => x.a > 0.125 ? x.dt : 0.SI<Second>()).DefaultIfNull(0);
@@ -163,7 +163,7 @@ namespace TUGraz.VectoCore.OutputData
 		{
 			var decelerationTimeShare = data.Data.Rows.Cast<DataRow>()
 				.Select(x => new {
-					a = x.Field<MeterPerSquareSecond>((int)ModalResultField.acc),
+					a = x.Field<MeterPerSquareSecond>((int)ModalResultField.acc).DefaultIfNull(0),
 					dt = x.Field<Second>((int)ModalResultField.simulationInterval)
 				})
 				.Sum(x => x.a < -0.125 ? x.dt : 0.SI<Second>()).DefaultIfNull(0);
@@ -174,8 +174,8 @@ namespace TUGraz.VectoCore.OutputData
 		{
 			var cruiseTime = data.Data.Rows.Cast<DataRow>()
 				.Select(x => new {
-					v = x.Field<MeterPerSecond>((int)ModalResultField.v_act),
-					a = x.Field<MeterPerSquareSecond>((int)ModalResultField.acc),
+					v = x.Field<MeterPerSecond>((int)ModalResultField.v_act).DefaultIfNull(0),
+					a = x.Field<MeterPerSquareSecond>((int)ModalResultField.acc).DefaultIfNull(0),
 					dt = x.Field<Second>((int)ModalResultField.simulationInterval)
 				})
 				.Sum(x => x.v >= 0.1.KMPHtoMeterPerSecond() && x.a.IsBetween(-0.125, 0.125) ? x.dt : 0.SI<Second>())
@@ -187,7 +187,7 @@ namespace TUGraz.VectoCore.OutputData
 		{
 			var stopTime = data.Data.Rows.Cast<DataRow>()
 				.Select(x => new {
-					v = x.Field<MeterPerSecond>((int)ModalResultField.v_act),
+					v = x.Field<MeterPerSecond>((int)ModalResultField.v_act).DefaultIfNull(0),
 					dt = x.Field<Second>((int)ModalResultField.simulationInterval)
 				})
 				.Sum(x => x.v < 0.1.KMPHtoMeterPerSecond() ? x.dt : 0.SI<Second>()) ?? 0.SI<Second>();
diff --git a/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs b/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs
index 924c4a687e..6cde9f9717 100644
--- a/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs
+++ b/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs
@@ -58,6 +58,7 @@ namespace TUGraz.VectoCore.Tests.Reports
 			for (var i = 0; i < 499; i++) {
 				modData[ModalResultField.simulationInterval] = 1.SI<Second>();
 				modData[ModalResultField.n_eng_avg] = 600.RPMtoRad();
+				modData[ModalResultField.v_act] = 20.KMPHtoMeterPerSecond();
 				modData[ModalResultField.drivingBehavior] = DrivingBehavior.Driving;
 				modData[ModalResultField.time] = i.SI<Second>();
 				modData[ModalResultField.dist] = i.SI<Meter>();
@@ -119,6 +120,7 @@ namespace TUGraz.VectoCore.Tests.Reports
 				modData[ModalResultField.time] = i.SI<Second>();
 				modData[ModalResultField.dist] = i.SI<Meter>();
 				modData[ModalResultField.n_eng_avg] = 600.RPMtoRad();
+				modData[ModalResultField.v_act] = 20.KMPHtoMeterPerSecond();
 				modData[ModalResultField.drivingBehavior] = DrivingBehavior.Driving;
 				modData["FAN"] = powerDemand[i % powerDemand.Length];
 				modData[ModalResultField.P_air] = powerDemand[i % powerDemand.Length];
-- 
GitLab