Skip to content

New Features for Liquid-cooled Data Centers - #11667

Draft
yujiex wants to merge 9 commits into
developfrom
datacenter_lbl
Draft

New Features for Liquid-cooled Data Centers#11667
yujiex wants to merge 9 commits into
developfrom
datacenter_lbl

Conversation

@yujiex

@yujiex yujiex commented Jul 2, 2026

Copy link
Copy Markdown
Collaborator

Pull request overview

Introduction

The data center industry is rapidly shifting toward higher adoption of liquid cooling technologies, often involving supply water temperatures between 80F and 120F. Currently, EnergyPlus lacks native support for water-cooled or liquid-cooled IT equipment. Users must rely on complex and inefficient workarounds combining the existing air-cooled IT equipment object with plant load profiles and Energy Management System (EMS) scripting. Previous modeling efforts, such as the MOSTCOOL project, had to rely on PlantComponent:UserDefined to link with external piping modules or use HeatExchanger:FluidToFluid to approximate a Coolant Distribution Unit (CDU). These workarounds are not robust, and relying on external modules defeats the goal of having a native, self-contained EnergyPlus solution. Furthermore, using simple load profiles like LoadProfile:Plant on the fluid side fails to generate an accurate electrical load for proper meter reporting and cannot dynamically monitor actual chip performance constraints. There is also no native capability to accurately model hybrid data centers that utilize a combination of liquid cooling for high-density chips and air cooling for the remaining components not on the liquid loop.

The proposal introduces three new IDD objects: ElectricEquipment:ITE:LiquidCooled (a parent object modeling transient rack power and passing thermal load downstream), Coil:Cooling:ITE:ColdPlate (a physics-based single-phase cold plate coil connecting directly to standard EnergyPlus plant loops), and Coil:Cooling:ITE:UserDefined (an EMS-driven hook for two-phase, RDHx, or immersion cooling research). Together these integrate liquid-cooled IT equipment into the existing plant network solver—enabling use of standard HeatExchanger:FluidToFluid and pump objects to represent Coolant Distribution Units—while dynamically splitting captured heat between the liquid loop and zone air based on cold plate thermal limits.

Pull Request Author

  • Title of PR should be user-synopsis style (clearly understandable in a standalone changelog context)
  • Label the PR with at least one of: Defect, Refactoring, NewFeature, Performance, and/or DoNoPublish
  • Pull requests that impact EnergyPlus code must also include unit tests to cover enhancement or defect repair
  • Author should provide a "walkthrough" of relevant code changes using a GitHub code review comment process
  • If any diffs are expected, author must demonstrate they are justified using plots and descriptions
  • If changes fix a defect, the fix should be demonstrated in plots and descriptions
  • If any defect files are updated to a more recent version, upload new versions here or on DevSupport
  • If IDD requires transition, transition source, rules, ExpandObjects, and IDFs must be updated, and add IDDChange label
  • If structural output changes, add to output rules file and add OutputChange label
  • If adding/removing any LaTeX docs or figures, update that document's CMakeLists file dependencies
  • If adding/removing any output files (e.g., eplustbl.*)
    • Update ..\scripts\Epl-run.bat
    • Update ..\scripts\RunEPlus.bat
    • Update ..\src\EPLaunch\ MainModule.bas, epl-ui.frm, and epl.vbp (VersionComments)
    • Update ...github\workflows\energyplus.py

Reviewer

  • Perform a Code Review on GitHub
  • If branch is behind develop, merge develop and build locally to check for side effects of the merge
  • If defect, verify by running develop branch and reproducing defect, then running PR and reproducing fix
  • If feature, test running new feature, try creative ways to break it
  • CI status: all green or justified
  • Check that performance is not impacted (CI Linux results include performance check)
  • Run Unit Test(s) locally
  • Check any new function arguments for performance impacts
  • Verify IDF naming conventions and styles, memos and notes and defaults
  • If new idf included, locally check the err file and other outputs

@yujiex yujiex self-assigned this Jul 2, 2026
@yujiex yujiex added the NewFeature Includes code to add a new feature to EnergyPlus label Jul 2, 2026

@JasonGlazer JasonGlazer left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for proposing to add such an important new feature for EnergyPlus.

Comment thread design/FY2026/NFP_DataCenter_LBL.md Outdated
\object-list ScheduleNames
\note Schedule (0.0 to 1.0) defining the fraction of the total IT liquid load directed to this specific coil.
\note If blank, defaults to 1.0.
A10, \field Cooling Coil Object Type 2

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I'm struggling to understand how multiple cooling coil objects could physically be present on a single server or chip? Do you really need multiple coils?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The intention is to allow for something like 50% of the cooling load is handled by single-phase cold plate, and 50% handled by other forms of cooling, like rear door HX.

Comment thread design/FY2026/NFP_DataCenter_LBL.md Outdated

## Outputs Description ##

