Question-and-Answer Resource for the Building Energy Modeling Community
Get started with the Help page
Ask Your Question

AEDG HVAC System possible measure settings

asked 2015-04-23 15:46:10 -0500

dpud12's avatar

updated 2017-08-05 13:20:53 -0500

I would like to use a modified version of the AEDG HVAC measures to create a measure that allows the user to input the type of system they would like. Is there any documentation as to the current options that are supported for the key inputs for the AEDG HVAC measures?

primaryHVAC = {"doas" => false, "fan" => "Variable", "heat" => "Water", "cool" => "Water"}
secondaryHVAC = {"fan" => "None", "heat" => "None", "cool" => "None"} #ML not used for office; leave or empty?
zoneHVAC = "Baseboard"
chillerType = "AirCooled" #set to none if chiller not used
radiantChillerType = "None" #set to none if not radiant system
allHVAC = {"primary" => primaryHVAC,"secondary" => secondaryHVAC,"zone" => zoneHVAC}
edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2015-04-24 11:54:18 -0500

updated 2015-04-24 12:01:16 -0500

You probably want to look in the "resources" directory at the OSLib_HVAC.rb file. This contains common methods used by a lot of the AEDG HVAC measures.

For example there is a method to make the primary air loop

def OsLib_HVAC.createPrimaryZoneEquipment(model, runner, options)

"model" is passed in because we need access to the model to get and add things to it. "runner" gives us the ability to add log messages from the helper. "options" is a hash containing many objects. If you search for "options" in the method above you will for example see an if statement with many elsif options for options["ZoneHVAC"] that has values such as ASHP, Baseboard, Radiant or DualDuct. You could extend this to have more methods, or add another key to the options hash to store additional inputs such as motor efficiency values, which or currently hard coded. Below is one of the "elsif" options for this ZoneHVAC.

    elsif options["zoneHVAC"] == "Baseboard"
      # create baseboard heater add add to thermal zone and hot water loop
      baseboard_coil =
      baseboard_heater =, model.alwaysOnDiscreteSchedule(), baseboard_coil)
    elsif options["zoneHVAC"] == "Radiant"
      #. . .

Back to your original question there is a hash value for options["PrimaryHVAC']. But instead of just returning a string, as you have found it returns its own hash. Really, we could have just made the main hash a lot bigger, but in this case when we ask about it in the measure check for the value two hashes deep. Below is an example of that in the method to make the primary air loop. Note that we are not currently setup to handle electric heat on the primary air loop, we didn't need it, but if you did, you could just extent the statement with an "elsif" option before the final "else".

    if options["primaryHVAC"]["heat"] == "Water"
      # water coil
      heating_coil =, model.alwaysOnDiscreteSchedule())
      air_loop_comps << heating_coil
      # gas coil
      heating_coil =, model.alwaysOnDiscreteSchedule())
      air_loop_comps << heating_coil

One last thing to think about. You will notice for the AEDG''s we didn't just make one measure for all of HVAC Types with a choice list to choose the one you want. We felt they were different enough that the user can choose form a collection of measures each which is focused on one type of HVAC system. There is no right or wrong answer for weather they should all be one measure or many. It depends on the needs of your use-case and how complex you want them. Our AEDG HVACmeasures also have code to address removal of existing systems, and handling plenums. If you know you will be working from clean models then you can simplify a lot of the code. You could also hand stub in air loops in your model vs. allowing OpenStudio to determine which zones go on which loop. In this case all of the objects on the ... (more)

edit flag offensive delete link more


@David Goldwasser, thanks so much for the more than thorough answer. I have been digging into the OSLib_HVAC file and see what you're saying for how other elseif options can be easily added. Also, thanks for the insight one using individual measures, will do with that type of workflow for my project

dpud12's avatar dpud12  ( 2015-04-24 12:22:20 -0500 )edit

On a side note, the naming of the AEDG Dual Duct systems puzzles me. I was under the impression that the naming convention of "Dual Duct" is for an all-air system in which there is separate duct work for the cold and hot supply air. However, the AEDG Dual Duct DOAS systems employ zone level baseboard heating and single duct diffusers for the conditioned air.

dpud12's avatar dpud12  ( 2015-04-24 13:43:37 -0500 )edit

@dpud12 the AEDG Dual Duct measure is an approximation using the zone baseboard because dual ducts are not implemented in OpenStudio yet. Dual duct support will be available later this year.

Kyle Benne's avatar Kyle Benne  ( 2015-04-27 16:22:36 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Training Workshops


Question Tools



Asked: 2015-04-23 15:46:10 -0500

Seen: 235 times

Last updated: Apr 24 '15