Source code for honeybee_openstudio.hvac.standards.boiler_hot_water
# coding=utf-8
"""Module taken from OpenStudio-standards.
https://github.com/NREL/openstudio-standards/blob/master/
lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb
"""
from __future__ import division
from ladybug.datatype.temperature import Temperature
from honeybee_openstudio.openstudio import openstudio, openstudio_model
TEMPERATURE = Temperature()
[docs]
def create_boiler_hot_water(
model, hot_water_loop=None, name='Boiler', fuel_type='NaturalGas',
draft_type='Natural', nominal_thermal_efficiency=0.80,
eff_curve_temp_eval_var='LeavingBoiler', flow_mode='LeavingSetpointModulated',
lvg_temp_dsgn_f=180.0, out_temp_lmt_f=203.0,
min_plr=0.0, max_plr=1.2, opt_plr=1.0, sizing_factor=None):
"""Prototype BoilerHotWater object.
Args:
model: [OpenStudio::Model::Model] OpenStudio model object.
hot_water_loop: [<OpenStudio::Model::PlantLoop>] a hot water loop
served by the boiler.
name: [String] the name of the boiler, or nil in which case it will be defaulted.
fuel_type: [String] type of fuel serving the boiler.
draft_type: [String] Boiler type Condensing, MechanicalNoncondensing,
Natural (default).
nominal_thermal_efficiency: [Double] boiler nominal thermal efficiency.
eff_curve_temp_eval_var: [String] LeavingBoiler or EnteringBoiler temperature
for the boiler efficiency curve.
flow_mode: [String] boiler flow mode.
lvg_temp_dsgn_f: [Double] boiler leaving design temperature in degrees Fahrenheit
note that this field is deprecated in OS versions 3.0+.
out_temp_lmt_f: [Double] boiler outlet temperature limit in degrees Fahrenheit.
min_plr: [Double] boiler minimum part load ratio.
max_plr: [Double] boiler maximum part load ratio.
opt_plr: [Double] boiler optimum part load ratio.
sizing_factor: [Double] boiler oversizing factor.
"""
# create the boiler
boiler = openstudio_model.BoilerHotWater(model)
if name is None:
if hot_water_loop is None:
boiler.setName('Boiler')
else:
boiler.setName('{} Boiler'.format(hot_water_loop.nameString()))
else:
boiler.setName(name)
if fuel_type is None or fuel_type == 'Gas':
boiler.setFuelType('NaturalGas')
elif fuel_type == 'Propane' or fuel_type == 'PropaneGas':
boiler.setFuelType('Propane')
else:
boiler.setFuelType(fuel_type)
if nominal_thermal_efficiency is None:
boiler.setNominalThermalEfficiency(0.8)
else:
boiler.setNominalThermalEfficiency(nominal_thermal_efficiency)
if eff_curve_temp_eval_var is None:
boiler.setEfficiencyCurveTemperatureEvaluationVariable('LeavingBoiler')
else:
boiler.setEfficiencyCurveTemperatureEvaluationVariable(eff_curve_temp_eval_var)
if flow_mode is None:
boiler.setBoilerFlowMode('LeavingSetpointModulated')
else:
boiler.setBoilerFlowMode(flow_mode)
if model.version() < openstudio.VersionString('3.0.0'):
lvg_temp_dsgn_f = 180.0 if lvg_temp_dsgn_f is None else lvg_temp_dsgn_f
lvg_temp_dsgn_c = TEMPERATURE.to_unit([lvg_temp_dsgn_f], 'C', 'F')[0]
boiler.setDesignWaterOutletTemperature(lvg_temp_dsgn_c)
out_temp_lmt_f = 203.0 if out_temp_lmt_f is None else out_temp_lmt_f
out_temp_lmt_c = TEMPERATURE.to_unit([out_temp_lmt_f], 'C', 'F')[0]
boiler.setWaterOutletUpperTemperatureLimit(out_temp_lmt_c)
# logic to set different defaults for condensing boilers if not specified
if draft_type == 'Condensing':
if model.version() < openstudio.VersionString('3.0.0') and lvg_temp_dsgn_f is None:
# default to 120 degrees Fahrenheit (48.49 degrees Celsius)
dw_ot = TEMPERATURE.to_unit([120.0], 'C', 'F')[0]
boiler.setDesignWaterOutletTemperature(dw_ot)
if nominal_thermal_efficiency is None:
boiler.setNominalThermalEfficiency(0.96)
min_plr = 0 if min_plr is None else min_plr
boiler.setMinimumPartLoadRatio(min_plr)
max_plr = 1.2 if max_plr is None else max_plr
boiler.setMaximumPartLoadRatio(max_plr)
opt_plr = 1.0 if opt_plr is None else opt_plr
boiler.setOptimumPartLoadRatio(opt_plr)
if sizing_factor is not None:
boiler.setSizingFactor(sizing_factor)
# add to supply side of hot water loop if specified
if hot_water_loop is not None:
hot_water_loop.addSupplyBranchForComponent(boiler)
return boiler