tbd 3.4.3 → 3.4.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4edf2565b741a5d272169d616339e9f86e4651402ea9ca160f2db30fc38b07f
4
- data.tar.gz: 6320eaf03d3f60c178bc05c4e53d84c42b678dc757590428306b23bf0f6d9b83
3
+ metadata.gz: 24c3c1ce27d2513d0f1529795e7016ad07a69e3499d5e79f7164698e1a16dc48
4
+ data.tar.gz: f23f7f85a54bcc551179ba751e826dc2951520e4ad0e17eaafad8fac01cea9fc
5
5
  SHA512:
6
- metadata.gz: 9972bcf05ee6a42900b8153fd71acb3232a3b00e0cd95c87ffefac1ec982777fa4292fca3361d70ad6a7e4f46cfdca1f1e77879a1677eb75be946bbb4827fe9c
7
- data.tar.gz: 76c04922cf93a8252b2d08e1d14582152d2d43a71ec99099e63467eb4b761602824d62c8e931d49ecd4f7eaa7a6f518a6d6e10bb0375bf56cebed1eef4a38c26
6
+ metadata.gz: 02cb220811ddcc388c7ae20d17ffc2cfc0b64322605d5c571c2fbd1e325018ec44c7801b7aa0b0d7f2481ec0f0ebee25061130ccd7814f5badf7cb3b01fce625
7
+ data.tar.gz: 7cf328dca053b90d53c05f070c36f13a7ac9b9813435276ddaf9c14a4bc24e4d287ed7ffb698a6e3f1e5a71822b0f568bfa48155053620a3297d497a4cac5c21
@@ -134,3 +134,19 @@ jobs:
134
134
  docker exec -t test bundle update
135
135
  docker exec -t test bundle exec rake
136
136
  docker kill test
137
+ test_390x:
138
+ runs-on: ubuntu-22.04
139
+ steps:
140
+ - name: Check out repository
141
+ uses: actions/checkout@v2
142
+ - name: Run Tests
143
+ run: |
144
+ echo $(pwd)
145
+ echo $(ls)
146
+ docker pull nrel/openstudio:3.9.0
147
+ docker run --name test --rm -d -t -v $(pwd):/work -w /work nrel/openstudio:3.9.0
148
+ docker exec -t test pwd
149
+ docker exec -t test ls
150
+ docker exec -t test bundle update
151
+ docker exec -t test bundle exec rake
152
+ docker kill test
@@ -3,8 +3,8 @@
3
3
  <schema_version>3.1</schema_version>
4
4
  <name>tbd_measure</name>
5
5
  <uid>8890787b-8c25-4dc8-8641-b6be1b6c2357</uid>
6
- <version_id>12467d7f-9058-4028-b6f8-0448e81b7fef</version_id>
7
- <version_modified>2024-10-15T18:51:39Z</version_modified>
6
+ <version_id>70223737-c3ea-4df0-8506-67083c92fb6e</version_id>
7
+ <version_modified>2024-11-20T20:02:15Z</version_modified>
8
8
  <xml_checksum>99772807</xml_checksum>
9
9
  <class_name>TBDMeasure</class_name>
10
10
  <display_name>Thermal Bridging and Derating - TBD</display_name>
@@ -499,7 +499,7 @@
499
499
  <filename>geo.rb</filename>
500
500
  <filetype>rb</filetype>
501
501
  <usage_type>resource</usage_type>
502
- <checksum>6C7ACC99</checksum>
502
+ <checksum>9FAC0CDC</checksum>
503
503
  </file>
504
504
  <file>
505
505
  <filename>geometry.rb</filename>
@@ -523,7 +523,7 @@
523
523
  <filename>psi.rb</filename>
524
524
  <filetype>rb</filetype>
525
525
  <usage_type>resource</usage_type>
526
- <checksum>25CD6251</checksum>
526
+ <checksum>4B7F3586</checksum>
527
527
  </file>
528
528
  <file>
529
529
  <filename>tbd.rb</filename>
@@ -541,7 +541,7 @@
541
541
  <filename>ua.rb</filename>
542
542
  <filetype>rb</filetype>
543
543
  <usage_type>resource</usage_type>
544
- <checksum>013BA732</checksum>
544
+ <checksum>626D3BE0</checksum>
545
545
  </file>
546
546
  <file>
547
547
  <filename>utils.rb</filename>
