开放体系与封闭体系下的碳酸盐平衡与物种分布(25 °C)

黄利东

2025-11-12

1. 研究问题与结论先导

2. 基本平衡与公式

在 25 °C 下碳酸体系的主反应与常数(近似值):

\[ \mathrm{CO_2(g)} \rightleftharpoons \mathrm{CO_2^*(aq)}, \quad [\mathrm{CO_2^*}] = K_H \, p_{\mathrm{CO_2}} \]

\[ \mathrm{CO_2^*} + \mathrm{H_2O} \rightleftharpoons \mathrm{H^+} + \mathrm{HCO_3^-}, \quad K_1 = 10^{-pK_1} \]

\[ \mathrm{HCO_3^-} \rightleftharpoons \mathrm{H^+} + \mathrm{CO_3^{2-}}, \quad K_2 = 10^{-pK_2} \]

物种分数(与 \(C_T\) 无关):

\[ \alpha_0 = \frac{1}{1+\frac{K_1}{[H^+]}+\frac{K_1K_2}{[H^+]^2}}, \quad \alpha_1 = \frac{K_1/[H^+]}{1+\frac{K_1}{[H^+]}+\frac{K_1K_2}{[H^+]^2}}, \quad \alpha_2 = \frac{K_1K_2/[H^+]^2}{1+\frac{K_1}{[H^+]}+\frac{K_1K_2}{[H^+]^2}}. \]

碱度(忽略硼、磷、有机酸等):

\[ \mathrm{Alk} \approx [\mathrm{HCO_3^-}] + 2[\mathrm{CO_3^{2-}}] + [\mathrm{OH^-}] - [\mathrm{H^+}], \quad K_w = 10^{-14}. \]

3. R 代码:常数、函数与物种分布

library(ggplot2)
library(dplyr)
library(tidyr)
theme_set(theme_minimal(base_size = 13))

# --- 常数(25 °C) ---
pK1 <- 6.35
pK2 <- 10.33
K1  <- 10^-pK1
K2  <- 10^-pK2
Kw  <- 1e-14
KH  <- 0.033  # Henry 常数 mol/L/atm

alpha_frac <- function(pH, K1, K2){
  H <- 10^(-pH)
  denom <- 1 + K1/H + K1*K2/H^2
  a0 <- 1/denom
  a1 <- (K1/H)/denom
  a2 <- (K1*K2/H^2)/denom
  cbind(a0=a0, a1=a1, a2=a2)
}

pH_grid <- seq(4, 12, by = 0.05)
af <- alpha_frac(pH_grid, K1, K2)
spec_df <- data.frame(
  pH = pH_grid,
  CO2_star = af[,"a0"],
  HCO3 = af[,"a1"],
  CO3 = af[,"a2"]
) |>
  pivot_longer(-pH, names_to = "species", values_to = "fraction")

ggplot(spec_df, aes(pH, fraction, linetype = species,color=species)) +
  geom_line(size = 1) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  labs(title = "不同 pH 下碳酸盐各形态分数(25 °C)",
       y = "物种分数(%)", x = "pH", linetype = "物种") +
  theme(legend.position = "top")

4. 开放体系(固定 \(p_{\mathrm{CO_2}}\)

给定 \(p_{\mathrm{CO_2}}\) 后:

\[ [\mathrm{HCO_3^-}] = \frac{K_1}{[H^+]}\,[\mathrm{CO_2^*}], \quad [\mathrm{CO_3^{2-}}] = \frac{K_2}{[H^+]}\,[\mathrm{HCO_3^-}] \]

碱度计算为:

\[ \mathrm{Alk} = [\mathrm{HCO_3^-}] + 2[\mathrm{CO_3^{2-}}] + [\mathrm{OH^-}] - [\mathrm{H^+}] \]

其中: - \(K_1, K_2\) 分别为碳酸的第一、第二电离常数; - \([\mathrm{CO_2^*}]\) 表示溶液中 CO₂(aq) 与 H₂CO₃ 的合并浓度; - \(\mathrm{Alk}\) 表示碱度。

library(ggplot2)
library(dplyr)
library(tidyr)
pK1 <- 6.35
pK2 <- 10.33
K1  <- 10^-pK1
K2  <- 10^-pK2
Kw  <- 1e-14
KH  <- 0.033  # Henry 常数 mol/L/atm

pH_grid <- seq(4, 12, by = 0.05)
pCO2 <- 10^(-3.4)
KH  <- 0.033  # Henry 常数 mol/L/atm
CO2_star_open <- KH * pCO2

open_df <- data.frame(pH = pH_grid) |>
mutate(
H   = 10^(-pH),
OH  = Kw / H,
CO2 = CO2_star_open,
HCO3 = (K1/H) * CO2,
CO3  = (K2/H) * HCO3,
Alk  = HCO3 + 2*CO3 + OH - H,
CT   = CO2 + HCO3 + CO3
)

ggplot(open_df, aes(pH, Alk*1000)) +
geom_line(size = 1) +
labs(title = "开放体系(pCO₂≈400 ppm)下 Alk–pH 关系(仅碳酸–水)",
x = "pH", y = "碱度 Alk(mmol/L)")

封闭体系下的碳酸盐分布与碱度计算

在封闭体系中:

\[ [\mathrm{CO_2^*}] = \alpha_0 C_T, \quad [\mathrm{HCO_3^-}] = \alpha_1 C_T, \quad [\mathrm{CO_3^{2-}}] = \alpha_2 C_T \]

碱度与 pH 的关系为:

\[ \mathrm{Alk}(pH) = \alpha_1 C_T + 2\alpha_2 C_T + [\mathrm{OH^-}] - [\mathrm{H^+}] \]

其中: - \(\alpha_0, \alpha_1, \alpha_2\) 分别为 CO₂*、HCO₃⁻、CO₃²⁻ 的物种分数; - \(C_T\) 为溶液中总无机碳浓度; - \(\mathrm{Alk}\) 为碱度,考虑碳酸体系及水自离解项。

library(ggplot2)
library(dplyr)
library(tidyr)
pco2_vec <- c(10^-3.0, 10^-3.4, 10^-4.0)
lab <- c("1000 ppm","400 ppm","100 ppm")

open_multi <- lapply(seq_along(pco2_vec), function(i){
pCO2i <- pco2_vec[i]; tag <- lab[i]
CO2i <- KH * pCO2i
tmp <- data.frame(pH = pH_grid) |>
mutate(H=10^(-pH), OH=Kw/H,
CO2=CO2i,
HCO3=(K1/H)*CO2,
CO3=(K2/H)*HCO3,
Alk=HCO3+2*CO3+OH-H,
CT=CO2+HCO3+CO3,
pCO2=tag)
tmp
}) |> bind_rows()

ggplot(open_multi, aes(pH, Alk*1000, linetype = pCO2)) +
geom_line(size = 1) +
labs(title = "不同大气 CO₂ 水平下(开放体系)Alk–pH 轨迹",
x = "pH", y = "碱度 Alk(mmol/L)", linetype = "pCO₂") +
theme(legend.position = "top")