mom_diabatic_driver module reference

This routine drives the diabatic/dianeutral physics for MOM.

More…

Data Types

diabatic_cs

Control structure for this module.

Functions/Subroutines

diabatic()

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

diabatic_ale_legacy()

Applies diabatic forcing and diapycnal mixing of temperature, salinity and other tracers for use with an ALE algorithm.

diabatic_ale()

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

layered_diabatic()

Imposes the diapycnal mass fluxes and the accompanying diapycnal advection of momentum and tracers using the original MOM6 algorithms.

extract_diabatic_member()

Returns pointers or values of members within the diabatic_CS type.

adiabatic()

Routine called for adiabatic physics.

diagnose_diabatic_diff_tendency()

This routine diagnoses tendencies from application of diabatic diffusion using ALE algorithm.

diagnose_boundary_forcing_tendency()

This routine diagnoses tendencies from application of boundary fluxes.

diagnose_frazil_tendency()

This routine diagnoses tendencies for temperature and heat from frazil formation.

adiabatic_driver_init()

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.

diabatic_driver_init()

This routine initializes the diabatic driver module.

register_diabatic_restarts()

Routine to register restarts, pass-through to children modules.

diabatic_driver_end()

Routine to close the diabatic driver module.

Detailed Description

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 a minimal thickness. 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.

Type Documentation

type mom_diabatic_driver/diabatic_cs

Control structure for this module.

