Validation Report · Thermal Systems

Domestic Hot Water Module Validation

Every domestic-hot-water equipment type validated against EnergyPlus 26.1 in one body of evidence — direct-fired (electric, gas, oil), hydronic indirect, and heat pump — 27 of 37 in-scope scenarios inside ASHRAE Guideline 14-2023 band.

In-Scope Scenarios

37

Pass Rate

73.0%

EnergyPlus Cross-Validated Stages

3

Analytically Validated Stages

0

Stage-by-Stage Results

StageScopeIn-ScopePassedReference Engine
Stage 1A single water heater with an internal burner or element, over a full 8,760-hour year. Three fuels x storage and tankless x cycling and modulating control, plus a three-point sweep of jacket insulation from a modern R-2.0 jacket to EnergyPlus's own example value. EnergyPlus runs first and defines BOTH the draw and the mains water temperature; the two engines are then compared on fuel consumption. Fuel type is meter routing rather than physics — EnergyPlus returns byte-identical energy for natural gas and electricity at equal efficiency — so this is one validated model exercised at different nameplates, not three.76/7EnergyPlus 26.1.0 — WaterHeater:Mixed with an internal heater, a scheduled draw and Site:WaterMainsTemperature (Correlation). Scored against ASHRAE Guideline 14-2023.
Stage 2A storage tank with NO internal heater, heated entirely through a source-side coil fed by a boiler loop — EnergyPlus's own 'Indirect Water Heater' topology, with Heater Maximum Capacity set to zero. Residential 100-gallon and commercial 300-gallon tanks. The scored quantity is the SOURCE-side heat transfer, i.e. the demand placed on the boiler, which is exactly what the CogenS indirect model returns. The heat source is an ideal district-heating supply rather than a modelled boiler, so the comparison isolates the tank instead of blending in a second model's part-load behaviour.22/2EnergyPlus 26.1.0 — WaterHeater:Mixed source-side coil on a hot-water PlantLoop fed by DistrictHeating:Water. Scored against ASHRAE Guideline 14-2023.
Stage 3Both condenser architectures EnergyPlus models — wrapped and pumped — across residential and commercial scale, four climates, and indoor and outdoor evaporator air. Published in full as its own report; summarised here so the domestic hot water family reads as one body of evidence.2819/28EnergyPlus 26.1.0 — WaterHeater:HeatPump:WrappedCondenser / :PumpedCondenser + a 12-node WaterHeater:Stratified tank.

Reference Engines

Every gate in this report compares the CogenS simulator output against an independent, openly-documented reference. We do not validate against ourselves.

  • EnergyPlus 26.1.0 — WaterHeater:Mixed (direct-fired and source-side indirect)
  • EnergyPlus 26.1.0 — WaterHeater:HeatPump:WrappedCondenser / :PumpedCondenser + WaterHeater:Stratified (12-node)

Stage Details

Stage 1 — Direct-fired water heaters (electric / gas / oil)

A single water heater with an internal burner or element, over a full 8,760-hour year. Three fuels x storage and tankless x cycling and modulating control, plus a three-point sweep of jacket insulation from a modern R-2.0 jacket to EnergyPlus's own example value. EnergyPlus runs first and defines BOTH the draw and the mains water temperature; the two engines are then compared on fuel consumption. Fuel type is meter routing rather than physics — EnergyPlus returns byte-identical energy for natural gas and electricity at equal efficiency — so this is one validated model exercised at different nameplates, not three.

Matrix

7

In-Scope

7

Passed

6

Wall Time

approx. 30 seconds (7 EnergyPlus runs, 8,760 h each)

Gates Exercised

GateToleranceResult
Annual total energy±5% (GATED)6 / 7 inside ±5%; worst +6.01%
Monthly NMBE±5% (GATED)6 / 7 inside ±5%; worst +6.01%
Monthly CV(RMSE)≤15% (GATED)7 / 7 inside ≤15%; worst 6.03%
Peak hourly demand±10% — reported, NOT gated1 / 7 inside ±10%; worst +17.18%
Hourly CV(RMSE)≤30% — reported, NOT gated1 / 7 inside ≤30%; worst 98.65%

