p4zflx
Overview
The p4zflxroutine calculates the gas exchange of CO₂ and O₂ at the air-sea interface including Gas transfer velocity, surface carbonate chemistry, atmospheric pressure corrections, and sea ice effects on gas exchange
Version: NEMO 5.0
Model: PISCES (version NEMO 5.0)
Subroutines: p4z_flx, p4z_flx_init, p4z_patm, p4z_flx_alloc
p4z_flx(kt, knt, Kbb, Kmm, Krhs)
Main computation routine for gas exchange fluxes.
A. Gas Transfer Velocity
! Schmidt number for CO2
zsch_co2 = 2116.8 - 136.25*T + 4.7353*T² - 0.092307*T³ + 0.0007555*T⁴
! Schmidt number for O2
zsch_o2 = 1920.4 - 135.6*T + 5.2122*T² - 0.109390*T³ + 0.0009377*T⁴
! Base transfer velocity (Wanninkhof parameterization)
zkgwan = 0.251 * wndm² * xconv * (1 - fr_i)
! Gas-specific transfer velocity
zkgco2 = zkgwan * √(660/zsch_co2)
zkgo2 = zkgwan * √(660/zsch_o2)
Where:
T: Sea surface temperature [°C]wndm: Wind speed at 10m [m/s]fr_i: Sea ice fraction [0-1]xconv = 0.01/3600: Conversion factor
B. Carbonate Chemistry
! H2CO3 concentration
zh2co3 = DIC / (1 + K1/[H⁺] + K1*K2/[H⁺]²)
! Fugacity coefficient
zfugcoeff = exp(Patm * (B + 2*xc² * δ) / (R*T))
! Oceanic pCO2
zpco2oce = [H2CO3] / (K0 * zfugcoeff)
Where:
DIC: Dissolved Inorganic Carbon [mol/L]K1, K2: First and second carbonate dissociation constantsK0: CO₂ solubility coefficientB, δ: Virial coefficients
C. Flux Calculations
CO₂ Flux:
! Downward flux (atmosphere → ocean)
zfld = pCO2atm * K0 * zkgco2
! Upward flux (ocean → atmosphere)
zflu = [H2CO3] * zkgco2
! Net flux
oce_co2 = (zfld - zflu) * tmask
O₂ Flux:
! Downward flux
zfld16 = Patm * K0_O2 * zkgo2
! Upward flux
zflu16 = [O2] * zkgo2
! Net flux
zoflx = (zfld16 - zflu16) * tmask
D. Tracer Tendencies
! DIC tendency
tr(jpdic, Krhs) = tr(jpdic, Krhs) + oce_co2 * rfact2 / e3t
! O2 tendency
tr(jpoxy, Krhs) = tr(jpoxy, Krhs) + zoflx * rfact2 / e3t
Where:
rfact2: Time step factore3t: Vertical grid spacing at surface [m]
Input Parameters
| Parameter | Type | Intent | Description |
|---|---|---|---|
kt |
INTEGER | IN | Current time step index |
knt |
INTEGER | IN | Sub-time step counter |
Kbb |
INTEGER | IN | Time level index (before) |
Kmm |
INTEGER | IN | Time level index (now/middle) |
Krhs |
INTEGER | IN | Time level index (right-hand side/tendencies) |
p4z_flx_init
Initialization routine for atmospheric conditions.
Functions:
- Reads namelist nampisext
- Initializes atmospheric CO₂ concentration
- Optionally reads historical CO₂ data from file
Namelist Parameters:
| Parameter | Type | Description |
|---|---|---|
ln_co2int |
LOGICAL | Read CO₂ from file (T) or use constant (F) |
atcco2 |
REAL | Pre-industrial atmospheric CO₂ [ppm] |
clname |
CHAR | Filename for CO₂ time series |
nn_offset |
INTEGER | Model-data year offset |
CO₂ Time Interpolation:
When ln_co2int = .TRUE.:
! Decimal year
zyr_dec = year + day_of_year / days_in_year
! Linear interpolation
atcco2 = atcco2h(i-1) + (atcco2h(i) - atcco2h(i-1)) *
(zyr_dec - years(i-1)) / (years(i) - years(i-1))
p4z_patm
Reads and interpolates atmospheric pressure and CO₂ fields.
Namelist Parameters (nampisatm):
| Parameter | Type | Description |
|---|---|---|
ln_presatm |
LOGICAL | Read pressure from file (T) or constant (F) |
ln_presatmco2 |
LOGICAL | Spatially varying atmospheric CO₂ (T/F) |
sn_patm |
TYPE(FLD_N) | Pressure field information |
sn_atmco2 |
TYPE(FLD_N) | Atmospheric CO₂ field information |
Pressure Correction:
Input Parameter
| Parameter | Type | Intent | Description |
|---|---|---|---|
kt |
INTEGER | IN | Current time step index |
p4z_flx_alloc
Allocates memory for module arrays.
Allocated Arrays:
- satmco2(jpi, jpj): Atmospheric pCO₂ [ppm]
- patm(jpi, jpj): Atmospheric pressure [atm]
Key Variables
Input Variables
| Variable | Description | Units |
|---|---|---|
ts(jp_tem) |
Sea surface temperature | °C |
salinprac |
Practical salinity | PSU |
wndm |
Wind speed at 10m | m/s |
fr_i |
Sea ice fraction | - |
tr(jpdic) |
Dissolved Inorganic Carbon | mol/L |
tr(jpoxy) |
Dissolved oxygen | mol/L |
hi |
H⁺ concentration | mol/L |
rhop |
Seawater density | kg/m³ |
Chemical Parameters
| Variable | Description | Source |
|---|---|---|
ak13 |
First carbonate constant (K1) | p4zche module |
ak23 |
Second carbonate constant (K2) | p4zche module |
chemc(:,:,1) |
CO₂ solubility (K0) | p4zche module |
chemc(:,:,2) |
Virial coefficient B | p4zche module |
chemc(:,:,3) |
Virial coefficient δ | p4zche module |
chemo2(:,:,1) |
O₂ solubility | p4zche module |
Output Variables
| Variable | Description | Units |
|---|---|---|
oce_co2 |
Net CO₂ flux | mol/L/s |
zoflx |
Net O₂ flux | mol/L/s |
t_oce_co2_flx |
Global carbon flux | mol/s |
t_oce_co2_flx_cum |
Cumulative carbon flux | mol |
Diagnostic Outputs
Available through XIOS I/O system:
| Output Name | Description | Units |
|---|---|---|
Cflx |
CO₂ flux | mmol/m²/s |
Oflx |
O₂ flux | mmol/m²/s |
Dpco2 |
Air-sea pCO₂ difference | μatm |
pCO2sea |
Oceanic pCO₂ | μatm |
AtmCo2 |
Atmospheric CO₂ | ppm |
Kg |
Gas transfer velocity | m/s |
tcflx |
Total carbon flux | mol/s |
tcflxcum |
Cumulative carbon flux | mol |
Dpo2 |
Air-sea pO₂ difference | atm |
Physical Parameterizations
Wanninkhof (1992) Gas Transfer
The module uses the Wanninkhof quadratic wind speed relationship:
Notes:
- Removes chemical enhancement factor
- Applies sea ice mask: (1 - fr_i)
- Schmidt number temperature dependence from empirical fits
Atmospheric Pressure Correction
Total atmospheric pressure correction following Esbensen & Kushnir (1981): - Accounts for spatial and temporal variations in sea-level pressure - Applied to both CO₂ and O₂ fluxes - Includes water vapor pressure correction
Fugacity Correction
For non-ideal gas behavior at surface:
Where:
- B: Second virial coefficient for CO₂
- δ: Cross virial coefficient
- x: Mole fraction of CO₂
Important Notes
Time Integration
- Uses RK3 scheme compatibility check for online coupling
- Mid-step values avoided if non-monotonic (FCT filter)
Coupling Options
- Offline mode: Uses prescribed atmospheric CO₂
- Online coupling: Receives
atm_co2from atmospheric model - Semi-coupled: Reads spatially varying CO₂ fields
Numerical Considerations
- Minimum H⁺ concentration:
1.e-10 mol/L - Maximum temperature for Schmidt number:
35°C - Sea ice masking prevents unrealistic fluxes
References
-
Wanninkhof (1992): Relationship between wind speed and gas exchange over the ocean. J. Geophys. Res., 97(C5), 7373-7382.
-
Esbensen & Kushnir (1981): The heat budget of the global ocean: An atlas. Oregon State University, Climatic Research Institute.
-
Maier-Reimer (1988): Original gas exchange formulation
-
Aumont & Bopp (2006): Globalizing results from ocean in situ iron fertilization studies. Global Biogeochem. Cycles, 20, GB2017.
Document Version: 1.0
Last Updated: October 2025
Source code: NEMO 5.0