Home / DC Solutions / Technical Manuals / CAPEX Calculator

Technical Manual · Capital Cost

CAPEX Calculator — Methodology & Formulas

Every input, multiplier chain, formula, constant, output, and data-source provenance behind the data-center CAPEX calculator. All math is executed by the deterministic engine RZEngine.models.capex.detailed() — constants live in the deep-frozen DATA.capexDetail block with a DATA.sources provenance sidecar. No back-solved constants, no random values.

Engine RZEngine v2.5.1 Estimate class AACE Class 4 Source T&T DCCI 2025 Inputs 17 core + 18 advanced Outputs 14-category breakdown + space + timeline
▶ Open the live calculator

01 Purpose & engineering basis

The CAPEX calculator produces a parametric, Class 4 (Study / Feasibility) budgetary estimate of data-center construction cost. It answers five pre-design questions: what is the total build cost, how does cost break down across engineering disciplines, what floor area and rack count does the design imply, what construction schedule should the project plan against, and what annual energy cost will the facility carry.

The governing cost basis is the Turner & Townsend Data Center Cost Index (DCCI) 2025, supplemented by the Cushman & Wakefield Data Center Cost Guide 2025 for city-level $/W anchors and JLL 2026 escalation indices. Category cost factors are calibrated so that the Americas baseline (locMult 1.00) at 4.65 $/W matches the sourced composite anchor. The model is AACE Class 4: project definition maturity 1–15%, typical accuracy −30% / +50%. It is an engineering pre-design screening tool, not a contractor bid.

The complete model body lives in rz-engine.js under RZEngine.models.capex.detailed() (approximately line 8399). The constant block is DATA.capexDetail (approximately line 5266). The provenance sidecar is DATA.sources['capexDetail']. The calculator page (capex-calculator.html) is a pure presentation layer that reads DOM inputs and calls the engine — no cost arithmetic lives on the page.

02 Inputs

Seventeen core inputs across five groups — IT infrastructure, cooling & density, fire/life-safety, power, and location. Eighteen additional advanced parameters unlock in Advanced mode. All defaults below reproduce the page's value="" / selected attributes exactly.

