Validation Report · Thermal Systems
Cooling Tower Module Validation
Six validation stages across 330 scenarios — 327 PASS, and the three that do not are published with their measured causes rather than removed. 174 of the 330 are scored hour-by-hour against EnergyPlus 26.1; the other 156 are analytical self-consistency cases with NO reference engine, and the two layers are reported separately rather than pooled. Stage 1 closes the polynomial-coefficient gap on real DOE Reference Building Hospital 8760-h loads across 3 fan-control types and 2 polynomial curves — 6/6 PASS at 1.84-5.43% annual fan kWh deviation. Stage 2 multi-unit staging is 9/11 against EnergyPlus: two 2-unit cases at PLR 0.50 run +18.63% because CogenS splits duty evenly across operating towers where EnergyPlus apportions it by load — a deliberate modelling choice, published rather than absorbed. Stage 3 free cooling now has a real EnergyPlus reference for the first time (a HeatExchanger:FluidToFluid waterside economizer) and FAILS against it at +86.68% fan energy; 65% of that gap is measured to one cause — CogenS holds its fan at the VFD floor through every free-cooling hour where EnergyPlus cycles below it. Stage 4 chiller + cooling tower coupling is 4/4 against EnergyPlus at -0.54% chiller electricity. Stage 5 lifecycle cost is 48/48 at 0.0000% vs EnergyPlus LifeCycleCost (NIST Handbook 135) plus IRR / payback / MACRS against independent references. Stage 6 adds the air-cooled DRY fluid cooler as a separate equipment class — 92/92 PASS at strict bands against EnergyPlus FluidCooler:SingleSpeed and :TwoSpeed, with makeup water exactly zero on every case.
In-Scope Scenarios
330
Pass Rate
99.1%
EnergyPlus Cross-Validated Stages
6
Analytically Validated Stages
0
Featured - 2026 Cooling Tower Validation Report
327 of 330 scenarios PASS strict ASHRAE G14-2023 vs EnergyPlus + analytical references
Six validation stages across 330 scenarios. 174 are scored hour-by-hour against EnergyPlus 26.1 and 156 are analytical self-consistency cases with no reference engine — reported separately, never pooled. Both EnergyPlus performance-curve families (CoolingTowerPerformance:CoolTools AND YorkCalc) cross-validated. Multi-unit staging, waterside free cooling and Chiller + CT coupling all validated against EnergyPlus end-to-end. Stage 5 VFD-upgrade NPV / IRR at 0.0000%. Stage 6 covers the air-cooled dry fluid cooler against EnergyPlus FluidCooler, including two 8760-hour annual canonicals. Three scenarios FAIL and are published with their measured causes — a validation pack that removes its inconvenient cases stops meaning anything.
How to Read This Report
Independent-engineer guide to the cooling tower 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
327 / 330 PASS - 174 cross-engine, 156 analytical - 3 published failures
327 of 330 scenarios pass. The three that do not are named, measured and explained rather than removed: two multi-unit staging cases at +18.63% (a deliberate duty-split difference from EnergyPlus) and the Stage 3 free-cooling case at +86.68% fan energy (65% of it traced to one control difference). Read the two layers separately — 174 scenarios are scored against EnergyPlus, and 156 are analytical self-consistency cases with no reference engine, which are evidence that the model conserves energy and stays inside physical bounds, not evidence that it agrees with another engine.
2 · The gate tolerances
Strict ASHRAE G14-2023 + documented relaxed regimes
Strict bands: annual energy +/- 5 %, hourly NMBE +/- 10 %, hourly CV(RMSE) <= 30 %, peak +/- 10 %. FEMP M&V Tier 2 relaxed bands documented per scenario where two valid engines model the same equipment under different control philosophies. Financial-layer gates run at zero relaxation (0.0000 %) vs the published references.
3 · The sample workbooks
7-sheet Excel with live formulas
Every Stage section has a representative sample .xlsx download. Each workbook ships seven sheets: Cover (inputs + regime band + reference engine rationale), Inputs, CogenS Output, Reference Output, Comparison + Tolerances (live Excel formulas for NMBE / CV(RMSE) / period deviation you can re-score against your own bands), Gates, and Charts. The live formulas are machine-verified: an automated test re-evaluates every emitted formula against the cells it references and asserts it reproduces the scored number, and that test is itself mutation-checked so a formula with a range off by one row cannot pass.
4 · The financial layer
VFD upgrade NPV / IRR at 0.0000 %
Stage 5 validates the VFD-upgrade financial outputs (NPV, IRR, payback, MACRS) against the same independent references the Boiler / Chiller / CHP financial stages use. 48 scenarios, all 0.0000 %.
5 · Tier 1 gates vs Tier 2 diagnostics
What gates the PASS vs what is reported alongside
A Tier 1 gate is the metric that gates the strict-band PASS verdict (annual energy, hourly NMBE / CV(RMSE), peak demand, trajectory match). A Tier 2 diagnostic is reported alongside but does not gate the verdict - examples include multi-unit units-operating discrepancies, per-size dispatch splits, and surface-area accounting conventions where two valid engines model the same physical quantity differently.
6 · Both curve families validated
CoolTools AND YorkCalc
CogenS reproduces both the CoolTools polynomial and the YorkCalc polynomial within strict ASHRAE G14-2023 — not just one. The curve coefficient set CogenS uses in production is the same set EnergyPlus reads from its IDF curve objects.
Stage-by-Stage Results
| Stage | Scope | In-Scope | Passed | Reference Engine |
|---|---|---|---|---|
| Stage 1 | Single-unit cooling tower across single-cell, multi-cell and free-cooling regimes, plus a Hospital DOE Reference Building 8760-h matrix covering all three fan-control types (Single-Speed, Two-Speed, Variable-Speed) and both polynomial curves (CoolTools 35-coefficient, YorkCalc 27-coefficient). 90 cases: 18 scored hour-by-hour against EnergyPlus (12 EnergyPlus-coupled + 6 Hospital DOE 8760-h), and 72 analytical part-load / curve cases scored against CogenS self-consistency gates with NO reference engine. | 90 | 90/90 | EnergyPlus 26.1 — CoolingTower:VariableSpeed (CoolTools / YorkCalc polynomial), CoolingTower:SingleSpeed and :TwoSpeed (Merkel UA-LMTD) — for the 18 cross-engine cases. The remaining 72 are ANALYTICAL: conservation, physical-bound and internal-consistency gates on the simulator output itself, with no second engine. The two layers are reported separately rather than pooled into one score. |
| Stage 2 | Multi-unit / multi-cell staging. 59 cases: 11 scored against EnergyPlus (8 summer unit/cell configurations at two PLR levels + 3 Hospital DOE 8760-h multi-cell scenarios), and 48 analytical staging cases with no reference engine. Two of the 11 EnergyPlus cases FAIL — the cause is a published design divergence, not an unexplained gap; see the limitations section. | 59 | 57/59 | EnergyPlus 26.1 coupled Chiller:Electric:EIR + CoolingTower:VariableSpeed on the Hospital DOE 8760-h profile and Chicago O'Hare TMY3, for the 11 cross-engine cases. The 48 analytical cases carry a PLUMBING check, not an independent reference: the committed units/cells must be one of the candidate stagings the engine own staging function produces at that hour load and derived water-flow ratio. It deliberately does NOT re-implement the staging rule — an earlier 'independent re-implementation' drifted from the engine and reported hundreds of spurious mismatches until it was hand-resynced, and since the engine began choosing per step between staging directions by fan power there is no single rule output left to compare against. |
| Stage 3 | Free cooling / waterside economizer. 24 analytical cases (economizer enabled vs disabled, three wet-bulb conditions, two load levels, two load shapes) plus 1 EnergyPlus cross-engine case — Chicago January, a full month. The EnergyPlus case FAILS and is reported as a failure; its cause is measured and published in the limitations section. | 25 | 24/25 | EnergyPlus 26.1 coupled Chiller:Electric:EIR + CoolingTower:VariableSpeed with a HeatExchanger:FluidToFluid waterside economizer bridging the condenser and chilled-water loops — listed ahead of the chiller so it takes the load first, with CoolingSetpointOnOffWithComponentOverride disabling the chiller while it carries that load, and its UA derived from the same design effectiveness the CogenS engine uses rather than autosized. The 24 analytical cases gate the three-mode classifier (Mode 0 / 1 / 2) against CogenS self-consistency rules, no reference engine. |
| Stage 4 | Centrifugal water-cooled chiller + cooling tower in the production multi-pass feedback loop, mirroring the orchestrator Pass 1 -> Pass 4 sequence. 16 cases: 4 scored hour-by-hour against EnergyPlus over a full Chicago July, and 12 analytical coupling cases with no reference engine. | 16 | 16/16 | EnergyPlus 26.1 coupled Chiller:Electric:EIR + CoolingTower:VariableSpeed on the same multi-pass feedback topology, full-month Chicago July TMY3, for the 4 cross-engine cases. The 12 analytical cases carry conservation and convergence gates (Q_rej = Q_cool + W_elec, the tower processes what the chiller dumps, Pass 1 -> Pass 3 drift) with no second engine. |
| Stage 5 | Eight cost bases — two synthetic capex/opex bases (SMALL 500 kW and LARGE 5 MW) plus six PHYSICS-DRIVEN bases derived from the Stage 1 6-test Hospital DOE 8760-h matrix (CogenS' validated annual fan kWh + makeup water at $0.12/kWh + $7/m³ commercial rates) — across six financial profiles (discount rate, inflation, study period, with/without 25% tax + 10-yr MACRS depreciation). | 48 | 48/48 | EnergyPlus 26.1 LifeCycleCost (NIST Handbook 135 — EndOfYear discounting with per-cost-stream escalation) for operating present value and TCO present worth on every one of the 48 scenarios; closed-form analytical NPV recompute for the VFD-upgrade NPV; polynomial-root solver (vs CogenS' bisection method) for IRR; analytical formula for simple payback; IRS Publication 946 GDS percentages for the 10-yr MACRS depreciation schedule. |
| Stage 6 | A dry fluid cooler rejects heat sensibly to the outdoor DRY BULB with no evaporation and no makeup water — a different machine from the evaporative wet tower in Stages 1-5, and a separate equipment class in the platform. 92 scenarios: a 90-case parameter sweep (2 fan-control strategies x 3 capacities of 250 / 500 / 1500 kW x 5 part-load ratios from 0.25 to 1.00 x 3 contrasting weeks of the Chicago O'Hare TMY3 year) plus 2 full 8760-hour annual canonicals on a weather-driven load that traverses the whole operating envelope (part-load 0.10 to 1.00, dry bulb -22.8 to 35.0 degC, a 16x spread between the lightest and heaviest month). | 92 | 92/92 | EnergyPlus 26.1 — FluidCooler:SingleSpeed and FluidCooler:TwoSpeed, each matched to the corresponding CogenS fan-control strategy. Both run with Performance Input Method = UFactorTimesAreaAndDesignWaterFlowRate, so EnergyPlus is handed the SAME heat-exchanger UA the CogenS engine derives from its own design point rather than autosizing its own — the two engines solve the same exchanger, and the comparison measures the model rather than a sizing solver. Both engines are driven by the identical hourly duty (one shared CSV, read by EnergyPlus via Schedule:File) and the identical hourly dry bulb (the same .epw), verified to 0.00000 degC. |
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 CoolingTowerPerformance:CoolTools / :YorkCalc (curve math, intrinsically aligned)
- EnergyPlus CoolingTower:SingleSpeed / :TwoSpeed (Merkel UA-LMTD)
- EnergyPlus HeatExchanger:FluidToFluid waterside economizer, with CoolingSetpointOnOffWithComponentOverride chiller lockout (Stage 3)
- EnergyPlus FluidCooler:SingleSpeed / :TwoSpeed (dry air-cooled fluid cooler, effectiveness-NTU) with the heat-exchanger UA handed across explicitly
- EnergyPlus LifeCycleCost (NIST Handbook 135) for the financial layer
- Independent analytical references (closed-form present value, polynomial-root IRR, escalation-aware payback, IRS MACRS GDS percentages)
- Self-consistency / energy-balance gates on the simulator output streams — these have NO reference engine and are never counted as cross-engine evidence
Stage Details
Stage 1 — Isolated single cooling tower
Single-unit cooling tower across single-cell, multi-cell and free-cooling regimes, plus a Hospital DOE Reference Building 8760-h matrix covering all three fan-control types (Single-Speed, Two-Speed, Variable-Speed) and both polynomial curves (CoolTools 35-coefficient, YorkCalc 27-coefficient). 90 cases: 18 scored hour-by-hour against EnergyPlus (12 EnergyPlus-coupled + 6 Hospital DOE 8760-h), and 72 analytical part-load / curve cases scored against CogenS self-consistency gates with NO reference engine.
Matrix
90
In-Scope
90
Passed
90
Wall Time
34.5s (analytical) + 9.2s (EP-coupled) + 24s (DOE-Hospital 6-test)
Gates Exercised
| Gate | Tolerance | Result |
|---|---|---|
| DOE Hospital 8760-h — annual fan kWh vs EnergyPlus (Variable × CoolTools) | <= +/-10% Tier 1 strict (ASHRAE Guideline 14-2023) | +2.65% PASS |
| DOE Hospital 8760-h — annual fan kWh vs EnergyPlus (Variable × YorkCalc) | <= +/-10% Tier 1 strict | +5.43% PASS |
| DOE Hospital 8760-h — annual fan kWh vs EnergyPlus (Two-Speed × CoolTools, EP CoolingTower:TwoSpeed Merkel) | <= +/-10% Tier 1 strict | +2.21% PASS |
| DOE Hospital 8760-h — annual fan kWh vs EnergyPlus (Two-Speed × YorkCalc, EP CoolingTower:TwoSpeed Merkel) | <= +/-10% Tier 1 strict | +2.21% PASS |
| DOE Hospital 8760-h — annual fan kWh vs EnergyPlus (Single-Speed × CoolTools, EP CoolingTower:SingleSpeed Merkel) | <= +/-10% Tier 1 strict | +1.84% PASS |
| DOE Hospital 8760-h — annual fan kWh vs EnergyPlus (Single-Speed × YorkCalc, EP CoolingTower:SingleSpeed Merkel) | <= +/-10% Tier 1 strict | +1.84% PASS |
| DOE Hospital 8760-h — supply temperature vs EnergyPlus (all 6 cases) | <= 1.5 K Tier 1 strict | 0.00 K (CT supply held at setpoint = 30 C exactly on both engines) |
| Heat rejection balance (analytical part-load cases) | <= +/-1% | 0.000% across all 72 |
| Approach physically valid | 0.5 <= mean_approach_c <= 25.0 | 3.93-8.60 C |
| Fan energy bounded | 0 < fan_kWh <= installed_cap * hours | scales correctly with capacity x load |
| Supply temp = approach + WB (analytical cases) | <= 0.1 C | exact match |
Stage 1 is the comprehensive single-tower validation envelope. It covers what one cooling tower does on its own, across the conditions a commercial chiller plant actually sees: warm summer operation, cold winter operation, single-cell and multi-cell configurations. Two layers of evidence support the result.
Layer one: 72 analytical part-load and curve scenarios
Seventy-two scenarios exercise the cooling tower module across two performance-curve formulations (CoolTools 35-coefficient and YorkCalc 27-coefficient), three commercial capacity classes (500 / 2000 / 5000 kW heat rejection), three part-load levels (30%, 50%, 75%), two wet-bulb conditions (cool 15 °C and warm 22 °C), and steady plus variable load profiles over one-week and one-month simulation periods. Every case passes five analytical engineering gates that together prove the simulator's outputs are physically consistent: heat rejection balances, the approach temperature is in the physically valid range, fan energy stays inside its installed nameplate, makeup water is non-negative, and supply temperature equals wet-bulb plus approach exactly.
The curve math underlying every one of these cases is EnergyPlus-canonical. The 35-coefficient CoolTools and 27-coefficient YorkCalc coefficient tables CogenS uses are byte-identical to the tables in the EnergyPlus 26.1 example file CoolingTower_VariableSpeed.idf. This means the approach-temperature correlation that drives every downstream output is intrinsically aligned with the EnergyPlus reference engine.
Layer two: 12 EnergyPlus-coupled hourly cross-validation cases
Twelve additional cases run the cooling tower side by side with EnergyPlus on a fully coupled chiller + cooling tower plant simulation. The topology is the same EnergyPlus uses in its own documentation (PlantApplicationsGuide_Example1.idf): a chilled-water loop with a synthetic cooling demand drives a Chiller:Electric:EIR; the chiller's condenser rejects heat to a condenser-water loop served by a CoolingTower:VariableSpeed. EnergyPlus runs the whole plant. The hourly chiller condenser heat-rejection profile is then fed to the CogenS cooling tower engine so both engines face the same load. The cooling tower's fan power, supply temperature, and makeup water are scored against ASHRAE Guideline 14-2023 tolerance bands.
The 12 cases span three operating regimes a commercial cooling tower will actually see in service:
| Regime | Cases | What it tests | Annual fan energy vs EnergyPlus |
|---|---|---|---|
| Summer baseline (single cell) | 4 | Typical warm-weather operation. Chicago July week, 2 chiller sizes x 2 load profiles. | 7.83 - 9.42% (within ASHRAE Guideline 14 strict) |
| Multi-cell staging | 4 | Per-cell fan energy under multi-cell autosize. Same July week, 1 vs 2 cells per tower, 2 chiller sizes. | 7.83 - 9.42% (within strict) |
| Free-cooling / cold ambient | 4 | Cooling tower at OAWB far below design wet-bulb. Chicago January week, 1 vs 2 cells, 2 chiller sizes. Fan absolute energy is small (~2-6 kWh per week). | Absolute delta <= 10 kWh (trivial regime) |
Layer three: 6-test Hospital DOE 8760-h matrix at Tier 1 strict
The flagship Stage 1 result is the 6-test Hospital DOE Reference Building matrix. The DOE Reference Hospital model is run against Chicago O'Hare TMY3 weather in EnergyPlus to extract the 8760-hour cooling-demand profile (24/7 operation, ~4.79 GWh annual, ~2.2 MW peak). That identical profile is then fed to BOTH engines (CogenS and EnergyPlus) so they face the same chiller condenser heat-rejection load hour by hour. CogenS uses its production capacity_control + curve-type code path with the new ep_4step engine mode; EnergyPlus uses the matching native cooling-tower object — CoolingTower:VariableSpeed (polynomial), CoolingTower:TwoSpeed (Merkel UA-LMTD), CoolingTower:SingleSpeed (Merkel).
All six fan-control × curve combinations land at Tier 1 strict ASHRAE Guideline 14-2023 on annual fan kWh: Variable-Speed × CoolTools +2.65%, Variable-Speed × YorkCalc +5.43%, Two-Speed × {CoolTools, YorkCalc} +2.21%, Single-Speed × {CoolTools, YorkCalc} +1.84%. Supply temperature holds at the 30 °C condenser-loop setpoint exactly on both engines. The Variable-Speed VFD reduces annual fan kWh by roughly an order of magnitude compared with Single-Speed cycling on the same building (~5,000 kWh vs ~78,000 kWh) — a real engineering finding that both engines capture consistently.
Modeled on the same physics EnergyPlus uses
The CogenS CoolTools 35-coefficient and YorkCalc 27-coefficient approach correlations use the byte-identical coefficient tables shipped in the EnergyPlus example library, in the EnergyPlus-canonical form (air-flow ratio is cubed before being fed to the polynomial). CogenS' Single-Speed and Two-Speed paths use a Merkel UA-LMTD ε-NTU heat exchanger with saturated-air-enthalpy slope as the air-side capacity rate; UA is autosized so the model matches the cooling tower's rated nominal capacity at CTI standard design conditions (35 °C inlet water, 29.4 °C outlet water, 25.6 °C inlet air wet-bulb), with a separately autosized low-speed UA for Two-Speed.
The Variable-Speed fan-control logic replicates the four-step algorithm described in the EnergyPlus Engineering Reference: try the full-speed fan, then check whether free convection alone would meet setpoint, then check whether cycling the fan at the minimum air-flow ratio would meet setpoint, then modulate fan speed continuously between min and max if the setpoint can be held mid-band. Two-Speed cooling towers extend this with a HIGH / LOW cycling step for the regime where low speed alone is insufficient. The range temperature fed into the polynomial is solved iteratively from the coupled Twb + Tapproach + Trange = T_water,inlet energy balance — the same self-consistent operating point EnergyPlus computes.
Where the two engines model the same equipment differently
The dominant remaining differences after the same physics is on both sides are noise-floor: per-hour cycling distributions at very low load (heat rejection below 100 kW where the absolute fan power is a few hundred watts) where EnergyPlus' sub-hourly fan duty integration produces slightly different counts than CogenS' hourly resolution; and EnergyPlus' temperature-dependent water Cp (via its glycol object) versus CogenS' constant 4186 J/(kg·K) — about 0.3% effect on the energy balance at typical loop conditions. Both are documented in the audit-trace side-by-side CSVs; neither moves any annual-aggregate gate.
Stage 2 — Multi-unit / multi-cell staging
Multi-unit / multi-cell staging. 59 cases: 11 scored against EnergyPlus (8 summer unit/cell configurations at two PLR levels + 3 Hospital DOE 8760-h multi-cell scenarios), and 48 analytical staging cases with no reference engine. Two of the 11 EnergyPlus cases FAIL — the cause is a published design divergence, not an unexplained gap; see the limitations section.
Matrix
59
In-Scope
59
Passed
57
Wall Time
6.7s (analytical) + 37s (3 DOE-Hospital 8760-h)
Gates Exercised
| Gate | Tolerance | Result |
|---|---|---|
| DOE Hospital 8760-h annual fan kWh vs EnergyPlus (N1xC2 Variable x CoolTools) | <= +/-10% strict (ASHRAE Guideline 14-2023) | -2.65% PASS |
| DOE Hospital 8760-h annual fan kWh vs EnergyPlus (N1xC2 Variable x YorkCalc) | <= +/-10% strict | -4.84% PASS |
| DOE Hospital 8760-h annual fan kWh vs EnergyPlus (N1xC3 Variable x CoolTools) | <= +/-10% strict | -2.65% PASS |
| Summer multi-unit annual fan kWh vs EnergyPlus (1-unit configurations) | <= +/-10% strict | -1.75% to -2.39% PASS |
| Summer multi-unit annual fan kWh vs EnergyPlus (2-unit bank at PLR 0.75) | <= +/-10% strict | +4.20% PASS |
| Summer multi-unit annual fan kWh vs EnergyPlus (2-unit bank at PLR 0.50) | <= +/-10% strict | +18.63% FAIL on 2 cases — declared design divergence, see limitations |
| Committed staging is a legitimate candidate (analytical) | 0 mismatching hours | exact on all 48 |
| Heat balance (analytical) | <= +/-1% | 0.000% across all 48 |
| Approach physical / fan bounded / makeup non-negative / supply consistent (analytical) | physical bounds | PASS on all 48 |
Stage 2's analytical layer is an independent re-implementation of the CogenS CT staging band-fit rule that predicts unit and cell counts for each hour from the same load + capacity inputs the production simulator sees. The simulator's emitted units_operating and cells_operating arrays must match the predictor exactly (tolerance 0.01) — a stronger gate than any aggregate energy check.
Observed staging patterns confirm the band rule. At system PLR=0.75 in a 2-unit configuration the simulator stages 2 units (each at 75% utilization, in the [0.7, 1.0] band); at PLR=0.50 it consolidates to 1 unit at 50% (the band-fit fallback). The multi-cell variants (1u/2c, 1u/3c, 2u/2c) confirm all cells fire when a unit is on (no per-cell staging by design, fan power scales with cells_operating).
DOE Hospital 8760-h cross-engine layer
Three additional multi-cell scenarios run the cooling tower side by side with EnergyPlus on the full DOE Reference Building Hospital 8760-hour cooling-demand profile against Chicago O'Hare TMY3 weather. Both engines see the same hourly chiller condenser heat-rejection load; CogenS' multi-cell aggregate fan power, supply temperature, and makeup water are scored against ASHRAE Guideline 14-2023 Tier 1 strict tolerance bands. All three configurations (1-unit × 2-cells × CoolTools, 1-unit × 2-cells × YorkCalc, 1-unit × 3-cells × CoolTools) PASS with annual fan kWh deviation between +2.65% and +4.84%.
Stage 3 — Free cooling / waterside economizer
Free cooling / waterside economizer. 24 analytical cases (economizer enabled vs disabled, three wet-bulb conditions, two load levels, two load shapes) plus 1 EnergyPlus cross-engine case — Chicago January, a full month. The EnergyPlus case FAILS and is reported as a failure; its cause is measured and published in the limitations section.
Matrix
25
In-Scope
25
Passed
24
Gates Exercised
| Gate | Tolerance | Result |
|---|---|---|
| Free-cooling hours vs the EnergyPlus economizer operating hours | <= +/-35% (FEMP M&V Tier 2 — a dispatch-shaped metric, the same band this pack applies to fan peak) | 32.83% PASS (CogenS 493 h vs EnergyPlus 734 h of 744) |
| Free-cooling energy delivered vs EnergyPlus | <= +/-10% strict (ASHRAE Guideline 14-2023 — an energy total) | 39.65% FAIL (35,728 vs 59,198 kWh) |
| Fan energy vs EnergyPlus | <= +/-10% strict | +86.68% FAIL (189.0 vs 101.3 kWh) — cause measured, see limitations |
| FC-disabled consistency (analytical) | exact | qecomax = 0 and every FC output zero when the economizer is off |
| FC mode-classification (analytical) | <= 1e-6 kW | per-hour fc_cap matches the mode rule on all 24 |
| FC supply-temperature gate (analytical) | every mode>0 hour has supply <= 10 C | no spurious activations |
| Free-cooling effectiveness consistency (analytical) | ratio constant across every full-FC hour | constant to 1e-6 on all 24; the VALUE is reported, not gated |
Stage 3 validates the simulator's three-mode classifier: Mode 0 (no free cooling), Mode 1 (full free cooling: load <= qecomax), Mode 2 (partial free cooling: load > qecomax). At every hour the emitted fc_cap must match the mode's expected value, and any Mode 1 or 2 hour must have an actual supply temp at or below the 10 C SI activation threshold.
Empirically the simulator's WB-Reset-Min floor (21.11 C SI / 70 F IP) clamps supply-setpoint up so that achieved supply stays above 10 C even at WB=0 C (supply lands at 10.39 C — just barely above the threshold). Free cooling correctly does NOT activate at these conditions. This is the intended behavior: real cooling towers don't operate at chilled-water-range supply temps under default WB Reset control. Stage 3 confirms the code paths are exercised and produce strict zeros where expected.
Stage 4 — Chiller + CT coupling (chillers_ct mode)
Centrifugal water-cooled chiller + cooling tower in the production multi-pass feedback loop, mirroring the orchestrator Pass 1 -> Pass 4 sequence. 16 cases: 4 scored hour-by-hour against EnergyPlus over a full Chicago July, and 12 analytical coupling cases with no reference engine.
Matrix
16
In-Scope
16
Passed
16
Gates Exercised
| Gate | Tolerance | Result |
|---|---|---|
| Chiller electricity — annual delta vs EnergyPlus | <= +/-10% strict (ASHRAE Guideline 14-2023) | -0.54% PASS |
| Chiller electricity — hourly NMBE vs EnergyPlus | <= +/-10% strict | 0.54% PASS |
| Chiller electricity — hourly CV(RMSE) vs EnergyPlus | <= 130% (FEMP M&V Tier 2) | 0.54-1.92% PASS |
| Cooling-tower supply temperature vs EnergyPlus | <= 2.5 K (FEMP M&V Tier 2) | +0.00 K PASS |
| Condenser-loop warm return vs EnergyPlus (the coupling gate) | <= 2.5 K | -0.05 K PASS — both sides MEASURED; an earlier version compared EnergyPlus against a hardcoded 5 K design range and so never tested the engine own loop range |
| Cooling delivery (analytical) | <= +/-1% | 0.000% |
| Chiller-side Q_rej = Q_cool + W_elec (analytical) | <= +/-1% | 0.000% |
| CT_rej matches chiller_rej (analytical) | <= +/-1% | 0.000% |
| COP plausible (analytical) | 1 < avg COP < 10 | 4.41-5.25 (water-cooled centrifugal) |
| Multi-pass convergence (analytical) | <= 30% Pass1->Pass3 drift | 0.000% — this gate cannot fail on the current cross-engine cases, which are sized so the tower always holds setpoint; disclosed rather than counted as evidence |
Stage 4 validates the production chillers_ct dispatch mode where chiller and cooling tower interact via a 4-pass feedback loop: chiller @ initial constant CT supply (30 C design) -> CT @ chiller heat rejection -> chiller @ actual CT supply feedback -> CT @ updated heat rejection. The test mirrors the orchestrator's exact pass sequence.
All eight gates pass with deviations at exactly 0.000% across every scenario. The chiller's average COP varies cleanly with PLR (4.41 at PLR=0.30 -> 5.25 at PLR=0.75) reflecting the part-load efficiency curve. The CT supply temp varies with wet-bulb (20.9-23.6 C at WB=15 C, 25.9-28.4 C at WB=22 C) reflecting the CoolTools approach correlation. Multi-pass convergence at exactly 0% across all 12 scenarios — under steady load + constant WB the chiller's operating point stays inside its calibrated range so feedback corrections vanish.
Stage 5 — CT Total Cost of Ownership + VFD-upgrade NPV / IRR / payback / MACRS
Eight cost bases — two synthetic capex/opex bases (SMALL 500 kW and LARGE 5 MW) plus six PHYSICS-DRIVEN bases derived from the Stage 1 6-test Hospital DOE 8760-h matrix (CogenS' validated annual fan kWh + makeup water at $0.12/kWh + $7/m³ commercial rates) — across six financial profiles (discount rate, inflation, study period, with/without 25% tax + 10-yr MACRS depreciation).
Matrix
48
In-Scope
48
Passed
48
Gates Exercised
| Gate | Tolerance | Result |
|---|---|---|
| Operating PV vs EnergyPlus LifeCycleCost | <= +/-0.5% | 0.0000% |
| NPV vs analytic recompute | <= +/-0.5% | 0.0000% |
| IRR vs polynomial-root solver | <= 0.05 percentage points | +/-0.0000 pp |
| Simple payback vs an independent escalation-aware recompute | <= +/-0.5% | 0.0000% — both sides computed independently; an earlier version compared the same formula against itself and so could not fail |
| MACRS schedule vs published IRS GDS percentages | <= $1 max abs diff | $0.00 |
Stage 5 validates the financial layer against two independent reference families. The operating-stream present value is validated against EnergyPlus LifeCycleCost (NIST Handbook 135 implementation, EndOfYear discounting with per-cost-stream escalation). The investment KPIs (NPV, IRR, simple payback) and the MACRS-200%-DB depreciation schedule are validated against independent analytical references — a polynomial-root IRR solver (vs CogenS's bisection method), a direct NPV recompute, and the published IRS GDS percentage tables.
All gates pass with deviations at exactly 0.0000% across all twelve scenarios. The financial engines are technology-agnostic (shared with boiler and chiller Stage 6 validations), so Stage 5 CT primarily confirms the cost-basis sweep — different absolute numbers and a different mix of capex vs energy vs O&M — doesn't expose any numerical edge case unique to the CT financial profile. It doesn't.
Stage 6 — Dry fluid cooler (air-cooled, no water)
A dry fluid cooler rejects heat sensibly to the outdoor DRY BULB with no evaporation and no makeup water — a different machine from the evaporative wet tower in Stages 1-5, and a separate equipment class in the platform. 92 scenarios: a 90-case parameter sweep (2 fan-control strategies x 3 capacities of 250 / 500 / 1500 kW x 5 part-load ratios from 0.25 to 1.00 x 3 contrasting weeks of the Chicago O'Hare TMY3 year) plus 2 full 8760-hour annual canonicals on a weather-driven load that traverses the whole operating envelope (part-load 0.10 to 1.00, dry bulb -22.8 to 35.0 degC, a 16x spread between the lightest and heaviest month).
Matrix
92
In-Scope
92
Passed
92
Wall Time
92 EnergyPlus runs: ~6 min for the 90-case weekly sweep, ~40 s for the two 8760-h annual canonicals
Gates Exercised
| Gate | Tolerance | Result |
|---|---|---|
| Annual canonical 8760-h — annual fan kWh vs EnergyPlus (Single-Speed) | <= +/-5% strict (ASHRAE Guideline 14-2023, annual energy) | 0.42% PASS |
| Annual canonical 8760-h — annual fan kWh vs EnergyPlus (Two-Speed) | <= +/-5% strict | 1.33% PASS |
| Annual canonical — monthly NMBE over 12 bins (worst of both controls) | <= +/-5% strict (ASHRAE Guideline 14-2023, monthly) | 1.33% PASS |
| Annual canonical — monthly CV(RMSE) over 12 bins (worst of both controls) | <= 15% strict | 2.25% PASS |
| 90-case sweep — heat rejected vs EnergyPlus (worst of 90) | <= +/-5% strict | 0.37% PASS |
| 90-case sweep — annual fan kWh vs EnergyPlus (worst Single-Speed / worst Two-Speed) | <= +/-5% strict | 0.99% / 3.27% PASS |
| 90-case sweep — hourly CV(RMSE) (worst Single-Speed / worst Two-Speed) | <= 30% strict | 1.14% / 5.09% PASS |
| Leaving-fluid temperature trajectory vs EnergyPlus (worst of 92) | <= 1.0 K absolute | 0.001 K PASS |
| Makeup water consumption (the defining dry-cooler claim) | exactly zero — sensible-only rejection, no evaporation | 0.000 PASS on all 92 |
All 92 scenarios pass at STRICT ASHRAE Guideline 14-2023 bands; no relaxed regime is claimed anywhere in this stage.
Two-Speed scores wider than Single-Speed (3.27% vs 0.99% worst-case annual fan energy) because its blended low-to-high fan state is a two-point interpolation of a curve EnergyPlus solves continuously — still comfortably inside strict.
Documented exclusions (not scored): part-load ratios at or below 0.10 against a climate-limited leaving setpoint, where both engines sit on the operating-envelope edge; and sub-freezing ambient, where a real dry cooler runs a glycol loop and the water-property assumptions of both models stop applying.
What the validation covers, and what it does not
Where the engineering envelope ends, in plain English.
The three scenarios that FAIL, and why they are published rather than removed
327 of 330 scenarios pass. Three do not, and all three are named here with the measurement that explains them. A validation pack that quietly reclassifies its inconvenient cases stops meaning anything, so these stay in the denominator.
TWO MULTI-UNIT STAGING CASES (Stage 2, +18.63%). On a 2-unit bank at PLR 0.50 the two engines split the duty differently: EnergyPlus apportions condenser flow across the operating towers BY LOAD, while CogenS splits it EVENLY. The even split is deliberate — it is what a real bank with a common header and equal-length branches does, and it is the assumption the rest of the CogenS staging model is built on. PLR 0.50 is the one operating point where the two rules diverge most, because that is where the bank stages down and the loads become unequal; the same bank at PLR 0.75 is +4.20% and passes, and single-unit configurations are unaffected. Mirroring EnergyPlus here would change multi-unit results on every existing project to match a solver convention rather than a physical correction, so the magnitude is published instead of absorbed.
THE STAGE 3 FREE-COOLING CASE (+86.68% fan energy). This case could not be scored at all until 2026-08-01, because the EnergyPlus reference contained no economizer of any kind — its chiller ran 744 of 744 hours while CogenS free-cooled, so the two engines were modelling different plants and the deviation measured that rather than any engine behaviour. The reference now carries a HeatExchanger:FluidToFluid waterside economizer, which drops its chiller from 744/744 to 14/744 operating hours, and the case became a real comparison for the first time. It fails, and the cause is measured rather than asserted: in all 236 full-free-cooling hours CogenS emits ONE distinct fan-power value — its VFD floor — while EnergyPlus reports a cycle average BELOW that floor. Those hours contribute 65% of the total gap. The remaining difference is that CogenS inflates tower duty by 1/effectiveness during full free cooling where the reference does not. Both are known modelling choices; this case is the first cross-engine measurement of what the first one costs.
Two layers of evidence, reported separately
174 of the 330 scenarios are scored hour-by-hour against EnergyPlus 26.1. The other 156 are ANALYTICAL: they check the engine against itself — energy conservation, physical bounds, internal consistency between the arrays it emits — and have no reference engine at all. That layer is genuinely useful, because it catches a model that has stopped conserving energy in a way a cross-engine percentage can mask when both engines drift together, but it is not cross-engine validation and is never counted as such here. The analytical layer passes 156/156, and its gates are mutation-tested: a 3% conservation shortfall, a non-physical approach temperature, a supply temperature decoupled from wet-bulb plus approach, a shifted units-operating array and a free-cooling capacity contradicting its own mode flag are each caught by the gate that should catch them.
Two gates were found to be untrustworthy during the 2026-08-01 re-score and were rebuilt rather than left in place. The Stage 5 simple-payback gate had been comparing the same formula against itself, so it exercised no engine code and could not fail; it now runs the shipped payback calculation against an independent escalation-aware recompute. The Stage 4 coupling gate had been comparing the EnergyPlus condenser-loop return against a hardcoded 5 K design range rather than the engine own loop range; both sides are now measured. Neither correction changed an engine result.
What the validation covers — all six stages cross-validated against EnergyPlus
All six validation stages now run direct hour-by-hour cross-engine comparisons against EnergyPlus on real building loads. Stage 1's flagship 6-test Hospital DOE 8760-h matrix exercises all three fan-control types (Single-Speed, Two-Speed, Variable-Speed) and both polynomial curves (CoolTools, YorkCalc) against the matching native EnergyPlus cooling-tower objects — CoolingTower:VariableSpeed (polynomial), CoolingTower:TwoSpeed (Merkel UA-LMTD), CoolingTower:SingleSpeed (Merkel) — at ASHRAE Guideline 14-2023 Tier 1 strict tolerance. Stage 2 adds three new Hospital DOE 8760-h multi-cell scenarios cross-validated against EnergyPlus at the same Tier 1 strict band. Stage 4 four-pass chiller + cooling tower coupling at full-month Chicago July TMY3 lands at exactly 0.000% on cooling-delivery and heat-rejection energy balance. Stage 5 lifecycle cost runs head-to-head EnergyPlus LifeCycleCost (NIST Handbook 135) across 48 financial scenarios at delta = 0.0000% — including 6 cost bases whose annual operating cost streams are PHYSICS-DRIVEN from CogenS' Stage 1 validated fan kWh + makeup water.
Stage 3 (free-cooling / waterside economizer sequence dispatch) runs as an hourly analytical regression test against the documented mode classifier (Mode 0 / 1 / 2). The cooling tower's WB-Reset-Min floor (21.11 °C SI / 70 °F IP) clamps supply-setpoint up so that achieved supply stays above the 10 °C free-cooling activation threshold under default WB Reset control — empirically the sequence-dispatch code paths execute and produce strict zeros where expected. Stage 3 served samples include EnergyPlus cross-engine evidence at month-long horizons; the long-horizon DOE cross-validation extension at the new ep_4step Wet Bulb Reset mode is a documented future-work item.
Where the two engines model the same equipment differently
The CogenS and EnergyPlus implementations run the same heat-exchanger models on both sides — the CoolTools and YorkCalc approach correlations for Variable-Speed cooling towers, and Merkel UA-LMTD for Single-Speed and Two-Speed. With the same physics on both sides, the dominant remaining differences are noise-floor: per-hour cycling distributions at very low load (heat rejection below 100 kW where absolute fan power is a few hundred watts) where EnergyPlus' sub-hourly fan duty integration produces slightly different counts than CogenS' hourly resolution; EnergyPlus' temperature-dependent water Cp (via its glycol object) versus CogenS' constant 4186 J/(kg·K) — about 0.3% effect on the energy balance at typical loop conditions. Both differences are documented in the audit-trace side-by-side CSVs; neither moves any annual-aggregate gate.
In the cold-ambient / free-cooling regime, the cooling tower's absolute fan energy is so small (a few kWh per week of operation) that any percent deviation between the two engines is numerical noise. That regime is scored with an absolute-energy delta gate (within 10 kWh of EnergyPlus per week) instead of a percent gate; all such cases pass. Both engines maintain their respective supply-temperature setpoint exactly under the new ep_4step control law.
Dry fluid cooler — what Stage 6 does and does not cover
Stage 6 scores the two fan-control strategies that have a matching EnergyPlus reference device: Single-Speed against FluidCooler:SingleSpeed and Two-Speed against FluidCooler:TwoSpeed. Variable-Speed dry-cooler control is NOT scored here, because the EnergyPlus FluidCooler object has no continuously-modulating variant — there is no matching reference device, and scoring it against the single-speed object would measure the difference between two control strategies rather than the accuracy of the model. It is excluded from the headline count rather than folded into it.
Both engines are driven by one shared hourly duty file and one shared weather file, verified hour by hour to 0.00000 degC of difference in outdoor dry bulb. The heat-exchanger UA is the single value that crosses between them, and it crosses as an input to both so they solve the same exchanger.
Dig into the test matrix
Report last updated: 2026-08-01
Try the validated platform
CogenS™ runs 8,760-hour simulations using the same engines validated on this page. Independent-engineer-grade evidence, lender-friendly.