namespace mom_diabatic_driver

Overview

This routine drives the diabatic/dianeutral physics for MOM. More…

namespace mom_diabatic_driver {

// global variables

integer id_clock_entrain;

// global functions

subroutine, public diabatic(
    u u,
    v v,
    h h,
    tv tv,
    Hml Hml,
    fluxes fluxes,
    visc visc,
    ADp ADp,
    CDp CDp,
    dt dt,
    Time_end Time_end,
    G G,
    GV GV,
    US US,
    CS CS,
    WAVES WAVES
    );

subroutine, public extract_diabatic_member(
    CS CS,
    opacity_CSp opacity_CSp,
    optics_CSp optics_CSp,
    evap_CFL_limit evap_CFL_limit,
    minimum_forcing_depth minimum_forcing_depth,
    diabatic_aux_CSp diabatic_aux_CSp
    );

subroutine, public adiabatic(h h, tv tv, fluxes fluxes, dt dt, G G, GV GV, CS CS);

subroutine, public adiabatic_driver_init(
    Time Time,
    G G,
    param_file param_file,
    diag diag,
    CS CS,
    tracer_flow_CSp tracer_flow_CSp
    );

subroutine, public diabatic_driver_init(
    Time Time,
    G G,
    GV GV,
    US US,
    param_file param_file,
    useALEalgorithm useALEalgorithm,
    diag diag,
    ADp ADp,
    CDp CDp,
    CS CS,
    tracer_flow_CSp tracer_flow_CSp,
    sponge_CSp sponge_CSp,
    ALE_sponge_CSp ALE_sponge_CSp
    );

subroutine, public diabatic_driver_end(CS CS);

} // namespace mom_diabatic_driver

Detailed Documentation

This routine drives the diabatic/dianeutral physics for MOM.

By Robert Hallberg, Alistair Adcroft, and Stephen Griffies

This program contains the subroutine that, along with the subroutines that it calls, implements diapycnal mass and momentum fluxes and a bulk mixed layer. The diapycnal diffusion can be used without the bulk mixed layer.

Outline of MOM diabatic

  • diabatic first determines the (diffusive) diapycnal mass fluxes based on the convergence of the buoyancy fluxes within each layer.

  • The dual-stream entrainment scheme of MacDougall and Dewar (JPO, 1997) is used for combined diapycnal advection and diffusion, calculated implicitly and potentially with the Richardson number dependent mixing, as described by Hallberg (MWR, 2000).

  • Diapycnal advection is the residual of diapycnal diffusion, so the fully implicit upwind differencing scheme that is used is entirely appropriate.

  • The downward buoyancy flux in each layer is determined from an implicit calculation based on the previously calculated flux of the layer above and an estimated flux in the layer below. This flux is subject to the following conditions: (1) the flux in the top and bottom layers are set by the boundary conditions, and (2) no layer may be driven below an Angstrom thick- ness. If there is a bulk mixed layer, the buffer layer is treated as a fixed density layer with vanishingly small diffusivity.

    diabatic takes 5 arguments: the two velocities (u and v), the thicknesses (h), a structure containing the forcing fields, and the length of time over which to act (dt). The velocities and thickness are taken as inputs and modified within the subroutine. There is no limit on the time step.

Global Variables

integer id_clock_entrain

This subroutine imposes the diapycnal mass fluxes and the accompanying diapycnal advection of momentum and tracers.

Parameters:

g

ocean grid structure

gv

ocean vertical grid structure

us

A dimensional unit scaling type

u

zonal velocity [L T-1 ~> m s-1]

v

meridional velocity [L T-1 ~> m s-1]

h

thickness [H ~> m or kg m-2]

tv

points to thermodynamic fields unused have NULL ptrs

hml

Active mixed layer depth [m]

fluxes

points to forcing fields unused fields have NULL ptrs

visc

vertical viscosities, BBL properies, and

adp

related points to accelerations in momentum equations, to enable the later derived diagnostics, like energy budgets

cdp

points to terms in continuity equations

dt

time increment [s]

time_end

Time at the end of the interval

cs

module control structure

waves

Surface gravity waves

Global Functions