Field / DOM idSymbolUnitRange / defaultMeaning
itLoaditLoadKwkW100 – 100 000 · default 1 000Total IT load (IT power budget). Drives every per-kW cost line and rack count.
rackType (radio)rackTypeenumstandard* / medium / high / aiRack-density tier. Sets rackKw (6 / 12.5 / 25 / 75 kW/rack) for rack count and rackMult for building, electrical, and cooling cost lines.
coolingType (radio)coolingTypeenumair* / inrow / rdhx / liquidCooling architecture. Drives coolingMult, design PUE from pueByCoolingRack, WUE, and construction timeline cooling multiplier.
redundancy (radio)redundancyenumn / n1* / 2n / 2n1Uptime Institute redundancy tier. Drives redMult applied to electrical, UPS, generator, and commissioning lines. Also scales testing and space support ratios.
fuelHoursfuelHourshours8 – 168 · default 48Generator fuel-tank autonomy. Fuel multiplier = 1 + (fuelHours − 24) × 0.008. Only hours above 24 accrue additional cost.
buildingTypebuildingTypeenumwarehouse / modular / purpose* / highriseBuilding construction type. Applies buildingMult (0.70 / 0.85 / 1.00 / 1.40×) to the building and seismic lines. Also scales construction schedule civil phase.
seismicZoneseismicZoneenumzone0 / zone1 / zone2* / zone3 / zone4Seismic design zone. Multiplies the seismic line item by seismicMult (0.2 / 1.0 / 2.5 / 5.0 / 8.0×).
fireTypefireTypeenumfm200 / novec* / inergen / n2 / waterFire-suppression agent. Applies fireSuppressionMult (1.0 / 1.3 / 1.2 / 1.8 / 0.6×) to the fire-suppression line.
alarmTypealarmTypeenumconventional / addressable* / vesda / hybridFire-detection system. Applies fireAlarmMult (0.6 / 1.0 / 1.8 / 2.2×) to the fire-alarm line.
upsTypeupsTypeenumstandalone / modular* / distributed / rotaryUPS topology. Applies upsMult (0.9 / 1.0 / 1.2 / 1.5×) to the UPS line item.
genTypegenTypeenumdiesel* / gas / dualfuel / hvoGenerator fuel type. Applies genMult (1.0 / 1.15 / 1.3 / 1.2×) to the generator line.
locationFactorlocationenumamericas* / emea / middle_east / apacRegion group. Resolved via regionGroupDefaults to an internalRegion and a base locMult (1.00 / 1.15 / 0.90 / 0.85×). Overridden when a city is selected.
cityMarketcityenumnone* or any of 58 citiesOptional city-specific override. Sets locMult = city.perW / 4.65 and overrides effectiveRegion. City $/W values come from T&T DCCI 2025 + C&W 2025 anchor table.
deepSeaEnable (checkbox)deepSeabooloff*Enables deep-sea water cooling physics path. Adds a deepSeaCooling capex line from RZEngine.models.cooling.deepSea() and overrides PUE with the physics-derived value.
dsDepthdepthMm300 – 1 200 · default 900Seawater intake depth (active only when deep-sea is enabled). Drives pipeline head pressure and pump energy in the cooling physics model.
dsPipelinepipelineKmkm0.5 – 15 · default 3Subsea pipeline length. Scales pipeline capital cost in the deep-sea cooling capex model.
refrigerantTyperefrigerantenumauto* or R-410A / R-134a / R-513A / R-32 / R-454B / R-1234ze / R-1233zd / R-717 / R-290Chiller refrigerant selection. When not "auto", RZEngine.models.cooling.refrigerant() applies a capexMult premium to the cooling line item based on refrigerant equipment cost and safety-class installation requirements.
Advanced mode adds 18 further parameters: projection year (2025–2030 escalation), market condition, delivery method, contractor availability, design fee %, PM fee %, contingency %, FOM (substation/grid-connection/switchgear), power distribution type, transformer type, PDU type and cabling type (per-rack costs), floor type, site condition, security level, fiber entry count, green certification, and renewable generation option. Each maps to a multiplier or additive cost in DATA.capexDetail.

03 Calculation methodology

All arithmetic is in RZEngine.models.capex.detailed(inp). The model has five sequential stages: resolve multipliers → compute 14 base cost lines → add advanced per-rack and fiber costs → apply soft costs and contingency → derive PUE, space, and timeline. Function location: rz-engine.js approximately line 8399.

Stage 1 — Multiplier resolution

redMult = CD.redundancyMult[redundancy] { n:1.00, n1:1.25, 2n:1.85, 2n1:2.10 } coolMult = CD.coolingMult[coolingType] { air:1.00, inrow:1.20, rdhx:1.35, liquid:1.60 } rackMult = CD.rackMult[rackType] { standard:1.00, medium:1.10, high:1.30, ai:1.90 } buildMult = CD.buildingMult[buildingType] { warehouse:0.70, modular:0.85, purpose:1.00, highrise:1.40 } seismicMult = CD.seismicMult[seismicZone] { zone0:0.20, zone1:1.00, zone2:2.50, zone3:5.00, zone4:8.00 } fireSupMult = CD.fireSuppressionMult[fireType]{ fm200:1.00, novec:1.30, inergen:1.20, n2:1.80, water:0.60 } alarmMult = CD.fireAlarmMult[alarmType] { conventional:0.60, addressable:1.00, vesda:1.80, hybrid:2.20 } upsM = CD.upsMult[upsType] { standalone:0.90, modular:1.00, distributed:1.20, rotary:1.50 } genM = CD.genMult[genType] { diesel:1.00, gas:1.15, dualfuel:1.30, hvo:1.20 } locMult = regionGroupDefaults[location].multiplier (or city.perW / 4.65 if city selected) fuelMult = 1 + (fuelHours − 24) × 0.008 advGlobalMult = yearMult × marketMult × deliveryMult × contractorMult (1.0 in simple mode) Constants from DATA.capexDetail. locMult for city override: Dallas 14.30/4.65 = 3.075×; Tokyo 15.20/4.65 = 3.269×; Jakarta 11.21/4.65 = 2.411×.T&T DCCI 2025 · C&W 2025

