From a2abb76e6419c5135574e09abc500552feee8c43 Mon Sep 17 00:00:00 2001
From: Raphael Luz <luz@ivt.tugraz.at>
Date: Fri, 17 Apr 2015 12:43:55 +0200
Subject: [PATCH] - Limit engine rpm in torque converter operation acc. >
 acc_min - Shift up (C-to-L, L-to-L) if acc. > acc_min and next-gear-rpm >
 threshold

---
 VECTO/Input Files/cGBX.vb | 14 +++++++++++++-
 VECTO/MODcalc/cPower.vb   | 21 +++++++++++++++------
 VECTO/cDEV.vb             | 16 ++++++++++------
 3 files changed, 38 insertions(+), 13 deletions(-)

diff --git a/VECTO/Input Files/cGBX.vb b/VECTO/Input Files/cGBX.vb
index abd1335fec..f013de2d7f 100644
--- a/VECTO/Input Files/cGBX.vb	
+++ b/VECTO/Input Files/cGBX.vb	
@@ -433,6 +433,8 @@ Public Class cGBX
 		Dim Brake As Boolean
 		Dim FirstDone As Boolean
 
+		Dim rpmLimit As Single
+
 		Dim MsgSrc As String
 
 		MsgSrc = "GBX/TCiteration/t= " & t + 1
@@ -443,6 +445,16 @@ Public Class cGBX
 		Brake = False
 		TCNeutral = False
 
+		'TC rpm limit
+		If DEV.TClimitOn Then
+			If MODdata.Vh.a(t) >= DEV.TCaccmin Then
+				rpmLimit = DEV.TClimit
+			Else
+				rpmLimit = ENG.Nrated
+			End If
+		Else
+			rpmLimit = ENG.Nrated
+		End If
 
 		'Power to torque
 		Mout = nPeToM(nUout, PeOut)
@@ -461,7 +473,7 @@ Public Class cGBX
 			nuMax = Math.Min(TCnu(TCdim), nUout/ENG.Nidle)
 
 		Else
-			nuMin = Math.Max(nUout/DEV.TClimit, TCnu(0))
+			nuMin = Math.Max(nUout / rpmLimit, TCnu(0))
 			nuMax = Math.Min(TCnuMax, nUout/ENG.Nidle)
 		End If
 
diff --git a/VECTO/MODcalc/cPower.vb b/VECTO/MODcalc/cPower.vb
index 035f8ab5cc..241f87321f 100644
--- a/VECTO/MODcalc/cPower.vb
+++ b/VECTO/MODcalc/cPower.vb
@@ -1962,18 +1962,27 @@ Public Class cPower
 
 		'Upshift
 		If PlusGearLockUp Then
-			If nUnext > nUup AndAlso Pe <= FLD(LastGear + 1).Pfull(nUnext) Then
-				Return LastGear + 1
+			'C-to-L / L-to-L
+			If DEV.TCshiftModeNew Then
+				If _
+					nUnext > nUup AndAlso
+					fPeGearMod(LastGear + 1, t, MODdata.Vh.V(t), DEV.TCaccmin, Grad) <= FLD(LastGear + 1).Pfull(nUnext) Then
+					Return LastGear + 1
+				End If
+			Else
+				If nUnext > nUup AndAlso Pe <= FLD(LastGear + 1).Pfull(nUnext) Then
+					Return LastGear + 1
+				End If
 			End If
 		Else
-			'1C-to-2C
+			'C-to-C
 			If LastGear < GBX.GearCount Then
 
-				iRatio = GBX.Igetr(LastGear + 1)/GBX.Igetr(LastGear)
+				iRatio = GBX.Igetr(LastGear + 1) / GBX.Igetr(LastGear)
 
 				If _
-					fnUout(Vact, LastGear + 1) > Math.Min(900, iRatio*(FLD(LastGear).N80h - 150)) AndAlso
-					FLD(LastGear + 1).Pfull(nU*iRatio) > 0.7*FLD(LastGear).Pfull(nU) Then
+					fnUout(Vact, LastGear + 1) > Math.Min(900, iRatio * (FLD(LastGear).N80h - 150)) AndAlso
+					FLD(LastGear + 1).Pfull(nU * iRatio) > 0.7 * FLD(LastGear).Pfull(nU) Then
 					Return LastGear + 1
 				End If
 			End If
diff --git a/VECTO/cDEV.vb b/VECTO/cDEV.vb
index 94e93d03da..e2d9d00f7a 100644
--- a/VECTO/cDEV.vb
+++ b/VECTO/cDEV.vb
@@ -16,11 +16,12 @@ Public Class cDEV
 	Private MyOptions As Dictionary(Of String, cDEVoption)
 	Private iOptionsDim As Integer
 
+	Public AdvFormat As Boolean
 	Public TCiterPrec As Single
+	Public TClimitOn As Boolean
 	Public TClimit As Single
-
-
-	Public AdvFormat As Boolean
+	Public TCshiftModeNew As Boolean
+	Public TCaccmin As Single
 
 
 	'**************************************************************************************************************
@@ -136,14 +137,14 @@ Public Class cDEV
 
 		Conf0 = New cDEVoption(tDEVconfType.tSelection,
 								"Acceleration for AT Up-Shift power condition")
-		Conf0.AddMode("acc_target (old)")
-		Conf0.AddMode("acc_min (new)")
+		Conf0.AddMode("acc_target")	'0
+		Conf0.AddMode("acc_min")		'1
 		Conf0.ModeIndex = 1
 		MyOptions.Add("TCshiftMode", Conf0)
 
 
 		Conf0 = New cDEVoption(tDEVconfType.tSingleVal, "Minimum acceleration (acc_min) for TC rpm limit and AT-Shift [m/s²]")
-		Conf0.SingleVal = 0.02
+		Conf0.SingleVal = 0.025
 		MyOptions.Add("TCaccMin", Conf0)
 
 
@@ -158,7 +159,10 @@ Public Class cDEV
 	Public Sub SetOptions()
 		TCiterPrec = MyOptions("TCiterPrec").SingleVal
 		AdvFormat = MyOptions("AdvFormat").BoolVal
+		TClimitOn = MyOptions("TClimitOn").BoolVal
 		TClimit = MyOptions("TClimit").SingleVal
+		TCshiftModeNew = (MyOptions("TCshiftMode").ModeIndex = 1)
+		TCaccmin = MyOptions("TCaccMin").SingleVal
 	End Sub
 
 	'Demo for Delegate Function
-- 
GitLab