Skip to main content

Equipment sizingCostingEnergy mass balanceStorage

Molten-salt two-tank thermal storage

Sizes a two-tank solar-salt heat store from its usable temperature swing: salt inventory, tank geometry, standing loss per day, freeze protection and the levelised cost of the heat it delivers.

Levelised cost

Levelised cost of stored heat

Annualised CAPEX, fixed O&M and charging energy, divided by the heat actually delivered

EUR/MWh_th

Storage service cost

The levelised cost with free charging heat: what a directly solar-charged store would cost

EUR/MWh_th

Delivered price of the electricity that charges the store. 38.94 EUR/MWh is IRENA's 2023 global utility-scale PV LCOE (44 USD/MWh). Set it low to approach a directly solar-charged store, whose floor is the storage service cost output.

EUR/MWh

Real after-tax WACC used for the capital recovery factor. IRENA 2023 uses 5 % for the OECD and China, 7.5 % elsewhere.

Cost recovery period. NREL ATB uses 30 years for all technologies; PNNL gives a 35-year calendar life for conventional thermal storage.

years

Capital recovery factor

Annualisation factor at the chosen rate and lifetime

1/year

Total annual cost

Annualised CAPEX, fixed O&M and charging energy

EUR/year

Annualised CAPEX

Installed cost multiplied by the capital recovery factor

EUR/year

Fixed O&M

2 % of direct CAPEX per year

EUR/year
Charging energy price dominates the levelised cost

Log in to view this sensitivity chart.

Sizing

Thermal power the store delivers to the downstream user while discharging. With the storage duration it fixes the usable thermal capacity.

Hours of discharge at rated thermal power. 10 h is the SAM molten-salt power-tower baseline (NREL Turchi et al., Table 3).

Usable thermal capacity

Rated discharge power multiplied by storage duration

MWh_th

Total solar-salt inventory

Thermodynamic mass plus a 14 % margin for heel, sumps and unusable volume

t

Thermodynamically useful salt mass

The mass that actually swings between hot and cold temperature

t

Salt volume

Inventory at the hot-tank density, 1 710 kg/m3

m3

Volume of each tank

Salt volume plus 8.4 % freeboard; both tanks carry the full inventory

m3

Total tankage volume

Two tanks, hot and cold

m3

Tank diameter

API 650 field-erected cylinder at H/D = 0.724

m

Tank height

Diameter multiplied by the 0.724 height-to-diameter ratio

m

Heat-loss surface per tank

Shell, roof and floor

m2

Volumetric energy density of the salt

Compared with IRENA's 70-200 kWh/m3 for molten salts

kWh/m3

Volumetric energy density of the tankage

Capacity over the two tanks' combined volume

kWh/m3
Scale effect: standing loss falls, specific cost does not

Log in to view this sensitivity chart.

Temperatures and losses

Salt temperature in the hot tank. Capped at 580 C: solar salt decomposes above 585 C. Above 600 C the hot tank needs an IN625-class alloy (out of scope here).

Salt temperature returning to the cold tank. Kept above the 246.3 C measured liquidus of solar salt; 290 C is the SAM baseline.

Usable temperature swing

Hot minus cold tank temperature: the parameter that sets both mass and cost

K

Freeze margin on the cold tank

Cold tank temperature above the measured liquidus of solar salt

K

Standing heat loss

Both tanks held at temperature, 24 hours a day

MWh_th/day

Standing loss per day

The efficiency indicator of a heat store: it falls as the cube root of size

%/day

Standing loss per year

The daily loss over 365 days

MWh_th/year

Hot tank cool-down rate

How fast a full hot tank loses temperature when nothing is drawn

K/day

Cycle thermal efficiency

Heat out over heat in, driven by the standing loss and the number of cycles

ratio

Charge-to-discharge penalty

Inverse of the cycle thermal efficiency

ratio

Salt thickness equal to the tank envelope

How deep stagnant salt would have to be to insulate as well as the tank wall

m
Cold tank temperature: the 1/deltaT cost law

Log in to view this sensitivity chart.

Duty and charging

