Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add dedicated secondary loop for 90.1 PRM plant loops #1760

Merged
merged 14 commits into from
Sep 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,10 @@ def model_add_chw_loop(model,
# Change the chilled water loop to have a two-way common pipes
chilled_water_loop.setCommonPipeSimulation('CommonPipe')
elsif pri_sec_config == 'heat_exchanger'
# Check number of chillers
if num_chillers > 3
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.PlantLoop', "EMS Code for multiple chiller pump has not been written for greater than 3 chillers. This has #{num_chillers} chillers")
end
# NOTE: PRECONDITIONING for `const_pri_var_sec` pump type is only applicable for PRM routine and only applies to System Type 7 and System Type 8
# See: model_add_prm_baseline_system under Model object.
# In this scenario, we will need to create a primary and secondary configuration:
Expand All @@ -309,10 +313,15 @@ def model_add_chw_loop(model,
secondary_chilled_water_loop.setName(secondary_loop_name)
chw_sizing_control(model, secondary_chilled_water_loop, dsgn_sup_wtr_temp, dsgn_sup_wtr_temp_delt)
chilled_water_loop.additionalProperties.setFeature('is_primary_loop', true)
chilled_water_loop.additionalProperties.setFeature('secondary_loop_name', secondary_chilled_water_loop.name.to_s)
secondary_chilled_water_loop.additionalProperties.setFeature('is_secondary_loop', true)
# primary chilled water pump
# primary chilled water pumps are added when adding chillers
# Add Constant pump, in plant loop, the number of chiller adjustment will assign pump to each chiller
pri_chw_pump = OpenStudio::Model::PumpConstantSpeed.new(model)
# pri_chw_pump = OpenStudio::Model::PumpConstantSpeed.new(model)
pri_chw_pump = OpenStudio::Model::PumpVariableSpeed.new(model)
pump_variable_speed_set_control_type(pri_chw_pump, control_type = 'Riding Curve')
# This pump name is important for function add_ems_for_multiple_chiller_pumps_w_secondary_plant. If you update
# it here, you must update the logic there to account for this
pri_chw_pump.setName("#{chilled_water_loop.name} Primary Pump")
# Will need to adjust the pump power after a sizing run
pri_chw_pump.setRatedPumpHead(OpenStudio.convert(15.0, 'ftH_{2}O', 'Pa').get / num_chillers)
Expand Down Expand Up @@ -375,8 +384,23 @@ def model_add_chw_loop(model,
dist_clg.autosizeNominalCapacity
chilled_water_loop.addSupplyBranchForComponent(dist_clg)
else

# use default efficiency from 90.1-2019
# 1.188 kw/ton for a 150 ton AirCooled chiller
# 0.66 kw/ton for a 150 ton Water Cooled positive displacement chiller
case chiller_cooling_type
when 'AirCooled'
default_cop = kw_per_ton_to_cop(1.188)
when 'WaterCooled'
default_cop = kw_per_ton_to_cop(0.66)
else
default_cop = kw_per_ton_to_cop(0.66)
end
mdahlhausen marked this conversation as resolved.
Show resolved Hide resolved

# make the correct type of chiller based these properties
chiller_sizing_factor = (1.0 / num_chillers).round(2)

# Create chillers and set plant operation scheme
num_chillers.times do |i|
chiller = OpenStudio::Model::ChillerElectricEIR.new(model)
chiller.setName("#{template} #{chiller_cooling_type} #{chiller_condenser_type} #{chiller_compressor_type} Chiller #{i}")
Expand All @@ -391,18 +415,6 @@ def model_add_chw_loop(model,
chiller.setMinimumUnloadingRatio(0.25)
chiller.setChillerFlowMode('ConstantFlow')
chiller.setSizingFactor(chiller_sizing_factor)

# use default efficiency from 90.1-2019
# 1.188 kw/ton for a 150 ton AirCooled chiller
# 0.66 kw/ton for a 150 ton Water Cooled positive displacement chiller
case chiller_cooling_type
when 'AirCooled'
default_cop = kw_per_ton_to_cop(1.188)
when 'WaterCooled'
default_cop = kw_per_ton_to_cop(0.66)
else
default_cop = kw_per_ton_to_cop(0.66)
end
chiller.setReferenceCOP(default_cop)

# connect the chiller to the condenser loop if one was supplied
Expand Down
2 changes: 1 addition & 1 deletion lib/openstudio-standards/standards/Standards.Model.rb
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,7 @@ def model_create_prm_any_baseline_building(user_model, building_type, climate_zo
next if plant_loop_swh_loop?(plant_loop)

plant_loop_apply_prm_number_of_boilers(plant_loop)
plant_loop_apply_prm_number_of_chillers(plant_loop, sizing_run_dir)
plant_loop_apply_prm_number_of_chillers(plant_loop)
end

# Set the baseline number of cooling towers
Expand Down
Loading