Skip to content
Draft
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
236 changes: 236 additions & 0 deletions design/FY2026/NFP_DataCenter_LBL.md

Large diffs are not rendered by default.

Binary file added design/FY2026/figure_1_datacenter_lbl.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added design/FY2026/figure_2_datacenter_lbl.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
129 changes: 129 additions & 0 deletions idd/Energy+.idd.in
Original file line number Diff line number Diff line change
Expand Up @@ -23123,6 +23123,135 @@ ElectricEquipment:ITE:AirCooled,
\type object-list
\object-list ScheduleNames

ElectricEquipment:ITE:LiquidCooled,
\memo Represents liquid-cooled data center IT equipment racks.
\memo Calculates power consumption and rejects heat to ITE cooling coils.
\min-fields 14
A1 , \field Name
\required-field
\type alpha
\reference ITEAndITEListNames
A2 , \field Zone or Space Name
\note ZoneList and SpaceList names are not allowed.
\required-field
\type object-list
\object-list ZoneNames
\object-list SpaceNames
\note Zone or Space the IT equipment is located in.
\note Spillover air heat will be rejected to this space's heat balance.
A3 , \field Availability Schedule Name
\type object-list
\object-list ScheduleNames
\note Availability schedule name for this equipment. Schedule value > 0 means the equipment is on.
\note If this field is blank, the equipment is always available.
A4 , \field Compute Load Schedule Name
\required-field
\type object-list
\object-list ScheduleNames
\note Defines the transient CPU loading schedule.
\note This 0-1 factor multiplied by the design power input is the current CPU power.
N1 , \field Design Power Input
\required-field
\type real
\units W
\minimum 0
\ip-units W
\note Max power consumption of a single IT equipment rack.
N2 , \field Multiplier
\type real
\default 1.0
\minimum 1.0
\note Scales power and heat to represent multiple identical racks.
N3 , \field Design Fan Power Input Fraction
\type real
\minimum 0.0
\maximum 1.0
\default 0.0
\note Retained for auxiliary server fans contributing to air load.
A5 , \field IT Equipment Power Modifier Curve Name
\type object-list
\object-list BivariateFunctions
\note Modifies power based on loading (x) and zone air temperature (y).
\note This curve (table) should equal 1.0 at design conditions.
\note If this field is left blank, the curve is assumed to always equal 1.0.
N4 , \field Liquid Heat Capture Fraction
\type real
\minimum 0.0
\maximum 1.0
\default 0.8
\note The fraction of the total ITE heat generation (CPU + Fan) that is removed by the liquid cooling
\note loop at design conditions. The remaining fraction is transferred to the zone air.
A6 , \field Liquid Heat Capture Fraction Schedule Name
\type object-list
\object-list ScheduleNames
\note If provided, this schedule multiplies the Liquid Heat Capture Fraction field. This allows the
\note capture effectiveness to vary dynamically during the simulation.
A7 , \field Cooling Coil 1 Object Type
\required-field
\type choice
\key Coil:Cooling:ITE:ColdPlate
\key Coil:Cooling:ITE:UserDefined
\note The type of the first cooling component handling physical heat transfer.
A8 , \field Cooling Coil 1 Name
\required-field
\type object-list
\object-list CoilCoolingITENames
\note The specific name of the first cooling component handling physical heat transfer.
N5 , \field Cooling Coil 1 Load Fraction
\type real
\minimum 0.0
\maximum 1.0
\note A static fraction (0.0 to 1.0) of the total IT liquid load directed to this coil.
\note If this field is used, the Schedule Name field below should be left blank.
A9 , \field Cooling Coil 1 Load Fraction Schedule Name
\type object-list
\object-list ScheduleNames
\note Schedule (0.0 to 1.0) defining the fraction of the total IT liquid load directed to this coil.
\note If this field is used, the static Load Fraction field above should be left blank.
A10, \field Cooling Coil 2 Object Type
\type choice
\key Coil:Cooling:ITE:ColdPlate
\key Coil:Cooling:ITE:UserDefined
\note The type of the second cooling component, if applicable (e.g., a secondary RDHx).
A11, \field Cooling Coil 2 Name
\type object-list
\object-list CoilCoolingITENames
N6 , \field Cooling Coil 2 Load Fraction
\type real
\minimum 0.0
\maximum 1.0
A12, \field Cooling Coil 2 Load Fraction Schedule Name
\type object-list
\object-list ScheduleNames
A13, \field Cooling Coil 3 Object Type
\type choice
\key Coil:Cooling:ITE:ColdPlate
\key Coil:Cooling:ITE:UserDefined
A14, \field Cooling Coil 3 Name
\type object-list
\object-list CoilCoolingITENames
N7 , \field Cooling Coil 3 Load Fraction
\type real
\minimum 0.0
\maximum 1.0
A15, \field Cooling Coil 3 Load Fraction Schedule Name
\type object-list
\object-list ScheduleNames
A16, \field Cooling Coil 4 Object Type
\type choice
\key Coil:Cooling:ITE:ColdPlate
\key Coil:Cooling:ITE:UserDefined
A17, \field Cooling Coil 4 Name
\type object-list
\object-list CoilCoolingITENames
N8 , \field Cooling Coil 4 Load Fraction
\type real
\minimum 0.0
\maximum 1.0
A18; \field Cooling Coil 4 Load Fraction Schedule Name
\type object-list
\object-list ScheduleNames