How many times the full capacity is turned over in a year. ANL gives 200-700 for two-tank molten-salt TES, with reference cases at 120-230 days per year.

Share of the year the store is offline (outage, seasonal shutdown). Only then do the electric heaters pay for the standing loss: in mature operation Solar Two's tank heaters drew ~0 kWh/day because the charging source made the loss up.

Equivalent full-power discharge hours

Storage duration multiplied by cycles per year

h/year

Capacity factor

Discharge hours as a share of 8 760

%

Heat charged per year

Capacity multiplied by the number of full cycles

MWh_th/year

Heat delivered per year

Charged heat net of the standing loss

MWh_th/year

Electricity drawn per year

Charging power plus freeze-protection trace heating

MWh/year

Specific electricity consumption

Electricity in per MWh of heat delivered

MWh/MWh_th

Freeze-protection installed power

Immersion heaters that keep the salt above its 238 C freezing point

kWe

Trace heating as a share of output

Guardrail: Solar Tres expected under 1.5 % of gross production

%
Duty: how many turns pay for the tanks

Log in to view this sensitivity chart.

Capital cost build-up

Delivered price of 60-40 NaNO3-KNO3 solar salt. 708 EUR/t is NREL/Mehos 800 USD/t at the ECB 2025 average rate; PNNL quotes 950-1000 USD/t (841-885 EUR/t).

EUR/t

Installed storage island cost

Salt inventory plus tankage, foundations, piping, insulation, I&C and heaters

EUR

Salt media cost

Inventory multiplied by the delivered salt price

EUR

Tankage and balance-of-plant cost

Tanks, foundations, piping, insulation, I&C and freeze protection

EUR

Storage CAPEX per kWh of thermal capacity

Salt inventory plus tankage, divided by usable capacity; varies as 1/deltaT

EUR/kWh_th

Storage CAPEX per kWh, in USD

For direct comparison with the published NREL, PNNL and IRENA figures

USD/kWh_th

Position in the published cost band

0 = at the 20 USD/kWh_th floor, 1 = at the 30 USD/kWh_th ceiling; outside [0,1] = outside the band

ratio

Salt cost at the PNNL upper price

The same inventory at 1 000 USD/t instead of 800

EUR

CAPEX if the hot tank were re-rated above 600 C

IN625-class alloy on the hot tank only

EUR
Salt price exposure

Log in to view this sensitivity chart.

About

Calculator context

What it does. Sizes a two-tank sensible heat store in solar salt (60-40 wt% NaNO3-KNO3) from the duty you give it - rated discharge thermal power, storage duration, hot and cold tank temperatures - and prices the storage island that results. The scope is the bare store: salt inventory, two API 650 field-erected tanks with foundations, piping, insulation, instrumentation and freeze protection. There is no solar receiver, no power block and no steam generator in here. The useful output is HEAT, so no electrical round-trip efficiency appears anywhere: the efficiency of this asset is read as a standing heat loss per day.

Nominal case (100 MW_th for 10 h, 574/290 C, 200 cycles/year, salt at 708 EUR/t, charging energy at 38.94 EUR/MWh, 5 % real over 30 years). Usable capacity 1 000 MWh_th. Salt inventory 9 323 t, occupying 5 452 m3 at the hot density; each of the two tanks is 5 910 m3, 21.8 m across and 15.8 m high. Standing loss 12.7 MWh_th/day, or 1.27 %/day, which over a year is 2.3 % of the charged energy at this duty - a cycle thermal efficiency of 97.7 %. Freeze protection is 1 140 kWe of installed immersion heaters. CAPEX 21.30 MEUR, that is 21.30 EUR/kWh_th or 24.07 USD/kWh_th. Levelised cost of stored heat 49.58 EUR/MWh_th, of which 9.27 is the storage service (annualised CAPEX plus O&M) and 40.31 is the charging energy.

Why storage duration is not the sizing parameter here. Both cost terms are linear in inventory - the salt follows mass, the tankage follows volume - so the specific CAPEX is flat with size and varies only as 1/deltaT: 21.30 EUR/kWh_th at 284 K of swing, 28.80 at 210 K. What does change with size is the standing loss, which follows the surface-to-volume ratio and therefore the cube root of capacity: 2.67 %/day at 107 MWh_th, 1.27 at 1 000, 0.91 at 2 700. Between the two ends of the power slider the levelised cost moves by 1.7 %. That is the model's claim, and it is what separates a heat store from a battery, where duration drives the cost.

