From 5b85adb4ec2a9add418d0457613780089b13c90e Mon Sep 17 00:00:00 2001
From: "Zarb, Glenn" <STC\GZ1>
Date: Tue, 21 Jul 2015 15:29:53 +0000
Subject: [PATCH] Alternator seperate calculation for Pre run to improve
 performance

git-tfs-id: [http://tfs00.element.root.com:8080/tfs/TFSCollection]$/VECTO;C2021
---
 AdvancedAuxiliaryInterfaces/ISignals.vb       |  8 +++-
 AdvancedAuxiliaryInterfaces/Signals.vb        |  1 +
 VECTO/MODcalc/cPower.vb                       |  4 +-
 .../VectoAuxiliaries/AdvancedAuxiliaries.vb   |  2 +-
 .../Electrics/CombinedAlternator.vb           | 39 ++++++++++++++++---
 5 files changed, 45 insertions(+), 9 deletions(-)

diff --git a/AdvancedAuxiliaryInterfaces/ISignals.vb b/AdvancedAuxiliaryInterfaces/ISignals.vb
index d5d792df2b..258df85404 100644
--- a/AdvancedAuxiliaryInterfaces/ISignals.vb
+++ b/AdvancedAuxiliaryInterfaces/ISignals.vb
@@ -144,5 +144,11 @@ Public Interface ISignals
     ''' <returns></returns>
     ''' <remarks></remarks>
     Property StoredEnergyEfficiency As Single
-
+    ''' <summary>
+    ''' Running Calc
+    ''' </summary>
+    ''' <value></value>
+    ''' <returns></returns>
+    ''' <remarks></remarks>
+    Property RunningCalc As Boolean
 End Interface
diff --git a/AdvancedAuxiliaryInterfaces/Signals.vb b/AdvancedAuxiliaryInterfaces/Signals.vb
index 4f4ff6aa4b..4045539b2a 100644
--- a/AdvancedAuxiliaryInterfaces/Signals.vb
+++ b/AdvancedAuxiliaryInterfaces/Signals.vb
@@ -51,6 +51,7 @@ Implements ISignals
     Public Property EngineIdleSpeed As Single Implements ISignals.EngineIdleSpeed
     Public Property PneumaticOverrunUtilisation As Single Implements ISignals.PneumaticOverrunUtilisation
     Public Property StoredEnergyEfficiency As Single Implements ISignals.StoredEnergyEfficiency
+    Public Property RunningCalc As Boolean Implements ISignals.RunningCalc
 End Class
 
 
diff --git a/VECTO/MODcalc/cPower.vb b/VECTO/MODcalc/cPower.vb
index d5d5d6a622..a5b184f000 100644
--- a/VECTO/MODcalc/cPower.vb
+++ b/VECTO/MODcalc/cPower.vb
@@ -2568,10 +2568,10 @@ lb10:
              mAAUX_Global.advancedAuxModel.Signals.EngineDrivelineTorque =mAAUX_Global.EngineDrivelineTorque
              mAAUX_Global.advancedAuxModel.Signals.EngineMotoringPower = mAAUX_Global.EngineMotoringPower
              mAAUX_Global.advancedAuxModel.Signals.EngineSpeed = mAAUX_Global.EngineSpeed
-             mAAUX_Global.advancedAuxModel.Signals.PreExistingAuxPower  = mAAUX_Global.PreExistingAuxPower
+                mAAUX_Global.advancedAuxModel.Signals.PreExistingAuxPower = mAAUX_Global.PreExistingAuxPower
              mAAUX_Global.advancedAuxModel.Signals.Idle = mAAUX_Global.Idle
              mAAUX_Global.advancedAuxModel.Signals.InNeutral = mAAUX_Global.InNeutral
-
+                mAAUX_Global.advancedAuxModel.Signals.RunningCalc = mAAUX_Global.RunningCalc
 
              'Power coming out of Advanced Model is in Watts.
              power = (advancedAuxModel.AuxiliaryPowerAtCrankWatts /1000)
diff --git a/VECTOAux/VectoAuxiliaries/AdvancedAuxiliaries.vb b/VECTOAux/VectoAuxiliaries/AdvancedAuxiliaries.vb
index f1920d28f5..fa6098b33f 100644
--- a/VECTOAux/VectoAuxiliaries/AdvancedAuxiliaries.vb
+++ b/VECTOAux/VectoAuxiliaries/AdvancedAuxiliaries.vb
@@ -91,7 +91,7 @@ Public Class AdvancedAuxiliaries
         Signals.SmartPneumatics = auxConfig.PneumaticUserInputsConfig.SmartAirCompression
         Signals.PneumaticOverrunUtilisation = auxConfig.PneumaticAuxillariesConfig.OverrunUtilisationForCompressionFraction
 
-        alternatorMap = New CombinedAlternator(FilePathUtils.ResolveFilePath(vectoDirectory, auxConfig.ElectricalUserInputsConfig.AlternatorMap))
+        alternatorMap = New CombinedAlternator(FilePathUtils.ResolveFilePath(vectoDirectory, auxConfig.ElectricalUserInputsConfig.AlternatorMap), Signals)
 
         actuationsMap = New PneumaticActuationsMAP(FilePathUtils.ResolveFilePath(vectoDirectory, auxConfig.PneumaticUserInputsConfig.ActuationsMap))
 
diff --git a/VECTOAux/VectoAuxiliaries/Electrics/CombinedAlternator.vb b/VECTOAux/VectoAuxiliaries/Electrics/CombinedAlternator.vb
index 209920fa5e..8284637754 100644
--- a/VECTOAux/VectoAuxiliaries/Electrics/CombinedAlternator.vb
+++ b/VECTOAux/VectoAuxiliaries/Electrics/CombinedAlternator.vb
@@ -23,7 +23,8 @@ Public Class CombinedAlternator
         Private OriginalAlternators As New List(Of IAlternator)
         Private FilePath As String
         Private altSignals As ICombinedAlternatorSignals
-
+        Private Signals As ISignals
+        Private AverageAlternatorsEfficiency As AlternatorMapValues
 
         'Interface Implementation
         Public Function GetEfficiency(ByVal CrankRPM As Single, ByVal Amps As Single) As AlternatorMapValues Implements IAlternatorMap.GetEfficiency
@@ -31,7 +32,15 @@ Public Class CombinedAlternator
             altSignals.CrankRPM = CrankRPM
             altSignals.CurrentDemandAmps = Amps / Alternators.Count
 
-            Dim alternatorMapValues As New AlternatorMapValues(Convert.ToSingle(Alternators.Average(Function(a) a.Efficiency) / 100))
+            Dim alternatorMapValues As AlternatorMapValues = Nothing
+
+            If Signals Is Nothing OrElse Signals.RunningCalc Then
+                'If running calc cycle get efficiency from interpolation function
+                alternatorMapValues = New AlternatorMapValues(Convert.ToSingle(Alternators.Average(Function(a) a.Efficiency) / 100))
+            Else
+                'If running Pre calc cycle get an average of inputs
+                alternatorMapValues = AverageAlternatorsEfficiency
+            End If
 
             If alternatorMapValues.Efficiency <= 0 Then
                 alternatorMapValues = New AlternatorMapValues(0.01)
@@ -66,9 +75,10 @@ Public Class CombinedAlternator
         End Function
 
         'Constructors
-        Public Sub New(filePath As String)
+        Public Sub New(filePath As String, Optional signals As ISignals = Nothing)
 
             Dim feedback As String = String.Empty
+            Me.Signals = signals
 
             If Not FilePathUtils.ValidateFilePath(filePath, ".aalt", feedback) Then
                 Throw New ArgumentException(String.Format("Combined Alternator requires a valid .AALT filename. : {0}", feedback))
@@ -85,13 +95,32 @@ Public Class CombinedAlternator
             If File.Exists(filePath) AndAlso InitialiseMap(filePath) Then
                 Initialise()
             Else
-
                 'Create Default Map
                 CreateDefaultMap()
                 Initialise()
-
             End If
 
+            ' Calculate alternators average which is used only in the pre-run
+            Dim efficiencySum As Single
+            Dim efficiencyAverage As Single
+
+            For Each alt As IAlternator In Alternators
+                efficiencySum += alt.InputTable2000.ElementAt(1).Eff
+                efficiencySum += alt.InputTable2000.ElementAt(2).Eff
+                efficiencySum += alt.InputTable2000.ElementAt(3).Eff
+
+                efficiencySum += alt.InputTable4000.ElementAt(1).Eff
+                efficiencySum += alt.InputTable4000.ElementAt(2).Eff
+                efficiencySum += alt.InputTable4000.ElementAt(3).Eff
+
+                efficiencySum += alt.InputTable6000.ElementAt(1).Eff
+                efficiencySum += alt.InputTable6000.ElementAt(2).Eff
+                efficiencySum += alt.InputTable6000.ElementAt(3).Eff
+            Next
+
+            efficiencyAverage = efficiencySum / (Alternators.Count * 9)
+            AverageAlternatorsEfficiency = New AlternatorMapValues(efficiencyAverage / 100)
+
         End Sub
 
         'Helpers
-- 
GitLab