Home / DC Solutions / Technical Manuals / Cx Calculator

Technical Manual · Commissioning

Cx Calculator — Methodology & Formulas

Every input, equation, constant, output, and reference behind the commissioning (Cx) calculator. All math is anchored to the RICH engine in RZEngine.models.commissioning (rz-engine.js §v2.5.0) against deep-frozen constants in DATA.commissioning.cx.rich — no back-solved coefficients, no random schedule values.

Engine RZEngine v2.5.0 Basis ASHRAE Guideline 0-2019 Inputs 14 Outputs cost · schedule · MC · tornado Archetypes 8 Regions 30
▶ Open the live Cx Calculator

01 Purpose & engineering basis

The calculator estimates the total cost and working-day schedule of a data center commissioning (Cx) program across the full project-delivery lifecycle — L0 Design & Planning through L5 Integrated Systems Testing (IST) to L6 Turnover & Closeout. It answers four questions: how much will the Cx program cost, how long will each phase take, what is the cost uncertainty band (P5–P95), and which inputs drive the most budget swing.

Basis of design is user-driven: supply IT load, cooling type, redundancy, building configuration, and region; the engine returns a deterministic staffed-duration and cost estimate per level. The governing process framework is ASHRAE Guideline 0-2019 (Commissioning Process), with test-procedure scope from NETA ECS/ATS-2025, IST scenario counts from Uptime Institute Tier Standard 2024, and structured-cabling tests from BICSI 002. Day-rate calibration reflects industry practice (n = 50+ DC Cx programs, 2021–2026).

L0–L6 are project-delivery levels, not an ASHRAE-defined numbering hierarchy. They are used here as a practical label for the seven sequential phases of a DC commissioning program. ASHRAE Guideline 0 defines the lifecycle process backbone; the level labels are a practitioner convention.

02 Inputs

Fourteen inputs across five groups — facility sizing, cooling & redundancy, electrical infrastructure, project delivery, and region. All are mapped through models.commissioning.mapInput() which fills any missing field with the budgetary defaults in DATA.commissioning.cx.rich.defaults.

Field (UI / key)TypeDefaultValues / rangeEffect
IT Load itLoadnumber kW2 000≥ 100Drives all equipment-count scales; appears in every level cost formula.
Cooling Type coolingTypeenumairair / inrow / rdhx / dlc / immersionCost mult (1.00–1.55) and duration mult (1.00–1.40); liquid cooling adds CDU scope to L2–L5.
Redundancy redundancyenumN+1N / N+1 / 2N / 2N+1Cost mult (1.00–2.25), duration mult (1.00–1.90), IST scenario count (3–10), IST hours (14–120).
Rack Density rackDensityenumstandardstandard (6 kW) / medium (12 kW) / high (25 kW) / ai_hpc (75 kW)Sets rack count for equipment scale; density.cool multiplier (1.00–1.60) enters global cost.
Building Type buildingTypeenumpurposewarehouse / modular / purpose / highriseCost mult (0.75–1.30) and duration mult (0.70–1.25).
Fire Suppression fireSuppressionenumnovecfm200 / novec / inergen / n2 / water / water_mistScalar multiplier on global cost (0.85–1.15).
UPS Type upsTypeenummodularstandalone / modular / distributed / rotaryScalar multiplier (1.00–1.40) on global cost.
Generator generatorTypeenumdieseldiesel / gas / dualfuel / hvoScalar multiplier (1.00–1.25); load-bank diesel cost in L5 uses the regional diesel $/L rate.
Seismic Zone seismicZoneenum10 / 1 / 2 / 3 / 4Cost mult (1.00–1.35) and duration mult (1.00–1.25).
Cx Scope cxScopeenumnew_buildnew_build / retrofit / recommission / continuousDuration mult (0.25–1.00) and cost mult (0.30–1.00) applied to all levels uniformly.
Substation Config substationConfigenumsingle_subutility_fed / single_sub / dual_sub / ring_busCost mult (0.70–2.10) and duration mult (0.75–1.80); adds days to L0 for complex configs.
BMS Complexity bmsComplexityenumstandardbasic (200 pts) / standard (500 pts) / advanced (1 200 pts) / ai_driven (2 000 pts)Cost mult (0.60–2.00) and duration mult (0.50–1.70); BMS point count directly scales L3 BMS verification days.
Delivery Method deliveryMethodenumtraditionaltraditional / design_build / epc / modular_podCost mult (0.70–1.00) and duration mult (0.60–1.00); modular_pod increases L1 by ×1.5.
Region regionenumus_virginia30 market keys (or ISO-2 country code via iso2Region map)Selects day-rate card: cxDay / fieldDay / oemDay / witnessDay / perDiem / diesel $/L / mult (0.29–1.00 vs US).

