openstudio-standards 0.6.3 → 0.7.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/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
- data/data/standards/manage_OpenStudio_Standards.rb +2 -49
- data/data/standards/openstudio_standards_duplicates_log.csv +1 -7962
- data/data/standards/test_performance_expected_dd_results.csv +2005 -97
- data/lib/openstudio-standards/create_typical/space_type_ratios.rb +47 -57
- data/lib/openstudio-standards/geometry/create.rb +8 -2
- data/lib/openstudio-standards/geometry/create_bar.rb +6 -3
- data/lib/openstudio-standards/geometry/create_shape.rb +1 -1
- data/lib/openstudio-standards/geometry/group.rb +1 -1
- data/lib/openstudio-standards/geometry/information.rb +1 -1
- data/lib/openstudio-standards/geometry/modify.rb +53 -1
- data/lib/openstudio-standards/infiltration/nist_infiltration.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +11 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +11 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +44 -47
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +43 -48
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +44 -24
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +24 -24
- data/lib/openstudio-standards/schedules/information.rb +1 -1
- data/lib/openstudio-standards/schedules/parametric.rb +1 -1
- data/lib/openstudio-standards/service_water_heating/create_piping_losses.rb +152 -0
- data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +544 -0
- data/lib/openstudio-standards/service_water_heating/create_water_heating_loop.rb +303 -0
- data/lib/openstudio-standards/service_water_heating/create_water_use.rb +95 -0
- data/lib/openstudio-standards/space/space.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +65 -70
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +12 -14
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +16 -5
- data/lib/openstudio-standards/standards/Standards.Model.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +10 -2
- data/lib/openstudio-standards/{prototypes/common/objects/Prototype.Model.swh.rb → standards/Standards.ServiceWaterHeating.rb} +209 -139
- data/lib/openstudio-standards/standards/Standards.Surface.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +4 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +22251 -12963
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +91 -91
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +8981 -5228
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +8935 -5182
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +7281 -5391
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +91 -91
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +9005 -15215
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_sets.json +136 -136
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +8717 -17168
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_sets.json +136 -136
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +1941 -651
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +135 -135
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +135 -135
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +36 -36
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +36 -36
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +377 -99
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.construction_properties.json +6889 -4044
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_constructions.json +108 -108
- data/lib/openstudio-standards/standards/cbes/cbes_pre_1978/data/cbes_pre_1978.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_1978/data/cbes_t24_1978.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_1992/data/cbes_t24_1992.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2001/data/cbes_t24_2001.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/data/cbes_t24_2005.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/data/cbes_t24_2008.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/data/cbes.constructions.json +142 -142
- data/lib/openstudio-standards/standards/deer/data/deer.constructions.json +5 -1551
- data/lib/openstudio-standards/standards/deer/data/deer.materials.json +40 -0
- data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.motors.json +88 -8
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +17 -0
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +2 -1
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +4 -4
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +61 -88
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +3 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/data/boiler_fuel_type_sets.json +54 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPMidriseApartment.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPMultiTower.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPPointTower.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPTownHouse.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernEducation.osm +4 -4
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernHealthCare.osm +4 -4
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +32 -24
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +89 -15
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +5 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +22 -65
- data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +19 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +56 -2
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +3 -1
- data/lib/openstudio-standards/standards/necb/common/construction_defaults.osm +2 -2
- data/lib/openstudio-standards/standards/necb/docs/air_system_names_method.md +127 -0
- data/lib/openstudio-standards/thermal_zone/thermal_zone.rb +1 -1
- data/lib/openstudio-standards/utilities/template_measure/resources/BTAPMeasureHelper.rb +1 -1
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/information.rb +61 -5
- data/lib/openstudio-standards/weather/modify.rb +1 -1
- data/lib/openstudio-standards.rb +5 -3
- metadata +12 -63
- data/data/standards/OpenStudio_Standards-deer.xlsx +0 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +0 -1100
- data/lib/openstudio-standards/service_water_heating/component.rb +0 -189
@@ -1,189 +0,0 @@
|
|
1
|
-
module OpenstudioStandards
|
2
|
-
# The ServiceWaterHeating module provides methods to create, modify, and get information about service water heating
|
3
|
-
module ServiceWaterHeating
|
4
|
-
# @!group Create Component
|
5
|
-
# Methods to add service water heating components
|
6
|
-
|
7
|
-
# Creates a water heater and attaches it to the supplied service water heating loop.
|
8
|
-
#
|
9
|
-
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
10
|
-
# @param water_heater_capacity [Double] water heater capacity, in W. Defaults to 58.6 kW / 200 kBtu/hr
|
11
|
-
# @param water_heater_volume [Double] water heater volume, in m^3. Defaults to 0.378 m^3 / 100 gal
|
12
|
-
# @param water_heater_fuel [String] water heating fuel. Valid choices are 'NaturalGas', 'Electricity', or 'HeatPump'
|
13
|
-
# @param on_cycle_parasitic_fuel_consumption_rate [Double] water heater on cycle parasitic fuel consumption rate, in W
|
14
|
-
# @param off_cycle_parasitic_fuel_consumption_rate [Double] water heater off cycle parasitic fuel consumption rate, in W
|
15
|
-
# @param service_water_temperature [Double] water heater temperature, in degrees C. Default is 60 C / 140 F.
|
16
|
-
# @param service_water_temperature_schedule [OpenStudio::Model::Schedule] the service water heating schedule.
|
17
|
-
# If nil, will be defaulted to a constant temperature schedule based on the service_water_temperature
|
18
|
-
# @param set_peak_use_flowrate [Boolean] if true, the peak flow rate and flow rate schedule will be set.
|
19
|
-
# @param peak_flowrate [Double] peak flow rate in m^3/s
|
20
|
-
# @param flowrate_schedule [OpenStudio::Model::Schedule] the flow rate fraction scehdulename of the flow rate schedule
|
21
|
-
# @param water_heater_thermal_zone [OpenStudio::Model::ThermalZone] Thermal zone for ambient heat loss.
|
22
|
-
# If nil, will assume 71.6 F / 22 C ambient air temperature.
|
23
|
-
# @param number_water_heaters [Integer] the number of water heaters represented by the capacity and volume inputs.
|
24
|
-
# Used to modify efficiencies for water heaters based on individual component size while avoiding having to model
|
25
|
-
# lots of individual water heaters (for runtime sake).
|
26
|
-
# @param service_water_loop [OpenStudio::Model::PlantLoop] if provided, add the water heater to this loop
|
27
|
-
# @return [OpenStudio::Model::WaterHeaterMixed] OpenStudio WaterHeaterMixed object
|
28
|
-
def self.model_add_water_heater(model,
|
29
|
-
water_heater_capacity: nil,
|
30
|
-
water_heater_volume: nil,
|
31
|
-
water_heater_fuel: 'Electricity',
|
32
|
-
on_cycle_parasitic_fuel_consumption_rate: 0.0,
|
33
|
-
off_cycle_parasitic_fuel_consumption_rate: 0.0,
|
34
|
-
service_water_temperature: 60.0,
|
35
|
-
service_water_temperature_schedule: nil,
|
36
|
-
set_peak_use_flowrate: false,
|
37
|
-
peak_flowrate: nil,
|
38
|
-
flowrate_schedule: nil,
|
39
|
-
water_heater_thermal_zone: nil,
|
40
|
-
number_water_heaters: 1,
|
41
|
-
service_water_loop: nil)
|
42
|
-
# create water heater object
|
43
|
-
# @todo Standards - Change water heater methodology to follow 'Model Enhancements Appendix A.'
|
44
|
-
water_heater = OpenStudio::Model::WaterHeaterMixed.new(model)
|
45
|
-
|
46
|
-
# default water heater capacity if nil
|
47
|
-
if water_heater_capacity.nil?
|
48
|
-
water_heater_capacity = OpenStudio.convert(200.0, 'kBtu/hr', 'W').get
|
49
|
-
end
|
50
|
-
water_heater_capacity_kbtu_per_hr = OpenStudio.convert(water_heater_capacity, 'W', 'kBtu/hr').get
|
51
|
-
water_heater.setHeaterMaximumCapacity(water_heater_capacity)
|
52
|
-
|
53
|
-
# default water heater volume if nil
|
54
|
-
if water_heater_volume.nil?
|
55
|
-
water_heater_volume = OpenStudio.convert(100.0, 'gal', 'm^3').get
|
56
|
-
end
|
57
|
-
water_heater_volume_gal = OpenStudio.convert(water_heater_volume, 'm^3', 'gal').get
|
58
|
-
water_heater.setTankVolume(water_heater_volume)
|
59
|
-
|
60
|
-
# set the water heater fuel
|
61
|
-
case water_heater_fuel
|
62
|
-
when 'Natural Gas', 'NaturalGas', 'Gas'
|
63
|
-
water_heater.setHeaterFuelType('Gas')
|
64
|
-
water_heater.setHeaterThermalEfficiency(0.78)
|
65
|
-
water_heater.setOnCycleParasiticFuelConsumptionRate(on_cycle_parasitic_fuel_consumption_rate)
|
66
|
-
water_heater.setOffCycleParasiticFuelConsumptionRate(off_cycle_parasitic_fuel_consumption_rate)
|
67
|
-
water_heater.setOnCycleParasiticFuelType('Gas')
|
68
|
-
water_heater.setOffCycleParasiticFuelType('Gas')
|
69
|
-
water_heater.setOffCycleLossCoefficienttoAmbientTemperature(6.0)
|
70
|
-
water_heater.setOnCycleLossCoefficienttoAmbientTemperature(6.0)
|
71
|
-
when 'Electricity', 'Electric', 'Elec'
|
72
|
-
water_heater.setHeaterFuelType('Electricity')
|
73
|
-
water_heater.setHeaterThermalEfficiency(1.0)
|
74
|
-
water_heater.setOnCycleParasiticFuelConsumptionRate(on_cycle_parasitic_fuel_consumption_rate)
|
75
|
-
water_heater.setOffCycleParasiticFuelConsumptionRate(off_cycle_parasitic_fuel_consumption_rate)
|
76
|
-
water_heater.setOnCycleParasiticFuelType('Electricity')
|
77
|
-
water_heater.setOffCycleParasiticFuelType('Electricity')
|
78
|
-
water_heater.setOffCycleLossCoefficienttoAmbientTemperature(1.053)
|
79
|
-
water_heater.setOnCycleLossCoefficienttoAmbientTemperature(1.053)
|
80
|
-
when 'FuelOilNo2'
|
81
|
-
water_heater.setHeaterFuelType('FuelOilNo2')
|
82
|
-
water_heater.setHeaterThermalEfficiency(0.78)
|
83
|
-
water_heater.setOnCycleParasiticFuelConsumptionRate(on_cycle_parasitic_fuel_consumption_rate)
|
84
|
-
water_heater.setOffCycleParasiticFuelConsumptionRate(off_cycle_parasitic_fuel_consumption_rate)
|
85
|
-
water_heater.setOnCycleParasiticFuelType('FuelOilNo2')
|
86
|
-
water_heater.setOffCycleParasiticFuelType('FuelOilNo2')
|
87
|
-
water_heater.setOffCycleLossCoefficienttoAmbientTemperature(6.0)
|
88
|
-
water_heater.setOnCycleLossCoefficienttoAmbientTemperature(6.0)
|
89
|
-
when 'HeatPump', 'SimpleHeatPump'
|
90
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Model.Model', 'Simple workaround to represent heat pump water heaters without incurring significant runtime penalty associated with using correct objects.')
|
91
|
-
# Make a part-load efficiency modifier curve with a value above 1, which is multiplied by the nominal efficiency of 100% to represent the COP of a HPWH.
|
92
|
-
# @todo could make this workaround better by using EMS to modify this curve output in realtime based on the OA temperature.
|
93
|
-
hpwh_cop = 2.8
|
94
|
-
water_heater.setHeaterFuelType('Electricity')
|
95
|
-
water_heater.setHeaterThermalEfficiency(1.0)
|
96
|
-
eff_f_of_plr = OpenStudio::Model::CurveCubic.new(model)
|
97
|
-
eff_f_of_plr.setName("HPWH_COP_#{hpwh_cop}")
|
98
|
-
eff_f_of_plr.setCoefficient1Constant(hpwh_cop)
|
99
|
-
eff_f_of_plr.setCoefficient2x(0.0)
|
100
|
-
eff_f_of_plr.setCoefficient3xPOW2(0.0)
|
101
|
-
eff_f_of_plr.setCoefficient4xPOW3(0.0)
|
102
|
-
eff_f_of_plr.setMinimumValueofx(0.0)
|
103
|
-
eff_f_of_plr.setMaximumValueofx(1.0)
|
104
|
-
water_heater.setPartLoadFactorCurve(eff_f_of_plr)
|
105
|
-
water_heater.setOnCycleParasiticFuelConsumptionRate(on_cycle_parasitic_fuel_consumption_rate)
|
106
|
-
water_heater.setOffCycleParasiticFuelConsumptionRate(off_cycle_parasitic_fuel_consumption_rate)
|
107
|
-
water_heater.setOnCycleParasiticFuelType('Electricity')
|
108
|
-
water_heater.setOffCycleParasiticFuelType('Electricity')
|
109
|
-
water_heater.setOffCycleLossCoefficienttoAmbientTemperature(1.053)
|
110
|
-
water_heater.setOnCycleLossCoefficienttoAmbientTemperature(1.053)
|
111
|
-
else
|
112
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', "#{water_heater_fuel} is not a valid water heater fuel. Valid choices are NaturalGas, Electricity, and HeatPump.")
|
113
|
-
end
|
114
|
-
|
115
|
-
# set water temperature properties
|
116
|
-
water_heater.setDeadbandTemperatureDifference(2.0)
|
117
|
-
water_heater.setDeadbandTemperatureDifference(OpenStudio.convert(3.6, 'R', 'K').get)
|
118
|
-
water_heater.setHeaterControlType('Cycle')
|
119
|
-
water_heater.setOffCycleParasiticHeatFractiontoTank(0.8)
|
120
|
-
water_heater.setIndirectWaterHeatingRecoveryTime(1.5) # 1.5hrs
|
121
|
-
|
122
|
-
# get or create temperature schedule type limits
|
123
|
-
temp_sch_type_limits = OpenstudioStandards::Schedules.create_schedule_type_limits(model,
|
124
|
-
name: 'Temperature Schedule Type Limits',
|
125
|
-
lower_limit_value: 0.0,
|
126
|
-
upper_limit_value: 100.0,
|
127
|
-
numeric_type: 'Continuous',
|
128
|
-
unit_type: 'Temperature')
|
129
|
-
|
130
|
-
# create service water temperature schedule based on the service_water_temperature if none provided
|
131
|
-
if service_water_temperature_schedule.nil?
|
132
|
-
swh_temp_c = service_water_temperature
|
133
|
-
swh_temp_f = OpenStudio.convert(swh_temp_c, 'C', 'F').get
|
134
|
-
service_water_temperature_schedule = OpenstudioStandards::Schedules.create_constant_schedule_ruleset(model,
|
135
|
-
swh_temp_c,
|
136
|
-
name: "Service Water Loop Temp - #{swh_temp_f.round}F",
|
137
|
-
schedule_type_limit: 'Temperature')
|
138
|
-
service_water_temperature_schedule.setScheduleTypeLimits(temp_sch_type_limits)
|
139
|
-
end
|
140
|
-
water_heater.setMaximumTemperatureLimit(service_water_temperature)
|
141
|
-
water_heater.setSetpointTemperatureSchedule(service_water_temperature_schedule)
|
142
|
-
|
143
|
-
# set peak flow rate characteristics
|
144
|
-
if set_peak_use_flowrate
|
145
|
-
water_heater.setPeakUseFlowRate(peak_flowrate) unless peak_flowrate.nil?
|
146
|
-
water_heater.setUseFlowRateFractionSchedule(flowrate_schedule) unless flowrate_schedule.nil?
|
147
|
-
end
|
148
|
-
|
149
|
-
# set the water heater ambient conditions
|
150
|
-
if water_heater_thermal_zone.nil?
|
151
|
-
# assume the water heater is indoors at 71.6F / 22C
|
152
|
-
indoor_temp_f = 71.6
|
153
|
-
indoor_temp_c = OpenStudio.convert(indoor_temp_f, 'F', 'C').get
|
154
|
-
default_water_heater_ambient_temp_sch = OpenstudioStandards::Schedules.create_constant_schedule_ruleset(model,
|
155
|
-
indoor_temp_c,
|
156
|
-
name: "Water Heater Ambient Temp Schedule #{indoor_temp_f}F",
|
157
|
-
schedule_type_limit: 'Temperature')
|
158
|
-
default_water_heater_ambient_temp_sch.setScheduleTypeLimits(temp_sch_type_limits)
|
159
|
-
water_heater.setAmbientTemperatureIndicator('Schedule')
|
160
|
-
water_heater.setAmbientTemperatureSchedule(default_water_heater_ambient_temp_sch)
|
161
|
-
water_heater.resetAmbientTemperatureThermalZone
|
162
|
-
else
|
163
|
-
water_heater.setAmbientTemperatureIndicator('ThermalZone')
|
164
|
-
water_heater.setAmbientTemperatureThermalZone(water_heater_thermal_zone)
|
165
|
-
water_heater.resetAmbientTemperatureSchedule
|
166
|
-
end
|
167
|
-
|
168
|
-
# assign a quantity to the water heater if it represents multiple water heaters
|
169
|
-
if number_water_heaters > 1
|
170
|
-
water_heater.setName("#{number_water_heaters}X #{(water_heater_volume_gal / number_water_heaters).round}gal #{water_heater_fuel} Water Heater - #{(water_heater_capacity_kbtu_per_hr / number_water_heaters).round}kBtu/hr")
|
171
|
-
water_heater.additionalProperties.setFeature('component_quantity', number_water_heaters)
|
172
|
-
else
|
173
|
-
water_heater.setName("#{water_heater_volume_gal.round}gal #{water_heater_fuel} Water Heater - #{water_heater_capacity_kbtu_per_hr.round}kBtu/hr")
|
174
|
-
end
|
175
|
-
|
176
|
-
# add the water heater to the service water loop if provided
|
177
|
-
unless service_water_loop.nil?
|
178
|
-
service_water_loop.addSupplyBranchForComponent(water_heater)
|
179
|
-
end
|
180
|
-
|
181
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ServiceWaterHeating.Create', "Added water heater called #{water_heater.name}")
|
182
|
-
|
183
|
-
return water_heater
|
184
|
-
end
|
185
|
-
|
186
|
-
|
187
|
-
# @!endgroup Create Component
|
188
|
-
end
|
189
|
-
end
|