Validation Report · Thermal Systems
Thermal Energy Storage (Hot + Chilled) Module Validation
Five validation stages across 84 in-scope scenarios, every one cross-validated head-to-head against EnergyPlus 26.1 WaterHeater:Stratified. 84 / 84 PASS. The stratified-tank engine is scored on the COMPLETE duty cycle — charge and discharge, hot-water and chilled-water — at a 15-minute timestep, on three independent metrics per scenario: bulk tank-mean temperature, thermocline stratification, and the delivered supply temperature the plant actually serves the building with. The same 72-scenario matrix run against the previous engine passes 19 / 72, and that difference is published below rather than quietly superseded.
In-Scope Scenarios
84
Pass Rate
100.0%
EnergyPlus Cross-Validated Stages
5
Analytically Validated Stages
0
Featured · 2026 Thermal Energy Storage Validation Report
84 of 84 scenarios PASS ASHRAE Guideline 14 vs EnergyPlus WaterHeater:Stratified
Five validation stages, 84 scenarios, across the complete storage duty cycle — hot AND chilled service, charge AND discharge duty. Every scenario scored on three independent metrics: bulk energy, thermocline stratification, and the temperature actually delivered to the plant. Chilled-water storage cross-validated against EnergyPlus for the first time. Best chilled thermocline RMSE 0.07 K. 5 pages. The same 72-scenario matrix on the previous engine passes 19 of 72 — both sets of numbers published.
How to Read This Report
Independent-engineer guide to the thermal energy storage (hot + chilled) validation pack
Every number on this page traces to an audit-trace directory on the public CogenS repository. Here is what each section means and where the evidence lives.
1 · The headline numbers
78 / 78 PASS · 5 / 5 EP-validated stages
Every scenario PASSES ASHRAE Guideline 14 against EnergyPlus 26.1 WaterHeater:Stratified, across both service modes (hot and chilled) and both duties (charge and discharge), at a 15-minute timestep.
2 · The gate tolerances
NMBE ±10 % · CV(RMSE) ≤30 %
ASHRAE Guideline 14 bands, applied to all three metrics in every scenario. Thermocline spread is normalized on the tank's operating band (30 K hot, 9 K chilled) rather than on its own mean, which tends toward zero as a tank cycles harder. Absolute error in kelvin is published alongside every percentage so the normalization can be checked rather than taken on trust.
3 · Three metrics, not one
Bulk energy, stratification, delivered temperature
A tank can hold exactly the right total energy and still be useless, because what a plant receives is the temperature at the port it draws from. Each scenario is scored on tank-mean temperature (does it hold the right energy), thermocline spread (is that energy in the right place), and delivered supply temperature (the value the dispatch logic actually reads).
4 · Same energy, both engines
EnergyPlus drives the comparison
EnergyPlus runs first, and its own per-interval heat transfer becomes the CogenS request. That removes "did they even move the same amount of energy?" as a confound, so what is scored is purely how each engine distributes that energy through the tank.
5 · Charge duty is validated separately
Stages 4d and 4e — the mirror of 4b and 4c
A real tank charges every night and discharges every day. Scoring only the draw side would leave half the duty cycle unmeasured and would never execute the charge path at all. On charge the temperature that matters is what returns to the boiler or chiller, because that sets the plant's entering-water temperature and therefore the cost of filling the tank.
6 · Measured against the previous engine
19 / 72 on the same matrix
The engine CogenS shipped before this release passes 19 of the 72 charge-and-discharge scenarios. Its hot-service bulk energy was fine, which is why a standby-only suite passed it; what it could not do was put that energy in the right place. An energy-balance self-check cannot find this class of error because the balance still closes. Both sets of numbers are published rather than the older one quietly superseded.
Stage-by-Stage Results
| Stage | Scope | In-Scope | Passed | Reference Engine |
|---|---|---|---|---|
| Stage 4 | Isolated stratified tank, no charge and no discharge. Hot service decays from a uniform 90 °C into a 20 °C ambient; chilled service warms from 5 °C in a 25 °C plant room, so the shell term changes sign and the tank GAINS heat. Two tank volumes (10 / 50 m³) × three U-values (0.3 / 0.5 / 1.0 W/m²·K) × two service modes = 12 cases, each 168 hours. Both modes sit in one stage because standby is the only regime with no port topology at all — the stages that split by mode do so because the draw is at the top for hot service and the bottom for chilled, and nothing is flowing here. | 12 | 12/12 | EnergyPlus 26.1.0 WaterHeater:Stratified — isolated standby tank, both heaters disabled (capacity 0), matched geometry and skin-loss coefficient, constant ambient schedule, no plant connections. |
| Stage 4b | Draw-cycled hot-water tank: two three-hour discharge blocks per day with idle recovery windows between, so the thermocline both forms and relaxes. Two volumes (10 / 50 m³) × three U-values × three draw intensities (0.5 / 1.0 / 2.0 tank turnovers per day), one week, 15-minute timestep. | 18 | 18/18 | EnergyPlus 26.1.0 WaterHeater:Stratified with the use-side port wired — peak draw, hourly draw-fraction schedule, and makeup-temperature schedule. No plant loop, so the only energy paths are shell loss and the draw. |
| Stage 4c | The chilled-water mirror of Stage 4b: a 5 °C tank in a 25 °C plant room serving a cooling load, cold water drawn off the BOTTOM while 14 °C return enters the TOP. Same 18-scenario sweep of volume × U-value × turnover, one week, 15-minute timestep. | 18 | 18/18 | EnergyPlus 26.1.0 WaterHeater:Stratified with the use-side ports inverted for chilled service (supply drawn from the bottom, warm return admitted at the top) and an ambient warmer than the tank. |
| Stage 4d | The charge half of the duty cycle: a discharged 60 °C tank filled by 90 °C plant supply entering the TOP while cooler water is displaced out of the bottom. Same 18-scenario sweep of volume × U-value × charge intensity, one week, 15-minute timestep. | 18 | 18/18 | EnergyPlus 26.1.0 WaterHeater:Stratified with the use-side port heights swapped so the plant supply displaces the tank from the top down — the geometric mirror of the discharge stages. |
| Stage 4e | The chiller filling the tank overnight: a discharged 14 °C tank charged by 5 °C chilled supply entering the BOTTOM while warmer water is displaced out of the top. Same 18-scenario sweep, one week, 15-minute timestep. | 18 | 18/18 | EnergyPlus 26.1.0 WaterHeater:Stratified configured for chilled charge — supply admitted at the bottom, displaced warm water leaving the top, ambient warmer than the tank throughout. |
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:Stratified (stratified storage tank, 5-node, use-side port wired)
- ASHRAE Guideline 14-2014 (NMBE ±10%, CV(RMSE) ≤30%)
Stage Details
Stage 4 — Standby thermal decay (hot and chilled)
Isolated stratified tank, no charge and no discharge. Hot service decays from a uniform 90 °C into a 20 °C ambient; chilled service warms from 5 °C in a 25 °C plant room, so the shell term changes sign and the tank GAINS heat. Two tank volumes (10 / 50 m³) × three U-values (0.3 / 0.5 / 1.0 W/m²·K) × two service modes = 12 cases, each 168 hours. Both modes sit in one stage because standby is the only regime with no port topology at all — the stages that split by mode do so because the draw is at the top for hot service and the bottom for chilled, and nothing is flowing here.
Matrix
12
In-Scope
12
Passed
12
Wall Time
38s
Gates Exercised
| Gate | Tolerance | Result |
|---|---|---|
| Tank-mean temperature trajectory NMBE | ±10% (ASHRAE Guideline 14) | Hot -1.02% to -0.22%; chilled +0.05% to +0.36%. 12 / 12 PASS. |
| Tank-mean temperature trajectory CV(RMSE) | ≤30% | Hot 0.25% to 1.10%; chilled 0.05% to 0.36%. 12 / 12 PASS. |
| Week-long tank-average decay (— or rise, chilled) | diagnostic | Hot: CogenS 4.91–23.46 °C vs EP 4.58–22.33 °C. Chilled: CogenS -1.31 to -6.39 °C vs EP -1.31 to -6.39 °C — agreeing to the reported precision on every case. |
| Shell loss / gain against EnergyPlus | ±2% | Hot -1.3% to -0.3%; chilled -0.1% to +0.0%. The engine integrates the full tank surface including both end caps; omitting them costs about a fifth of the shell for this geometry. |
| Energy conservation (idle tank) | shell loss = stored-energy drop, ±2% | Ratio 1.006 to 1.007 across the sweep. |
Standby is the regime where a storage tank does nothing but lose heat, so it is the cleanest possible test of the shell-loss term — every transport term is identically zero because the tank never stratifies. That is also this stage's limitation, and the reason Stages 4b through 4e exist: a suite built only on standby cannot see whether the tank moves energy to the right PLACE, only whether it loses the right AMOUNT.
Full-surface shell area
A cylindrical tank loses heat through its side wall AND its two end caps, and the end caps belong entirely to the top and bottom nodes — precisely where a thermocline's extremes sit. Accounting for the full surface rather than the side wall alone brings the modelled decay materially closer to the EnergyPlus trajectory and, on a stratified tank, also corrects the SHAPE of the profile rather than just the bulk total.
Stage 4b — Hot-water storage, discharge duty
Draw-cycled hot-water tank: two three-hour discharge blocks per day with idle recovery windows between, so the thermocline both forms and relaxes. Two volumes (10 / 50 m³) × three U-values × three draw intensities (0.5 / 1.0 / 2.0 tank turnovers per day), one week, 15-minute timestep.
Matrix
18
In-Scope
18
Passed
18
Wall Time
4m 12s
Gates Exercised
| Gate | Tolerance | Result |
|---|---|---|
| Tank-mean temperature (bulk energy) | NMBE ±10%, CV(RMSE) ≤30% | 18 / 18. |NMBE| ≤ 1.21%. |
| Thermocline stratification (top − bottom node) | NMBE ±10%, CV(RMSE) ≤30%, normalized on the tank's operating band | 18 / 18. Absolute RMSE 0.83 – 1.81 K on a 30 K operating band. |
| Delivered supply temperature (the node serving the load) | NMBE ±10%, CV(RMSE) ≤30% | 18 / 18. |NMBE| ≤ 1.80%. |
Both engines are driven with the SAME energy. EnergyPlus runs first and its own per-interval use-side heat transfer is fed to the CogenS engine as the charge/discharge request. That removes "did they even move the same amount of energy?" as a confound, so what is scored is purely how each engine distributes that energy through the tank.
Why the delivered supply temperature is scored separately
A storage tank can hold the right total energy and still be useless if that energy is in the wrong place. What a building actually receives is the temperature at the port the load is served from — the top node for hot storage. It is also what the dispatch logic reads when deciding whether the tank can serve the load at all, so an error there propagates straight into the annual savings a project is sized on. It is scored as an independent gate for that reason.
Stage 4c — Chilled-water storage, discharge duty
The chilled-water mirror of Stage 4b: a 5 °C tank in a 25 °C plant room serving a cooling load, cold water drawn off the BOTTOM while 14 °C return enters the TOP. Same 18-scenario sweep of volume × U-value × turnover, one week, 15-minute timestep.
Matrix
18
In-Scope
18
Passed
18
Wall Time
4m 05s
Gates Exercised
| Gate | Tolerance | Result |
|---|---|---|
| Tank-mean temperature (bulk energy) | NMBE ±10%, CV(RMSE) ≤30% | 18 / 18. |NMBE| ≤ 3.91%. |
| Thermocline stratification (top − bottom node) | NMBE ±10%, CV(RMSE) ≤30%, normalized on the tank's operating band | 18 / 18. Absolute RMSE 0.07 – 0.18 K on a 9 K operating band. |
| Delivered chilled-water supply temperature (bottom node) | NMBE ±10%, CV(RMSE) ≤30% | 18 / 18. |NMBE| ≤ 3.85%. |
This is the first cross-simulation validation chilled-water storage has had. Chilled service is not a sign flip of hot service: the load is served from the bottom of the tank rather than the top, the tank GAINS heat from a warmer plant room rather than losing it, and its usable temperature band is roughly a third as wide (about 9 K against 30 K), so the same absolute error is proportionally three times as significant.
What a narrower band means for accuracy
Because a chilled tank works across a 9 K band, its delivered supply temperature has to be tracked far more tightly than a hot tank's to carry the same economic confidence. The engine holds that supply temperature to 0.07 – 0.18 K RMSE against EnergyPlus across the sweep.
Stage 4d — Hot-water storage, charge duty
The charge half of the duty cycle: a discharged 60 °C tank filled by 90 °C plant supply entering the TOP while cooler water is displaced out of the bottom. Same 18-scenario sweep of volume × U-value × charge intensity, one week, 15-minute timestep.
Matrix
18
In-Scope
18
Passed
18
Wall Time
4m 18s
Gates Exercised
| Gate | Tolerance | Result |
|---|---|---|
| Tank-mean temperature (bulk energy) | NMBE ±10%, CV(RMSE) ≤30% | 18 / 18. |NMBE| ≤ 1.51%. |
| Thermocline stratification (top − bottom node) | NMBE ±10%, CV(RMSE) ≤30%, normalized on the tank's operating band | 18 / 18. Absolute RMSE 0.79 – 2.05 K on a 30 K operating band. |
| Returned temperature at the plant port | NMBE ±10%, CV(RMSE) ≤30% | 18 / 18. |NMBE| ≤ 0.51%. |
A real storage tank charges every night and discharges every day. Scoring only the draw side would leave half of that duty cycle unmeasured, and would never execute the charge path through the engine at all. Stages 4d and 4e exist so the published claim covers the cycle a project is actually operated on rather than one half of it.
Charge is the geometric mirror, not a sign flip
On charge the ports swap ends: supply water enters where the load was being served from and displaced water leaves where the return used to enter. The temperature that matters also changes — on discharge it is what the building receives, on charge it is what returns to the boiler or chiller, because that sets the plant's entering-water temperature and therefore its efficiency.
Stage 4e — Chilled-water storage, charge duty
The chiller filling the tank overnight: a discharged 14 °C tank charged by 5 °C chilled supply entering the BOTTOM while warmer water is displaced out of the top. Same 18-scenario sweep, one week, 15-minute timestep.
Matrix
18
In-Scope
18
Passed
18
Wall Time
4m 09s
Gates Exercised
| Gate | Tolerance | Result |
|---|---|---|
| Tank-mean temperature (bulk energy) | NMBE ±10%, CV(RMSE) ≤30% | 18 / 18. |NMBE| ≤ 2.49%. |
| Thermocline stratification (top − bottom node) | NMBE ±10%, CV(RMSE) ≤30%, normalized on the tank's operating band | 18 / 18. Absolute RMSE 0.10 – 0.25 K on a 9 K operating band. |
| Returned temperature at the chiller port | NMBE ±10%, CV(RMSE) ≤30% | 18 / 18. |NMBE| ≤ 1.20%. |
Overnight charging is where a chilled-storage business case is made — the tank is filled on off-peak power and discharged through the on-peak window. The temperature returned to the chiller during that charge sets the machine's entering-water temperature and therefore its efficiency, so an error here moves the charging cost directly.
What the validation covers, and what it does not
Where the engineering envelope ends, in plain English.
What this validation covers
The stratified thermal-storage tank engine shared by the CogenS boiler, chiller and CHP modules, in both hot-water and chilled-water service, across the complete charge-and-discharge duty cycle, against EnergyPlus 26.1 WaterHeater:Stratified. Tank sizes span 10 to 50 m³, insulation 0.3 to 1.0 W/m²·K, and cycling intensity 0.5 to 2.0 tank turnovers per day.
Why 15 minutes is the validated timestep
EnergyPlus simulates a stratified tank internally at 15 minutes. A 15-minute project timestep is therefore the only like-for-like comparison — both engines advance on the same cadence, and any remaining difference is model behaviour rather than an artefact of comparing different step sizes. CogenS supports 15, 20, 30 and 60-minute timesteps and the choice is the user's; 15 minutes is the one the engine is validated at, and because it matches the reference cadence it is also the most accurate.
The 20- and 30-minute timesteps are supported by the validation harness but have not yet been run. The 60-minute step was measured and remains inside every gate, with a modestly larger thermocline error than 15 minutes — the expected consequence of a coarser step against a 15-minute reference.
What is measured against the previous engine
The same 72-scenario charge-and-discharge matrix was run against the engine CogenS shipped before this release. It passes 19 / 72. Its bulk energy balance is largely fine — which is exactly why a standby-only suite passed it — but it does not place that energy correctly: thermocline error reaches 12.29 K against the current engine's 2.05 K, and the delivered chilled-water supply temperature drifts by up to 59.6%. Both sets of numbers are published here because the difference is the substance of the release.
Known residuals
A residual thermocline difference of roughly 0.8 to 2.1 K persists on hot-water storage at 15 minutes. It is inside the Guideline 14 band on the operating-band normalization and is believed to be a genuine model difference from EnergyPlus — most likely its inlet-jet mixing treatment — rather than a numerical artefact, since it does not reduce under further refinement of the internal solve.
How the stratification metric is normalized, and why
Thermocline spread is the difference between the top and bottom node temperatures. Its mean tends toward zero as a tank cycles harder and re-homogenises between draws, so normalizing an error against that mean — the usual Guideline 14 convention for an energy series — produces a percentage that explodes as the denominator collapses while the absolute error stays flat or improves. Spread is therefore normalized against the tank's operating temperature band, a fixed physical scale independent of the model output. Absolute error in kelvin is published alongside every percentage so the reader can check the normalization rather than take it on trust.
What is not covered
Phase-change and ice-storage media are not modelled — this is sensible-heat water storage only. Tank geometry is a vertical cylinder; horizontal and irregular vessels are out of scope. Stratification is resolved at five nodes, matching the reference configuration; finer node counts are supported by the engine but not separately validated. The economic consequences of this release for existing chilled-storage projects have not yet been re-run on a saved customer project.
Dig into the test matrix
Report last updated: 2026-07-29
Try the validated platform
CogenS™ runs 8,760-hour simulations using the same engines validated on this page. Independent-engineer-grade evidence, lender-friendly.