Skip to content

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* - 0.092307* + 0.0007555*T⁴

! Schmidt number for O2
zsch_o2 = 1920.4 - 135.6*T + 5.2122* - 0.109390* + 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 constants
  • K0: CO₂ solubility coefficient
  • B, δ: 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 factor
  • e3t: 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:

! Convert to atmospheres
patm = pressure_Pa / 101325.0

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:

k = 0.251 * u10² * (Sc/660)^(-1/2)

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:

f = P * exp((B + 2δ(1-x)²) * P / RT)

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_co2 from 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

  1. Wanninkhof (1992): Relationship between wind speed and gas exchange over the ocean. J. Geophys. Res., 97(C5), 7373-7382.

  2. Esbensen & Kushnir (1981): The heat budget of the global ocean: An atlas. Oregon State University, Climatic Research Institute.

  3. Maier-Reimer (1988): Original gas exchange formulation

  4. 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