Carbonate Chemistry Calculator

Solve the seawater carbonate system: pH, pCO2, bicarbonate, carbonate and calcite saturation from temperature, salinity and two measured parameters.

🧪 Carbonate Chemistry Calculator
Temperature
°C
040
Salinity
psu
545
Total dissolved inorganic carbon (DIC)
µmol/kg
10004000
Total alkalinity (TA)
µmol/kg
10004000
Temperature
°C
040
Salinity
psu
545
pH (total scale)
pH
79
Total alkalinity (TA)
µmol/kg
10004000
pH (total scale)
—
pCO2
—
[H+]
—
CO2*
—
Bicarbonate HCO3-
—
Carbonate CO3 2-
—
Calcite saturation (Ω)
—
K0 (Weiss)
—
pK1 / pK2
—
Share of DIC
—

Bjerrum plot at your temperature and salinity: the dashed line marks your pH, and the dots read off the fraction of DIC in each form.

DIC
—
pCO2
—
CO2*
—
Bicarbonate HCO3-
—
Carbonate CO3 2-
—
Calcite saturation (Ω)
—
Borate B(OH)4-
—
K0 (Weiss)
—
pK1 / pK2
—

Bjerrum plot at your temperature and salinity: the dashed line marks your pH, and the dots read off the fraction of DIC in each form.

🧪 What is Carbonate Chemistry?

Seawater carbonate chemistry describes how carbon dioxide dissolved in the ocean is split among four linked forms: dissolved CO2 gas, carbonic acid, bicarbonate (HCO3-) and carbonate (CO3 2-). Dissolved CO2 and carbonic acid cannot be told apart by routine chemistry, so they are lumped together as CO2*. The balance among the three measurable forms is set by two equilibrium constants, K1 and K2, which depend on temperature and salinity, and by the hydrogen ion concentration, which is what pH measures. In ordinary surface seawater about 89 percent of the carbon is bicarbonate, about 11 percent is carbonate, and only about half a percent is CO2*.

The system has four measurable quantities: total dissolved inorganic carbon (DIC), total alkalinity (TA), pH and the CO2 pressure (pCO2). Knowing any two, plus temperature and salinity, fixes the other two and all the species. Oceanographers use this to turn shipboard DIC and alkalinity measurements into pH and pCO2, to check sensor data, to compute the calcite saturation state that governs whether shells and carbonate sediments dissolve, and to follow how absorbing fossil CO2 acidifies the ocean. This page offers the two most common pairs: DIC with alkalinity, and pH with alkalinity.

Several points are easy to get wrong. Alkalinity is not pH: it is a conserved quantity, the excess of proton acceptors over proton donors, and it does not change when CO2 simply dissolves. Borate, though a minor ion, supplies about 4 percent of alkalinity, so ignoring it gives badly wrong pH. The pCO2 reported here is really CO2* divided by the solubility K0, a fugacity-like quantity about 0.3 percent below the partial pressure. And the constants used are for one atmosphere of pressure, so deep-water results are only indicative.

A chart accompanies each mode, a Bjerrum plot, because the speciation changes shape with pH: CO2* dominates below pH 5.8, bicarbonate dominates between pH 5.8 and 9, and carbonate takes over above pH 9. Seawater sits in the bicarbonate region, near the edge where carbonate begins to fall as pH drops. For the related question of how much extra CO2 the ocean can take up, see the ocean carbon uptake calculator.

📐 Formula