The defect this stage was built to close

Until 2026-07-29 the direct-fired storage model zeroed BOTH of its standby-loss terms: a tank sitting at temperature with no draw lost nothing to its surroundings, so the burner never fired to hold setpoint. Measured against EnergyPlus the shortfall in annual fuel ran from 6% to 32% depending on jacket insulation — always in the direction that flatters a retrofit, because understated fuel is overstated savings. Storage heaters now run the same node-resolved stratified tank the heat-pump equipment type uses, with the jacket conductance resolved from whichever input the user actually supplied. The residual against EnergyPlus is −0.06% to −1.09% on the cases the defect was worst on.

Where the jacket conductance comes from

A tank's standby loss can be entered three different ways on the specification page, and the resolution is a documented cascade rather than a single field: an explicit losses coefficient is used as given; otherwise a rated standby loss is divided by the DOE 10 CFR 430 rating temperature difference of 67.5 °F that the rating was measured at; otherwise the conductance is built from tank geometry and jacket R-value. If none of the three is available the model logs a warning rather than silently assuming a value. One real consequence surfaced during this work: a legacy standby-loss correlation inherited from the predecessor tool produced a conductance 3.7× the maximum the ASHRAE 90.1 standby allowance permits for that tank, which is now rejected by an explicit plausibility ceiling instead of being simulated.

Why the jacket sweep is three cases and not one

Insulation is swept across three levels — a modern R-2.0 jacket, a mid-grade jacket, and the value EnergyPlus ships in its own example file — because standby loss is the one term the defect touched, and a single insulation level could not show whether agreement holds across the range. It does: the three levels score +0.34%, −0.47% and −0.90%, monotone in insulation level, which is the behaviour a correct jacket model must have.

Per-case results, all seven scenarios

ScenarioAnnual (±5%)Monthly CV(RMSE) (≤15%)Peak hourly (reported)Hourly CV(RMSE) (reported)Gated result
ELECTRIC_STORAGE_CYCLE+0.34%0.38%+12.79%98.65%PASS
GAS_STORAGE_CYCLE_UAEPEXAMPLE−0.90%0.92%+13.28%81.26%PASS
GAS_STORAGE_CYCLE_UAMIDGRADE−0.47%0.52%+15.11%97.14%PASS
GAS_STORAGE_CYCLE_UAR2JACKET+0.34%0.38%+12.79%98.65%PASS
GAS_STORAGE_MODULATE+1.98%2.06%+17.18%75.41%PASS
GAS_TANKLESS_MODULATE+6.01%6.03%+0.06%13.43%outside band
OIL_STORAGE_CYCLE+0.34%0.38%+12.79%98.65%PASS

Electric, gas and oil cycling storage return identical figures because at equal efficiency they are the same physics with a different meter — EnergyPlus itself returns byte-identical energy for natural gas and electricity at equal efficiency. Reporting them as three independent passes would inflate the count, so they are named for what they are: one validated model exercised at three nameplates.

Timestep-sensitivity control test, all four steps

The engine has run natively at 15, 20, 30 and 60 minutes since this work landed, so every case was re-run at all four against the same EnergyPlus reference. This yields a falsifiable prediction rather than a reassurance: a part-load efficiency curve is evaluated at each step's part-load ratio, and a coarser step averages the burner's on-time into a different ratio — but only if there is a tank whose on-time can be averaged. So sensitivity should require BOTH a part-load curve AND tank state, and cases missing either should be flat.

Scenario60 min30 min20 min15 minShift 60 → 15
GAS_STORAGE_CYCLE_UAR2JACKET+0.34%−0.35%−0.26%−0.39%−0.73%
GAS_STORAGE_CYCLE_UAMIDGRADE−0.47%−0.68%−0.76%−0.78%−0.31%
GAS_STORAGE_CYCLE_UAEPEXAMPLE−0.90%−0.93%−0.98%−1.06%−0.15%
ELECTRIC_STORAGE_CYCLE+0.34%−0.35%−0.26%−0.39%−0.73%
OIL_STORAGE_CYCLE+0.34%−0.35%−0.26%−0.39%−0.73%
GAS_STORAGE_MODULATE+1.98%−1.75%−2.59%−3.21%−5.19%
GAS_TANKLESS_MODULATE+6.01%+6.01%+6.01%+6.01%+0.00%

