From e66ec07addfcd78ab7e7e75f4ec844540e9f75d3 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Fri, 22 May 2020 11:22:03 +0200
Subject: [PATCH] primary bus: set tpmlm to the max allowed value (40t)
 completed bus: throw exception if the tmplm is too low for the number of reg
 passengers

---
 .../DeclarationDataAdapterCompletedBusGeneric.cs  | 15 ++++++++++++++-
 .../DeclarationDataAdapterCompletedBusSpecific.cs |  4 +++-
 .../DeclarationDataAdapterPrimaryBus.cs           |  5 +++--
 3 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs
index ccdf65ecf5..20a775f5b4 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs
@@ -33,7 +33,20 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 		public const double GearEfficiencyIndirectGear = 0.96;
 
 
-		
+		#region Overrides of DeclarationDataAdapterPrimaryBus
+
+		public override VehicleData CreateVehicleData(
+			IVehicleDeclarationInputData data, Segment segment, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading)
+		{
+			var retVal =  base.CreateVehicleData(data, segment, mission, loading);
+			retVal.GrossVehicleMass = data.GrossVehicleMassRating;
+			if (retVal.TotalVehicleMass.IsGreater(retVal.GrossVehicleMass)) {
+				throw new VectoException("Total Vehicle Mass exceeds Gross Vehicle Mass for completed bus generic ({0}/{1})", retVal.TotalVehicleMass, retVal.GrossVehicleMass);
+			}
+			return retVal;
+		}
+
+		#endregion
 
 		// The model parameters for the completed bus with generic power train and generic body is basically the same as the primary bus
 		// only powertrain components are different
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs
index 38c89f5b2f..943730cdc5 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs
@@ -47,7 +47,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			vehicleData.RegisteredClass = completedVehicle.RegisteredClass;
 
 			vehicleData.VehicleCode = completedVehicle.VehicleCode;
-
+			if (vehicleData.TotalVehicleMass.IsGreater(vehicleData.GrossVehicleMass)) {
+				throw new VectoException("Total Vehicle Mass exceeds Gross Vehicle Mass for completed bus specific ({0}/{1})", vehicleData.TotalVehicleMass, vehicleData.GrossVehicleMass);
+			}
 			return vehicleData;
 		}
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
index bba6f4bb14..616965942b 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
@@ -35,6 +35,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 		{
 			var retVal = base.CreateVehicleData(data, segment, mission, loading);
 			retVal.CurbMass = mission.CurbMass;
+			retVal.GrossVehicleMass = 40000.SI<Kilogram>();
 			return retVal;
 		}
 
@@ -297,8 +298,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			var busParams = mission.BusParameter;
 
 			var hvacBusLength = busParams.HVACConfiguration == BusHVACSystemConfiguration.Configuration2
-				? 2 * Constants.BusParameters.DriverCompartmentLength
-				: busParams.VehicleLength;
+				? 2 * Constants.BusParameters.DriverCompartmentLength // OK
+				: busParams.VehicleLength; // missing: correction length for low floor buses
 			var hvacBusheight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(mission.BusParameter.VehicleCode, busParams.BodyHeight);
 			var coolingPower = CalculateMaxCoolingPower(null, mission);
 
-- 
GitLab