Type fields:
  • % id_ea [integer] :: Diagnostic IDs.

  • % id_eb [integer] :: Diagnostic IDs.

  • % id_ea_t [integer] :: Diagnostic IDs.

  • % id_eb_t [integer] :: Diagnostic IDs.

  • % id_ea_s [integer] :: Diagnostic IDs.

  • % id_eb_s [integer] :: Diagnostic IDs.

  • % id_kd_heat [integer] :: Diagnostic IDs.

  • % id_kd_salt [integer] :: Diagnostic IDs.

  • % id_kd_int [integer] :: Diagnostic IDs.

  • % id_kd_epbl [integer] :: Diagnostic IDs.

  • % id_tdif [integer] :: Diagnostic IDs.

  • % id_sdif [integer] :: Diagnostic IDs.

  • % id_tadv [integer] :: Diagnostic IDs.

  • % id_sadv [integer] :: Diagnostic IDs.

  • % id_mld_003 [integer] :: Diagnostic IDs.

  • % id_mld_0125 [integer] :: Diagnostic IDs.

  • % id_mld_user [integer] :: Diagnostic IDs.

  • % id_mlotstsq [integer] :: Diagnostic IDs.

  • % id_mld_en1 [integer] :: Diagnostic IDs.

  • % id_mld_en2 [integer] :: Diagnostic IDs.

  • % id_mld_en3 [integer] :: Diagnostic IDs.

  • % id_submln2 [integer] :: Diagnostic IDs.

  • % id_wd [integer] :: Diagnostic IDs.

  • % id_dudt_dia [integer] :: Diagnostic IDs.

  • % id_dvdt_dia [integer] :: Diagnostic IDs.

  • % id_hf_dudt_dia_2d [integer] :: Diagnostic IDs.

  • % id_hf_dvdt_dia_2d [integer] :: Diagnostic IDs.

  • % id_u_predia [integer] :: Diagnostic IDs.

  • % id_v_predia [integer] :: Diagnostic IDs.

  • % id_h_predia [integer] :: Diagnostic IDs.

  • % id_t_predia [integer] :: Diagnostic IDs.

  • % id_s_predia [integer] :: Diagnostic IDs.

  • % id_e_predia [integer] :: Diagnostic IDs.

  • % id_diabatic_diff_temp_tend [integer] :: Diagnostic IDs.

  • % id_diabatic_diff_saln_tend [integer] :: Diagnostic IDs.

  • % id_diabatic_diff_heat_tend [integer] :: Diagnostic IDs.

  • % id_diabatic_diff_salt_tend [integer] :: Diagnostic IDs.

  • % id_diabatic_diff_heat_tend_2d [integer] :: Diagnostic IDs.

  • % id_diabatic_diff_salt_tend_2d [integer] :: Diagnostic IDs.

  • % id_diabatic_diff_h [integer] :: Diagnostic IDs.

  • % id_boundary_forcing_h [integer] :: Diagnostic IDs.

  • % id_boundary_forcing_h_tendency [integer] :: Diagnostic IDs.

  • % id_boundary_forcing_temp_tend [integer] :: Diagnostic IDs.

  • % id_boundary_forcing_saln_tend [integer] :: Diagnostic IDs.

  • % id_boundary_forcing_heat_tend [integer] :: Diagnostic IDs.

  • % id_boundary_forcing_salt_tend [integer] :: Diagnostic IDs.

  • % id_boundary_forcing_heat_tend_2d [integer] :: Diagnostic IDs.

  • % id_boundary_forcing_salt_tend_2d [integer] :: Diagnostic IDs.

  • % id_frazil_h [integer] :: Diagnostic IDs.

  • % id_frazil_temp_tend [integer] :: Diagnostic IDs.

  • % id_frazil_heat_tend [integer] :: Diagnostic IDs.

  • % id_frazil_heat_tend_2d [integer] :: Diagnostic IDs.

  • % initialized [logical] :: True if this control structure has been initialized.

  • % use_legacy_diabatic [logical] :: If true (default), use a legacy version of the diabatic algorithm. This is temporary and is needed to avoid change in answers.

  • % use_bulkmixedlayer [logical] :: If true, a refined bulk mixed layer is used with nkml sublayers (and additional buffer layers).

  • % use_energetic_pbl [logical] :: If true, use the implicit energetics planetary boundary layer scheme to determine the diffusivity in the surface boundary layer.

  • % use_kpp [logical] :: If true, use CVMix/KPP boundary layer scheme to determine the OBLD and the diffusivities within this layer.

  • % use_kappa_shear [logical] :: If true, use the kappa_shear module to find the shear-driven diapycnal diffusivity.

  • % use_cvmix_shear [logical] :: If true, use the CVMix module to find the shear-driven diapycnal diffusivity.

  • % use_cvmix_ddiff [logical] :: If true, use the CVMix double diffusion module.

  • % use_cvmix_conv [logical] :: If true, use the CVMix module to get enhanced mixing due to convection.

  • % double_diffuse [logical] :: If true, some form of double-diffusive mixing is used.

  • % use_sponge [logical] :: If true, sponges may be applied anywhere in the domain. The exact location and properties of those sponges are set by calls to initialize_sponge and set_up_sponge_field.

  • % use_oda_incupd [logical] :: If True, DA incremental update is applied everywhere.

  • % use_geothermal [logical] :: If true, apply geothermal heating.

  • % use_int_tides [logical] :: If true, use the code that advances a separate set of equations for the internal tide energy density.

  • % epbl_is_additive [logical] :: If true, the diffusivity from ePBL is added to all other diffusivities. Otherwise, the larger of kappa- shear and ePBL diffusivities are used.

  • % epbl_prandtl [real] :: The Prandtl number used by ePBL to convert vertical diffusivities into viscosities [nondim].

  • % usealealgorithm [logical] :: If true, use the ALE algorithm rather than layered isopycnal/stacked shallow water mode. This logical passed by argument to diabatic_driver_init.

  • % aggregate_fw_forcing [logical] :: Determines whether net incoming/outgoing surface FW fluxes are applied separately or combined before being applied.

  • % ml_mix_first [real] :: The nondimensional fraction of the mixed layer algorithm that is applied before diffusive mixing [nondim]. The default is 0, while 0.5 gives Strang splitting and 1 is a sensible value too. Note that if there are convective instabilities in the initial state, the first call may do much more than the second.

  • % nkbl [integer] :: The number of buffer layers (if bulk_mixed_layer)

  • % massless_match_targets [logical] :: If true (the default), keep the T & S consistent with the target values.

  • % mix_boundary_tracers [logical] :: If true, mix the passive tracers in massless layers at the bottom into the interior as though a diffusivity of Kd_min_tr (see below) were operating.

  • % mix_boundary_tracer_ale [logical] :: If true, in ALE mode mix the passive tracers in massless layers at the bottom into the interior as though a diffusivity of Kd_min_tr (see below) were operating.

  • % kd_bbl_tr [real] :: A bottom boundary layer tracer diffusivity that will allow for explicitly specified bottom fluxes [H2 T-1 ~> m2 s-1 or kg2 m-4 s-2]. The entrainment at the bottom is at least sqrt(Kd_BBL_tr*dt) over the same distance.

  • % kd_min_tr [real] :: A minimal diffusivity that should always be applied to tracers, especially in massless layers near the bottom [H Z T-1 ~> m2 s-1 or kg m-1 s-1].

  • % minimum_forcing_depth [real] :: The smallest depth over which heat and freshwater fluxes are applied [H ~> m or kg m-2].

  • % evap_cfl_limit [real] :: The largest fraction of a layer that can be evaporated in one time-step [nondim].

  • % halo_ts_diff [integer] :: The temperature, salinity and thickness halo size that must be valid for the diffusivity calculations.

  • % halo_diabatic [integer] :: The temperature, salinity, specific volume and thickness halo size that must be valid for the diabatic calculations, including vertical mixing and internal tide propagation.

  • % usekpp [logical] :: use CVMix/KPP diffusivities and non-local transport

  • % kppispassive [logical] :: If true, KPP is in passive mode, not changing answers.

  • % debug [logical] :: If true, write verbose checksums for debugging purposes.

  • % debugconservation [logical] :: If true, monitor conservation and extrema.

  • % tracer_tridiag [logical] :: If true, use tracer_vertdiff instead of tridiagTS for vertical diffusion of T and S.

  • % debug_energy_req [logical] :: If true, test the mixing energy requirement code.

  • % diag [type( diag_ctrl ),pointer] :: structure used to regulate timing of diagnostic output

  • % mlddensitydifference [real] :: Density difference used to determine MLD_user [R ~> kg m-3].

  • % dz_subml_n2 [real] :: The distance over which to calculate a diagnostic of the average stratification at the base of the mixed layer [Z ~> m].

  • % mld_en_vals [real(3)] :: Energy values for energy mixed layer diagnostics [R Z3 T-2 ~> J m-2].

  • % diabatic_diff_tendency_diag [logical] :: If true calculate diffusive tendency diagnostics.

  • % boundary_forcing_tendency_diag [logical] :: If true calculate frazil diagnostics.

  • % frazil_tendency_diag [logical] :: If true calculate frazil tendency diagnostics.

  • % diabatic_aux_csp [type( diabatic_aux_cs ),pointer] :: Control structure for a child module.

  • % int_tide_input_csp [type( int_tide_input_cs ),pointer] :: Control structure for a child module.

  • % int_tide_input [type( int_tide_input_type ),pointer] :: Control structure for a child module.

  • % set_diff_csp [type( set_diffusivity_cs ),pointer] :: Control structure for a child module.

  • % sponge_csp [type( sponge_cs ),pointer] :: Control structure for a child module.

  • % ale_sponge_csp [type( ale_sponge_cs ),pointer] :: Control structure for a child module.

  • % tracer_flow_csp [type( tracer_flow_control_cs ),pointer] :: Control structure for a child module.

  • % optics [type( optics_type ),pointer] :: Control structure for a child module.

  • % kpp_csp [type( kpp_cs ),pointer] :: Control structure for a child module.

  • % diapyc_en_rec_csp [type( diapyc_energy_req_cs ),pointer] :: Control structure for a child module.

  • % oda_incupd_csp [type( oda_incupd_cs ),pointer] :: Control structure for a child module.

  • % int_tide_csp [type( int_tide_cs ),pointer] :: Control structure for a child module.

  • % bulkmixedlayer [type( bulkmixedlayer_cs )] :: Bulk mixed layer control structure.

  • % cvmix_conv [type( cvmix_conv_cs )] :: CVMix convection control structure.

  • % epbl [type( energetic_pbl_cs )] :: Energetic PBL control structure.

  • % entrain_diffusive [type( entrain_diffusive_cs )] :: Diffusive entrainment control structure.

  • % geothermal [type( geothermal_cs )] :: Geothermal control structure.

  • % opacity [type( opacity_cs )] :: Opacity control structure.

  • % regularize_layers [type( regularize_layers_cs )] :: Regularize layer control structure.

  • % pass_hold_eb_ea [type(group_pass_type)] :: For group halo pass.

  • % pass_kv [type(group_pass_type)] :: For group halo pass.

  • % diag_grids_prev [type( diag_grid_storage )] :: Stores diagnostic grids at some previous point in the algorithm.

  • % kpp_nltheat [real(:,:,:),allocatable] :: KPP non-local transport for heat [nondim].

  • % kpp_nltscalar [real(:,:,:),allocatable] :: KPP non-local transport for scalars [nondim].

  • % kpp_buoy_flux [real(:,:,:),allocatable] :: KPP forcing buoyancy flux [L2 T-3 ~> m2 s-3].

  • % kpp_temp_flux [real(:,:),allocatable] :: KPP effective temperature flux [C H T-1 ~> degC m s-1 or degC kg m-2 s-1].

  • % kpp_salt_flux [real(:,:),allocatable] :: KPP effective salt flux [S H T-1 ~> ppt m s-1 or ppt kg m-2 s-1].

  • % time [type(time_type),pointer] :: Pointer to model time (needed for sponges)