03 Calculation methodology

The RICH engine executes six sequential steps. All function names map one-to-one to RZEngine.models.commissioning.* in rz-engine.js (v2.5.0).

Step 1 — Equipment-quantity scaling

switchgear = ⌈kW / 5 000⌉ + 1 transformers = ⌈kW / 2 500⌉ generators = ⌈kW / 2 000⌉ ups_modules = ⌈kW / 500⌉ cooling_units = ⌈kW / 200⌉ pdus = ⌈kW / 100⌉ chillers = ⌈kW / 500⌉ · pumps = ⌈kW / 300⌉ racks = ⌈kW / density.kw⌉ (6 / 12 / 25 / 75 kW/rack) fireZones = ⌈kW / 200⌉ · sts = ⌈kW / 1 000⌉ · ats = ⌈kW / 2 000⌉ +12 more counts (lvsb, db, mcc, vfd, busway, firePumps, ahu, accessDoors, cameras, lightZones, emergLights, sumpPumps, rpp) In models.commissioning.equipScale(inp).inline · rz-engine.js §9505

Step 2 — Per-level working-day durations (L0–L6)

L0 = max(5, ⌈(15 + sizeAdder + liquidAdder + substAdder + bmsAdder) × scopeDur⌉) sizeAdder: +5 if kW>5 000 · +10 if kW>20 000 · +15 if kW>50 000 L1 = ⌈(eq.switchgear×2 + eq.transformers×3 + eq.generators×2 + 2 + eq.chillers×0.5 + 1 + eq.lvsb×0.5 + eq.mcc×0.5 + eq.pdus×0.3 + eq.busway×0.3 + eq.ats×0.3 [+ 2 if liquid] [×1.5 if modular_pod]) × scopeDur⌉ L2 = max(1, ⌈(max(l2elec, l2mech) + fireZones×0.75 + fireZones×0.25 + ⌈kW/1000⌉×2 + 1) × redDur × bldDur × scopeDur⌉) L3 = max(1, ⌈(l3elec + max(l3mech, l3fire) + l3bms) × coolDur × redDur × scopeDur⌉) l3bms = ⌈bms.pts × (kW/1000) / 100⌉ (BMS point-to-point days) L4 = max(1, ⌈(l4elec + max(l4mech, 3)) × scaleFactor × redDur × scopeDur⌉) scaleFactor: 1.0→1.15→1.30→1.50→1.75 at kW 5k/10k/25k/50k L5 = max(1, ⌈⌈(rd.istHrs + rd.scenarios×3) / 10⌉ × sf5 × coolDur × scopeDur⌉) rd.istHrs: N→14 · N+1→16 · 2N→110 · 2N+1→120 rd.scenarios: 3/6/10/10 L6 = max(3, ⌈(10 + sizeAdder + redAdder + liquidAdder + bmsAdder) × scopeDur⌉) In models.commissioning.levelDurations(inp, eq).inline · rz-engine.js §9522

Step 3 — Per-level costs (regional day-rate pricing)

L0_cost = (L0 × r.cxDay × 2.5 + kW × 2) × r.mult L1_cost = L1 × r.cxDay × 2 + L1 × r.perDiem L2_cost = L2 × r.cxDay × 3 + L2 × 350 + kW × 0.5 L3_cost = L3 × r.cxDay × 4 + (gens×12+8)×350 + L3×500 + (gens×2+chillers×2)×r.oemDay L4_cost = L4 × r.cxDay × 5 + lbHrs×350 + L4×200×4 + L4×600 lbHrs: 24 (N/N+1) · 48 (2N/2N+1) L5_cost = L5×r.cxDay×8 + mw×8000×lbDays + 20×kW×0.3×r.diesel + L5×r.witnessDay lbDays: N→1 · N+1→2 · 2N/2N+1→5 L6_cost = (L6×r.cxDay×3 + ⌈kW/2000⌉×r.cxDay×2 + kW×3 + kW×1.5) × r.mult In models.commissioning.levelCosts(inp, dur, eq). r = regional rate card.inline · rz-engine.js §9573

