openstudio-model-articulation 0.4.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -1
  3. data/CHANGELOG.md +24 -0
  4. data/Gemfile +2 -2
  5. data/README.md +22 -3
  6. data/lib/measures/AssignConstructionSetToBuilding/measure.xml +10 -10
  7. data/lib/measures/AssignSpaceTypeBySpaceName/measure.xml +27 -9
  8. data/lib/measures/AssignSpaceTypeToBuilding/measure.xml +10 -10
  9. data/lib/measures/AssignSpacesToStories/measure.rb +2 -4
  10. data/lib/measures/AssignSpacesToStories/measure.xml +10 -10
  11. data/lib/measures/BarAspectRatioStudy/measure.rb +2 -1
  12. data/lib/measures/BarAspectRatioStudy/measure.xml +4 -4
  13. data/lib/measures/CleanupSpaceOrigins/measure.rb +3 -0
  14. data/lib/measures/CleanupSpaceOrigins/measure.xml +10 -10
  15. data/lib/measures/FindAndReplaceObjectNames/measure.xml +8 -8
  16. data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.rb +2 -2
  17. data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.xml +22 -4
  18. data/lib/measures/RemoveHardAssignedConstructions/measure.xml +8 -8
  19. data/lib/measures/RenameSpaceSurfacesBasedonParentSpaceandOrientation/measure.xml +37 -7
  20. data/lib/measures/RotateBuilding/measure.xml +8 -8
  21. data/lib/measures/SetExtWallToGroundBoundaryConditionByStory/measure.xml +13 -7
  22. data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/measure.rb +1 -1
  23. data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/measure.xml +10 -10
  24. data/lib/measures/SetInteriorWallsToSelectedConstruction/measure.rb +1 -1
  25. data/lib/measures/SetInteriorWallsToSelectedConstruction/measure.xml +10 -10
  26. data/lib/measures/SetWindowToWallRatioByFacade/README.md +11 -0
  27. data/lib/measures/SetWindowToWallRatioByFacade/measure.rb +90 -142
  28. data/lib/measures/SetWindowToWallRatioByFacade/measure.xml +32 -11
  29. data/lib/measures/SetWindowToWallRatioByFacade/resources/functions.rb +176 -0
  30. data/lib/measures/SimplifyGeometryToSlicedBar/measure.rb +8 -4
  31. data/lib/measures/SimplifyGeometryToSlicedBar/measure.xml +31 -13
  32. data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_cofee.rb +6 -4
  33. data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_geometry.rb +13 -8
  34. data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_helper_methods.rb +2 -4
  35. data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.rb +1 -1
  36. data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.xml +4 -4
  37. data/lib/measures/SurfaceMatching/measure.rb +1 -0
  38. data/lib/measures/SurfaceMatching/measure.xml +10 -10
  39. data/lib/measures/add_empd_material_properties/LICENSE.md +27 -0
  40. data/lib/measures/add_empd_material_properties/README.md +116 -0
  41. data/lib/measures/add_empd_material_properties/README.md.erb +42 -0
  42. data/lib/measures/add_empd_material_properties/docs/.gitkeep +0 -0
  43. data/lib/measures/add_empd_material_properties/measure.rb +247 -0
  44. data/lib/measures/add_empd_material_properties/measure.xml +201 -0
  45. data/lib/measures/blended_space_type_from_floor_area_ratios/measure.rb +4 -3
  46. data/lib/measures/blended_space_type_from_floor_area_ratios/measure.xml +4 -4
  47. data/lib/measures/blended_space_type_from_model/{resources → docs}/replace_occupied_spaces_with_blended_space_type_design_doc.txt +0 -0
  48. data/lib/measures/blended_space_type_from_model/measure.rb +11 -3
  49. data/lib/measures/blended_space_type_from_model/measure.xml +15 -21
  50. data/lib/measures/clone_building_from_external_model/measure.xml +3 -3
  51. data/lib/measures/create_DOE_prototype_building/measure.rb +2 -2
  52. data/lib/measures/create_DOE_prototype_building/measure.xml +442 -438
  53. data/lib/measures/create_and_assign_thermal_zones_for_unassigned_spaces/measure.xml +3 -3
  54. data/lib/measures/create_bar_from_building_type_ratios/README.md +109 -35
  55. data/lib/measures/create_bar_from_building_type_ratios/README.md.erb +54 -35
  56. data/lib/measures/create_bar_from_building_type_ratios/measure.rb +8 -3
  57. data/lib/measures/create_bar_from_building_type_ratios/measure.xml +12 -12
  58. data/lib/measures/create_bar_from_deer_building_type_ratios/README.md +301 -79
  59. data/lib/measures/create_bar_from_deer_building_type_ratios/README.md.erb +62 -79
  60. data/lib/measures/create_bar_from_deer_building_type_ratios/measure.rb +9 -4
  61. data/lib/measures/create_bar_from_deer_building_type_ratios/measure.xml +15 -59
  62. data/lib/measures/create_bar_from_doe_building_type_ratios/README.md +298 -57
  63. data/lib/measures/create_bar_from_doe_building_type_ratios/README.md.erb +54 -57
  64. data/lib/measures/create_bar_from_doe_building_type_ratios/measure.rb +9 -4
  65. data/lib/measures/create_bar_from_doe_building_type_ratios/measure.xml +12 -16
  66. data/lib/measures/create_bar_from_model/measure.rb +10 -6
  67. data/lib/measures/create_bar_from_model/measure.xml +4 -4
  68. data/lib/measures/create_bar_from_space_type_ratios/README.md +94 -42
  69. data/lib/measures/create_bar_from_space_type_ratios/README.md.erb +60 -42
  70. data/lib/measures/create_bar_from_space_type_ratios/measure.rb +8 -3
  71. data/lib/measures/create_bar_from_space_type_ratios/measure.xml +15 -15
  72. data/lib/measures/create_baseline_building/measure.rb +3 -2
  73. data/lib/measures/create_baseline_building/measure.xml +4 -4
  74. data/lib/measures/create_deer_prototype_building/measure.xml +3 -3
  75. data/lib/measures/create_parametric_schedules/measure.rb +15 -10
  76. data/lib/measures/create_parametric_schedules/measure.xml +4 -4
  77. data/lib/measures/create_typical_building_from_model/README.md +81 -16
  78. data/lib/measures/create_typical_building_from_model/README.md.erb +36 -16
  79. data/lib/measures/create_typical_building_from_model/measure.rb +6 -1
  80. data/lib/measures/create_typical_building_from_model/measure.xml +19 -19
  81. data/lib/measures/create_typical_deer_building_from_model/README.md +173 -53
  82. data/lib/measures/create_typical_deer_building_from_model/README.md.erb +57 -53
  83. data/lib/measures/create_typical_deer_building_from_model/measure.rb +7 -2
  84. data/lib/measures/create_typical_deer_building_from_model/measure.xml +26 -26
  85. data/lib/measures/create_typical_doe_building_from_model/README.md +182 -44
  86. data/lib/measures/create_typical_doe_building_from_model/README.md.erb +58 -44
  87. data/lib/measures/create_typical_doe_building_from_model/measure.rb +7 -2
  88. data/lib/measures/create_typical_doe_building_from_model/measure.xml +26 -26
  89. data/lib/measures/deer_space_type_and_construction_set_wizard/measure.rb +1 -1
  90. data/lib/measures/deer_space_type_and_construction_set_wizard/measure.xml +4 -4
  91. data/lib/measures/find_and_replace_in_all_thermal_zone_names/measure.xml +3 -3
  92. data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/measure.rb +2 -0
  93. data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/measure.xml +4 -4
  94. data/lib/measures/merge_floorspace_js_with_model/measure.rb +4 -1
  95. data/lib/measures/merge_floorspace_js_with_model/measure.xml +4 -4
  96. data/lib/measures/merge_spaces_from_external_file/measure.xml +3 -3
  97. data/lib/measures/radiance_measure/measure.rb +62 -56
  98. data/lib/measures/radiance_measure/measure.xml +4 -4
  99. data/lib/measures/radiant_slab_with_doas/measure.rb +8 -1
  100. data/lib/measures/radiant_slab_with_doas/measure.xml +9 -9
  101. data/lib/measures/replace_geometry_by_story/measure.rb +4 -0
  102. data/lib/measures/replace_geometry_by_story/measure.xml +4 -4
  103. data/lib/measures/scale_geometry/measure.xml +3 -3
  104. data/lib/openstudio/model_articulation/version.rb +1 -1
  105. data/openstudio-model-articulation.gemspec +2 -2
  106. metadata +15 -9
  107. data/lib/measures/blended_space_type_from_model/resources/os_lib_model_simplification.rb +0 -1049
@@ -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 %>
@@ -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
@@ -0,0 +1,201 @@
1
+ <?xml version="1.0"?>
2
+ <measure>
3
+ <schema_version>3.0</schema_version>
4
+ <name>add_empd_material_properties</name>
5
+ <uid>91799c24-d81e-42eb-a458-f2b3a0ee1ff3</uid>
6
+ <version_id>74e7a9c8-62dd-4f8b-ad26-f28fa0408982</version_id>
7
+ <version_modified>20210814T063318Z</version_modified>
8
+ <xml_checksum>9EF0A36D</xml_checksum>
9
+ <class_name>AddEMPDMaterialProperties</class_name>
10
+ <display_name>Add EMPD Material Properties</display_name>
11
+ <description>Adds the properties for the effective moisture penetration depth (EMPD) Heat Balance Model with inputs for penetration depths.</description>
12
+ <modeler_description>Adds the properties for the MoisturePenetrationDepthConductionTransferFunction or effective moisture penetration depth (EMPD) Heat Balance Model with inputs for penetration depths.
13
+
14
+ Leaving Change heat balance algorithm? blank will use the current OpenStudio heat balance algorithm setting.
15
+
16
+ At least 1 interior material needs to have moisture penetration depth properties set to use the EMPD heat balance algorithm.</modeler_description>
17
+ <arguments>
18
+ <argument>
19
+ <name>selected_material</name>
20
+ <display_name>Select Material</display_name>
21
+ <type>Choice</type>
22
+ <required>true</required>
23
+ <model_dependent>true</model_dependent>
24
+ </argument>
25
+ <argument>
26
+ <name>water_diff_fact</name>
27
+ <display_name>Set value for Water Vapor Diffusion Resistance Factor</display_name>
28
+ <type>Double</type>
29
+ <required>true</required>
30
+ <model_dependent>false</model_dependent>
31
+ <default_value>0</default_value>
32
+ </argument>
33
+ <argument>
34
+ <name>coef_a</name>
35
+ <display_name>Set value for Moisture Equation Coefficient A</display_name>
36
+ <type>Double</type>
37
+ <required>true</required>
38
+ <model_dependent>false</model_dependent>
39
+ <default_value>0</default_value>
40
+ </argument>
41
+ <argument>
42
+ <name>coef_b</name>
43
+ <display_name>Set value for Moisture Equation Coefficient B</display_name>
44
+ <type>Double</type>
45
+ <required>true</required>
46
+ <model_dependent>false</model_dependent>
47
+ <default_value>0</default_value>
48
+ </argument>
49
+ <argument>
50
+ <name>coef_c</name>
51
+ <display_name>Set value for Moisture Equation Coefficient C</display_name>
52
+ <type>Double</type>
53
+ <required>true</required>
54
+ <model_dependent>false</model_dependent>
55
+ <default_value>0</default_value>
56
+ </argument>
57
+ <argument>
58
+ <name>coef_d</name>
59
+ <display_name>Set value for Moisture Equation Coefficient D</display_name>
60
+ <type>Double</type>
61
+ <required>true</required>
62
+ <model_dependent>false</model_dependent>
63
+ <default_value>0</default_value>
64
+ </argument>
65
+ <argument>
66
+ <name>surface_penetration</name>
67
+ <display_name>Set value for Surface Layer Penetration Depth</display_name>
68
+ <type>String</type>
69
+ <required>true</required>
70
+ <model_dependent>false</model_dependent>
71
+ <default_value>Auto</default_value>
72
+ </argument>
73
+ <argument>
74
+ <name>deep_penetration</name>
75
+ <display_name>Set value for Deep Layer Penetration Depth</display_name>
76
+ <type>String</type>
77
+ <required>false</required>
78
+ <model_dependent>false</model_dependent>
79
+ <default_value>Auto</default_value>
80
+ </argument>
81
+ <argument>
82
+ <name>coating</name>
83
+ <display_name>Set value for Coating Layer Thickness</display_name>
84
+ <type>Double</type>
85
+ <required>true</required>
86
+ <model_dependent>false</model_dependent>
87
+ <default_value>0</default_value>
88
+ </argument>
89
+ <argument>
90
+ <name>coating_res</name>
91
+ <display_name>Set value for Coating Layer Resistance Factor</display_name>
92
+ <type>Double</type>
93
+ <required>true</required>
94
+ <model_dependent>false</model_dependent>
95
+ <default_value>0</default_value>
96
+ </argument>
97
+ <argument>
98
+ <name>algorithm</name>
99
+ <display_name>Change heat balance algorithm?</display_name>
100
+ <type>Choice</type>
101
+ <required>false</required>
102
+ <model_dependent>false</model_dependent>
103
+ <default_value></default_value>
104
+ <choices>
105
+ <choice>
106
+ <value></value>
107
+ <display_name></display_name>
108
+ </choice>
109
+ <choice>
110
+ <value>MoisturePenetrationDepthConductionTransferFunction</value>
111
+ <display_name>MoisturePenetrationDepthConductionTransferFunction</display_name>
112
+ </choice>
113
+ <choice>
114
+ <value>ConductionTransferFunction</value>
115
+ <display_name>ConductionTransferFunction</display_name>
116
+ </choice>
117
+ </choices>
118
+ </argument>
119
+ </arguments>
120
+ <outputs />
121
+ <provenances />
122
+ <tags>
123
+ <tag>Envelope.Opaque</tag>
124
+ </tags>
125
+ <attributes>
126
+ <attribute>
127
+ <name>Measure Type</name>
128
+ <value>ModelMeasure</value>
129
+ <datatype>string</datatype>
130
+ </attribute>
131
+ <attribute>
132
+ <name>Intended Software Tool</name>
133
+ <value>Apply Measure Now</value>
134
+ <datatype>string</datatype>
135
+ </attribute>
136
+ <attribute>
137
+ <name>Intended Software Tool</name>
138
+ <value>OpenStudio Application</value>
139
+ <datatype>string</datatype>
140
+ </attribute>
141
+ <attribute>
142
+ <name>Intended Software Tool</name>
143
+ <value>Parametric Analysis Tool</value>
144
+ <datatype>string</datatype>
145
+ </attribute>
146
+ <attribute>
147
+ <name>Intended Use Case</name>
148
+ <value>Model Articulation</value>
149
+ <datatype>string</datatype>
150
+ </attribute>
151
+ </attributes>
152
+ <files>
153
+ <file>
154
+ <filename>README.md.erb</filename>
155
+ <filetype>erb</filetype>
156
+ <usage_type>readmeerb</usage_type>
157
+ <checksum>703C9964</checksum>
158
+ </file>
159
+ <file>
160
+ <filename>.gitkeep</filename>
161
+ <filetype>gitkeep</filetype>
162
+ <usage_type>doc</usage_type>
163
+ <checksum>00000000</checksum>
164
+ </file>
165
+ <file>
166
+ <filename>example_model.osm</filename>
167
+ <filetype>osm</filetype>
168
+ <usage_type>test</usage_type>
169
+ <checksum>53D14E69</checksum>
170
+ </file>
171
+ <file>
172
+ <filename>LICENSE.md</filename>
173
+ <filetype>md</filetype>
174
+ <usage_type>license</usage_type>
175
+ <checksum>A21A3ED2</checksum>
176
+ </file>
177
+ <file>
178
+ <version>
179
+ <software_program>OpenStudio</software_program>
180
+ <identifier>3.0.0</identifier>
181
+ <min_compatible>3.0.0</min_compatible>
182
+ </version>
183
+ <filename>measure.rb</filename>
184
+ <filetype>rb</filetype>
185
+ <usage_type>script</usage_type>
186
+ <checksum>96F39314</checksum>
187
+ </file>
188
+ <file>
189
+ <filename>README.md</filename>
190
+ <filetype>md</filetype>
191
+ <usage_type>readme</usage_type>
192
+ <checksum>D2460F20</checksum>
193
+ </file>
194
+ <file>
195
+ <filename>add_empd_material_properties_test.rb</filename>
196
+ <filetype>rb</filetype>
197
+ <usage_type>test</usage_type>
198
+ <checksum>360B75F1</checksum>
199
+ </file>
200
+ </files>
201
+ </measure>
@@ -41,8 +41,8 @@ require 'openstudio-standards'
41
41
  # load OpenStudio measure libraries from openstudio-extension gem
