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.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -1
- data/CHANGELOG.md +24 -0
- data/Gemfile +2 -2
- data/README.md +22 -3
- data/lib/measures/AssignConstructionSetToBuilding/measure.xml +10 -10
- data/lib/measures/AssignSpaceTypeBySpaceName/measure.xml +27 -9
- data/lib/measures/AssignSpaceTypeToBuilding/measure.xml +10 -10
- data/lib/measures/AssignSpacesToStories/measure.rb +2 -4
- data/lib/measures/AssignSpacesToStories/measure.xml +10 -10
- data/lib/measures/BarAspectRatioStudy/measure.rb +2 -1
- data/lib/measures/BarAspectRatioStudy/measure.xml +4 -4
- data/lib/measures/CleanupSpaceOrigins/measure.rb +3 -0
- data/lib/measures/CleanupSpaceOrigins/measure.xml +10 -10
- data/lib/measures/FindAndReplaceObjectNames/measure.xml +8 -8
- data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.rb +2 -2
- data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.xml +22 -4
- data/lib/measures/RemoveHardAssignedConstructions/measure.xml +8 -8
- data/lib/measures/RenameSpaceSurfacesBasedonParentSpaceandOrientation/measure.xml +37 -7
- data/lib/measures/RotateBuilding/measure.xml +8 -8
- data/lib/measures/SetExtWallToGroundBoundaryConditionByStory/measure.xml +13 -7
- data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/measure.rb +1 -1
- data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/measure.xml +10 -10
- data/lib/measures/SetInteriorWallsToSelectedConstruction/measure.rb +1 -1
- data/lib/measures/SetInteriorWallsToSelectedConstruction/measure.xml +10 -10
- data/lib/measures/SetWindowToWallRatioByFacade/README.md +11 -0
- data/lib/measures/SetWindowToWallRatioByFacade/measure.rb +90 -142
- data/lib/measures/SetWindowToWallRatioByFacade/measure.xml +32 -11
- data/lib/measures/SetWindowToWallRatioByFacade/resources/functions.rb +176 -0
- data/lib/measures/SimplifyGeometryToSlicedBar/measure.rb +8 -4
- data/lib/measures/SimplifyGeometryToSlicedBar/measure.xml +31 -13
- data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_cofee.rb +6 -4
- data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_geometry.rb +13 -8
- data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_helper_methods.rb +2 -4
- data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.rb +1 -1
- data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.xml +4 -4
- data/lib/measures/SurfaceMatching/measure.rb +1 -0
- data/lib/measures/SurfaceMatching/measure.xml +10 -10
- data/lib/measures/add_empd_material_properties/LICENSE.md +27 -0
- data/lib/measures/add_empd_material_properties/README.md +116 -0
- data/lib/measures/add_empd_material_properties/README.md.erb +42 -0
- data/lib/measures/add_empd_material_properties/docs/.gitkeep +0 -0
- data/lib/measures/add_empd_material_properties/measure.rb +247 -0
- data/lib/measures/add_empd_material_properties/measure.xml +201 -0
- data/lib/measures/blended_space_type_from_floor_area_ratios/measure.rb +4 -3
- data/lib/measures/blended_space_type_from_floor_area_ratios/measure.xml +4 -4
- data/lib/measures/blended_space_type_from_model/{resources → docs}/replace_occupied_spaces_with_blended_space_type_design_doc.txt +0 -0
- data/lib/measures/blended_space_type_from_model/measure.rb +11 -3
- data/lib/measures/blended_space_type_from_model/measure.xml +15 -21
- data/lib/measures/clone_building_from_external_model/measure.xml +3 -3
- data/lib/measures/create_DOE_prototype_building/measure.rb +2 -2
- data/lib/measures/create_DOE_prototype_building/measure.xml +442 -438
- data/lib/measures/create_and_assign_thermal_zones_for_unassigned_spaces/measure.xml +3 -3
- data/lib/measures/create_bar_from_building_type_ratios/README.md +109 -35
- data/lib/measures/create_bar_from_building_type_ratios/README.md.erb +54 -35
- data/lib/measures/create_bar_from_building_type_ratios/measure.rb +8 -3
- data/lib/measures/create_bar_from_building_type_ratios/measure.xml +12 -12
- data/lib/measures/create_bar_from_deer_building_type_ratios/README.md +301 -79
- data/lib/measures/create_bar_from_deer_building_type_ratios/README.md.erb +62 -79
- data/lib/measures/create_bar_from_deer_building_type_ratios/measure.rb +9 -4
- data/lib/measures/create_bar_from_deer_building_type_ratios/measure.xml +15 -59
- data/lib/measures/create_bar_from_doe_building_type_ratios/README.md +298 -57
- data/lib/measures/create_bar_from_doe_building_type_ratios/README.md.erb +54 -57
- data/lib/measures/create_bar_from_doe_building_type_ratios/measure.rb +9 -4
- data/lib/measures/create_bar_from_doe_building_type_ratios/measure.xml +12 -16
- data/lib/measures/create_bar_from_model/measure.rb +10 -6
- data/lib/measures/create_bar_from_model/measure.xml +4 -4
- data/lib/measures/create_bar_from_space_type_ratios/README.md +94 -42
- data/lib/measures/create_bar_from_space_type_ratios/README.md.erb +60 -42
- data/lib/measures/create_bar_from_space_type_ratios/measure.rb +8 -3
- data/lib/measures/create_bar_from_space_type_ratios/measure.xml +15 -15
- data/lib/measures/create_baseline_building/measure.rb +3 -2
- data/lib/measures/create_baseline_building/measure.xml +4 -4
- data/lib/measures/create_deer_prototype_building/measure.xml +3 -3
- data/lib/measures/create_parametric_schedules/measure.rb +15 -10
- data/lib/measures/create_parametric_schedules/measure.xml +4 -4
- data/lib/measures/create_typical_building_from_model/README.md +81 -16
- data/lib/measures/create_typical_building_from_model/README.md.erb +36 -16
- data/lib/measures/create_typical_building_from_model/measure.rb +6 -1
- data/lib/measures/create_typical_building_from_model/measure.xml +19 -19
- data/lib/measures/create_typical_deer_building_from_model/README.md +173 -53
- data/lib/measures/create_typical_deer_building_from_model/README.md.erb +57 -53
- data/lib/measures/create_typical_deer_building_from_model/measure.rb +7 -2
- data/lib/measures/create_typical_deer_building_from_model/measure.xml +26 -26
- data/lib/measures/create_typical_doe_building_from_model/README.md +182 -44
- data/lib/measures/create_typical_doe_building_from_model/README.md.erb +58 -44
- data/lib/measures/create_typical_doe_building_from_model/measure.rb +7 -2
- data/lib/measures/create_typical_doe_building_from_model/measure.xml +26 -26
- data/lib/measures/deer_space_type_and_construction_set_wizard/measure.rb +1 -1
- data/lib/measures/deer_space_type_and_construction_set_wizard/measure.xml +4 -4
- data/lib/measures/find_and_replace_in_all_thermal_zone_names/measure.xml +3 -3
- data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/measure.rb +2 -0
- data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/measure.xml +4 -4
- data/lib/measures/merge_floorspace_js_with_model/measure.rb +4 -1
- data/lib/measures/merge_floorspace_js_with_model/measure.xml +4 -4
- data/lib/measures/merge_spaces_from_external_file/measure.xml +3 -3
- data/lib/measures/radiance_measure/measure.rb +62 -56
- data/lib/measures/radiance_measure/measure.xml +4 -4
- data/lib/measures/radiant_slab_with_doas/measure.rb +8 -1
- data/lib/measures/radiant_slab_with_doas/measure.xml +9 -9
- data/lib/measures/replace_geometry_by_story/measure.rb +4 -0
- data/lib/measures/replace_geometry_by_story/measure.xml +4 -4
- data/lib/measures/scale_geometry/measure.xml +3 -3
- data/lib/openstudio/model_articulation/version.rb +1 -1
- data/openstudio-model-articulation.gemspec +2 -2
- metadata +15 -9
- 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 %>
|
File without changes
|
@@ -0,0 +1,247 @@
|
|
1
|
+
# *******************************************************************************
|
2
|
+
# OpenStudio(R), Copyright (c) 2008-2021, Alliance for Sustainable Energy, LLC.
|
3
|
+
# All rights reserved.
|
4
|
+
# Redistribution and use in source and binary forms, with or without
|
5
|
+
# modification, are permitted provided that the following conditions are met:
|
6
|
+
#
|
7
|
+
# (1) Redistributions of source code must retain the above copyright notice,
|
8
|
+
# this list of conditions and the following disclaimer.
|
9
|
+
#
|
10
|
+
# (2) Redistributions in binary form must reproduce the above copyright notice,
|
11
|
+
# this list of conditions and the following disclaimer in the documentation
|
12
|
+
# and/or other materials provided with the distribution.
|
13
|
+
#
|
14
|
+
# (3) Neither the name of the copyright holder nor the names of any contributors
|
15
|
+
# may be used to endorse or promote products derived from this software without
|
16
|
+
# specific prior written permission from the respective party.
|
17
|
+
#
|
18
|
+
# (4) Other than as required in clauses (1) and (2), distributions in any form
|
19
|
+
# of modifications or other derivative works may not use the "OpenStudio"
|
20
|
+
# trademark, "OS", "os", or any other confusingly similar designation without
|
21
|
+
# specific prior written permission from Alliance for Sustainable Energy, LLC.
|
22
|
+
#
|
23
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
|
24
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
25
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
26
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
|
27
|
+
# UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
|
28
|
+
# THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
29
|
+
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
30
|
+
# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
31
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
32
|
+
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
33
|
+
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
34
|
+
# *******************************************************************************
|
35
|
+
|
36
|
+
# insert your copyright here
|
37
|
+
|
38
|
+
# Measure written by Gabriel Flechas
|
39
|
+
# Assitance by Karl Heine (THANKS KARL!)
|
40
|
+
# Last edit 05/25/2021
|
41
|
+
|
42
|
+
# see the URL below for information on how to write OpenStudio measures
|
43
|
+
# http://nrel.github.io/OpenStudio-user-documentation/reference/measure_writing_guide/
|
44
|
+
|
45
|
+
# start the measure
|
46
|
+
class AddEMPDMaterialProperties < OpenStudio::Measure::ModelMeasure
|
47
|
+
# human readable name
|
48
|
+
def name
|
49
|
+
# Measure name should be the title case of the class name.
|
50
|
+
return 'Add EMPD Material Properties'
|
51
|
+
end
|
52
|
+
|
53
|
+
# human readable description
|
54
|
+
def description
|
55
|
+
return 'Adds the properties for the effective moisture penetration depth (EMPD) Heat Balance Model with inputs for penetration depths.'
|
56
|
+
end
|
57
|
+
|
58
|
+
# human readable description of modeling approach
|
59
|
+
def modeler_description
|
60
|
+
return ['Adds', 'the', 'properties', 'for', 'the', 'MoisturePenetrationDepthConductionTransferFunction', 'or', 'effective', 'moisture', 'penetration', 'depth', '(EMPD)', 'Heat', 'Balance', 'Model', 'with', 'inputs', 'for', 'penetration', 'depths.', "\n\n", 'Leaving', 'Change', 'heat', 'balance', 'algorithm?', 'blank', 'will', 'use', 'the', 'current', 'OpenStudio', 'heat', 'balance', 'algorithm', 'setting.', "\n\n", 'At', 'least', '1', 'interior', 'material', 'needs', 'to', 'have', 'moisture', 'penetration', 'depth', 'properties', 'set', 'to', 'use', 'the', 'EMPD', 'heat', 'balance', 'algorithm.'].join(' ')
|
61
|
+
end
|
62
|
+
|
63
|
+
# define the arguments that the user will input
|
64
|
+
def arguments(model)
|
65
|
+
args = OpenStudio::Measure::OSArgumentVector.new
|
66
|
+
|
67
|
+
# find the available materials
|
68
|
+
list_materials = model.getMaterials
|
69
|
+
mat_names = []
|
70
|
+
list_materials.each do |v|
|
71
|
+
mat_names.append(v.name.to_s)
|
72
|
+
end
|
73
|
+
mat_names.sort!
|
74
|
+
|
75
|
+
# Create arguments for material selection (Choice)
|
76
|
+
selected_material = OpenStudio::Measure::OSArgument.makeChoiceArgument('selected_material',
|
77
|
+
mat_names, true, true)
|
78
|
+
selected_material.setDisplayName('Select Material')
|
79
|
+
if !mat_names.empty?
|
80
|
+
selected_material.setDefaultValue(mat_names[0])
|
81
|
+
else
|
82
|
+
selected_material.setDefaultValue('No Materials In Model!')
|
83
|
+
end
|
84
|
+
args << selected_material
|
85
|
+
|
86
|
+
# create argument for Water Vapor Diffusion Resistance Factor
|
87
|
+
water_diff_fact = OpenStudio::Measure::OSArgument.makeDoubleArgument('water_diff_fact', true)
|
88
|
+
water_diff_fact.setDisplayName('Set value for Water Vapor Diffusion Resistance Factor')
|
89
|
+
water_diff_fact.setDefaultValue(0)
|
90
|
+
args << water_diff_fact
|
91
|
+
|
92
|
+
# create argument for Coefficient A
|
93
|
+
coef_a = OpenStudio::Measure::OSArgument.makeDoubleArgument('coef_a', true)
|
94
|
+
coef_a.setDisplayName('Set value for Moisture Equation Coefficient A')
|
95
|
+
coef_a.setDefaultValue(0)
|
96
|
+
args << coef_a
|
97
|
+
|
98
|
+
# create argument for Coefficient B
|
99
|
+
coef_b = OpenStudio::Measure::OSArgument.makeDoubleArgument('coef_b', true)
|
100
|
+
coef_b.setDisplayName('Set value for Moisture Equation Coefficient B')
|
101
|
+
coef_b.setDefaultValue(0)
|
102
|
+
args << coef_b
|
103
|
+
|
104
|
+
# create argument for Coefficient C
|
105
|
+
coef_c = OpenStudio::Measure::OSArgument.makeDoubleArgument('coef_c', true)
|
106
|
+
coef_c.setDisplayName('Set value for Moisture Equation Coefficient C')
|
107
|
+
coef_c.setDefaultValue(0)
|
108
|
+
args << coef_c
|
109
|
+
|
110
|
+
# create argument for Coefficient D
|
111
|
+
coef_d = OpenStudio::Measure::OSArgument.makeDoubleArgument('coef_d', true)
|
112
|
+
coef_d.setDisplayName('Set value for Moisture Equation Coefficient D')
|
113
|
+
coef_d.setDefaultValue(0)
|
114
|
+
args << coef_d
|
115
|
+
|
116
|
+
# create argument for Surface Layer Penetration Depth
|
117
|
+
surface_penetration = OpenStudio::Measure::OSArgument.makeStringArgument('surface_penetration', true)
|
118
|
+
surface_penetration.setDisplayName('Set value for Surface Layer Penetration Depth')
|
119
|
+
surface_penetration.setDefaultValue('Auto')
|
120
|
+
args << surface_penetration
|
121
|
+
|
122
|
+
# create argument for Deep Layer Penetration Depth
|
123
|
+
deep_penetration = OpenStudio::Measure::OSArgument.makeStringArgument('deep_penetration', false)
|
124
|
+
deep_penetration.setDisplayName('Set value for Deep Layer Penetration Depth')
|
125
|
+
deep_penetration.setDefaultValue('Auto')
|
126
|
+
args << deep_penetration
|
127
|
+
|
128
|
+
# create argument for Coating layer Thickness
|
129
|
+
coating = OpenStudio::Measure::OSArgument.makeDoubleArgument('coating', true)
|
130
|
+
coating.setDisplayName('Set value for Coating Layer Thickness')
|
131
|
+
coating.setDefaultValue(0)
|
132
|
+
args << coating
|
133
|
+
|
134
|
+
# create argument for Coating layer Resistance
|
135
|
+
coating_res = OpenStudio::Measure::OSArgument.makeDoubleArgument('coating_res', true)
|
136
|
+
coating_res.setDisplayName('Set value for Coating Layer Resistance Factor')
|
137
|
+
coating_res.setDefaultValue(0)
|
138
|
+
args << coating_res
|
139
|
+
|
140
|
+
# create argument for heat balance algorithm
|
141
|
+
algs = ['', 'MoisturePenetrationDepthConductionTransferFunction',
|
142
|
+
'ConductionTransferFunction']
|
143
|
+
algorithm = OpenStudio::Measure::OSArgument.makeChoiceArgument('algorithm', algs, false)
|
144
|
+
algorithm.setDisplayName('Change heat balance algorithm?')
|
145
|
+
algorithm.setDefaultValue(algs[0])
|
146
|
+
args << algorithm
|
147
|
+
|
148
|
+
return args
|
149
|
+
end
|
150
|
+
|
151
|
+
# define what happens when the measure is run
|
152
|
+
def run(model, runner, user_arguments)
|
153
|
+
super(model, runner, user_arguments)
|
154
|
+
|
155
|
+
# use the built-in error checking
|
156
|
+
if !runner.validateUserArguments(arguments(model), user_arguments)
|
157
|
+
return false
|
158
|
+
end
|
159
|
+
|
160
|
+
# assign the user inputs to variables
|
161
|
+
selected_material = runner.getStringArgumentValue('selected_material', user_arguments)
|
162
|
+
water_diff_fact = runner.getDoubleArgumentValue('water_diff_fact', user_arguments)
|
163
|
+
coef_a = runner.getDoubleArgumentValue('coef_a', user_arguments)
|
164
|
+
coef_b = runner.getDoubleArgumentValue('coef_b', user_arguments)
|
165
|
+
coef_c = runner.getDoubleArgumentValue('coef_c', user_arguments)
|
166
|
+
coef_d = runner.getDoubleArgumentValue('coef_d', user_arguments)
|
167
|
+
surface_penetration = runner.getStringArgumentValue('surface_penetration', user_arguments)
|
168
|
+
surface_penetration = surface_penetration.to_f
|
169
|
+
deep_penetration = runner.getStringArgumentValue('deep_penetration', user_arguments)
|
170
|
+
deep_penetration = deep_penetration.to_f
|
171
|
+
coating = runner.getDoubleArgumentValue('coating', user_arguments)
|
172
|
+
coating_res = runner.getDoubleArgumentValue('coating_res', user_arguments)
|
173
|
+
algorithm = runner.getStringArgumentValue('algorithm', user_arguments)
|
174
|
+
|
175
|
+
#---------------------------------------------------------------------------
|
176
|
+
# Validate arguments
|
177
|
+
if water_diff_fact == 0
|
178
|
+
runner.registerError('The Water Vapor Diffusion Resistance Factor needs to be greater than 0.')
|
179
|
+
return false
|
180
|
+
end
|
181
|
+
if coef_a == 0
|
182
|
+
runner.registerWarning('The Moisture Equation Coefficient A has been left as 0. This is usally a non-zero value.')
|
183
|
+
end
|
184
|
+
if coef_b == 0
|
185
|
+
runner.registerWarning('The Moisture Equation Coefficient B has been left as 0. This is usally a non-zero value.')
|
186
|
+
end
|
187
|
+
if coef_c == 0
|
188
|
+
runner.registerWarning('The Moisture Equation Coefficient C has been left as 0. This is usally a non-zero value.')
|
189
|
+
end
|
190
|
+
if coef_d == 0
|
191
|
+
runner.registerWarning('The Moisture Equation Coefficient D has been left as 0. This is usally a non-zero value.')
|
192
|
+
end
|
193
|
+
#---------------------------------------------------------------------------
|
194
|
+
|
195
|
+
# Get os object for selected material
|
196
|
+
mats = model.getMaterials
|
197
|
+
mat = ''
|
198
|
+
mats.each do |m|
|
199
|
+
if m.name.to_s == selected_material
|
200
|
+
mat = m
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
# report initial condition of model
|
205
|
+
runner.registerInitialCondition("The building has #{mats.size} materials.")
|
206
|
+
|
207
|
+
#---------------------------------------------------------------------------
|
208
|
+
# Set algorithm and report to users
|
209
|
+
if algorithm != ''
|
210
|
+
alg = model.getHeatBalanceAlgorithm
|
211
|
+
alg.setAlgorithm(algorithm)
|
212
|
+
runner.registerInfo("Heat Balance Algorithm Set to : #{algorithm}")
|
213
|
+
end
|
214
|
+
#---------------------------------------------------------------------------
|
215
|
+
|
216
|
+
# Add moisture properties object and make changes to model
|
217
|
+
n = OpenStudio::Model::MaterialPropertyMoisturePenetrationDepthSettings.new(
|
218
|
+
mat, water_diff_fact, coef_a, coef_b, coef_c, coef_d, coating, coating_res
|
219
|
+
)
|
220
|
+
|
221
|
+
# check if the surface penetration is being autocalculated, and if not set the depth
|
222
|
+
if surface_penetration > 0
|
223
|
+
n.setSurfaceLayerPenetrationDepth(surface_penetration)
|
224
|
+
runner.registerInfo("Surface layer penetration depth set to: #{surface_penetration}")
|
225
|
+
else
|
226
|
+
n.autocalculateSurfaceLayerPenetrationDepth
|
227
|
+
runner.registerInfo('Surface layer penetration depth set to: AutoCalculate')
|
228
|
+
end
|
229
|
+
|
230
|
+
# check if the deep penetration is being autocalculated, and if not set the depth
|
231
|
+
if deep_penetration > 0
|
232
|
+
n.setDeepLayerPenetrationDepth(deep_penetration)
|
233
|
+
runner.registerInfo("Deep layer penetration depth set to: #{surface_penetration}")
|
234
|
+
else
|
235
|
+
n.autocalculateDeepLayerPenetrationDepth
|
236
|
+
runner.registerInfo('Deep layer penetration depth set to: AutoCalculate')
|
237
|
+
end
|
238
|
+
|
239
|
+
# report final condition of model
|
240
|
+
runner.registerFinalCondition("Moisture properties were added to #{selected_material}.")
|
241
|
+
|
242
|
+
return true
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
# register the measure to be used by the application
|
247
|
+
AddEMPDMaterialProperties.new.registerWithApplication
|
@@ -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
|
45
|
-
require 'openstudio/extension/core/os_lib_model_simplification
|
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 =>
|
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>
|
7
|
-
<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>
|
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>
|
162
|
+
<checksum>E1767BA6</checksum>
|
163
163
|
</file>
|
164
164
|
</files>
|
165
165
|
</measure>
|