openstudio-model-articulation 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/Rakefile +20 -1
- data/lib/measures/AssignConstructionSetToBuilding/measure.rb +2 -0
- data/lib/measures/AssignSpaceTypeBySpaceName/measure.rb +2 -0
- data/lib/measures/AssignSpaceTypeToBuilding/measure.rb +2 -0
- data/lib/measures/AssignSpacesToStories/measure.rb +2 -0
- data/lib/measures/BarAspectRatioSlicedBySpaceType/measure.rb +2 -0
- data/lib/measures/BarAspectRatioSlicedBySpaceType/measure.xml +0 -6
- data/lib/measures/BarAspectRatioSlicedBySpaceType/resources/os_lib_cofee.rb +2 -0
- data/lib/measures/BarAspectRatioStudy/measure.rb +2 -0
- data/lib/measures/CleanupSpaceOrigins/measure.rb +2 -0
- data/lib/measures/FindAndReplaceObjectNames/measure.rb +2 -0
- data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.rb +2 -0
- data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.xml +9 -9
- data/lib/measures/RemoveHardAssignedConstructions/measure.rb +2 -0
- data/lib/measures/RenameSpaceSurfacesBasedonParentSpaceandOrientation/measure.rb +2 -0
- data/lib/measures/RotateBuilding/measure.rb +2 -0
- data/lib/measures/SetExtWallToGroundBoundaryConditionByStory/measure.rb +2 -0
- data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/measure.rb +2 -0
- data/lib/measures/SetInteriorWallsToSelectedConstruction/measure.rb +2 -0
- data/lib/measures/SetWindowToWallRatioByFacade/measure.rb +21 -31
- data/lib/measures/SetWindowToWallRatioByFacade/measure.xml +4 -4
- data/lib/measures/SimplifyGeometryToSlicedBar/measure.rb +2 -0
- data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_cofee.rb +2 -0
- data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_geometry.rb +2 -0
- data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_helper_methods.rb +3 -1
- data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.rb +2 -0
- data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.xml +1 -1
- data/lib/measures/SurfaceMatching/measure.rb +2 -0
- data/lib/measures/blended_space_type_from_floor_area_ratios/measure.rb +2 -0
- data/lib/measures/blended_space_type_from_model/measure.rb +2 -0
- data/lib/measures/blended_space_type_from_model/resources/os_lib_model_simplification.rb +2 -0
- data/lib/measures/clone_building_from_external_model/measure.rb +2 -0
- data/lib/measures/clone_building_from_external_model/measure.xml +4 -4
- data/lib/measures/create_DOE_prototype_building/measure.rb +8 -1
- data/lib/measures/create_DOE_prototype_building/measure.xml +2 -2
- data/lib/measures/create_and_assign_thermal_zones_for_unassigned_spaces/measure.rb +2 -0
- data/lib/measures/create_bar_from_building_type_ratios/measure.rb +3 -1
- data/lib/measures/create_bar_from_deer_building_type_ratios/measure.rb +2 -0
- data/lib/measures/create_bar_from_doe_building_type_ratios/measure.rb +2 -0
- data/lib/measures/create_bar_from_model/measure.rb +2 -0
- data/lib/measures/create_baseline_building/measure.rb +3 -1
- data/lib/measures/create_baseline_building/measure.xml +2 -2
- data/lib/measures/create_deer_prototype_building/measure.rb +2 -0
- data/lib/measures/create_deer_prototype_building/measure.xml +2 -2
- data/lib/measures/create_deer_prototype_building/resources/deer_building_types.rb +2 -0
- data/lib/measures/create_parametric_schedules/measure.rb +2 -0
- data/lib/measures/create_typical_building_from_model/measure.rb +2 -0
- data/lib/measures/create_typical_building_from_model/measure.xml +11 -11
- data/lib/measures/create_typical_building_from_model/resources/Model.hvac.rb +3 -1
- data/lib/measures/create_typical_deer_building_from_model/measure.rb +2 -0
- data/lib/measures/create_typical_deer_building_from_model/measure.xml +11 -11
- data/lib/measures/create_typical_deer_building_from_model/resources/Model.hvac.rb +3 -1
- data/lib/measures/create_typical_doe_building_from_model/measure.rb +2 -0
- data/lib/measures/create_typical_doe_building_from_model/measure.xml +19 -19
- data/lib/measures/create_typical_doe_building_from_model/resources/Model.hvac.rb +3 -1
- data/lib/measures/deer_space_type_and_construction_set_wizard/measure.rb +2 -0
- data/lib/measures/find_and_replace_in_all_thermal_zone_names/measure.rb +2 -0
- data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/measure.rb +2 -0
- data/lib/measures/merge_floorspace_js_with_model/measure.rb +2 -0
- data/lib/measures/merge_floorspace_js_with_model/measure.xml +9 -15
- data/lib/measures/merge_spaces_from_external_file/measure.rb +2 -0
- data/lib/measures/merge_spaces_from_external_file/measure.xml +4 -4
- data/lib/measures/merge_spaces_from_external_file/resources/ScheduleTranslator.rb +6 -4
- data/lib/measures/radiance_measure/measure.rb +2 -0
- data/lib/measures/radiance_measure/measure.xml +9 -9
- data/lib/measures/radiant_slab_with_doas/LICENSE.md +27 -0
- data/lib/measures/radiant_slab_with_doas/README.md +156 -0
- data/lib/measures/radiant_slab_with_doas/README.md.erb +42 -0
- data/lib/measures/radiant_slab_with_doas/measure.rb +406 -0
- data/lib/measures/radiant_slab_with_doas/measure.xml +346 -0
- data/lib/measures/replace_geometry_by_story/measure.rb +2 -0
- data/lib/measures/scale_geometry/measure.rb +2 -0
- data/lib/openstudio/model_articulation/version.rb +1 -1
- metadata +12 -8
- data/lib/measures/merge_floorspace_js_with_model/docs/.gitkeep +0 -0
@@ -0,0 +1,406 @@
|
|
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
|
+
require 'openstudio-standards'
|
39
|
+
|
40
|
+
# start the measure
|
41
|
+
class RadiantSlabWithDoas < OpenStudio::Measure::ModelMeasure
|
42
|
+
# human readable name
|
43
|
+
def name
|
44
|
+
# Measure name should be the title case of the class name.
|
45
|
+
return 'Radiant Slab with DOAS'
|
46
|
+
end
|
47
|
+
|
48
|
+
# human readable description
|
49
|
+
def description
|
50
|
+
return 'Adds a radiant slab with DOAS ventilation system to the model.'
|
51
|
+
end
|
52
|
+
|
53
|
+
# human readable description of modeling approach
|
54
|
+
def modeler_description
|
55
|
+
return 'This measure adds either a radiant floor slab or radiant ceiling slab with dedicated outdoor air system to conditioned zones in the model.
|
56
|
+
Radiant systems are comfortable with wider zone air temperature range. Use the CBE Thermal Comfort Tool or other method to set thermostat setpoint temperatures.
|
57
|
+
This measure optionally removes existing HVAC systems (recommended).
|
58
|
+
This measure is dependent on an ASHRAE climate zone to set insulation and design supply temperature levels, so make sure this is set in the site parameters of the model.
|
59
|
+
Plant equipment options are an Air Source Heat Pump or a Boiler for hot water, and an Air Cooled Chiller or Water Cooled Chiller for chilled water.
|
60
|
+
The Air Source Heat Pump object uses a user-defined plant component in EnergyPlus and may not be compatible with several reporting measures, including the *Enable Detailed Output for Each Node in a Loop* measure.
|
61
|
+
If Water Cooled Chiller is selected, the measure will add a condenser loop with a variable speed cooling tower, and optionally enable water-side economizing when wet bulb conditions allow.
|
62
|
+
By default, the slab system does not include carpet. Carpet greatly reduces the heat transfer capacity of the radiant system. If carpet is preferred, a ceiling-type slab and no lockout are recommended to avoid unmet hours.
|
63
|
+
The measure includes several control parameters for radiant system operation. Use the defaults unless you have strong reasons to deviate from them.
|
64
|
+
This measure runs a sizing run to set equipment efficiency values, so it may take up to a few minutes to run.
|
65
|
+
This measure adds many EnergyManagementSystem objects to the model. **DO NOT** change design days after running this measure. Adding additional HVAC measures after applying this measure may break the model.
|
66
|
+
Radiant systems are particularly limited in cooling capacity and the model may have many unmet hours as a result.
|
67
|
+
To reduce unmet hours, use an expanded comfort range as mentioned above, remove carpet, reduce internal loads, reduce solar and envelope gains during peak times, or disable the lockout.'
|
68
|
+
end
|
69
|
+
|
70
|
+
# define the arguments that the user will input
|
71
|
+
def arguments(model)
|
72
|
+
args = OpenStudio::Measure::OSArgumentVector.new
|
73
|
+
|
74
|
+
# make bool argument to remove existing HVAC system
|
75
|
+
remove_existing_hvac = OpenStudio::Measure::OSArgument.makeBoolArgument('remove_existing_hvac', true)
|
76
|
+
remove_existing_hvac.setDisplayName('Remove existing HVAC system (keeps service water heating and zone exhaust fans)')
|
77
|
+
remove_existing_hvac.setDefaultValue(true)
|
78
|
+
args << remove_existing_hvac
|
79
|
+
|
80
|
+
# make an argument for heating plant type
|
81
|
+
heating_plant_types = OpenStudio::StringVector.new
|
82
|
+
heating_plant_types << 'Air Source Heat Pump'
|
83
|
+
heating_plant_types << 'Boiler'
|
84
|
+
heating_plant_type = OpenStudio::Measure::OSArgument.makeChoiceArgument('heating_plant_type', heating_plant_types, true)
|
85
|
+
heating_plant_type.setDisplayName('Heating Plant Type')
|
86
|
+
heating_plant_type.setDefaultValue('Air Source Heat Pump')
|
87
|
+
args << heating_plant_type
|
88
|
+
|
89
|
+
# make an argument for cooling plant type
|
90
|
+
cooling_plant_types = OpenStudio::StringVector.new
|
91
|
+
cooling_plant_types << 'Air Cooled Chiller'
|
92
|
+
cooling_plant_types << 'Water Cooled Chiller'
|
93
|
+
cooling_plant_type = OpenStudio::Measure::OSArgument.makeChoiceArgument('cooling_plant_type', cooling_plant_types, true)
|
94
|
+
cooling_plant_type.setDisplayName('Cooling Plant Type')
|
95
|
+
cooling_plant_type.setDefaultValue('Air Cooled Chiller')
|
96
|
+
args << cooling_plant_type
|
97
|
+
|
98
|
+
# make string argument for water-side economizing if water-cooled chiller
|
99
|
+
economizer_types = OpenStudio::StringVector.new
|
100
|
+
economizer_types << 'none'
|
101
|
+
economizer_types << 'integrated'
|
102
|
+
economizer_types << 'non-integrated'
|
103
|
+
waterside_economizer = OpenStudio::Measure::OSArgument.makeChoiceArgument('waterside_economizer', economizer_types, true)
|
104
|
+
waterside_economizer.setDisplayName('Water-side economizer (water cooled chiller only)')
|
105
|
+
waterside_economizer.setDefaultValue('none')
|
106
|
+
args << waterside_economizer
|
107
|
+
|
108
|
+
# make an argument for radiant system type
|
109
|
+
radiant_types = OpenStudio::StringVector.new
|
110
|
+
radiant_types << 'floor'
|
111
|
+
radiant_types << 'ceiling'
|
112
|
+
radiant_type = OpenStudio::Measure::OSArgument.makeChoiceArgument('radiant_type', radiant_types, true)
|
113
|
+
radiant_type.setDisplayName('Radiant System Type')
|
114
|
+
radiant_type.setDefaultValue('floor')
|
115
|
+
args << radiant_type
|
116
|
+
|
117
|
+
# make and argument for adding carpet
|
118
|
+
include_carpet = OpenStudio::Measure::OSArgument.makeBoolArgument('include_carpet', true)
|
119
|
+
include_carpet.setDisplayName('Include carpet over the radiant slab')
|
120
|
+
include_carpet.setDescription('Only applicable in radiant floor systems. This will greatly reduce system effectiveness and controllability.')
|
121
|
+
include_carpet.setDefaultValue(false)
|
122
|
+
args << include_carpet
|
123
|
+
|
124
|
+
# make an argument for control strategy
|
125
|
+
control_strategys = OpenStudio::StringVector.new
|
126
|
+
control_strategys << 'proportional_control'
|
127
|
+
control_strategy = OpenStudio::Measure::OSArgument.makeChoiceArgument('control_strategy', control_strategys, true)
|
128
|
+
control_strategy.setDisplayName('Control Strategy')
|
129
|
+
control_strategy.setDefaultValue('proportional_control')
|
130
|
+
args << control_strategy
|
131
|
+
|
132
|
+
# make an argument for proportional gain
|
133
|
+
proportional_gain = OpenStudio::Measure::OSArgument.makeDoubleArgument('proportional_gain', true)
|
134
|
+
proportional_gain.setDisplayName('Proportional Gain')
|
135
|
+
proportional_gain.setDefaultValue(0.3)
|
136
|
+
args << proportional_gain
|
137
|
+
|
138
|
+
# make an argument for minimum operating hours
|
139
|
+
minimum_operation = OpenStudio::Measure::OSArgument.makeDoubleArgument('minimum_operation', true)
|
140
|
+
minimum_operation.setDisplayName('Minimum Operating Hours')
|
141
|
+
minimum_operation.setDescription('Fractional Hours Allowed, e.g. 30 min = 0.5')
|
142
|
+
minimum_operation.setDefaultValue(1.0)
|
143
|
+
args << minimum_operation
|
144
|
+
|
145
|
+
# make an argument for switch over time
|
146
|
+
switch_over_time = OpenStudio::Measure::OSArgument.makeDoubleArgument('switch_over_time', true)
|
147
|
+
switch_over_time.setDisplayName('Switch Over Time')
|
148
|
+
switch_over_time.setDescription('Minimum time limitation for when the system can switch between heating and cooling. Fractional hours allowed, e.g. 30 min = 0.5.')
|
149
|
+
switch_over_time.setDefaultValue(24.0)
|
150
|
+
args << switch_over_time
|
151
|
+
|
152
|
+
# make and argument for including radiant lockout
|
153
|
+
radiant_lockout = OpenStudio::Measure::OSArgument.makeBoolArgument('radiant_lockout', true)
|
154
|
+
radiant_lockout.setDisplayName('Enable radiant lockout')
|
155
|
+
radiant_lockout.setDescription('Lockout the radiant system to avoid operating during peak hours.')
|
156
|
+
radiant_lockout.setDefaultValue(false)
|
157
|
+
args << radiant_lockout
|
158
|
+
|
159
|
+
# make an argument for lockout start time
|
160
|
+
lockout_start_time = OpenStudio::Measure::OSArgument.makeDoubleArgument('lockout_start_time', true)
|
161
|
+
lockout_start_time.setDisplayName('Lockout Start Time')
|
162
|
+
lockout_start_time.setDescription('Decimal hour of when radiant lockout starts. Fractional hours allowed, e.g. 30 min = 0.5.')
|
163
|
+
lockout_start_time.setDefaultValue(12.0)
|
164
|
+
args << lockout_start_time
|
165
|
+
|
166
|
+
# make an argument for lockout end time
|
167
|
+
lockout_end_time = OpenStudio::Measure::OSArgument.makeDoubleArgument('lockout_end_time', true)
|
168
|
+
lockout_end_time.setDisplayName('Lockout End Time')
|
169
|
+
lockout_end_time.setDescription('Decimal hour of when radiant lockout ends. Fractional hours allowed, e.g. 30 min = 0.5.')
|
170
|
+
lockout_end_time.setDefaultValue(20.0)
|
171
|
+
args << lockout_end_time
|
172
|
+
|
173
|
+
# make and argument for output variables
|
174
|
+
add_output_variables = OpenStudio::Measure::OSArgument.makeBoolArgument('add_output_variables', true)
|
175
|
+
add_output_variables.setDisplayName('Add output variables for radiant system')
|
176
|
+
add_output_variables.setDefaultValue(true)
|
177
|
+
args << add_output_variables
|
178
|
+
|
179
|
+
# make an argument for standards template
|
180
|
+
standards_templates = OpenStudio::StringVector.new
|
181
|
+
standards_templates << '90.1-2013'
|
182
|
+
standards_templates << 'DEER 2017'
|
183
|
+
standards_templates << 'DEER 2020'
|
184
|
+
standards_template = OpenStudio::Measure::OSArgument.makeChoiceArgument('standards_template', standards_templates, true)
|
185
|
+
standards_template.setDisplayName('Standards Template')
|
186
|
+
standards_template.setDescription('Standards template to use for HVAC equipment efficiencies and controls.')
|
187
|
+
standards_template.setDefaultValue('90.1-2013')
|
188
|
+
args << standards_template
|
189
|
+
|
190
|
+
return args
|
191
|
+
end
|
192
|
+
|
193
|
+
# define what happens when the measure is run
|
194
|
+
def run(model, runner, user_arguments)
|
195
|
+
super(model, runner, user_arguments)
|
196
|
+
|
197
|
+
# use the built-in error checking
|
198
|
+
if !runner.validateUserArguments(arguments(model), user_arguments)
|
199
|
+
return false
|
200
|
+
end
|
201
|
+
|
202
|
+
# assign user inputs
|
203
|
+
remove_existing_hvac = runner.getBoolArgumentValue('remove_existing_hvac', user_arguments)
|
204
|
+
heating_plant_type = runner.getStringArgumentValue('heating_plant_type', user_arguments)
|
205
|
+
cooling_plant_type = runner.getStringArgumentValue('cooling_plant_type', user_arguments)
|
206
|
+
waterside_economizer = runner.getStringArgumentValue('waterside_economizer', user_arguments)
|
207
|
+
radiant_type = runner.getStringArgumentValue('radiant_type', user_arguments)
|
208
|
+
include_carpet = runner.getBoolArgumentValue('include_carpet', user_arguments)
|
209
|
+
control_strategy = runner.getStringArgumentValue('control_strategy', user_arguments)
|
210
|
+
proportional_gain = runner.getDoubleArgumentValue('proportional_gain', user_arguments)
|
211
|
+
minimum_operation = runner.getDoubleArgumentValue('minimum_operation', user_arguments)
|
212
|
+
switch_over_time = runner.getDoubleArgumentValue('switch_over_time', user_arguments)
|
213
|
+
radiant_lockout = runner.getBoolArgumentValue('radiant_lockout', user_arguments)
|
214
|
+
lockout_start_time = runner.getDoubleArgumentValue('lockout_start_time', user_arguments)
|
215
|
+
lockout_end_time = runner.getDoubleArgumentValue('lockout_end_time', user_arguments)
|
216
|
+
add_output_variables = runner.getBoolArgumentValue('add_output_variables', user_arguments)
|
217
|
+
standards_template = runner.getStringArgumentValue('standards_template', user_arguments)
|
218
|
+
|
219
|
+
# standard to access methods in openstudio-standards
|
220
|
+
std = Standard.build(standards_template)
|
221
|
+
|
222
|
+
# remove existing hvac systems
|
223
|
+
if remove_existing_hvac
|
224
|
+
runner.registerInfo('Removing existing HVAC systems from the model')
|
225
|
+
std.remove_HVAC(model)
|
226
|
+
end
|
227
|
+
|
228
|
+
# exclude plenum zones, zones without thermostats, and zones with no floor area
|
229
|
+
conditioned_zones = []
|
230
|
+
model.getThermalZones.each do |zone|
|
231
|
+
next if std.thermal_zone_plenum?(zone)
|
232
|
+
next if !std.thermal_zone_heated?(zone) && !std.thermal_zone_cooled?(zone)
|
233
|
+
conditioned_zones << zone
|
234
|
+
end
|
235
|
+
|
236
|
+
# make sure the model has conditioned zones
|
237
|
+
if conditioned_zones.empty?
|
238
|
+
runner.registerAsNotApplicable('No conditioned zones identified in model. Make sure thermostats are assigned to zones.')
|
239
|
+
return false
|
240
|
+
end
|
241
|
+
|
242
|
+
# get the climate zone
|
243
|
+
climate_zone_obj = model.getClimateZones.getClimateZone('ASHRAE', 2006)
|
244
|
+
if climate_zone_obj.empty
|
245
|
+
climate_zone_obj = model.getClimateZones.getClimateZone('ASHRAE', 2013)
|
246
|
+
end
|
247
|
+
|
248
|
+
if climate_zone_obj.empty || climate_zone_obj.value == ''
|
249
|
+
runner.registerError('Please assign an ASHRAE climate zone to the model before running the measure.')
|
250
|
+
return false
|
251
|
+
else
|
252
|
+
climate_zone = climate_zone_obj.value
|
253
|
+
end
|
254
|
+
|
255
|
+
# get the radiant hot water temperature based on the climate zone
|
256
|
+
case climate_zone
|
257
|
+
when '1'
|
258
|
+
radiant_htg_dsgn_sup_wtr_temp_f = 90.0
|
259
|
+
when '2', '2A', '2B', 'CEC15'
|
260
|
+
radiant_htg_dsgn_sup_wtr_temp_f = 100.0
|
261
|
+
when '3', '3A', '3B', '3C', 'CEC3', 'CEC4', 'CEC5', 'CEC6', 'CEC7', 'CEC8', 'CEC9', 'CEC10', 'CEC11', 'CEC12', 'CEC13', 'CEC14'
|
262
|
+
radiant_htg_dsgn_sup_wtr_temp_f = 100.0
|
263
|
+
when '4', '4A', '4B', '4C', 'CEC1', 'CEC2'
|
264
|
+
radiant_htg_dsgn_sup_wtr_temp_f = 100.0
|
265
|
+
when '5', '5A', '5B', '5C', 'CEC16'
|
266
|
+
radiant_htg_dsgn_sup_wtr_temp_f = 110.0
|
267
|
+
when '6', '6A', '6B'
|
268
|
+
radiant_htg_dsgn_sup_wtr_temp_f = 120.0
|
269
|
+
when '7', '8'
|
270
|
+
radiant_htg_dsgn_sup_wtr_temp_f = 120.0
|
271
|
+
else # default to 4
|
272
|
+
radiant_htg_dsgn_sup_wtr_temp_f = 100.0
|
273
|
+
end
|
274
|
+
runner.registerInitialCondition("This measure will add radiant systems to #{conditioned_zones.size} conditioned zones with a hot water loop served by a #{heating_plant_type} and chilled water loop served by a #{cooling_plant_type}.")
|
275
|
+
runner.registerInfo("Based on model climate zone #{climate_zone}, using #{radiant_htg_dsgn_sup_wtr_temp_f}F heating supply water temperature.")
|
276
|
+
|
277
|
+
# establish hot water and chilled water loops
|
278
|
+
case heating_plant_type
|
279
|
+
when 'Air Source Heat Pump'
|
280
|
+
boiler_fuel_type = 'ASHP'
|
281
|
+
when 'Boiler'
|
282
|
+
boiler_fuel_type = 'NaturalGas'
|
283
|
+
end
|
284
|
+
hot_water_loop = std.model_add_hw_loop(model, boiler_fuel_type, dsgn_sup_wtr_temp: radiant_htg_dsgn_sup_wtr_temp_f, dsgn_sup_wtr_temp_delt: 10.0)
|
285
|
+
|
286
|
+
case cooling_plant_type
|
287
|
+
when 'Air Cooled Chiller'
|
288
|
+
# make chilled water loop
|
289
|
+
chilled_water_loop = std.model_add_chw_loop(model,
|
290
|
+
chw_pumping_type: 'const_pri_var_sec',
|
291
|
+
dsgn_sup_wtr_temp: 55.0,
|
292
|
+
dsgn_sup_wtr_temp_delt: 5.0,
|
293
|
+
chiller_cooling_type: 'AirCooled')
|
294
|
+
when 'Water Cooled Chiller'
|
295
|
+
# make condenser water loop
|
296
|
+
fan_type = std.model_cw_loop_cooling_tower_fan_type(model)
|
297
|
+
condenser_water_loop = std.model_add_cw_loop(model,
|
298
|
+
cooling_tower_type: 'Open Cooling Tower',
|
299
|
+
cooling_tower_fan_type: 'Propeller or Axial',
|
300
|
+
cooling_tower_capacity_control: fan_type,
|
301
|
+
number_of_cells_per_tower: 1,
|
302
|
+
number_cooling_towers: 1)
|
303
|
+
# make chilled water loop
|
304
|
+
chilled_water_loop = std.model_add_chw_loop(model,
|
305
|
+
chw_pumping_type: 'const_pri_var_sec',
|
306
|
+
dsgn_sup_wtr_temp: 55.0,
|
307
|
+
dsgn_sup_wtr_temp_delt: 5.0,
|
308
|
+
chiller_cooling_type: 'WaterCooled',
|
309
|
+
condenser_water_loop: condenser_water_loop,
|
310
|
+
waterside_economizer: waterside_economizer)
|
311
|
+
end
|
312
|
+
|
313
|
+
# add radiant system to conditioned zones
|
314
|
+
radiant_loops = std.model_add_low_temp_radiant(model, conditioned_zones, hot_water_loop, chilled_water_loop,
|
315
|
+
radiant_type: radiant_type,
|
316
|
+
include_carpet: include_carpet,
|
317
|
+
control_strategy: control_strategy,
|
318
|
+
proportional_gain: proportional_gain,
|
319
|
+
minimum_operation: minimum_operation,
|
320
|
+
switch_over_time: switch_over_time,
|
321
|
+
radiant_lockout: radiant_lockout,
|
322
|
+
radiant_lockout_start_time: lockout_start_time,
|
323
|
+
radiant_lockout_end_time: lockout_end_time)
|
324
|
+
|
325
|
+
# add DOAS system to conditioned zones
|
326
|
+
std.model_add_doas(model, conditioned_zones)
|
327
|
+
std.rename_air_loop_nodes(model)
|
328
|
+
|
329
|
+
# set the heating and cooling sizing parameters
|
330
|
+
std.model_apply_prm_sizing_parameters(model)
|
331
|
+
|
332
|
+
runner.registerInfo("Adjusting HVAC equipment efficiencies and controls to follow template #{standards_template}.")
|
333
|
+
|
334
|
+
# perform a sizing run
|
335
|
+
if std.model_run_sizing_run(model, "#{Dir.pwd}/radiant_sizing_run") == false
|
336
|
+
runner.registerError('Sizing run failed. See errors in sizing run directory of this measure')
|
337
|
+
return false
|
338
|
+
end
|
339
|
+
|
340
|
+
# Apply the HVAC efficiency standard
|
341
|
+
building_data = std.model_get_building_climate_zone_and_building_type(model)
|
342
|
+
std.model_apply_hvac_efficiency_standard(model, building_data['climate_zone'])
|
343
|
+
|
344
|
+
# add output variables
|
345
|
+
vars = []
|
346
|
+
if add_output_variables
|
347
|
+
# site outdoor drybulb temperature
|
348
|
+
vars << OpenStudio::Model::OutputVariable.new('Site Outdoor Air Drybulb Temperature', model)
|
349
|
+
|
350
|
+
# zone hvac low temperature radiant system object variables
|
351
|
+
vars << OpenStudio::Model::OutputVariable.new('Zone Radiant HVAC Cooling Energy', model)
|
352
|
+
vars << OpenStudio::Model::OutputVariable.new('Zone Radiant HVAC Heating Energy', model)
|
353
|
+
vars << OpenStudio::Model::OutputVariable.new('Zone Radiant HVAC Inlet Temperature', model)
|
354
|
+
vars << OpenStudio::Model::OutputVariable.new('Zone Radiant HVAC Outlet Temperature', model)
|
355
|
+
vars << OpenStudio::Model::OutputVariable.new('Zone Radiant HVAC Mass Flow Rate', model)
|
356
|
+
|
357
|
+
# plant loop variables
|
358
|
+
var = OpenStudio::Model::OutputVariable.new('System Node Mass Flow Rate', model)
|
359
|
+
var.setKeyValue('Chilled Water Loop Supply Outlet Node')
|
360
|
+
vars << var
|
361
|
+
var = OpenStudio::Model::OutputVariable.new('System Node Mass Flow Rate', model)
|
362
|
+
var.setKeyValue('Hot Water Loop Supply Outlet Node')
|
363
|
+
vars << var
|
364
|
+
var = OpenStudio::Model::OutputVariable.new('System Node Temperature', model)
|
365
|
+
var.setKeyValue('Chilled Water Loop Supply Outlet Node')
|
366
|
+
vars << var
|
367
|
+
var = OpenStudio::Model::OutputVariable.new('System Node Temperature', model)
|
368
|
+
var.setKeyValue('Hot Water Loop Supply Outlet Node')
|
369
|
+
vars << var
|
370
|
+
var = OpenStudio::Model::OutputVariable.new('System Node Setpoint Temperature', model)
|
371
|
+
var.setKeyValue('Chilled Water Loop Supply Outlet Node')
|
372
|
+
vars << var
|
373
|
+
var = OpenStudio::Model::OutputVariable.new('System Node Setpoint Temperature', model)
|
374
|
+
var.setKeyValue('Hot Water Loop Supply Outlet Node')
|
375
|
+
vars << var
|
376
|
+
|
377
|
+
conditioned_space_names = []
|
378
|
+
conditioned_zones.each do |zone|
|
379
|
+
zone.spaces.each { |space| conditioned_space_names << space.name }
|
380
|
+
end
|
381
|
+
|
382
|
+
# radiant surface temperatures
|
383
|
+
model.getSurfaces.each do |surface|
|
384
|
+
next if radiant_type == 'floor' && surface.surfaceType != 'Floor'
|
385
|
+
next if radiant_type == 'ceiling' && surface.surfaceType != 'RoofCeiling'
|
386
|
+
next unless surface.space.is_initialized
|
387
|
+
surface_space_name = surface.space.get.name.to_s
|
388
|
+
next unless conditioned_space_names.include? surface_space_name
|
389
|
+
var = OpenStudio::Model::OutputVariable.new('Surface Inside Face Temperature', model)
|
390
|
+
var.setKeyValue(surface.name.to_s)
|
391
|
+
vars << var
|
392
|
+
end
|
393
|
+
|
394
|
+
# set to timestep
|
395
|
+
vars.each { |var| var.setReportingFrequency('Timestep') }
|
396
|
+
end
|
397
|
+
|
398
|
+
# runner register final condition
|
399
|
+
runner.registerFinalCondition("This measure created #{model.getZoneHVACLowTempRadiantVarFlows.size} radiant #{radiant_type} objects.")
|
400
|
+
|
401
|
+
return true
|
402
|
+
end
|
403
|
+
end
|
404
|
+
|
405
|
+
# register the measure to be used by the application
|
406
|
+
RadiantSlabWithDoas.new.registerWithApplication
|
@@ -0,0 +1,346 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<measure>
|
3
|
+
<schema_version>3.0</schema_version>
|
4
|
+
<name>radiant_slab_with_doas</name>
|
5
|
+
<uid>8091a0c3-7760-4da6-adf4-133d55872816</uid>
|
6
|
+
<version_id>b419f950-9f34-4477-bd99-6665edaa0d6b</version_id>
|
7
|
+
<version_modified>20201009T203050Z</version_modified>
|
8
|
+
<xml_checksum>C49A7DAB</xml_checksum>
|
9
|
+
<class_name>RadiantSlabWithDoas</class_name>
|
10
|
+
<display_name>Radiant Slab with DOAS</display_name>
|
11
|
+
<description>Adds a radiant slab with DOAS ventilation system to the model.</description>
|
12
|
+
<modeler_description>This measure adds either a radiant floor slab or radiant ceiling slab with dedicated outdoor air system to conditioned zones in the model.
|
13
|
+
Radiant systems are comfortable with wider zone air temperature range. Use the CBE Thermal Comfort Tool or other method to set thermostat setpoint temperatures.
|
14
|
+
This measure optionally removes existing HVAC systems (recommended).
|
15
|
+
This measure is dependent on an ASHRAE climate zone to set insulation and design supply temperature levels, so make sure this is set in the site parameters of the model.
|
16
|
+
Plant equipment options are an Air Source Heat Pump or a Boiler for hot water, and an Air Cooled Chiller or Water Cooled Chiller for chilled water.
|
17
|
+
The Air Source Heat Pump object uses a user-defined plant component in EnergyPlus and may not be compatible with several reporting measures, including the *Enable Detailed Output for Each Node in a Loop* measure.
|
18
|
+
If Water Cooled Chiller is selected, the measure will add a condenser loop with a variable speed cooling tower, and optionally enable water-side economizing when wet bulb conditions allow.
|
19
|
+
By default, the slab system does not include carpet. Carpet greatly reduces the heat transfer capacity of the radiant system. If carpet is preferred, a ceiling-type slab and no lockout are recommended to avoid unmet hours.
|
20
|
+
The measure includes several control parameters for radiant system operation. Use the defaults unless you have strong reasons to deviate from them.
|
21
|
+
This measure runs a sizing run to set equipment efficiency values, so it may take up to a few minutes to run.
|
22
|
+
This measure adds many EnergyManagementSystem objects to the model. **DO NOT** change design days after running this measure. Adding additional HVAC measures after applying this measure may break the model.
|
23
|
+
Radiant systems are particularly limited in cooling capacity and the model may have many unmet hours as a result.
|
24
|
+
To reduce unmet hours, use an expanded comfort range as mentioned above, remove carpet, reduce internal loads, reduce solar and envelope gains during peak times, or disable the lockout.</modeler_description>
|
25
|
+
<arguments>
|
26
|
+
<argument>
|
27
|
+
<name>remove_existing_hvac</name>
|
28
|
+
<display_name>Remove existing HVAC system (keeps service water heating and zone exhaust fans)</display_name>
|
29
|
+
<type>Boolean</type>
|
30
|
+
<required>true</required>
|
31
|
+
<model_dependent>false</model_dependent>
|
32
|
+
<default_value>true</default_value>
|
33
|
+
<choices>
|
34
|
+
<choice>
|
35
|
+
<value>true</value>
|
36
|
+
<display_name>true</display_name>
|
37
|
+
</choice>
|
38
|
+
<choice>
|
39
|
+
<value>false</value>
|
40
|
+
<display_name>false</display_name>
|
41
|
+
</choice>
|
42
|
+
</choices>
|
43
|
+
</argument>
|
44
|
+
<argument>
|
45
|
+
<name>heating_plant_type</name>
|
46
|
+
<display_name>Heating Plant Type</display_name>
|
47
|
+
<type>Choice</type>
|
48
|
+
<required>true</required>
|
49
|
+
<model_dependent>false</model_dependent>
|
50
|
+
<default_value>Air Source Heat Pump</default_value>
|
51
|
+
<choices>
|
52
|
+
<choice>
|
53
|
+
<value>Air Source Heat Pump</value>
|
54
|
+
<display_name>Air Source Heat Pump</display_name>
|
55
|
+
</choice>
|
56
|
+
<choice>
|
57
|
+
<value>Boiler</value>
|
58
|
+
<display_name>Boiler</display_name>
|
59
|
+
</choice>
|
60
|
+
</choices>
|
61
|
+
</argument>
|
62
|
+
<argument>
|
63
|
+
<name>cooling_plant_type</name>
|
64
|
+
<display_name>Cooling Plant Type</display_name>
|
65
|
+
<type>Choice</type>
|
66
|
+
<required>true</required>
|
67
|
+
<model_dependent>false</model_dependent>
|
68
|
+
<default_value>Air Cooled Chiller</default_value>
|
69
|
+
<choices>
|
70
|
+
<choice>
|
71
|
+
<value>Air Cooled Chiller</value>
|
72
|
+
<display_name>Air Cooled Chiller</display_name>
|
73
|
+
</choice>
|
74
|
+
<choice>
|
75
|
+
<value>Water Cooled Chiller</value>
|
76
|
+
<display_name>Water Cooled Chiller</display_name>
|
77
|
+
</choice>
|
78
|
+
</choices>
|
79
|
+
</argument>
|
80
|
+
<argument>
|
81
|
+
<name>waterside_economizer</name>
|
82
|
+
<display_name>Water-side economizer (water cooled chiller only)</display_name>
|
83
|
+
<type>Choice</type>
|
84
|
+
<required>true</required>
|
85
|
+
<model_dependent>false</model_dependent>
|
86
|
+
<default_value>none</default_value>
|
87
|
+
<choices>
|
88
|
+
<choice>
|
89
|
+
<value>none</value>
|
90
|
+
<display_name>none</display_name>
|
91
|
+
</choice>
|
92
|
+
<choice>
|
93
|
+
<value>integrated</value>
|
94
|
+
<display_name>integrated</display_name>
|
95
|
+
</choice>
|
96
|
+
<choice>
|
97
|
+
<value>non-integrated</value>
|
98
|
+
<display_name>non-integrated</display_name>
|
99
|
+
</choice>
|
100
|
+
</choices>
|
101
|
+
</argument>
|
102
|
+
<argument>
|
103
|
+
<name>radiant_type</name>
|
104
|
+
<display_name>Radiant System Type</display_name>
|
105
|
+
<type>Choice</type>
|
106
|
+
<required>true</required>
|
107
|
+
<model_dependent>false</model_dependent>
|
108
|
+
<default_value>floor</default_value>
|
109
|
+
<choices>
|
110
|
+
<choice>
|
111
|
+
<value>floor</value>
|
112
|
+
<display_name>floor</display_name>
|
113
|
+
</choice>
|
114
|
+
<choice>
|
115
|
+
<value>ceiling</value>
|
116
|
+
<display_name>ceiling</display_name>
|
117
|
+
</choice>
|
118
|
+
</choices>
|
119
|
+
</argument>
|
120
|
+
<argument>
|
121
|
+
<name>include_carpet</name>
|
122
|
+
<display_name>Include carpet over the radiant slab</display_name>
|
123
|
+
<description>Only applicable in radiant floor systems. This will greatly reduce system effectiveness and controllability.</description>
|
124
|
+
<type>Boolean</type>
|
125
|
+
<required>true</required>
|
126
|
+
<model_dependent>false</model_dependent>
|
127
|
+
<default_value>false</default_value>
|
128
|
+
<choices>
|
129
|
+
<choice>
|
130
|
+
<value>true</value>
|
131
|
+
<display_name>true</display_name>
|
132
|
+
</choice>
|
133
|
+
<choice>
|
134
|
+
<value>false</value>
|
135
|
+
<display_name>false</display_name>
|
136
|
+
</choice>
|
137
|
+
</choices>
|
138
|
+
</argument>
|
139
|
+
<argument>
|
140
|
+
<name>control_strategy</name>
|
141
|
+
<display_name>Control Strategy</display_name>
|
142
|
+
<type>Choice</type>
|
143
|
+
<required>true</required>
|
144
|
+
<model_dependent>false</model_dependent>
|
145
|
+
<default_value>proportional_control</default_value>
|
146
|
+
<choices>
|
147
|
+
<choice>
|
148
|
+
<value>proportional_control</value>
|
149
|
+
<display_name>proportional_control</display_name>
|
150
|
+
</choice>
|
151
|
+
</choices>
|
152
|
+
</argument>
|
153
|
+
<argument>
|
154
|
+
<name>proportional_gain</name>
|
155
|
+
<display_name>Proportional Gain</display_name>
|
156
|
+
<type>Double</type>
|
157
|
+
<required>true</required>
|
158
|
+
<model_dependent>false</model_dependent>
|
159
|
+
<default_value>0.3</default_value>
|
160
|
+
</argument>
|
161
|
+
<argument>
|
162
|
+
<name>minimum_operation</name>
|
163
|
+
<display_name>Minimum Operating Hours</display_name>
|
164
|
+
<description>Fractional Hours Allowed, e.g. 30 min = 0.5</description>
|
165
|
+
<type>Double</type>
|
166
|
+
<required>true</required>
|
167
|
+
<model_dependent>false</model_dependent>
|
168
|
+
<default_value>1</default_value>
|
169
|
+
</argument>
|
170
|
+
<argument>
|
171
|
+
<name>switch_over_time</name>
|
172
|
+
<display_name>Switch Over Time</display_name>
|
173
|
+
<description>Minimum time limitation for when the system can switch between heating and cooling. Fractional hours allowed, e.g. 30 min = 0.5.</description>
|
174
|
+
<type>Double</type>
|
175
|
+
<required>true</required>
|
176
|
+
<model_dependent>false</model_dependent>
|
177
|
+
<default_value>24</default_value>
|
178
|
+
</argument>
|
179
|
+
<argument>
|
180
|
+
<name>radiant_lockout</name>
|
181
|
+
<display_name>Enable radiant lockout</display_name>
|
182
|
+
<description>Lockout the radiant system to avoid operating during peak hours.</description>
|
183
|
+
<type>Boolean</type>
|
184
|
+
<required>true</required>
|
185
|
+
<model_dependent>false</model_dependent>
|
186
|
+
<default_value>false</default_value>
|
187
|
+
<choices>
|
188
|
+
<choice>
|
189
|
+
<value>true</value>
|
190
|
+
<display_name>true</display_name>
|
191
|
+
</choice>
|
192
|
+
<choice>
|
193
|
+
<value>false</value>
|
194
|
+
<display_name>false</display_name>
|
195
|
+
</choice>
|
196
|
+
</choices>
|
197
|
+
</argument>
|
198
|
+
<argument>
|
199
|
+
<name>lockout_start_time</name>
|
200
|
+
<display_name>Lockout Start Time</display_name>
|
201
|
+
<description>Decimal hour of when radiant lockout starts. Fractional hours allowed, e.g. 30 min = 0.5.</description>
|
202
|
+
<type>Double</type>
|
203
|
+
<required>true</required>
|
204
|
+
<model_dependent>false</model_dependent>
|
205
|
+
<default_value>12</default_value>
|
206
|
+
</argument>
|
207
|
+
<argument>
|
208
|
+
<name>lockout_end_time</name>
|
209
|
+
<display_name>Lockout End Time</display_name>
|
210
|
+
<description>Decimal hour of when radiant lockout ends. Fractional hours allowed, e.g. 30 min = 0.5.</description>
|
211
|
+
<type>Double</type>
|
212
|
+
<required>true</required>
|
213
|
+
<model_dependent>false</model_dependent>
|
214
|
+
<default_value>20</default_value>
|
215
|
+
</argument>
|
216
|
+
<argument>
|
217
|
+
<name>add_output_variables</name>
|
218
|
+
<display_name>Add output variables for radiant system</display_name>
|
219
|
+
<type>Boolean</type>
|
220
|
+
<required>true</required>
|
221
|
+
<model_dependent>false</model_dependent>
|
222
|
+
<default_value>true</default_value>
|
223
|
+
<choices>
|
224
|
+
<choice>
|
225
|
+
<value>true</value>
|
226
|
+
<display_name>true</display_name>
|
227
|
+
</choice>
|
228
|
+
<choice>
|
229
|
+
<value>false</value>
|
230
|
+
<display_name>false</display_name>
|
231
|
+
</choice>
|
232
|
+
</choices>
|
233
|
+
</argument>
|
234
|
+
<argument>
|
235
|
+
<name>standards_template</name>
|
236
|
+
<display_name>Standards Template</display_name>
|
237
|
+
<description>Standards template to use for HVAC equipment efficiencies and controls.</description>
|
238
|
+
<type>Choice</type>
|
239
|
+
<required>true</required>
|
240
|
+
<model_dependent>false</model_dependent>
|
241
|
+
<default_value>90.1-2013</default_value>
|
242
|
+
<choices>
|
243
|
+
<choice>
|
244
|
+
<value>90.1-2013</value>
|
245
|
+
<display_name>90.1-2013</display_name>
|
246
|
+
</choice>
|
247
|
+
<choice>
|
248
|
+
<value>DEER 2017</value>
|
249
|
+
<display_name>DEER 2017</display_name>
|
250
|
+
</choice>
|
251
|
+
<choice>
|
252
|
+
<value>DEER 2020</value>
|
253
|
+
<display_name>DEER 2020</display_name>
|
254
|
+
</choice>
|
255
|
+
</choices>
|
256
|
+
</argument>
|
257
|
+
</arguments>
|
258
|
+
<outputs />
|
259
|
+
<provenances />
|
260
|
+
<tags>
|
261
|
+
<tag>HVAC.Whole System</tag>
|
262
|
+
</tags>
|
263
|
+
<attributes>
|
264
|
+
<attribute>
|
265
|
+
<name>Measure Type</name>
|
266
|
+
<value>ModelMeasure</value>
|
267
|
+
<datatype>string</datatype>
|
268
|
+
</attribute>
|
269
|
+
<attribute>
|
270
|
+
<name>Intended Software Tool</name>
|
271
|
+
<value>Apply Measure Now</value>
|
272
|
+
<datatype>string</datatype>
|
273
|
+
</attribute>
|
274
|
+
<attribute>
|
275
|
+
<name>Intended Software Tool</name>
|
276
|
+
<value>OpenStudio Application</value>
|
277
|
+
<datatype>string</datatype>
|
278
|
+
</attribute>
|
279
|
+
<attribute>
|
280
|
+
<name>Intended Software Tool</name>
|
281
|
+
<value>Parametric Analysis Tool</value>
|
282
|
+
<datatype>string</datatype>
|
283
|
+
</attribute>
|
284
|
+
</attributes>
|
285
|
+
<files>
|
286
|
+
<file>
|
287
|
+
<filename>README.md.erb</filename>
|
288
|
+
<filetype>erb</filetype>
|
289
|
+
<usage_type>readmeerb</usage_type>
|
290
|
+
<checksum>703C9964</checksum>
|
291
|
+
</file>
|
292
|
+
<file>
|
293
|
+
<filename>USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw</filename>
|
294
|
+
<filetype>epw</filetype>
|
295
|
+
<usage_type>test</usage_type>
|
296
|
+
<checksum>EF1A69B0</checksum>
|
297
|
+
</file>
|
298
|
+
<file>
|
299
|
+
<filename>USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw</filename>
|
300
|
+
<filetype>epw</filetype>
|
301
|
+
<usage_type>test</usage_type>
|
302
|
+
<checksum>C254B53F</checksum>
|
303
|
+
</file>
|
304
|
+
<file>
|
305
|
+
<filename>multi_zone_office_3C.osm</filename>
|
306
|
+
<filetype>osm</filetype>
|
307
|
+
<usage_type>test</usage_type>
|
308
|
+
<checksum>7CBAD8AA</checksum>
|
309
|
+
</file>
|
310
|
+
<file>
|
311
|
+
<filename>single_zone_office_5A.osm</filename>
|
312
|
+
<filetype>osm</filetype>
|
313
|
+
<usage_type>test</usage_type>
|
314
|
+
<checksum>44FD3DF2</checksum>
|
315
|
+
</file>
|
316
|
+
<file>
|
317
|
+
<filename>README.md</filename>
|
318
|
+
<filetype>md</filetype>
|
319
|
+
<usage_type>readme</usage_type>
|
320
|
+
<checksum>8618B20F</checksum>
|
321
|
+
</file>
|
322
|
+
<file>
|
323
|
+
<filename>radiant_slab_with_doas_test.rb</filename>
|
324
|
+
<filetype>rb</filetype>
|
325
|
+
<usage_type>test</usage_type>
|
326
|
+
<checksum>E355D2C1</checksum>
|
327
|
+
</file>
|
328
|
+
<file>
|
329
|
+
<filename>LICENSE.md</filename>
|
330
|
+
<filetype>md</filetype>
|
331
|
+
<usage_type>license</usage_type>
|
332
|
+
<checksum>E0468DD6</checksum>
|
333
|
+
</file>
|
334
|
+
<file>
|
335
|
+
<version>
|
336
|
+
<software_program>OpenStudio</software_program>
|
337
|
+
<identifier>2.9.0</identifier>
|
338
|
+
<min_compatible>2.9.0</min_compatible>
|
339
|
+
</version>
|
340
|
+
<filename>measure.rb</filename>
|
341
|
+
<filetype>rb</filetype>
|
342
|
+
<usage_type>script</usage_type>
|
343
|
+
<checksum>466F7B10</checksum>
|
344
|
+
</file>
|
345
|
+
</files>
|
346
|
+
</measure>
|