From 5bb12f9e70d97b3ff611fd53548dfe74c8e63782 Mon Sep 17 00:00:00 2001
From: "Zarb, Glenn" <STC\GZ1>
Date: Tue, 7 Jul 2015 11:50:09 +0000
Subject: [PATCH] Fix HVAC calculation bug

git-tfs-id: [http://tfs00.element.root.com:8080/tfs/TFSCollection]$/VECTO;C2007
---
 .../VectoAuxiliaries/Hvac/SSMCalculate.vb     |  16 +-
 VECTOAux/VectoAuxiliaries/Hvac/SSMTOOL.vb     |   2 +-
 VECTOAux/VectoAuxiliaries/Hvac/SSMTechList.vb | 528 ++++++++++++------
 3 files changed, 359 insertions(+), 187 deletions(-)

diff --git a/VECTOAux/VectoAuxiliaries/Hvac/SSMCalculate.vb b/VECTOAux/VectoAuxiliaries/Hvac/SSMCalculate.vb
index 2322f7a9ce..904add607f 100644
--- a/VECTOAux/VectoAuxiliaries/Hvac/SSMCalculate.vb
+++ b/VECTOAux/VectoAuxiliaries/Hvac/SSMCalculate.vb
@@ -239,7 +239,7 @@ Namespace Hvac
                 'Dim M89 = Run1.TotalW
                 'Dim M90 = Run2.TotalW
 
-                Return If(gen.EC_EnviromentalTemperature < gen.BC_TemperatureCoolingTurnsOff, 0, If(gen.AC_CompressorTypeDerived = "electrical", 0, If(Run1.TotalW > 0 AndAlso Run2.TotalW > 0, Math.Min(Run1.TotalW, Run2.TotalW), 0)))
+                Return If(gen.EC_EnviromentalTemperature < gen.BC_TemperatureCoolingTurnsOff, 0, If(gen.AC_CompressorTypeDerived.ToLower() = "electrical", 0, If(Run1.TotalW > 0 AndAlso Run2.TotalW > 0, Math.Min(Run1.TotalW, Run2.TotalW), 0)))
 
            End Get
         End Property
@@ -255,7 +255,7 @@ Namespace Hvac
                 'Dim M89 = Run1.TotalW
                 'Dim M90 = Run2.TotalW
 
-                Return If(gen.EC_EnviromentalTemperature < gen.BC_TemperatureCoolingTurnsOff, 0, If(gen.AC_CompressorTypeDerived = "electrical", If(Run1.TotalW > 0 AndAlso Run2.TotalW > 0, Math.Min(Run1.TotalW, Run2.TotalW), 0), 0))
+                Return If(gen.EC_EnviromentalTemperature < gen.BC_TemperatureCoolingTurnsOff, 0, If(gen.AC_CompressorTypeDerived.ToLower() = "electrical", If(Run1.TotalW > 0 AndAlso Run2.TotalW > 0, Math.Min(Run1.TotalW, Run2.TotalW), 0), 0))
 
             End Get
         End Property
@@ -381,9 +381,9 @@ Namespace Hvac
                 'Dim C40 As Double   =  gen.BC_MaxPossibleBenefitFromTechnologyList
                 'Dim C48 As string   =  gen.AC_CompressorType
 
-                result = If(If(gen.AC_CompressorType.ToLower = "mechanical", tl.CValueVariation, 0) > 0, _
-                                Math.Min(If(gen.AC_CompressorType = "mechanical", tl.CValueVariation, 0), gen.BC_MaxPossibleBenefitFromTechnologyList), _
-                                Math.Max(If(gen.AC_CompressorType = "mechanical", tl.CValueVariation, 0), -gen.BC_MaxPossibleBenefitFromTechnologyList))
+                result = If(If(gen.AC_CompressorType.ToLower() = "mechanical", tl.CValueVariation, 0) > 0, _
+                                Math.Min(If(gen.AC_CompressorType.ToLower() = "mechanical", tl.CValueVariation, 0), gen.BC_MaxPossibleBenefitFromTechnologyList), _
+                                Math.Max(If(gen.AC_CompressorType.ToLower() = "mechanical", tl.CValueVariation, 0), -gen.BC_MaxPossibleBenefitFromTechnologyList))
 
                 Return result
 
@@ -402,9 +402,9 @@ Namespace Hvac
                 'Dim C40 As Double   =  gen.BC_MaxPossibleBenefitFromTechnologyList
                 'Dim C48 As string   =  gen.AC_CompressorType
 
-                result = If(If(gen.AC_CompressorType.ToLower = "mechanical", 0, tl.CValueVariation) > 0, _
-                            Math.Min(If(gen.AC_CompressorType.ToLower = "mechanical", 0, tl.CValueVariation), gen.BC_MaxPossibleBenefitFromTechnologyList), _
-                            Math.Max(If(gen.AC_CompressorType.ToLower = "mechanical", 0, tl.CValueVariation), -gen.BC_MaxPossibleBenefitFromTechnologyList))
+                result = If(If(gen.AC_CompressorType.ToLower() = "mechanical", 0, tl.CValueVariation) > 0, _
+                            Math.Min(If(gen.AC_CompressorType.ToLower() = "mechanical", 0, tl.CValueVariation), gen.BC_MaxPossibleBenefitFromTechnologyList), _
+                            Math.Max(If(gen.AC_CompressorType.ToLower() = "mechanical", 0, tl.CValueVariation), -gen.BC_MaxPossibleBenefitFromTechnologyList))
 
                 Return result
 
diff --git a/VECTOAux/VectoAuxiliaries/Hvac/SSMTOOL.vb b/VECTOAux/VectoAuxiliaries/Hvac/SSMTOOL.vb
index 6491996754..034d498c72 100644
--- a/VECTOAux/VectoAuxiliaries/Hvac/SSMTOOL.vb
+++ b/VECTOAux/VectoAuxiliaries/Hvac/SSMTOOL.vb
@@ -77,7 +77,7 @@ Namespace Hvac
             Me.HVACConstants = hvacConstants
 
             GenInputs = New SSMGenInputs(useTestValues)
-            TechList = New SSMTechList(filePath, GenInputs)
+            TechList = New SSMTechList(filePath, GenInputs, useTestValues)
 
             Calculate = New SSMCalculate(Me)
 
diff --git a/VECTOAux/VectoAuxiliaries/Hvac/SSMTechList.vb b/VECTOAux/VectoAuxiliaries/Hvac/SSMTechList.vb
index 2ff634cd10..fc1d712ad1 100644
--- a/VECTOAux/VectoAuxiliaries/Hvac/SSMTechList.vb
+++ b/VECTOAux/VectoAuxiliaries/Hvac/SSMTechList.vb
@@ -4,57 +4,57 @@ Namespace Hvac
 
 'Used By SSMTOOL Class.
 Public Class SSMTechList
- Implements ISSMTechList
+        Implements ISSMTechList
 
-  'Private Fields
-  Private filePath As String
-  Private _ssmInputs As ISSMGenInputs
-  Private _dirty As Boolean
+        'Private Fields
+        Private filePath As String
+        Private _ssmInputs As ISSMGenInputs
+        Private _dirty As Boolean
 
-  public property  TechLines As List(Of ITechListBenefitLine)  Implements ISSMTechList.TechLines
-  
-  'Constructors
-  Public Sub New(filepath As String, genInputs As ISSMGenInputs) 
-  
-     Me.TechLines = New List(Of ITechListBenefitLine)
+        Public Property TechLines As List(Of ITechListBenefitLine) Implements ISSMTechList.TechLines
 
-     Me.filePath= Filepath
-  
-     Me._ssmInputs = genInputs
+        'Constructors
+        Public Sub New(filepath As String, genInputs As ISSMGenInputs, Optional initialiseDefaults As Boolean = False)
 
+            Me.TechLines = New List(Of ITechListBenefitLine)
 
-  
-  End Sub
+            Me.filePath = filepath
 
+            Me._ssmInputs = genInputs
 
-  Public Sub SetSSMGeneralInputs( genInputs As ISSMGenInputs) Implements ISSMTechList.SetSSMGeneralInputs
+            If initialiseDefaults Then SetDefaults()
 
-     _ssmInputs = genInputs
+        End Sub
 
-  End Sub
 
-  'Initialisation Methods
-  Public Function Initialise( filePath As String ) As Boolean Implements ISSMTechList.Initialise
+        Public Sub SetSSMGeneralInputs(genInputs As ISSMGenInputs) Implements ISSMTechList.SetSSMGeneralInputs
 
-     Me.filePath=filePath
+            _ssmInputs = genInputs
 
-     Return Initialise()
+        End Sub
 
-  End Function
-  Public Function Initialise( ) As Boolean Implements ISSMTechList.Initialise
+        'Initialisation Methods
+        Public Function Initialise(filePath As String) As Boolean Implements ISSMTechList.Initialise
+
+            Me.filePath = filePath
+
+            Return Initialise()
+
+        End Function
+        Public Function Initialise() As Boolean Implements ISSMTechList.Initialise
 
 
 
             Dim returnStatus As Boolean = True
 
-                If File.Exists(filePath) Then
+            If File.Exists(filePath) Then
                 Using sr As StreamReader = New StreamReader(filePath)
                     'get array og lines fron csv
                     Dim lines() As String = sr.ReadToEnd().Split(CType(Environment.NewLine, Char()), StringSplitOptions.RemoveEmptyEntries)
 
                     'Must have at least 2 entries in map to make it usable [dont forget the header row]
                     If (lines.Count() < 1) Then
-                         Return False
+                        Return False
                     End If
 
                     Dim firstline As Boolean = True
@@ -94,31 +94,31 @@ Public Class SSMTechList
 
 
 
-                               Dim tbline As New TechListBenefitLine(_ssmInputs,
-                                 elements(2),
-                                 elements(0),
-                                 elements(1),
-                                 elements(3),
-                                 elements(4), 
-                                 elements(5),
-                                 elements(6),
-                                 elements(7),
-                                 elements(8),
-                                 elements(9),
-                                 elements(10), 
-                                 elements(11),
-                                 elements(12),
-                                 elements(13),
-                                 elements(14),
-                                 elements(15),
-                                 elements(16))
+                                Dim tbline As New TechListBenefitLine(_ssmInputs,
+                                    elements(2),
+                                    elements(0),
+                                    elements(1),
+                                    elements(3),
+                                    elements(4),
+                                    elements(5),
+                                    elements(6),
+                                    elements(7),
+                                    elements(8),
+                                    elements(9),
+                                    elements(10),
+                                    elements(11),
+                                    elements(12),
+                                    elements(13),
+                                    elements(14),
+                                    elements(15),
+                                    elements(16))
 
                                 TechLines.Add(tbline)
 
                             Catch ex As Exception
 
-                               'Indicate problems
-                               returnStatus = False
+                                'Indicate problems
+                                returnStatus = False
 
                             End Try
 
@@ -133,228 +133,400 @@ Public Class SSMTechList
                 End Using
 
             Else
-               returnStatus = False
+                returnStatus = False
             End If
 
-           Return returnStatus
+            Return returnStatus
 
 
-End Function
+        End Function
 
-  'Public Properties - Outputs Of Class
-  Public ReadOnly Property CValueVariation As Double Implements ISSMTechList.CValueVariation
+        'Public Properties - Outputs Of Class
+        Public ReadOnly Property CValueVariation As Double Implements ISSMTechList.CValueVariation
             Get
-                 Dim a,b As double
+                Dim a As Double
+
+                a = TechLines.Where(Function(x) x.Units.ToLower = "fraction").Sum(Function(s) s.C)
+                
+                Return a
 
-                 a= TechLines.Where( Function(x) x.Units.ToLower="fraction").Sum( Function(s) s.C)
-                 b= TechLines.Where( Function(x) x.Units.ToLower="kw").Sum( Function(s) s.C) 
-                 
-                 Return a
-                 
             End Get
         End Property
-  Public ReadOnly Property CValueVariationKW As Double Implements ISSMTechList.CValueVariationKW
+        Public ReadOnly Property CValueVariationKW As Double Implements ISSMTechList.CValueVariationKW
             Get
 
-                  Dim a As double
+                Dim a As Double
 
-                 a= TechLines.Where( Function(x) x.Units.ToLower="kw").Sum( Function(s) s.C) 
+                a = TechLines.Where(Function(x) x.Units.ToLower = "kw").Sum(Function(s) s.C)
 
-                 Return a
+                Return a
 
             End Get
         End Property
-  Public ReadOnly Property HValueVariation As Double Implements ISSMTechList.HValueVariation
+        Public ReadOnly Property HValueVariation As Double Implements ISSMTechList.HValueVariation
             Get
 
-               'Dim a,b As double
-               Return TechLines.Where( Function(x) x.Units="fraction").Sum( Function(s) s.H) 
-              ' a =  
-             '  b =  HValueVariationKW
-             '  Return a-b
+                'Dim a,b As double
+                Return TechLines.Where(Function(x) x.Units = "fraction").Sum(Function(s) s.H)
+                ' a =  
+                '  b =  HValueVariationKW
+                '  Return a-b
             End Get
         End Property
-  Public ReadOnly Property HValueVariationKW As Double Implements ISSMTechList.HValueVariationKW
+        Public ReadOnly Property HValueVariationKW As Double Implements ISSMTechList.HValueVariationKW
             Get
-             Return TechLines.Where( Function(x) x.Units.ToLower="kw").Sum( Function(s) s.H)
+                Return TechLines.Where(Function(x) x.Units.ToLower = "kw").Sum(Function(s) s.H)
             End Get
         End Property
-  Public ReadOnly Property VCValueVariation As Double Implements ISSMTechList.VCValueVariation
+        Public ReadOnly Property VCValueVariation As Double Implements ISSMTechList.VCValueVariation
             Get
-                 Return TechLines.Where( Function(x) x.Units.ToLower="fraction").Sum( Function(s) s.VC) '-  VCValueVariationKW
+                Return TechLines.Where(Function(x) x.Units.ToLower = "fraction").Sum(Function(s) s.VC) '-  VCValueVariationKW
             End Get
         End Property
-  Public ReadOnly Property VCValueVariationKW As Double Implements ISSMTechList.VCValueVariationKW
+        Public ReadOnly Property VCValueVariationKW As Double Implements ISSMTechList.VCValueVariationKW
             Get
-               Return TechLines.Where( Function(x) x.Units.ToLower="kw").Sum( Function(s) s.VC)
+                Return TechLines.Where(Function(x) x.Units.ToLower = "kw").Sum(Function(s) s.VC)
             End Get
         End Property
-  Public ReadOnly Property VHValueVariation As Double Implements ISSMTechList.VHValueVariation
+        Public ReadOnly Property VHValueVariation As Double Implements ISSMTechList.VHValueVariation
             Get
-               'Dim a,b As double
+                'Dim a,b As double
 
-               Return TechLines.Where( Function(x) x.Units.ToLower="fraction").Sum( Function(s) s.VH)
-               'a=TechLines.Where( Function(x) x.Units="fraction").Sum( Function(s) s.VH)
-               'b=VHValueVariationKW
-               ' Return  a-b
+                Return TechLines.Where(Function(x) x.Units.ToLower = "fraction").Sum(Function(s) s.VH)
+                'a=TechLines.Where( Function(x) x.Units="fraction").Sum( Function(s) s.VH)
+                'b=VHValueVariationKW
+                ' Return  a-b
             End Get
         End Property
-  Public ReadOnly Property VHValueVariationKW As Double Implements ISSMTechList.VHValueVariationKW
+        Public ReadOnly Property VHValueVariationKW As Double Implements ISSMTechList.VHValueVariationKW
             Get
-              Return TechLines.Where( Function(x) x.Units.ToLower="kw").Sum( Function(s) s.VH)
+                Return TechLines.Where(Function(x) x.Units.ToLower = "kw").Sum(Function(s) s.VH)
             End Get
         End Property
-  Public ReadOnly Property VVValueVariation As Double Implements ISSMTechList.VVValueVariation
+        Public ReadOnly Property VVValueVariation As Double Implements ISSMTechList.VVValueVariation
             Get
-               Return TechLines.Where( Function(x) x.Units.ToLower="fraction").Sum( Function(s) s.VV)
+                Return TechLines.Where(Function(x) x.Units.ToLower = "fraction").Sum(Function(s) s.VV)
             End Get
         End Property
-  Public ReadOnly Property VVValueVariationKW As Double Implements ISSMTechList.VVValueVariationKW
+        Public ReadOnly Property VVValueVariationKW As Double Implements ISSMTechList.VVValueVariationKW
             Get
-                Return TechLines.Where( Function(x) x.Units.ToLower="kw").Sum( Function(s) s.VV)' - VVValueVariationKW
+                Return TechLines.Where(Function(x) x.Units.ToLower = "kw").Sum(Function(s) s.VV) ' - VVValueVariationKW
             End Get
         End Property
 
+        'Member Management
+        Public Function Add(item As ITechListBenefitLine, ByRef feedback As String) As Boolean Implements ISSMTechList.Add
 
-  'Member Management
-  Public Function Add(item As ITechListBenefitLine, ByRef feedback As String) As Boolean Implements ISSMTechList.Add
+            Dim initialCount As Integer = TechLines.Count
 
-           Dim initialCount As Integer = TechLines.Count
+            If TechLines.Where(Function(w) w.Category = item.Category AndAlso w.BenefitName = item.BenefitName).count() > 0 Then
+                'Failure
+                feedback = "Item already exists."
+                Return False
+            End If
 
-           If TechLines.Where( Function(w) w.Category=item.Category AndAlso w.BenefitName= item.BenefitName).count()>0 then
-              'Failure
-              feedback="Item already exists."
-              Return false
-           End If
 
-           
-           Try
+            Try
 
-             TechLines.Add( item )
+                TechLines.Add(item)
 
-             If TechLines.Count = initialCount + 1 then
+                If TechLines.Count = initialCount + 1 Then
 
-              'Success
-              feedback="OK"
-              _dirty=true
-              Return true
+                    'Success
+                    feedback = "OK"
+                    _dirty = True
+                    Return True
 
-            Else
-              
-              'Failure
-             feedback="The system was unable to add the new tech benefit list item."
-              Return false
+                Else
+
+                    'Failure
+                    feedback = "The system was unable to add the new tech benefit list item."
+                    Return False
 
-             End If
+                End If
 
-           Catch ex As Exception
+            Catch ex As Exception
 
-              feedback="The system threw an exception and was unable to add the new tech benefit list item."
-              Return false
+                feedback = "The system threw an exception and was unable to add the new tech benefit list item."
+                Return False
 
-           End Try
+            End Try
 
 
         End Function
-  Public Sub Clear() Implements ISSMTechList.Clear
-           
-           If TechLines.Count>0 then _dirty=true
+        Public Sub Clear() Implements ISSMTechList.Clear
+
+            If TechLines.Count > 0 Then _dirty = True
+
+            TechLines.Clear()
+
 
-           TechLines.Clear()
 
+        End Sub
+        Public Function Delete(item As ITechListBenefitLine, ByRef feedback As String) As Boolean Implements ISSMTechList.Delete
 
+            Dim currentCount As Integer = TechLines.Count
 
-   End Sub
-  Public Function Delete(item As ITechListBenefitLine, ByRef feedback As String) As Boolean Implements ISSMTechList.Delete
+            If (TechLines.Where(Function(c) c.Category = item.Category AndAlso c.BenefitName = item.BenefitName).Count = 1) Then
 
-          Dim currentCount As Integer = TechLines.Count
+                Try
+                    TechLines.RemoveAt(TechLines.FindIndex(Function(c) c.Category = item.Category AndAlso c.BenefitName = item.BenefitName))
 
-           If( TechLines.Where( Function(c) c.Category= item.Category AndAlso c.BenefitName= item.BenefitName).Count=1) then
+                    If TechLines.Count = currentCount - 1 Then
+                        'This succeeded
+                        _dirty = True
+                        Return True
+                    Else
+                        'No Exception, but this failed for some reason.
+                        feedback = "The system was unable to remove the item from the list."
+                        Return False
 
-           try
-               TechLines.RemoveAt(  TechLines.FindIndex( Function(c) c.Category= item.Category AndAlso c.BenefitName= item.BenefitName))
-               
-               If TechLines.Count = currentCount-1 then
-                  'This succeeded
-                  _dirty=true
-                  return True              
-               Else
-                  'No Exception, but this failed for some reason.
-                  feedback="The system was unable to remove the item from the list."
-                  Return false
+                    End If
+
+                Catch ex As Exception
 
-               End If
+                    feedback = "An exception occured, the removal failed."
+                    Return False
 
-             Catch ex As Exception
-            
-                 feedback="An exception occured, the removal failed."
-                 Return false
+                End Try
 
-             end try
 
+            Else
 
-           else
-           
-             feedback="the item was not found in the list."
-             Return false    
+                feedback = "the item was not found in the list."
+                Return False
 
-           End If
+            End If
 
         End Function
-  Public Function Modify( originalItem As ITechListBenefitLine, newItem As ITechListBenefitLine, ByRef feedback As String) As Boolean Implements ISSMTechList.Modify
+        Public Function Modify(originalItem As ITechListBenefitLine, newItem As ITechListBenefitLine, ByRef feedback As String) As Boolean Implements ISSMTechList.Modify
 
-           Dim fi As TechListBenefitLine = TechLines.Find( Function(f) (f.Category= originalitem.Category) AndAlso f.BenefitName= originalitem.BenefitName )
-           Dim originalUnits As String =fi.Units
+            Dim fi As TechListBenefitLine = TechLines.Find(Function(f) (f.Category = originalitem.Category) AndAlso f.BenefitName = originalitem.BenefitName)
+            Dim originalUnits As String = fi.Units
 
-           If( Not fi is Nothing ) then
+            If (Not fi Is Nothing) Then
 
-           try
+                Try
 
-               fi.CloneFrom( newItem )
+                    fi.CloneFrom(newItem)
 
-               'The lines below are to assist in testing. The KW units are being excluded, but for benchmarking against the spreadsheet model
-               'Two KW entries are left in. There is no provision for adding KW units in so we check if the original entry was KW and 
-               'force it back to KW if it was already so. There shoud be no need to remove this as newly created lists will not match this
-               'Phenomenon.
-               If( originalUnits.ToLower= "kw") then  
-                  fi.Units=originalUnits   
-                  newItem.Units=originalUnits          
-               End If
-                     
-               If newItem = fi then
-                  'This succeeded
-                  _dirty=true
-                  return True              
-               Else
-                  'No Exception, but this failed for some reason.
-                  feedback="The system was unable to remove the item from the list."
-                  Return false
+                    'The lines below are to assist in testing. The KW units are being excluded, but for benchmarking against the spreadsheet model
+                    'Two KW entries are left in. There is no provision for adding KW units in so we check if the original entry was KW and 
+                    'force it back to KW if it was already so. There shoud be no need to remove this as newly created lists will not match this
+                    'Phenomenon.
+                    If (originalUnits.ToLower = "kw") Then
+                        fi.Units = originalUnits
+                        newItem.Units = originalUnits
+                    End If
 
-               End If
+                    If newItem = fi Then
+                        'This succeeded
+                        _dirty = True
+                        Return True
+                    Else
+                        'No Exception, but this failed for some reason.
+                        feedback = "The system was unable to remove the item from the list."
+                        Return False
 
-             Catch ex As Exception
-            
-                 feedback="An exception occured, the update failed."
-                 Return false
+                    End If
 
-             end try
+                Catch ex As Exception
 
+                    feedback = "An exception occured, the update failed."
+                    Return False
 
-           else
-           
-             feedback="the item was not found so cannot be modified."
-             Return false    
+                End Try
 
-           End If
 
+            Else
 
-        End Function
+                feedback = "the item was not found so cannot be modified."
+                Return False
 
+            End If
 
 
-End Class
+        End Function
 
+#Region "Default Values"
+
+        Private Sub SetDefaults()
+
+            Dim techLine1 As ITechListBenefitLine = New TechListBenefitLine()
+            With techLine1
+                .Category = "Cooling"
+                .BenefitName = "Separate air distribution ducts"
+                .LowFloorH = 0
+                .LowFloorC = 0.04
+                .LowFloorV = 0
+                .SemiLowFloorH = 0
+                .SemiLowFloorC = 0.04
+                .SemiLowFloorV = 0
+                .RaisedFloorH = 0
+                .RaisedFloorC = 0.04
+                .RaisedFloorV = 0
+                .ActiveVH = 0
+                .ActiveVV = 0
+                .ActiveVC = 0
+                .OnVehicle = False
+                .Units = "fraction"
+            End With
+
+            Dim techLine2 As ITechListBenefitLine = New TechListBenefitLine()
+            With techLine2
+                .Category = "Heating"
+                .BenefitName = "Adjustable auxiliary heater"
+                .LowFloorH = 0.02
+                .LowFloorC = 0
+                .LowFloorV = 0
+                .SemiLowFloorH = 0.02
+                .SemiLowFloorC = 0
+                .SemiLowFloorV = 0
+                .RaisedFloorH = 0.02
+                .RaisedFloorC = 0
+                .RaisedFloorV = 0
+                .ActiveVH = 0
+                .ActiveVV = 0
+                .ActiveVC = 0
+                .OnVehicle = False
+                .Units = "fraction"
+            End With
+
+            Dim techLine3 As ITechListBenefitLine = New TechListBenefitLine()
+            With techLine3
+                .Category = "Heating"
+                .BenefitName = "Adjustable coolant thermostat"
+                .LowFloorH = 0.02
+                .LowFloorC = 0
+                .LowFloorV = 0
+                .SemiLowFloorH = 0.02
+                .SemiLowFloorC = 0
+                .SemiLowFloorV = 0
+                .RaisedFloorH = 0.02
+                .RaisedFloorC = 0
+                .RaisedFloorV = 0
+                .ActiveVH = 0
+                .ActiveVV = 0
+                .ActiveVC = 0
+                .OnVehicle = False
+                .Units = "fraction"
+            End With
+
+            Dim techLine4 As ITechListBenefitLine = New TechListBenefitLine()
+            With techLine4
+                .Category = "Heating"
+                .BenefitName = "Engine waste gas heat exchanger"
+                .LowFloorH = 0.04
+                .LowFloorC = 0
+                .LowFloorV = 0
+                .SemiLowFloorH = 0
+                .SemiLowFloorC = 0
+                .SemiLowFloorV = 0
+                .RaisedFloorH = 0
+                .RaisedFloorC = 0
+                .RaisedFloorV = 0
+                .ActiveVH = 0
+                .ActiveVV = 0
+                .ActiveVC = 0
+                .OnVehicle = False
+                .Units = "fraction"
+            End With
+
+            Dim techLine5 As ITechListBenefitLine = New TechListBenefitLine()
+            With techLine5
+                .Category = "Heating"
+                .BenefitName = "Heat pump systems"
+                .LowFloorH = 0.06
+                .LowFloorC = 0
+                .LowFloorV = 0
+                .SemiLowFloorH = 0.04
+                .SemiLowFloorC = 0
+                .SemiLowFloorV = 0
+                .RaisedFloorH = 0.04
+                .RaisedFloorC = 0
+                .RaisedFloorV = 0
+                .ActiveVH = 0
+                .ActiveVV = 0
+                .ActiveVC = 0
+                .OnVehicle = False
+                .Units = "fraction"
+            End With
+
+            Dim techLine6 As ITechListBenefitLine = New TechListBenefitLine()
+            With techLine6
+                .Category = "Insulation"
+                .BenefitName = "Double-glazing"
+                .LowFloorH = 0.04
+                .LowFloorC = 0.04
+                .LowFloorV = 0
+                .SemiLowFloorH = 0.04
+                .SemiLowFloorC = 0.04
+                .SemiLowFloorV = 0
+                .RaisedFloorH = 0.04
+                .RaisedFloorC = 0.04
+                .RaisedFloorV = 0
+                .ActiveVH = 0
+                .ActiveVV = 0
+                .ActiveVC = 0
+                .OnVehicle = False
+                .Units = "fraction"
+            End With
+
+            Dim techLine7 As ITechListBenefitLine = New TechListBenefitLine()
+            With techLine7
+                .Category = "Insulation"
+                .BenefitName = "Tinted windows"
+                .LowFloorH = 0
+                .LowFloorC = 0
+                .LowFloorV = 0
+                .SemiLowFloorH = 0
+                .SemiLowFloorC = 0
+                .SemiLowFloorV = 0
+                .RaisedFloorH = 0
+                .RaisedFloorC = 0
+                .RaisedFloorV = 0
+                .ActiveVH = 0
+                .ActiveVV = 0
+                .ActiveVC = 0
+                .OnVehicle = False
+                .Units = "fraction"
+            End With
+
+            Dim techLine8 As ITechListBenefitLine = New TechListBenefitLine()
+            With techLine8
+                .Category = "Ventilation"
+                .BenefitName = "Fan control strategy (serial/parallel)"
+                .LowFloorH = 0
+                .LowFloorC = 0
+                .LowFloorV = 0
+                .SemiLowFloorH = 0
+                .SemiLowFloorC = 0
+                .SemiLowFloorV = 0
+                .RaisedFloorH = 0
+                .RaisedFloorC = 0
+                .RaisedFloorV = 0
+                .ActiveVH = 0.02
+                .ActiveVV = 0.02
+                .ActiveVC = 0.02
+                .OnVehicle = False
+                .Units = "fraction"
+            End With
+
+            Dim feedback As String = String.Empty
+            Add(techLine1, feedback)
+            Add(techLine2, feedback)
+            Add(techLine3, feedback)
+            Add(techLine4, feedback)
+            Add(techLine5, feedback)
+            Add(techLine6, feedback)
+            Add(techLine7, feedback)
+            Add(techLine8, feedback)
+
+        End Sub
+
+#End Region
 
+End Class
 
 End Namespace
 
-- 
GitLab