openstudio-standards 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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.")
|