TA  =  [HCO3-] + 2[CO32-] + [B(OH)4-]
Speciation: with D = [H+]² + K1[H+] + K1K2, then [CO2*] = DIC [H+]²/D, [HCO3-] = DIC K1[H+]/D and [CO32-] = DIC K1K2/D.
Borate: [B(OH)4-] = BT KB / (KB + [H+]), with total boron BT = 0.0004157 × S/35 mol/kg (boron to salinity ratio of Uppström, 1974).
Mode 1 (DIC and TA): bisection on pH between 2 and 13 until the bracket is narrower than 10-12 pH units, using that alkalinity rises monotonically with pH. pCO2 = [CO2*] / K0.
Mode 2 (pH and TA): DIC = (TA − [B(OH)4-]) × D / (K1[H+] + 2K1K2).
K0 (Weiss, 1974), mol/(kg atm), T in kelvin: ln K0 = 93.4517 (100/T) − 60.2409 + 23.3585 ln(T/100) + S [0.023517 − 0.023656 (T/100) + 0.0047036 (T/100)²]
K1 and K2 (Lueker et al., 2000, total scale): pK1 = 3633.86/T − 61.2172 + 9.67770 ln T − 0.011555 S + 0.0001152 S²; pK2 = 471.78/T + 25.9290 − 3.16967 ln T − 0.01781 S + 0.0001122 S²
KB (Dickson, 1990, total scale): ln KB = (−8966.90 − 2890.53 √S − 77.942 S + 1.728 S1.5 − 0.0996 S²)/T + 148.0248 + 137.1942 √S + 1.62142 S + (−24.4344 − 25.085 √S − 0.2474 S) ln T + 0.053105 √S T
Calcite saturation (Mucci, 1983): Ω = [Ca2+][CO32-] / Ksp with [Ca2+] = 0.01028 × S/35 mol/kg and log10 Ksp = −171.9065 − 0.077993 T + 2839.319/T + 71.595 log10 T + (−0.77712 + 0.0028426 T + 178.34/T) √S − 0.07711 S + 0.0041249 S1.5
Neglected: pressure effects, OH-, H+, phosphate, silicate, sulfate, fluoride and organic alkalinity. Ignoring OH- (roughly 6 µmol/kg at these conditions) shifts pH by about 0.01 and pCO2 by about 9 µatm.
Example: at 25 °C and S = 35, pK1 = 5.847 and pK2 = 8.966. DIC 2000 and TA 2300 µmol/kg give pH 8.056.

📖 How to Use This Calculator

Steps

1
Choose a mode. Pick DIC and alkalinity if you measured total dissolved inorganic carbon and total alkalinity, or pH and alkalinity if you measured the pH on the total scale and total alkalinity.
2
Enter temperature, salinity and the two parameters. Type the temperature in degrees Celsius, the salinity in practical salinity units, and the two carbonate parameters in µmol/kg. For the second mode enter the pH on the total scale instead of DIC.
3
Read the speciation and the chart. The results give pH or DIC, pCO2, CO2*, bicarbonate, carbonate and the calcite saturation state. The Bjerrum plot shows the species fractions against pH with your pH marked by a dashed line and a dot on each curve.

💡 Example Calculations

Example 1 — Warm Tropical Surface Water

25 °C, S = 35, DIC = 2000 µmol/kg, TA = 2300 µmol/kg

1
Constants: pK1 = 5.847, pK2 = 8.966, K0 = 0.028392 mol/(kg atm), Ksp = 4.272×10-7, [Ca2+] = 0.01028 mol/kg
2
Bisection on pH until carbonate plus borate alkalinity equals 2300: pH = 8.056, [H+] = 8.78 nmol/kg, with borate carrying 92.9 µmol/kg
3
Species: CO2* = 10.94, HCO3- = 1771.0, CO3 2- = 218.1 µmol/kg. pCO2 = 10.94 / 0.028392 = 385.3 µatm, and Ω = 0.01028 × 218.1×10-6 / 4.272×10-7 = 5.25
pH = 8.056, pCO2 = 385.3 µatm, Ωcalcite = 5.25
Try this example →

Example 2 — Cool Temperate Surface Water

10 °C, S = 34.5, DIC = 2150 µmol/kg, TA = 2320 µmol/kg

1
Constants: pK1 = 5.995, pK2 = 9.218, K0 = 0.044006 (cold water holds more CO2), Ksp = 4.243×10-7, [Ca2+] = 0.010133 mol/kg
2
Solving for pH gives 8.023, so [H+] = 9.47 nmol/kg and borate alkalinity is 60.9 µmol/kg
3
CO2* = 18.76, HCO3- = 2003.3, CO3 2- = 127.9 µmol/kg. pCO2 = 426.4 µatm and Ω = 3.05
pH = 8.023, pCO2 = 426.4 µatm, Ωcalcite = 3.05
Try this example →

Example 3 — Cold, Carbon-Rich Water

2 °C, S = 34.8, DIC = 2300 µmol/kg, TA = 2350 µmol/kg (surface pressure)