Stage 2 — 14 base cost lines

costs[key] = CD.costFactors[key] × itLoadKw × multiplier × advGlobalMult Per-line multiplier breakdown (each × locMult as base): building × buildMult × rackMult × floorM × siteM seismic × seismicMult × buildMult electrical × redMult × rackMult × powerDistM × transformerM ups × redMult × rackMult × upsM generator × redMult × fuelMult × genM cooling × coolMult × rackMult fireSuppression× fireSupMult fireAlarm × alarmMult security × securityM commissioning × redMult testing × pr.testing × testingRedundancyMult[redundancy] permits × pr.permits bms, network × locMult only (no secondary multiplier) In the simple-mode loop: Object.keys(CD.costFactors).forEach(…) iterating 14 keys. pr = CD.permitRegionMult[effectiveRegion].rz-engine.js ~line 8481

Stage 3 — Advanced per-rack costs (advanced mode only)

racks = ceil( itLoadKw / CD.rackKw[rackType] ) pduTotal = racks × pduPerRack × advGlobalMult × locMult → added to costs.electrical cablingTotal = racks × cablingPerRack × advGlobalMult × locMult → added to costs.network fiberCost = CD.fiberEntryCost[fiberEntry] × advGlobalMult → added to costs.network pduPerRack: basic $800, intelligent $1 500, switched $2 500. cablingPerRack: copper $600, hybrid $1 200, fiber $2 000. fiberEntryCost: single $150 k, dual $350 k, multi $600 k.DATA.capexDetail · rz-engine.js ~line 8499

Stage 4 — Soft costs, contingency, and FOM

softCosts.design = total × (designPct / 100) (if designPct > 0) softCosts.pm = total × (pmPct / 100) (if pmPct > 0) greenPremium = total × (greenM − 1.0) (if greenM > 1.0) contingency = total × (contingencyPct / 100) simple mode: contingencyPct = 5% (CD.softCostDefaults.simpleContingencyPct) advanced mode: contingencyPct = user input (default 10%) fomTotal (if includeFOM): subCost = CD.substationCosts[substationType] × transformerLeadMult gridConnection = itLoadKw × 0.001 × CD.fom.gridConnectionPerMw ($500 k/MW) switchgear = itLoadKw × 0.001 × CD.fom.switchgearPerMw ($300 k/MW) fomTotal = (subCost + gridConnection + switchgear) × (1 + utilityRate/100) × yearMult renewableCost = CD.renewableCostPerMw[renewableOption] × (itLoadKw / 1000) × advGlobalMult total = sum(costs) + softTotal + greenPremium + contingency + fomTotal + renewableCost FOM = Facility Off-site MEP (substation, grid connection, switchgear). Substations: shared $1 M, dedicated 33 kV $4 M, dedicated 132 kV $7.5 M. Renewable: none $0, solar $1.2 M/MW, solar+BESS $2.5 M/MW.DATA.capexDetail · rz-engine.js ~line 8508

Stage 5 — PUE, energy cost, space model, and timeline