42
42
  require 'openstudio-extension'
43
43
  require 'openstudio/extension/core/os_lib_helper_methods'
44
- require 'openstudio/extension/core/os_lib_model_generation.rb'
45
- require 'openstudio/extension/core/os_lib_model_simplification.rb'
44
+ require 'openstudio/extension/core/os_lib_model_generation'
45
+ require 'openstudio/extension/core/os_lib_model_simplification'
46
46
 
47
47
  # start the measure
48
48
  class BlendedSpaceTypeFromFloorAreaRatios < OpenStudio::Measure::ModelMeasure
@@ -188,7 +188,7 @@ class BlendedSpaceTypeFromFloorAreaRatios < OpenStudio::Measure::ModelMeasure
188
188
  # make hash of out string arguemnt in eval. Rescue if can't be made into hash
189
189
  begin
190
190
  space_type_ratio_hash = eval("{#{space_type_ratio_string}}")
191
- rescue SyntaxError => se
191
+ rescue SyntaxError => e
192
192
  runner.registerError("{#{space_type_ratio_string}} could not be converted to a hash.")
193
193
  return false
194
194
  end
@@ -217,6 +217,7 @@ class BlendedSpaceTypeFromFloorAreaRatios < OpenStudio::Measure::ModelMeasure
217
217
  # remove all space type assignments, except for spaces not included in building area.
