Module: BTAP::BridgingData

Included in:
Bridging
Defined in:
lib/openstudio-standards/btap/bridging.rb

Overview

—- —- —- —- —- —- —- —- —- —- —- —- —- —- —- #

Constant Summary collapse

MASS2 =

— —- —- —- —- —- —- —- —- —- —- —- —- —- — # BTAP costing data (both original BTAP constructions and EVOKE’s additions) hold sub-variants based on cladding/veneer, e.g.:

- "BTAP-ExteriorWall-WoodFramed-5" ... brick veneer
- "BTAP-ExteriorWall-WoodFramed-1" ... wood siding

Not all of these sub-variants are currently used within BTAP, e.g. “BTAP-ExteriorWall-WoodFramed-1” is unused. BTAP/TBD data is limited to the following wall constructions (paired LP & HP variants).

—- (Basic) Low Performance (LP) assemblies

ID    : (layers)
-----   ------------------------------------------
STEL1 : cladding | board   | wool | frame | gypsum
WOOD5 : brick    | board   | wool | frame | gypsum
MTAL1 : panel    | xps     | wool | frame | gypsum
MASS2 : brick    | xps     |      | cmu   |
MASS4 : precast  | xps     | wool | frame | gypsum
MASS6 : brick    | xps     |      | cmu   |

—- High Performance (HP) variants

ID    : (layers)
-----   ------------------------------------------
STEL2 : cladding | board   | wool | frame | gypsum ... switch from STEL1
WOOD7 : brick    | mineral | wool | frame | gypsum ... switch from WOOD5
MTALD : panel    | polyiso | foam | frame | gypsum ... switch from MTAL1
MASSB : brick    | mineral | cmu  | foam  | gypsum ... switch from MASS2
MASS8 : precast  | xps     | wool | frame | gypsum ... switch from MASS4
MASSC : cladding | mineral | cmu  | foam  | gypsum ... switch from MASS6

Paired LPs & HPs vall variants are critical for ‘uprating’ cases, e.g. NECB2017. See below, and end of this document for additional NOTES.

"BTAP-ExteriorWall-Mass-2"
MASS2_BAD =

LP wall

"BTAP-ExteriorWall-Mass-2 bad"
MASS2_GOOD =

LP “bad” PSI factors

"BTAP-ExteriorWall-Mass-2 good"
MASSB =

LP “good” PSI factors

"BTAP-ExteriorWall-Mass-2b"
MASSB_BAD =

HP, from @Uo < 0.183

"BTAP-ExteriorWall-Mass-2b bad"
MASSB_GOOD =

HP “bad” PSI factors

"BTAP-ExteriorWall-Mass-2b good"
MASS4 =

HP “good” PSI factors

"BTAP-ExteriorWall-Mass-4"
MASS4_BAD =
"BTAP-ExteriorWall-Mass-4 bad"
MASS4_GOOD =
"BTAP-ExteriorWall-Mass-4 good"
MASS8 =

HP, from @Uo < 0.183

"BTAP-ExteriorWall-Mass-8c"
MASS8_BAD =
"BTAP-ExteriorWall-Mass-8c bad"
MASS8_GOOD =
"BTAP-ExteriorWall-Mass-8c good"
MASS6 =
"BTAP-ExteriorWall-Mass-6"
MASS6_BAD =
"BTAP-ExteriorWall-Mass-6 bad"
MASS6_GOOD =
"BTAP-ExteriorWall-Mass-6 good"
MASSC =

HP, from @Uo < 0.247

"BTAP-ExteriorWall-Mass-10c"
MASSC_BAD =
"BTAP-ExteriorWall-Mass-10c bad"
MASSC_GOOD =
"BTAP-ExteriorWall-Mass-10c good"
MTAL1 =
"BTAP-ExteriorWall-Metal-1"
MTAL1_BAD =
"BTAP-ExteriorWall-Metal-1 bad"
MTAL1_GOOD =
"BTAP-ExteriorWall-Metal-1 good"
MTALD =

HP, from @Uo < 0.183

"BTAP-ExteriorWall-Metal-1d"
MTALD_BAD =
"BTAP-ExteriorWall-Metal-1d bad"
MTALD_GOOD =
"BTAP-ExteriorWall-Metal-1d good"
WOOD5 =
"BTAP-ExteriorWall-WoodFramed-5"
WOOD5_BAD =
"BTAP-ExteriorWall-WoodFramed-5 bad"
WOOD5_GOOD =
"BTAP-ExteriorWall-WoodFramed-5 good"
WOOD7 =

HP, from @Uo < 0.183

"BTAP-ExteriorWall-WoodFramed-7"
WOOD7_BAD =
"BTAP-ExteriorWall-WoodFramed-7 bad"
WOOD7_GOOD =
"BTAP-ExteriorWall-WoodFramed-7 good"
STEL1 =
"BTAP-ExteriorWall-SteelFramed-1"
STEL1_BAD =
"BTAP-ExteriorWall-SteelFramed-1 bad"
STEL1_GOOD =
"BTAP-ExteriorWall-SteelFramed-1 good"
STEL2 =