What was calibrated and what was tested. Two parameters are fits, each on a single published anchor, and they are declared as such: the 1.14 inventory margin and the 1 405 USD/m3 tankage rate, both from NREL Table 6 at 2 700 MWh_th and 284 K. Reproducing 25 172 t against 25 100 t published, and 24.07 against 24.00 USD/kWh_th, is therefore the fit closing on itself - an identity, not a validation. Three checks are genuinely independent of that calibration. First, a second NREL cost point: at 180 K of swing the model returns 37.97 USD/kWh_th against 35 published, +8.5 %, and the miss is published here rather than hidden. Second, IRENA's 70-200 kWh/m3 volumetric density band for molten salts, which nothing in the sizing touches: the model gives 183 kWh/m3 of salt and 85 kWh/m3 of tankage. Third, Solar Two's heat-trace guardrail of 1.5 % of gross output: the worst freeze-protection load anywhere inside the declared input ranges is 1.11 % of delivered heat. The tank U-value of 0.35 W/m2-K is itself back-calculated from Solar Two's measured hot and cold tank losses, so the fact that the model cools a full hot tank at 4.5 K/day where the plant measured 4 C/day is a consistency check, not a fourth independent test.

Domain and guards. The declared input box was swept at all 1 024 of its corners: the five headline outputs stay inside their grounded bounds everywhere, the lowest cycle efficiency reached is 93.1 % - so the 5 % efficiency floor never binds inside the domain - and the freeze-protection guardrail holds at every corner. The hot tank is capped at 580 C, below the 585 C decomposition limit of nitrate salts; the cold tank floor of 250 C sits above the 246.3 C liquidus DLR measured on commercial SS60. A design below 50 K of usable swing, or a duty so thin that standing losses would swallow the throughput, is refused rather than priced.

Limitations, stated plainly. No heat-exchanger pinch and no steam generation - the store hands over heat at the hot tank and the downstream calculator owns the pinch. No salt degradation and no corrosion allowance. Tanks are assumed 347SS hot and A516-70 carbon-steel cold, as in the reference case; above 600 C an IN625-class hot tank costs 2.44x more, and that regime is outside this calculator, quoted only as a what-if output. The model has no economy of scale on tankage: a flat rate per cubic metre is what the source supports, and inventing a size exponent would be a fit with nothing behind it. The cost basis mixes 2017-2022 USD sources converted at the ECB 2025 average rate with no CEPCI escalation.

Model

138 variables — inputs, calculations and outputs, with their dependencies.

138 variables shown of 138
VariableValueUnitDepends on
100MW_th
10h
574C
290C
200cycles/year
708EUR/t
38.94EUR/MWh
0.05ratio
30years
0.05ratio
VariableFormulaUnitDepends on
if((<=)+(<=)+(<=)+(>=)+(-<=)+(<=)+(<)+(<)+(<)+(<=)+(<)+(>)>,,)bool
-K
/max(,)ratio
**(-)/kW
**(-)/kW
(+)/ratio
/max(,)ratio
*MWh/year
/max(,)MWh/year
if(<=,,)flag
(+)/kWh/m3
/max(,)ratio
/max(,)EUR/m3
/max(*,)EUR/kWh_th
/max(*,)EUR/kWh_th
/max(,)ratio
min(,)USD/kWh_th
max(,)USD/kWh_th
/max(,)EUR/t
/max(,)ratio
/max(,)EUR/t
(*(+)^)/max((+)^-,)1/year
/max(,)ratio
max(-,)years
/max(,)ratio
/max(,)EUR/MWh
/max(,)ratio
*EUR/year
VariableFormulaUnitDepends on
*MWh_th
-K
-K
*/max(*,)/t
*t
*/max(,)m3
*m3
*m3
(*/max(*,))^(/)m
*m
**+*(^)/m2
(+)*/MWh_th/day
*/max(,)%/day
**/max(**,)K/day
*MWh_th/year
*h/year
*MWh_th/year
if(-<=,,clamp(-/max(,),,))ratio
/max(,)ratio
*MWh_th/year
*kWe
+MWh/year
/max(,)MWh/MWh_th
*/max(,)%
*/max(,)kWh/m3
*/max(,)kWh/m3
/max(,)m
*EUR
*EUR
+EUR
+EUR/kWh_th
*USD/kWh_th
(-)/max(-,)ratio
*EUR
+*(*+(-))EUR
if(<,/max(,),(*(+)^)/max((+)^-,))1/year
*EUR/year
**EUR/year
++EUR/year
(+)/max(,)EUR/MWh_th
/max(,)EUR/MWh_th
*/%