@@ -722,15 +722,10 @@ module TBD
722
722
  kva = true unless surface.surfacePropertyExposedFoundationPerimeter.empty?
723
723
  surface.resetAdjacentFoundation
724
724
  surface.resetSurfacePropertyExposedFoundationPerimeter
725
- next unless surface.isGroundSurface
726
725
  next if surface.outsideBoundaryCondition.capitalize == boundary
726
+ next unless surface.outsideBoundaryCondition.capitalize == "Foundation"
727
727
 
728
- lc = surface.construction.empty? ? nil : surface.construction.get
729
728
  surface.setOutsideBoundaryCondition(boundary)
730
- next if boundary == "Ground"
731
- next if lc.nil?
732
-
733
- surface.setConstruction(lc) if surface.construction.empty?
734
729
  end
735
730
 
736
731
  perimeters = model.getSurfacePropertyExposedFoundationPerimeters
@@ -834,11 +829,16 @@ module TBD
834
829
  edges.each do |code1, edge|
835
830
  edge[:surfaces].keys.each do |id|
836
831
  next unless floors.key?(id)
832
+
837
833
  next unless floors[id][:boundary].downcase == "foundation"
838
834
  next if floors[id].key?(:kiva)
839
835
 
840
- floors[id][:kiva ] = :slab # initially slabs-on-grade
841
- floors[id][:exposed] = 0.0 # slab-on-grade or walkout perimeter
836
+ # Initially set as slab-on-grade. Track 'exposed foundation perimeter'.
837
+ # - outdoor wall/slab-on-grade edge lengths
838
+ # - outdoor wall/basement slab walkout edge lengths
839
+ # - basement wall/basement slab edge lengths
840
+ floors[id][:kiva ] = :slab
841
+ floors[id][:exposed] = 0.0
842
842
 
843
843
  # Loop around current edge.
844
844
  edge[:surfaces].keys.each do |i|
@@ -847,8 +847,9 @@ module TBD
847
847
  next unless walls[i][:boundary].downcase == "foundation"
848
848
  next if walls[i].key?(:kiva)
849
849
 
850
- floors[id][:kiva] = :basement
851
- walls[i ][:kiva] = id
850
+ floors[id][:kiva ] = :basement
851
+ floors[id][:exposed] += edge[:length]
852
+ walls[i ][:kiva ] = id
852
853
  end
853
854
 
854
855
  # Loop around current edge.
@@ -862,7 +863,7 @@ module TBD
862
863
 
863
864
  # Loop around other floor edges.
864
865
  edges.each do |code2, e|
865
- next if code1 == code2 # skip - same edge
866
+ next if code1 == code2 # skip - same edge
866
867
 
867
868
  e[:surfaces].keys.each do |i|
868
869
  next unless i == id # good - same floor
@@ -873,8 +874,9 @@ module TBD
873
874
  next unless walls[ii][:boundary].downcase == "foundation"
874
875
  next if walls[ii].key?(:kiva)
875
876
 
876
- floors[id][:kiva] = :basement
877
- walls[ii ][:kiva] = id
877
+ floors[id][:kiva ] = :basement
878
+ walls[ii ][:kiva ] = id
879
+ floors[id][:exposed] += e[:length]
878
880
  end
879
881
 
880
882
  e[:surfaces].keys.each do |ii|
@@ -889,6 +891,7 @@ module TBD
889
891
 
890
892
  foundation = OpenStudio::Model::FoundationKiva.new(model)
891
893
  foundation.setName("KIVA Foundation Floor #{id}")
894
+
892
895
  floor = model.getSurfaceByName(id)
893
896
  kiva = false if floor.empty?
894
897
  next if floor.empty?
@@ -1678,8 +1678,8 @@ module TBD
1678
1678
  # around edge with respect to a reference vector (perpendicular to the
1679
1679
  # edge), +clockwise as one is looking in the opposite position of the edge
1680
1680
  # vector. For instance, a vertical edge has a reference vector pointing
1681
- # North - surfaces eastward of the edge are (0°,180°], while surfaces
1682
- # westward of the edge are (180°,360°].
1681
+ # North - surfaces eastward of the edge are (0deg,180deg], while surfaces
1682
+ # westward of the edge are (180deg,360deg].
1683
1683
  #
1684
1684
  # Much of the following code is of a topological nature, and should ideally
1685
1685
  # (or eventually) become available functionality offered by Topolys. Topolys