HP from @Uo < 0.278

"BTAP-ExteriorWall-SteelFramed-2"
STEL2_BAD =
"BTAP-ExteriorWall-SteelFramed-2 bad"
STEL2_GOOD =
"BTAP-ExteriorWall-SteelFramed-2 good"
ROOFS =
"BTAP-ExteriorRoof-IEAD-4"
FLOOR =
"BTAP-ExteriorFloor-SteelFramed-1"
UMIN =
0.010
UMAX =
5.678
@@data =

— —- —- —- —- —- —- —- —- —- —- —- —- —- — # Preset BTAP/TBD wall construction parameters.

:sptypes   : BTAP/TBD Hash of linked NECB SpaceTypes (symbols)
:uos       : BTAP/TBD Hash of associated of Uo sub-variants
:lp or :hp : low- or high-performance attribute
{}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object



1283
1284
1285
# File 'lib/openstudio-standards/btap/bridging.rb', line 1283

def self.extended(base)
  base.send(:include, self)
end

Instance Method Details

#assembly(sptype = :office, stypes = :walls, perform = :hp) ⇒ String

Retrieve building/space type-specific assembly/construction.

Parameters:

  • sptype (Symbol) (defaults to: :office)

    BTAP/TBD spacetype

  • stypes (Symbol) (defaults to: :walls)

    :walls, :floors or :roofs

  • perform (Symbol) (defaults to: :hp)

    :lp (low-) or :hp (high-performance)

Returns:

  • (String)

    corresponding BTAP construction (STEL2 if fail)



1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
# File 'lib/openstudio-standards/btap/bridging.rb', line 1188

def assembly(sptype = :office, stypes = :walls, perform = :hp)
  return FLOOR if stypes == :floors
  return ROOFS if stypes == :roofs

  @@data.each do |id, construction|
    next  unless construction.key?(perform)
    return id if construction[:sptypes].key?(sptype)
  end

  STEL2
end

#costed_uo(construction = STEL2, uo = UMAX) ⇒ Double

Retrieve nearest building/space type-specific assembly Uo factor.

Parameters:

  • construction (String) (defaults to: STEL2)

    BTAP construction identifier

  • uo (Double) (defaults to: UMAX)

    target Uo in W/m2.K

Returns:

  • (Double)

    costed BTAP construction Uo factor (nil if fail)



1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
# File 'lib/openstudio-standards/btap/bridging.rb', line 1207

def costed_uo(construction = STEL2, uo = UMAX)
  construction = STEL2 unless @@data.key?(construction)
  uo           = UMAX  unless uo.is_a?(Numeric) && uo.between?(UMIN, UMAX)

  @@data[construction][:uos].keys.each do |u|
    val = u.to_f / 1000
    return nil unless val.is_a?(Numeric) && val.between?(UMIN, UMAX)
    return val     if val < uo || (val - uo).abs < 0.001
  end

  nil
end

#dataHash

Return BTAP/TBD data.

Returns:

  • (Hash)

    preset BTAP/TBD data



1279
1280
1281
# File 'lib/openstudio-standards/btap/bridging.rb', line 1279

def data
  @@data
end

#lowest_uo(construction = STEL2) ⇒ Double

Retrieve lowest building/space type-specific assembly Uo factor.

Parameters:

  • construction (String) (defaults to: STEL2)

    BTAP construction identifier

Returns:

  • (Double)

    lowest costed BTAP construction Uo factor (nil if fail)



1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
# File 'lib/openstudio-standards/btap/bridging.rb', line 1226

def lowest_uo(construction = STEL2)
  uos          = []
  construction = STEL2 unless @@data.key?(construction)

  @@data[construction][:uos].keys.each do |u|
    val = u.to_f / 1000
    return nil unless val.is_a?(Numeric) && val.between?(UMIN, UMAX)

    uos << val
  end

  return uos.min unless uos.empty?

  nil
end

#set(assembly = STEL2, quality = :good) ⇒ Hash

Retrieve assembly-specific PSI factor set.

Parameters:

  • assembly (String) (defaults to: STEL2)

    BTAP/TBD wall construction

  • quality (Symbol) (defaults to: :good)

    BTAP/TBD PSI quality (:bad or :good)

Returns:

  • (Hash)

    BTAP/TBD PSI factor set (defaults to STEL2, :good)



1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
# File 'lib/openstudio-standards/btap/bridging.rb', line 1249