Step 4 — Grand total (GM-normalized blend with global multiplier)

gm = cool.cost × red.cost × bld.cost × seismic.cost × sub.cost × bms.cost × delivery.cost × fire.cost × ups.cost × gen.cost × density.cool normFactor = gm ^ 0.45 (geometric-mean damping; prevents multiplicative explosion) totalBase = (baseKw.electrical + baseCostKw + baseKw.fire + baseKw.security + baseKw.it + baseKw.controls + baseKw.building) × kW × normFactor baseKw ($/kW): elec 72 · mech-air 35 / mech-dlc 50 · fire 12 · security 6 · it 11 · controls 14 · building 5 levelTotal = L0_cost + (L1+L2+L3+L4+L5)×r.mult + L6_cost subtotal = max(totalBase, levelTotal) + kW×5 (doc) + totalDays×r.perDiem×3 (travel) subtotal × r.mult [× 1.08 if kW≥50 000] [× 1.05 if kW≥100 000] contingency = subtotal × 0.15 grand = subtotal + contingency In models.commissioning.programRich(input).inline · rz-engine.js §9595

Step 5 — Monte Carlo cost band

For i = 1 … N (default 10 000): itLoad_i = max(100, round(base.itLoad × (1 + Normal(0, 0.075)))) cost_i = programRich(with itLoad_i).grand × clamp(1 + Normal(0, 0.05), 0.85, 1.15) Sort, report P5 / P25 / P50 / P75 / P95 / mean / σ / CVaR-95 Normal(0, σ) drawn via Box-Muller: z = √(−2 ln u₁) · cos(2π u₂), u₁,u₂ ~ Uniform(0,1) In models.commissioning.monteCarlo(input, opts). opts.rng can override Math.random for deterministic testing.inline · rz-engine.js §9656

Step 6 — Sensitivity tornado (7-parameter OAT)

For each of 7 params (IT Load, Cooling Type, Redundancy, Building Type, Seismic, Substation, BMS): lo_cost = programRich(param → low_value).grand hi_cost = programRich(param → high_value).grand range = |hi_cost − lo_cost| Sort by range desc → tornado chart (widest bar = top driver) IT Load: ±20% of base. Categorical params: low/high = enum extremes. In models.commissioning.sensitivity(input, baseCost).inline · rz-engine.js §9681

Compact schedule model (programSchedule)

raw = 4.5 + 0.45 × log₂(1 + mw) × 4 (log-damped growth, mw = kW/1000) totalMonths = min(20, raw × coolMult × redMult) level months = totalMonths × level.schedWeight (L0 6% … L5 27%) In models.commissioning.programSchedule(input). Used by the Gantt chart. Phase weights: L0 6% · L1 8% · L2 12% · L3 20% · L4 18% · L5 27% · L6 9%.DATA.commissioning.cx.levels · rz-engine.js §5572

04 Constants & data sources

All constants live in deep-frozen DATA.commissioning.cx.rich (rz-engine.js §5591). Source tag on each block: DATA.sources['commissioning.cx'] cites "DC Cx budgetary practice (ASHRAE Guideline 0 / BCxA / NETA ECS scope, Uptime IST scenario counts), rates calibrated to industry n=50+ programs 2021–2026, asOf 2026."