@@ -1741,7 +1741,7 @@ module TBD
1741
1741
 
1742
1742
  angle = reference_V.angle(farthest_V)
1743
1743
  angle = 0 if angle.nil?
1744
- adjust = false # adjust angle [180°, 360°] if necessary
1744
+ adjust = false # adjust angle [180deg, 360deg] if necessary
1745
1745
 
1746
1746
  if vertical
1747
1747
  adjust = true if east.dot(farthest_V) < -TOL
@@ -422,8 +422,8 @@ module TBD
422
422
  # @param [Hash] s TBD surfaces (keys: Openstudio surface names)
423
423
  # @option s [Bool] :deratable whether surface is deratable, s[][:deratable]
424
424
  # @option s [:wall, :ceiling, :floor] :type TBD surface type
425
- # @option s [#to_f] :heating applicable heating setpoint temperature in °C
426
- # @option s [#to_f] :cooling applicable cooling setpoint temperature in °C
425
+ # @option s [#to_f] :heating applicable heating setpoint temperature in C
426
+ # @option s [#to_f] :cooling applicable cooling setpoint temperature in C
427
427
  # @option s [Hash] :windows TBD surface-specific windows e.g. s[][:windows]
428
428
  # @option s [Hash] :doors TBD surface-specific doors
429
429
  # @option s [Hash] :skylights TBD surface-specific skylights
@@ -466,7 +466,7 @@ module TBD
466
466
  ref = 1 / 5.46
467
467
  ref = 1 / 3.60 if surface[:type] == :wall
468
468
 
469
- # Adjust for lower heating setpoint (assumes -25°C design conditions).
469
+ # Adjust for lower heating setpoint (assumes -25C design conditions).
470
470
  ref *= 43 / (heating + 25) if heating < 18 && cooling > 40
471
471
 
472
472
  surface[:ref] = ref
@@ -628,8 +628,8 @@ module TBD
628
628
  end
629
629
 
630
630
  # Set up 2x heating setpoint (HSTP) "blocks" (or bins):
631
- # bloc1: spaces/zones with HSTP >= 18°C
632
- # bloc2: spaces/zones with HSTP < 18°C
631
+ # bloc1: spaces/zones with HSTP >= 18C
632
+ # bloc2: spaces/zones with HSTP < 18C
633
633
  # (ref: 2021 Quebec energy code 3.3. UA' trade-off methodology)
634
634
  # (... can be extended in the future to cover other standards)
635
635
  #
@@ -1000,7 +1000,7 @@ module TBD
1000
1000
  model = "* modèle : #{ua[:file]}" if ua.key?(:file) && lang == :fr
1001
1001
  model += " (v#{ua[:version]})" if ua.key?(:version)
1002
1002
  report << model unless model.empty?
1003
- report << "* TBD : v3.4.3"
1003
+ report << "* TBD : v3.4.4"
1004
1004
  report << "* date : #{ua[:date]}"
1005
1005
 
1006
1006
  if lang == :en
data/lib/tbd/geo.rb CHANGED
@@ -722,15 +722,10 @@ module TBD
722
722
  kva = true unless surface.surfacePropertyExposedFoundationPerimeter.empty?
723
723
  surface.resetAdjacentFoundation
724
724
  surface.resetSurfacePropertyExposedFoundationPerimeter
725
- next unless surface.isGroundSurface
726
725
  next if surface.outsideBoundaryCondition.capitalize == boundary
726
+ next unless surface.outsideBoundaryCondition.capitalize == "Foundation"
727
727
 
728
- lc = surface.construction.empty? ? nil : surface.construction.get
729
728
  surface.setOutsideBoundaryCondition(boundary)
730
- next if boundary == "Ground"
731
- next if lc.nil?
732
-
733
- surface.setConstruction(lc) if surface.construction.empty?
734
729
  end
735
730
 
736
731
  perimeters = model.getSurfacePropertyExposedFoundationPerimeters
@@ -834,11 +829,16 @@ module TBD
834
829
  edges.each do |code1, edge|
835
830
  edge[:surfaces].keys.each do |id|
836
831
  next unless floors.key?(id)
832
+
837
833
  next unless floors[id][:boundary].downcase == "foundation"
838
834
  next if floors[id].key?(:kiva)
839
835
 
