openstudio-model-articulation 0.3.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (203) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -1
  3. data/CHANGELOG.md +28 -0
  4. data/Gemfile +6 -0
  5. data/Jenkinsfile +1 -0
  6. data/LICENSE.md +1 -1
  7. data/README.md +22 -3
  8. data/doc_templates/LICENSE.md +1 -1
  9. data/doc_templates/copyright_erb.txt +1 -1
  10. data/doc_templates/copyright_js.txt +1 -1
  11. data/doc_templates/copyright_ruby.txt +1 -1
  12. data/lib/measures/AssignConstructionSetToBuilding/LICENSE.md +1 -1
  13. data/lib/measures/AssignConstructionSetToBuilding/measure.rb +1 -1
  14. data/lib/measures/AssignConstructionSetToBuilding/measure.xml +16 -15
  15. data/lib/measures/AssignSpaceTypeBySpaceName/LICENSE.md +1 -1
  16. data/lib/measures/AssignSpaceTypeBySpaceName/measure.rb +1 -1
  17. data/lib/measures/AssignSpaceTypeBySpaceName/measure.xml +32 -13
  18. data/lib/measures/AssignSpaceTypeToBuilding/LICENSE.md +1 -1
  19. data/lib/measures/AssignSpaceTypeToBuilding/measure.rb +1 -1
  20. data/lib/measures/AssignSpaceTypeToBuilding/measure.xml +16 -15
  21. data/lib/measures/AssignSpacesToStories/LICENSE.md +1 -1
  22. data/lib/measures/AssignSpacesToStories/measure.rb +3 -5
  23. data/lib/measures/AssignSpacesToStories/measure.xml +14 -13
  24. data/lib/measures/BarAspectRatioStudy/LICENSE.md +1 -1
  25. data/lib/measures/BarAspectRatioStudy/measure.rb +3 -2
  26. data/lib/measures/BarAspectRatioStudy/measure.xml +8 -7
  27. data/lib/measures/CleanupSpaceOrigins/LICENSE.md +1 -1
  28. data/lib/measures/CleanupSpaceOrigins/measure.rb +4 -1
  29. data/lib/measures/CleanupSpaceOrigins/measure.xml +14 -13
  30. data/lib/measures/FindAndReplaceObjectNames/LICENSE.md +1 -1
  31. data/lib/measures/FindAndReplaceObjectNames/measure.rb +1 -1
  32. data/lib/measures/FindAndReplaceObjectNames/measure.xml +13 -12
  33. data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/LICENSE.md +1 -1
  34. data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.rb +3 -3
  35. data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.xml +28 -10
  36. data/lib/measures/RemoveHardAssignedConstructions/LICENSE.md +1 -1
  37. data/lib/measures/RemoveHardAssignedConstructions/measure.rb +1 -1
  38. data/lib/measures/RemoveHardAssignedConstructions/measure.xml +13 -12
  39. data/lib/measures/RenameSpaceSurfacesBasedonParentSpaceandOrientation/LICENSE.md +1 -1
  40. data/lib/measures/RenameSpaceSurfacesBasedonParentSpaceandOrientation/measure.rb +1 -1
  41. data/lib/measures/RenameSpaceSurfacesBasedonParentSpaceandOrientation/measure.xml +42 -11
  42. data/lib/measures/RotateBuilding/LICENSE.md +1 -1
  43. data/lib/measures/RotateBuilding/measure.rb +1 -1
  44. data/lib/measures/RotateBuilding/measure.xml +13 -12
  45. data/lib/measures/SetExtWallToGroundBoundaryConditionByStory/LICENSE.md +1 -1
  46. data/lib/measures/SetExtWallToGroundBoundaryConditionByStory/measure.rb +1 -1
  47. data/lib/measures/SetExtWallToGroundBoundaryConditionByStory/measure.xml +17 -10
  48. data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/LICENSE.md +1 -1
  49. data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/measure.rb +2 -2
  50. data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/measure.xml +13 -12
  51. data/lib/measures/SetInteriorWallsToSelectedConstruction/LICENSE.md +1 -1
  52. data/lib/measures/SetInteriorWallsToSelectedConstruction/measure.rb +2 -2
  53. data/lib/measures/SetInteriorWallsToSelectedConstruction/measure.xml +13 -12
  54. data/lib/measures/SetWindowToWallRatioByFacade/LICENSE.md +1 -1
  55. data/lib/measures/SetWindowToWallRatioByFacade/README.md +11 -0
  56. data/lib/measures/SetWindowToWallRatioByFacade/measure.rb +91 -143
  57. data/lib/measures/SetWindowToWallRatioByFacade/measure.xml +32 -11
  58. data/lib/measures/SetWindowToWallRatioByFacade/resources/functions.rb +176 -0
  59. data/lib/measures/SimplifyGeometryToSlicedBar/LICENSE.md +1 -1
  60. data/lib/measures/SimplifyGeometryToSlicedBar/measure.rb +9 -5
  61. data/lib/measures/SimplifyGeometryToSlicedBar/measure.xml +31 -13
  62. data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_cofee.rb +7 -5
  63. data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_geometry.rb +14 -9
  64. data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_helper_methods.rb +3 -5
  65. data/lib/measures/SpaceTypeAndConstructionSetWizard/LICENSE.md +1 -1
  66. data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.rb +2 -2
  67. data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.xml +63 -11
  68. data/lib/measures/SurfaceMatching/LICENSE.md +1 -1
  69. data/lib/measures/SurfaceMatching/measure.rb +2 -1
  70. data/lib/measures/SurfaceMatching/measure.xml +13 -12
  71. data/lib/measures/{BarAspectRatioSlicedBySpaceType → add_empd_material_properties}/LICENSE.md +1 -1
  72. data/lib/measures/add_empd_material_properties/README.md +116 -0
  73. data/lib/measures/{BarAspectRatioSlicedBySpaceType → add_empd_material_properties}/README.md.erb +0 -0
  74. data/lib/measures/add_empd_material_properties/docs/.gitkeep +0 -0
  75. data/lib/measures/add_empd_material_properties/measure.rb +247 -0
  76. data/lib/measures/add_empd_material_properties/measure.xml +201 -0
  77. data/lib/measures/blended_space_type_from_floor_area_ratios/LICENSE.md +1 -1
  78. data/lib/measures/blended_space_type_from_floor_area_ratios/measure.rb +5 -4
  79. data/lib/measures/blended_space_type_from_floor_area_ratios/measure.xml +5 -5
  80. data/lib/measures/blended_space_type_from_model/LICENSE.md +1 -1
  81. data/lib/measures/blended_space_type_from_model/{resources → docs}/replace_occupied_spaces_with_blended_space_type_design_doc.txt +0 -0
  82. data/lib/measures/blended_space_type_from_model/measure.rb +16 -4
  83. data/lib/measures/blended_space_type_from_model/measure.xml +16 -22
  84. data/lib/measures/clone_building_from_external_model/LICENSE.md +1 -1
  85. data/lib/measures/clone_building_from_external_model/measure.rb +1 -1
  86. data/lib/measures/clone_building_from_external_model/measure.xml +5 -5
  87. data/lib/measures/create_DOE_prototype_building/LICENSE.md +1 -1
  88. data/lib/measures/create_DOE_prototype_building/measure.rb +4 -3
  89. data/lib/measures/create_DOE_prototype_building/measure.xml +163 -27
  90. data/lib/measures/create_and_assign_thermal_zones_for_unassigned_spaces/LICENSE.md +1 -1
  91. data/lib/measures/create_and_assign_thermal_zones_for_unassigned_spaces/measure.rb +1 -1
  92. data/lib/measures/create_and_assign_thermal_zones_for_unassigned_spaces/measure.xml +5 -5
  93. data/lib/measures/create_bar_from_building_type_ratios/LICENSE.md +1 -1
  94. data/lib/measures/create_bar_from_building_type_ratios/README.md +109 -35
  95. data/lib/measures/create_bar_from_building_type_ratios/README.md.erb +54 -35
  96. data/lib/measures/create_bar_from_building_type_ratios/measure.rb +9 -4
  97. data/lib/measures/create_bar_from_building_type_ratios/measure.xml +124 -12
  98. data/lib/measures/create_bar_from_deer_building_type_ratios/LICENSE.md +1 -1
  99. data/lib/measures/create_bar_from_deer_building_type_ratios/README.md +301 -79
  100. data/lib/measures/create_bar_from_deer_building_type_ratios/README.md.erb +62 -79
  101. data/lib/measures/create_bar_from_deer_building_type_ratios/measure.rb +10 -5
  102. data/lib/measures/create_bar_from_deer_building_type_ratios/measure.xml +15 -59
  103. data/lib/measures/create_bar_from_doe_building_type_ratios/LICENSE.md +1 -1
  104. data/lib/measures/create_bar_from_doe_building_type_ratios/README.md +298 -57
  105. data/lib/measures/create_bar_from_doe_building_type_ratios/README.md.erb +54 -57
  106. data/lib/measures/create_bar_from_doe_building_type_ratios/measure.rb +10 -5
  107. data/lib/measures/create_bar_from_doe_building_type_ratios/measure.xml +122 -14
  108. data/lib/measures/create_bar_from_model/LICENSE.md +1 -1
  109. data/lib/measures/create_bar_from_model/measure.rb +11 -7
  110. data/lib/measures/create_bar_from_model/measure.xml +5 -5
  111. data/lib/measures/create_bar_from_space_type_ratios/LICENSE.md +27 -0
  112. data/lib/measures/create_bar_from_space_type_ratios/README.md +556 -0
  113. data/lib/measures/create_bar_from_space_type_ratios/README.md.erb +324 -0
  114. data/lib/measures/create_bar_from_space_type_ratios/docs/ar_05.png +0 -0
  115. data/lib/measures/create_bar_from_space_type_ratios/docs/ar_1.png +0 -0
  116. data/lib/measures/create_bar_from_space_type_ratios/docs/ar_2.png +0 -0
  117. data/lib/measures/create_bar_from_space_type_ratios/docs/bar_double_loaded.png +0 -0
  118. data/lib/measures/create_bar_from_space_type_ratios/docs/bar_single_core_perim.png +0 -0
  119. data/lib/measures/create_bar_from_space_type_ratios/docs/bar_sliced_indiv.png +0 -0
  120. data/lib/measures/create_bar_from_space_type_ratios/docs/bar_sliced_simple.png +0 -0
  121. data/lib/measures/create_bar_from_space_type_ratios/docs/basement.png +0 -0
  122. data/lib/measures/create_bar_from_space_type_ratios/docs/custom_height_false.png +0 -0
  123. data/lib/measures/create_bar_from_space_type_ratios/docs/custom_height_true.png +0 -0
  124. data/lib/measures/create_bar_from_space_type_ratios/docs/no_party_mult.png +0 -0
  125. data/lib/measures/create_bar_from_space_type_ratios/docs/party.png +0 -0
  126. data/lib/measures/create_bar_from_space_type_ratios/docs/party_multi.png +0 -0
  127. data/lib/measures/create_bar_from_space_type_ratios/docs/perim_mult_2010.png +0 -0
  128. data/lib/measures/create_bar_from_space_type_ratios/docs/perim_mult_2012.png +0 -0
  129. data/lib/measures/create_bar_from_space_type_ratios/docs/perim_mult_2020.png +0 -0
  130. data/lib/measures/create_bar_from_space_type_ratios/docs/sep_05.png +0 -0
  131. data/lib/measures/create_bar_from_space_type_ratios/docs/sep_10.png +0 -0
  132. data/lib/measures/create_bar_from_space_type_ratios/docs/sep_3.png +0 -0
  133. data/lib/measures/create_bar_from_space_type_ratios/docs/story_sort.png +0 -0
  134. data/lib/measures/create_bar_from_space_type_ratios/docs/wwr_custom.png +0 -0
  135. data/lib/measures/create_bar_from_space_type_ratios/measure.rb +314 -0
  136. data/lib/measures/create_bar_from_space_type_ratios/measure.xml +687 -0
  137. data/lib/measures/create_baseline_building/LICENSE.md +1 -1
  138. data/lib/measures/create_baseline_building/measure.rb +4 -3
  139. data/lib/measures/create_baseline_building/measure.xml +5 -5
  140. data/lib/measures/create_deer_prototype_building/LICENSE.md +1 -1
  141. data/lib/measures/create_deer_prototype_building/measure.rb +1 -1
  142. data/lib/measures/create_deer_prototype_building/measure.xml +6 -6
  143. data/lib/measures/create_deer_prototype_building/resources/deer_building_types.rb +1 -1
  144. data/lib/measures/create_parametric_schedules/LICENSE.md +1 -1
  145. data/lib/measures/create_parametric_schedules/measure.rb +16 -11
  146. data/lib/measures/create_parametric_schedules/measure.xml +5 -5
  147. data/lib/measures/create_typical_building_from_model/LICENSE.md +1 -1
  148. data/lib/measures/create_typical_building_from_model/README.md +82 -17
  149. data/lib/measures/create_typical_building_from_model/README.md.erb +36 -16
  150. data/lib/measures/create_typical_building_from_model/measure.rb +8 -6
  151. data/lib/measures/create_typical_building_from_model/measure.xml +59 -27
  152. data/lib/measures/create_typical_building_from_model/resources/Model.hvac.rb +8 -5
  153. data/lib/measures/create_typical_deer_building_from_model/LICENSE.md +1 -1
  154. data/lib/measures/create_typical_deer_building_from_model/README.md +173 -53
  155. data/lib/measures/create_typical_deer_building_from_model/README.md.erb +57 -53
  156. data/lib/measures/create_typical_deer_building_from_model/measure.rb +8 -3
  157. data/lib/measures/create_typical_deer_building_from_model/measure.xml +26 -26
  158. data/lib/measures/create_typical_deer_building_from_model/resources/Model.hvac.rb +8 -5
  159. data/lib/measures/create_typical_doe_building_from_model/LICENSE.md +1 -1
  160. data/lib/measures/create_typical_doe_building_from_model/README.md +182 -44
  161. data/lib/measures/create_typical_doe_building_from_model/README.md.erb +58 -44
  162. data/lib/measures/create_typical_doe_building_from_model/measure.rb +8 -3
  163. data/lib/measures/create_typical_doe_building_from_model/measure.xml +60 -28
  164. data/lib/measures/create_typical_doe_building_from_model/resources/Model.hvac.rb +8 -5
  165. data/lib/measures/deer_space_type_and_construction_set_wizard/LICENSE.md +1 -1
  166. data/lib/measures/deer_space_type_and_construction_set_wizard/measure.rb +2 -2
  167. data/lib/measures/deer_space_type_and_construction_set_wizard/measure.xml +17 -17
  168. data/lib/measures/find_and_replace_in_all_thermal_zone_names/LICENSE.md +1 -1
  169. data/lib/measures/find_and_replace_in_all_thermal_zone_names/measure.rb +1 -1
  170. data/lib/measures/find_and_replace_in_all_thermal_zone_names/measure.xml +8 -7
  171. data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/LICENSE.md +1 -1
  172. data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/measure.rb +3 -1
  173. data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/measure.xml +5 -5
  174. data/lib/measures/merge_floorspace_js_with_model/LICENSE.md +1 -1
  175. data/lib/measures/merge_floorspace_js_with_model/measure.rb +5 -2
  176. data/lib/measures/merge_floorspace_js_with_model/measure.xml +5 -5
  177. data/lib/measures/merge_spaces_from_external_file/LICENSE.md +1 -1
  178. data/lib/measures/merge_spaces_from_external_file/measure.rb +1 -1
  179. data/lib/measures/merge_spaces_from_external_file/measure.xml +6 -6
  180. data/lib/measures/merge_spaces_from_external_file/resources/ScheduleTranslator.rb +1 -1
  181. data/lib/measures/radiance_measure/LICENSE.md +1 -1
  182. data/lib/measures/radiance_measure/measure.rb +63 -57
  183. data/lib/measures/radiance_measure/measure.xml +11 -11
  184. data/lib/measures/radiant_slab_with_doas/LICENSE.md +1 -1
  185. data/lib/measures/radiant_slab_with_doas/measure.rb +9 -2
  186. data/lib/measures/radiant_slab_with_doas/measure.xml +10 -10
  187. data/lib/measures/replace_geometry_by_story/LICENSE.md +1 -1
  188. data/lib/measures/replace_geometry_by_story/measure.rb +5 -1
  189. data/lib/measures/replace_geometry_by_story/measure.xml +5 -5
  190. data/lib/measures/scale_geometry/LICENSE.md +1 -1
  191. data/lib/measures/scale_geometry/measure.rb +1 -1
  192. data/lib/measures/scale_geometry/measure.xml +5 -5
  193. data/lib/openstudio/model_articulation/extension.rb +1 -1
  194. data/lib/openstudio/model_articulation/version.rb +2 -2
  195. data/lib/openstudio/model_articulation.rb +1 -1
  196. data/lib/openstudio-model-articulation.rb +1 -1
  197. data/openstudio-model-articulation.gemspec +3 -3
  198. metadata +42 -16
  199. data/lib/measures/BarAspectRatioSlicedBySpaceType/README.md +0 -64
  200. data/lib/measures/BarAspectRatioSlicedBySpaceType/measure.rb +0 -184
  201. data/lib/measures/BarAspectRatioSlicedBySpaceType/measure.xml +0 -130
  202. data/lib/measures/BarAspectRatioSlicedBySpaceType/resources/os_lib_cofee.rb +0 -252
  203. data/lib/measures/blended_space_type_from_model/resources/os_lib_model_simplification.rb +0 -1049
@@ -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>
@@ -1,4 +1,4 @@
1
- OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC. All rights reserved.
1
+ OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
2
2
 
3
3
  Redistribution and use in source and binary forms, with or without modification, are permitted
4
4
  provided that the following conditions are met:
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -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>cbca1339-ac59-48e0-a9d7-e2bf03d28953</version_id>
7
- <version_modified>20200509T155939Z</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>
@@ -142,13 +142,13 @@
142
142
  <filename>LICENSE.md</filename>
143
143
  <filetype>md</filetype>
144
144
  <usage_type>license</usage_type>
145
- <checksum>E0468DD6</checksum>
145
+ <checksum>A21A3ED2</checksum>
146
146
  </file>
147
147
  <file>
148
148
  <filename>measure_test.rb</filename>
149
149
  <filetype>rb</filetype>
150
150
  <usage_type>test</usage_type>
151
- <checksum>40AA72B8</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>7DDF39F2</checksum>
162
+ <checksum>E1767BA6</checksum>
163
163
  </file>
164
164
  </files>
165
165
  </measure>
@@ -1,4 +1,4 @@
1
- OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC. All rights reserved.
1
+ OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC. All rights reserved.
2
2
 
3
3
  Redistribution and use in source and binary forms, with or without modification, are permitted
4
4
  provided that the following conditions are met:
@@ -1,5 +1,5 @@
1
1
  # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
2
+ # OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
3
3
  # All rights reserved.
4
4
  # Redistribution and use in source and binary forms, with or without
5
5
  # modification, are permitted provided that the following conditions are met:
@@ -38,7 +38,7 @@
38
38
 
39
39
  # load OpenStudio measure libraries from openstudio-extension gem
40
40
  require 'openstudio-extension'
41
- require 'openstudio/extension/core/os_lib_model_simplification.rb'
41
+ require 'openstudio/extension/core/os_lib_model_simplification'
42
42
 
43
43
  # start the measure
44
44
  class BlendedSpaceTypeFromModel < OpenStudio::Measure::ModelMeasure
@@ -96,7 +96,8 @@ class BlendedSpaceTypeFromModel < OpenStudio::Measure::ModelMeasure
96
96
 
97
97
  # divide the building up based on blend method
98
98
  space_type_hash = {}
99
- if blend_method == 'Building Type'
99
+ case blend_method
100
+ when 'Building Type'
100
101
 
101
102
  # loop through spaces and organize by building type
102
103
  model.getSpaceTypes.each do |space_type|
@@ -117,7 +118,7 @@ class BlendedSpaceTypeFromModel < OpenStudio::Measure::ModelMeasure
117
118
  space_type_hash[building_type] << space_type