Function/Subroutine Documentation

subroutine mom_diabatic_driver/diabatic(u, v, h, tv, Hml, fluxes, visc, ADp, CDp, dt, Time_end, G, GV, US, CS, stoch_CS, OBC, Waves)

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

Parameters:
  • g :: [inout] ocean grid structure

  • gv :: [in] ocean vertical grid structure

  • u :: [inout] zonal velocity [L T-1 ~> m s-1]

  • v :: [inout] meridional velocity [L T-1 ~> m s-1]

  • h :: [inout] thickness [H ~> m or kg m-2]

  • tv :: [inout] points to thermodynamic fields unused have NULL ptrs

  • hml :: Active mixed layer depth [Z ~> m]

  • fluxes :: [inout] points to forcing fields unused fields have NULL ptrs

  • visc :: [inout] Structure with vertical viscosities, BBL properties and related fields

  • adp :: [inout] Points to accelerations in momentum equations, to enable the later derived diagnostics, like energy budgets

  • cdp :: [inout] points to terms in continuity equations

  • dt :: [in] time increment [T ~> s]

  • time_end :: [in] Time at the end of the interval

  • us :: [in] A dimensional unit scaling type

  • cs :: module control structure

  • stoch_cs :: stochastic control structure

  • obc :: Open boundaries control structure.

  • waves :: Surface gravity waves