Multiplier tableKeysCost rangeDuration range
Cooling rich.coolingair / inrow / rdhx / dlc / immersion1.00 – 1.55×1.00 – 1.40×
Redundancy rich.redundancyN / N+1 / 2N / 2N+11.00 – 2.25×1.00 – 1.90×
Building rich.buildingwarehouse / modular / purpose / highrise0.75 – 1.30×0.70 – 1.25×
Seismic rich.seismiczones 0–41.00 – 1.35×1.00 – 1.25×
Substation rich.substationutility_fed / single_sub / dual_sub / ring_bus0.70 – 2.10×0.75 – 1.80×
BMS/DCIM rich.bmsbasic (200 pts) – ai_driven (2 000 pts)0.60 – 2.00×0.50 – 1.70×
Delivery rich.deliverytraditional / design_build / epc / modular_pod0.70 – 1.00×0.60 – 1.00×
Scope rich.scopecontinuous / recommission / retrofit / new_build0.30 – 1.00×0.25 – 1.00×
Fire rich.firewater / fm200 / novec / inergen / n2 / water_mist0.85 – 1.15×
UPS rich.upsstandalone / distributed / modular / rotary1.00 – 1.40×
Generator rich.gendiesel / hvo / gas / dualfuel1.00 – 1.25×
Rack density rich.densitystandard / medium / high / ai_hpccool 1.00 – 1.60×
Regional day-rate card (sample)CxDay $/dFieldDay $/dOEMDay $/dWitnessDay $/dDiesel $/LMult vs US
Northern Virginia (us_virginia)1 2008502 0003 5001.101.00
London (uk_london)8756501 5003 0001.750.73
Singapore8506201 5003 0001.600.71
Jakarta (indonesia_jakarta)3502007001 8001.050.29
São Paulo (brazil_saopaulo)5003509002 2001.250.42

30 markets are covered. ISO-2 country codes not in the exact rate table are mapped to the nearest labor/cost peer via rich.iso2Region. Contingency is a flat 15% on subtotal. GM-normalization exponent normExp = 0.45 — chosen to dampen multiplicative extremes while preserving relative cost ordering across the 11 multiplier tables.

05 Outputs

OutputFieldUnitInterpretation
Grand total costgrandUSDSubtotal + 15% contingency. Budgetary estimate ±30–50% at this stage.
Cost per kW ITperKw$/kWSanity check: typical range $150–$800/kW depending on redundancy and region.
Cx cost as % of capexpctCapex%Industry benchmark 3–8% for standard builds; 8–15% for 2N+ hyperscale.
Total durationdurationDays / durationWeeks / durationMonthsdays / weeks / monthsWorking days (5-day week, 22-day month). Excludes procurement lead times.
L0–L6 cost breakdownlevels[].costUSDFixed proportions of grand total per level: L0 3% · L1 4% · L2 10% · L3 22% · L4 20% · L5 32% · L6 9%.
Discipline breakdowndisciplines[].costUSDElectrical 40% · Mechanical 24% · Fire 9% · Controls 8% · IT 7% · Security 4% · Building 4% · Management 4%.
Equipment countsequipcount25+ equipment types driving duration calculations.
Tier & IST infotierInfoUptime tier label, availability string, IST scenario count, and IST staffed-hours for the selected redundancy.
Monte Carlo bandP5 / P25 / P50 / P75 / P95 / CVaR-95USDP5–P95 = 90% budget confidence interval. CVaR-95 = average of worst-5% outcomes.
Sensitivity tornadosensitivity[].{name, low, high, range}USD swing7 parameters ranked by range; widest bar is the top cost driver for this configuration.

06 Worked example — Enterprise 2 MW, N+1, air cooling, Northern Virginia

