Skip to content

Advanced research feature: Blower off delay/latent degradation model#2182

Open
shorowit wants to merge 19 commits intomasterfrom
blower_off_delay
Open

Advanced research feature: Blower off delay/latent degradation model#2182
shorowit wants to merge 19 commits intomasterfrom
blower_off_delay

Conversation

@shorowit
Copy link
Copy Markdown
Contributor

@shorowit shorowit commented Mar 24, 2026

Pull Request Description

Adds EMS program for blower off delay/latent degradation model, as described in Understanding the Dehumidification Performance of Air-Conditioning Equipment at Part-Load Conditions.

TODO:

  • Continuous fan mode?
  • Test multiple HVAC systems
  • Test multiple dwelling units
  • Test unit multiplier
  • Test subhourly timesteps
  • Verify results (magnitude?)
  • Skip EMS program if blower off delay == 0? No
  • Exclude non-central systems (e.g., room ACs; MSHPs?)
  • Add "latent degradation" to HPXML input?
  • Suggest only using the model when modeling humidity control (dehumidifier)?
  • Replace NLR publication with FSEC publication for reference
  • Better document code @jonwinkler

Checklist

Not all may apply:

  • Schematron validator (EPvalidator.sch) has been updated
  • Sample files have been added/updated (openstudio tasks.rb update_hpxmls)
  • Tests have been added/updated (e.g., HPXMLtoOpenStudio/tests/test*.rb and/or workflow/tests/test*.rb)
  • Documentation has been updated
  • Changelog has been updated
  • openstudio tasks.rb update_measures has been run
  • No unexpected changes to simulation results of sample files

@shorowit shorowit self-assigned this Mar 24, 2026
@shorowit shorowit added the enhancement New feature or request label Mar 24, 2026
@shorowit shorowit moved this from Triage to In progress in OpenStudio-HPXML Mar 24, 2026
Copy link
Copy Markdown
Collaborator

@bpark1327 bpark1327 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@shorowit I went through Jon’s code and the EMS program and spotted a few differences, so I wanted to document them.
Jon's code: energyplus.py

shorowit and others added 3 commits March 26, 2026 16:31
…HPXML into blower_off_delay

# Conflicts:
#	BuildResidentialHPXML/measure.xml
#	HPXMLtoOpenStudio/measure.xml
@jonwinkler
Copy link
Copy Markdown
Collaborator

The implementation (and the original implementation) has lot of equations/assumptions but very few comments. Would it be helpful for me to consult the original reference and add comments to the code so we have a better understanding for where these calculations/assumptions originate from?

@shorowit shorowit marked this pull request as ready for review April 3, 2026 21:21
jonwinkler and others added 3 commits April 7, 2026 15:05
…HPXML into blower_off_delay

# Conflicts:
#	BuildResidentialHPXML/measure.xml
#	HPXMLtoOpenStudio/measure.xml
Copy link
Copy Markdown
Contributor Author

@shorowit shorowit left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some walk-thru comments.

Comment on lines +10 to +12
"Latent Degradation Model w/ Blower-Off Delay, 0 sec" 0
"Latent Degradation Model w/ Blower-Off Delay, 45 sec" 45
"Latent Degradation Model w/ Blower-Off Delay, 90 sec" 90
Copy link
Copy Markdown
Contributor Author

@shorowit shorowit Apr 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added three "advanced feature" options for the BuildResidentialHPXML measure.