Call to:

mom_error_handler::calltree_waypoint diabatic_ale diabatic_ale_legacy diagnose_frazil_tendency mom_diabatic_aux::diagnosemldbydensitydifference mom_diabatic_aux::diagnosemldbyenergy mom_diapyc_energy_req::diapyc_energy_req_test id_clock_pass id_clock_set_diffusivity layered_diabatic mom_checksum_packages::mom_state_stats

subroutine mom_diabatic_driver/diabatic_ale_legacy(u, v, h, tv, Hml, fluxes, visc, ADp, CDp, dt, Time_end, G, GV, US, CS, stoch_CS, Waves)

Applies diabatic forcing and diapycnal mixing of temperature, salinity and other tracers for use with an ALE algorithm. This version uses an older set of algorithms compared with diabatic_ALE.

Parameters:
  • g :: [inout] ocean grid structure

  • gv :: [in] ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • u :: [inout] zonal velocity [L T-1 ~> m s-1]

  • v :: [inout] meridional velocity [L T-1 ~> m s-1]

  • h :: [inout] thickness [H ~> m or kg m-2]

  • tv :: [inout] points to thermodynamic fields unused have NULL ptrs

  • hml :: Active mixed layer depth [Z ~> m]

  • fluxes :: [inout] points to forcing fields unused fields have NULL ptrs

  • visc :: [inout] Structure with vertical viscosities, BBL properties and related fields

  • adp :: [inout] Points to accelerations in momentum equations, to enable the later derived diagnostics, like energy budgets

  • cdp :: [inout] points to terms in continuity equations

  • dt :: [in] time increment [T ~> s]

  • time_end :: [in] Time at the end of the interval

  • cs :: module control structure

  • stoch_cs :: stochastic control structure

  • waves :: Surface gravity waves

Call to:

