Revision history  [back]

I'm having the same problem as you. Since you didn't provide the actual error, here it is (in this case, for 2004 - Houston):

** Severe  ** Problem found in EMS EnergyPlus Runtime Language.
**   ~~~   ** Erl program name: DATACENTER_MAIN
**   ~~~   ** Erl program line number: 12
**   ~~~   ** Erl program line text: SET DATACENTER_PREHEATDELTAT = HEATGAIN/(1.08*FLOWRATE)
**   ~~~   ** Error message:  *** Error: EvaluateExpression: Divide By Zero in EMS Program! *** 
**   ~~~   **  During Warmup, Environment=HOUSTON BUSH INTERCONTINENTAL ANN HTG 99.6% CONDNS DB, at Simulation time=01/21 00:00 - 00:15
**  Fatal  ** Previous EMS error caused program termination.
...Summary of Errors that led to program termination:
..... Reference severe error count=1
..... Last severe error=Problem found in EMS EnergyPlus Runtime Language.
** Warning ** There is no BYPASS component in the demand-side of PlantLoop =COOLSYS1
**   ~~~   ** You may be able to fix the fatal error above by adding a demand-side BYPASS PIPE.

Quick Fix

But, if you want to fix it quickly without questions asked, replace the line (circa line 14735)

 IF T_OA < 10,,

With:

 IF T_OA < 10 && DataCenter_HeatC_Status >0,

I got this idea by looking at the 2013 vintage.

A discussion about this EMS program

The faulty EMS program is here:

EnergyManagementSystem:Program,
    DataCenter_Main,          !- Name
    IF DataCenter_Humidifier_Status > 0,   !- Program Line 1
    SET DataCenter_ExtraElecHeatC_Status = 1,   !- Program Line 2
    SET DataCenter_ExtraElecHeatC_SP = DataCenter_AfterHumidifier_Temp + 1.4,   !- <none>
    ELSE,                     !- <none>
    SET DataCenter_ExtraElecHeatC_Status = 0,   !- <none>
    SET DataCenter_ExtraElecHeatC_SP = NULL,   !- <none>
    ENDIF,                    !- <none>
    IF T_OA < 10,,                        !- <none>
    SET HeatGain = 0 * (DataCenter_FanDesignMass/1.2) *2118,  !- <none>
    SET FlowRate = (DataCenter_FanMassFlow/1.2)*2118,  !- <none>
    SET DataCenter_PreheatDeltaT = HeatGain/(1.08*FlowRate),  !- <none>
    SET DataCenter_ExtraWaterHeatC_Status = 1,  !- <none>
    SET DataCenter_ExtraWaterHeatC_SP = DataCenter_AfterElecHeatC_Temp + DataCenter_PreheatDeltaT,  !- <none>
    ELSE,                    !- <none>
    SET DataCenter_ExtraWaterHeatC_Status = 0,  !- <none>
    SET DataCenter_ExtraWaterHeatC_SP = NULL,  !- <none>
    ENDIF;                   !- <none>

The guilty line is the last of these three:

SET HeatGain = 0 * (DataCenter_FanDesignMass/1.2) *2118,  !- <none>
SET FlowRate = (DataCenter_FanMassFlow/1.2)*2118,
SET DataCenter_PreheatDeltaT = HeatGain/(1.08*FlowRate),  !- <none>

Here's the related sensor:

  EnergyManagementSystem:Sensor,
    DataCenter_FanMassFlow,  !- Name
    AirLoop DataCenter Basement Supply Fan Outlet,  !- Output:Variable or Output:Meter Index Key Name
    System Node Mass Flow Rate;  !- Output:Variable or Output:Meter Name

So when the mass flow rate of the fan is zero, you're in effect dividing by zero in the EMS program.

I think the biggest question is actually why HeatGain is in an expression that always evaluates to zero, which means DataCenter_PreheatDeltaT would always be zero regardless of the fan mass flow rate. Second question is why HeatGain is a calculated on the Fan Maximum Mass Flow Rate since it's based on this internal variable:

  EnergyManagementSystem:InternalVariable,
    DataCenter_FanDesignMass,!- Name
    DataCenter Basement Supply Fan,  !- Internal Data Index Key Name
    Fan Maximum Mass Flow Rate;  !- Internal Data Type

Long story short, I'd welcome input from people who created these files to explain this EMS program.

