module BTAP::BridgingData
—- —- —- —- —- —- —- —- —- —- —- —- —- —- —- #
Constants
- FLOOR
- MASS2
— —- —- —- —- —- —- —- —- —- —- —- —- —- — #
BTAP
costing data (both originalBTAP
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.- MASS2_BAD
- MASS2_GOOD
- MASS4
- MASS4_BAD
- MASS4_GOOD
- MASS6
- MASS6_BAD
- MASS6_GOOD
- MASS8
- MASS8_BAD
- MASS8_GOOD
- MASSB
- MASSB_BAD
- MASSB_GOOD
- MASSC
- MASSC_BAD
- MASSC_GOOD
- MTAL1
- MTAL1_BAD
- MTAL1_GOOD
- MTALD
- MTALD_BAD
- MTALD_GOOD
- ROOFS
- STEL1
- STEL1_BAD
- STEL1_GOOD
- STEL2
- STEL2_BAD
- STEL2_GOOD
- UMAX
- UMIN
- WOOD5
- WOOD5_BAD
- WOOD5_GOOD
- WOOD7
- WOOD7_BAD
- WOOD7_GOOD
Public Class Methods
# File lib/openstudio-standards/btap/bridging.rb, line 1283 def self.extended(base) base.send(:include, self) end
Public Instance Methods
Retrieve building/space type-specific assembly/construction.
@param sptype [Symbol] BTAP/TBD spacetype @param stypes [Symbol] :walls, :floors or :roofs @param perform [Symbol] :lp (low-) or :hp (high-performance)
@return [String] corresponding BTAP
construction (STEL2
if fail)
# 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
Retrieve nearest building/space type-specific assembly Uo factor.
@param construction [String] BTAP
construction identifier @param uo [Double] target Uo in W/m2.K
@return [Double] costed BTAP
construction Uo factor (nil if fail)
# 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
Return BTAP/TBD data.
@return [Hash] preset BTAP/TBD data
# File lib/openstudio-standards/btap/bridging.rb, line 1279 def data @@data end
Retrieve lowest building/space type-specific assembly Uo factor.
@param construction [String] BTAP
construction identifier
@return [Double] lowest costed BTAP
construction Uo factor (nil if fail)
# 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
Retrieve assembly-specific PSI factor set.
@param assembly [String] BTAP/TBD wall construction @param quality [Symbol] BTAP/TBD PSI quality (:bad or :good)
@return [Hash] BTAP/TBD PSI factor set (defaults to STEL2
, :good)
# 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
Retrieve TBD building/space type keyword.
@param spacetype [String] NECB (or other) building/space type @param stories [Integer] number of building stories
@return [Symbol] matching TBD keyword (:office if failure)
# 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