openstudio-standards 0.6.0.rc1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/standards/export_OpenStudio_libraries.rb +2 -2
- data/data/standards/manage_OpenStudio_Standards.rb +2 -2
- data/data/standards/test_performance_expected_dd_results.csv +8 -8
- data/lib/openstudio-standards/btap/btap_result.rb +0 -2
- data/lib/openstudio-standards/btap/envelope.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +7 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +46 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +171 -178
- data/lib/openstudio-standards/schedules/parametric.rb +5 -0
- data/lib/openstudio-standards/standards/Standards.Model.rb +20 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +6 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +3 -7
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +1 -1
- data/lib/openstudio-standards/utilities/simulation.rb +5 -0
- data/lib/openstudio-standards/version.rb +1 -1
- metadata +104 -92
- data/data/standards/OpenStudio_Standards-deer-comstock.xlsx +0 -0
- data/data/standards/openstudio_standards_duplicates_log.csv +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99feac3c5967489050268e5d5371e8966cdab260e390ceda4e61c7d3f8413dd3
|
4
|
+
data.tar.gz: 3e66eab384d8af2d75243ab465fad4cb94e6d007514bd3c4de51fbe5ddfc9d1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7766ea57fc85eaea49dcc70b704bfb0a5a0a89ce332c0ec442ec50c2e5af4eb7b1d8523d4cefe5002d4e674f3b8610c3c3eccb2324dda9d6dcff2c48101dc24
|
7
|
+
data.tar.gz: c7fc367108d38b3879d82e63b7b7169b0c05978a1016da8869481dfd9adfbbbb416e9b48be1c23f5a8fa37b036141ce384bb425804a37703ec0c6d8d7ead9848
|
@@ -438,9 +438,9 @@ def export_openstudio_libraries
|
|
438
438
|
|
439
439
|
# Save the library
|
440
440
|
pkg_dir = "#{__dir__}/../../pkg"
|
441
|
-
Dir.mkdir(pkg_dir) unless Dir.
|
441
|
+
Dir.mkdir(pkg_dir) unless Dir.exist?(pkg_dir)
|
442
442
|
osm_lib_dir = "#{pkg_dir}/libraries"
|
443
|
-
Dir.mkdir(osm_lib_dir) unless Dir.
|
443
|
+
Dir.mkdir(osm_lib_dir) unless Dir.exist?(osm_lib_dir)
|
444
444
|
library_path = "#{osm_lib_dir}/#{template_name.gsub(/\W/,'_')}.osm"
|
445
445
|
puts "* Saving library #{library_path}"
|
446
446
|
model.save(OpenStudio::Path.new(library_path), true)
|
@@ -204,7 +204,7 @@ end
|
|
204
204
|
def check_google_drive_configuration
|
205
205
|
require 'google_drive'
|
206
206
|
client_config_path = File.join(Dir.home, '.credentials', "client_secret.json")
|
207
|
-
unless File.
|
207
|
+
unless File.exist? client_config_path
|
208
208
|
puts "Unable to locate client_secret.json file at #{client_config_path}."
|
209
209
|
return false
|
210
210
|
end
|
@@ -228,7 +228,7 @@ end
|
|
228
228
|
def download_google_spreadsheets(spreadsheet_titles)
|
229
229
|
require 'google_drive'
|
230
230
|
client_config_path = File.join(Dir.home, '.credentials', "client_secret.json")
|
231
|
-
unless File.
|
231
|
+
unless File.exist? client_config_path
|
232
232
|
puts "Unable to locate client_secret.json file at #{client_config_path}."
|
233
233
|
return false
|
234
234
|
end
|
@@ -65,17 +65,17 @@ FullServiceRestaurant,90.1-2010,ASHRAE 169-2013-4A,777539613.1023173,0,0,0,0,0,0
|
|
65
65
|
FullServiceRestaurant,90.1-2013,ASHRAE 169-2013-4A,755631711.948922,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,256687116.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4297953623.6510105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1245911470.5462978,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14136512.169772021,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3908703861.4121346,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11642346584.45856,0.0,11642346584.45856,504301758.4820919,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,659020530.2483394,0,0,0,0,0,0,0,0,0,18.483544466559202,0,0,0,0,0,0,0,0
|
66
66
|
FullServiceRestaurant,90.1-2016,ASHRAE 169-2013-4A,620443829.9347649,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154382256.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4297953623.6510105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1210468758.551721,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14136512.169772021,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3793374488.949421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11254131588.132673,0.0,11254131588.132673,504409020.65290403,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,658963098.2230852,0,0,0,0,0,0,0,0,0,18.483544466559202,0,0,0,0,0,0,0,0
|
67
67
|
FullServiceRestaurant,90.1-2019,ASHRAE 169-2013-4A,597946658.1005332,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154382256.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4184760983.6510096,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1198296660.8610497,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14136512.169772021,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3750980520.625906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10948760999.042639,0.0,10948760999.042639,389190069.46910566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,659067338.1652699,0,0,0,0,0,0,0,0,0,18.483544466559202,0,0,0,0,0,0,0,0
|
68
|
-
MidriseApartment,90.1-2004,ASHRAE 169-2013-4A,1228747413.939952,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,557040000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4660550311.613755,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
69
|
-
MidriseApartment,90.1-2007,ASHRAE 169-2013-4A,1228747413.939952,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,557040000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4660550311.613755,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
70
|
-
MidriseApartment,90.1-2010,ASHRAE 169-2013-4A,1264722844.1737761,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,300960000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4611200599.0301285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
68
|
+
MidriseApartment,90.1-2004,ASHRAE 169-2013-4A,1228747413.939952,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,557040000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4660550311.613755,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,822237969.1271257,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03033663212866495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3118760026.6748786,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13937338361.958841,0.0,13937338361.958841,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3550002640.5727863,0,0,0,0,0,0,0,0,0,15.410284867262238,0,0,0,0,0,0,0,0
|
69
|
+
MidriseApartment,90.1-2007,ASHRAE 169-2013-4A,1228747413.939952,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,557040000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4660550311.613755,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,809000404.0380547,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03033663212866495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2528602358.197528,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13333936887.96347,0.0,13333936887.96347,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3549996400.143838,0,0,0,0,0,0,0,0,0,15.410284867262238,0,0,0,0,0,0,0,0
|
70
|
+
MidriseApartment,90.1-2010,ASHRAE 169-2013-4A,1264722844.1737761,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,300960000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4611200599.0301285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,704832644.0873003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.029272188896080235,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2295723503.6061645,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12711631630.973076,0.0,12711631630.973076,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3534192040.0464287,0,0,0,0,0,0,0,0,0,15.410284867262238,0,0,0,0,0,0,0,0
|
71
71
|
MidriseApartment,90.1-2013,ASHRAE 169-2013-4A,1101038681.645097,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,300960000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4607308711.0301285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1256799325.2086463,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.035753887865926565,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2744609020.8069496,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20046760.809141975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13144730768.847263,0.0,13144730768.847263,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3113968269.3115425,0,0,0,0,0,0,0,0,0,15.410284867262238,0,0,0,0,0,0,0,0
|
72
72
|
MidriseApartment,90.1-2016,ASHRAE 169-2013-4A,855834791.8498567,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,198123000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4607308711.0301285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1182782275.7769496,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.035753887865926565,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2569744536.0970163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20046760.809141975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12547808335.214468,0.0,12547808335.214468,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3113968259.6156197,0,0,0,0,0,0,0,0,0,15.410284867262238,0,0,0,0,0,0,0,0
|
73
73
|
MidriseApartment,90.1-2019,ASHRAE 169-2013-4A,709501859.475796,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,198123000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4607308711.0301285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1162767188.6764462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.035753887865926565,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2520799815.662402,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20046760.809141975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12332519761.625237,0.0,12332519761.625237,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3113972425.935563,0,0,0,0,0,0,0,0,0,15.410284867262238,0,0,0,0,0,0,0,0
|
74
|
-
HighriseApartment,90.1-2004,ASHRAE 169-2013-4A,2830783842.860468,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1629600000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9870166813.800488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,296067944.9853616,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
75
|
-
HighriseApartment,90.1-2007,ASHRAE 169-2013-4A,2830783842.860468,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1629600000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9870166813.800488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,296067944.9853616,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
76
|
-
HighriseApartment,90.1-2010,ASHRAE 169-2013-4A,2979275880.92879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1286400000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9820817101.216848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,170434864.9558134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
77
|
-
HighriseApartment,90.1-2013,ASHRAE 169-2013-4A,2502911158.565948,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1286400000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9816925213.216848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,170319510.47468275,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
78
|
-
HighriseApartment,90.1-2016,ASHRAE 169-2013-4A,1931902613.3330522,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,900109560.0000012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9816925213.216848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118479993.45694521,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
74
|
+
HighriseApartment,90.1-2004,ASHRAE 169-2013-4A,2830783842.860468,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1629600000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9870166813.800488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,296067944.9853616,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2759561631.1494513,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,535385144.18915427,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5196503967.47089,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8875514542.687614,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,413405499.66227293,0,0,0,0,0,0,0,0,0,19.3778306394734,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32406989386.80568,0.0,32406989386.80568,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39.27137111334572,0,0,0,0,0,0,0,0
|
75
|
+
HighriseApartment,90.1-2007,ASHRAE 169-2013-4A,2830783842.860468,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1629600000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9870166813.800488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,296067944.9853616,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2703997101.9827433,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,524708568.86517787,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4900477910.411963,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8876724591.81084,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,407243708.7186346,0,0,0,0,0,0,0,0,0,19.2909489563067,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32039770483.43566,0.0,32039770483.43566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39.27137111334572,0,0,0,0,0,0,0,0
|
76
|
+
HighriseApartment,90.1-2010,ASHRAE 169-2013-4A,2979275880.92879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1286400000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9820817101.216848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,170434864.9558134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2345467351.7142277,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,478968864.1229158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3576635640.9440866,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8051631861.32485,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,978219656.8966086,0,0,0,0,0,0,0,0,0,21.611850387905623,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29687851222.10414,0.0,29687851222.10414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39.27137111334572,0,0,0,0,0,0,0,0
|
77
|
+
HighriseApartment,90.1-2013,ASHRAE 169-2013-4A,2502911158.565948,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1286400000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9816925213.216848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,170319510.47468275,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3813943393.7084503,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,472222105.5504,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4945734316.175122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8916435671.29256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,984248362.8439888,0,0,0,0,0,0,0,0,0,24.03349270191599,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20046760.809141975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32929186492.63715,0.0,32929186492.63715,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39.27137111334572,0,0,0,0,0,0,0,0
|
78
|
+
HighriseApartment,90.1-2016,ASHRAE 169-2013-4A,1931902613.3330522,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,900109560.0000012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9816925213.216848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118479993.45694521,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3603255819.112727,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,446176575.3944447,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4703256163.616502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8493315396.990675,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,790543658.4208595,0,0,0,0,0,0,0,0,0,21.72224373776791,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20046760.809141975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30824011754.3512,0.0,30824011754.3512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39.27137111334572,0,0,0,0,0,0,0,0
|
79
79
|
HighriseApartment,90.1-2019,ASHRAE 169-2013-4A,1610413342.225185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,900109560.0000012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9816925213.216848,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118471681.5553761,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3585415380.3169084,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,434118898.3026537,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4736283926.267405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8374609000.969961,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,775714827.7673504,0,0,0,0,0,0,0,0,0,21.388790981215433,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20046760.809141975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30372108591.430824,0.0,30372108591.430824,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39.27137111334572,0,0,0,0,0,0,0,0
|
80
80
|
Hospital,90.1-2004,ASHRAE 169-2013-4A,43700141905.51176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1996320000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73851258109.6063,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34067503994.126015,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33103022164.466347,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10112571728.238243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46820766045.57834,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6532353748.843508,0,0,0,0,0,0,0,0,0,191.02704311998363,0,0,0,0,0,0,0,0,6798818700.137337,0,0,0,0,0,0,0,0,0,2.5291605564510893,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,258704259073.49158,0.0,258704259073.49158,1470040442.5647764,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251462234.41894314,0,0,0,0,0,0,0,0,0,46.80754034926254,0,0,0,0,0,0,0,0
|
81
81
|
Hospital,90.1-2007,ASHRAE 169-2013-4A,43700141905.51176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1996320000.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66950317309.60635,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33600246624.695667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32641907550.116947,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9789181478.960934,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45212694684.451775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6362012611.503619,0,0,0,0,0,0,0,0,0,185.34140190149392,0,0,0,0,0,0,0,0,7302765350.65984,0,0,0,0,0,0,0,0,0,2.716628710445461,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249277725384.5667,0.0,249277725384.5667,1470690632.651906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251447236.40786576,0,0,0,0,0,0,0,0,0,46.80754034926254,0,0,0,0,0,0,0,0
|
@@ -25,8 +25,6 @@ module BTAP
|
|
25
25
|
# Create hash to store all the collected data.
|
26
26
|
qaqc = {}
|
27
27
|
error_warning=[]
|
28
|
-
qaqc[:os_standards_revision] = OpenstudioStandards::git_revision
|
29
|
-
qaqc[:os_standards_version] = OpenstudioStandards::VERSION
|
30
28
|
# Store Building data.
|
31
29
|
qaqc[:building] = {}
|
32
30
|
qaqc[:building][:name] = model.building.get.name.get
|
@@ -909,7 +909,7 @@ module BTAP
|
|
909
909
|
#@return [Boolean] optional_construction_set
|
910
910
|
def self.get_construction_set_from_library(construction_library_file, construction_set_name)
|
911
911
|
#Load Contruction osm library.
|
912
|
-
if File.
|
912
|
+
if File.exist?(construction_library_file)
|
913
913
|
construction_lib = BTAP::FileIO::load_osm(construction_library_file)
|
914
914
|
#Get construction set..
|
915
915
|
optional_construction_set = construction_lib.getDefaultConstructionSetByName(construction_set_name)
|
@@ -51,8 +51,13 @@ class Standard
|
|
51
51
|
htg_coil.setGasBurnerEfficiency(efficiency)
|
52
52
|
|
53
53
|
# defaults
|
54
|
-
|
55
|
-
|
54
|
+
if model.version < OpenStudio::VersionString.new('3.7.0')
|
55
|
+
htg_coil.setParasiticElectricLoad(0.0)
|
56
|
+
htg_coil.setParasiticGasLoad(0.0)
|
57
|
+
else
|
58
|
+
htg_coil.setOnCycleParasiticElectricLoad(0.0)
|
59
|
+
htg_coil.setOffCycleParasiticGasLoad(0.0)
|
60
|
+
end
|
56
61
|
|
57
62
|
return htg_coil
|
58
63
|
end
|
@@ -1579,9 +1579,54 @@ Standard.class_eval do
|
|
1579
1579
|
air_loop_hvac.thermalZones.each do |zone|
|
1580
1580
|
next unless OpenstudioStandards::ThermalZone.thermal_zone_residential?(zone)
|
1581
1581
|
|
1582
|
+
# Exception 3 to 6.5.6.1.1
|
1583
|
+
case template
|
1584
|
+
when '90.1-2019'
|
1585
|
+
case climate_zone
|
1586
|
+
when 'ASHRAE 169-2006-0A',
|
1587
|
+
'ASHRAE 169-2006-0B',
|
1588
|
+
'ASHRAE 169-2006-1A',
|
1589
|
+
'ASHRAE 169-2006-1B',
|
1590
|
+
'ASHRAE 169-2006-2A',
|
1591
|
+
'ASHRAE 169-2006-2B',
|
1592
|
+
'ASHRAE 169-2006-3A',
|
1593
|
+
'ASHRAE 169-2006-3B',
|
1594
|
+
'ASHRAE 169-2006-3C',
|
1595
|
+
'ASHRAE 169-2006-4A',
|
1596
|
+
'ASHRAE 169-2006-4B',
|
1597
|
+
'ASHRAE 169-2006-4C',
|
1598
|
+
'ASHRAE 169-2006-5A',
|
1599
|
+
'ASHRAE 169-2006-5B',
|
1600
|
+
'ASHRAE 169-2006-5C',
|
1601
|
+
'ASHRAE 169-2013-0A',
|
1602
|
+
'ASHRAE 169-2013-0B',
|
1603
|
+
'ASHRAE 169-2013-1A',
|
1604
|
+
'ASHRAE 169-2013-1B',
|
1605
|
+
'ASHRAE 169-2013-2A',
|
1606
|
+
'ASHRAE 169-2013-2B',
|
1607
|
+
'ASHRAE 169-2013-3A',
|
1608
|
+
'ASHRAE 169-2013-3B',
|
1609
|
+
'ASHRAE 169-2013-3C',
|
1610
|
+
'ASHRAE 169-2013-4A',
|
1611
|
+
'ASHRAE 169-2013-4B',
|
1612
|
+
'ASHRAE 169-2013-4C',
|
1613
|
+
'ASHRAE 169-2013-5A',
|
1614
|
+
'ASHRAE 169-2013-5B',
|
1615
|
+
'ASHRAE 169-2013-5C'
|
1616
|
+
if zone.floorArea <= OpenStudio.convert(500.0, 'ft^2', 'm^2').get
|
1617
|
+
has_erv = false
|
1618
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Energy recovery will not be modeled for the ERV serving #{zone.name}.")
|
1619
|
+
end
|
1620
|
+
end
|
1621
|
+
end
|
1622
|
+
|
1582
1623
|
oa_cfm_per_ft2 = 0.0578940512546562
|
1583
1624
|
oa_m3_per_m2 = OpenStudio.convert(OpenStudio.convert(oa_cfm_per_ft2, 'cfm', 'm^3/s').get, '1/ft^2', '1/m^2').get
|
1584
|
-
|
1625
|
+
if has_erv
|
1626
|
+
model_add_residential_erv(model, zone, oa_m3_per_m2)
|
1627
|
+
else
|
1628
|
+
model_add_residential_ventilator(model, zone, oa_m3_per_m2)
|
1629
|
+
end
|
1585
1630
|
|
1586
1631
|
# Shut-off air loop level OA intake
|
1587
1632
|
oa_controller = air_loop_hvac.airLoopHVACOutdoorAirSystem.get.getControllerOutdoorAir
|
@@ -5904,6 +5904,177 @@ class Standard
|
|
5904
5904
|
return ideal_systems
|
5905
5905
|
end
|
5906
5906
|
|
5907
|
+
# Add a residential ERV: standalone ERV that operates to provide OA,
|
5908
|
+
# used in conjuction with a system that having mechanical cooling and a heating coil
|
5909
|
+
#
|
5910
|
+
# @param model [OpenStudio::Model::Model] OpenStudio Model object
|
5911
|
+
# @param thermal_zone [OpenStudio::Model::ThermalZone] OpenStudio ThermalZone object
|
5912
|
+
# @return [OpenStudio::Model::ZoneHVACEnergyRecoveryVentilator] Standalone ERV
|
5913
|
+
def model_add_residential_erv(model,
|
5914
|
+
thermal_zone,
|
5915
|
+
min_oa_flow_m3_per_s_per_m2 = nil)
|
5916
|
+
|
5917
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Adding standalone ERV for #{thermal_zone.name}.")
|
5918
|
+
|
5919
|
+
# Determine ERR and design basis when energy recovery is required
|
5920
|
+
#
|
5921
|
+
# enthalpy_recovery_ratio = nil will trigger an ERV with no effectiveness that only provides OA
|
5922
|
+
enthalpy_recovery_ratio = nil
|
5923
|
+
climate_zone = OpenstudioStandards::Weather.model_get_climate_zone(model)
|
5924
|
+
case template
|
5925
|
+
when '90.1-2019'
|
5926
|
+
search_criteria = {
|
5927
|
+
'template' => template,
|
5928
|
+
'climate_zone' => climate_zone,
|
5929
|
+
'under_8000_hours' => false,
|
5930
|
+
'nontransient_dwelling' => true
|
5931
|
+
}
|
5932
|
+
else
|
5933
|
+
search_criteria = {
|
5934
|
+
'template' => template,
|
5935
|
+
'climate_zone' => climate_zone,
|
5936
|
+
'under_8000_hours' => false
|
5937
|
+
}
|
5938
|
+
end
|
5939
|
+
|
5940
|
+
erv_enthalpy_recovery_ratio = model_find_object(standards_data['energy_recovery'], search_criteria)
|
5941
|
+
|
5942
|
+
# Extract ERR from data lookup
|
5943
|
+
if !erv_enthalpy_recovery_ratio.nil?
|
5944
|
+
if erv_enthalpy_recovery_ratio['enthalpy_recovery_ratio'].nil? & erv_enthalpy_recovery_ratio['enthalpy_recovery_ratio_design_conditions'].nil?
|
5945
|
+
# If not included in the data, an enthalpy
|
5946
|
+
# recovery ratio (ERR) of 50% is used
|
5947
|
+
enthalpy_recovery_ratio = 0.5
|
5948
|
+
case climate_zone
|
5949
|
+
when 'ASHRAE 169-2006-6B',
|
5950
|
+
'ASHRAE 169-2013-6B',
|
5951
|
+
'ASHRAE 169-2006-7A',
|
5952
|
+
'ASHRAE 169-2013-7A',
|
5953
|
+
'ASHRAE 169-2006-7B',
|
5954
|
+
'ASHRAE 169-2013-7B',
|
5955
|
+
'ASHRAE 169-2006-8A',
|
5956
|
+
'ASHRAE 169-2013-8A',
|
5957
|
+
'ASHRAE 169-2006-8B',
|
5958
|
+
'ASHRAE 169-2013-8B'
|
5959
|
+
design_conditions = 'heating'
|
5960
|
+
else
|
5961
|
+
design_conditions = 'cooling'
|
5962
|
+
end
|
5963
|
+
else
|
5964
|
+
design_conditions = erv_enthalpy_recovery_ratio['enthalpy_recovery_ratio_design_conditions'].downcase
|
5965
|
+
enthalpy_recovery_ratio = erv_enthalpy_recovery_ratio['enthalpy_recovery_ratio']
|
5966
|
+
end
|
5967
|
+
end
|
5968
|
+
|
5969
|
+
# # Fan power with energy recovery = 0.934 W/cfm
|
5970
|
+
supply_fan = create_fan_by_name(model,
|
5971
|
+
'ERV_Supply_Fan',
|
5972
|
+
fan_name: "#{thermal_zone.name} ERV Supply Fan")
|
5973
|
+
exhaust_fan = create_fan_by_name(model,
|
5974
|
+
'ERV_Supply_Fan',
|
5975
|
+
fan_name: "#{thermal_zone.name} ERV Exhaust Fan")
|
5976
|
+
supply_fan.setMotorEfficiency(0.48)
|
5977
|
+
exhaust_fan.setMotorEfficiency(0.48)
|
5978
|
+
supply_fan.setFanTotalEfficiency(0.303158)
|
5979
|
+
exhaust_fan.setFanTotalEfficiency(0.303158)
|
5980
|
+
supply_fan.setPressureRise(270.64755)
|
5981
|
+
exhaust_fan.setPressureRise(270.64755)
|
5982
|
+
|
5983
|
+
|
5984
|
+
# Create ERV Controller
|
5985
|
+
erv_controller = OpenStudio::Model::ZoneHVACEnergyRecoveryVentilatorController.new(model)
|
5986
|
+
erv_controller.setName("#{thermal_zone.name} ERV Controller")
|
5987
|
+
erv_controller.setControlHighIndoorHumidityBasedonOutdoorHumidityRatio(false)
|
5988
|
+
|
5989
|
+
# Create heat exchanger
|
5990
|
+
heat_exchanger = OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent.new(model)
|
5991
|
+
heat_exchanger.setName("#{thermal_zone.name} ERV HX")
|
5992
|
+
heat_exchanger.setSupplyAirOutletTemperatureControl(false)
|
5993
|
+
heat_exchanger.setHeatExchangerType('Rotary')
|
5994
|
+
heat_exchanger.setEconomizerLockout(false)
|
5995
|
+
heat_exchanger.setFrostControlType('ExhaustOnly')
|
5996
|
+
heat_exchanger.setThresholdTemperature(-23.3)
|
5997
|
+
heat_exchanger.setInitialDefrostTimeFraction(0.167)
|
5998
|
+
heat_exchanger.setRateofDefrostTimeFractionIncrease(1.44)
|
5999
|
+
heat_exchanger.setAvailabilitySchedule(model_add_schedule(model, 'Always On - No Design Day'))
|
6000
|
+
heat_exchanger_air_to_air_sensible_and_latent_apply_prototype_efficiency_enthalpy_recovery_ratio(heat_exchanger, enthalpy_recovery_ratio, design_conditions, climate_zone)
|
6001
|
+
|
6002
|
+
erv = OpenStudio::Model::ZoneHVACEnergyRecoveryVentilator.new(model, heat_exchanger, supply_fan, exhaust_fan)
|
6003
|
+
erv.setName("#{thermal_zone.name} ERV")
|
6004
|
+
|
6005
|
+
erv.setController(erv_controller)
|
6006
|
+
erv.addToThermalZone(thermal_zone)
|
6007
|
+
|
6008
|
+
# Set OA requirements; Assumes a default of 55 cfm
|
6009
|
+
if min_oa_flow_m3_per_s_per_m2.nil?
|
6010
|
+
erv.setSupplyAirFlowRate(OpenStudio.convert(55.0, 'cfm', 'm^3/s').get)
|
6011
|
+
erv.setExhaustAirFlowRate(OpenStudio.convert(55.0, 'cfm', 'm^3/s').get)
|
6012
|
+
else
|
6013
|
+
erv.setVentilationRateperUnitFloorArea(min_oa_flow_m3_per_s_per_m2)
|
6014
|
+
end
|
6015
|
+
erv.setVentilationRateperOccupant(0.0)
|
6016
|
+
|
6017
|
+
# Ensure the ERV takes priority, so ventilation load is included when treated by other zonal systems
|
6018
|
+
# From EnergyPlus I/O reference:
|
6019
|
+
# "For situations where one or more equipment types has limited capacity or limited control capability, order the
|
6020
|
+
# sequence so that the most controllable piece of equipment runs last. For example, with a dedicated outdoor air
|
6021
|
+
# system (DOAS), the air terminal for the DOAS should be assigned Heating Sequence = 1 and Cooling Sequence = 1.
|
6022
|
+
# Any other equipment should be assigned sequence 2 or higher so that it will see the net load after the DOAS air
|
6023
|
+
# is added to the zone."
|
6024
|
+
thermal_zone.setCoolingPriority(erv.to_ModelObject.get, 1)
|
6025
|
+
thermal_zone.setHeatingPriority(erv.to_ModelObject.get, 1)
|
6026
|
+
|
6027
|
+
return erv
|
6028
|
+
end
|
6029
|
+
|
6030
|
+
# Add a residential ventilation: standalone unit ventilation and zone exhaust that operates to provide OA,
|
6031
|
+
# used in conjuction with a system that having mechanical cooling and a heating coil
|
6032
|
+
#
|
6033
|
+
# @param model [OpenStudio::Model::Model] OpenStudio Model object
|
6034
|
+
# @param thermal_zone [OpenStudio::Model::ThermalZone] OpenStudio ThermalZone object
|
6035
|
+
# @return [OpenStudio::Model::ZoneHVACUnitVentilator] Standalone Unit Ventilator
|
6036
|
+
def model_add_residential_ventilator(model,
|
6037
|
+
thermal_zone,
|
6038
|
+
min_oa_flow_m3_per_s_per_m2 = nil)
|
6039
|
+
|
6040
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Adding standalone unit ventilator for #{thermal_zone.name}.")
|
6041
|
+
|
6042
|
+
# Fan power with no energy recovery = 0.806 W/cfm
|
6043
|
+
supply_fan = create_fan_by_name(model,
|
6044
|
+
'ERV_Supply_Fan',
|
6045
|
+
fan_name: "#{thermal_zone.name} Ventilator Supply Fan")
|
6046
|
+
supply_fan.setMotorEfficiency(0.48)
|
6047
|
+
supply_fan.setFanTotalEfficiency(0.303158)
|
6048
|
+
supply_fan.setPressureRise(233.6875)
|
6049
|
+
|
6050
|
+
unit_ventilator = OpenStudio::Model::ZoneHVACUnitVentilator.new(model, supply_fan)
|
6051
|
+
unit_ventilator.setName("#{thermal_zone.name} Unit Ventilator")
|
6052
|
+
unit_ventilator.addToThermalZone(thermal_zone)
|
6053
|
+
fan_zone_exhaust = create_fan_zone_exhaust(model,
|
6054
|
+
fan_name: "#{thermal_zone.name} Exhaust Fan",
|
6055
|
+
fan_efficiency: 0.303158,
|
6056
|
+
pressure_rise: 233.6875)
|
6057
|
+
|
6058
|
+
# Set OA requirements; Assumes a default of 55 cfm
|
6059
|
+
if min_oa_flow_m3_per_s_per_m2.nil?
|
6060
|
+
unit_ventilator.setMaximumSupplyAirFlowRate(OpenStudio.convert(55.0, 'cfm', 'm^3/s').get)
|
6061
|
+
fan_zone_exhaust.setMaximumFlowRate(OpenStudio.convert(55.0, 'cfm', 'm^3/s').get)
|
6062
|
+
else
|
6063
|
+
unit_ventilator.setMaximumSupplyAirFlowRate(min_oa_flow_m3_per_s_per_m2)
|
6064
|
+
fan_zone_exhaust.setMaximumFlowRate(min_oa_flow_m3_per_s_per_m2)
|
6065
|
+
end
|
6066
|
+
|
6067
|
+
# Ensure the unit ventilator takes priority, so ventilation load is included when treated by other zonal systems
|
6068
|
+
# From EnergyPlus I/O reference:
|
6069
|
+
# "For situations where one or more equipment types has limited capacity or limited control capability, order the
|
6070
|
+
# sequence so that the most controllable piece of equipment runs last. For example, with a dedicated outdoor air
|
6071
|
+
# system (DOAS), the air terminal for the DOAS should be assigned Heating Sequence = 1 and Cooling Sequence = 1.
|
6072
|
+
# Any other equipment should be assigned sequence 2 or higher so that it will see the net load after the DOAS air
|
6073
|
+
# is added to the zone."
|
6074
|
+
thermal_zone.setCoolingPriority(unit_ventilator.to_ModelObject.get, 1)
|
6075
|
+
thermal_zone.setHeatingPriority(unit_ventilator.to_ModelObject.get, 1)
|
6076
|
+
end
|
6077
|
+
|
5907
6078
|
# Adds an exhaust fan to each zone.
|
5908
6079
|
#
|
5909
6080
|
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
@@ -7295,182 +7466,4 @@ class Standard
|
|
7295
7466
|
rename_air_loop_nodes(model)
|
7296
7467
|
rename_plant_loop_nodes(model)
|
7297
7468
|
end
|
7298
|
-
|
7299
|
-
# Add a residential ERV: standalone ERV that operates to provide OA,
|
7300
|
-
# use in conjuction witha system that having mechanical cooling and
|
7301
|
-
# a heating coil
|
7302
|
-
#
|
7303
|
-
# @param model [OpenStudio::Model::Model] OpenStudio Model object
|
7304
|
-
# @param thermal_zone [OpenStudio::Model::ThermalZone] OpenStudio ThermalZone object
|
7305
|
-
# @param climate_zone [String] Climate zone
|
7306
|
-
# @param energy_recovery [Boolean] Indicates if the ERV is to recover energy, if false, only provides OA
|
7307
|
-
# @return [OpenStudio::Model::ZoneHVACEnergyRecoveryVentilator] Standalone ERV
|
7308
|
-
def model_add_residential_erv(model,
|
7309
|
-
thermal_zone,
|
7310
|
-
climate_zone,
|
7311
|
-
energy_recovery,
|
7312
|
-
min_oa_flow_m3_per_s_per_m2 = nil)
|
7313
|
-
|
7314
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Adding standalone ERV for #{thermal_zone.name}.")
|
7315
|
-
|
7316
|
-
# Exception 3 to 6.5.6.1.1
|
7317
|
-
case template
|
7318
|
-
when '90.1-2019'
|
7319
|
-
case climate_zone
|
7320
|
-
when 'ASHRAE 169-2006-0A',
|
7321
|
-
'ASHRAE 169-2006-0B',
|
7322
|
-
'ASHRAE 169-2006-1A',
|
7323
|
-
'ASHRAE 169-2006-1B',
|
7324
|
-
'ASHRAE 169-2006-2A',
|
7325
|
-
'ASHRAE 169-2006-2B',
|
7326
|
-
'ASHRAE 169-2006-3A',
|
7327
|
-
'ASHRAE 169-2006-3B',
|
7328
|
-
'ASHRAE 169-2006-3C',
|
7329
|
-
'ASHRAE 169-2006-4A',
|
7330
|
-
'ASHRAE 169-2006-4B',
|
7331
|
-
'ASHRAE 169-2006-4C',
|
7332
|
-
'ASHRAE 169-2006-5A',
|
7333
|
-
'ASHRAE 169-2006-5B',
|
7334
|
-
'ASHRAE 169-2006-5C',
|
7335
|
-
'ASHRAE 169-2013-0A',
|
7336
|
-
'ASHRAE 169-2013-0B',
|
7337
|
-
'ASHRAE 169-2013-1A',
|
7338
|
-
'ASHRAE 169-2013-1B',
|
7339
|
-
'ASHRAE 169-2013-2A',
|
7340
|
-
'ASHRAE 169-2013-2B',
|
7341
|
-
'ASHRAE 169-2013-3A',
|
7342
|
-
'ASHRAE 169-2013-3B',
|
7343
|
-
'ASHRAE 169-2013-3C',
|
7344
|
-
'ASHRAE 169-2013-4A',
|
7345
|
-
'ASHRAE 169-2013-4B',
|
7346
|
-
'ASHRAE 169-2013-4C',
|
7347
|
-
'ASHRAE 169-2013-5A',
|
7348
|
-
'ASHRAE 169-2013-5B',
|
7349
|
-
'ASHRAE 169-2013-5C'
|
7350
|
-
if thermal_zone.floorArea <= OpenStudio.convert(500.0, 'ft^2', 'm^2').get
|
7351
|
-
energy_recovery = false
|
7352
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Energy recovery will not be modeled for the ERV serving #{thermal_zone.name}.")
|
7353
|
-
end
|
7354
|
-
end
|
7355
|
-
end
|
7356
|
-
|
7357
|
-
# Determine ERR and design basis when energy recovery is required
|
7358
|
-
#
|
7359
|
-
# enthalpy_recovery_ratio = nil will trigger an ERV with no effectiveness that only provides OA
|
7360
|
-
enthalpy_recovery_ratio = nil
|
7361
|
-
if energy_recovery
|
7362
|
-
case template
|
7363
|
-
when '90.1-2019'
|
7364
|
-
search_criteria = {
|
7365
|
-
'template' => template,
|
7366
|
-
'climate_zone' => climate_zone,
|
7367
|
-
'under_8000_hours' => false,
|
7368
|
-
'nontransient_dwelling' => true
|
7369
|
-
}
|
7370
|
-
else
|
7371
|
-
search_criteria = {
|
7372
|
-
'template' => template,
|
7373
|
-
'climate_zone' => climate_zone,
|
7374
|
-
'under_8000_hours' => false
|
7375
|
-
}
|
7376
|
-
end
|
7377
|
-
|
7378
|
-
erv_enthalpy_recovery_ratio = model_find_object(standards_data['energy_recovery'], search_criteria)
|
7379
|
-
|
7380
|
-
# Extract ERR from data lookup
|
7381
|
-
if !erv_enthalpy_recovery_ratio.nil?
|
7382
|
-
if erv_enthalpy_recovery_ratio['enthalpy_recovery_ratio'].nil? & erv_enthalpy_recovery_ratio['enthalpy_recovery_ratio_design_conditions'].nil?
|
7383
|
-
# If not included in the data, an enthalpy
|
7384
|
-
# recovery ratio (ERR) of 50% is used
|
7385
|
-
enthalpy_recovery_ratio = 0.5
|
7386
|
-
case climate_zone
|
7387
|
-
when 'ASHRAE 169-2006-6B',
|
7388
|
-
'ASHRAE 169-2013-6B',
|
7389
|
-
'ASHRAE 169-2006-7A',
|
7390
|
-
'ASHRAE 169-2013-7A',
|
7391
|
-
'ASHRAE 169-2006-7B',
|
7392
|
-
'ASHRAE 169-2013-7B',
|
7393
|
-
'ASHRAE 169-2006-8A',
|
7394
|
-
'ASHRAE 169-2013-8A',
|
7395
|
-
'ASHRAE 169-2006-8B',
|
7396
|
-
'ASHRAE 169-2013-8B'
|
7397
|
-
design_conditions = 'heating'
|
7398
|
-
else
|
7399
|
-
design_conditions = 'cooling'
|
7400
|
-
end
|
7401
|
-
else
|
7402
|
-
design_conditions = erv_enthalpy_recovery_ratio['enthalpy_recovery_ratio_design_conditions'].downcase
|
7403
|
-
enthalpy_recovery_ratio = erv_enthalpy_recovery_ratio['enthalpy_recovery_ratio']
|
7404
|
-
end
|
7405
|
-
end
|
7406
|
-
end
|
7407
|
-
|
7408
|
-
# Create fans
|
7409
|
-
#
|
7410
|
-
# Fan power:
|
7411
|
-
# No energy recovery = 0.806 W/cfm
|
7412
|
-
# Energy recovery = 0.934 W/cfm
|
7413
|
-
supply_fan = create_fan_by_name(model,
|
7414
|
-
'ERV_Supply_Fan',
|
7415
|
-
fan_name: "#{thermal_zone.name} ERV Supply Fan")
|
7416
|
-
exhaust_fan = create_fan_by_name(model,
|
7417
|
-
'ERV_Supply_Fan',
|
7418
|
-
fan_name: "#{thermal_zone.name} ERV Exhaust Fan")
|
7419
|
-
supply_fan.setMotorEfficiency(0.48)
|
7420
|
-
exhaust_fan.setMotorEfficiency(0.48)
|
7421
|
-
supply_fan.setFanTotalEfficiency(0.303158)
|
7422
|
-
exhaust_fan.setFanTotalEfficiency(0.303158)
|
7423
|
-
if energy_recovery
|
7424
|
-
supply_fan.setPressureRise(270.64755)
|
7425
|
-
exhaust_fan.setPressureRise(270.64755)
|
7426
|
-
else
|
7427
|
-
supply_fan.setPressureRise(233.6875)
|
7428
|
-
exhaust_fan.setPressureRise(233.6875)
|
7429
|
-
end
|
7430
|
-
|
7431
|
-
# Create ERV Controller
|
7432
|
-
erv_controller = OpenStudio::Model::ZoneHVACEnergyRecoveryVentilatorController.new(model)
|
7433
|
-
erv_controller.setName("#{thermal_zone.name} ERV Controller")
|
7434
|
-
erv_controller.setControlHighIndoorHumidityBasedonOutdoorHumidityRatio(false)
|
7435
|
-
|
7436
|
-
# Create heat exchanger
|
7437
|
-
heat_exchanger = OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent.new(model)
|
7438
|
-
heat_exchanger.setName("#{thermal_zone.name} ERV HX")
|
7439
|
-
heat_exchanger.setSupplyAirOutletTemperatureControl(false)
|
7440
|
-
heat_exchanger.setHeatExchangerType('Rotary')
|
7441
|
-
heat_exchanger.setEconomizerLockout(false)
|
7442
|
-
heat_exchanger.setFrostControlType('ExhaustOnly')
|
7443
|
-
heat_exchanger.setThresholdTemperature(-23.3)
|
7444
|
-
heat_exchanger.setInitialDefrostTimeFraction(0.167)
|
7445
|
-
heat_exchanger.setRateofDefrostTimeFractionIncrease(1.44)
|
7446
|
-
heat_exchanger.setAvailabilitySchedule(model_add_schedule(model, 'Always On - No Design Day'))
|
7447
|
-
heat_exchanger_air_to_air_sensible_and_latent_apply_prototype_efficiency_enthalpy_recovery_ratio(heat_exchanger, enthalpy_recovery_ratio, design_conditions, climate_zone)
|
7448
|
-
|
7449
|
-
erv = OpenStudio::Model::ZoneHVACEnergyRecoveryVentilator.new(model, heat_exchanger, supply_fan, exhaust_fan)
|
7450
|
-
erv.setName("#{thermal_zone.name} ERV")
|
7451
|
-
|
7452
|
-
erv.setController(erv_controller)
|
7453
|
-
erv.addToThermalZone(thermal_zone)
|
7454
|
-
|
7455
|
-
# Set OA requirements; Assumes a default of 55 cfm
|
7456
|
-
if min_oa_flow_m3_per_s_per_m2.nil?
|
7457
|
-
erv.setSupplyAirFlowRate(OpenStudio.convert(55.0, 'cfm', 'm^3/s').get)
|
7458
|
-
erv.setExhaustAirFlowRate(OpenStudio.convert(55.0, 'cfm', 'm^3/s').get)
|
7459
|
-
else
|
7460
|
-
erv.setVentilationRateperUnitFloorArea(min_oa_flow_m3_per_s_per_m2)
|
7461
|
-
end
|
7462
|
-
erv.setVentilationRateperOccupant(0.0)
|
7463
|
-
|
7464
|
-
# Ensure the ERV takes priority, so ventilation load is included when treated by other zonal systems
|
7465
|
-
# From EnergyPlus I/O reference:
|
7466
|
-
# "For situations where one or more equipment types has limited capacity or limited control capability, order the
|
7467
|
-
# sequence so that the most controllable piece of equipment runs last. For example, with a dedicated outdoor air
|
7468
|
-
# system (DOAS), the air terminal for the DOAS should be assigned Heating Sequence = 1 and Cooling Sequence = 1.
|
7469
|
-
# Any other equipment should be assigned sequence 2 or higher so that it will see the net load after the DOAS air
|
7470
|
-
# is added to the zone."
|
7471
|
-
thermal_zone.setCoolingPriority(erv.to_ModelObject.get, 1)
|
7472
|
-
thermal_zone.setHeatingPriority(erv.to_ModelObject.get, 1)
|
7473
|
-
|
7474
|
-
return erv
|
7475
|
-
end
|
7476
7469
|
end
|
@@ -1341,6 +1341,11 @@ module OpenstudioStandards
|
|
1341
1341
|
|
1342
1342
|
# Tell EnergyPlus to interpolate schedules to timestep so that it doesn't have to be done in this code
|
1343
1343
|
# sch_day.setInterpolatetoTimestep(true)
|
1344
|
+
# if model.version < OpenStudio::VersionString.new('3.8.0')
|
1345
|
+
# day_sch.setInterpolatetoTimestep(true)
|
1346
|
+
# else
|
1347
|
+
# day_sch.setInterpolatetoTimestep('Average')
|
1348
|
+
# end
|
1344
1349
|
|
1345
1350
|
return schedule_day
|
1346
1351
|
end
|
@@ -2791,6 +2791,11 @@ class Standard
|
|
2791
2791
|
day_sch = sch_ruleset.defaultDaySchedule
|
2792
2792
|
day_sch.setName("#{schedule_name} Default")
|
2793
2793
|
model_add_vals_to_sch(model, day_sch, sch_type, values)
|
2794
|
+
if model.version < OpenStudio::VersionString.new('3.8.0')
|
2795
|
+
day_sch.setInterpolatetoTimestep(false)
|
2796
|
+
else
|
2797
|
+
day_sch.setInterpolatetoTimestep('No')
|
2798
|
+
end
|
2794
2799
|
end
|
2795
2800
|
|
2796
2801
|
# Winter Design Day
|
@@ -2800,6 +2805,11 @@ class Standard
|
|
2800
2805
|
day_sch = sch_ruleset.winterDesignDaySchedule
|
2801
2806
|
day_sch.setName("#{schedule_name} Winter Design Day")
|
2802
2807
|
model_add_vals_to_sch(model, day_sch, sch_type, values)
|
2808
|
+
if model.version < OpenStudio::VersionString.new('3.8.0')
|
2809
|
+
day_sch.setInterpolatetoTimestep(false)
|
2810
|
+
else
|
2811
|
+
day_sch.setInterpolatetoTimestep('No')
|
2812
|
+
end
|
2803
2813
|
end
|
2804
2814
|
|
2805
2815
|
# Summer Design Day
|
@@ -2809,6 +2819,11 @@ class Standard
|
|
2809
2819
|
day_sch = sch_ruleset.summerDesignDaySchedule
|
2810
2820
|
day_sch.setName("#{schedule_name} Summer Design Day")
|
2811
2821
|
model_add_vals_to_sch(model, day_sch, sch_type, values)
|
2822
|
+
if model.version < OpenStudio::VersionString.new('3.8.0')
|
2823
|
+
day_sch.setInterpolatetoTimestep(false)
|
2824
|
+
else
|
2825
|
+
day_sch.setInterpolatetoTimestep('No')
|
2826
|
+
end
|
2812
2827
|
end
|
2813
2828
|
|
2814
2829
|
# Other days (weekdays, weekends, etc)
|
@@ -2827,6 +2842,11 @@ class Standard
|
|
2827
2842
|
day_sch = sch_rule.daySchedule
|
2828
2843
|
day_sch.setName("#{schedule_name} #{day_types} Day")
|
2829
2844
|
model_add_vals_to_sch(model, day_sch, sch_type, values)
|
2845
|
+
if model.version < OpenStudio::VersionString.new('3.8.0')
|
2846
|
+
day_sch.setInterpolatetoTimestep(false)
|
2847
|
+
else
|
2848
|
+
day_sch.setInterpolatetoTimestep('No')
|
2849
|
+
end
|
2830
2850
|
|
2831
2851
|
# Set the dates when the rule applies
|
2832
2852
|
sch_rule.setStartDate(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(start_date.month.to_i), start_date.day.to_i))
|
@@ -1816,19 +1816,19 @@ class NECB2011
|
|
1816
1816
|
# Determine if space is heated or cooled via spacetype heating or cooling setpoints also checking if the space is
|
1817
1817
|
# a plenum by checking if there is a hvac system associtated with it
|
1818
1818
|
if sp_type_info['heating_setpoint_schedule'].nil?
|
1819
|
-
heated =
|
1819
|
+
heated = false
|
1820
1820
|
else
|
1821
|
-
heated =
|
1821
|
+
heated = true
|
1822
1822
|
end
|
1823
1823
|
if sp_type_info['cooling_setpoint_schedule'].nil?
|
1824
|
-
cooled =
|
1824
|
+
cooled = false
|
1825
1825
|
else
|
1826
|
-
cooled =
|
1826
|
+
cooled = true
|
1827
1827
|
end
|
1828
1828
|
if (sp_type_info['necb_hvac_system_selection_type'] == '- undefined -') || /undefined/.match(sp_type_info['necb_hvac_system_selection_type'])
|
1829
|
-
not_plenum =
|
1829
|
+
not_plenum = false
|
1830
1830
|
else
|
1831
|
-
not_plenum =
|
1831
|
+
not_plenum = true
|
1832
1832
|
end
|
1833
1833
|
# If the spaces are heated or cooled and are not a plenum then continue
|
1834
1834
|
if (heated || cooled) && not_plenum
|
@@ -224,10 +224,6 @@ class NECB2011
|
|
224
224
|
qaqc = {}
|
225
225
|
qaqc[:sql_data] = get_sql_tables_to_json(model)
|
226
226
|
error_warning = []
|
227
|
-
qaqc[:os_standards_revision] = OpenstudioStandards.git_revision
|
228
|
-
qaqc[:os_standards_version] = OpenstudioStandards::VERSION
|
229
|
-
qaqc[:openstudio_version] = os_version.strip
|
230
|
-
qaqc[:energyplus_version] = eplus_version.strip
|
231
227
|
# Store Building data.
|
232
228
|
qaqc[:building] = {}
|
233
229
|
qaqc[:building][:name] = model.building.get.name.get
|
@@ -541,7 +537,7 @@ class NECB2011
|
|
541
537
|
constructions = []
|
542
538
|
outdoor_subsurfaces.each { |surface| constructions << surface.construction.get }
|
543
539
|
ext_const_base = Hash.new(0)
|
544
|
-
constructions.each { |name| ext_const_base[name] += 1 }
|
540
|
+
constructions.each { |name| ext_const_base[name.to_Construction.get] += 1 }
|
545
541
|
# iterate thought each construction and get store data
|
546
542
|
ext_const_base.sort.each do |construction, count|
|
547
543
|
construction_info = {}
|
@@ -558,7 +554,7 @@ class NECB2011
|
|
558
554
|
constructions = []
|
559
555
|
outdoor_surfaces.each { |surface| constructions << surface.construction.get }
|
560
556
|
ext_const_base = Hash.new(0)
|
561
|
-
constructions.each { |name| ext_const_base[name] += 1 }
|
557
|
+
constructions.each { |name| ext_const_base[name.to_Construction.get] += 1 }
|
562
558
|
# iterate thought each construction and get store data
|
563
559
|
ext_const_base.sort.each do |construction, count|
|
564
560
|
construction_info = {}
|
@@ -575,7 +571,7 @@ class NECB2011
|
|
575
571
|
constructions = []
|
576
572
|
ground_surfaces.each { |surface| constructions << surface.construction.get }
|
577
573
|
ext_const_base = Hash.new(0)
|
578
|
-
constructions.each { |name| ext_const_base[name] += 1 }
|
574
|
+
constructions.each { |name| ext_const_base[name.to_Construction.get] += 1 }
|
579
575
|
# iterate thought each construction and get store data
|
580
576
|
ext_const_base.sort.each do |construction, count|
|
581
577
|
construction_info = {}
|
@@ -112,7 +112,7 @@ class BTAPDatapoint
|
|
112
112
|
epw_file = @options[:epw_file]
|
113
113
|
epw_dir = nil
|
114
114
|
local_epw_file_path = File.join(input_folder_cache,@options[:epw_file])
|
115
|
-
epw_dir = input_folder_cache if File.
|
115
|
+
epw_dir = input_folder_cache if File.exist? local_epw_file_path
|
116
116
|
weather_file_path = OpenstudioStandards::Weather.get_standards_weather_file_path(epw_file)
|
117
117
|
OpenstudioStandards::Weather.model_set_building_location(model, weather_file_path: weather_file_path)
|
118
118
|
else
|
@@ -193,6 +193,11 @@ Standard.class_eval do
|
|
193
193
|
sim_control.setDoHVACSizingSimulationforSizingPeriods(true)
|
194
194
|
sim_control.setMaximumNumberofHVACSizingSimulationPasses(1)
|
195
195
|
end
|
196
|
+
if model.version >= OpenStudio::VersionString.new('3.8.0')
|
197
|
+
sim_control.setDoZoneSizingCalculation(true)
|
198
|
+
sim_control.setDoSystemSizingCalculation(true)
|
199
|
+
sim_control.setDoPlantSizingCalculation(true)
|
200
|
+
end
|
196
201
|
|
197
202
|
# check that all zones have surfaces.
|
198
203
|
raise 'Error: Sizing Run Failed. Thermal Zones with no surfaces exist.' unless model_do_all_zones_have_surfaces?(model)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openstudio-standards
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.0
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Adams
|
@@ -39,274 +39,288 @@ authors:
|
|
39
39
|
autorequire:
|
40
40
|
bindir: bin
|
41
41
|
cert_chain: []
|
42
|
-
date: 2024-
|
42
|
+
date: 2024-05-10 00:00:00.000000000 Z
|
43
43
|
dependencies:
|
44
44
|
- !ruby/object:Gem::Dependency
|
45
|
-
name:
|
45
|
+
name: bundler
|
46
46
|
requirement: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
|
-
- -
|
48
|
+
- - "~>"
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version:
|
50
|
+
version: 2.4.10
|
51
51
|
type: :development
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
54
54
|
requirements:
|
55
|
-
- -
|
55
|
+
- - "~>"
|
56
56
|
- !ruby/object:Gem::Version
|
57
|
-
version:
|
57
|
+
version: 2.4.10
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
59
|
+
name: nokogiri
|
60
60
|
requirement: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
|
-
- - "
|
62
|
+
- - "~>"
|
63
63
|
- !ruby/object:Gem::Version
|
64
|
-
version: '
|
64
|
+
version: '1.16'
|
65
65
|
type: :development
|
66
66
|
prerelease: false
|
67
67
|
version_requirements: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
|
-
- - "
|
69
|
+
- - "~>"
|
70
70
|
- !ruby/object:Gem::Version
|
71
|
-
version: '
|
71
|
+
version: '1.16'
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
|
-
name:
|
73
|
+
name: parallel_tests
|
74
74
|
requirement: !ruby/object:Gem::Requirement
|
75
75
|
requirements:
|
76
|
-
- - "
|
76
|
+
- - "~>"
|
77
77
|
- !ruby/object:Gem::Version
|
78
|
-
version:
|
78
|
+
version: 3.7.0
|
79
79
|
type: :development
|
80
80
|
prerelease: false
|
81
81
|
version_requirements: !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
|
-
- - "
|
83
|
+
- - "~>"
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
version:
|
85
|
+
version: 3.7.0
|
86
86
|
- !ruby/object:Gem::Dependency
|
87
|
-
name:
|
87
|
+
name: aes
|
88
88
|
requirement: !ruby/object:Gem::Requirement
|
89
89
|
requirements:
|
90
|
-
- -
|
90
|
+
- - '='
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version:
|
92
|
+
version: 0.5.0
|
93
93
|
type: :development
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- -
|
97
|
+
- - '='
|
98
98
|
- !ruby/object:Gem::Version
|
99
|
-
version:
|
99
|
+
version: 0.5.0
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
|
-
name:
|
101
|
+
name: codecov
|
102
102
|
requirement: !ruby/object:Gem::Requirement
|
103
103
|
requirements:
|
104
|
-
- - "
|
104
|
+
- - ">="
|
105
105
|
- !ruby/object:Gem::Version
|
106
|
-
version: '
|
106
|
+
version: '0'
|
107
107
|
type: :development
|
108
108
|
prerelease: false
|
109
109
|
version_requirements: !ruby/object:Gem::Requirement
|
110
110
|
requirements:
|
111
|
-
- - "
|
111
|
+
- - ">="
|
112
112
|
- !ruby/object:Gem::Version
|
113
|
-
version: '
|
113
|
+
version: '0'
|
114
114
|
- !ruby/object:Gem::Dependency
|
115
|
-
name:
|
115
|
+
name: google_drive
|
116
116
|
requirement: !ruby/object:Gem::Requirement
|
117
117
|
requirements:
|
118
|
-
- - "
|
118
|
+
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
|
-
version:
|
120
|
+
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
123
|
version_requirements: !ruby/object:Gem::Requirement
|
124
124
|
requirements:
|
125
|
-
- - "
|
125
|
+
- - ">="
|
126
126
|
- !ruby/object:Gem::Version
|
127
|
-
version:
|
127
|
+
version: '0'
|
128
128
|
- !ruby/object:Gem::Dependency
|
129
|
-
name:
|
129
|
+
name: minitest
|
130
130
|
requirement: !ruby/object:Gem::Requirement
|
131
131
|
requirements:
|
132
132
|
- - "~>"
|
133
133
|
- !ruby/object:Gem::Version
|
134
|
-
version:
|
134
|
+
version: 5.14.0
|
135
135
|
type: :development
|
136
136
|
prerelease: false
|
137
137
|
version_requirements: !ruby/object:Gem::Requirement
|
138
138
|
requirements:
|
139
139
|
- - "~>"
|
140
140
|
- !ruby/object:Gem::Version
|
141
|
-
version:
|
141
|
+
version: 5.14.0
|
142
142
|
- !ruby/object:Gem::Dependency
|
143
|
-
name:
|
143
|
+
name: minitest-ci
|
144
144
|
requirement: !ruby/object:Gem::Requirement
|
145
145
|
requirements:
|
146
|
-
- - "
|
146
|
+
- - ">="
|
147
147
|
- !ruby/object:Gem::Version
|
148
|
-
version: '0
|
148
|
+
version: '0'
|
149
149
|
type: :development
|
150
150
|
prerelease: false
|
151
151
|
version_requirements: !ruby/object:Gem::Requirement
|
152
152
|
requirements:
|
153
|
-
- - "
|
153
|
+
- - ">="
|
154
154
|
- !ruby/object:Gem::Version
|
155
|
-
version: '0
|
155
|
+
version: '0'
|
156
156
|
- !ruby/object:Gem::Dependency
|
157
|
-
name:
|
157
|
+
name: minitest-parallel_fork
|
158
158
|
requirement: !ruby/object:Gem::Requirement
|
159
159
|
requirements:
|
160
|
-
- -
|
160
|
+
- - ">="
|
161
161
|
- !ruby/object:Gem::Version
|
162
|
-
version: 0
|
162
|
+
version: '0'
|
163
163
|
type: :development
|
164
164
|
prerelease: false
|
165
165
|
version_requirements: !ruby/object:Gem::Requirement
|
166
166
|
requirements:
|
167
|
-
- -
|
167
|
+
- - ">="
|
168
168
|
- !ruby/object:Gem::Version
|
169
|
-
version: 0
|
169
|
+
version: '0'
|
170
170
|
- !ruby/object:Gem::Dependency
|
171
|
-
name:
|
171
|
+
name: minitest-reporters
|
172
172
|
requirement: !ruby/object:Gem::Requirement
|
173
173
|
requirements:
|
174
174
|
- - "~>"
|
175
175
|
- !ruby/object:Gem::Version
|
176
|
-
version:
|
176
|
+
version: 1.4.2
|
177
177
|
type: :development
|
178
178
|
prerelease: false
|
179
179
|
version_requirements: !ruby/object:Gem::Requirement
|
180
180
|
requirements:
|
181
181
|
- - "~>"
|
182
182
|
- !ruby/object:Gem::Version
|
183
|
-
version:
|
183
|
+
version: 1.4.2
|
184
184
|
- !ruby/object:Gem::Dependency
|
185
|
-
name:
|
185
|
+
name: openstudio-api-stubs
|
186
186
|
requirement: !ruby/object:Gem::Requirement
|
187
187
|
requirements:
|
188
|
-
- - "
|
188
|
+
- - ">="
|
189
189
|
- !ruby/object:Gem::Version
|
190
|
-
version:
|
190
|
+
version: '0'
|
191
191
|
type: :development
|
192
192
|
prerelease: false
|
193
193
|
version_requirements: !ruby/object:Gem::Requirement
|
194
194
|
requirements:
|
195
|
-
- - "
|
195
|
+
- - ">="
|
196
196
|
- !ruby/object:Gem::Version
|
197
|
-
version:
|
197
|
+
version: '0'
|
198
198
|
- !ruby/object:Gem::Dependency
|
199
|
-
name:
|
199
|
+
name: rake
|
200
200
|
requirement: !ruby/object:Gem::Requirement
|
201
201
|
requirements:
|
202
202
|
- - "~>"
|
203
203
|
- !ruby/object:Gem::Version
|
204
|
-
version: '
|
204
|
+
version: '13.0'
|
205
205
|
type: :development
|
206
206
|
prerelease: false
|
207
207
|
version_requirements: !ruby/object:Gem::Requirement
|
208
208
|
requirements:
|
209
209
|
- - "~>"
|
210
210
|
- !ruby/object:Gem::Version
|
211
|
-
version: '
|
211
|
+
version: '13.0'
|
212
212
|
- !ruby/object:Gem::Dependency
|
213
|
-
name:
|
213
|
+
name: rest-client
|
214
214
|
requirement: !ruby/object:Gem::Requirement
|
215
215
|
requirements:
|
216
|
-
- - "
|
216
|
+
- - "~>"
|
217
217
|
- !ruby/object:Gem::Version
|
218
|
-
version:
|
218
|
+
version: 2.0.2
|
219
219
|
type: :development
|
220
220
|
prerelease: false
|
221
221
|
version_requirements: !ruby/object:Gem::Requirement
|
222
222
|
requirements:
|
223
|
-
- - "
|
223
|
+
- - "~>"
|
224
224
|
- !ruby/object:Gem::Version
|
225
|
-
version:
|
225
|
+
version: 2.0.2
|
226
226
|
- !ruby/object:Gem::Dependency
|
227
|
-
name:
|
227
|
+
name: roo
|
228
228
|
requirement: !ruby/object:Gem::Requirement
|
229
229
|
requirements:
|
230
|
-
- -
|
230
|
+
- - '='
|
231
231
|
- !ruby/object:Gem::Version
|
232
|
-
version:
|
232
|
+
version: 2.7.1
|
233
233
|
type: :development
|
234
234
|
prerelease: false
|
235
235
|
version_requirements: !ruby/object:Gem::Requirement
|
236
236
|
requirements:
|
237
|
-
- -
|
237
|
+
- - '='
|
238
238
|
- !ruby/object:Gem::Version
|
239
|
-
version:
|
239
|
+
version: 2.7.1
|
240
240
|
- !ruby/object:Gem::Dependency
|
241
|
-
name:
|
241
|
+
name: rubocop
|
242
242
|
requirement: !ruby/object:Gem::Requirement
|
243
243
|
requirements:
|
244
|
-
- -
|
244
|
+
- - '='
|
245
245
|
- !ruby/object:Gem::Version
|
246
|
-
version: '
|
246
|
+
version: '1.50'
|
247
247
|
type: :development
|
248
248
|
prerelease: false
|
249
249
|
version_requirements: !ruby/object:Gem::Requirement
|
250
250
|
requirements:
|
251
|
-
- -
|
251
|
+
- - '='
|
252
252
|
- !ruby/object:Gem::Version
|
253
|
-
version: '
|
253
|
+
version: '1.50'
|
254
254
|
- !ruby/object:Gem::Dependency
|
255
|
-
name:
|
255
|
+
name: rubocop-checkstyle_formatter
|
256
256
|
requirement: !ruby/object:Gem::Requirement
|
257
257
|
requirements:
|
258
|
-
- -
|
258
|
+
- - "~>"
|
259
259
|
- !ruby/object:Gem::Version
|
260
|
-
version:
|
260
|
+
version: 0.6.0
|
261
261
|
type: :development
|
262
262
|
prerelease: false
|
263
263
|
version_requirements: !ruby/object:Gem::Requirement
|
264
264
|
requirements:
|
265
|
-
- -
|
265
|
+
- - "~>"
|
266
266
|
- !ruby/object:Gem::Version
|
267
|
-
version:
|
267
|
+
version: 0.6.0
|
268
268
|
- !ruby/object:Gem::Dependency
|
269
|
-
name:
|
269
|
+
name: ruby-progressbar
|
270
270
|
requirement: !ruby/object:Gem::Requirement
|
271
271
|
requirements:
|
272
|
-
- -
|
272
|
+
- - ">="
|
273
273
|
- !ruby/object:Gem::Version
|
274
|
-
version: 0
|
274
|
+
version: '0'
|
275
275
|
type: :development
|
276
276
|
prerelease: false
|
277
277
|
version_requirements: !ruby/object:Gem::Requirement
|
278
278
|
requirements:
|
279
|
-
- -
|
279
|
+
- - ">="
|
280
280
|
- !ruby/object:Gem::Version
|
281
|
-
version: 0
|
281
|
+
version: '0'
|
282
282
|
- !ruby/object:Gem::Dependency
|
283
|
-
name:
|
283
|
+
name: rubyXL
|
284
|
+
requirement: !ruby/object:Gem::Requirement
|
285
|
+
requirements:
|
286
|
+
- - "~>"
|
287
|
+
- !ruby/object:Gem::Version
|
288
|
+
version: '3.4'
|
289
|
+
type: :development
|
290
|
+
prerelease: false
|
291
|
+
version_requirements: !ruby/object:Gem::Requirement
|
292
|
+
requirements:
|
293
|
+
- - "~>"
|
294
|
+
- !ruby/object:Gem::Version
|
295
|
+
version: '3.4'
|
296
|
+
- !ruby/object:Gem::Dependency
|
297
|
+
name: simplecov
|
284
298
|
requirement: !ruby/object:Gem::Requirement
|
285
299
|
requirements:
|
286
300
|
- - '='
|
287
301
|
- !ruby/object:Gem::Version
|
288
|
-
version:
|
302
|
+
version: 0.22.0
|
289
303
|
type: :development
|
290
304
|
prerelease: false
|
291
305
|
version_requirements: !ruby/object:Gem::Requirement
|
292
306
|
requirements:
|
293
307
|
- - '='
|
294
308
|
- !ruby/object:Gem::Version
|
295
|
-
version:
|
309
|
+
version: 0.22.0
|
296
310
|
- !ruby/object:Gem::Dependency
|
297
|
-
name:
|
311
|
+
name: yard
|
298
312
|
requirement: !ruby/object:Gem::Requirement
|
299
313
|
requirements:
|
300
|
-
- - "
|
314
|
+
- - "~>"
|
301
315
|
- !ruby/object:Gem::Version
|
302
|
-
version: '0'
|
316
|
+
version: '0.9'
|
303
317
|
type: :development
|
304
318
|
prerelease: false
|
305
319
|
version_requirements: !ruby/object:Gem::Requirement
|
306
320
|
requirements:
|
307
|
-
- - "
|
321
|
+
- - "~>"
|
308
322
|
- !ruby/object:Gem::Version
|
309
|
-
version: '0'
|
323
|
+
version: '0.9'
|
310
324
|
- !ruby/object:Gem::Dependency
|
311
325
|
name: tbd
|
312
326
|
requirement: !ruby/object:Gem::Requirement
|
@@ -640,7 +654,6 @@ files:
|
|
640
654
|
- data/geometry/DOERefWarehouse.json
|
641
655
|
- data/geometry/DOERefWarehouse.osm
|
642
656
|
- data/inventory/thermal_bridging.csv
|
643
|
-
- data/standards/OpenStudio_Standards-deer-comstock.xlsx
|
644
657
|
- data/standards/exclude_list.csv
|
645
658
|
- data/standards/export_OpenStudio_libraries.rb
|
646
659
|
- data/standards/legacy_dd_results.csv
|
@@ -650,7 +663,6 @@ files:
|
|
650
663
|
- data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1.csv
|
651
664
|
- data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1space_types.csv
|
652
665
|
- data/standards/metadata_units_OpenStudio_Standards-deer-ALL-comstockspace_types.csv
|
653
|
-
- data/standards/openstudio_standards_duplicates_log.csv
|
654
666
|
- data/standards/templates_to_climate_zones.json
|
655
667
|
- data/standards/test_performance_expected_dd_results.csv
|
656
668
|
- data/weather/ARCATA_725945_CZ2010.ddy
|
@@ -2516,7 +2528,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
2516
2528
|
- !ruby/object:Gem::Version
|
2517
2529
|
version: 1.3.6
|
2518
2530
|
requirements: []
|
2519
|
-
rubygems_version: 3.
|
2531
|
+
rubygems_version: 3.4.10
|
2520
2532
|
signing_key:
|
2521
2533
|
specification_version: 4
|
2522
2534
|
summary: Creates OpenStudio models of typical buildings, creates standard baselines
|
Binary file
|
@@ -1,5 +0,0 @@
|
|
1
|
-
Spreadsheet Name,Worksheet Name,Object Index in Worksheet,Similarity of Duplicate,Duplicate Object
|
2
|
-
OpenStudio_Standards-ashrae_90_1,refrigerated_cases,38,different,90.1-2004|Any|Service Deli Cases|
|
3
|
-
OpenStudio_Standards-ashrae_90_1,refrigerated_cases,80,different,90.1-2007|Any|Service Deli Cases|
|
4
|
-
OpenStudio_Standards-ashrae_90_1,refrigerated_cases,122,different,90.1-2010|Any|Service Deli Cases|
|
5
|
-
OpenStudio_Standards-ashrae_90_1,refrigerated_cases,164,different,90.1-2013|Any|Service Deli Cases|
|