The prediction holds with no counter-example. Cycling control carries no curve, so efficiency is constant and the shift is −0.15% to −0.73%. Tankless modulating carries a curve but no tank state — its algebraic branch reads the instantaneous served load, so the part-load ratio is identical at every step and the shift is exactly 0.00%. Storage plus modulating carries both and is the only material mover at −5.19%. It stays inside the ±5% annual band at every timestep (+1.98% at 60 minutes, −3.21% at 15), so the timestep changes where in the band it sits rather than whether it passes. This is a control test on the model's own timestep choice, not a validation of sub-hourly agreement against EnergyPlus.

Stage 2 — Hydronic indirect water heaters (IHWH)

A storage tank with NO internal heater, heated entirely through a source-side coil fed by a boiler loop — EnergyPlus's own 'Indirect Water Heater' topology, with Heater Maximum Capacity set to zero. Residential 100-gallon and commercial 300-gallon tanks. The scored quantity is the SOURCE-side heat transfer, i.e. the demand placed on the boiler, which is exactly what the CogenS indirect model returns. The heat source is an ideal district-heating supply rather than a modelled boiler, so the comparison isolates the tank instead of blending in a second model's part-load behaviour.

Matrix

2

In-Scope

2

Passed

2

Wall Time

approx. 10 seconds (2 EnergyPlus runs, 8,760 h each)

Gates Exercised

GateToleranceResult
Annual total energy±5% (GATED)2 / 2 inside ±5%; worst -1.71%
Monthly NMBE±5% (GATED)2 / 2 inside ±5%; worst -1.71%
Monthly CV(RMSE)≤15% (GATED)2 / 2 inside ≤15%; worst 1.85%
Peak hourly demand±10% — reported, NOT gated0 / 2 inside ±10%; worst -36.39%
Hourly CV(RMSE)≤30% — reported, NOT gated0 / 2 inside ≤30%; worst 258.93%

This reference did not exist before this work

The indirect water heater had never been compared against EnergyPlus. The harness carried a source-side flag that was never implemented — the code path it was meant to select did not exist — so building this stage meant building the reference itself: a hot-water PlantLoop with a pump, an ideal DistrictHeating:Water supply, branches, splitters, mixers, an operation scheme and a setpoint manager, wired to the tank's source-side port with Heater Maximum Capacity set to zero so that every joule entering the water arrives through the coil.

Three EnergyPlus runs it took to get right

The first two failed loudly and were easy. The third exited green with the wrong physics, which is the dangerous kind: tank mean temperature ran at 57.2 °C against a 48.9 °C setpoint and peaked at 70 °C. The cause was that the coil flow had been sized on the loop's design temperature difference of 11 K while the coil itself saw 33 K, so the loop delivered far more heat than the tank could reject. Sizing the flow on the real coil approach instead — and dropping the loop setpoint to 71.1 °C — brought the tank onto its setpoint. Had that run been trusted on its exit code, the comparison would have scored a model against a reference that was itself wrong.

What is scored, and why it is the source side

The scored quantity is the SOURCE-side heat transfer — the demand the tank places on the boiler — because that is exactly what the CogenS indirect model returns to the plant it sits in. The heat source is an ideal district-heating supply rather than a modelled boiler on purpose: it isolates the tank instead of blending a second model's part-load behaviour into the residual.

Which model these two scenarios scored

The SHIPPED one. Stage 1 is about moving direct-fired storage onto a node-resolved stratified tank, so it is worth being explicit that the indirect heater did NOT move with it: these results are the stateless indirect calculation that the module runs today, scored as-is. A stratified-tank treatment of the indirect heater exists and is described below, but it is opt-in and off by default, so it is not what a user's project runs and not what is scored here.

Per-case results, both scenarios

ScenarioAnnual (±5%)Monthly CV(RMSE) (≤15%)Peak hourly (reported)Hourly CV(RMSE) (reported)Gated result
IHWH_100−1.71%1.85%−36.39%258.93%PASS
IHWH_300−0.22%0.29%−31.35%84.22%PASS

