openstudio-model-articulation 0.2.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (202) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -1
  3. data/CHANGELOG.md +36 -19
  4. data/Gemfile +6 -0
  5. data/Jenkinsfile +1 -0
  6. data/LICENSE.md +1 -1
  7. data/README.md +14 -0
  8. data/Rakefile +5 -7
  9. data/doc_templates/LICENSE.md +1 -1
  10. data/doc_templates/copyright_erb.txt +1 -1
  11. data/doc_templates/copyright_js.txt +1 -1
  12. data/doc_templates/copyright_ruby.txt +1 -1
  13. data/lib/measures/AssignConstructionSetToBuilding/LICENSE.md +1 -1
  14. data/lib/measures/AssignConstructionSetToBuilding/measure.rb +1 -3
  15. data/lib/measures/AssignConstructionSetToBuilding/measure.xml +11 -10
  16. data/lib/measures/AssignSpaceTypeBySpaceName/LICENSE.md +1 -1
  17. data/lib/measures/AssignSpaceTypeBySpaceName/measure.rb +1 -3
  18. data/lib/measures/AssignSpaceTypeBySpaceName/measure.xml +11 -10
  19. data/lib/measures/AssignSpaceTypeToBuilding/LICENSE.md +1 -1
  20. data/lib/measures/AssignSpaceTypeToBuilding/measure.rb +1 -3
  21. data/lib/measures/AssignSpaceTypeToBuilding/measure.xml +11 -10
  22. data/lib/measures/AssignSpacesToStories/LICENSE.md +1 -1
  23. data/lib/measures/AssignSpacesToStories/measure.rb +1 -3
  24. data/lib/measures/AssignSpacesToStories/measure.xml +9 -8
  25. data/lib/measures/BarAspectRatioStudy/LICENSE.md +1 -1
  26. data/lib/measures/BarAspectRatioStudy/measure.rb +1 -3
  27. data/lib/measures/BarAspectRatioStudy/measure.xml +8 -7
  28. data/lib/measures/CleanupSpaceOrigins/LICENSE.md +1 -1
  29. data/lib/measures/CleanupSpaceOrigins/measure.rb +1 -3
  30. data/lib/measures/CleanupSpaceOrigins/measure.xml +9 -8
  31. data/lib/measures/FindAndReplaceObjectNames/LICENSE.md +1 -1
  32. data/lib/measures/FindAndReplaceObjectNames/measure.rb +1 -3
  33. data/lib/measures/FindAndReplaceObjectNames/measure.xml +8 -7
  34. data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/LICENSE.md +1 -1
  35. data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.rb +1 -3
  36. data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.xml +10 -10
  37. data/lib/measures/RemoveHardAssignedConstructions/LICENSE.md +1 -1
  38. data/lib/measures/RemoveHardAssignedConstructions/measure.rb +1 -3
  39. data/lib/measures/RemoveHardAssignedConstructions/measure.xml +8 -7
  40. data/lib/measures/RenameSpaceSurfacesBasedonParentSpaceandOrientation/LICENSE.md +1 -1
  41. data/lib/measures/RenameSpaceSurfacesBasedonParentSpaceandOrientation/measure.rb +1 -3
  42. data/lib/measures/RenameSpaceSurfacesBasedonParentSpaceandOrientation/measure.xml +9 -8
  43. data/lib/measures/RotateBuilding/LICENSE.md +1 -1
  44. data/lib/measures/RotateBuilding/measure.rb +1 -3
  45. data/lib/measures/RotateBuilding/measure.xml +8 -7
  46. data/lib/measures/SetExtWallToGroundBoundaryConditionByStory/LICENSE.md +1 -1
  47. data/lib/measures/SetExtWallToGroundBoundaryConditionByStory/measure.rb +1 -3
  48. data/lib/measures/SetExtWallToGroundBoundaryConditionByStory/measure.xml +8 -7
  49. data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/LICENSE.md +1 -1
  50. data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/measure.rb +1 -3
  51. data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/measure.xml +8 -7
  52. data/lib/measures/SetInteriorWallsToSelectedConstruction/LICENSE.md +1 -1
  53. data/lib/measures/SetInteriorWallsToSelectedConstruction/measure.rb +1 -3
  54. data/lib/measures/SetInteriorWallsToSelectedConstruction/measure.xml +8 -7
  55. data/lib/measures/SetWindowToWallRatioByFacade/LICENSE.md +1 -1
  56. data/lib/measures/SetWindowToWallRatioByFacade/measure.rb +11 -6
  57. data/lib/measures/SetWindowToWallRatioByFacade/measure.xml +11 -5
  58. data/lib/measures/SimplifyGeometryToSlicedBar/LICENSE.md +1 -1
  59. data/lib/measures/SimplifyGeometryToSlicedBar/measure.rb +1 -3
  60. data/lib/measures/SimplifyGeometryToSlicedBar/measure.xml +8 -8
  61. data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_cofee.rb +1 -3
  62. data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_geometry.rb +1 -3
  63. data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_helper_methods.rb +2 -4
  64. data/lib/measures/SpaceTypeAndConstructionSetWizard/LICENSE.md +1 -1
  65. data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.rb +1 -3
  66. data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.xml +63 -11
  67. data/lib/measures/SurfaceMatching/LICENSE.md +1 -1
  68. data/lib/measures/SurfaceMatching/measure.rb +1 -3
  69. data/lib/measures/SurfaceMatching/measure.xml +8 -7
  70. data/lib/measures/{BarAspectRatioSlicedBySpaceType → add_empd_material_properties}/LICENSE.md +1 -1
  71. data/lib/measures/add_empd_material_properties/README.md +116 -0
  72. data/lib/measures/{BarAspectRatioSlicedBySpaceType → add_empd_material_properties}/README.md.erb +0 -0
  73. data/lib/measures/add_empd_material_properties/docs/.gitkeep +0 -0
  74. data/lib/measures/add_empd_material_properties/measure.rb +247 -0
  75. data/lib/measures/add_empd_material_properties/measure.xml +201 -0
  76. data/lib/measures/blended_space_type_from_floor_area_ratios/LICENSE.md +1 -1
  77. data/lib/measures/blended_space_type_from_floor_area_ratios/measure.rb +1 -3
  78. data/lib/measures/blended_space_type_from_floor_area_ratios/measure.xml +5 -5
  79. data/lib/measures/blended_space_type_from_model/LICENSE.md +1 -1
  80. data/lib/measures/blended_space_type_from_model/measure.rb +1 -3
  81. data/lib/measures/blended_space_type_from_model/measure.xml +6 -6
  82. data/lib/measures/blended_space_type_from_model/resources/os_lib_model_simplification.rb +1 -3
  83. data/lib/measures/clone_building_from_external_model/LICENSE.md +1 -1
  84. data/lib/measures/clone_building_from_external_model/measure.rb +1 -3
  85. data/lib/measures/clone_building_from_external_model/measure.xml +5 -5
  86. data/lib/measures/create_DOE_prototype_building/LICENSE.md +1 -1
  87. data/lib/measures/create_DOE_prototype_building/measure.rb +3 -4
  88. data/lib/measures/create_DOE_prototype_building/measure.xml +509 -377
  89. data/lib/measures/create_and_assign_thermal_zones_for_unassigned_spaces/LICENSE.md +1 -1
  90. data/lib/measures/create_and_assign_thermal_zones_for_unassigned_spaces/measure.rb +1 -3
  91. data/lib/measures/create_and_assign_thermal_zones_for_unassigned_spaces/measure.xml +5 -5
  92. data/lib/measures/create_bar_from_building_type_ratios/LICENSE.md +1 -1
  93. data/lib/measures/create_bar_from_building_type_ratios/README.md +109 -35
  94. data/lib/measures/create_bar_from_building_type_ratios/README.md.erb +54 -35
  95. data/lib/measures/create_bar_from_building_type_ratios/measure.rb +6 -3
  96. data/lib/measures/create_bar_from_building_type_ratios/measure.xml +129 -17
  97. data/lib/measures/create_bar_from_deer_building_type_ratios/LICENSE.md +1 -1
  98. data/lib/measures/create_bar_from_deer_building_type_ratios/README.md +301 -79
  99. data/lib/measures/create_bar_from_deer_building_type_ratios/README.md.erb +62 -79
  100. data/lib/measures/create_bar_from_deer_building_type_ratios/measure.rb +7 -4
  101. data/lib/measures/create_bar_from_deer_building_type_ratios/measure.xml +20 -64
  102. data/lib/measures/create_bar_from_doe_building_type_ratios/LICENSE.md +1 -1
  103. data/lib/measures/create_bar_from_doe_building_type_ratios/README.md +298 -57
  104. data/lib/measures/create_bar_from_doe_building_type_ratios/README.md.erb +54 -57
  105. data/lib/measures/create_bar_from_doe_building_type_ratios/measure.rb +7 -4
  106. data/lib/measures/create_bar_from_doe_building_type_ratios/measure.xml +127 -19
  107. data/lib/measures/create_bar_from_model/LICENSE.md +1 -1
  108. data/lib/measures/create_bar_from_model/measure.rb +1 -3
  109. data/lib/measures/create_bar_from_model/measure.xml +5 -5
  110. data/lib/measures/create_bar_from_space_type_ratios/LICENSE.md +27 -0
  111. data/lib/measures/create_bar_from_space_type_ratios/README.md +556 -0
  112. data/lib/measures/create_bar_from_space_type_ratios/README.md.erb +324 -0
  113. data/lib/measures/create_bar_from_space_type_ratios/docs/ar_05.png +0 -0
  114. data/lib/measures/create_bar_from_space_type_ratios/docs/ar_1.png +0 -0
  115. data/lib/measures/create_bar_from_space_type_ratios/docs/ar_2.png +0 -0
  116. data/lib/measures/create_bar_from_space_type_ratios/docs/bar_double_loaded.png +0 -0
  117. data/lib/measures/create_bar_from_space_type_ratios/docs/bar_single_core_perim.png +0 -0
  118. data/lib/measures/create_bar_from_space_type_ratios/docs/bar_sliced_indiv.png +0 -0
  119. data/lib/measures/create_bar_from_space_type_ratios/docs/bar_sliced_simple.png +0 -0
  120. data/lib/measures/create_bar_from_space_type_ratios/docs/basement.png +0 -0
  121. data/lib/measures/create_bar_from_space_type_ratios/docs/custom_height_false.png +0 -0
  122. data/lib/measures/create_bar_from_space_type_ratios/docs/custom_height_true.png +0 -0
  123. data/lib/measures/create_bar_from_space_type_ratios/docs/no_party_mult.png +0 -0
  124. data/lib/measures/create_bar_from_space_type_ratios/docs/party.png +0 -0
  125. data/lib/measures/create_bar_from_space_type_ratios/docs/party_multi.png +0 -0
  126. data/lib/measures/create_bar_from_space_type_ratios/docs/perim_mult_2010.png +0 -0
  127. data/lib/measures/create_bar_from_space_type_ratios/docs/perim_mult_2012.png +0 -0
  128. data/lib/measures/create_bar_from_space_type_ratios/docs/perim_mult_2020.png +0 -0
  129. data/lib/measures/create_bar_from_space_type_ratios/docs/sep_05.png +0 -0
  130. data/lib/measures/create_bar_from_space_type_ratios/docs/sep_10.png +0 -0
  131. data/lib/measures/create_bar_from_space_type_ratios/docs/sep_3.png +0 -0
  132. data/lib/measures/create_bar_from_space_type_ratios/docs/story_sort.png +0 -0
  133. data/lib/measures/create_bar_from_space_type_ratios/docs/wwr_custom.png +0 -0
  134. data/lib/measures/create_bar_from_space_type_ratios/measure.rb +314 -0
  135. data/lib/measures/create_bar_from_space_type_ratios/measure.xml +687 -0
  136. data/lib/measures/create_baseline_building/LICENSE.md +1 -1
  137. data/lib/measures/create_baseline_building/measure.rb +1 -1
  138. data/lib/measures/create_baseline_building/measure.xml +5 -5
  139. data/lib/measures/create_deer_prototype_building/LICENSE.md +1 -1
  140. data/lib/measures/create_deer_prototype_building/measure.rb +1 -3
  141. data/lib/measures/create_deer_prototype_building/measure.xml +6 -6
  142. data/lib/measures/create_deer_prototype_building/resources/deer_building_types.rb +1 -3
  143. data/lib/measures/create_parametric_schedules/LICENSE.md +1 -1
  144. data/lib/measures/create_parametric_schedules/measure.rb +1 -3
  145. data/lib/measures/create_parametric_schedules/measure.xml +5 -5
  146. data/lib/measures/create_typical_building_from_model/LICENSE.md +1 -1
  147. data/lib/measures/create_typical_building_from_model/README.md +82 -17
  148. data/lib/measures/create_typical_building_from_model/README.md.erb +36 -16
  149. data/lib/measures/create_typical_building_from_model/measure.rb +7 -7
  150. data/lib/measures/create_typical_building_from_model/measure.xml +62 -30
  151. data/lib/measures/create_typical_building_from_model/resources/Model.hvac.rb +7 -6
  152. data/lib/measures/create_typical_deer_building_from_model/LICENSE.md +1 -1
  153. data/lib/measures/create_typical_deer_building_from_model/README.md +173 -53
  154. data/lib/measures/create_typical_deer_building_from_model/README.md.erb +57 -53
  155. data/lib/measures/create_typical_deer_building_from_model/measure.rb +7 -4
  156. data/lib/measures/create_typical_deer_building_from_model/measure.xml +29 -29
  157. data/lib/measures/create_typical_deer_building_from_model/resources/Model.hvac.rb +7 -6
  158. data/lib/measures/create_typical_doe_building_from_model/LICENSE.md +1 -1
  159. data/lib/measures/create_typical_doe_building_from_model/README.md +182 -44
  160. data/lib/measures/create_typical_doe_building_from_model/README.md.erb +58 -44
  161. data/lib/measures/create_typical_doe_building_from_model/measure.rb +7 -4
  162. data/lib/measures/create_typical_doe_building_from_model/measure.xml +56 -24
  163. data/lib/measures/create_typical_doe_building_from_model/resources/Model.hvac.rb +7 -6
  164. data/lib/measures/deer_space_type_and_construction_set_wizard/LICENSE.md +1 -1
  165. data/lib/measures/deer_space_type_and_construction_set_wizard/measure.rb +1 -3
  166. data/lib/measures/deer_space_type_and_construction_set_wizard/measure.xml +17 -17
  167. data/lib/measures/find_and_replace_in_all_thermal_zone_names/LICENSE.md +1 -1
  168. data/lib/measures/find_and_replace_in_all_thermal_zone_names/measure.rb +1 -3
  169. data/lib/measures/find_and_replace_in_all_thermal_zone_names/measure.xml +8 -7
  170. data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/LICENSE.md +1 -1
  171. data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/measure.rb +1 -3
  172. data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/measure.xml +5 -5
  173. data/lib/measures/merge_floorspace_js_with_model/LICENSE.md +1 -1
  174. data/lib/measures/merge_floorspace_js_with_model/measure.rb +1 -3
  175. data/lib/measures/merge_floorspace_js_with_model/measure.xml +5 -5
  176. data/lib/measures/merge_spaces_from_external_file/LICENSE.md +1 -1
  177. data/lib/measures/merge_spaces_from_external_file/measure.rb +1 -3
  178. data/lib/measures/merge_spaces_from_external_file/measure.xml +6 -6
  179. data/lib/measures/merge_spaces_from_external_file/resources/ScheduleTranslator.rb +5 -7
  180. data/lib/measures/radiance_measure/LICENSE.md +1 -1
  181. data/lib/measures/radiance_measure/measure.rb +2 -4
  182. data/lib/measures/radiance_measure/measure.xml +11 -11
  183. data/lib/measures/radiant_slab_with_doas/LICENSE.md +1 -1
  184. data/lib/measures/radiant_slab_with_doas/measure.rb +6 -4
  185. data/lib/measures/radiant_slab_with_doas/measure.xml +10 -10
  186. data/lib/measures/replace_geometry_by_story/LICENSE.md +1 -1
  187. data/lib/measures/replace_geometry_by_story/measure.rb +1 -3
  188. data/lib/measures/replace_geometry_by_story/measure.xml +5 -5
  189. data/lib/measures/scale_geometry/LICENSE.md +1 -1
  190. data/lib/measures/scale_geometry/measure.rb +1 -3
  191. data/lib/measures/scale_geometry/measure.xml +5 -5
  192. data/lib/openstudio/model_articulation/extension.rb +1 -1
  193. data/lib/openstudio/model_articulation/version.rb +2 -2
  194. data/lib/openstudio/model_articulation.rb +1 -1
  195. data/lib/openstudio-model-articulation.rb +1 -1
  196. data/openstudio-model-articulation.gemspec +3 -3
  197. metadata +44 -20
  198. data/lib/measures/.rubocop.yml +0 -5
  199. data/lib/measures/BarAspectRatioSlicedBySpaceType/README.md +0 -64
  200. data/lib/measures/BarAspectRatioSlicedBySpaceType/measure.rb +0 -186
  201. data/lib/measures/BarAspectRatioSlicedBySpaceType/measure.xml +0 -130
  202. data/lib/measures/BarAspectRatioSlicedBySpaceType/resources/os_lib_cofee.rb +0 -254
