Air-sea gas exchange

Air-sea gas transfer is typically parameterised as a function of temperature ($T$) and wind speed ($u_{10}$), and the concentration of the gas in the air ($C_a$) and in the surface water ($C_w$) in the form:

\[F = k(u_{10}, T)(C_w - C_a),\]

where k is the gas transfer velocity.

Our implementation is intended to be generic for any gas, so you can specify air_concentration, water_concentration, transfer_velocity, and wind_speed as any function in GasExchange, but we also provide constructors and default values for carbon dioxide and oxygen.

To setup carbon dioxide and/or oxygen boundary conditions you simply build the condition and then specify it in the model:

using OceanBioME
CO₂_flux = CarbonDioxideGasExchangeBoundaryCondition()
O₂_flux  = OxygenGasExchangeBoundaryCondition()
using Oceananigans

grid = RectilinearGrid(size=(3, 3, 30), extent=(10, 10, 200));

model = NonhydrostaticModel(; grid,
                              biogeochemistry = LOBSTER(; grid, carbonates = true, oxygen = true),
                              boundary_conditions = (DIC = FieldBoundaryConditions(top = CO₂_flux),
                                                      O₂ = FieldBoundaryConditions(top =  O₂_flux)),
                              tracers = (:T, :S))
NonhydrostaticModel{CPU, RectilinearGrid}(time = 0 seconds, iteration = 0)
├── grid: 3×3×30 RectilinearGrid{Float64, Oceananigans.Grids.Periodic, Oceananigans.Grids.Periodic, Oceananigans.Grids.Bounded} on Oceananigans.Architectures.CPU with 3×3×3 halo
├── timestepper: QuasiAdamsBashforth2TimeStepper
├── advection scheme: Centered reconstruction order 2
├── tracers: (T, S, NO₃, NH₄, P, Z, sPOM, bPOM, DOM, DIC, Alk, O₂)
├── closure: Nothing
├── buoyancy: Nothing
└── coriolis: Nothing
Note

All gas exchange models require temperature (T) to be present in the model, and carbon dioxide requires sailinity (S), total inorganic carbon (DIC), and alkalinity (Alk), and optionally can take silicate and phosphate where there names are specified in the keyword argument silicate_and_phosphate_names

Model equations

### Gas transfer velocity

The default gas transfer velocity (ScaledTransferVelocity) returns a velocity in the form:

\[k(u_{10}, T) = cu_{10}^2\left(\frac{Sc(T)}{660}\right)^{-1/2},\]

where $c$ is a coefficient (coeff) which typically is wind product specific with default value $0.266$ cm/hour from Ho et al. (2006), and $Sc$ is gas specific the temperature dependent Schmidt number (the dimensionless ratio of momentum and mass diffusivity) specified as schmidt_number which can be any function of temperature. The default parameterisations is the 4th order polynomial formulation of Wanninkhof (2014).

Currently, the parameters for CO₂ and oxygen are included, but it would be very straightforward to add the parameters given in the original publication for other gases (e.g. inert tracers of other nutrients such as N₂).

Carbon dioxide partial pressure

For most gasses the water concentration C_w is simply taken directly from the biogeochemical model or another tracer (in which case water_concentration should be set to TracerConcentration(:tracer_name)), but for carbon dioxide the fugacity ($fCO_2$) must be derived from the dissolved inorganic carbon (DIC) and Alkalinity by a CarbonChemistry model (please see the docs for CarbonChemistry), and used to calculate the partial pressure ($pCO_2$).

The default parameterisation for the partial pressure (CarbonDioxideConcentration) is given by Dickson et al. (2007) and defines the partial pressure to be the mole fraction $x(CO_2)$ multiplied by the pressure, $P$, related to the fugacity by:

\[fCO_2 = x(CO_2)P\exp\left(\frac{1}{RT}\int_0^P\left(V(CO_2)-\frac{RT}{P'}\right)dP'\right).\]

The volume ($V$) is related to the gas pressure by the virial expression:

\[\frac{PV(CO_2)}{RT}\approx1+\frac{B(x, T)}{V(CO_2)}+\mathcal{O}(V(CO_2)^{-2}),\]

and the first virial coefficient $B$ for carbon dioxide in air can be approximated as:

\[B_{CO_2-\text{air}} \approx B_{CO_2}(T) + 2x(CO_2)\delta_{CO_2-\text{air}}(T),\]

where $\delta$ is the cross virial coefficient.

$B_{CO_2}$ and $\delta_{CO_2-\text{air}}$ are parameterised by Weiss (1974) and reccomended in Dickson et al. (2007) as fourth and first order polynomials respectively.