1
Constants: pK1 = 6.090, pK2 = 9.355, K0 = 0.058293, Ksp = 4.270×10-7, [Ca2+] = 0.010221 mol/kg
2
The DIC to TA gap is small, so pH is low: 7.801, [H+] = 15.82 nmol/kg, borate 31.4 µmol/kg
3
CO2* = 42.71, HCO3- = 2195.9, CO3 2- = 61.3 µmol/kg. pCO2 = 732.8 µatm and Ω = 1.47. In situ, pressure would lower Ω further.
pH = 7.801, pCO2 = 732.8 µatm, Ωcalcite = 1.47
Try this example →

Example 4 — From a Measured pH

25 °C, S = 35, pH = 8.05 (total scale), TA = 2300 µmol/kg

1
[H+] = 10-8.05. Borate alkalinity = BT KB / (KB + [H+]) = 91.8 µmol/kg
2
Carbonate alkalinity = 2300 − 91.8 = 2208.2 µmol/kg, which gives DIC = 2003.7 µmol/kg
3
CO2* = 11.14, HCO3- = 1776.9, CO3 2- = 215.6 µmol/kg. pCO2 = 392.3 µatm and Ω = 5.19
DIC = 2003.7 µmol/kg, pCO2 = 392.3 µatm, Ωcalcite = 5.19
Try this example →

Example 5 — A Higher pH, Lower CO2 Ocean

25 °C, S = 35, pH = 8.18 (total scale), TA = 2300 µmol/kg

1
At the higher pH more of the alkalinity is borate: 115.0 µmol/kg, leaving 2185.0 µmol/kg of carbonate alkalinity
2
DIC = 1923.2 µmol/kg, about 80 µmol/kg lower than Example 4
3
CO2* = 7.65, HCO3- = 1646.1, CO3 2- = 269.5 µmol/kg. pCO2 falls to 269.4 µatm and Ω rises to 6.48. A 0.13 pH step changes carbonate by about 25 percent.
DIC = 1923.2 µmol/kg, pCO2 = 269.4 µatm, Ωcalcite = 6.48
Try this example →

❓ Frequently Asked Questions

How do you calculate pH from DIC and alkalinity?+
Write total alkalinity as bicarbonate plus twice carbonate plus borate, express each term through DIC and the hydrogen ion concentration using K1, K2 and KB, then solve for [H+]. This calculator uses bisection, so no closed form is needed. At 25 C, S = 35, DIC 2000 and TA 2300 umol/kg it gives pH 8.056.
What is the Lueker et al. 2000 carbonate constant set?+
It is a fit of the first and second dissociation constants of carbonic acid (K1 and K2) in seawater on the total pH scale, as a function of temperature and salinity. The Guide to Best Practices for Ocean CO2 Measurements recommends it, and it was fitted for 2 to 35 C and salinity 19 to 43.
What is total alkalinity in seawater?+
Total alkalinity is the excess of proton acceptors over proton donors in a kilogram of seawater. In the open ocean it is dominated by bicarbonate and carbonate, with a smaller contribution from borate. It is conserved when CO2 dissolves or escapes, which makes it a key tracer.
What is the calcite saturation state Omega?+
Omega equals [Ca2+] times [CO3 2-] divided by the solubility product Ksp of calcite. Above 1 calcite is supersaturated and tends to be preserved, below 1 it is undersaturated and tends to dissolve. At 25 C, S = 35, DIC 2000 and TA 2300 umol/kg, Omega is about 5.25.
Why does the calculator include borate?+
Borate, B(OH)4-, carries about 90 umol/kg of alkalinity in surface seawater, roughly 4 percent of the total. Leaving it out and using carbonate alkalinity alone shifts the pH from 8.06 to 8.23 and cuts pCO2 from 385 to 248 uatm in the default case.
What is the difference between pCO2 and CO2*?+
CO2* is the sum of dissolved CO2 and carbonic acid, in umol/kg. pCO2 is the gas pressure that would be in equilibrium with it, found by dividing CO2* by the solubility K0. At 25 C and S = 35, 10.94 umol/kg of CO2* corresponds to about 385 uatm.
What happens to carbonate ion when pCO2 rises?+
Carbonate falls. Added CO2 reacts with carbonate and water to form bicarbonate, lowering pH and the saturation state. This is the chemical core of ocean acidification and the reason shell-forming organisms are sensitive to rising CO2.
Does this calculator include pressure effects?+
No. All constants are for surface pressure (one atmosphere). In the deep ocean, pressure raises the dissociation constants and the calcite solubility product, so the true in situ pH is lower and the true saturation state is lower than shown. Use it for surface and shallow samples.
Which pH scale does the calculator use?+
The total hydrogen ion scale, which includes the bound sulfate ion. It is the scale recommended for seawater work and the one the Lueker et al. constants and the Dickson boric acid constant are defined on. Free and seawater scale values differ slightly.
How accurate are the results?+
Within the constants' stated range the pH is typically good to a few thousandths when DIC and alkalinity are accurate to about 2 umol/kg. Real uncertainty is dominated by measurement error, minor alkalinity contributions that are ignored, and cold-water constant errors below 8 C.
Can I use it for estuaries and fresh water?+
Not reliably. Salinity is limited to 5 to 45 here, and the constants were fitted for salinity 19 to 43. Estuaries often have organic alkalinity, a different boron to salinity ratio and different ionic composition, all of which this model ignores.