I'm having the same problem as you. Since you didn't provide the actual error, here it is (in this case, for 2004 - Houston):

** Severe  ** Problem found in EMS EnergyPlus Runtime Language.
**   ~~~   ** Erl program name: DATACENTER_MAIN
**   ~~~   ** Erl program line number: 12
**   ~~~   ** Erl program line text: SET DATACENTER_PREHEATDELTAT = HEATGAIN/(1.08*FLOWRATE)
**   ~~~   ** Error message:  *** Error: EvaluateExpression: Divide By Zero in EMS Program! *** 
**   ~~~   **  During Warmup, Environment=HOUSTON BUSH INTERCONTINENTAL ANN HTG 99.6% CONDNS DB, at Simulation time=01/21 00:00 - 00:15
**  Fatal  ** Previous EMS error caused program termination.
...Summary of Errors that led to program termination:
..... Reference severe error count=1
..... Last severe error=Problem found in EMS EnergyPlus Runtime Language.
** Warning ** There is no BYPASS component in the demand-side of PlantLoop =COOLSYS1
**   ~~~   ** You may be able to fix the fatal error above by adding a demand-side BYPASS PIPE.

Quick Fix

But, if you want to fix it quickly without questions asked, replace the line (circa line 14735)

 IF T_OA < 10,,

With:

 IF T_OA < 10 && DataCenter_HeatC_Status >0,

I got this idea by looking at the 2013 vintage.

A discussion about this EMS program

The faulty EMS program is here:

EnergyManagementSystem:Program,
    DataCenter_Main,          !- Name
    IF DataCenter_Humidifier_Status > 0,   !- Program Line 1
    SET DataCenter_ExtraElecHeatC_Status = 1,   !- Program Line 2
    SET DataCenter_ExtraElecHeatC_SP = DataCenter_AfterHumidifier_Temp + 1.4,   !- <none>
    ELSE,                     !- <none>
    SET DataCenter_ExtraElecHeatC_Status = 0,   !- <none>
    SET DataCenter_ExtraElecHeatC_SP = NULL,   !- <none>
    ENDIF,                    !- <none>
    IF T_OA < 10,,                        !- <none>
    SET HeatGain = 0 * (DataCenter_FanDesignMass/1.2) *2118,  !- <none>
    SET FlowRate = (DataCenter_FanMassFlow/1.2)*2118,  !- <none>
    SET DataCenter_PreheatDeltaT = HeatGain/(1.08*FlowRate),  !- <none>
    SET DataCenter_ExtraWaterHeatC_Status = 1,  !- <none>
    SET DataCenter_ExtraWaterHeatC_SP = DataCenter_AfterElecHeatC_Temp + DataCenter_PreheatDeltaT,  !- <none>
    ELSE,                    !- <none>
    SET DataCenter_ExtraWaterHeatC_Status = 0,  !- <none>
    SET DataCenter_ExtraWaterHeatC_SP = NULL,  !- <none>
    ENDIF;                   !- <none>

The guilty line is the last of these three:

SET HeatGain = 0 * (DataCenter_FanDesignMass/1.2) *2118,  !- <none>
SET FlowRate = (DataCenter_FanMassFlow/1.2)*2118,
SET DataCenter_PreheatDeltaT = HeatGain/(1.08*FlowRate),  !- <none>

Here's the related sensor:

  EnergyManagementSystem:Sensor,
    DataCenter_FanMassFlow,  !- Name
    AirLoop DataCenter Basement Supply Fan Outlet,  !- Output:Variable or Output:Meter Index Key Name
    System Node Mass Flow Rate;  !- Output:Variable or Output:Meter Name

So when the mass flow rate of the fan is zero, you're in effect dividing by zero in the EMS program.

I think the biggest question is actually why HeatGain is in an expression that always evaluates to zero, which means DataCenter_PreheatDeltaT would always be zero regardless of the fan mass flow rate. Second question is why HeatGain is a calculated on the Fan Maximum Mass Flow Rate since it's based on this internal variable:

  EnergyManagementSystem:InternalVariable,
    DataCenter_FanDesignMass,!- Name
    DataCenter Basement Supply Fan,  !- Internal Data Index Key Name
    Fan Maximum Mass Flow Rate;  !- Internal Data Type

Long story short, I'd welcome input from people who created these files to explain this EMS program.