N/A

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Please describe any new output variables or output tables that would be added.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Thanks. Added some output variables to this section


At the rack level, a new ElectricEquipment:ITE:LiquidCooled parent object natively represents liquid-cooled data center IT equipment racks. This object calculates the total transient IT power load, scales the system using a multiplier for rapid block-modeling of identical racks, and references a specific cooling coil component (e.g., Coil:Cooling:ITE:ColdPlate). By acting as the parent, the IT object calculates the raw thermal load and passes it down to the coil to determine the physical heat transfer split between the liquid loop and the zone air.

At the cooling coil level, the simulation establishes the absolute maximum physical cooling capacity based on the user-defined maximum allowable chip temperature, the real-time fluid inlet conditions provided by the plant loop, and the cold plate's overall thermal resistance (or heat transfer coefficient). During the simulation, the engine continuously scales the nominal thermal resistance using a bivariate modifier curve to account for changing system conditions like varying flow fractions and fluid temperatures. For standard single-phase systems, this physical heat transfer ceiling is calculated using the sensible heat capacity of the liquid and the combined solid and convective thermal resistances.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

How much would it take to add two phase refrigerant support? I understand that is also an approach that is being used (essentially the circuit board including the chips are in a refrigerant bath).

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The two-phased one is handled with the Coil:Cooling:ITE:UserDefined. The necessary fields in this object still needs some further thought.


## Approach ##

The development approach focuses on adding a suite of native data center IT and cooling coil objects that integrate directly into the existing EnergyPlus plant loop architecture. By formatting the liquid cooling hardware as standard EnergyPlus coil objects, this approach leverages the robust, existing plant network solver, allowing users to model Coolant Distribution Units (CDUs) using standard HeatExchanger:FluidToFluid and pump objects. Figure 2 shows a schematic diagram of the added components and their relationships.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This field seems to be moving so fast with new approaches being applied almost yearly. Have you considered ways to "future-proof" this approach more? You know much more about this field than me but perhaps approaches to IT cooling that seem on the horizon should be thought about and see if these additions could support them.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

For the Coil:Cooling:ITE:* objects, currently there's just the Coil:Cooling:ITE:ColdPlate and Coil:Cooling:ITE:UserDefined, but we would like to implement things like Coil:Cooling:ITE: to handle future technology like immersion cooling.

@mitchute

mitchute commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

@JasonGlazer thanks for the feedback. We're still iterating on this one, so I think you (and others) can hold off on reviewing for now.

Edit: just converted to a draft.

@mitchute
mitchute marked this pull request as draft July 8, 2026 16:11
Yujie Xu added 6 commits July 21, 2026 11:33
idd/Energy+.idd.in: new IDD object with all 18 alpha / 8 numeric fields from the
NFP, placed after ElectricEquipment:ITE:AirCooled (fixed the Zone/Space Name
field to use the real ZoneNames/SpaceNames reference groups rather than the
NFP's placeholder).

DataHeatBalance.hh: IntGainType::ElectricEquipmentITELiquidCooled,
ITECoolingCoilType enum, LiquidITERptVars enum, ITEquipDataLiquidCooled
struct (with a 4-slot ITELiquidCoolingCoilSpec array for the Cooling Coil
references), matching ZoneReportVars fields for zone/space rollups, and the
ZoneITELiquidCooled/TotITELiquidCooledEquip containers.

InternalHeatGains.cc/.hh: GetInput parsing block (schedules, optional power
modifier curve, coil slot parsing/validation), new CalcZoneITEqLiquidCooled calc
function, wired into InitInternalHeatGains, and three-tier (object/zone/space)
output variables in setupIHGOutputs.

since Coil:Cooling:ITE:ColdPlate/UserDefined don't exist yet, the coil reference
fields are fully parsed/validated but not simulated — Liquid Heat Gain = Total
Heat Generation × Liquid Heat Capture Fraction with no capacity cap, and Air
Heat Gain = Total Heat Generation − Liquid Heat Gain is registered as the zone's
convective spillover gain.
InternalHeatGains_CheckZoneComponentLoadSubtotals fails: a guard test that
specifically checks whether a newly added IntGainType was wired into all the
hardcoded subtotal lists.

Fixed by adding ElectricEquipmentITELiquidCooled
alongside ElectricEquipmentITEAirCooled in four places: IntGainTypesEquip and
TradIntGainTypes in InternalHeatGains.cc, and IntGainTypesOccupied in both
UFADManager.cc and DisplacementVentMgr.hh (used by CrossVentMgr too) — so the
new liquid-cooled air-spillover gain now participates correctly in zone
component-load subtotals and UFAD/displacement/cross-ventilation room air
models, same as the air-cooled object.
@nrel-bot-2c

Copy link
Copy Markdown

@yujiex it has been 28 days since this pull request was last updated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

NewFeature Includes code to add a new feature to EnergyPlus

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants