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 envelope entries and EVOKE add-ons) 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 assemblies (paired LP & HP variants), which eventually should be located in a shared file (e.g. CSV, JSON).

-----   Low Performance (LP) assemblies
ID    : layers
-----   ------------------------------------------
STEL1 : cladding | board   | wool | frame | gypsum
WOOD5 : brick    | board   | wool | frame | gypsum
MASS2 : brick    | xps     |      | cmu   |
MASS4 : precast  | xps     | wool | frame | gypsum

-----   High Performance (HP) variants
ID    : layers
-----   ------------------------------------------
STEL2 : cladding | board   | wool | frame | gypsum ... switch from STEL1
WOOD7 : brick    | mineral | wool | frame | gypsum ... switch from WOOD5
MASSB : brick    | mineral | cmu  | foam  | gypsum ... switch from MASS2
MASS8 : precast  | xps     | wool | frame | gypsum ... switch from MASS4

Paired LPs & HPs vall variants are critical for ‘uprating’ cases, e.g. NECB2017/2020. 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"
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"
ROOF =
"BTAP-ExteriorRoof-IEAD-4"
FLOOR =
"BTAP-ExteriorFloor-SteelFramed-1"
@@data =

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

{}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object



540
541
542
# File 'lib/openstudio-standards/btap/bridging.rb', line 540

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

Instance Method Details

#costed_assembly(structure = nil, stype = :walls, perform = :lp) ⇒ String

Retrieves BTAP-costed assembly.

Parameters:

  • structure (BTAP::Structure) (defaults to: nil)

    BTAP Structure object

  • stype (:walls, :floors or :roofs) (defaults to: :walls)

    surface type

  • perform (:hp or :lp) (defaults to: :lp)

    high- or low-performance variant

Returns:

  • (String)

    BTAP assembly identifier for costing



415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
# File 'lib/openstudio-standards/btap/bridging.rb', line 415

def costed_assembly(structure = nil, stype = :walls, perform = :lp)
  stype   = :walls unless [:roofs, :floors].include?(stype)
  perform = :lp    unless perform == :hp
  return STEL1 unless structure.is_a?(BTAP::Structure)

  # Select BTAP-costed assembly, matching:

  #   - BTAP::Structure generated construction parameters

  #   - requested high (HP) vs low-performance (LP) PSI-factor level

  #

  # Ideally, chosen PSI factor sets and matching OpenStudio constructions

  # shouldn't strictly be based on selected BTAP assemblies (e.g.

  # wood-framed vs steel-framed, cladding choice), but also on selected

  # building 'structure', e.g.:

  #

  #   - "wood-framed" MURB

  #   - "steel post/beam" office building

  #   - "reinforced concrete post/beam" public library

  #   - "metal(-building)" warehouse

  #   - "mass-timber (CLT)" university pavilion

  #

  # Major thermal bridges often consist of anchors or supports that transmit

  # structural loads (and by the same token, 'heat') to a building's main

  # structure. Examples include balconies, parapets and shelf angles.

  # Highly conductive building structures (e.g. steel, aluminium) exacerbate

  # thermal bridging effects - so building structural selection matters.

  #

  # The BTAP::Structure module generates such attributes, yet BTAP's costed

  # thermal bridging database doesn't yet distinguish between building

  # structures - @todo. For the moment, BTAP PSI set selection is strictly

  # based on BTAP::Structure's :framing, :cladding and :finish attributes,

  # which must be set prior to initiating BTAP's TBD's thermal bridging

  # solution:


  # Light gauge steel framing by default. Override if wood, cmu or precast.

  case stype
  when :roofs  then return ROOF
  when :floors then return FLOOR
  else
    case structure.framing
    when :wood
      c1 = WOOD5
      c2 = WOOD7
    when :cmu
      c1 = MASS2
      c2 = MASSB
    else
      if structure.cladding == :heavy && structure.finish == :heavy
        c1 = MASS4
        c2 = MASS8
      else
        c1 = STEL1
        c2 = STEL2
      end
    end
  end

  perform == :lp ? c1 : c2
end

#costed_uo(assembly = "", uo = nil) ⇒ Double

Retrieves nearest assembly Uo factor.

Parameters:

  • assembly (String) (defaults to: "")

    BTAP assembly identifier

  • uo (Double) (defaults to: nil)

    target Uo in W/m2.K

Returns:

  • (Double)

    costed BTAP assembly Uo factor (nil if fail)



481
482
483
484
485
486
487
488
489
490
# File 'lib/openstudio-standards/btap/bridging.rb', line 481

def costed_uo(assembly = "", uo = nil)
  return nil unless @@data.key?(assembly)
  return nil unless uo.is_a?(Numeric)

  uo = uo.clamp(TBD::UMIN, TBD::UMAX)

  @@data[assembly][:uos].each { |u| return u if u.round(3) <= uo.round(3) }

  nil
end

#dataHash

Return BTAP/TBD data.

Returns:

  • (Hash)

    preset BTAP/TBD data



536
537
538
# File 'lib/openstudio-standards/btap/bridging.rb', line 536

def data
  @@data
end

#lowest_uo(assembly = "") ⇒ Double

Retrieves lowest costed assembly Uo factor.

Parameters:

  • assembly (String) (defaults to: "")

    BTAP assembly identifier

Returns:

  • (Double)

    lowest costed BTAP assembly Uo factor (nil if fail)



498
499
500
501
502
# File 'lib/openstudio-standards/btap/bridging.rb', line 498

def lowest_uo(assembly = "")
  return nil unless @@data.key?(assembly)

  @@data[assembly][:uos].min
end

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

Retrieves assembly-specific PSI factor set.

Parameters:

  • assembly (String) (defaults to: STEL2)

    BTAP/TBD wall construction identifier

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

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

Returns:

  • (Hash)

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



511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
# File 'lib/openstudio-standards/btap/bridging.rb', line 511

def set(assembly = STEL2, quality = :good)
  assembly = STEL2 unless @@data.key?(assembly)
  quality  = :good unless @@data[assembly].key?(quality)

  chx = @@data[assembly][quality]
  psi = {}

  psi[:id          ] = chx[:id          ]
  psi[:rimjoist    ] = chx[:rimjoist    ][:psi]
  psi[:parapet     ] = chx[:parapet     ][:psi]
  psi[:fenestration] = chx[:fenestration][:psi]
  psi[:door        ] = chx[:door        ][: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
end