mom_ale_sponge::apply_ale_sponge mom_oda_incupd::apply_oda_incupd mom_cvmix_conv::calculate_cvmix_conv mom_forcing_type::calculatebuoyancyflux2d mom_tracer_flow_control::call_tracer_column_fns mom_error_handler::calltree_enter mom_error_handler::calltree_leave mom_error_handler::calltree_waypoint diagnose_boundary_forcing_tendency diagnose_diabatic_diff_tendency mom_energetic_pbl::energetic_pbl_get_mld id_clock_differential_diff id_clock_geothermal id_clock_kpp id_clock_oda_incupd id_clock_remap id_clock_set_diffusivity id_clock_sponge id_clock_tracers id_clock_tridiag mom_cvmix_kpp::kpp_nonlocaltransport_saln mom_cvmix_kpp::kpp_nonlocaltransport_temp mom_checksum_packages::mom_state_stats mom_variables::mom_thermovar_chksum mom_opacity::optics_nbands mom_tracer_diabatic::tracer_vertdiff_eulerian

Called from:

diabatic

subroutine mom_diabatic_driver/diabatic_ale(u, v, h, tv, Hml, fluxes, visc, ADp, CDp, dt, Time_end, G, GV, US, CS, stoch_CS, Waves)

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

Parameters:
  • g :: [inout] ocean grid structure

  • gv :: [in] ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • u :: [inout] zonal velocity [L T-1 ~> m s-1]

  • v :: [inout] meridional velocity [L T-1 ~> m s-1]

  • h :: [inout] thickness [H ~> m or kg m-2]

  • tv :: [inout] points to thermodynamic fields unused have NULL ptrs

  • hml :: Active mixed layer depth [Z ~> m]

  • fluxes :: [inout] points to forcing fields unused fields have NULL ptrs

  • visc :: [inout] Structure with vertical viscosities, BBL properties and related fields

  • adp :: [inout] Points to accelerations in momentum equations, to enable the later derived diagnostics, like energy budgets

  • cdp :: [inout] points to terms in continuity equations

  • dt :: [in] time increment [T ~> s]

  • time_end :: [in] Time at the end of the interval

  • cs :: module control structure

  • stoch_cs :: stochastic control structure

  • waves :: Surface gravity waves

Call to:

mom_ale_sponge::apply_ale_sponge mom_oda_incupd::apply_oda_incupd mom_cvmix_conv::calculate_cvmix_conv mom_forcing_type::calculatebuoyancyflux2d mom_tracer_flow_control::call_tracer_column_fns mom_error_handler::calltree_enter mom_error_handler::calltree_leave mom_error_handler::calltree_waypoint diagnose_boundary_forcing_tendency diagnose_diabatic_diff_tendency mom_energetic_pbl::energetic_pbl_get_mld id_clock_geothermal id_clock_kpp id_clock_oda_incupd id_clock_pass id_clock_remap id_clock_set_diffusivity id_clock_sponge id_clock_tracers id_clock_tridiag mom_cvmix_kpp::kpp_nonlocaltransport_saln mom_cvmix_kpp::kpp_nonlocaltransport_temp mom_checksum_packages::mom_state_stats mom_variables::mom_thermovar_chksum mom_opacity::optics_nbands mom_tracer_diabatic::tracer_vertdiff_eulerian

Called from:

diabatic

subroutine mom_diabatic_driver/layered_diabatic(u, v, h, tv, Hml, fluxes, visc, ADp, CDp, dt, Time_end, G, GV, US, CS, Waves)

Imposes the diapycnal mass fluxes and the accompanying diapycnal advection of momentum and tracers using the original MOM6 algorithms.

Parameters:
  • g :: [inout] ocean grid structure

  • gv :: [in] ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • u :: [inout] zonal velocity [L T-1 ~> m s-1]

  • v :: [inout] meridional velocity [L T-1 ~> m s-1]

  • h :: [inout] thickness [H ~> m or kg m-2]

  • tv :: [inout] points to thermodynamic fields unused have NULL ptrs

  • hml :: Active mixed layer depth [Z ~> m]

  • fluxes :: [inout] points to forcing fields unused fields have NULL ptrs

  • visc :: [inout] Structure with vertical viscosities, BBL properties and related fields

  • adp :: [inout] Points to accelerations in momentum equations, to enable the later derived diagnostics, like energy budgets

  • cdp :: [inout] points to terms in continuity equations

  • dt :: [in] time increment [T ~> s]

  • time_end :: [in] Time at the end of the interval

  • cs :: module control structure

  • waves :: Surface gravity waves