pue = CD.pueByCoolingRack[coolingType][rackType] wue = CD.wueByCooling[coolingType] { air:0.0, inrow:1.8, rdhx:0.3, liquid:0.1 } energyRate = CD.energyRateByLocation.other = $0.12/kWh (legacy quirk: location key never matches) annualEnergy = itLoadKw × pue × 8 760 × energyRate racks = ceil( itLoadKw / CD.rackKw[rackType] ) rackFootprint = CD.space.rackFootprintM2[rackType] × liquidRowFactor liquidRowFactor = 1.08 if coolingType in {liquid, rdhx, deepSea}, else 1.0 whiteSpaceM2 = ceil( racks × rackFootprint ) supportM2 = ceil( whiteSpaceM2 × CD.space.supportRatioByRedundancy[redundancy] ) adminM2 = ceil( 300 + racks × 0.15 ) grossM2 = whiteSpaceM2 + supportM2 + adminM2 Timeline (parallel-phase model — timelineDetailed()): design = max(2, ceil(base.design × lMult)) permit = max(2, ceil(base.permit × pMult)) civil = max(2, ceil(base.civil × bMult × lMult)) mep = max(2, ceil(base.mep × cMult × lMult)) commission = max(1, ceil(base.commission × cMult × max(0.7, lMult))) totalMonths = commStart + commission (phases partially overlap) lMult scales with IT load: ≤1 MW = 0.55, ≤2 MW = 0.65, ≤5 MW = 0.80, ≤10 MW = 1.00, ≤25 MW = 1.15, ≤50 MW = 1.30, >50 MW = 1.50. PUE source: Uptime Institute Global Survey 2026 cohorts.DATA.capexDetail · rz-engine.js ~line 8524
Refrigerant premium (optional): when a specific refrigerant is selected (or auto-mapped), RZEngine.models.cooling.refrigerant(refKey, opts) computes a capexMult based on GWP and safety class. If capexMult > 1, the premium = costs.cooling × (capexMult − 1) is added to costs.cooling and the total. Deep-sea cooling adds a physics-derived costs.deepSeaCooling from RZEngine.models.cooling.deepSea() and replaces the PUE lookup with the physics-derived value.

04 Constants & data sources

Every constant lives in DATA.capexDetail (rz-engine.js ~line 5266) with provenance registered in DATA.sources['capexDetail']. The 14 base cost factors in $/kW IT:

Category key$/kW ITPrimary multipliersNotes
building$800locMult · buildMult · rackMult · floorM · siteMCivil, structural shell, raised floor, fit-out.
seismic$100locMult · seismicMult · buildMultSeismic bracing, isolation pads. Zone 4 = 8× base.
electrical$1 200locMult · redMult · rackMult · powerDistM · transformerMSwitchgear, MV/LV distribution, busway, PDU (+ per-rack in adv. mode).
ups$600locMult · redMult · rackMult · upsMUPS systems and battery strings.
generator$400locMult · redMult · fuelMult · genMGensets and day-tank. fuelMult > 1 above 24 h autonomy.
cooling$700locMult · coolMult · rackMultChillers, cooling towers, CRAC/CRAH, CDU, pipe work.
fireSuppression$150locMult · fireSupMultAgent cylinders, distribution pipe, nozzles.
fireAlarm$80locMult · alarmMultDetector field devices and fire control panel.
bms$120locMultBMS / DCIM controllers, sensors, integration.
network$250locMult (+ per-rack cabling + fiber in adv. mode)Structured cabling, patch panels, ODF.
security$80locMult · securityMAccess control, CCTV, man-trap. Security-level mult 1.0 / 1.5 / 2.2×.
commissioning$120locMult · redMultIST, integrated systems testing, 3rd-party witness.
testing$90locMult · pr.testing · testingRedundancyMultFactory acceptance, site acceptance, compliance testing.
permits$60locMult · pr.permitsBuilding permits, environmental approvals, utility interconnect.
ParameterValues / rangeSourceasOf
City $/W anchor table (58 cities)$6.20 (Chennai) – $15.20/W (Tokyo)Turner & Townsend DCCI 2025 + Cushman & Wakefield DC Cost Guide 20252025
cityAnchorPerW$4.65/WAmericas composite baseline (locMult normalisation anchor)2025
Year escalation multipliers2025: 1.000 / 2026: 1.060 / 2027: 1.115 / 2028: 1.165 / 2029: 1.210 / 2030: 1.250JLL Data Center Outlook 20262026
PUE matrix (air / inrow / rdhx / liquid × density tier)1.15 – 1.80Uptime Institute Global Survey 2026 (cooling-type cohorts)2026
Space: rackFootprintM2standard 2.5 / medium 2.8 / high 3.2 / ai 4.2 m²/rackUptime/ASHRAE TC9.9 layout guidance; DLC rows +8% CDU clearance2026
Space: supportRatioByRedundancyN: 0.55 / N+1: 0.75 / 2N: 1.05 / 2N+1: 1.20Published DC space programs; white space typically 40–50% of gross2026
fuelMultPerHourOver240.008 per hourEngine lineage (capex-calculator inline model v2.3.0)2025
energyRateByLocation.other$0.12/kWhBlended rate for regions other than SEA/India/USA2025
AACE estimate classClass 4; accuracy −30% / +50%AACE International Recommended Practice 18R-972020