218
218
  model.getSpaces.each do |space|
219
219
  next if !space.partofTotalFloorArea
220
+
220
221
  space.resetSpaceType
221
222
  end
222
223
  end
@@ -3,8 +3,8 @@
3
3
  <schema_version>3.0</schema_version>
4
4
  <name>blended_space_type_from_floor_area_ratios</name>
5
5
  <uid>48ff1765-871b-4c9c-9996-a22757c534ad</uid>
6
- <version_id>c6e020e9-193d-43b4-a26b-3720fb92fefa</version_id>
7
- <version_modified>20210423T142526Z</version_modified>
6
+ <version_id>a53055e8-ed44-4bef-8f7b-f31090e769f7</version_id>
7
+ <version_modified>20220505T182931Z</version_modified>
8
8
  <xml_checksum>05C5DFDC</xml_checksum>
9
9
  <class_name>BlendedSpaceTypeFromFloorAreaRatios</class_name>
10
10
  <display_name>Blended Space Type from Floor Area Ratios</display_name>
@@ -148,7 +148,7 @@
148
148
  <filename>measure_test.rb</filename>
149
149
  <filetype>rb</filetype>
150
150
  <usage_type>test</usage_type>
151
- <checksum>AA55F056</checksum>
151
+ <checksum>8CD7EC26</checksum>
152
152
  </file>
153
153
  <file>
154
154
  <version>
@@ -159,7 +159,7 @@
159
159
  <filename>measure.rb</filename>
160
160
  <filetype>rb</filetype>
161
161
  <usage_type>script</usage_type>
162
- <checksum>57F50F90</checksum>
162
+ <checksum>E1767BA6</checksum>
163
163
  </file>
164
164
  </files>
165
165
  </measure>