Comment on lines +47 to +48
``LatentDegradationModel/Enabled`` boolean No false Whether to use the latent degradation model [#]_
``LatentDegradationModel/HVACBlowerOffDelay`` double sec >= 0 No See [#]_ HVAC blower-off delay when using the latent degradation model
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New inputs.

name: Constants::ObjectTypeWholeHouseFan,
end_use: Constants::ObjectTypeWholeHouseFan,
space: conditioned_space, # no heat gain, so assign the equipment to an arbitrary space
design_level: nil, # will be EMS-actuated
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just some unrelated cleanup throughout to avoid having to pass a bunch of nil values to Model.add_electric_equipment and Model.add_other_equipment.

name: Constants::ObjectTypeBatteryLossesAdjustment,
end_use: Constants::ObjectTypeBatteryLossesAdjustment,
space: space,
design_level: 0.01,
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This object is EMS-actuated, so it's confusing to specify a design level (that won't be used).

Comment on lines -11 to +13
RatedCFMPerTon = 400.0 # cfm/ton of rated capacity, RESNET HERS Addendum 82
RatedCFMPerTonDX = 400.0 # cfm/ton of rated capacity, airflow rate assumed during rating test for AC/HP systems, RESNET HERS Addendum 82
ActualCFMPerTonDX = 360.0 # cfm/ton of rated capacity, default actual airflow rate for AC/HP systems, RESNET
ActualCFMPerTonHeat = 240.0 # cfm/ton of rated capacity, default actual airflow rate for furnaces, RESNET
Copy link
Copy Markdown
Contributor Author

@shorowit shorowit Apr 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clarifying that the rated cfm/ton value is for DX systems, and moved our actual cfm/ton values from hvac_sizing.rb to here so we can see everything together.

)
end

# Adds an EMS program to model latent degradation. The model includes latent degradation during
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new EMS program.

Constants::ObjectTypeDSEHeatingHeatPumpBackupFanPump => EUT::HeatingHeatPumpBackupFanPump,
Constants::ObjectTypeDSECooling => EUT::Cooling,
Constants::ObjectTypeDSECoolingFanPump => EUT::CoolingFanPump,
Constants::ObjectTypeBlowerOffDelayFanPower => EUT::CoolingFanPump,
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Assign the extra blower fan power to the Cooling Fans/Pumps end use.

Though it makes me wonder about heating. It appears that the EMS program only models extra blower fan power related to cooling. @jonwinkler, why is that?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@shorowit, This model is for only for cooling. I think heat pumps use a similar strategy in heating mode, but this model does not account for that.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, I figured that was going to be your answer. That's fine since our blower-off delay input is within the latent degradation model (SimulationControl/AdvancedResearchFeatures/LatentDegradationModel/HVACBlowerOffDelay), but I should probably clarify this point so a user is not surprised.

Comment on lines -37 to +42
base-bldgtype-mf-unit-shared-boiler-chiller-fan-coil-ducted.xml,1334.72,144.0,1037.22,0.0,1181.22,144.0,9.5,153.5,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
base-bldgtype-mf-unit-shared-boiler-chiller-fan-coil.xml,1315.2,144.0,1018.8,0.0,1162.8,144.0,8.4,152.4,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
base-bldgtype-mf-unit-shared-boiler-chiller-fan-coil-ducted.xml,1334.82,144.0,1037.26,0.0,1181.26,144.0,9.56,153.56,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
base-bldgtype-mf-unit-shared-boiler-chiller-fan-coil.xml,1315.21,144.0,1018.82,0.0,1162.82,144.0,8.39,152.39,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I made a small change to the airflow rate assumptions for fan coils (in hvac.rb), so these results are changing very slightly.

Comment on lines +432 to +435
"sample_files/base-appliances-dehumidifier-mechvent.xml": {
"parent_hpxml": "sample_files/base-appliances-dehumidifier.xml",
"location_epw_path": "USA_TX_Houston-Bush.Intercontinental.AP.722430_TMY3.epw",
"ventilation_mechanical": "Supply Only"
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a new sample file that is in Houston (more humid than Dallas) and has supply-only mechanical ventilation, so it shows a higher dehumidification load that we can test the latent degradation model on top of.

@shorowit shorowit requested a review from jonwinkler April 13, 2026 15:17
@shorowit shorowit requested a review from bpark1327 April 13, 2026 15:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

Status: In progress

Development

Successfully merging this pull request may close these issues.

3 participants