pymoc.modules.Equi_Column

class pymoc.modules.Equi_Column(f=0.00012, b_s=0.025, b_bot=None, B_int=3000.0, A=70000000000000.0, nz=100, sol_init=None, H_guess=1500.0, kappa=6e-05, dkappa_dz=None, psi_so=None, z=None, H=None)

Equilibrium 1D Column Model

Instances of this class represent a 1D column model for the MOC. The model is written in terms of a boundary value problem solving the the ODE:

\[d_{zzzz}(\Psi_{N}) = (\kappa A)^{-1}(\Psi_{N} - \Psi_{SO} - A d_z(\kappa))d_{zzz}(\Psi_N)\]

That is subject to the boundary conditions:

\[\begin{split}\begin{aligned} (1)&\ \Psi_N(0) = 0 \\ (2)&\ \Psi_N(-H) = 0 \\ (3)&\ b(0)=-f \partial_{zz} \Psi_N (0) = b_s \\ (4)&\ b(-H)=-f \partial_{zz} \Psi_N (H) = b_{bot} \\ &\textrm{or} \\ &\ d_z b(-H) = -f d_{zzz} \Psi_N (-H) = (A \kappa(-H))^{-1} B_{int} \\ \end{aligned}\end{split}\]

Where \(H\) is the total depth of the upper cell, which can also be solved for with the additional BC that: \(d_z\psi_N(-H) = 0\)

The solution is found by non-dimensionalizing the equations using \(H\) and math:f as length and time scales, and solving between \(z^*=z/H=0..1\). Notice that \(H\) then appears as a parameter in the equations.

Parameters
  • f (float) – Coriolis parameter. Units s-1

  • b_s (float) – Buoyancy at the surface of the column. Units:

  • b_bot (float) – Buoyancy at the bottom of the column. Units:

  • B_int (float) – Integrated downward buyancy flux at the bottom of the surface cell. Units:

  • A (float) – Horizontal area of basin. Units: m2

  • nz (int) – Number of levels in the non-dimensional vertical grid for the numerical solver.

  • sol_init (ndarray) – Initial guess of the solution to the boundary value problem.

  • H_guess (float) – Initial guess for the depth of the upper cell, if solving for it. Units: m

  • kappa (float, function, or ndarray) – Vertical diffusivity profile. Units: m2/s

  • dkappa_dz (float, function, or ndarray) – Vertical diffusivity gradient profile. Units: m/s

  • psi_so (float, function, or ndarray) – Streamfunction in the adjoining Southern Ocean basin. Units:

  • z (ndarray) – Vertical depth levels of column grid. Units: m

  • H (float) – Depth of the upper cell, if specifying. Units: m

__init__(f=0.00012, b_s=0.025, b_bot=None, B_int=3000.0, A=70000000000000.0, nz=100, sol_init=None, H_guess=1500.0, kappa=6e-05, dkappa_dz=None, psi_so=None, z=None, H=None)
Parameters
  • f (float) – Coriolis parameter. Units s-1

  • b_s (float) – Buoyancy at the surface of the column. Units:

  • b_bot (float) – Buoyancy at the bottom of the column. Units:

  • B_int (float) – Integrated downward buyancy flux at the bottom of the surface cell. Units:

  • A (float) – Horizontal area of basin. Units: m2

  • nz (int) – Number of levels in the non-dimensional vertical grid for the numerical solver.

  • sol_init (ndarray) – Initial guess of the solution to the boundary value problem.

  • H_guess (float) – Initial guess for the depth of the upper cell, if solving for it. Units: m

  • kappa (float, function, or ndarray) – Vertical diffusivity profile. Units: m2/s

  • dkappa_dz (float, function, or ndarray) – Vertical diffusivity gradient profile. Units: m/s

  • psi_so (float, function, or ndarray) – Streamfunction in the adjoining Southern Ocean basin. Units:

  • z (ndarray) – Vertical depth levels of column grid. Units: m

  • H (float) – Depth of the upper cell, if specifying. Units: m

Methods

__init__([f, b_s, b_bot, B_int, A, nz, …])

param f

Coriolis parameter. Units s-1

alpha(z, H)

Calculate the nondimensional factor:

bc(ya, yb[, p])

Calculate the boundary conditions for the equilibrium column boundary value problem.

bz(H)

Calculate the nondimenzionalized stratification at the bottom of the upper cell

calc_sol_init(sol_init[, nz, b_bot])

Initialize the initial guess for the solutions to the system of ordinary differential equations defined by pymoc.modules.Equi_Column.ode()

init_b_boundaries(b_s[, b_bot, B_int])

Initialize and set the nondimensionalize surface buoyance and bottom buoyance, or the abyssal buoyancy flux boundary condition if no bottom buoyancy is specified.

init_dkappa_dz(kappa[, dkappa_dz])

Initialize the vertical diffusivity gradient profile.

init_kappa(kappa)

Initialize the vertical diffusivity profile.

init_psi_so([psi_so])

Initialize the nondimensionalized streamfunction passed from the Southern Ocean.

ode(z, y[, p])

Generate the ordinary differential equation for the equilibrium column overturning streamfunction, to be solved as a boundary value problem:

solve()

Solve for the thermal wind overturning streamfunction as a boundary value problem based on the system of equations defined in pymoc.modules.Equi_Column.ode().