Call to:

mom_oda_incupd::apply_oda_incupd mom_sponge::apply_sponge mom_bulk_mixed_layer::bulkmixedlayer mom_interface_heights::calc_derived_thermo mom_cvmix_conv::calculate_cvmix_conv mom_forcing_type::calculatebuoyancyflux2d mom_tracer_flow_control::call_tracer_column_fns mom_error_handler::calltree_enter mom_error_handler::calltree_leave mom_error_handler::calltree_waypoint diagnose_diabatic_diff_tendency mom_eos::eos_domain id_clock_differential_diff id_clock_entrain id_clock_geothermal id_clock_kpp id_clock_mixedlayer id_clock_oda_incupd id_clock_pass id_clock_remap id_clock_set_diffusivity id_clock_sponge id_clock_tracers id_clock_tridiag mom_cvmix_kpp::kpp_nonlocaltransport_saln mom_cvmix_kpp::kpp_nonlocaltransport_temp mom_checksum_packages::mom_state_stats mom_variables::mom_thermovar_chksum mom_regularize_layers::regularize_layers mom_tracer_diabatic::tracer_vertdiff

Called from:

diabatic

subroutine mom_diabatic_driver/extract_diabatic_member(CS, opacity_CSp, optics_CSp, evap_CFL_limit, minimum_forcing_depth, KPP_CSp, energetic_PBL_CSp, diabatic_aux_CSp, diabatic_halo, use_KPP)

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

Parameters:
  • cs :: [in] 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

  • kpp_csp :: A pointer to be set to the KPP CS

  • energetic_pbl_csp :: A pointer to be set to the ePBL CS

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

  • minimum_forcing_depth :: [out] The smallest depth over which heat and freshwater fluxes are applied [H ~> m or kg m-2].

  • diabatic_aux_csp :: A pointer to be set to the diabatic_aux control structure

  • diabatic_halo :: [out] The halo size where the diabatic algorithms assume thermodynamics properties are valid.

  • use_kpp :: [out] If true, diabatic is using KPP vertical mixing

Called from:

mom_hor_bnd_diffusion::hor_bnd_diffusion_init mom_neutral_diffusion::neutral_diffusion_init mom_offline_main::offline_transport_init

subroutine mom_diabatic_driver/adiabatic(h, tv, fluxes, dt, G, GV, US, CS)

Routine called for adiabatic physics.

Parameters:
  • g :: [inout] ocean grid structure

  • gv :: [in] ocean vertical grid structure

  • h :: [inout] thickness [H ~> m or kg m-2]

  • tv :: [inout] points to thermodynamic fields

  • fluxes :: [inout] boundary fluxes

  • dt :: [in] time step [T ~> s]

  • us :: [in] A dimensional unit scaling type

  • cs :: module control structure

Call to:

mom_tracer_flow_control::call_tracer_column_fns

subroutine mom_diabatic_driver/diagnose_diabatic_diff_tendency(tv, h, temp_old, saln_old, dt, G, GV, US, CS)

This routine diagnoses tendencies from application of diabatic diffusion using ALE algorithm. Note that layer thickness is not altered by diabatic diffusion.

Parameters:
  • g :: [in] ocean grid structure

  • gv :: [in] ocean vertical grid structure

  • tv :: [in] points to updated thermodynamic fields

  • h :: [in] thickness [H ~> m or kg m-2]

  • temp_old :: [in] temperature prior to diabatic physics [C ~> degC]

  • saln_old :: [in] salinity prior to diabatic physics [S ~> ppt]

  • dt :: [in] time step [T ~> s]

  • us :: [in] A dimensional unit scaling type

  • cs :: module control structure

Called from:

diabatic_ale diabatic_ale_legacy layered_diabatic

subroutine mom_diabatic_driver/diagnose_boundary_forcing_tendency(tv, h, temp_old, saln_old, h_old, dt, G, GV, US, CS)

This routine diagnoses tendencies from application of boundary fluxes. These impacts are generally 3d, in particular for penetrative shortwave. Other fluxes contribute 3d in cases when the layers vanish or are very thin, in which case we distribute the flux into k > 1 layers.