05 Outputs

The engine returns a single object R. The calculator page reads these fields to populate the KPI summary, cost breakdown chart, space program table, and timeline strip.

Output fieldFormula / sourceUnitInterpretation
R.totalsum(costs) + softCosts + contingency + FOM + renewableUSDTotal project capital estimate (Class 4, −30/+50%). Displayed as headline KPI.
R.perKwR.total / itLoadKw$/kW ITBuild cost intensity. Compare against AACE Class 4 band: ~$5–15 k/kW for Tier 2–4.
R.costsObject of 14 category costs (+ deepSeaCooling if enabled)USD ea.Line-item breakdown for the cost pie / waterfall chart.
R.contingencypre-contingency total × contingencyPct/100USDRisk reserve. 5% simple mode, user-set in advanced mode.
R.softCostsdesign fee + PM fee (% of hard costs)USD obj.Professional fees. Zero in simple mode.
R.fomTotalsubstation + grid-connection + switchgear costsUSDOff-site infrastructure. Zero unless FOM checkbox is enabled.
R.racksceil(itLoadKw / CD.rackKw[rackType])countRack count driving space program and per-rack advanced costs.
R.pueCD.pueByCoolingRack[coolingType][rackType]ratioDesign PUE used for annual energy estimate. Replaced by physics PUE in deep-sea mode.
R.wueCD.wueByCooling[coolingType]L/kWhWater usage effectiveness. 0 for air and liquid; 1.8 for in-row evaporative; 0.3 for RDHX.
R.annualEnergyitLoadKw × pue × 8 760 × energyRateUSD/yrAnnual electricity cost at the blended energy rate. Screening-grade opex proxy.
R.spaceracks, footprint, whiteSpaceM2, supportM2, grossM2, grossSqft, halls, kwPerM2variousSpace program output. grossM2 = white + support + admin. Screens land-take and floor loading.
R.timelinedesign, permit, procurement, civil, mep, commission, totalMonthsmonthsParallel-phase construction schedule. Phases overlap per fast-track logic.
R.deepSeaphysics model output (null if not enabled)objectDeep-sea cooling capex, PUE, pump power, flow rates.
R.refrigerantrefrigerant model output (null if auto resolves to none)objectRefrigerant identity, GWP, capexMult, and capexPremium applied to cooling line.

06 Worked example

1 000 kW IT, standard rack (6 kW/rack), air cooling, N+1 redundancy, 48 h fuel autonomy, purpose-built building, seismic zone 2 (moderate), Novec 1230 fire suppression, addressable fire alarm, modular UPS, diesel generator, Americas region (locMult 1.00), no city override, simple mode (no advanced options). All numbers below are the literal output of RZEngine.models.capex.detailed() run against rz-engine.js via Node.js vm.runInContext — engine run verified.

  1. Multiplier resolution: redMult (N+1) = 1.25 · coolMult (air) = 1.00 · rackMult (standard) = 1.00 · buildMult (purpose) = 1.00 · seismicMult (zone2) = 2.50 · fireSupMult (novec) = 1.30 · alarmMult (addressable) = 1.00 · upsM (modular) = 1.00 · genM (diesel) = 1.00 · locMult (americas) = 1.00 · fuelMult = 1 + (48−24) × 0.008 = 1.192 · advGlobalMult = 1.00
  2. Category costs (= costFactor × 1000 kW × multiplier):
    building: 800 × 1.00 × 1.00 × 1.00 = $800 000
    seismic: 100 × 1.00 × 2.50 × 1.00 = $250 000
    electrical: 1200 × 1.00 × 1.25 × 1.00 = $1 500 000
    ups: 600 × 1.00 × 1.25 × 1.00 = $750 000
    generator: 400 × 1.00 × 1.25 × 1.192 = $596 000
    cooling: 700 × 1.00 × 1.00 = $700 000
    fireSuppression: 150 × 1.00 × 1.30 = $195 000
    fireAlarm: 80 × 1.00 × 1.00 = $80 000
    bms: 120 × 1.00 = $120 000
    network: 250 × 1.00 = $250 000
    security: 80 × 1.00 = $80 000
    commissioning: 120 × 1.00 × 1.25 = $150 000
    testing: 90 × 1.00 × 1.00 × 1.00 = $90 000
    permits: 60 × 1.00 × 1.00 = $60 000
  3. Pre-contingency sum: $5 621 000
  4. Contingency (5% simple mode): 5 621 000 × 0.05 = $281 050
  5. Total CAPEX: 5 621 000 + 281 050 = $5 902 050
  6. Cost per kW IT: 5 902 050 / 1 000 = $5 902/kW
  7. Rack count: ceil(1000 / 6) = 167 racks
  8. Design PUE (air, standard): pueByCoolingRack.air.standard = 1.80 · WUE = 0.0 L/kWh
  9. Annual energy cost: 1000 × 1.80 × 8760 × $0.12 = $1 892 160/yr
  10. Space program: whiteSpaceM2 = ceil(167 × 2.5) = 418 m² · supportM2 = ceil(418 × 0.75) = 314 m² · adminM2 = ceil(300 + 167×0.15) = 326 m² · grossM2 = 1 058 m² (11 388 ft²) · kwPerM2 = 2.4 kW/m² · 1 data hall suggested
  11. Construction timeline (N+1, purpose-built, air, USA, 1 MW IT → lMult = 0.55): design 3 mo · permit 3 mo · procurement 2 mo · civil 6 mo · MEP 5 mo · commissioning 3 mo · total 15 months