def set(assembly = STEL2, quality = :good)
  psi = {}
  chx = @@data[STEL2][:good  ]
  chx = @@data[STEL2][quality]          if @@data[STEL2   ].key?(quality)

  if @@data.key?(assembly)
    chx = @@data[assembly][quality]     if @@data[assembly].key?(quality)
    chx = @@data[assembly][:good  ] unless @@data[assembly].key?(quality)
  end

  psi[:id        ] = chx[:id        ]
  psi[:rimjoist  ] = chx[:rimjoist  ][:psi]
  psi[:parapet   ] = chx[:parapet   ][:psi]
  psi[:head      ] = chx[:head      ][:psi]
  psi[:jamb      ] = chx[:jamb      ][:psi]
  psi[:sill      ] = chx[:sill      ][:psi]
  psi[:corner    ] = chx[:corner    ][:psi]
  psi[:balcony   ] = chx[:balcony   ][:psi]
  psi[:party     ] = chx[:party     ][:psi]
  psi[:grade     ] = chx[:grade     ][:psi]
  psi[:joint     ] = chx[:joint     ][:psi]
  psi[:transition] = chx[:transition][:psi]

  psi
end

#spacetype(sptype = "", stories = 999) ⇒ Symbol

Retrieve TBD building/space type keyword.

Parameters:

  • spacetype (String)

    NECB (or other) building/space type

  • stories (Integer) (defaults to: 999)

    number of building stories

Returns:

  • (Symbol)

    matching TBD keyword (:office if failure)



1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
# File 'lib/openstudio-standards/btap/bridging.rb', line 1108

def spacetype(sptype = "", stories = 999)
  tp  = sptype.downcase
  typ = :office

  return typ unless stories.is_a?(Integer) && stories.between?(1,999)

  typ = :exercise       if tp.include?("exercise"     )
  typ = :firestation    if tp.include?("fire"         )
  typ = :gym            if tp.include?("gym"          )
  typ = :gym            if tp.include?("locker"       )
  typ = :courthouse     if tp.include?("courthouse"   )
  typ = :courtrhouse    if tp.include?("courtroom"    )
  typ = :museum         if tp.include?("museum"       )
  typ = :parking        if tp.include?("parking"      )
  typ = :post           if tp.include?("post"         )
  typ = :transportation if tp.include?("transp"       )
  typ = :transportation if tp.include?("maintenance"  )
  typ = :automotive     if tp.include?("automotive"   )
  typ = :penitentiary   if tp.include?("penitentiary" )
  typ = :penitentiary   if tp.include?("confinement"  )
  typ = :arena          if tp.include?("arena"        )
  typ = :warehouse      if tp.include?("warehouse"    )
  typ = :storage        if tp.include?("storage"      )
  typ = :mfg            if tp.include?("mfg"          )
  typ = :mfg            if tp.include?("manufacturing")
  typ = :mfg            if tp.include?("loading"      )
  typ = :workshop       if tp.include?("workshop"     )
  typ = :religious      if tp.include?("religious"    )
  typ = :dwelling5      if tp.include?("dorm"         )
  typ = :dwelling5      if tp.include?("otel"         )
  typ = :dwelling5      if tp.include?("residential"  )
  typ = :dwelling5      if tp.include?("long-term"    )
  typ = :dwelling5      if tp.include?("dwelling"     )
  typ = :dwelling5      if tp.include?("lodging"      )
  typ = :dwelling5      if tp.include?("RP-28"        )
  typ = :dwelling5      if tp.include?("guest"        )
  typ = :dwelling       if tp.include?("dorm"         ) && stories < 5
  typ = :dwelling       if tp.include?("otel"         ) && stories < 5
  typ = :dwelling       if tp.include?("residential"  ) && stories < 5
  typ = :dwelling       if tp.include?("long-term"    ) && stories < 5
  typ = :dwelling       if tp.include?("dwelling"     ) && stories < 5
  typ = :dwelling       if tp.include?("lodging"      ) && stories < 5
  typ = :dwelling       if tp.include?("RP-28"        ) && stories < 5
  typ = :dwelling       if tp.include?("guest"        ) && stories < 5
  typ = :library3       if tp.include?("library"      )
  typ = :library        if tp.include?("library"      ) && stories < 3
  typ = :school3        if tp.include?("school"       )
  typ = :school3        if tp.include?("classroom"    )
  typ = :school3        if tp.include?("lab"          )
  typ = :school3        if tp.include?("auditorium"   )
  typ = :school         if tp.include?("school"       ) && stories < 3
  typ = :school         if tp.include?("classroom"    ) && stories < 3
  typ = :school         if tp.include?("lab"          ) && stories < 3
  typ = :school         if tp.include?("auditorium"   ) && stories < 3
  typ = :convention     if tp.include?("convention"   )
  typ = :dining         if tp.include?("dining"       )
  typ = :dining         if tp.include?("food"         )
  typ = :health         if tp.include?("health"       )
  typ = :hospital       if tp.include?("hospital"     )
  typ = :hospital       if tp.include?("emergency"    )
  typ = :hospital       if tp.include?("laundry"      )
  typ = :hospital       if tp.include?("pharmacy"     )
  typ = :motion         if tp.include?("motion"       )
  typ = :performance    if tp.include?("perform"      )
  typ = :police         if tp.include?("police"       )
  typ = :retail         if tp.include?("retail"       )
  typ = :retail         if tp.include?("sales"        )
  typ = :town           if tp.include?("town"         )

  typ
end