openstudio-model-articulation 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -1
- data/CHANGELOG.md +13 -0
- data/Gemfile +2 -2
- data/README.md +14 -0
- data/lib/measures/SetWindowToWallRatioByFacade/measure.rb +10 -3
- data/lib/measures/SetWindowToWallRatioByFacade/measure.xml +10 -4
- data/lib/measures/add_empd_material_properties/LICENSE.md +27 -0
- data/lib/measures/add_empd_material_properties/README.md +116 -0
- data/lib/measures/add_empd_material_properties/README.md.erb +42 -0
- data/lib/measures/add_empd_material_properties/docs/.gitkeep +0 -0
- data/lib/measures/add_empd_material_properties/measure.rb +247 -0
- data/lib/measures/add_empd_material_properties/measure.xml +201 -0
- data/lib/measures/create_DOE_prototype_building/measure.xml +2 -2
- data/lib/measures/create_bar_from_building_type_ratios/README.md +109 -35
- data/lib/measures/create_bar_from_building_type_ratios/README.md.erb +54 -35
- data/lib/measures/create_bar_from_building_type_ratios/measure.rb +5 -0
- data/lib/measures/create_bar_from_building_type_ratios/measure.xml +16 -16
- data/lib/measures/create_bar_from_deer_building_type_ratios/README.md +301 -79
- data/lib/measures/create_bar_from_deer_building_type_ratios/README.md.erb +62 -79
- data/lib/measures/create_bar_from_deer_building_type_ratios/measure.rb +6 -1
- data/lib/measures/create_bar_from_deer_building_type_ratios/measure.xml +19 -63
- data/lib/measures/create_bar_from_doe_building_type_ratios/README.md +298 -57
- data/lib/measures/create_bar_from_doe_building_type_ratios/README.md.erb +54 -57
- data/lib/measures/create_bar_from_doe_building_type_ratios/measure.rb +6 -1
- data/lib/measures/create_bar_from_doe_building_type_ratios/measure.xml +16 -20
- data/lib/measures/create_bar_from_space_type_ratios/README.md +94 -42
- data/lib/measures/create_bar_from_space_type_ratios/README.md.erb +60 -42
- data/lib/measures/create_bar_from_space_type_ratios/measure.rb +5 -0
- data/lib/measures/create_bar_from_space_type_ratios/measure.xml +19 -19
- data/lib/measures/create_baseline_building/measure.xml +2 -2
- data/lib/measures/create_deer_prototype_building/measure.xml +2 -2
- data/lib/measures/create_typical_building_from_model/README.md +81 -16
- data/lib/measures/create_typical_building_from_model/README.md.erb +36 -16
- data/lib/measures/create_typical_building_from_model/measure.rb +5 -0
- data/lib/measures/create_typical_building_from_model/measure.xml +19 -19
- data/lib/measures/create_typical_deer_building_from_model/README.md +173 -53
- data/lib/measures/create_typical_deer_building_from_model/README.md.erb +57 -53
- data/lib/measures/create_typical_deer_building_from_model/measure.rb +6 -1
- data/lib/measures/create_typical_deer_building_from_model/measure.xml +25 -25
- data/lib/measures/create_typical_doe_building_from_model/README.md +182 -44
- data/lib/measures/create_typical_doe_building_from_model/README.md.erb +58 -44
- data/lib/measures/create_typical_doe_building_from_model/measure.rb +6 -1
- data/lib/measures/create_typical_doe_building_from_model/measure.xml +25 -25
- data/lib/measures/radiant_slab_with_doas/measure.rb +5 -1
- data/lib/measures/radiant_slab_with_doas/measure.xml +9 -9
- data/lib/openstudio/model_articulation/version.rb +1 -1
- data/openstudio-model-articulation.gemspec +2 -2
- metadata +13 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 634122fa1f2f8338143d45c88cffa1dd9fa501f976e38be205494add961425f3
|
4
|
+
data.tar.gz: 12a149ba1d6069c6627cc77d3353e8c3edd88df29112d0ab8080944a2ea9c79e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3dcb4a376d97df26b7cf2ba3ae97c8686d38e534dd9068ca8f03794abe78282ad1295d30ac7ef686855f9e320167881bf50f9a82a9cc24fdd85a2253b3704afa
|
7
|
+
data.tar.gz: f42bcd96e5bdc0fedff4e07936419b65fd3b2920ff8bb23ba5ab414e1184505219e85422be66d365d41a0a1e5cf2264ca973955db85f87b4815f16e725aa12cc
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# OpenStudio Model Articulation Gems
|
2
2
|
|
3
|
+
## Version 0.5.0
|
4
|
+
* Support for OpenStudio 3.3 (upgrade to extension gem 0.5.1 and standards gem 0.2.15)
|
5
|
+
* Fixed [#73]( https://github.com/NREL/openstudio-model-articulation-gem/pull/73 ), added add_empd_material_properties measure contributed by GFlechas
|
6
|
+
* Fixed [#83]( https://github.com/NREL/openstudio-model-articulation-gem/pull/83 ), adding compatibility matrix and contribution policy
|
7
|
+
* Fixed [#85]( https://github.com/NREL/openstudio-model-articulation-gem/pull/85 ), For SetWindowToWallRatioByFacade fixed rectangle tol and pre-split at door remove windows
|
8
|
+
|
9
|
+
## Version 0.4.1
|
10
|
+
|
11
|
+
* Support for OpenStudio 3.2.1 (upgrade to extension gem 0.4.3 and standards gem 0.2.14)
|
12
|
+
* update to use rubocop_v4
|
13
|
+
* Documentation update to some measures
|
14
|
+
* Setting up webhook for https://bcl2.nrel.gov
|
15
|
+
|
3
16
|
## Version 0.4.0
|
4
17
|
|
5
18
|
* Support Ruby ~> 2.7
|
data/Gemfile
CHANGED
@@ -12,10 +12,10 @@ gemspec
|
|
12
12
|
allow_local = ENV['FAVOR_LOCAL_GEMS']
|
13
13
|
|
14
14
|
# uncomment when you want CI to use develop branch of extension gem
|
15
|
-
gem 'openstudio-extension', github: 'NREL/OpenStudio-extension-gem', branch: 'develop'
|
15
|
+
#gem 'openstudio-extension', github: 'NREL/OpenStudio-extension-gem', branch: 'develop'
|
16
16
|
|
17
17
|
# uncomment when you want CI to use develop branch of openstudio-standards gem
|
18
|
-
gem 'openstudio-standards', github: 'NREL/OpenStudio-standards', branch: 'master'
|
18
|
+
#gem 'openstudio-standards', github: 'NREL/OpenStudio-standards', branch: 'master'
|
19
19
|
|
20
20
|
# Only uncomment if you need to test a different version of the extension gem
|
21
21
|
# if allow_local && File.exist?('../OpenStudio-extension-gem')
|
data/README.md
CHANGED
@@ -47,6 +47,20 @@ bundle exec rake openstudio:test_with_openstudio
|
|
47
47
|
/usr/local/openstudio-3.0.0-beta/bin/openstudio-3.0.0-beta --verbose --bundle '/var/simdata/openstudio/Gemfile' --bundle_path '/var/simdata/openstudio/.bundle/install/' measure -r '/var/simdata/openstudio/lib/measures/radiance_measure/'
|
48
48
|
```
|
49
49
|
|
50
|
+
# Compatibility Matrix
|
51
|
+
|
52
|
+
|OpenStudio Model Articulation Gem|OpenStudio|Ruby|
|
53
|
+
|:--------------:|:----------:|:--------:|
|
54
|
+
| 0.5.0 | 3.3 | 2.7 |
|
55
|
+
| 0.4.0 - 0.4.2 | 3.2 | 2.7 |
|
56
|
+
| 0.3.0 - 0.3.1 | 3.1 | 2.5 |
|
57
|
+
| 0.2.0 - 0.2.1 | 3.0 | 2.5 |
|
58
|
+
| 0.1.1 and below | 2.9 and below | 2.2.4 |
|
59
|
+
|
60
|
+
# Contributing
|
61
|
+
|
62
|
+
Please review the [OpenStudio Contribution Policy](https://openstudio.net/openstudio-contribution-policy) if you would like to contribute code to this gem.
|
63
|
+
|
50
64
|
## TODO
|
51
65
|
|
52
66
|
- [ ] Move articulation measures from openstudio-measures
|
@@ -317,6 +317,13 @@ class SetWindowToWallRatioByFacade < OpenStudio::Measure::ModelMeasure
|
|
317
317
|
|
318
318
|
all_surfaces = [s]
|
319
319
|
if split_at_doors == 'Split Walls at Doors' && has_doors
|
320
|
+
|
321
|
+
# remove windows before split at doors
|
322
|
+
s.subSurfaces.each do |sub_surface|
|
323
|
+
next if ['Door','OverheadDoor'].include? sub_surface.subSurfaceType
|
324
|
+
sub_surface.remove
|
325
|
+
end
|
326
|
+
|
320
327
|
# split base surfaces at doors to create multiple base surfaces
|
321
328
|
split_surfaces = s.splitSurfaceForSubSurfaces.to_a # frozen array
|
322
329
|
|
@@ -341,9 +348,9 @@ class SetWindowToWallRatioByFacade < OpenStudio::Measure::ModelMeasure
|
|
341
348
|
vertices.each do |vertex|
|
342
349
|
# initialize new vertex to old vertex
|
343
350
|
# rounding values to address tolerance issue 10 digits digits in
|
344
|
-
x_vals << vertex.x.round(
|
345
|
-
y_vals << vertex.y.round(
|
346
|
-
z_vals << vertex.z.round(
|
351
|
+
x_vals << vertex.x.round(4)
|
352
|
+
y_vals << vertex.y.round(4)
|
353
|
+
z_vals << vertex.z.round(4)
|
347
354
|
end
|
348
355
|
if x_vals.uniq.size <= 2 && y_vals.uniq.size <= 2 && z_vals.uniq.size <= 2
|
349
356
|
rect_tri = true
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<schema_version>3.0</schema_version>
|
4
4
|
<name>set_window_to_wall_ratio_by_facade</name>
|
5
5
|
<uid>c567a0bf-a7d9-4a06-afe9-bf7df79e6bf8</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
6
|
+
<version_id>a02e024d-a1ca-413a-90e2-372cfc217228</version_id>
|
7
|
+
<version_modified>20210929T221458Z</version_modified>
|
8
8
|
<xml_checksum>6DE831F7</xml_checksum>
|
9
9
|
<class_name>SetWindowToWallRatioByFacade</class_name>
|
10
10
|
<display_name>Set Window to Wall Ratio by Facade</display_name>
|
@@ -233,13 +233,19 @@ The measure doesn?t have any cost or lifecycle arguments, however If lifecycle o
|
|
233
233
|
<filename>measure.rb</filename>
|
234
234
|
<filetype>rb</filetype>
|
235
235
|
<usage_type>script</usage_type>
|
236
|
-
<checksum>
|
236
|
+
<checksum>6631CF18</checksum>
|
237
237
|
</file>
|
238
238
|
<file>
|
239
239
|
<filename>SetWindowToWallRatioByFacade_Test.rb</filename>
|
240
240
|
<filetype>rb</filetype>
|
241
241
|
<usage_type>test</usage_type>
|
242
|
-
<checksum>
|
242
|
+
<checksum>0F626DE3</checksum>
|
243
|
+
</file>
|
244
|
+
<file>
|
245
|
+
<filename>prototype_sec_sch.osm</filename>
|
246
|
+
<filetype>osm</filetype>
|
247
|
+
<usage_type>test</usage_type>
|
248
|
+
<checksum>581DA01B</checksum>
|
243
249
|
</file>
|
244
250
|
</files>
|
245
251
|
</measure>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
|
2
|
+
|
3
|
+
Redistribution and use in source and binary forms, with or without modification, are permitted
|
4
|
+
provided that the following conditions are met:
|
5
|
+
|
6
|
+
(1) Redistributions of source code must retain the above copyright notice, this list of conditions
|
7
|
+
and the following disclaimer.
|
8
|
+
|
9
|
+
(2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions
|
10
|
+
and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
11
|
+
|
12
|
+
(3) Neither the name of the copyright holder nor the names of any contributors may be used to endorse
|
13
|
+
or promote products derived from this software without specific prior written permission from the
|
14
|
+
respective party.
|
15
|
+
|
16
|
+
(4) Other than as required in clauses (1) and (2), distributions in any form of modifications or other
|
17
|
+
derivative works may not use the "OpenStudio" trademark, "OS", "os", or any other confusingly similar
|
18
|
+
designation without specific prior written permission from Alliance for Sustainable Energy, LLC.
|
19
|
+
|
20
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
|
21
|
+
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
22
|
+
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER, THE UNITED STATES GOVERNMENT,
|
23
|
+
OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
24
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
25
|
+
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
26
|
+
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
27
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
@@ -0,0 +1,116 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
###### (Automatically generated documentation)
|
4
|
+
|
5
|
+
# Add EMPD Material Properties
|
6
|
+
|
7
|
+
## Description
|
8
|
+
Adds the properties for the effective moisture penetration depth (EMPD) Heat Balance Model with inputs for penetration depths.
|
9
|
+
|
10
|
+
## Modeler Description
|
11
|
+
Adds the properties for the MoisturePenetrationDepthConductionTransferFunction or effective moisture penetration depth (EMPD) Heat Balance Model with inputs for penetration depths.
|
12
|
+
|
13
|
+
Leaving Change heat balance algorithm? blank will use the current OpenStudio heat balance algorithm setting.
|
14
|
+
|
15
|
+
At least 1 interior material needs to have moisture penetration depth properties set to use the EMPD heat balance algorithm.
|
16
|
+
|
17
|
+
## Measure Type
|
18
|
+
ModelMeasure
|
19
|
+
|
20
|
+
## Taxonomy
|
21
|
+
|
22
|
+
|
23
|
+
## Arguments
|
24
|
+
|
25
|
+
|
26
|
+
### Select Material
|
27
|
+
|
28
|
+
**Name:** selected_material,
|
29
|
+
**Type:** Choice,
|
30
|
+
**Units:** ,
|
31
|
+
**Required:** true,
|
32
|
+
**Model Dependent:** true
|
33
|
+
|
34
|
+
### Set value for Water Vapor Diffusion Resistance Factor
|
35
|
+
|
36
|
+
**Name:** water_diff_fact,
|
37
|
+
**Type:** Double,
|
38
|
+
**Units:** ,
|
39
|
+
**Required:** true,
|
40
|
+
**Model Dependent:** false
|
41
|
+
|
42
|
+
### Set value for Moisture Equation Coefficient A
|
43
|
+
|
44
|
+
**Name:** coef_a,
|
45
|
+
**Type:** Double,
|
46
|
+
**Units:** ,
|
47
|
+
**Required:** true,
|
48
|
+
**Model Dependent:** false
|
49
|
+
|
50
|
+
### Set value for Moisture Equation Coefficient B
|
51
|
+
|
52
|
+
**Name:** coef_b,
|
53
|
+
**Type:** Double,
|
54
|
+
**Units:** ,
|
55
|
+
**Required:** true,
|
56
|
+
**Model Dependent:** false
|
57
|
+
|
58
|
+
### Set value for Moisture Equation Coefficient C
|
59
|
+
|
60
|
+
**Name:** coef_c,
|
61
|
+
**Type:** Double,
|
62
|
+
**Units:** ,
|
63
|
+
**Required:** true,
|
64
|
+
**Model Dependent:** false
|
65
|
+
|
66
|
+
### Set value for Moisture Equation Coefficient D
|
67
|
+
|
68
|
+
**Name:** coef_d,
|
69
|
+
**Type:** Double,
|
70
|
+
**Units:** ,
|
71
|
+
**Required:** true,
|
72
|
+
**Model Dependent:** false
|
73
|
+
|
74
|
+
### Set value for Surface Layer Penetration Depth
|
75
|
+
|
76
|
+
**Name:** surface_penetration,
|
77
|
+
**Type:** String,
|
78
|
+
**Units:** ,
|
79
|
+
**Required:** true,
|
80
|
+
**Model Dependent:** false
|
81
|
+
|
82
|
+
### Set value for Deep Layer Penetration Depth
|
83
|
+
|
84
|
+
**Name:** deep_penetration,
|
85
|
+
**Type:** String,
|
86
|
+
**Units:** ,
|
87
|
+
**Required:** false,
|
88
|
+
**Model Dependent:** false
|
89
|
+
|
90
|
+
### Set value for Coating Layer Thickness
|
91
|
+
|
92
|
+
**Name:** coating,
|
93
|
+
**Type:** Double,
|
94
|
+
**Units:** ,
|
95
|
+
**Required:** true,
|
96
|
+
**Model Dependent:** false
|
97
|
+
|
98
|
+
### Set value for Coating Layer Resistance Factor
|
99
|
+
|
100
|
+
**Name:** coating_res,
|
101
|
+
**Type:** Double,
|
102
|
+
**Units:** ,
|
103
|
+
**Required:** true,
|
104
|
+
**Model Dependent:** false
|
105
|
+
|
106
|
+
### Change heat balance algorithm?
|
107
|
+
|
108
|
+
**Name:** algorithm,
|
109
|
+
**Type:** Choice,
|
110
|
+
**Units:** ,
|
111
|
+
**Required:** false,
|
112
|
+
**Model Dependent:** false
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<%#= README.md.erb is used to auto-generate README.md. %>
|
2
|
+
<%#= To manually maintain README.md throw away README.md.erb and manually edit README.md %>
|
3
|
+
###### (Automatically generated documentation)
|
4
|
+
|
5
|
+
# <%= name %>
|
6
|
+
|
7
|
+
## Description
|
8
|
+
<%= description %>
|
9
|
+
|
10
|
+
## Modeler Description
|
11
|
+
<%= modelerDescription %>
|
12
|
+
|
13
|
+
## Measure Type
|
14
|
+
<%= measureType %>
|
15
|
+
|
16
|
+
## Taxonomy
|
17
|
+
<%= taxonomy %>
|
18
|
+
|
19
|
+
## Arguments
|
20
|
+
|
21
|
+
<% arguments.each do |argument| %>
|
22
|
+
### <%= argument[:display_name] %>
|
23
|
+
<%= argument[:description] %>
|
24
|
+
**Name:** <%= argument[:name] %>,
|
25
|
+
**Type:** <%= argument[:type] %>,
|
26
|
+
**Units:** <%= argument[:units] %>,
|
27
|
+
**Required:** <%= argument[:required] %>,
|
28
|
+
**Model Dependent:** <%= argument[:model_dependent] %>
|
29
|
+
<% end %>
|
30
|
+
|
31
|
+
<% if arguments.size == 0 %>
|
32
|
+
<%= "This measure does not have any user arguments" %>
|
33
|
+
<% end %>
|
34
|
+
|
35
|
+
<% if outputs.size > 0 %>
|
36
|
+
## Outputs
|
37
|
+
<% output_names = [] %>
|
38
|
+
<% outputs.each do |output| %>
|
39
|
+
<% output_names << output[:display_name] %>
|
40
|
+
<% end %>
|
41
|
+
<%= output_names.join(", ") %>
|
42
|
+
<% end %>
|
File without changes
|
@@ -0,0 +1,247 @@
|
|
1
|
+
# *******************************************************************************
|
2
|
+
# OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
|
3
|
+
# All rights reserved.
|
4
|
+
# Redistribution and use in source and binary forms, with or without
|
5
|
+
# modification, are permitted provided that the following conditions are met:
|
6
|
+
#
|
7
|
+
# (1) Redistributions of source code must retain the above copyright notice,
|
8
|
+
# this list of conditions and the following disclaimer.
|
9
|
+
#
|
10
|
+
# (2) Redistributions in binary form must reproduce the above copyright notice,
|
11
|
+
# this list of conditions and the following disclaimer in the documentation
|
12
|
+
# and/or other materials provided with the distribution.
|
13
|
+
#
|
14
|
+
# (3) Neither the name of the copyright holder nor the names of any contributors
|
15
|
+
# may be used to endorse or promote products derived from this software without
|
16
|
+
# specific prior written permission from the respective party.
|
17
|
+
#
|
18
|
+
# (4) Other than as required in clauses (1) and (2), distributions in any form
|
19
|
+
# of modifications or other derivative works may not use the "OpenStudio"
|
20
|
+
# trademark, "OS", "os", or any other confusingly similar designation without
|
21
|
+
# specific prior written permission from Alliance for Sustainable Energy, LLC.
|
22
|
+
#
|
23
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
|
24
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
25
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
26
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
|
27
|
+
# UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
|
28
|
+
# THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
29
|
+
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
30
|
+
# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
31
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
32
|
+
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
33
|
+
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
34
|
+
# *******************************************************************************
|
35
|
+
|
36
|
+
# insert your copyright here
|
37
|
+
|
38
|
+
# Measure written by Gabriel Flechas
|
39
|
+
# Assitance by Karl Heine (THANKS KARL!)
|
40
|
+
# Last edit 05/25/2021
|
41
|
+
|
42
|
+
# see the URL below for information on how to write OpenStudio measures
|
43
|
+
# http://nrel.github.io/OpenStudio-user-documentation/reference/measure_writing_guide/
|
44
|
+
|
45
|
+
# start the measure
|
46
|
+
class AddEMPDMaterialProperties < OpenStudio::Measure::ModelMeasure
|
47
|
+
# human readable name
|
48
|
+
def name
|
49
|
+
# Measure name should be the title case of the class name.
|
50
|
+
return 'Add EMPD Material Properties'
|
51
|
+
end
|
52
|
+
|
53
|
+
# human readable description
|
54
|
+
def description
|
55
|
+
return 'Adds the properties for the effective moisture penetration depth (EMPD) Heat Balance Model with inputs for penetration depths.'
|
56
|
+
end
|
57
|
+
|
58
|
+
# human readable description of modeling approach
|
59
|
+
def modeler_description
|
60
|
+
return ['Adds', 'the', 'properties', 'for', 'the', 'MoisturePenetrationDepthConductionTransferFunction', 'or', 'effective', 'moisture', 'penetration', 'depth', '(EMPD)', 'Heat', 'Balance', 'Model', 'with', 'inputs', 'for', 'penetration', 'depths.', "\n\n", 'Leaving', 'Change', 'heat', 'balance', 'algorithm?', 'blank', 'will', 'use', 'the', 'current', 'OpenStudio', 'heat', 'balance', 'algorithm', 'setting.', "\n\n", 'At', 'least', '1', 'interior', 'material', 'needs', 'to', 'have', 'moisture', 'penetration', 'depth', 'properties', 'set', 'to', 'use', 'the', 'EMPD', 'heat', 'balance', 'algorithm.'].join(' ')
|
61
|
+
end
|
62
|
+
|
63
|
+
# define the arguments that the user will input
|
64
|
+
def arguments(model)
|
65
|
+
args = OpenStudio::Measure::OSArgumentVector.new
|
66
|
+
|
67
|
+
# find the available materials
|
68
|
+
list_materials = model.getMaterials
|
69
|
+
mat_names = []
|
70
|
+
list_materials.each do |v|
|
71
|
+
mat_names.append(v.name.to_s)
|
72
|
+
end
|
73
|
+
mat_names.sort!
|
74
|
+
|
75
|
+
# Create arguments for material selection (Choice)
|
76
|
+
selected_material = OpenStudio::Measure::OSArgument.makeChoiceArgument('selected_material',
|
77
|
+
mat_names, true, true)
|
78
|
+
selected_material.setDisplayName('Select Material')
|
79
|
+
if !mat_names.empty?
|
80
|
+
selected_material.setDefaultValue(mat_names[0])
|
81
|
+
else
|
82
|
+
selected_material.setDefaultValue('No Materials In Model!')
|
83
|
+
end
|
84
|
+
args << selected_material
|
85
|
+
|
86
|
+
# create argument for Water Vapor Diffusion Resistance Factor
|
87
|
+
water_diff_fact = OpenStudio::Measure::OSArgument.makeDoubleArgument('water_diff_fact', true)
|
88
|
+
water_diff_fact.setDisplayName('Set value for Water Vapor Diffusion Resistance Factor')
|
89
|
+
water_diff_fact.setDefaultValue(0)
|
90
|
+
args << water_diff_fact
|
91
|
+
|
92
|
+
# create argument for Coefficient A
|
93
|
+
coef_a = OpenStudio::Measure::OSArgument.makeDoubleArgument('coef_a', true)
|
94
|
+
coef_a.setDisplayName('Set value for Moisture Equation Coefficient A')
|
95
|
+
coef_a.setDefaultValue(0)
|
96
|
+
args << coef_a
|
97
|
+
|
98
|
+
# create argument for Coefficient B
|
99
|
+
coef_b = OpenStudio::Measure::OSArgument.makeDoubleArgument('coef_b', true)
|
100
|
+
coef_b.setDisplayName('Set value for Moisture Equation Coefficient B')
|
101
|
+
coef_b.setDefaultValue(0)
|
102
|
+
args << coef_b
|
103
|
+
|
104
|
+
# create argument for Coefficient C
|
105
|
+
coef_c = OpenStudio::Measure::OSArgument.makeDoubleArgument('coef_c', true)
|
106
|
+
coef_c.setDisplayName('Set value for Moisture Equation Coefficient C')
|
107
|
+
coef_c.setDefaultValue(0)
|
108
|
+
args << coef_c
|
109
|
+
|
110
|
+
# create argument for Coefficient D
|
111
|
+
coef_d = OpenStudio::Measure::OSArgument.makeDoubleArgument('coef_d', true)
|
112
|
+
coef_d.setDisplayName('Set value for Moisture Equation Coefficient D')
|
113
|
+
coef_d.setDefaultValue(0)
|
114
|
+
args << coef_d
|
115
|
+
|
116
|
+
# create argument for Surface Layer Penetration Depth
|
117
|
+
surface_penetration = OpenStudio::Measure::OSArgument.makeStringArgument('surface_penetration', true)
|
118
|
+
surface_penetration.setDisplayName('Set value for Surface Layer Penetration Depth')
|
119
|
+
surface_penetration.setDefaultValue('Auto')
|
120
|
+
args << surface_penetration
|
121
|
+
|
122
|
+
# create argument for Deep Layer Penetration Depth
|
123
|
+
deep_penetration = OpenStudio::Measure::OSArgument.makeStringArgument('deep_penetration', false)
|
124
|
+
deep_penetration.setDisplayName('Set value for Deep Layer Penetration Depth')
|
125
|
+
deep_penetration.setDefaultValue('Auto')
|
126
|
+
args << deep_penetration
|
127
|
+
|
128
|
+
# create argument for Coating layer Thickness
|
129
|
+
coating = OpenStudio::Measure::OSArgument.makeDoubleArgument('coating', true)
|
130
|
+
coating.setDisplayName('Set value for Coating Layer Thickness')
|
131
|
+
coating.setDefaultValue(0)
|
132
|
+
args << coating
|
133
|
+
|
134
|
+
# create argument for Coating layer Resistance
|
135
|
+
coating_res = OpenStudio::Measure::OSArgument.makeDoubleArgument('coating_res', true)
|
136
|
+
coating_res.setDisplayName('Set value for Coating Layer Resistance Factor')
|
137
|
+
coating_res.setDefaultValue(0)
|
138
|
+
args << coating_res
|
139
|
+
|
140
|
+
# create argument for heat balance algorithm
|
141
|
+
algs = ['', 'MoisturePenetrationDepthConductionTransferFunction',
|
142
|
+
'ConductionTransferFunction']
|
143
|
+
algorithm = OpenStudio::Measure::OSArgument.makeChoiceArgument('algorithm', algs, false)
|
144
|
+
algorithm.setDisplayName('Change heat balance algorithm?')
|
145
|
+
algorithm.setDefaultValue(algs[0])
|
146
|
+
args << algorithm
|
147
|
+
|
148
|
+
return args
|
149
|
+
end
|
150
|
+
|
151
|
+
# define what happens when the measure is run
|
152
|
+
def run(model, runner, user_arguments)
|
153
|
+
super(model, runner, user_arguments)
|
154
|
+
|
155
|
+
# use the built-in error checking
|
156
|
+
if !runner.validateUserArguments(arguments(model), user_arguments)
|
157
|
+
return false
|
158
|
+
end
|
159
|
+
|
160
|
+
# assign the user inputs to variables
|
161
|
+
selected_material = runner.getStringArgumentValue('selected_material', user_arguments)
|
162
|
+
water_diff_fact = runner.getDoubleArgumentValue('water_diff_fact', user_arguments)
|
163
|
+
coef_a = runner.getDoubleArgumentValue('coef_a', user_arguments)
|
164
|
+
coef_b = runner.getDoubleArgumentValue('coef_b', user_arguments)
|
165
|
+
coef_c = runner.getDoubleArgumentValue('coef_c', user_arguments)
|
166
|
+
coef_d = runner.getDoubleArgumentValue('coef_d', user_arguments)
|
167
|
+
surface_penetration = runner.getStringArgumentValue('surface_penetration', user_arguments)
|
168
|
+
surface_penetration = surface_penetration.to_f
|
169
|
+
deep_penetration = runner.getStringArgumentValue('deep_penetration', user_arguments)
|
170
|
+
deep_penetration = deep_penetration.to_f
|
171
|
+
coating = runner.getDoubleArgumentValue('coating', user_arguments)
|
172
|
+
coating_res = runner.getDoubleArgumentValue('coating_res', user_arguments)
|
173
|
+
algorithm = runner.getStringArgumentValue('algorithm', user_arguments)
|
174
|
+
|
175
|
+
#---------------------------------------------------------------------------
|
176
|
+
# Validate arguments
|
177
|
+
if water_diff_fact == 0
|
178
|
+
runner.registerError('The Water Vapor Diffusion Resistance Factor needs to be greater than 0.')
|
179
|
+
return false
|
180
|
+
end
|
181
|
+
if coef_a == 0
|
182
|
+
runner.registerWarning('The Moisture Equation Coefficient A has been left as 0. This is usally a non-zero value.')
|
183
|
+
end
|
184
|
+
if coef_b == 0
|
185
|
+
runner.registerWarning('The Moisture Equation Coefficient B has been left as 0. This is usally a non-zero value.')
|
186
|
+
end
|
187
|
+
if coef_c == 0
|
188
|
+
runner.registerWarning('The Moisture Equation Coefficient C has been left as 0. This is usally a non-zero value.')
|
189
|
+
end
|
190
|
+
if coef_d == 0
|
191
|
+
runner.registerWarning('The Moisture Equation Coefficient D has been left as 0. This is usally a non-zero value.')
|
192
|
+
end
|
193
|
+
#---------------------------------------------------------------------------
|
194
|
+
|
195
|
+
# Get os object for selected material
|
196
|
+
mats = model.getMaterials
|
197
|
+
mat = ''
|
198
|
+
mats.each do |m|
|
199
|
+
if m.name.to_s == selected_material
|
200
|
+
mat = m
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
# report initial condition of model
|
205
|
+
runner.registerInitialCondition("The building has #{mats.size} materials.")
|
206
|
+
|
207
|
+
#---------------------------------------------------------------------------
|
208
|
+
# Set algorithm and report to users
|
209
|
+
if algorithm != ''
|
210
|
+
alg = model.getHeatBalanceAlgorithm
|
211
|
+
alg.setAlgorithm(algorithm)
|
212
|
+
runner.registerInfo("Heat Balance Algorithm Set to : #{algorithm}")
|
213
|
+
end
|
214
|
+
#---------------------------------------------------------------------------
|
215
|
+
|
216
|
+
# Add moisture properties object and make changes to model
|
217
|
+
n = OpenStudio::Model::MaterialPropertyMoisturePenetrationDepthSettings.new(
|
218
|
+
mat, water_diff_fact, coef_a, coef_b, coef_c, coef_d, coating, coating_res
|
219
|
+
)
|
220
|
+
|
221
|
+
# check if the surface penetration is being autocalculated, and if not set the depth
|
222
|
+
if surface_penetration > 0
|
223
|
+
n.setSurfaceLayerPenetrationDepth(surface_penetration)
|
224
|
+
runner.registerInfo("Surface layer penetration depth set to: #{surface_penetration}")
|
225
|
+
else
|
226
|
+
n.autocalculateSurfaceLayerPenetrationDepth
|
227
|
+
runner.registerInfo('Surface layer penetration depth set to: AutoCalculate')
|
228
|
+
end
|
229
|
+
|
230
|
+
# check if the deep penetration is being autocalculated, and if not set the depth
|
231
|
+
if deep_penetration > 0
|
232
|
+
n.setDeepLayerPenetrationDepth(deep_penetration)
|
233
|
+
runner.registerInfo("Deep layer penetration depth set to: #{surface_penetration}")
|
234
|
+
else
|
235
|
+
n.autocalculateDeepLayerPenetrationDepth
|
236
|
+
runner.registerInfo('Deep layer penetration depth set to: AutoCalculate')
|
237
|
+
end
|
238
|
+
|
239
|
+
# report final condition of model
|
240
|
+
runner.registerFinalCondition("Moisture properties were added to #{selected_material}.")
|
241
|
+
|
242
|
+
return true
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
# register the measure to be used by the application
|
247
|
+
AddEMPDMaterialProperties.new.registerWithApplication
|