ZoneBaseboard:OutdoorTemperatureControlled,
\memo Specifies outside temperature-controlled electric baseboard heating.
\memo If a ZoneList, SpaceList, or a Zone comprised of more than one Space is specified
Expand Down
66 changes: 66 additions & 0 deletions src/EnergyPlus/DataHeatBalance.hh
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@ namespace DataHeatBalance {
AirTerminalUserDefined,
PackagedTESCoilTank,
ElectricEquipmentITEAirCooled,
ElectricEquipmentITELiquidCooled,
SecCoolingDXCoilSingleSpeed,
SecHeatingDXCoilSingleSpeed,
SecCoolingDXCoilTwoSpeed,
Expand Down Expand Up @@ -355,6 +356,7 @@ namespace DataHeatBalance {
"AIRTERMINAL:SINGLEDUCT:USERDEFINED",
"COIL:COOLING:DX:SINGLESPEED:THERMALSTORAGE",
"ELECTRICEQUIPMENT:ITE:AIRCOOLED",
"ELECTRICEQUIPMENT:ITE:LIQUIDCOOLED",
"COIL:COOLING:DX:SINGLESPEED",
"COIL:HEATING:DX:SINGLESPEED",
"COIL:COOLING:DX:TWOSPEED",
Expand Down Expand Up @@ -413,6 +415,7 @@ namespace DataHeatBalance {
"AirTerminal:SingleDuct:UserDefined",
"Coil:Cooling:DX:SingleSpeed:ThermalStorage",
"ElectricEquipment:ITE:AirCooled",
"ElectricEquipment:ITE:LiquidCooled",
"Coil:Cooling:DX:SingleSpeed",
"Coil:Heating:DX:SingleSpeed",
"Coil:Cooling:DX:TwoSpeed",
Expand Down Expand Up @@ -987,6 +990,29 @@ namespace DataHeatBalance {
Num
};

// Liquid-cooled ITE Equipment cooling coil type (Cooling Coil N Object Type field)
enum class ITECoolingCoilType
{
Invalid = -1,
ColdPlate,
UserDefined,
Num
};
static constexpr std::array<std::string_view, static_cast<int>(ITECoolingCoilType::Num)> ITECoolingCoilTypeNamesUC = {
"COIL:COOLING:ITE:COLDPLATE", "COIL:COOLING:ITE:USERDEFINED"};

enum class LiquidITERptVars
{
Invalid = -1,
CPU = 0, // ITE CPU Electric Power/Energy
Fan, // ITE Fan Electric Power/Energy
TotalElectric, // ITE Total Electric Power/Energy
TotalHeatGen, // ITE Total Heat Generation Power(Rate)/Energy
LiquidHeatGain, // ITE Liquid Heat Gain Power(Rate)/Energy
AirHeatGain, // ITE Air Heat Gain to Zone Power(Rate)/Energy - convective gain
Num
};

struct ITEquipData // IT Equipment
{
// Members
Expand Down Expand Up @@ -1061,6 +1087,40 @@ namespace DataHeatBalance {
Real64 RHBelowDeltaRH = 0.0; // ITE Air Inlet Relative Humidity Difference Below Operating Range [%]
};

// One Cooling Coil N Object Type/Name/Load Fraction slot for ElectricEquipment:ITE:LiquidCooled
struct ITELiquidCoolingCoilSpec
{
ITECoolingCoilType CoilType = ITECoolingCoilType::Invalid; // Cooling Coil N Object Type
std::string CoilName; // Cooling Coil N Name
Real64 LoadFraction = 0.0; // Cooling Coil N Load Fraction (static)
Sched::Schedule *LoadFractionSched = nullptr; // Cooling Coil N Load Fraction Schedule Name
};

static constexpr int MaxITELiquidCoolingCoils = 4;

struct ITEquipDataLiquidCooled // Liquid-Cooled IT Equipment
{
// Members
std::string Name; // EQUIPMENT object name
int ZonePtr = 0; // Which zone internal gain is in
int spaceIndex = 0; // Space index for this equipment instance
Sched::Schedule *availSched = nullptr; // Availability schedule
Sched::Schedule *computeLoadSched = nullptr; // Compute Load Schedule (0.0-1.0 CPU loading fraction)
Real64 DesignTotalPower = 0.0; // Design Power Input [W]
Real64 Multiplier = 1.0; // Scales power and heat to represent multiple identical racks
Real64 DesignFanPowerInputFraction = 0.0; // Fraction of design power input that is for auxiliary fans
int PowerModifierCurve = 0; // Index for power modifier function of CPU loading (x) and zone air temperature (y) curve
Real64 LiquidHeatCaptureFractionDesign = 0.8; // Design (nominal) fraction of total heat generation captured by the liquid loop
Sched::Schedule *liquidHeatCaptureFracSched = nullptr; // Optional schedule multiplying the design liquid heat capture fraction

std::array<ITELiquidCoolingCoilSpec, MaxITELiquidCoolingCoils> CoolingCoils;

// Report variables
std::array<Real64, (int)LiquidITERptVars::Num> PowerRpt;
std::array<Real64, (int)LiquidITERptVars::Num> EnergyRpt;
Real64 LiquidHeatCaptureFraction = 0.0; // Current effective liquid heat capture fraction []
};

struct BBHeatData
{
// Members
Expand Down Expand Up @@ -1736,6 +1796,10 @@ namespace DataHeatBalance {
Real64 ITEqTimeAboveRH = 0.0; // Zone ITE Air Inlet Relative Humidity Above Operating Range Time [hr]
Real64 ITEqTimeBelowRH = 0.0; // Zone ITE Air Inlet Relative Humidity Below Operating Range Time [hr]
Real64 ITEAdjReturnTemp = 0.0; // Zone ITE Adjusted Return Air Temperature
// Liquid-Cooled IT Equipment
std::array<Real64, (int)LiquidITERptVars::Num> LiquidITEPowerRpt;
std::array<Real64, (int)LiquidITERptVars::Num> LiquidITEEnergyRpt;
Real64 LiquidITEHeatCaptureFraction = 0.0; // Zone ITE Liquid Heat Capture Fraction []
// Overall Zone Variables
Real64 TotRadiantGain = 0.0;
Real64 TotVisHeatGain = 0.0;
Expand Down Expand Up @@ -1856,6 +1920,7 @@ struct HeatBalanceData : BaseGlobalStruct
int TotHWEquip = 0; // Total Hot Water Equipment instances after expansion to spaces
int TotStmEquip = 0; // Total Steam Equipment instances after expansion to spaces
int TotITEquip = 0; // Total IT Equipment instances after expansion to spaces
int TotITELiquidCooledEquip = 0; // Total Liquid-Cooled IT Equipment instances after expansion to spaces
int TotInfiltration = 0; // Total Infiltration (all types) instances after expansion to spaces
int TotVentilation = 0; // Total Ventilation (all types) instances after expansion to spaces
int TotMixing = 0; // Total Mixing Statementsn instances after expansion to spaces
Expand Down Expand Up @@ -2017,6 +2082,7 @@ struct HeatBalanceData : BaseGlobalStruct
EPVector<DataHeatBalance::ZoneEquipData> ZoneHWEq;
EPVector<DataHeatBalance::ZoneEquipData> ZoneSteamEq;
EPVector<DataHeatBalance::ITEquipData> ZoneITEq;
EPVector<DataHeatBalance::ITEquipDataLiquidCooled> ZoneITELiquidCooled;
EPVector<DataHeatBalance::BBHeatData> ZoneBBHeat;
EPVector<DataHeatBalance::InfiltrationData> Infiltration;
EPVector<DataHeatBalance::VentilationData> Ventilation;
Expand Down
3 changes: 2 additions & 1 deletion src/EnergyPlus/DisplacementVentMgr.hh
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ namespace RoomAir {

void CalcDispVent3Node(EnergyPlusData &state, int ZoneNum); // Which Zonenum

static constexpr std::array<DataHeatBalance::IntGainType, 52> IntGainTypesOccupied = {
static constexpr std::array<DataHeatBalance::IntGainType, 53> IntGainTypesOccupied = {
DataHeatBalance::IntGainType::People,
DataHeatBalance::IntGainType::WaterHeaterMixed,
DataHeatBalance::IntGainType::WaterHeaterStratified,
Expand All @@ -87,6 +87,7 @@ namespace RoomAir {
DataHeatBalance::IntGainType::ThermalStorageHotWaterStratified,
DataHeatBalance::IntGainType::ElectricEquipment,
DataHeatBalance::IntGainType::ElectricEquipmentITEAirCooled,
DataHeatBalance::IntGainType::ElectricEquipmentITELiquidCooled,
DataHeatBalance::IntGainType::GasEquipment,
DataHeatBalance::IntGainType::HotWaterEquipment,
DataHeatBalance::IntGainType::SteamEquipment,
Expand Down
Loading
Loading