118
119
  end
119
120
 
120
- elsif blend_method == 'Building Story'
121
+ when 'Building Story'
121
122
 
122
123
  # loop through building stories
123
124
  model.getBuildingStorys.sort.each do |story|
@@ -165,6 +166,7 @@ class BlendedSpaceTypeFromModel < OpenStudio::Measure::ModelMeasure
165
166
  # warn if spaces in model that are not on building story (re-assign to cloned space type)
166
167
  model.getSpaces.each do |space|
167
168
  next if space.buildingStory.is_initialized
169
+
168
170
  runner.registerWarning("#{space.name} is not assigned to a building story. It will be ignored.")
169
171
  end
170
172
 
@@ -176,13 +178,16 @@ class BlendedSpaceTypeFromModel < OpenStudio::Measure::ModelMeasure
176
178
  initial_cond_space_type_hash = {}
177
179
  model.getSpaceTypes.sort.each do |space_type|
178
180
  next if space_type.floorArea == 0
181
+
179
182
  floor_area_si = 0
180
183
  # loop through spaces so I can skip if not included in floor area
181
184
  space_type.spaces.each do |space|
182
185
  next if !space.partofTotalFloorArea
186
+
183
187
  floor_area_si += space.floorArea * space.multiplier
184
188
  end
185
189
  next if floor_area_si == 0
190
+
186
191
  initial_cond_space_type_hash[space_type] = floor_area_si
187
192
  end
188
193
  runner.registerInitialCondition("The initial building uses #{initial_cond_space_type_hash.size} spaces types.")
@@ -195,13 +200,20 @@ class BlendedSpaceTypeFromModel < OpenStudio::Measure::ModelMeasure
195
200
  final_cond_space_type_hash = {}
196
201
  model.getSpaceTypes.sort.each do |space_type|
197
202
  next if space_type.floorArea == 0
203
+
204
+ # assign blend out building and space type standards (after update in ext gem can be removed here)
205
+ space_type.setStandardsBuildingType('Blend')
206
+ space_type.setStandardsSpaceType('Blend')
207
+
198
208
  floor_area_si = 0
199
209
  # loop through spaces so I can skip if not included in floor area
200
210
  space_type.spaces.each do |space|
201
211
  next if !space.partofTotalFloorArea
212
+
202
213
  floor_area_si += space.floorArea * space.multiplier
203
214
  end
204
215
  next if floor_area_si == 0
216
+
205
217
  final_cond_space_type_hash[space_type] = floor_area_si
206
218
  end
207
219
  runner.registerFinalCondition("The final building uses #{final_cond_space_type_hash.size} spaces types.")