840
- floors[id][:kiva ] = :slab # initially slabs-on-grade
841
- floors[id][:exposed] = 0.0 # slab-on-grade or walkout perimeter
836
+ # Initially set as slab-on-grade. Track 'exposed foundation perimeter'.
837
+ # - outdoor wall/slab-on-grade edge lengths
838
+ # - outdoor wall/basement slab walkout edge lengths
839
+ # - basement wall/basement slab edge lengths
840
+ floors[id][:kiva ] = :slab
841
+ floors[id][:exposed] = 0.0
842
842
 
843
843
  # Loop around current edge.
844
844
  edge[:surfaces].keys.each do |i|
@@ -847,8 +847,9 @@ module TBD
847
847
  next unless walls[i][:boundary].downcase == "foundation"
848
848
  next if walls[i].key?(:kiva)
849
849
 
850
- floors[id][:kiva] = :basement
851
- walls[i ][:kiva] = id
850
+ floors[id][:kiva ] = :basement
851
+ floors[id][:exposed] += edge[:length]
852
+ walls[i ][:kiva ] = id
852
853
  end
853
854
 
854
855
  # Loop around current edge.
@@ -862,7 +863,7 @@ module TBD
862
863
 
863
864
  # Loop around other floor edges.
864
865
  edges.each do |code2, e|
865
- next if code1 == code2 # skip - same edge
866
+ next if code1 == code2 # skip - same edge
866
867
 
867
868
  e[:surfaces].keys.each do |i|
868
869
  next unless i == id # good - same floor
@@ -873,8 +874,9 @@ module TBD
873
874
  next unless walls[ii][:boundary].downcase == "foundation"
874
875
  next if walls[ii].key?(:kiva)
875
876
 
876
- floors[id][:kiva] = :basement
877
- walls[ii ][:kiva] = id
877
+ floors[id][:kiva ] = :basement
878
+ walls[ii ][:kiva ] = id
879
+ floors[id][:exposed] += e[:length]
878
880
  end
879
881
 
880
882
  e[:surfaces].keys.each do |ii|
@@ -889,6 +891,7 @@ module TBD
889
891
 
890
892
  foundation = OpenStudio::Model::FoundationKiva.new(model)
891
893
  foundation.setName("KIVA Foundation Floor #{id}")
894
+
892
895
  floor = model.getSurfaceByName(id)
893
896
  kiva = false if floor.empty?
894
897
  next if floor.empty?
data/lib/tbd/psi.rb CHANGED
@@ -1678,8 +1678,8 @@ module TBD
1678
1678
  # around edge with respect to a reference vector (perpendicular to the
1679
1679
  # edge), +clockwise as one is looking in the opposite position of the edge
1680
1680
  # vector. For instance, a vertical edge has a reference vector pointing
1681
- # North - surfaces eastward of the edge are (0°,180°], while surfaces
1682
- # westward of the edge are (180°,360°].
1681
+ # North - surfaces eastward of the edge are (0deg,180deg], while surfaces
1682
+ # westward of the edge are (180deg,360deg].
1683
1683
  #
1684
1684
  # Much of the following code is of a topological nature, and should ideally
1685
1685
  # (or eventually) become available functionality offered by Topolys. Topolys
@@ -1741,7 +1741,7 @@ module TBD
1741
1741
 
1742
1742
  angle = reference_V.angle(farthest_V)
1743
1743
  angle = 0 if angle.nil?
1744
- adjust = false # adjust angle [180°, 360°] if necessary
1744
+ adjust = false # adjust angle [180deg, 360deg] if necessary
1745
1745
 
1746
1746
  if vertical
1747
1747
  adjust = true if east.dot(farthest_V) < -TOL
data/lib/tbd/ua.rb CHANGED
@@ -422,8 +422,8 @@ module TBD
422
422
  # @param [Hash] s TBD surfaces (keys: Openstudio surface names)
423
423
  # @option s [Bool] :deratable whether surface is deratable, s[][:deratable]
424
424
  # @option s [:wall, :ceiling, :floor] :type TBD surface type
425
- # @option s [#to_f] :heating applicable heating setpoint temperature in °C
426
- # @option s [#to_f] :cooling applicable cooling setpoint temperature in °C
425
+ # @option s [#to_f] :heating applicable heating setpoint temperature in C
426
+ # @option s [#to_f] :cooling applicable cooling setpoint temperature in C
427
427
  # @option s [Hash] :windows TBD surface-specific windows e.g. s[][:windows]
428
428
  # @option s [Hash] :doors TBD surface-specific doors