subroutine, public diabatic(
    u u,
    v v,
    h h,
    tv tv,
    Hml Hml,
    fluxes fluxes,
    visc visc,
    ADp ADp,
    CDp CDp,
    dt dt,
    Time_end Time_end,
    G G,
    GV GV,
    US US,
    CS CS,
    WAVES WAVES
    )

This subroutine imposes the diapycnal mass fluxes and the accompanying diapycnal advection of momentum and tracers.

Parameters:

g

ocean grid structure

gv

ocean vertical grid structure

us

A dimensional unit scaling type

u

zonal velocity [L T-1 ~> m s-1]

v

meridional velocity [L T-1 ~> m s-1]

h

thickness [H ~> m or kg m-2]

tv

points to thermodynamic fields unused have NULL ptrs

hml

Active mixed layer depth [m]

fluxes

points to forcing fields unused fields have NULL ptrs

visc

vertical viscosities, BBL properies, and

adp

related points to accelerations in momentum equations, to enable the later derived diagnostics, like energy budgets

cdp

points to terms in continuity equations

dt

time increment [s]

time_end

Time at the end of the interval

cs

module control structure

waves

Surface gravity waves

subroutine, public extract_diabatic_member(
    CS CS,
    opacity_CSp opacity_CSp,
    optics_CSp optics_CSp,
    evap_CFL_limit evap_CFL_limit,
    minimum_forcing_depth minimum_forcing_depth,
    diabatic_aux_CSp diabatic_aux_CSp
    )

Returns pointers or values of members within the diabatic_CS type. For extensibility, each returned argument is an optional argument.

Parameters:

cs

module control structure

opacity_csp

A pointer to be set to the opacity control structure

optics_csp

A pointer to be set to the optics control structure

evap_cfl_limit

The largest fraction of a layer that can be evaporated in one time-step [nondim].

minimum_forcing_depth

The smallest depth over which heat and freshwater fluxes are applied [m].

diabatic_aux_csp

A pointer to be set to the diabatic_aux control structure

subroutine, public adiabatic(
    h h,
    tv tv,
    fluxes fluxes,
    dt dt,
    G G,
    GV GV,
    CS CS
    )

Routine called for adiabatic physics.

Parameters:

g

ocean grid structure

h

thickness [H ~> m or kg m-2]

tv

points to thermodynamic fields

fluxes

boundary fluxes

dt

time step [s]

gv

ocean vertical grid structure

cs

module control structure

subroutine, public adiabatic_driver_init(
    Time Time,
    G G,
    param_file param_file,
    diag diag,
    CS CS,
    tracer_flow_CSp tracer_flow_CSp
    )

A simplified version of diabatic_driver_init that will allow tracer column functions to be called without allowing any of the diabatic processes to be used.

Parameters:

time

current model time

g

model grid structure

param_file

the file to parse for parameter values

diag

regulates diagnostic output

cs

module control structure

tracer_flow_csp

pointer to control structure of the tracer flow control module

subroutine, public diabatic_driver_init(
    Time Time,
    G G,
    GV GV,
    US US,
    param_file param_file,
    useALEalgorithm useALEalgorithm,
    diag diag,
    ADp ADp,
    CDp CDp,
    CS CS,
    tracer_flow_CSp tracer_flow_CSp,
    sponge_CSp sponge_CSp,
    ALE_sponge_CSp ALE_sponge_CSp
    )

This routine initializes the diabatic driver module.

Parameters:

time

model time

g

model grid structure

gv

model vertical grid structure

us

A dimensional unit scaling type

param_file

file to parse for parameter values

usealealgorithm

logical for whether to use ALE remapping

diag

structure to regulate diagnostic output

adp

pointers to accelerations in momentum equations, to enable diagnostics, like energy budgets

cdp

pointers to terms in continuity equations

cs

module control structure

tracer_flow_csp

pointer to control structure of the tracer flow control module

sponge_csp

pointer to the sponge module control structure

ale_sponge_csp

pointer to the ALE sponge module control structure

subroutine, public diabatic_driver_end(CS CS)

Routine to close the diabatic driver module.

Parameters:

cs

module control structure