openstudio-standards 0.2.6 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/geometry/DEER_ECC_DXEH.json +11 -0
- data/data/geometry/DEER_ECC_DXGF.json +11 -0
- data/data/geometry/DEER_ECC_DXHP.json +11 -0
- data/data/geometry/DEER_ECC_NCEH.json +11 -0
- data/data/geometry/DEER_ECC_NCGF.json +11 -0
- data/data/geometry/DEER_ECC_PVVE.json +11 -0
- data/data/geometry/DEER_ECC_PVVG.json +11 -0
- data/data/geometry/DEER_ECC_SVVE.json +11 -0
- data/data/geometry/DEER_ECC_SVVG.json +11 -0
- data/data/geometry/DEER_ECC_WLHP.json +11 -0
- data/data/geometry/DEER_EPr_DXEH.json +22 -0
- data/data/geometry/DEER_EPr_DXGF.json +22 -0
- data/data/geometry/DEER_EPr_DXHP.json +22 -0
- data/data/geometry/DEER_EPr_NCEH.json +22 -0
- data/data/geometry/DEER_EPr_NCGF.json +22 -0
- data/data/geometry/DEER_EPr_WLHP.json +22 -0
- data/data/geometry/DEER_ESe_DXEH.json +22 -0
- data/data/geometry/DEER_ESe_DXGF.json +22 -0
- data/data/geometry/DEER_ESe_DXHP.json +22 -0
- data/data/geometry/DEER_ESe_NCEH.json +22 -0
- data/data/geometry/DEER_ESe_NCGF.json +22 -0
- data/data/geometry/DEER_ESe_PVVE.json +22 -0
- data/data/geometry/DEER_ESe_PVVG.json +22 -0
- data/data/geometry/DEER_ESe_SVVE.json +22 -0
- data/data/geometry/DEER_ESe_SVVG.json +22 -0
- data/data/geometry/DEER_ESe_WLHP.json +22 -0
- data/data/geometry/DEER_EUn_DXEH.json +11 -0
- data/data/geometry/DEER_EUn_DXGF.json +11 -0
- data/data/geometry/DEER_EUn_DXHP.json +11 -0
- data/data/geometry/DEER_EUn_NCEH.json +11 -0
- data/data/geometry/DEER_EUn_NCGF.json +11 -0
- data/data/geometry/DEER_EUn_PVVE.json +11 -0
- data/data/geometry/DEER_EUn_PVVG.json +11 -0
- data/data/geometry/DEER_EUn_SVVE.json +11 -0
- data/data/geometry/DEER_EUn_SVVG.json +11 -0
- data/data/geometry/DEER_Hsp_DXEH.json +11 -0
- data/data/geometry/DEER_Hsp_DXGF.json +11 -0
- data/data/geometry/DEER_Hsp_DXHP.json +11 -0
- data/data/geometry/DEER_Hsp_NCEH.json +11 -0
- data/data/geometry/DEER_Hsp_NCGF.json +11 -0
- data/data/geometry/DEER_Hsp_PVVE.json +11 -0
- data/data/geometry/DEER_Hsp_PVVG.json +11 -0
- data/data/geometry/DEER_Hsp_SVVE.json +11 -0
- data/data/geometry/DEER_Hsp_SVVG.json +11 -0
- data/data/geometry/DEER_Htl_DXEH.json +33 -0
- data/data/geometry/DEER_Htl_DXGF.json +33 -0
- data/data/geometry/DEER_Htl_DXHP.json +33 -0
- data/data/geometry/DEER_Htl_NCEH.json +33 -0
- data/data/geometry/DEER_Htl_NCGF.json +33 -0
- data/data/geometry/DEER_Htl_PVVE.json +33 -0
- data/data/geometry/DEER_Htl_PVVG.json +33 -0
- data/data/geometry/DEER_Htl_SVVE.json +33 -0
- data/data/geometry/DEER_Htl_SVVG.json +33 -0
- data/data/geometry/DEER_Htl_WLHP.json +33 -0
- data/data/geometry/DEER_Nrs_DXEH.json +11 -0
- data/data/geometry/DEER_Nrs_DXGF.json +11 -0
- data/data/geometry/DEER_Nrs_DXHP.json +11 -0
- data/data/geometry/DEER_Nrs_FPFC.json +11 -0
- data/data/geometry/DEER_Nrs_NCEH.json +11 -0
- data/data/geometry/DEER_Nrs_PVVE.json +11 -0
- data/data/geometry/DEER_Nrs_PVVG.json +11 -0
- data/data/geometry/DEER_Nrs_SVVE.json +11 -0
- data/data/geometry/DEER_Nrs_SVVG.json +11 -0
- data/data/geometry/DEER_RFF_DXEH.json +22 -0
- data/data/geometry/DEER_RFF_DXGF.json +22 -0
- data/data/geometry/DEER_RFF_DXHP.json +22 -0
- data/data/geometry/DEER_RFF_NCEH.json +22 -0
- data/data/geometry/DEER_RFF_NCGF.json +22 -0
- data/data/geometry/DEER_RSD_DXEH.json +22 -0
- data/data/geometry/DEER_RSD_DXGF.json +22 -0
- data/data/geometry/DEER_RSD_DXHP.json +22 -0
- data/data/geometry/DEER_RSD_NCEH.json +22 -0
- data/data/geometry/DEER_RSD_NCGF.json +22 -0
- data/data/geometry/DEER_RtL_DXEH.json +11 -0
- data/data/geometry/DEER_RtL_DXGF.json +11 -0
- data/data/geometry/DEER_RtL_DXHP.json +11 -0
- data/data/geometry/DEER_RtL_NCEH.json +11 -0
- data/data/geometry/DEER_RtL_NCGF.json +11 -0
- data/data/standards/OpenStudio_Standards.xlsx +0 -0
- data/data/standards/OpenStudio_Standards_construction_properties.json +2560 -0
- data/data/standards/OpenStudio_Standards_construction_sets.json +730 -42
- data/data/standards/OpenStudio_Standards_constructions.json +40 -0
- data/data/standards/OpenStudio_Standards_entryways.json +44 -0
- data/data/standards/OpenStudio_Standards_fans.json +36 -0
- data/data/standards/OpenStudio_Standards_materials.json +163 -123
- data/data/standards/OpenStudio_Standards_parking.json +36 -0
- data/data/standards/OpenStudio_Standards_prototype_inputs.json +9640 -1608
- data/data/standards/OpenStudio_Standards_schedules.json +1259 -427
- data/data/standards/OpenStudio_Standards_space_types.json +1660 -444
- data/data/standards/OpenStudio_Standards_unitary_acs.json +580 -0
- data/data/standards/export_OpenStudio_libraries.rb +24 -3
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +116 -58
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +5 -8
- data/lib/openstudio-standards/standards/Standards.Model.rb +11 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +258 -0
- data/lib/openstudio-standards/utilities/logging.rb +6 -3
- data/lib/openstudio-standards/version.rb +1 -1
- metadata +2 -2
@@ -9,7 +9,22 @@ require 'json'
|
|
9
9
|
require 'openstudio'
|
10
10
|
require_relative '../../lib/openstudio-standards'
|
11
11
|
|
12
|
+
# gem install parallel
|
13
|
+
require 'parallel'
|
14
|
+
|
12
15
|
def export_openstudio_libraries
|
16
|
+
|
17
|
+
# Environment variables
|
18
|
+
if ENV['N'].nil?
|
19
|
+
# Number of parallel runs caps to nproc - 1
|
20
|
+
# On a 8 core, 16 threads machine => 15
|
21
|
+
$nproc = [1, Parallel.processor_count - 1].max
|
22
|
+
puts "Defaulted Nproc to #{$nproc}"
|
23
|
+
else
|
24
|
+
$nproc = ENV['N'].to_i
|
25
|
+
puts "Using environment Nproc=#{$nproc}"
|
26
|
+
end
|
27
|
+
|
13
28
|
start_time = Time.now
|
14
29
|
|
15
30
|
### Define what to include in the libraries ###
|
@@ -28,7 +43,9 @@ def export_openstudio_libraries
|
|
28
43
|
templates_to_climate_zones = JSON.parse(temp)
|
29
44
|
|
30
45
|
# Make a library model for each template
|
31
|
-
|
46
|
+
# We parallelize this loop, since it takes really long
|
47
|
+
Parallel.each(std.standards_data["templates"],
|
48
|
+
in_threads: $nproc) do |template|
|
32
49
|
|
33
50
|
# Wrap each library creation in a begin/rescue because
|
34
51
|
# the entire process can take a long time and
|
@@ -44,12 +61,14 @@ def export_openstudio_libraries
|
|
44
61
|
std_applier = Standard.build(template_name)
|
45
62
|
rescue Exception => e
|
46
63
|
puts "'#{template_name}' is not defined in OpenStudio-Standards yet"
|
64
|
+
next
|
47
65
|
end
|
48
66
|
|
49
67
|
# Reset the openstudio-standards log
|
50
68
|
reset_log
|
51
69
|
|
52
|
-
|
70
|
+
# If you want to only do one specific template
|
71
|
+
# next unless template_name == '90.1-2004'
|
53
72
|
|
54
73
|
# Make an empty model
|
55
74
|
model = OpenStudio::Model::Model.new
|
@@ -416,7 +435,9 @@ def export_openstudio_libraries
|
|
416
435
|
end
|
417
436
|
|
418
437
|
# Save the library
|
419
|
-
|
438
|
+
pkg_dir = "#{__dir__}/../../pkg"
|
439
|
+
Dir.mkdir(pkg_dir) unless Dir.exists?(pkg_dir)
|
440
|
+
osm_lib_dir = "#{pkg_dir}/libraries"
|
420
441
|
Dir.mkdir(osm_lib_dir) unless Dir.exists?(osm_lib_dir)
|
421
442
|
library_path = "#{osm_lib_dir}/#{template_name.gsub(/\W/,'_')}.osm"
|
422
443
|
puts "* Saving library #{library_path}"
|
@@ -835,8 +835,8 @@ class Standard
|
|
835
835
|
#
|
836
836
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
837
837
|
# @param system_name [String] the name of the system, or nil in which case it will be defaulted
|
838
|
-
# @param hot_water_loop [
|
839
|
-
# @param chilled_water_loop [
|
838
|
+
# @param hot_water_loop [OpenStudio::Model::PlantLoop] hot water loop to connect to heating and zone fan coils
|
839
|
+
# @param chilled_water_loop [OpenStudio::Model::PlantLoop] chilled water loop to connect to cooling coil
|
840
840
|
# @param hvac_op_sch [String] name of the HVAC operation schedule, default is always on
|
841
841
|
# @param min_oa_sch [String] name of the minimum outdoor air schedule, default is always on
|
842
842
|
# @param min_frac_oa_sch [String] name of the minimum fraction of outdoor air schedule, default is always on
|
@@ -1061,8 +1061,8 @@ class Standard
|
|
1061
1061
|
# @param doas_type [String] DOASCV or DOASVAV, determines whether the DOAS is operated at scheduled,
|
1062
1062
|
# constant flow rate, or airflow is variable to allow for economizing or demand controlled ventilation
|
1063
1063
|
# @param doas_control_strategy [String] DOAS control strategy
|
1064
|
-
# @param hot_water_loop [
|
1065
|
-
# @param chilled_water_loop [
|
1064
|
+
# @param hot_water_loop [OpenStudio::Model::PlantLoop] hot water loop to connect to heating and zone fan coils
|
1065
|
+
# @param chilled_water_loop [OpenStudio::Model::PlantLoop] chilled water loop to connect to cooling coil
|
1066
1066
|
# @param hvac_op_sch [String] name of the HVAC operation schedule, default is always on
|
1067
1067
|
# @param min_oa_sch [String] name of the minimum outdoor air schedule, default is always on
|
1068
1068
|
# @param min_frac_oa_sch [String] name of the minimum fraction of outdoor air schedule, default is always on
|
@@ -1345,11 +1345,13 @@ class Standard
|
|
1345
1345
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
1346
1346
|
# @param system_name [String] the name of the system, or nil in which case it will be defaulted
|
1347
1347
|
# @param return_plenum [OpenStudio::Model::ThermalZone] the zone to attach as the supply plenum, or nil, in which case no return plenum will be used
|
1348
|
-
# @param
|
1349
|
-
#
|
1350
|
-
# @param
|
1348
|
+
# @param heating_type [String] main heating coil fuel type
|
1349
|
+
# valid choices are NaturalGas, Gas, Electricity, HeatPump, DistrictHeating, or nil (defaults to NaturalGas)
|
1350
|
+
# @param reheat_type [String] valid options are NaturalGas, Gas, Electricity, Water, nil (no heat)
|
1351
|
+
# @param hot_water_loop [OpenStudio::Model::PlantLoop] hot water loop to connect heating and reheat coils to
|
1352
|
+
# @param chilled_water_loop [OpenStudio::Model::PlantLoop] chilled water loop to connect cooling coil to
|
1351
1353
|
# @param hvac_op_sch [String] name of the HVAC operation schedule or nil in which case will be defaulted to always on
|
1352
|
-
# @param oa_damper_sch [
|
1354
|
+
# @param oa_damper_sch [String] name of the oa damper schedule, or nil in which case will be defaulted to always open
|
1353
1355
|
# @param fan_efficiency [Double] fan total efficiency, including motor and impeller
|
1354
1356
|
# @param fan_motor_efficiency [Double] fan motor efficiency
|
1355
1357
|
# @param fan_pressure_rise [Double] fan pressure rise, inH2O
|
@@ -1361,6 +1363,7 @@ class Standard
|
|
1361
1363
|
thermal_zones,
|
1362
1364
|
system_name: nil,
|
1363
1365
|
return_plenum: nil,
|
1366
|
+
heating_type: nil,
|
1364
1367
|
reheat_type: nil,
|
1365
1368
|
hot_water_loop: nil,
|
1366
1369
|
chilled_water_loop: nil,
|
@@ -1390,9 +1393,7 @@ class Standard
|
|
1390
1393
|
end
|
1391
1394
|
|
1392
1395
|
# oa damper schedule
|
1393
|
-
|
1394
|
-
oa_damper_sch = model.alwaysOnDiscreteSchedule
|
1395
|
-
else
|
1396
|
+
unless oa_damper_sch.nil?
|
1396
1397
|
oa_damper_sch = model_add_schedule(model, oa_damper_sch)
|
1397
1398
|
end
|
1398
1399
|
|
@@ -1428,9 +1429,15 @@ class Standard
|
|
1428
1429
|
|
1429
1430
|
# create heating coil
|
1430
1431
|
if hot_water_loop.nil?
|
1431
|
-
|
1432
|
-
|
1433
|
-
|
1432
|
+
if heating_type == 'Electricity'
|
1433
|
+
create_coil_heating_electric(model,
|
1434
|
+
air_loop_node: air_loop.supplyInletNode,
|
1435
|
+
name: "#{air_loop.name} Main Electric Htg Coil")
|
1436
|
+
else # default to NaturalGas
|
1437
|
+
create_coil_heating_gas(model,
|
1438
|
+
air_loop_node: air_loop.supplyInletNode,
|
1439
|
+
name: "#{air_loop.name} Main Gas Htg Coil")
|
1440
|
+
end
|
1434
1441
|
else
|
1435
1442
|
create_coil_heating_water(model,
|
1436
1443
|
hot_water_loop,
|
@@ -1462,7 +1469,12 @@ class Standard
|
|
1462
1469
|
oa_intake_controller.autosizeMinimumOutdoorAirFlowRate
|
1463
1470
|
oa_intake_controller.resetMaximumFractionofOutdoorAirSchedule
|
1464
1471
|
oa_intake_controller.resetEconomizerMinimumLimitDryBulbTemperature
|
1465
|
-
|
1472
|
+
unless econo_ctrl_mthd.nil?
|
1473
|
+
oa_intake_controller.setEconomizerControlType(econo_ctrl_mthd)
|
1474
|
+
end
|
1475
|
+
unless oa_damper_sch.nil?
|
1476
|
+
oa_intake_controller.setMinimumOutdoorAirSchedule(oa_damper_sch)
|
1477
|
+
end
|
1466
1478
|
controller_mv = oa_intake_controller.controllerMechanicalVentilation
|
1467
1479
|
controller_mv.setName("#{air_loop.name} Vent Controller")
|
1468
1480
|
controller_mv.setSystemOutdoorAirMethod('VentilationRateProcedure')
|
@@ -1555,9 +1567,9 @@ class Standard
|
|
1555
1567
|
#
|
1556
1568
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
1557
1569
|
# @param system_name [String] the name of the system, or nil in which case it will be defaulted
|
1558
|
-
# @param chilled_water_loop [
|
1570
|
+
# @param chilled_water_loop [OpenStudio::Model::PlantLoop] chilled water loop to connect to the cooling coil
|
1559
1571
|
# @param hvac_op_sch [String] name of the HVAC operation schedule or nil in which case will be defaulted to always on
|
1560
|
-
# @param oa_damper_sch [
|
1572
|
+
# @param oa_damper_sch [String] name of the oa damper schedule or nil in which case will be defaulted to always open
|
1561
1573
|
# @param fan_efficiency [Double] fan total efficiency, including motor and impeller
|
1562
1574
|
# @param fan_motor_efficiency [Double] fan motor efficiency
|
1563
1575
|
# @param fan_pressure_rise [Double] fan pressure rise, inH2O
|
@@ -1687,11 +1699,13 @@ class Standard
|
|
1687
1699
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
1688
1700
|
# @param system_name [String] the name of the system, or nil in which case it will be defaulted
|
1689
1701
|
# @param return_plenum [OpenStudio::Model::ThermalZone] the zone to attach as the supply plenum, or nil, in which case no return plenum will be used
|
1690
|
-
# @param hot_water_loop [
|
1691
|
-
# @param chilled_water_loop [
|
1702
|
+
# @param hot_water_loop [OpenStudio::Model::PlantLoop] hot water loop to connect heating and reheat coils to. If nil, will be electric heat and electric reheat
|
1703
|
+
# @param chilled_water_loop [OpenStudio::Model::PlantLoop] chilled water loop to connect cooling coils to. If nil, will be DX cooling
|
1704
|
+
# @param heating_type [String] main heating coil fuel type
|
1705
|
+
# valid choices are NaturalGas, Electricity, Water, or nil (defaults to NaturalGas)
|
1692
1706
|
# @param electric_reheat [Bool] if true electric reheat coils, if false the reheat coils served by hot_water_loop
|
1693
1707
|
# @param hvac_op_sch [String] name of the HVAC operation schedule or nil in which case will be defaulted to always on
|
1694
|
-
# @param oa_damper_sch [
|
1708
|
+
# @param oa_damper_sch [String] name of the oa damper schedule or nil in which case will be defaulted to always open
|
1695
1709
|
# @return [OpenStudio::Model::AirLoopHVAC] the resulting packaged VAV air loop
|
1696
1710
|
def model_add_pvav(model,
|
1697
1711
|
thermal_zones,
|
@@ -1699,6 +1713,7 @@ class Standard
|
|
1699
1713
|
return_plenum: nil,
|
1700
1714
|
hot_water_loop: nil,
|
1701
1715
|
chilled_water_loop: nil,
|
1716
|
+
heating_type: nil,
|
1702
1717
|
electric_reheat: false,
|
1703
1718
|
hvac_op_sch: nil,
|
1704
1719
|
oa_damper_sch: nil)
|
@@ -1757,9 +1772,15 @@ class Standard
|
|
1757
1772
|
|
1758
1773
|
# create heating coil
|
1759
1774
|
if hot_water_loop.nil?
|
1760
|
-
|
1761
|
-
|
1762
|
-
|
1775
|
+
if heating_type == 'Electricity'
|
1776
|
+
create_coil_heating_electric(model,
|
1777
|
+
air_loop_node: air_loop.supplyInletNode,
|
1778
|
+
name: "#{air_loop.name} Main Electric Htg Coil")
|
1779
|
+
else # default to NaturalGas
|
1780
|
+
create_coil_heating_gas(model,
|
1781
|
+
air_loop_node: air_loop.supplyInletNode,
|
1782
|
+
name: "#{air_loop.name} Main Gas Htg Coil")
|
1783
|
+
end
|
1763
1784
|
else
|
1764
1785
|
create_coil_heating_water(model,
|
1765
1786
|
hot_water_loop,
|
@@ -1855,9 +1876,9 @@ class Standard
|
|
1855
1876
|
#
|
1856
1877
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
1857
1878
|
# @param system_name [String] the name of the system, or nil in which case it will be defaulted
|
1858
|
-
# @param chilled_water_loop [
|
1879
|
+
# @param chilled_water_loop [OpenStudio::Model::PlantLoop] chilled water loop to connect cooling coils to. If nil, will be DX cooling
|
1859
1880
|
# @param hvac_op_sch [String] name of the HVAC operation schedule or nil in which case will be defaulted to always on
|
1860
|
-
# @param oa_damper_sch [
|
1881
|
+
# @param oa_damper_sch [String] name of the oa damper schedule or nil in which case will be defaulted to always open
|
1861
1882
|
# @param fan_efficiency [Double] fan total efficiency, including motor and impeller
|
1862
1883
|
# @param fan_motor_efficiency [Double] fan motor efficiency
|
1863
1884
|
# @param fan_pressure_rise [Double] fan pressure rise, inH2O
|
@@ -1993,10 +2014,10 @@ class Standard
|
|
1993
2014
|
#
|
1994
2015
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
1995
2016
|
# @param system_name [String] the name of the system, or nil in which case it will be defaulted
|
1996
|
-
# @param hot_water_loop [
|
1997
|
-
# @param chilled_water_loop [
|
2017
|
+
# @param hot_water_loop [OpenStudio::Model::PlantLoop] hot water loop to connect to heating and reheat coils.
|
2018
|
+
# @param chilled_water_loop [OpenStudio::Model::PlantLoop] chilled water loop to connect to the cooling coil.
|
1998
2019
|
# @param hvac_op_sch [String] name of the HVAC operation schedule or nil in which case will be defaulted to always on
|
1999
|
-
# @param oa_damper_sch [
|
2020
|
+
# @param oa_damper_sch [String] name of the oa damper schedule or nil in which case will be defaulted to always open
|
2000
2021
|
# @param fan_efficiency [Double] fan total efficiency, including motor and impeller
|
2001
2022
|
# @param fan_motor_efficiency [Double] fan motor efficiency
|
2002
2023
|
# @param fan_pressure_rise [Double] fan pressure rise, inH2O
|
@@ -2152,14 +2173,14 @@ class Standard
|
|
2152
2173
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
2153
2174
|
# @param system_name [String] the name of the system, or nil in which case it will be defaulted
|
2154
2175
|
# @param cooling_type [String] valid choices are Water, Two Speed DX AC, Single Speed DX AC, Single Speed Heat Pump, Water To Air Heat Pump
|
2155
|
-
# @param chilled_water_loop [
|
2156
|
-
# @param heating_type [
|
2157
|
-
# @param supplemental_heating_type [
|
2158
|
-
# @param hot_water_loop [
|
2159
|
-
# @param fan_location [
|
2160
|
-
# @param fan_type [
|
2176
|
+
# @param chilled_water_loop [OpenStudio::Model::PlantLoop] chilled water loop to connect cooling coil to, or nil
|
2177
|
+
# @param heating_type [String] valid choices are NaturalGas, Electricity, Water, Single Speed Heat Pump, Water To Air Heat Pump, or nil (no heat)
|
2178
|
+
# @param supplemental_heating_type [String] valid choices are Electricity, NaturalGas, nil (no heat)
|
2179
|
+
# @param hot_water_loop [OpenStudio::Model::PlantLoop] hot water loop to connect heating coil to, or nil
|
2180
|
+
# @param fan_location [String] valid choices are BlowThrough, DrawThrough
|
2181
|
+
# @param fan_type [String] valid choices are ConstantVolume, Cycling
|
2161
2182
|
# @param hvac_op_sch [String] name of the HVAC operation schedule or nil in which case will be defaulted to always on
|
2162
|
-
# @param oa_damper_sch [
|
2183
|
+
# @param oa_damper_sch [String] name of the oa damper schedule or nil in which case will be defaulted to always open
|
2163
2184
|
# @return [Array<OpenStudio::Model::AirLoopHVAC>] an array of the resulting PSZ-AC air loops
|
2164
2185
|
def model_add_psz_ac(model,
|
2165
2186
|
thermal_zones,
|
@@ -2436,10 +2457,10 @@ class Standard
|
|
2436
2457
|
#
|
2437
2458
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
2438
2459
|
# @param system_name [String] the name of the system, or nil in which case it will be defaulted
|
2439
|
-
# @param heating_type [
|
2440
|
-
# @param supplemental_heating_type [
|
2460
|
+
# @param heating_type [String] valid choices are NaturalGas, Electricity, Water, nil (no heat)
|
2461
|
+
# @param supplemental_heating_type [String] valid choices are Electricity, NaturalGas, nil (no heat)
|
2441
2462
|
# @param hvac_op_sch [String] name of the HVAC operation schedule or nil in which case will be defaulted to always on
|
2442
|
-
# @param oa_damper_sch [
|
2463
|
+
# @param oa_damper_sch [String] name of the oa damper schedule or nil in which case will be defaulted to always open
|
2443
2464
|
# @return [Array<OpenStudio::Model::AirLoopHVAC>] an array of the resulting PSZ-AC air loops
|
2444
2465
|
def model_add_psz_vav(model,
|
2445
2466
|
thermal_zones,
|
@@ -2616,11 +2637,11 @@ class Standard
|
|
2616
2637
|
# Creates a data center PSZ-AC system for each zone.
|
2617
2638
|
#
|
2618
2639
|
# @param system_name [String] the name of the system, or nil in which case it will be defaulted
|
2619
|
-
# @param hot_water_loop [
|
2620
|
-
# @param heat_pump_loop [
|
2640
|
+
# @param hot_water_loop [OpenStudio::Model::PlantLoop] hot water loop to connect to the heating coil
|
2641
|
+
# @param heat_pump_loop [OpenStudio::Model::PlantLoop] heat pump water loop to connect to heat pump
|
2621
2642
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
2622
2643
|
# @param hvac_op_sch [String] name of the HVAC operation schedule or nil in which case will be defaulted to always on
|
2623
|
-
# @param oa_damper_sch [
|
2644
|
+
# @param oa_damper_sch [String] name of the oa damper schedule or nil in which case will be defaulted to always open
|
2624
2645
|
# @param main_data_center [Bool] whether or not this is the main data center in the building.
|
2625
2646
|
# @return [Array<OpenStudio::Model::AirLoopHVAC>] an array of the resulting air loops
|
2626
2647
|
def model_add_data_center_hvac(model,
|
@@ -2777,12 +2798,12 @@ class Standard
|
|
2777
2798
|
#
|
2778
2799
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
2779
2800
|
# @param cooling_type [String] valid choices are Two Speed DX AC, Single Speed DX AC, Single Speed Heat Pump
|
2780
|
-
# @param heating_type [
|
2781
|
-
# @param supplemental_heating_type [
|
2782
|
-
# @param fan_type [
|
2801
|
+
# @param heating_type [String] valid choices are Gas, Single Speed Heat Pump
|
2802
|
+
# @param supplemental_heating_type [String] valid choices are Electric, Gas
|
2803
|
+
# @param fan_type [String] valid choices are ConstantVolume, Cycling
|
2783
2804
|
# @param hvac_op_sch [String] name of the HVAC operation schedule or nil in which case will be defaulted to always on
|
2784
|
-
# @param oa_damper_sch [
|
2785
|
-
# @param econ_max_oa_frac_sch [
|
2805
|
+
# @param oa_damper_sch [String] name of the oa damper schedule, or nil in which case will be defaulted to always open
|
2806
|
+
# @param econ_max_oa_frac_sch [String] name of the economizer maximum outdoor air fraction schedule
|
2786
2807
|
# @return [OpenStudio::Model::AirLoopHVAC] the resulting split AC air loop
|
2787
2808
|
def model_add_split_ac(model,
|
2788
2809
|
thermal_zones,
|
@@ -2936,9 +2957,9 @@ class Standard
|
|
2936
2957
|
#
|
2937
2958
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
2938
2959
|
# @param cooling_type [String] valid choices are Two Speed DX AC, Single Speed DX AC
|
2939
|
-
# @param heating_type [
|
2940
|
-
# @param hot_water_loop [
|
2941
|
-
# @param fan_type [
|
2960
|
+
# @param heating_type [String] valid choices are NaturalGas, Electricity, Water, nil (no heat)
|
2961
|
+
# @param hot_water_loop [OpenStudio::Model::PlantLoop] hot water loop to connect heating coil to. Set to nil for heating types besides water
|
2962
|
+
# @param fan_type [String] valid choices are ConstantVolume, Cycling
|
2942
2963
|
# @return [Array<OpenStudio::Model::ZoneHVACPackagedTerminalAirConditioner>] an array of the resulting PTACs
|
2943
2964
|
def model_add_ptac(model,
|
2944
2965
|
thermal_zones,
|
@@ -3127,10 +3148,10 @@ class Standard
|
|
3127
3148
|
#
|
3128
3149
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
3129
3150
|
# @param hvac_op_sch [String] name of the HVAC operation schedule or nil in which case will be defaulted to always on
|
3130
|
-
# @param fan_control_type [
|
3151
|
+
# @param fan_control_type [String] valid choices are OnOff, ConstantVolume, VariableVolume
|
3131
3152
|
# @param fan_pressure_rise [Double] fan pressure rise, inH2O
|
3132
|
-
# @param heating_type [
|
3133
|
-
# @param hot_water_loop [
|
3153
|
+
# @param heating_type [String] valid choices are NaturalGas, Gas, Electricity, Electric, DistrictHeating
|
3154
|
+
# @param hot_water_loop [OpenStudio::Model::PlantLoop] hot water loop to connect to the heating coil
|
3134
3155
|
# @param rated_inlet_water_temperature [Double] rated inlet water temperature in degrees Fahrenheit, default is 180F
|
3135
3156
|
# @param rated_outlet_water_temperature [Double] rated outlet water temperature in degrees Fahrenheit, default is 160F
|
3136
3157
|
# @param rated_inlet_air_temperature [Double] rated inlet air temperature in degrees Fahrenheit, default is 60F
|
@@ -3242,7 +3263,7 @@ class Standard
|
|
3242
3263
|
# Creates a high temp radiant heater for each zone and adds it to the model.
|
3243
3264
|
#
|
3244
3265
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
3245
|
-
# @param heating_type [
|
3266
|
+
# @param heating_type [String] valid choices are Gas, Electric
|
3246
3267
|
# @param combustion_efficiency [Double] combustion efficiency as decimal
|
3247
3268
|
# @return [Array<OpenStudio::Model::ZoneHVACHighTemperatureRadiant>] an
|
3248
3269
|
# array of the resulting radiant heaters.
|
@@ -4639,6 +4660,7 @@ class Standard
|
|
4639
4660
|
hot_water_loop = nil
|
4640
4661
|
else
|
4641
4662
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', 'Baseboards must have heating_type specified.')
|
4663
|
+
return false
|
4642
4664
|
end
|
4643
4665
|
model_add_baseboard(model,
|
4644
4666
|
zones,
|
@@ -4687,17 +4709,41 @@ class Standard
|
|
4687
4709
|
ventilation: false)
|
4688
4710
|
|
4689
4711
|
when 'VAV Reheat'
|
4690
|
-
|
4691
|
-
|
4692
|
-
|
4712
|
+
case main_heat_fuel
|
4713
|
+
when 'NaturalGas', 'Gas', 'HeatPump', 'DistrictHeating'
|
4714
|
+
heating_type = main_heat_fuel
|
4715
|
+
hot_water_loop = model_get_or_add_hot_water_loop(model, main_heat_fuel,
|
4716
|
+
hot_water_loop_type: hot_water_loop_type)
|
4717
|
+
else
|
4718
|
+
heating_type = 'Electricity'
|
4719
|
+
hot_water_loop = nil
|
4720
|
+
end
|
4721
|
+
|
4722
|
+
case air_loop_cooling_type
|
4723
|
+
when 'Water'
|
4693
4724
|
chilled_water_loop = model_get_or_add_chilled_water_loop(model, cool_fuel,
|
4694
4725
|
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type)
|
4695
4726
|
else
|
4696
4727
|
chilled_water_loop = nil
|
4697
4728
|
end
|
4698
|
-
|
4729
|
+
|
4730
|
+
if hot_water_loop.nil?
|
4731
|
+
case zone_heat_fuel
|
4732
|
+
when 'NaturalGas', 'Gas'
|
4733
|
+
reheat_type = 'NaturalGas'
|
4734
|
+
when 'Electricity'
|
4735
|
+
reheat_type = 'Electricity'
|
4736
|
+
else
|
4737
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "zone_heat_fuel '#{zone_heat_fuel}' not supported with main_heat_fuel '#{main_heat_fuel}' for a 'VAV Reheat' system type.")
|
4738
|
+
return false
|
4739
|
+
end
|
4740
|
+
else
|
4741
|
+
reheat_type = 'Water'
|
4742
|
+
end
|
4743
|
+
|
4699
4744
|
model_add_vav_reheat(model,
|
4700
4745
|
zones,
|
4746
|
+
heating_type: heating_type,
|
4701
4747
|
reheat_type: reheat_type,
|
4702
4748
|
hot_water_loop: hot_water_loop,
|
4703
4749
|
chilled_water_loop: chilled_water_loop,
|
@@ -4706,6 +4752,16 @@ class Standard
|
|
4706
4752
|
fan_pressure_rise: 4.0)
|
4707
4753
|
|
4708
4754
|
when 'VAV No Reheat'
|
4755
|
+
case main_heat_fuel
|
4756
|
+
when 'NaturalGas', 'Gas', 'HeatPump', 'DistrictHeating'
|
4757
|
+
heating_type = main_heat_fuel
|
4758
|
+
hot_water_loop = model_get_or_add_hot_water_loop(model, main_heat_fuel,
|
4759
|
+
hot_water_loop_type: hot_water_loop_type)
|
4760
|
+
else
|
4761
|
+
heating_type = 'Electricity'
|
4762
|
+
hot_water_loop = nil
|
4763
|
+
end
|
4764
|
+
|
4709
4765
|
if air_loop_cooling_type == 'Water'
|
4710
4766
|
chilled_water_loop = model_get_or_add_chilled_water_loop(model, cool_fuel,
|
4711
4767
|
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type)
|
@@ -4714,6 +4770,8 @@ class Standard
|
|
4714
4770
|
end
|
4715
4771
|
model_add_vav_reheat(model,
|
4716
4772
|
zones,
|
4773
|
+
heating_type: heating_type,
|
4774
|
+
reheat_type: nil,
|
4717
4775
|
hot_water_loop: hot_water_loop,
|
4718
4776
|
chilled_water_loop: chilled_water_loop,
|
4719
4777
|
fan_efficiency: 0.62,
|
@@ -4729,8 +4787,8 @@ class Standard
|
|
4729
4787
|
end
|
4730
4788
|
model_add_vav_reheat(model,
|
4731
4789
|
zones,
|
4790
|
+
heating_type: 'NaturalGas',
|
4732
4791
|
reheat_type: 'NaturalGas',
|
4733
|
-
hot_water_loop: hot_water_loop,
|
4734
4792
|
chilled_water_loop: chilled_water_loop,
|
4735
4793
|
fan_efficiency: 0.62,
|
4736
4794
|
fan_motor_efficiency: 0.9,
|
@@ -2164,8 +2164,7 @@ class Standard
|
|
2164
2164
|
return has_erv
|
2165
2165
|
end
|
2166
2166
|
|
2167
|
-
# Set the VAV damper control to single maximum or
|
2168
|
-
# dual maximum control depending on the standard.
|
2167
|
+
# Set the VAV damper control to single maximum or dual maximum control depending on the standard.
|
2169
2168
|
#
|
2170
2169
|
# @return [Bool] Returns true if successful, false if not
|
2171
2170
|
# @todo see if this impacts the sizing run.
|
@@ -2187,8 +2186,7 @@ class Standard
|
|
2187
2186
|
end
|
2188
2187
|
end
|
2189
2188
|
|
2190
|
-
# Set the control for any VAV reheat terminals
|
2191
|
-
# on this airloop.
|
2189
|
+
# Set the control for any VAV reheat terminals on this airloop.
|
2192
2190
|
control_type_set = false
|
2193
2191
|
air_loop_hvac.demandComponents.each do |equip|
|
2194
2192
|
if equip.to_AirTerminalSingleDuctVAVReheat.is_initialized
|
@@ -2214,8 +2212,8 @@ class Standard
|
|
2214
2212
|
return true
|
2215
2213
|
end
|
2216
2214
|
|
2217
|
-
# Determine whether the VAV damper control is single maximum or
|
2218
|
-
#
|
2215
|
+
# Determine whether the VAV damper control is single maximum or dual maximum control.
|
2216
|
+
# Defaults to 90.1-2007.
|
2219
2217
|
#
|
2220
2218
|
# @return [String] the damper control type: Single Maximum, Dual Maximum
|
2221
2219
|
def air_loop_hvac_vav_damper_action(air_loop_hvac)
|
@@ -2234,8 +2232,7 @@ class Standard
|
|
2234
2232
|
return motorized_oa_damper_required
|
2235
2233
|
end
|
2236
2234
|
|
2237
|
-
# If the system has an economizer, it must have
|
2238
|
-
# a motorized damper.
|
2235
|
+
# If the system has an economizer, it must have a motorized damper.
|
2239
2236
|
if air_loop_hvac_economizer?(air_loop_hvac)
|
2240
2237
|
motorized_oa_damper_required = true
|
2241
2238
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: Because the system has an economizer, it requires a motorized OA damper.")
|