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 |