From 470e54cbfab76da495b2defbb9d5a9dd3eae1fb3 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Mon, 25 May 2020 08:55:52 +0200
Subject: [PATCH] correct calculation of internal height

---
 .../DeclarationDataAdapterCompletedBusSpecific.cs    | 10 +++++-----
 .../DeclarationDataAdapterPrimaryBus.cs              |  4 ++--
 .../VectoCore/Models/Declaration/DeclarationData.cs  | 12 ++++++++----
 3 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs
index 943730cdc5..4dda937a01 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs
@@ -182,10 +182,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			var isDoubleDecker = completedVehicle.VehicleCode.IsDoubleDeckerBus();
 			var hvacConfiguration = completedVehicle.Components.BusAuxiliaries.HVACAux.SystemConfiguration;
 			var hvacBusLength = hvacConfiguration == BusHVACSystemConfiguration.Configuration2
-				? 2 * Constants.BusParameters.DriverCompartmentLength
-				: completedVehicle.Length;
-
-			var hvacBusHeight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(completedVehicle.VehicleCode, completedVehicle.Height);
+				? 2 * Constants.BusParameters.DriverCompartmentLength // OK
+				: completedVehicle.Length; 
+				
+			var hvacBusHeight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(completedVehicle.VehicleCode, completedVehicle.RegisteredClass, completedVehicle.Height);
 			var hvacBusWidth = DeclarationData.BusAuxiliaries.CorrectedBusWidth(completedVehicle.Width);
 			var coolingPower = CalculateMaxCoolingPower(completedVehicle, mission);
 
@@ -276,7 +276,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			var length = DeclarationData.BusAuxiliaries.CalculateInternalLength(
 			 	completedVehicle.Length , completedVehicle.VehicleCode, 
 				completedVehicle.NumberOfPassengersLowerDeck);
-			var height = DeclarationData.BusAuxiliaries.CalculateInternalHeight(completedVehicle.VehicleCode, completedVehicle.Height);
+			var height = DeclarationData.BusAuxiliaries.CalculateInternalHeight(completedVehicle.VehicleCode, completedVehicle.RegisteredClass, completedVehicle.Height);
 			var volume = length * height * completedVehicle.Width;
 
 			var driver = DeclarationData.BusAuxiliaries.HVACMaxCoolingPower.DriverMaxCoolingPower(
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
index 616965942b..66556fbc4f 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
@@ -300,7 +300,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			var hvacBusLength = busParams.HVACConfiguration == BusHVACSystemConfiguration.Configuration2
 				? 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 hvacBusheight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(mission.BusParameter.VehicleCode, RegistrationClass.II, busParams.BodyHeight);
 			var coolingPower = CalculateMaxCoolingPower(null, mission);
 
 			var retVal = GetDefaulSSMInputs(heatingFuel);
@@ -395,7 +395,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			var length = DeclarationData.BusAuxiliaries.CalculateInternalLength(
 				busParams.VehicleLength, busParams.VehicleCode,
 				busParams.NumberPassengersLowerDeck);
-			var height = DeclarationData.BusAuxiliaries.CalculateInternalHeight(busParams.VehicleCode, busParams.BodyHeight);
+			var height = DeclarationData.BusAuxiliaries.CalculateInternalHeight(busParams.VehicleCode, RegistrationClass.II, busParams.BodyHeight);
 			var volume = length * height * busParams.VehicleWidth;
 
 			var driver = DeclarationData.BusAuxiliaries.HVACMaxCoolingPower.DriverMaxCoolingPower(
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 3d254a2459..8fb6ba4df0 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -299,7 +299,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 				return CalculateInternalLength(vehicleLength, vehicleCode, numPassLowFloor);
 			}
 
-			public static Meter CalculateInternalHeight(VehicleCode vehicleCode, Meter vehicleHeight)
+			public static Meter CalculateInternalHeight(VehicleCode vehicleCode, RegistrationClass registrationClass, Meter bodyHeight)
 			{
 				if (vehicleCode.IsDoubleDeckerBus()) {
 					return Constants.BusParameters.InternalHeightDoubleDecker;
@@ -307,11 +307,15 @@ namespace TUGraz.VectoCore.Models.Declaration
 
 				switch (vehicleCode.GetFloorType()) {
 					case FloorType.LowFloor:
-						return vehicleHeight;
+						return bodyHeight;
 					case FloorType.HighFloor:
-						return vehicleHeight - Constants.BusParameters.HeightLuggageCompartment;
+						if ((registrationClass == RegistrationClass.II_III && bodyHeight > 3.1.SI<Meter>()) || 
+							registrationClass == RegistrationClass.III || registrationClass == RegistrationClass.B) {
+							return Constants.BusParameters.InternalHeightDoubleDecker;
+						}
+						return bodyHeight - Constants.BusParameters.HeightLuggageCompartment;
 				}
-
+				
 				throw new VectoException("Internal height for vehicle floor type '{0}' {1} not defined", vehicleCode.GetFloorType().ToString(), vehicleCode.IsDoubleDeckerBus() ? "double decker" : "single decker");
 			}
 
-- 
GitLab