黄利东
2025-11-12
在 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}. \]
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")给定 \(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")