Assumptions

58 assumptions used in the calculations

  • Prevents division by zero in the guarded denominators.

    Market range Not applicable (numerical parameter).

    0.000001
    Numerical stability constant.
  • The DSL forbids inline numeric literals, so 1 is named.

    Market range Exact.

    1
    Unit literal.
  • Named zero for the guard expressions and the boolean flags.

    Market range Exact.

    0
    Unit literal.
  • Used for the two tank end closures and for band midpoints.

    Market range Exact.

    2
    Unit literal.
  • Cube-root exponent when a tank diameter is recovered from a volume.

    Market range Exact.

    3
    Unit literal.
  • Cylinder volume V = pi D2 H / 4, inverted for the diameter.

    Market range Exact.

    4
    Unit literal.
  • Fraction-to-percent conversion for the reported percentages.

    Market range Exact.

    100
    Unit literal.
  • Cylindrical tank geometry.

    Market range Exact.

    3.141593
    Mathematical constant.
  • Capacity-factor annualisation.

    Market range 8760 (non-leap); 8784 (leap).

    8760h/year
    Calendar-year hours convention.
  • The standing loss is integrated over a full day.

    Market range Exact.

    24h/day
    Time conversion.
  • Annualises the daily standing loss.

    Market range 365 (non-leap); 366 (leap).

    365day/year
    Time conversion.
  • Converts a kW loss into kJ per day for the cool-down rate.

    Market range Exact.

    3600s/h
    Time conversion.
  • Specific costs are quoted per kWh_th, capacities in MWh_th.

    Market range Exact.

    1000kWh/MWh
    Unit conversion.
  • The salt inventory is reported in tonnes, the physics is in kilograms.

    Market range Exact.

    1000kg/t
    Unit conversion.
  • The U-value is in W/m2-K, the losses are reported in kW.

    Market range Exact.

    1000W/kW
    Unit conversion.
  • Salt cp is in kJ/kg-K, capacity in MWh_th.

    Market range Exact.

    3600000kJ/MWh
    Unit conversion.
  • The O&M rate is declared in percent per year and consumed as a fraction.

    Market range Exact.

    0.01
    Unit conversion.
  • Sets the sensible heat stored per kilogram and per kelvin of swing.

    1.55kJ/kg-K
    Published property table for 60-40 NaNO3-KNO3.
  • Converts the inventory into the volume the tanks must hold.

    Market range 1 710-1 905 kg/m3 between hot and cold conditions; the hot value is the sizing case.

    1710kg/m3
    Published property table.
  • Hard physical guard: below it the salt freezes in the cold tank and the plant is lost.

    238C
    Published melting point.
  • The conservative operating floor the reported freeze margin is taken against.

    246.3C
    Laboratory measurement on 60-40 wt% NaNO3-KNO3.
  • Hard physical guard: above it the nitrates decompose.

    585C
    Published stability limit.
  • Shows the store is envelope-limited rather than salt-limited.

    0.5501W/m-K
    Laboratory measurement.
  • Reference point the chosen swing is compared against.

    574C
    SAM baseline case.
  • Reference point the chosen swing is compared against.

    290C
    SAM baseline case.
  • Covers the tank heel, sumps and the volume that cannot be drawn down.

    1.14
    Back-calculated from a single published inventory.
  • Vapour space and thermal expansion allowance above the salt level.

    1.084
    Back-calculated from published tank geometry and salt mass.
  • Fixes the surface-to-volume ratio, and therefore the standing loss, once the volume is known.

    0.724
    Published tank dimensions.
  • Sets the standing loss, which is the efficiency indicator of a heat store.

    0.35W/m2-K
    Back-calculated from measured tank heat losses.
  • Sets the driving temperature difference of the standing loss.

    Market range Site ambient varies 0-40 C; the loss moves by about 4 % over that span, since the driving difference is 500-550 K.

    20C
    AI
  • The tankage cost and the standing loss are both charged on two tanks.

    Market range Exactly 2 by definition; single-tank thermocline designs are a different technology.

    2
    Definition of the two-tank concept.
  • Charges the alloy multiplier of the 600 C re-rate on the hot tank only.

    0.5
    Geometric split of the tankage cost.
  • Reference price the user's own salt price is compared against.

    800USD/t
    AI
  • States the salt-price exposure of the project at the top of the published range.

    1000USD/t
    Published cost assessment.
  • Carries tanks, foundations, piping, insulation, instrumentation and freeze protection, charged on tankage volume.

    Market range 1 100-1 700 USD/m3 implied by the 20-30 USD/kWh_th published band at commercial swings.

    1405USD/m3
    Back-calculated residual of a published TES system cost.
  • The anchor the tankage rate is calibrated on and the benchmark the result is read against.

    24USD/kWh_th
    Published system cost.
  • Lower bound of the IRENA published band.

    25USD/kWh_th
    Published technology outlook.
  • Upper bound of the published cost band.

    30USD/kWh_th
    Published technology outlook.
  • Lower bound of the published cost band.

    20USD/kWh_th
    Published cost assessment.
  • Upper bound of the PNNL published band.

    25USD/kWh_th
    Published cost assessment.
  • Fixed O&M of the storage island.

    2%/year
    Published cost assessment.
  • Converts the published USD cost basis into the euro basis of the calculator.

    1.12998USD/EUR
    Official reference rate.
  • Prices the hot tank of a next-generation store, outside this calculator's 580 C cap.

    2.44
    Published alloy cost analysis.
  • Benchmark the modelled cycle efficiency is read against.

    Market range Above 98 % daily for well-insulated tanks.

    0.98
    Measured plant performance.
  • Upper benchmark of the efficiency band.

    0.99
    Published expectation for a commercial plant.
  • Sizes the connected electrical load that keeps the salt above its freezing point.

    1.14kWe/MWh_th
    Back-calculated from a published auxiliary load list.
  • Guardrail the modelled trace-heating energy is checked against.

    Market range Below 1.5 % of gross output.

    1.5%
    Published parasitic-load projection.
  • Lower bound of the published volumetric density band.

    70kWh/m3
    Published technology outlook.
  • Upper bound of the published volumetric density band.

    200kWh/m3
    Published technology outlook.
  • Converts charged heat into the electricity that must be bought.

    0.99
    Engineering assumption on a resistive charging path.
  • Reference horizon the chosen lifetime is compared against.

    30years
    Published financial convention.
  • Says how many years of asset life the chosen amortisation leaves unused.

    35years
    Published performance parameter.
  • Reference financing the chosen discount rate is compared against.

    Market range 5 % OECD and China, 7.5 % elsewhere.

    0.05
    Published financial assumption.
  • Reference duty the chosen cycle count is compared against.

    200cycles/year
    Published cost model.
  • Reference charging price the user's own price is compared against.

    44USD/MWh
    Published cost benchmark.
  • Keeps the levelised cost finite if the calculator is called outside its declared input ranges.

    Market range Not applicable (guard).

    0.05
    Numerical guard, not a physical parameter.
  • Refuses a duty so low that the store would lose more heat than it delivers, which would make the levelised cost meaningless.

    Market range Not applicable (guard).

    12
    Corner sweep of the standing-loss law.
  • Refuses a degenerate design before the cost model is asked to price it.

    Market range Commercial swings are 180-310 K.

    50K
    Engineering screening floor.

Sources

8 external sources