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.
It would have been helpful to include the Fatal Error in question.