Verification method: all numbers above are the literal return value of RZEngine.models.capex.detailed({itLoadKw:1000, rackType:'standard', coolingType:'air', redundancy:'n1', fuelHours:48, buildingType:'purpose', seismicZone:'zone2', fireType:'novec', alarmType:'addressable', upsType:'modular', genType:'diesel', location:'americas'}) executed via node -e with vm.runInContext against the live rz-engine.js file. Not hand-computed — engine run verified.

07 References & standards

08 Assumptions & limitations

The model is a Class 4 parametric estimate (AACE 18R-97). Its accuracy is inherently −30% / +50% with 1–15% project definition completeness. Specific limitations and assumptions:

Cost basis: category $/kW factors are anchored to the T&T DCCI 2025 composite benchmark, calibrated so that Americas locMult 1.00 × all-defaults ≈ 4.65 $/W. They represent a market-median build; owner-specific procurement, site conditions, and design choices can shift individual lines by ±50%+.

Energy rate: the annual energy cost uses a fixed $0.12/kWh fallback for all regions except SEA ($0.08), India ($0.07), and USA ($0.10). The USA condition is a legacy key-mismatch quirk documented in the engine JSDoc — the location input never equals the string 'usa' (it maps to 'americas'), so the $0.12 fallback applies globally in simple mode. This is a documented non-defect preserved for calculation continuity; future reconciliation requires a deliberate data-model change.

Space model: rack footprint and support-to-white-space ratios are planning rules of thumb from Uptime/ASHRAE TC9.9 layout guidance. They produce a reasonable gross building footprint for programming purposes but are not a substitute for a detailed space plan or architectural layout study.

Timeline: the parallel-phase schedule model uses base durations calibrated from industry benchmarks (T&T + JLL project delivery data). Critical long-lead equipment (transformers 60–120 weeks, switchgear 50–80 weeks in the 2024–26 market) can be the dominant schedule driver and is not fully reflected in the model's phase durations — the engine's DATA.construction.longLeadWeeks table documents these but they are advisory, not input to the timeline formula.

Scope exclusions: the estimate does not include land acquisition, IT equipment, furniture and fixtures, moving/relocation, tenant improvement works above the base shell, or ongoing operating costs beyond the energy screening estimate. FOM (substation, grid connection, switchgear) is modelled only when the Advanced mode FOM checkbox is enabled.

This calculator and manual are an engineering education and pre-design screening tool. They do not constitute a professional engineering estimate, a quantity surveyor's report, or investment or procurement advice. Final capital budgets must be validated by a qualified cost engineer or quantity surveyor against site-specific project definition documents.

▶ Open the live CAPEX Calculator