429
429
  # @option s [Hash] :skylights TBD surface-specific skylights
@@ -466,7 +466,7 @@ module TBD
466
466
  ref = 1 / 5.46
467
467
  ref = 1 / 3.60 if surface[:type] == :wall
468
468
 
469
- # Adjust for lower heating setpoint (assumes -25°C design conditions).
469
+ # Adjust for lower heating setpoint (assumes -25C design conditions).
470
470
  ref *= 43 / (heating + 25) if heating < 18 && cooling > 40
471
471
 
472
472
  surface[:ref] = ref
@@ -628,8 +628,8 @@ module TBD
628
628
  end
629
629
 
630
630
  # Set up 2x heating setpoint (HSTP) "blocks" (or bins):
631
- # bloc1: spaces/zones with HSTP >= 18°C
632
- # bloc2: spaces/zones with HSTP < 18°C
631
+ # bloc1: spaces/zones with HSTP >= 18C
632
+ # bloc2: spaces/zones with HSTP < 18C
633
633
  # (ref: 2021 Quebec energy code 3.3. UA' trade-off methodology)
634
634
  # (... can be extended in the future to cover other standards)
635
635
  #
@@ -1000,7 +1000,7 @@ module TBD
1000
1000
  model = "* modèle : #{ua[:file]}" if ua.key?(:file) && lang == :fr
1001
1001
  model += " (v#{ua[:version]})" if ua.key?(:version)
1002
1002
  report << model unless model.empty?
1003
- report << "* TBD : v3.4.3"
1003
+ report << "* TBD : v3.4.4"
1004
1004
  report << "* date : #{ua[:date]}"
1005
1005
 
1006
1006
  if lang == :en
data/lib/tbd/version.rb CHANGED
@@ -21,5 +21,5 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  module TBD
24
- VERSION = "3.4.3".freeze # TBD release version
24
+ VERSION = "3.4.4".freeze # TBD release version
25
25
  end
data/tbd.schema.json CHANGED
@@ -267,15 +267,15 @@
267
267
  "type": "number"
268
268
  },
269
269
  "corner": {
270
- "title": "Any wall corner [0°,135°) or (225°,360°] PSI",
270
+ "title": "Any wall corner [0deg,135deg) or (225deg,360deg] PSI",
271
271
  "type": "number"
272
272
  },
273
273
  "cornerconcave": {
274
- "title": "Concave wall corner [0°,135°) PSI",
274
+ "title": "Concave wall corner [0deg,135deg) PSI",
275
275
  "type": "number"
276
276
  },
277
277
  "cornerconvex": {
278
- "title": "Convex wall corner (225°,360°] PSI",
278
+ "title": "Convex wall corner (225deg,360deg] PSI",
279
279
  "type": "number"
280
280
  },
281
281
  "balcony": {
@@ -655,12 +655,12 @@
655
655
  "type": "object",
656
656
  "properties": {
657
657
  "bloc1": {
658
- "title": "heating setpoints >= 18°C",
658
+ "title": "heating setpoints >= 18C",
659
659
  "type": "object",
660
660
  "$ref": "#/definitions/UaBlock"
661
661
  },
662
662
  "bloc2": {
663
- "title": "heating setpoints < 18°C",
663
+ "title": "heating setpoints < 18C",
664
664
  "type": "object",
665
665
  "$ref": "#/definitions/UaBlock"
666
666
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tbd
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.3
4
+ version: 3.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denis Bourgeois & Dan Macumber
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-10-16 00:00:00.000000000 Z
11
+ date: 2024-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: topolys
@@ -166,7 +166,7 @@ licenses:
166
166
  - MIT
167
167
  metadata:
168
168
  homepage_uri: https://github.com/rd2/tbd
169
- source_code_uri: https://github.com/rd2/tbd/tree/v3.4.3
169
+ source_code_uri: https://github.com/rd2/tbd/tree/v3.4.4
170
170
  bug_tracker_uri: https://github.com/rd2/tbd/issues
171
171
  post_install_message:
172
172
  rdoc_options: []
@@ -186,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
186
  - !ruby/object:Gem::Version
187
187
  version: '0'
188
188
  requirements: []
189
- rubygems_version: 3.3.15
189
+ rubygems_version: 3.4.10
190
190
  signing_key:
191
191
  specification_version: 4
192
192
  summary: Thermal Bridging and Derating (for OpenStudio)