The commercial 300-gallon tank agrees to −0.22% and the residential 100-gallon to −1.71%. Both peak-hourly figures sit well outside the reported ±10% reference band (−31% and −36%) and are published as such: a coil-fed tank's source demand is a smoothed version of its draw, and which hour within a month carries the extremum is set by cycling phase rather than by energy. Monthly CV(RMSE) on the same arrays is 0.29% and 1.85%.

A conclusion that was reversed by the evidence

The stratified-tank treatment of the indirect heater raised predicted peak source demand by 61% over the previous stateless calculation, and that was initially read as a numerical artefact and reverted. Scoring both against EnergyPlus showed the opposite: the increase is a correction toward the reference, and it converges once the tank is given enough substeps. The reversal is recorded here rather than quietly dropped, because the first reading was wrong and the reference is what settled it. The stratified treatment stays available but off by default: what it improves is the peak, which is reported rather than gated, while the shipped stateless model already passes both gated energy metrics. Changing the default is a decision to make deliberately and re-validate, not one to fold into a publication.

Stage 3 — Heat-pump water heaters (HPWH)

Both condenser architectures EnergyPlus models — wrapped and pumped — across residential and commercial scale, four climates, and indoor and outdoor evaporator air. Published in full as its own report; summarised here so the domestic hot water family reads as one body of evidence.

Matrix

28

In-Scope

28

Passed

19

Wall Time

see the heat-pump report

Gates Exercised

GateToleranceResult
Full detailas published19 / 28 scenarios inside band. See the dedicated heat-pump report for the stage breakdown, gates and sample workbooks.

Published separately, in full

The heat-pump equipment type carries its own two-stage validation against EnergyPlus 26.1 — a 30-day constant-draw shakedown and an annual real-building test across four climates on the DOE Large Hotel prototype — with its own test matrix, gates and sample workbooks. It scores 19 of 28 in-scope scenarios inside band, with monthly NMBE and monthly CV(RMSE) both at 16 of 16 on the annual stage. It is summarised here so that the domestic-hot-water family reads as one body of evidence rather than three unrelated reports; the full detail, including all four named exception classes, is in the dedicated report linked below.

What the validation covers, and what it does not

Where the engineering envelope ends, in plain English.

What this validation covers

Every domestic-hot-water equipment type the CogenS module offers, against EnergyPlus 26.1: direct-fired storage and tankless heaters on electric, gas and oil under both cycling and modulating control; hydronic indirect tanks heated by a boiler loop; and heat-pump water heaters in both condenser architectures. Agreement is established on ANNUAL and MONTHLY energy — the resolutions ASHRAE Guideline 14 gates.

What it does not cover

Hourly agreement is NOT claimed. Peak hourly demand and hourly CV(RMSE) are computed and published against every case, but are not gated: a single-hour extremum and hourly dispersion are the statistics most sensitive to intra-hour cycling phase, and a thermostatically cycling heater's on/off timing will not align hour-for-hour between two engines even when the energy agrees closely.

Sub-hourly agreement against EnergyPlus is not validated. The engine runs natively at 15, 20, 30 and 60 minutes, and every case was re-run at all four to confirm the model's own timestep choice does not move the direct-fired score outside band — but that is a control test, not a sub-hourly validation.

Metric and Imperial unit handling is not separately validated; all cases run in one system internally.

The one documented exception

The tankless modulating case scores +6.01% on annual fuel, outside the ±5% band. It is published rather than dropped, and it is attributed: CogenS parameterises its part-load curve as a consumption ratio against rated consumption, whereas EnergyPlus applies its part-load factor as a divisor on efficiency. The exact translation between the two is a rational function, and EnergyPlus accepts only a polynomial, so a residual remains — worst at low part-load ratio, which is precisely where a tankless heater operates. The same case has the BEST peak (+0.06%) and hourly CV(RMSE) (13.43%) in the matrix, and the identical tankless heater under cycling control with no curve at all scores −0.60%. The heater model is sound; the residual belongs to the comparison.

Try the validated platform

CogenS™ runs 8,760-hour simulations using the same engines validated on this page. Independent-engineer-grade evidence, lender-friendly.