From ece78b9f4a37faa5c49ad418d11b455dc905c032 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Tue, 21 Mar 2017 15:44:24 +0100
Subject: [PATCH] last minute fixes for AT gearbox aborts

---
 .../Models/SimulationComponent/Impl/Driver.cs | 19 ++++++++-------
 .../OutputData/SummaryDataContainer.cs        | 23 ++++++++++++++-----
 2 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
index 79ed9f108a..96f5f0d041 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
@@ -519,17 +519,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				Case<ResponseOverload>(r => {
 					if (DataBus.GearboxType.AutomaticTransmission()) {
 						// overload may happen because of gearshift between search and actual request, search again
-						DataBus.BrakePower = 0.SI<Watt>();
-						operatingPoint = SearchBrakingPower(absTime, operatingPoint.SimulationDistance, gradient,
-							operatingPoint.Acceleration, response);
-						DriverAcceleration = operatingPoint.Acceleration;
-						if (DataBus.BrakePower.IsSmaller(0)) {
+						var i = 5;
+						while (i-- > 0 && !(retVal is ResponseSuccess)) {
 							DataBus.BrakePower = 0.SI<Watt>();
+							operatingPoint = SearchBrakingPower(absTime, operatingPoint.SimulationDistance, gradient,
+								operatingPoint.Acceleration, response);
+							DriverAcceleration = operatingPoint.Acceleration;
+							if (DataBus.BrakePower.IsSmaller(0)) {
+								DataBus.BrakePower = 0.SI<Watt>();
 
-							operatingPoint = SearchOperatingPoint(absTime, ds, gradient, 0.SI<MeterPerSquareSecond>(), r);
+								operatingPoint = SearchOperatingPoint(absTime, ds, gradient, 0.SI<MeterPerSquareSecond>(), r);
+							}
+							retVal = NextComponent.Request(absTime, operatingPoint.SimulationInterval,
+								operatingPoint.Acceleration, gradient);
 						}
-						retVal = NextComponent.Request(absTime, operatingPoint.SimulationInterval,
-							operatingPoint.Acceleration, gradient);
 					} else {
 						throw new UnexpectedResponseException(
 							"DrivingAction Brake: request failed after braking power was found.", r);
diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
index 8b6cac9032..8830dd9c95 100644
--- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
@@ -236,12 +236,23 @@ namespace TUGraz.VectoCore.OutputData
 				row[CD_x_A] = runData.VehicleData.CrossWindCorrectionCurve.AirDragArea;
 				row[ROLLING_RESISTANCE_COEFFICIENT] = runData.VehicleData.TotalRollResistanceCoefficient.SI<Scalar>();
 				row[TRANSMISSION_TYPE] = runData.GearboxData.Type;
-				row[GEAR_RATIO_FIRST_GEAR] = runData.GearboxData.Gears.Count > 0
-					? runData.GearboxData.Gears.First().Value.Ratio.SI<Scalar>()
-					: 0.SI<Scalar>();
-				row[GEAR_RATIO_LAST_GEAR] = runData.GearboxData.Gears.Count > 0
-					? runData.GearboxData.Gears.Last().Value.Ratio.SI<Scalar>()
-					: 0.SI<Scalar>();
+				if (runData.GearboxData.Type.AutomaticTransmission()) {
+					row[GEAR_RATIO_FIRST_GEAR] = runData.GearboxData.Gears.Count > 0
+						? (double.IsNaN(runData.GearboxData.Gears.First().Value.Ratio)
+							? runData.GearboxData.Gears.First().Value.TorqueConverterRatio.SI<Scalar>()
+							: runData.GearboxData.Gears.First().Value.Ratio.SI<Scalar>())
+						: 0.SI<Scalar>();
+					row[GEAR_RATIO_LAST_GEAR] = runData.GearboxData.Gears.Count > 0
+						? runData.GearboxData.Gears.Last().Value.Ratio.SI<Scalar>()
+						: 0.SI<Scalar>();
+				} else {
+					row[GEAR_RATIO_FIRST_GEAR] = runData.GearboxData.Gears.Count > 0
+						? runData.GearboxData.Gears.First().Value.Ratio.SI<Scalar>()
+						: 0.SI<Scalar>();
+					row[GEAR_RATIO_LAST_GEAR] = runData.GearboxData.Gears.Count > 0
+						? runData.GearboxData.Gears.Last().Value.Ratio.SI<Scalar>()
+						: 0.SI<Scalar>();
+				}
 				row[AXLE_GEAR_RATIO] = runData.AxleGearData.AxleGear.Ratio.SI<Scalar>();
 				row[R_DYN] = runData.VehicleData.DynamicTyreRadius;
 				row[RETARDER_TYPE] = runData.Retarder.Type;
-- 
GitLab