Parameters:
  • g :: [in] ocean grid structure

  • gv :: [in] ocean vertical grid structure

  • tv :: [in] points to updated thermodynamic fields

  • h :: [in] thickness after boundary flux application [H ~> m or kg m-2]

  • temp_old :: [in] temperature prior to boundary flux application [C ~> degC]

  • saln_old :: [in] salinity prior to boundary flux application [S ~> ppt]

  • h_old :: [in] thickness prior to boundary flux application [H ~> m or kg m-2]

  • dt :: [in] time step [T ~> s]

  • us :: [in] A dimensional unit scaling type

  • cs :: module control structure

Called from:

diabatic_ale diabatic_ale_legacy

subroutine mom_diabatic_driver/diagnose_frazil_tendency(tv, h, temp_old, dt, G, GV, US, CS)

This routine diagnoses tendencies for temperature and heat from frazil formation. This routine is called twice from within subroutine diabatic; at start and at end of the diabatic processes. The impacts from frazil are generally a function of depth. Hence, when checking heat budget, be sure to remove HFSIFRAZIL from HFDS in k=1.

Parameters:
  • g :: [in] ocean grid structure

  • gv :: [in] ocean vertical grid structure

  • tv :: [in] points to updated thermodynamic fields

  • h :: [in] thickness [H ~> m or kg m-2]

  • temp_old :: [in] temperature prior to frazil formation [C ~> degC]

  • dt :: [in] time step [T ~> s]

  • us :: [in] A dimensional unit scaling type

  • cs :: module control structure

Called from:

diabatic

subroutine mom_diabatic_driver/adiabatic_driver_init(Time, G, param_file, diag, CS, 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 :: [in] current model time

  • g :: [in] model grid structure

  • param_file :: [in] the file to parse for parameter values

  • diag :: [inout] regulates diagnostic output

  • cs :: module control structure

  • tracer_flow_csp :: pointer to control structure of the tracer flow control module

subroutine mom_diabatic_driver/diabatic_driver_init(Time, G, GV, US, param_file, useALEalgorithm, diag, ADp, CDp, CS, tracer_flow_CSp, sponge_CSp, ALE_sponge_CSp, oda_incupd_CSp, int_tide_CSp)

This routine initializes the diabatic driver module.

Parameters:
  • time :: model time

  • g :: [inout] model grid structure

  • gv :: [in] model vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • param_file :: [in] file to parse for parameter values

  • usealealgorithm :: [in] logical for whether to use ALE remapping

  • diag :: [inout] structure to regulate diagnostic output

  • adp :: [inout] pointers to accelerations in momentum equations, to enable diagnostics, like energy budgets

  • cdp :: [inout] 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

  • oda_incupd_csp :: pointer to the ocean data assimilation incremental update module control structure

  • int_tide_csp :: pointer to the internal tide structure

Call to:

mom_bulk_mixed_layer::bulkmixedlayer_init mom_cvmix_ddiff::cvmix_ddiff_is_used mom_cvmix_shear::cvmix_shear_is_used mom_geothermal::geothermal_init mom_verticalgrid::get_thickness_units id_clock_differential_diff id_clock_entrain id_clock_geothermal id_clock_kpp id_clock_mixedlayer id_clock_oda_incupd id_clock_pass id_clock_remap id_clock_set_diffusivity id_clock_sponge id_clock_tracers id_clock_tridiag mom_internal_tides::internal_tides_init mom_kappa_shear::kappa_shear_is_used mom_regularize_layers::regularize_layers_init

subroutine mom_diabatic_driver/register_diabatic_restarts(G, US, param_file, int_tide_CSp, restart_CSp)

Routine to register restarts, pass-through to children modules.

Parameters:
  • g :: [in] The ocean’s grid structure

  • us :: [in] A dimensional unit scaling type

  • param_file :: [in] A structure to parse for run-time parameters

  • int_tide_csp :: Internal tide control structure

  • restart_csp :: MOM restart control structure

Called from:

mom::initialize_mom

subroutine mom_diabatic_driver/diabatic_driver_end(CS)

Routine to close the diabatic driver module.

Parameters:

cs :: [inout] module control structure

Call to:

mom_geothermal::geothermal_end