How do you calculate pH from DIC and alkalinity?

Write total alkalinity as bicarbonate plus twice carbonate plus borate, express each term through DIC and the hydrogen ion concentration using K1, K2 and KB, then solve for [H+]. This calculator uses bisection, so no closed form is needed. At 25 C, S = 35, DIC 2000 and TA 2300 umol/kg it gives pH 8.056.

What is the Lueker et al. 2000 carbonate constant set?

It is a fit of the first and second dissociation constants of carbonic acid (K1 and K2) in seawater on the total pH scale, as a function of temperature and salinity. The Guide to Best Practices for Ocean CO2 Measurements recommends it, and it was fitted for 2 to 35 C and salinity 19 to 43.

What is total alkalinity in seawater?

Total alkalinity is the excess of proton acceptors over proton donors in a kilogram of seawater. In the open ocean it is dominated by bicarbonate and carbonate, with a smaller contribution from borate. It is conserved when CO2 dissolves or escapes, which makes it a key tracer.

What is the calcite saturation state Omega?

Omega equals [Ca2+] times [CO3 2-] divided by the solubility product Ksp of calcite. Above 1 calcite is supersaturated and tends to be preserved, below 1 it is undersaturated and tends to dissolve. At 25 C, S = 35, DIC 2000 and TA 2300 umol/kg, Omega is about 5.25.

Why does the calculator include borate?

Borate, B(OH)4-, carries about 90 umol/kg of alkalinity in surface seawater, roughly 4 percent of the total. Leaving it out and using carbonate alkalinity alone shifts the pH from 8.06 to 8.23 and cuts pCO2 from 385 to 248 uatm in the default case.

What is the difference between pCO2 and CO2*?

CO2* is the sum of dissolved CO2 and carbonic acid, in umol/kg. pCO2 is the gas pressure that would be in equilibrium with it, found by dividing CO2* by the solubility K0. At 25 C and S = 35, 10.94 umol/kg of CO2* corresponds to about 385 uatm.

What happens to carbonate ion when pCO2 rises?

Carbonate falls. Added CO2 reacts with carbonate and water to form bicarbonate, lowering pH and the saturation state. This is the chemical core of ocean acidification and the reason shell-forming organisms are sensitive to rising CO2.

Does this calculator include pressure effects?

No. All constants are for surface pressure (one atmosphere). In the deep ocean, pressure raises the dissociation constants and the calcite solubility product, so the true in situ pH is lower and the true saturation state is lower than shown. Use it for surface and shallow samples.

Which pH scale does the calculator use?

The total hydrogen ion scale, which includes the bound sulfate ion. It is the scale recommended for seawater work and the one the Lueker et al. constants and the Dickson boric acid constant are defined on. Free and seawater scale values differ slightly.

How accurate are the results?

Within the constants' stated range the pH is typically good to a few thousandths when DIC and alkalinity are accurate to about 2 umol/kg. Real uncertainty is dominated by measurement error, minor alkalinity contributions that are ignored, and cold-water constant errors below 8 C.

Can I use it for estuaries and fresh water?

Not reliably. Salinity is limited to 5 to 45 here, and the constants were fitted for salinity 19 to 43. Estuaries often have organic alkalinity, a different boron to salinity ratio and different ionic composition, all of which this model ignores.