Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
fce26be
Add doas test.
joseph-robertson Nov 11, 2020
c5e8d0b
Add doas tests to model_tests.
joseph-robertson Nov 11, 2020
f5248d6
Commit rubocop --auto-correct (Ruby ruby 2.5.8p224 (2020-03-31 revisi…
Nov 11, 2020
1fdbacb
Merge branch 'develop' into issue-3728
jmarrec Jan 27, 2021
94db91d
Add TODO and adjust test slightly
jmarrec Jan 27, 2021
30e05d7
Commit rubocop --auto-correct (Ruby ruby 2.5.8p224 (2020-03-31 revisi…
Jan 27, 2021
74e532f
Merge remote-tracking branch 'origin/develop' into issue-3728
jmarrec Jan 27, 2021
6a472bb
I messed up the test by deleting a line before, sorry
jmarrec Jan 27, 2021
17edd9a
Merge branch 'develop' into issue-3728
joseph-robertson Feb 25, 2021
963cfe7
Merge branch 'issue-3728' of github.com:NREL/OpenStudio-resources int…
joseph-robertson Feb 25, 2021
6552351
Merge branch 'develop' into issue-3728
joseph-robertson Mar 1, 2021
db765d7
Update doas test.
joseph-robertson Mar 1, 2021
eb54cc6
Updates to doas test.
joseph-robertson Mar 2, 2021
cf522ba
Commit rubocop --auto-correct (Ruby ruby 2.5.8p224 (2020-03-31 revisi…
Mar 2, 2021
137132d
Updates.
joseph-robertson Mar 3, 2021
67efd71
Merge branch 'issue-3728' of github.com:NREL/OpenStudio-resources int…
joseph-robertson Mar 3, 2021
3507246
Unit test is missing ATU for Zone
jmarrec Mar 3, 2021
64091ad
Add fans and SPMs to AirLoopHVAC. Place SPM on the outlet of the coil…
jmarrec Mar 3, 2021
0469339
Commit rubocop --auto-correct (Ruby ruby 2.5.8p224 (2020-03-31 revisi…
Mar 3, 2021
ab192df
Rename nodes for debugging
jmarrec Mar 3, 2021
9de3c81
Commit rubocop --auto-correct (Ruby ruby 2.5.8p224 (2020-03-31 revisi…
Mar 3, 2021
9f86738
Name the airloops and remove setting the schedule.
joseph-robertson Mar 4, 2021
8100ae4
Commit rubocop --auto-correct (Ruby ruby 2.5.8p224 (2020-03-31 revisi…
Mar 4, 2021
4eb6c90
Merge branch 'develop' into issue-3728
joseph-robertson Mar 16, 2021
77a0972
Merge branch 'issue-3728' of github.com:NREL/OpenStudio-resources int…
joseph-robertson Mar 16, 2021
2709f22
Trigger the test.
joseph-robertson Mar 16, 2021
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
145 changes: 145 additions & 0 deletions model/simulationtests/doas.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# frozen_string_literal: true

require 'openstudio'
require_relative 'lib/baseline_model'

model = BaselineModel.new

# make a 2 story, 100m X 50m, 2 zone building
model.add_geometry({ 'length' => 100,
'width' => 50,
'num_floors' => 2,
'floor_to_floor_height' => 4,
'plenum_height' => 0,
'perimeter_zone_depth' => 0 })

# add windows at a 40% window-to-wall ratio
model.add_windows({ 'wwr' => 0.4,
'offset' => 1,
'application_type' => 'Above Floor' })
# add thermostats
model.add_thermostats({ 'heating_setpoint' => 24,
'cooling_setpoint' => 28 })

# assign constructions from a local library to the walls/windows/etc. in the model
model.set_constructions

# set whole building space type; simplified 90.1-2004 Large Office Whole Building
model.set_space_type

# add design days to the model (Chicago)
model.add_design_days

# In order to produce more consistent results between different runs,
# we sort the zones by names
zones = model.getThermalZones.sort_by { |z| z.name.to_s }
zone1 = zones[0]
zone2 = zones[1]

# Outdoor Air Systems
controller1 = OpenStudio::Model::ControllerOutdoorAir.new(model)
oas1 = OpenStudio::Model::AirLoopHVACOutdoorAirSystem.new(model, controller1)
airloop1 = OpenStudio::Model::AirLoopHVAC.new(model)
airloop1.setName('LOOP1')
supplyOutletNode1 = airloop1.supplyOutletNode
oas1.addToNode(supplyOutletNode1)
fan1 = OpenStudio::Model::FanVariableVolume.new(model)
fan1.addToNode(supplyOutletNode1)
atu1 = OpenStudio::Model::AirTerminalSingleDuctConstantVolumeNoReheat.new(model, model.alwaysOnDiscreteSchedule)
airloop1.addBranchForZone(zone1, atu1)
oas1.outboardOANode.get.setName("#{airloop1.nameString} OA Inlet Node")
oas1.outboardReliefNode.get.setName("#{airloop1.nameString} Exhaust Node")

# Outdoor Air System 2
controller2 = OpenStudio::Model::ControllerOutdoorAir.new(model)
oas2 = OpenStudio::Model::AirLoopHVACOutdoorAirSystem.new(model, controller2)
airloop2 = OpenStudio::Model::AirLoopHVAC.new(model)
airloop2.setName('LOOP2')
supplyOutletNode2 = airloop2.supplyOutletNode
oas2.addToNode(supplyOutletNode2)
fan2 = OpenStudio::Model::FanVariableVolume.new(model)
fan2.addToNode(supplyOutletNode2)
atu2 = OpenStudio::Model::AirTerminalSingleDuctConstantVolumeNoReheat.new(model, model.alwaysOnDiscreteSchedule)
airloop2.addBranchForZone(zone2, atu2)
oas2.outboardOANode.get.setName("#{airloop2.nameString} OA Inlet Node")
oas2.outboardReliefNode.get.setName("#{airloop2.nameString} Exhaust Node")

# Dedicated Outdoor Air System
controller = OpenStudio::Model::ControllerOutdoorAir.new(model) # this won't be translated
oas = OpenStudio::Model::AirLoopHVACOutdoorAirSystem.new(model, controller)
doas = OpenStudio::Model::AirLoopHVACDedicatedOutdoorAirSystem.new(oas)
doas.addAirLoop(airloop1)
doas.addAirLoop(airloop2)

# Equipment
coil_cooling_water = OpenStudio::Model::CoilCoolingWater.new(model)
coil_heating_water = OpenStudio::Model::CoilHeatingWater.new(model)
fan = OpenStudio::Model::FanSystemModel.new(model)
coil_cooling_water.addToNode(oas.outboardOANode.get)
coil_heating_water.addToNode(oas.outboardOANode.get)
fan.addToNode(oas.outboardOANode.get)
oas.outboardOANode.get.setName("#{oas.nameString} OA Inlet Node")
fan.outletModelObject.get.setName("#{oas.nameString} Fan Outlet Node")
coil_heating_water.airOutletModelObject.get.setName("#{oas.nameString} HC Outlet Node")
coil_cooling_water.airOutletModelObject.get.setName("#{oas.nameString} CC Outlet Node")

lat_temp_f = 70.0
lat_temp_c = OpenStudio.convert(lat_temp_f, 'F', 'C').get
lat_temp_sch = OpenStudio::Model::ScheduleRuleset.new(model)
lat_temp_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), lat_temp_c)
lat_stpt_manager1 = OpenStudio::Model::SetpointManagerScheduled.new(model, lat_temp_sch)
lat_stpt_manager1.addToNode(coil_cooling_water.airOutletModelObject.get.to_Node.get)
lat_stpt_manager2 = lat_stpt_manager1.clone(model).to_SetpointManagerScheduled.get
lat_stpt_manager2.addToNode(coil_heating_water.airOutletModelObject.get.to_Node.get)

lat_stpt_manager3 = lat_stpt_manager1.clone(model).to_SetpointManagerScheduled.get
lat_stpt_manager3.addToNode(supplyOutletNode1)

lat_stpt_manager4 = lat_stpt_manager1.clone(model).to_SetpointManagerScheduled.get
lat_stpt_manager4.addToNode(supplyOutletNode2)

# Chilled Water Plant
chw_loop = OpenStudio::Model::PlantLoop.new(model)
chw_loop.setMaximumLoopTemperature(98)
chw_loop.setMinimumLoopTemperature(1)
chw_temp_f = 44
chw_delta_t_r = 10.1 # 10.1F delta-T
chw_temp_c = OpenStudio.convert(chw_temp_f, 'F', 'C').get
chw_delta_t_k = OpenStudio.convert(chw_delta_t_r, 'R', 'K').get
chw_temp_sch = OpenStudio::Model::ScheduleRuleset.new(model)
chw_temp_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), chw_temp_c)
chw_stpt_manager = OpenStudio::Model::SetpointManagerScheduled.new(model, chw_temp_sch)
chw_stpt_manager.addToNode(chw_loop.supplyOutletNode)
sizing_plant = chw_loop.sizingPlant
sizing_plant.setLoopType('Cooling')
sizing_plant.setDesignLoopExitTemperature(chw_temp_c)
sizing_plant.setLoopDesignTemperatureDifference(chw_delta_t_k)
chw_pump = OpenStudio::Model::PumpVariableSpeed.new(model)
chw_pump.addToNode(chw_loop.supplyInletNode)
chw_loop.addDemandBranchForComponent(coil_cooling_water)
chiller = OpenStudio::Model::ChillerElectricEIR.new(model)
chw_loop.addSupplyBranchForComponent(chiller)

# Hot Water Plant
hw_loop = OpenStudio::Model::PlantLoop.new(model)
hw_loop.setMinimumLoopTemperature(10)
hw_temp_f = 140
hw_delta_t_r = 20 # 20F delta-T
hw_temp_c = OpenStudio.convert(hw_temp_f, 'F', 'C').get
hw_delta_t_k = OpenStudio.convert(hw_delta_t_r, 'R', 'K').get
hw_temp_sch = OpenStudio::Model::ScheduleRuleset.new(model)
hw_temp_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), hw_temp_c)
hw_stpt_manager = OpenStudio::Model::SetpointManagerScheduled.new(model, hw_temp_sch)
hw_stpt_manager.addToNode(hw_loop.supplyOutletNode)
sizingPlant = hw_loop.sizingPlant()
sizingPlant.setLoopType('Heating')
sizingPlant.setDesignLoopExitTemperature(82.0)
sizingPlant.setLoopDesignTemperatureDifference(11.0)
hw_pump = OpenStudio::Model::PumpVariableSpeed.new(model)
hw_pump.addToNode(hw_loop.supplyInletNode)
hw_loop.addDemandBranchForComponent(coil_heating_water)
boiler = OpenStudio::Model::BoilerHotWater.new(model)
hw_loop.addSupplyBranchForComponent(boiler)

# save the OpenStudio model (.osm)
model.save_openstudio_osm({ 'osm_save_directory' => Dir.pwd, 'osm_name' => 'in.osm' })
9 changes: 9 additions & 0 deletions model_tests.rb
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,15 @@ def test_dist_ht_cl_rb
result = sim_test('dist_ht_cl.rb')
end

# TODO: To be added in the next official release after: 3.1.0
# def test_doas_osm
# result = sim_test('doas.osm')
# end

def test_doas_rb
result = sim_test('doas.rb')
end

def test_dsn_oa_w_ideal_loads_osm
result = sim_test('dsn_oa_w_ideal_loads.osm')
end
Expand Down