Input: itLoad = 2 000 kW, coolingType = air, redundancy = N+1, rackDensity = standard, buildingType = purpose, fireSuppression = novec, upsType = modular, region = us_virginia, generatorType = diesel, seismicZone = 1, cxScope = new_build, substationConfig = single_sub, bmsComplexity = standard, deliveryMethod = traditional. Numbers verified by executing the engine logic in Node.js against rz-engine.js constants.

  1. Equipment scale: switchgear 2 · transformers 1 · generators 1 · ups_modules 4 · cooling_units 10 · pdus 20 · sts 2 · chillers 4 · pumps 7 · racks 334 · fireZones 10 · ats 1 (+ 12 others)
  2. L0 duration: base 15 d (2 000 kW < 5 000 threshold) × 1.00 scope = 15 working days
  3. L1 duration: 2×2 + 1×3 + 1×2 + 2 + 4×0.5 + 1 + 2×0.5 + 2×0.5 + 20×0.3 + 2×0.3 + 1×0.3 = 22.9 → ⌈22.9×1.00⌉ = 23 working days
  4. L2 duration: max(13.5, 13.5) + 10×0.75 + (10×0.25 + 2×2 + 1) = 28.5 → ⌈28.5×1.30 red×1.00 bld×1.00 scope⌉ = 38 working days
  5. L3 duration: l3elec=10 + max(l3mech=17.5, l3fire=15) + l3bms=⌈500×2/100⌉=10 = 37.5 → ⌈37.5×1.00 cool×1.30 red⌉ = 49 working days
  6. L4 duration: (3+2)+max(7,3)=12 → ⌈12×1.0 sf×1.30 red⌉ = 16 working days
  7. L5 duration: N+1 → istHrs=16, scenarios=6; hrs=16+6×3=34; ⌈34/10⌉=4 → ⌈4×1.0 sf5⌉ = 4 working days
  8. L6 duration: base 10 d (no 2N/liquid/advanced-BMS adder) → 10 working days
  9. Total duration: 15+23+38+49+16+4+10 = 155 working days (≈ 31 weeks / 8 months)
  10. Level costs (us_virginia rates):
    L0 = (15×1200×2.5 + 2000×2)×1.00 = $49 000
    L1 = 23×1200×2 + 23×300 = $62 100
    L2 = 38×1200×3 + 38×350 + 2000×0.5 = $151 100
    L3 = 49×1200×4 + (1×12+8)×350 + 49×500 + (1×2+4×2)×2000 = $286 700
    L4 = 16×1200×5 + 24×350 + 16×800 + 16×600 = $126 800
    L5 = 4×1200×8 + 2×8000×2 + 20×2000×0.3×1.10 + 4×3500 = $97 600
    L6 = (10×1200×3 + 1×1200×2 + 2000×3 + 2000×1.5)×1.00 = $47 400
    levelTotal = $820 700
  11. Global multiplier: gm = 1.00×1.35×1.00×1.05×1.00×1.00×1.00×1.05×1.25×1.00×1.00 = 1.8605 → normFactor = 1.8605^0.45 = 1.3223
  12. totalBase: (72+35+12+6+11+14+5)×2000×1.3223 = 155×2000×1.3223 = $409 913
  13. Blend: max(409 913, 820 700) = 820 700 + doc 2000×5=10 000 + travel 155×300×3=139 500 → subtotal×1.00 = $970 200
  14. Grand total: subtotal + 15% contingency = 970 200 × 1.15 = $1 115 730 ($557.9/kW · 5.31% of capex at $10 500/kW)
  15. Level split (fixed proportions of grand):
    L0 3% = $33 k · L1 4% = $45 k · L2 10% = $112 k · L3 22% = $245 k · L4 20% = $223 k · L5 32% = $357 k · L6 9% = $100 k
Verification method: the worked-example numbers were computed by executing the exact engine formulas step-by-step in Node.js against the constants extracted from rz-engine.js (v2.5.0). Results match the live calculator output for the Enterprise 2 MW archetype preset. The level-split values are display-only proportions applied to grand total — they do not add up to levelTotal exactly because the blended grand may exceed the pure level-cost sum.

07 Eight preset archetypes

The calculator ships eight archetype presets in DATA.commissioning.cx.rich.scenarios. Each preset is a full 14-parameter input vector.

ArchetypeIT LoadCoolingRedundancyRegionRack densityDelivery
Enterprise 2 MW2 000 kWairN+1us_virginiastandardtraditional
Colo 10 MW10 000 kWin-row2Nus_virginiamediumdesign-build
Hyperscale 50 MW50 000 kWDLC2N+1us_virginiaai_hpcEPC
Edge 500 kW500 kWairN+1us_texasstandardtraditional
Modular 5 MW5 000 kWRDHXN+1nordics_stockholmhighmodular_pod
Recommission 3 MW3 000 kWairN+1uk_londonstandardtraditional
AI Factory 100 MW100 000 kWDLC2N+1us_texasai_hpcEPC
Fast-track 10 MW10 000 kWin-rowN+1us_virginiamediumdesign-build

The AI Factory archetype (100 MW, DLC, 2N+1, ai_hpc density, EPC) applies the ×1.08 hyperscale surcharge (kW ≥ 50 000) and ×1.05 (kW ≥ 100 000), plus the highest redundancy IST hours (120 h) and scenario count (10 failure scenarios). It represents the most complex and costly Cx program the engine models.

08 References & standards

▶ Open the live Cx Calculator