@@ -1,186 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # *******************************************************************************
4
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
5
- # All rights reserved.
6
- # Redistribution and use in source and binary forms, with or without
7
- # modification, are permitted provided that the following conditions are met:
8
- #
9
- # (1) Redistributions of source code must retain the above copyright notice,
10
- # this list of conditions and the following disclaimer.
11
- #
12
- # (2) Redistributions in binary form must reproduce the above copyright notice,
13
- # this list of conditions and the following disclaimer in the documentation
14
- # and/or other materials provided with the distribution.
15
- #
16
- # (3) Neither the name of the copyright holder nor the names of any contributors
17
- # may be used to endorse or promote products derived from this software without
18
- # specific prior written permission from the respective party.
19
- #
20
- # (4) Other than as required in clauses (1) and (2), distributions in any form
21
- # of modifications or other derivative works may not use the "OpenStudio"
22
- # trademark, "OS", "os", or any other confusingly similar designation without
23
- # specific prior written permission from Alliance for Sustainable Energy, LLC.
24
- #
25
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
26
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
27
- # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
29
- # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
30
- # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
32
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
34
- # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35
- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
- # *******************************************************************************
37
-
38
- # see the URL below for information on how to write OpenStudio measures
39
- # http://openstudio.nrel.gov/openstudio-measure-writing-guide
40
-
41
- # see the URL below for information on using life cycle cost objects in OpenStudio
42
- # http://openstudio.nrel.gov/openstudio-life-cycle-examples
43
-
44
- # see the URL below for access to C++ documentation on model objects (click on "model" in the main window to view model objects)
45
- # http://openstudio.nrel.gov/sites/openstudio.nrel.gov/files/nv_data/cpp_documentation_it/model/html/namespaces.html
46
-
47
- # load OpenStudio measure libraries from openstudio-extension gem
48
- require 'openstudio-extension'
49
- require 'openstudio/extension/core/os_lib_helper_methods'
50
- require 'openstudio/extension/core/os_lib_geometry.rb'
51
-
52
- # load OpenStudio measure libraries
53
- require "#{File.dirname(__FILE__)}/resources/os_lib_cofee"
54
-
55
- # start the measure
56
- class BarAspectRatioSlicedBySpaceType < OpenStudio::Measure::ModelMeasure
57
- # define the name that a user will see, this method may be deprecated as
58
- # the display name in PAT comes from the name field in measure.xml
59
- def name
60
- return 'BarAspectRatioSlicedBySpaceType'
61
- end
62
-
63
- # define the arguments that the user will input
64
- def arguments(model)
65
- args = OpenStudio::Measure::OSArgumentVector.new
66
-
67
- # make an argument for total floor area
68
- total_bldg_area_ip = OpenStudio::Measure::OSArgument.makeDoubleArgument('total_bldg_area_ip', true)
69
- total_bldg_area_ip.setDisplayName('Total Building Floor Area (ft^2).')
70
- total_bldg_area_ip.setDefaultValue(10000.0)
71
- args << total_bldg_area_ip
72
-
73
- # make an argument for aspect ratio
74
- ns_to_ew_ratio = OpenStudio::Measure::OSArgument.makeDoubleArgument('ns_to_ew_ratio', true)
75
- ns_to_ew_ratio.setDisplayName('Ratio of North/South Facade Length Relative to East/West Facade Length.')
76
- ns_to_ew_ratio.setDefaultValue(2.0)
77
- args << ns_to_ew_ratio
78
-
79
- # make an argument for number of floors
80
- num_floors = OpenStudio::Measure::OSArgument.makeIntegerArgument('num_floors', true)
81
- num_floors.setDisplayName('Number of Floors.')
82
- num_floors.setDefaultValue(2)
83
- args << num_floors
84
-
85
- # make an argument for floor height
86
- floor_to_floor_height_ip = OpenStudio::Measure::OSArgument.makeDoubleArgument('floor_to_floor_height_ip', true)
87
- floor_to_floor_height_ip.setDisplayName('Floor to Floor Height (ft).')
88
- floor_to_floor_height_ip.setDefaultValue(10.0)
89
- args << floor_to_floor_height_ip
90
-
91
- # make an argument for the meter name
92
- spaceTypeHashString = OpenStudio::Measure::OSArgument.makeStringArgument('spaceTypeHashString', true)
93
- spaceTypeHashString.setDisplayName('Hash of Space Types with Name as Key and Fraction as value.')
94
- args << spaceTypeHashString
95
-
96
- return args
97
- end
98
-
99
- # define what happens when the measure is run
100
- def run(model, runner, user_arguments)
101
- super(model, runner, user_arguments)
102
-
103
- # use the built-in error checking
104
- if !runner.validateUserArguments(arguments(model), user_arguments)
105
- return false
106
- end
107
-
108
- # assign the user inputs to variables
109
- total_bldg_area_ip = runner.getDoubleArgumentValue('total_bldg_area_ip', user_arguments)
110
- ns_to_ew_ratio = runner.getDoubleArgumentValue('ns_to_ew_ratio', user_arguments)
111
- num_floors = runner.getIntegerArgumentValue('num_floors', user_arguments)
112
- floor_to_floor_height_ip = runner.getDoubleArgumentValue('floor_to_floor_height_ip', user_arguments)
113
- spaceTypeHashString = runner.getStringArgumentValue('spaceTypeHashString', user_arguments)
114
-
115
- # test for positive inputs
116
- if total_bldg_area_ip <= 0
117
- runner.registerError('Enter a total building area greater than 0.')
118
- end
119
- if ns_to_ew_ratio <= 0
120
- runner.registerError('Enter ratio grater than 0.')
121
- end
122
- if num_floors <= 0
123
- runner.registerError('Enter a number of stories 1 or greater.')
124
- end
125
- if floor_to_floor_height_ip <= 0
126
- runner.registerError('Enter a positive floor height.')
127
- end
128
- if 1 == 1
129
- # TODO: - add test for spaceTypeHashString argument
130
- end
131
-
132
- # calculate needed variables
133
- total_bldg_area_si = OpenStudio.convert(total_bldg_area_ip, 'ft^2', 'm^2').get
134
- footprint_ip = total_bldg_area_ip / num_floors
135
- footprint_si = OpenStudio.convert(footprint_ip, 'ft^2', 'm^2').get
136
- floor_to_floor_height = OpenStudio.convert(floor_to_floor_height_ip, 'ft', 'm').get
137
-
138
- # variables from original rectangle script not exposed in this measure
139
- width = Math.sqrt(footprint_si / ns_to_ew_ratio)
140
- length = footprint_si / width
141
-
142
- # reporting initial condition of model
143
- starting_spaces = model.getSpaces
144
- runner.registerInitialCondition("The building started with #{starting_spaces.size} spaces.")
145
-
146
- # convert string argument to hash
147
- spaceTypeHashName = {}
148
- spaceTypeHashString[1..-2].split(/, /).each { |entry| entryMap = entry.split(/=>/); value_str = entryMap[1]; spaceTypeHashName[entryMap[0].strip[1..-1].to_s] = value_str.nil? ? '' : value_str.strip[1..-2].to_f }
149
-
150
- # sum of hash values
151
- hashValues = 0
152
-
153
- spaceTypeHash = {}
154
- model.getSpaceTypes.each do |spaceType|
155
- if spaceTypeHashName.include?(spaceType.name.to_s)
156
- spaceTypeHash[spaceType] = spaceTypeHashName[spaceType.name.to_s] * total_bldg_area_si # converting fractional value to area value to pass into method
157
- hashValues += spaceTypeHashName[spaceType.name.to_s]
158
- end
159
- end
160
-
161
- if hashValues != 1.0
162
- runner.registerWarning('Fractional hash values do not add up to one. Resulting geometry may not have expected area.')
163
- end
164
-
165
- # see which path to take
166
- midFloorMultiplier = 1 # show as 1 even on 1 and 2 story buildings where there is no mid floor, in addition to 3 story building
167
- if num_floors > 3
168
- # use floor multiplier version. Set mid floor multiplier, use adibatic floors/ceilings and set constructions, raise up building
169
- midFloorMultiplier = num_floors - 2
170
- end
171
-
172
- # run method to create envelope
173
- bar_AspectRatio = OsLib_Cofee.createBar(model, spaceTypeHash, length, width, total_bldg_area_si, num_floors, midFloorMultiplier, 0.0, 0.0, length, width, 0.0, floor_to_floor_height * num_floors, true)
174
-
175
- puts "building area #{model.getBuilding.floorArea}"
176
-
177
- # reporting final condition of model
178
- finishing_spaces = model.getSpaces
179
- runner.registerFinalCondition("The building finished with #{finishing_spaces.size} spaces.")
180
-
181
- return true
182
- end
183
- end
184
-
185
- # this allows the measure to be use by the application
186
- BarAspectRatioSlicedBySpaceType.new.registerWithApplication
@@ -1,130 +0,0 @@
1
- <?xml version="1.0"?>
2
- <measure>
3
- <schema_version>3.0</schema_version>
4
- <name>bar_aspect_ratio_sliced_by_space_type</name>
5
- <uid>3e988765-9673-46f8-9b65-99d5b86c2b22</uid>
6
- <version_id>ae664185-7251-4abb-b2e0-5a7c1893e519</version_id>
7
- <version_modified>20200509T155942Z</version_modified>
8
- <xml_checksum>49BEF039</xml_checksum>
9
- <class_name>BarAspectRatioSlicedBySpaceType</class_name>
10
- <display_name>BarAspectRatioSlicedBySpaceType</display_name>
11
- <description>This measure will create a building envelope based on a target floor area, aspect ratio, floor to floor height, and a collectin of space types and fraction of building using that space type.</description>
12
- <modeler_description>This is based on the SketchUp Plugin user script to create a rectangular building, but just uses different inputs. The resulting building will have a core and perimeter zoning, unless it is too small, in which case eac floor will have a single zone. This uses a floor multiplier for buildings taller than three stories. Below is an example of what the space tyep hash might look like. Sum of hash values should equal 1.0. "{:189.1-2009 - Office - Corridor - CZ1-3 =&gt; '0.3', :189.1-2009 - Office - Conference - CZ1-3 =&gt; '0.2', :189.1-2009 - Office - ClosedOffice - CZ1-3 =&gt; '0.5' }"</modeler_description>
13
- <arguments>
14
- <argument>
15
- <name>total_bldg_area_ip</name>
16
- <display_name>Total Building Floor Area (ft^2).</display_name>
17
- <type>Double</type>
18
- <required>true</required>
19
- <model_dependent>false</model_dependent>
20
- <default_value>10000</default_value>
21
- </argument>
22
- <argument>
23
- <name>ns_to_ew_ratio</name>
24
- <display_name>Ratio of North/South Facade Length Relative to East/West Facade Length.</display_name>
25
- <type>Double</type>
26
- <required>true</required>
27
- <model_dependent>false</model_dependent>
28
- <default_value>2</default_value>
29
- </argument>
30
- <argument>
31
- <name>num_floors</name>
32
- <display_name>Number of Floors.</display_name>
33
- <type>Integer</type>
34
- <required>true</required>
35
- <model_dependent>false</model_dependent>
36
- <default_value>2</default_value>
37
- </argument>
38
- <argument>
39
- <name>floor_to_floor_height_ip</name>
40
- <display_name>Floor to Floor Height (ft).</display_name>
41
- <type>Double</type>
42
- <required>true</required>
43
- <model_dependent>false</model_dependent>
44
- <default_value>10</default_value>
45
- </argument>
46
- <argument>
47
- <name>spaceTypeHashString</name>
48
- <display_name>Hash of Space Types with Name as Key and Fraction as value.</display_name>
49
- <type>String</type>
50
- <required>true</required>
51
- <model_dependent>false</model_dependent>
52
- </argument>
53
- </arguments>
54
- <outputs />
55
- <provenances />
56
- <tags>
57
- <tag>Envelope.Form</tag>
58
- </tags>
59
- <attributes>
60
- <attribute>
61
- <name>Measure Type</name>
62
- <value>ModelMeasure</value>
63
- <datatype>string</datatype>
64
- </attribute>
65
- <attribute>
66
- <name>Measure Function</name>
67
- <value>Measure</value>
68
- <datatype>string</datatype>
69
- </attribute>
70
- <attribute>
71
- <name>Requires EnergyPlus Results</name>
72
- <value>false</value>
73
- <datatype>boolean</datatype>
74
- </attribute>
75
- <attribute>
76
- <name>Uses SketchUp API</name>
77
- <value>false</value>
78
- <datatype>boolean</datatype>
79
- </attribute>
80
- </attributes>
81
- <files>
82
- <file>
83
- <filename>Untitled.osm</filename>
84
- <filetype>osm</filetype>
85
- <usage_type>test</usage_type>
86
- <checksum>3FDFD18A</checksum>
87
- </file>
88
- <file>
89
- <filename>README.md</filename>
90
- <filetype>md</filetype>
91
- <usage_type>readme</usage_type>
92
- <checksum>C0E5A870</checksum>
93
- </file>
94
- <file>
95
- <filename>README.md.erb</filename>
96
- <filetype>erb</filetype>
97
- <usage_type>readmeerb</usage_type>
98
- <checksum>703C9964</checksum>
99
- </file>
100
- <file>
101
- <filename>os_lib_cofee.rb</filename>
102
- <filetype>rb</filetype>
103
- <usage_type>resource</usage_type>
104
- <checksum>3C10BF38</checksum>
105
- </file>
106
- <file>
107
- <filename>LICENSE.md</filename>
108
- <filetype>md</filetype>
109
- <usage_type>license</usage_type>
110
- <checksum>E0468DD6</checksum>
111
- </file>
112
- <file>
113
- <filename>BarAspectRatioSlicedBySpaceType_Test.rb</filename>
114
- <filetype>rb</filetype>
115
- <usage_type>test</usage_type>
116
- <checksum>9F6868DA</checksum>
117
- </file>
118
- <file>
119
- <version>
120
- <software_program>OpenStudio</software_program>
121
- <identifier>2.0.0</identifier>
122
- <min_compatible>2.8.0</min_compatible>
123
- </version>
124
- <filename>measure.rb</filename>
125
- <filetype>rb</filetype>
126
- <usage_type>script</usage_type>
127
- <checksum>11E11D57</checksum>
128
- </file>
129
- </files>
130
- </measure>
@@ -1,254 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # *******************************************************************************
4
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
5
- # All rights reserved.
6
- # Redistribution and use in source and binary forms, with or without
7
- # modification, are permitted provided that the following conditions are met:
8
- #
9
- # (1) Redistributions of source code must retain the above copyright notice,
10
- # this list of conditions and the following disclaimer.
11
- #
12
- # (2) Redistributions in binary form must reproduce the above copyright notice,
13
- # this list of conditions and the following disclaimer in the documentation
14
- # and/or other materials provided with the distribution.
15
- #
16
- # (3) Neither the name of the copyright holder nor the names of any contributors
17
- # may be used to endorse or promote products derived from this software without
18
- # specific prior written permission from the respective party.
19
- #
20
- # (4) Other than as required in clauses (1) and (2), distributions in any form
21
- # of modifications or other derivative works may not use the "OpenStudio"
22
- # trademark, "OS", "os", or any other confusingly similar designation without
23
- # specific prior written permission from Alliance for Sustainable Energy, LLC.
24
- #
25
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
26
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
27
- # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
29
- # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
30
- # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
32
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
34
- # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35
- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
- # *******************************************************************************
37
-
38
- module OsLib_Cofee
39
- # create def to use later to make bar
40
- def self.createBar(model, spaceTypeHash, lengthXTarget, lengthYTarget, totalFloorArea, numStories, midFloorMultiplier, xmin, ymin, lengthX, lengthY, zmin, zmax, endZones)
41
- # floor to floor height
42
- floor_to_floor_height = (zmax - zmin) / numStories
43
-
44
- # perimeter depth
45
- perimeterDepth = OpenStudio.convert(12, 'ft', 'm').get
46
- perimeterBufferFactor = 1.5 # this is a margin below which I won't bother splitting the two largest spaces
47
-
48
- # create an array to control sort order of spaces in bar
49
- customSpaceTypeBar = []
50
- counter = 0
51
- spaceTypeHash.sort_by { |key, value| value }.reverse.each do |k, v|
52
- next if v == 0 # this line adds support for fractional values of 0
53
- if counter == 1
54
- if (lengthXTarget * (v / totalFloorArea) > perimeterDepth * perimeterBufferFactor) && endZones
55
- customSpaceTypeBar << [k, totalFloorArea * (perimeterDepth / lengthXTarget)]
56
- customSpaceTypeBar << [k, v - (totalFloorArea * (perimeterDepth / lengthXTarget))]
57
- else
58
- customSpaceTypeBar << [k, v]
59
- end
60
- elsif counter > 1
61
- customSpaceTypeBar << [k, v]
62
- end
63
- counter += 1
64
- end
65
-
66
- # add the largest space type to the end
67
- counter = 0
68
- spaceTypeHash.sort_by { |key, value| value }.reverse.each do |k, v|
69
- if counter == 0
70
- # if width is greater than 1.5x perimeter depth then split in half
71
- if (lengthXTarget * (v / totalFloorArea) > perimeterDepth * perimeterBufferFactor) && endZones
72
- customSpaceTypeBar << [k, v - (totalFloorArea * (perimeterDepth / lengthXTarget))]
73
- customSpaceTypeBar << [k, totalFloorArea * (perimeterDepth / lengthXTarget)]
74
- else
75
- customSpaceTypeBar << [k, v]
76
- end
77
- end
78
- break
79
- end
80
-
81
- # starting z level
82
- z = zmin
83
- storyCounter = 0
84
- barSpaceArray = []
85
-
86
- # create new stories and then add spaces
87
- [numStories, 3].min.times do # no more than tree loops through this
88
- story = OpenStudio::Model::BuildingStory.new(model)
89
- story.setNominalFloortoFloorHeight(floor_to_floor_height)
90
- story.setNominalZCoordinate(z)
91
-
92
- # starting position for first space
93
- x = (lengthX - lengthXTarget) * 0.5 + xmin
94
- y = (lengthY - lengthYTarget) * 0.5 + ymin
95
-
96
- # temp array of spaces (this is to change floor boundary when there is mid floor multiplier)
97
- tempSpaceArray = []
98
-
99
- # loop through space types making diagram and spaces.
100
- # spaceTypeHash.sort_by {|key, value| value}.reverse.each do |k,v|
101
- customSpaceTypeBar.each do |object|
102
- # get values from what was hash
103
- k = object[0]
104
- v = object[1]
105
-
106
- # get proper zone multiplier value
107
- if (storyCounter == 1) && (midFloorMultiplier > 1)
108
- thermalZoneMultiplier = midFloorMultiplier
109
- else
110
- thermalZoneMultiplier = 1
111
- end
112
-
113
- options = {
114
- 'name' => nil,
115
- 'spaceType' => k,
116
- 'story' => story,
117
- 'makeThermalZone' => true,
118
- 'thermalZone' => nil,
119
- 'thermalZoneMultiplier' => thermalZoneMultiplier,
120
- 'floor_to_floor_height' => floor_to_floor_height
121
- }
122
-
123
- # three paths for spaces depending upon building depth (3, 2 or one cross slices)
124
- if lengthYTarget > perimeterDepth * 3 # slice into core and perimeter
125
-
126
- # perimeter polygon a
127
- perim_polygon_a = OpenStudio::Point3dVector.new
128
- perim_origin_a = OpenStudio::Point3d.new(x, y, z)
129
- perim_polygon_a << perim_origin_a
130
- perim_polygon_a << OpenStudio::Point3d.new(x, y + perimeterDepth, z)
131
- perim_polygon_a << OpenStudio::Point3d.new(x + lengthXTarget * (v / totalFloorArea), y + perimeterDepth, z)
132
- perim_polygon_a << OpenStudio::Point3d.new(x + lengthXTarget * (v / totalFloorArea), y, z)
133
-
134
- # create core polygon
135
- core_polygon = OpenStudio::Point3dVector.new
136
- core_origin = OpenStudio::Point3d.new(x, y + perimeterDepth, z)
137
- core_polygon << core_origin
138
- core_polygon << OpenStudio::Point3d.new(x, y + lengthYTarget - perimeterDepth, z)
139
- core_polygon << OpenStudio::Point3d.new(x + lengthXTarget * (v / totalFloorArea), y + lengthYTarget - perimeterDepth, z)
140
- core_polygon << OpenStudio::Point3d.new(x + lengthXTarget * (v / totalFloorArea), y + perimeterDepth, z)
141
-
142
- # perimeter polygon b w
143
- perim_polygon_b = OpenStudio::Point3dVector.new
144
- perim_origin_b = OpenStudio::Point3d.new(x, y + lengthYTarget - perimeterDepth, z)
145
- perim_polygon_b << perim_origin_b
146
- perim_polygon_b << OpenStudio::Point3d.new(x, y + lengthYTarget, z)
147
- perim_polygon_b << OpenStudio::Point3d.new(x + lengthXTarget * (v / totalFloorArea), y + lengthYTarget, z)
148
- perim_polygon_b << OpenStudio::Point3d.new(x + lengthXTarget * (v / totalFloorArea), y + lengthYTarget - perimeterDepth, z)
149
-
150
- # run method to make spaces
151
- tempSpaceArray << OsLib_Geometry.makeSpaceFromPolygon(model, perim_origin_a, perim_polygon_a, options) # model, origin, polygon, options
152
- tempSpaceArray << OsLib_Geometry.makeSpaceFromPolygon(model, core_origin, core_polygon, options) # model, origin, polygon, options
153
- tempSpaceArray << OsLib_Geometry.makeSpaceFromPolygon(model, perim_origin_b, perim_polygon_b, options) # model, origin, polygon, options
154
-
155
- elsif lengthYTarget > perimeterDepth * 2 # slice into two peremeter zones but no core
156
-
157
- # perimeter polygon a
158
- perim_polygon_a = OpenStudio::Point3dVector.new
159
- perim_origin_a = OpenStudio::Point3d.new(x, y, z)
160
- perim_polygon_a << perim_origin_a
161
- perim_polygon_a << OpenStudio::Point3d.new(x, y + lengthYTarget / 2, z)
162
- perim_polygon_a << OpenStudio::Point3d.new(x + lengthXTarget * (v / totalFloorArea), y + lengthYTarget / 2, z)
163
- perim_polygon_a << OpenStudio::Point3d.new(x + lengthXTarget * (v / totalFloorArea), y, z)
164
-
165
- # perimeter polygon b
166
- perim_polygon_b = OpenStudio::Point3dVector.new
167
- perim_origin_b = OpenStudio::Point3d.new(x, y + lengthYTarget / 2, z)
168
- perim_polygon_b << perim_origin_b
169
- perim_polygon_b << OpenStudio::Point3d.new(x, y + lengthYTarget, z)
170
- perim_polygon_b << OpenStudio::Point3d.new(x + lengthXTarget * (v / totalFloorArea), y + lengthYTarget, z)
171
- perim_polygon_b << OpenStudio::Point3d.new(x + lengthXTarget * (v / totalFloorArea), y + lengthYTarget / 2, z)
172
-
173
- # run method to make spaces
174
- tempSpaceArray << OsLib_Geometry.makeSpaceFromPolygon(model, perim_origin_a, perim_polygon_a, options) # model, origin, polygon, options
175
- tempSpaceArray << OsLib_Geometry.makeSpaceFromPolygon(model, perim_origin_b, perim_polygon_b, options) # model, origin, polygon, options
176
-
177
- else # don't slice into core and perimeter
178
-
179
- # create polygon
180
- core_polygon = OpenStudio::Point3dVector.new
181
- core_origin = OpenStudio::Point3d.new(x, y, z)
182
- core_polygon << core_origin
183
- core_polygon << OpenStudio::Point3d.new(x, y + lengthYTarget, z)
184
- core_polygon << OpenStudio::Point3d.new(x + lengthXTarget * (v / totalFloorArea), y + lengthYTarget, z)
185
- core_polygon << OpenStudio::Point3d.new(x + lengthXTarget * (v / totalFloorArea), y, z)
186
-
187
- # run method to make space
188
- tempSpaceArray << OsLib_Geometry.makeSpaceFromPolygon(model, core_origin, core_polygon, options) # model, origin, polygon, options
189
-
190
- end
191
-
192
- # update points for next run
193
- x += lengthXTarget * (v / totalFloorArea)
194
- end
195
-
196
- # set flags for adiabatic surfaces
197
- floorAdiabatic = false
198
- ceilingAdiabatic = false
199
-
200
- # update z
201
- if midFloorMultiplier == 1
202
- z += floor_to_floor_height
203
- else
204
- z += floor_to_floor_height * midFloorMultiplier - floor_to_floor_height
205
-
206
- if storyCounter == 0
207
- ceilingAdiabatic = true
208
- elsif storyCounter == 1
209
- floorAdiabatic = true
210
- ceilingAdiabatic = true
211
- else
212
- floorAdiabatic = true
213
- end
214
-
215
- # alter surfaces boundary conditions and constructions as described above
216
- tempSpaceArray.each do |space|
217
- space.surfaces.each do |surface|
218
- if (surface.surfaceType == 'RoofCeiling') && ceilingAdiabatic
219
- construction = surface.construction # TODO: - this isn't really the construction I want since it wasn't an interior one, but will work for now
220
- surface.setOutsideBoundaryCondition('Adiabatic')
221
- if !construction.empty?
222
- surface.setConstruction(construction.get)
223
- end
224
- end
225
- if (surface.surfaceType == 'Floor') && floorAdiabatic
226
- construction = surface.construction # TODO: - this isn't really the construction I want since it wasn't an interior one, but will work for now
227
- surface.setOutsideBoundaryCondition('Adiabatic')
228
- if !construction.empty?
229
- surface.setConstruction(construction.get)
230
- end
231
- end
232
- end
233
- end
234
-
235
- # populate bar space array from temp array
236
- barSpaceArray << tempSpaceArray
237
-
238
- end
239
-
240
- # update storyCounter
241
- storyCounter += 1
242
- end
243
-
244
- # surface matching (seems more complex than necessary)
245
- spaces = OpenStudio::Model::SpaceVector.new
246
- model.getSpaces.each do |space|
247
- spaces << space
248
- end
249
- OpenStudio::Model.matchSurfaces(spaces)
250
-
251
- result = barSpaceArray
252
- return result
253
- end
254
- end