mom_ale module reference

This module contains the main regridding routines.

More…

Data Types

ale_cs

ALE control structure.

Functions/Subroutines

ale_init()

This routine is typically called (from initialize_MOM in file MOM.F90) before the main time integration loop to initialize the regridding stuff.

ale_register_diags()

Initialize diagnostics for the ALE module.

adjustgridforintegrity()

Crudely adjust (initial) grid for integrity.

ale_end()

End of regridding (memory deallocation).

pre_ale_diagnostics()

Save any diagnostics of the state before ALE remapping.

pre_ale_adjustments()

Potentially do some preparatory work, such as convective adjustment, to clean up the model state before regridding.

ale_regrid()

Takes care of building a new grid.

ale_offline_inputs()

Regrid/remap stored fields used for offline tracer integrations.

ale_regrid_accelerated()

For a state-based coordinate, accelerate the process of regridding by repeatedly applying the grid calculation algorithm.

ale_remap_tracers()

This routine takes care of remapping all tracer variables between the old and the new grids.

ale_remap_set_h_vel()

This routine sets the thicknesses at velocity points used for vertical remapping.

ale_remap_set_h_vel_via_dz()

This routine sets the thicknesses at velocity points used for vertical remapping using a combination of the old grid and interface movements.

ale_remap_set_h_vel_partial()

Mask out the thicknesses at velocity points where they are below the minimum depth at adjacent tracer points.

ale_remap_set_h_vel_obc()

ale_remap_velocities()

This routine remaps velocity components between the old and the new grids, with thicknesses at velocity points taken to be arithmetic averages of tracer thicknesses.

ale_remap_interface_vals()

Interpolate to find an updated array of values at interfaces after remapping.

ale_remap_vertex_vals()

Interpolate to find an updated array of values at vertices of tracer cells after remapping.

apply_partial_cell_mask()

Mask out thicknesses to 0 when their running sum exceeds a specified value.

mask_near_bottom_vel()

Zero out velocities in a column in very thin layers near the seafloor.

ale_remap_scalar()

Remaps a single scalar between grids described by thicknesses h_src and h_dst.

ts_plm_edge_values()

Calculate edge values (top and bottom of layer) for T and S consistent with a PLM reconstruction in the vertical direction.

ale_plm_edge_values()

Calculate edge values (top and bottom of layer) 3d scalar array.

ts_ppm_edge_values()

Calculate edge values (top and bottom of layer) for T and S consistent with a PPM reconstruction in the vertical direction.

ale_initregridding()

Initializes regridding for the main ALE algorithm.

ale_getcoordinate()

Query the target coordinate interfaces positions.

ale_getcoordinateunits()

Query the target coordinate units.

ale_remap_init_conds()

Returns true if initial conditions should be regridded and remapped.

ale_update_regrid_weights()

Updates the weights for time filtering the new grid generated in regridding.

ale_updateverticalgridtype()

Update the vertical grid type with ALE information.

ale_writecoordinatefile()

Write the vertical coordinate information into a file.

ale_initthicknesstocoord()

Set h to coordinate values for fixed coordinate systems.

Detailed Description

Regridding comprises two steps: #. Interpolation and creation of a new grid based on target interface densities (or any other criterion).

  1. Remapping of quantities between old grid and new grid.

Original module written by Laurent White, 2008.06.09

Type Documentation

type mom_ale/ale_cs

ALE control structure.

Type fields:
  • % remap_uv_using_old_alg [logical] :: If true, uses the old “remapping via a delta z” method. If False, uses the new method that remaps between grids described by h.

  • % partial_cell_vel_remap [logical] :: If true, use partial cell thicknesses at velocity points that are masked out where they extend below the shallower of the neighboring bathymetry for remapping velocity.

  • % regrid_time_scale [real] :: The time-scale used in blending between the current (old) grid and the target (new) grid [T ~> s].

  • % regridcs [type( regridding_cs )] :: Regridding parameters and work arrays.

  • % remapcs [type( remapping_cs )] :: Remapping parameters and work arrays.

  • % vel_remapcs [type( remapping_cs )] :: Remapping parameters for velocities and work arrays.

  • % hybgen_unmixcs [type( hybgen_unmix_cs ),pointer] :: Parameters for hybgen remapping.

  • % use_hybgen_unmix [logical] :: If true, use the hybgen unmixing code before regridding.

  • % do_conv_adj [logical] :: If true, do convective adjustment before regridding.

  • % nk [integer] :: Used only for queries, not directly by this module.

  • % bbl_h_vel_mask [real] :: The thickness of a bottom boundary layer within which velocities in thin layers are zeroed out after remapping, following practice with Hybgen remapping, or a negative value to avoid such filtering altogether, in [H ~> m or kg m-2].

  • % h_vel_mask [real] :: A thickness at velocity points below which near-bottom layers are zeroed out after remapping, following the practice with Hybgen remapping, or a negative value to avoid such filtering altogether, in [H ~> m or kg m-2].

  • % remap_after_initialization [logical] :: Indicates whether to regrid/remap after initializing the state.

  • % answer_date [integer] :: The vintage of the expressions and order of arithmetic to use for remapping. Values below 20190101 result in the use of older, less accurate expressions that were in use at the end of 2018. Higher values result in the use of more robust and accurate forms of mathematically equivalent expressions.

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

  • % show_call_tree [logical] :: For debugging.

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

  • % id_tracer_remap_tendency [integer(:),allocatable] :: diagnostic id

  • % id_htracer_remap_tendency [integer(:),allocatable] :: diagnostic id

  • % id_htracer_remap_tendency_2d [integer(:),allocatable] :: diagnostic id

  • % do_tendency_diag [logical(:),allocatable] :: flag for doing diagnostics

  • % id_dzregrid [integer] :: diagnostic id

  • % id_u_preale [integer] :: diagnostic id for zonal velocity before ALE.

  • % id_v_preale [integer] :: diagnostic id for meridional velocity before ALE.

  • % id_h_preale [integer] :: diagnostic id for layer thicknesses before ALE.

  • % id_t_preale [integer] :: diagnostic id for temperatures before ALE.

  • % id_s_preale [integer] :: diagnostic id for salinities before ALE.

  • % id_e_preale [integer] :: diagnostic id for interface heights before ALE.

  • % id_vert_remap_h [integer] :: diagnostic id for layer thicknesses used for remapping

  • % id_vert_remap_h_tendency [integer] :: diagnostic id for layer thickness tendency due to ALE

Function/Subroutine Documentation

subroutine mom_ale/ale_init(param_file, GV, US, max_depth, CS)

This routine is typically called (from initialize_MOM in file MOM.F90) before the main time integration loop to initialize the regridding stuff. We read the MOM_input file to register the values of different regridding/remapping parameters.

Parameters:
  • param_file :: [in] Parameter file

  • gv :: [in] Ocean vertical grid structure

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

  • max_depth :: [in] The maximum depth of the ocean [Z ~> m].

  • cs :: Module control structure

Call to:

ale_initregridding mom_error_handler::calltree_enter mom_error_handler::calltree_leave mom_hybgen_unmix::init_hybgen_unmix

Called from:

mom_oda_driver_mod::init_oda

subroutine mom_ale/ale_register_diags(Time, G, GV, US, diag, CS)

Initialize diagnostics for the ALE module.

Parameters:
  • time :: [in] Time structure

  • g :: [in] Grid structure

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

  • gv :: [in] Ocean vertical grid structure

  • diag :: [in] Diagnostics control structure

  • cs :: Module control structure

Call to:

mom_verticalgrid::get_thickness_units

Called from:

mom::initialize_mom

subroutine mom_ale/adjustgridforintegrity(CS, G, GV, h)

Crudely adjust (initial) grid for integrity. This routine is typically called (from initialize_MOM in file MOM.F90) before the main time integration loop to initialize the regridding stuff. We read the MOM_input file to register the values of different regridding/remapping parameters.

Parameters:
  • cs :: [in] Regridding parameters and options

  • g :: [in] Ocean grid informations

  • gv :: [in] Ocean vertical grid structure

  • h :: [inout] Current 3D grid thickness that are to be adjusted [H ~> m or kg m-2]

subroutine mom_ale/ale_end(CS)

End of regridding (memory deallocation). This routine is typically called (from MOM_end in file MOM.F90) after the main time integration loop to deallocate the regridding stuff.

Parameters:

cs :: module control structure

Call to:

mom_hybgen_unmix::end_hybgen_unmix

subroutine mom_ale/pre_ale_diagnostics(G, GV, US, h, u, v, tv, CS)

Save any diagnostics of the state before ALE remapping. These diagnostics are mostly used for debugging.

Parameters:
  • g :: [in] Ocean grid informations

  • gv :: [in] Ocean vertical grid structure

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

  • h :: [inout] Current 3D grid obtained after the last time step [H ~> m or kg m-2]

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

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

  • tv :: [inout] Thermodynamic variable structure

  • cs :: Regridding parameters and options

Called from:

mom::step_mom_thermo

subroutine mom_ale/pre_ale_adjustments(G, GV, US, h, tv, Reg, CS, u, v)

Potentially do some preparatory work, such as convective adjustment, to clean up the model state before regridding.

Parameters:
  • g :: [in] Ocean grid informations

  • gv :: [in] Ocean vertical grid structure

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

  • h :: [inout] Current 3D grid obtained after the last time step [H ~> m or kg m-2]

  • tv :: [inout] Thermodynamic variable structure

  • reg :: Tracer registry structure

  • cs :: Regridding parameters and options

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

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

Call to:

mom_hybgen_unmix::hybgen_unmix

subroutine mom_ale/ale_regrid(G, GV, US, h, h_new, dzRegrid, tv, CS, frac_shelf_h, PCM_cell)

Takes care of building a new grid. The creation of the new grid can be based on z coordinates, target interface densities, sigma coordinates or any arbitrary coordinate system.

Parameters:
  • g :: [in] Ocean grid informations

  • gv :: [in] Ocean vertical grid structure

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

  • h :: [in] Layer thicknesses in 3D grid before regridding [H ~> m or kg m-2]

  • h_new :: [out] Layer thicknesses in 3D grid after regridding [H ~> m or kg m-2]

  • dzregrid :: [out] The change in grid interface positions due to regridding, in the same units as thicknesses [H ~> m or kg m-2]

  • tv :: [inout] Thermodynamic variable structure

  • cs :: Regridding parameters and options

  • frac_shelf_h :: [in] Fractional ice shelf coverage [nondim]

  • pcm_cell :: [out] If true, use PCM remapping in a cell.

Call to:

mom_error_handler::calltree_enter mom_error_handler::calltree_leave mom_diag_mediator::query_averaging_enabled

subroutine mom_ale/ale_offline_inputs(CS, G, GV, US, h, tv, Reg, uhtr, vhtr, Kd, debug, OBC)

Regrid/remap stored fields used for offline tracer integrations. These input fields are assumed to have the same layer thicknesses at the end of the last offline interval (which should be a Zstar grid). This routine builds a grid on the runtime specified vertical coordinate.

Parameters:
  • cs :: Regridding parameters and options

  • g :: [in] Ocean grid informations

  • gv :: [in] Ocean vertical grid structure

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

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

  • tv :: [inout] Thermodynamic variable structure

  • reg :: Tracer registry structure

  • uhtr :: [inout] Zonal mass fluxes [H L2 ~> m3 or kg]

  • vhtr :: [inout] Meridional mass fluxes [H L2 ~> m3 or kg]

  • kd :: [inout] Input diffusivities [H Z T-1 ~> m2 s-1 or kg m-1 s-1]

  • debug :: [in] If true, then turn checksums

  • obc :: Open boundary structure

Call to:

ale_remap_scalar ale_remap_tracers mom_error_handler::calltree_leave mom_error_handler::calltree_waypoint mom_debugging::check_column_integrals

subroutine mom_ale/ale_regrid_accelerated(CS, G, GV, US, h, tv, n_itt, u, v, OBC, Reg, dt, dzRegrid, initial)

For a state-based coordinate, accelerate the process of regridding by repeatedly applying the grid calculation algorithm.

Parameters:
  • cs :: ALE control structure

  • g :: [inout] Ocean grid

  • gv :: [in] Vertical grid

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

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

  • tv :: [inout] Thermo vars (T/S/EOS)

  • n_itt :: [in] Number of times to regrid

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

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

  • obc :: Open boundary structure

  • reg :: Tracer registry to remap onto new grid

  • dt :: [in] Model timestep to provide a timescale for regridding [T ~> s]

  • dzregrid :: [inout] Final change in interface positions [H ~> m or kg m-2]

  • initial :: [in] Whether we’re being called from an initialization routine (and expect diagnostics to work)

Call to:

ale_remap_set_h_vel ale_remap_set_h_vel_via_dz ale_remap_tracers ale_remap_velocities ale_update_regrid_weights mom_interface_heights::calc_derived_thermo

Called from:

mom_state_initialization::mom_initialize_state

subroutine mom_ale/ale_remap_tracers(CS, G, GV, h_old, h_new, Reg, debug, dt, PCM_cell)

This routine takes care of remapping all tracer variables between the old and the new grids. This routine is called during initialization of the model at time=0, to remap initial conditions to the model grid. It is also called during a time step to update the state.

Parameters:
  • cs :: [in] ALE control structure

  • g :: [in] Ocean grid structure

  • gv :: [in] Ocean vertical grid structure

  • h_old :: [in] Thickness of source grid [H ~> m or kg m-2]

  • h_new :: [in] Thickness of destination grid [H ~> m or kg m-2]

  • reg :: Tracer registry structure

  • debug :: [in] If true, show the call tree

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

  • pcm_cell :: [in] Use PCM remapping in cells where true

Call to:

mom_error_handler::calltree_enter mom_error_handler::calltree_leave mom_error_handler::calltree_waypoint

Called from:

ale_offline_inputs ale_regrid_accelerated mom_offline_main::offline_advection_ale

subroutine mom_ale/ale_remap_set_h_vel(CS, G, GV, h_new, h_u, h_v, OBC, debug)

This routine sets the thicknesses at velocity points used for vertical remapping.

Parameters:
  • cs :: [in] ALE control structure

  • g :: [in] Ocean grid structure

  • gv :: [in] Ocean vertical grid structure

  • h_new :: [in] Thickness at tracer points of the grid being interpolated to velocity points [H ~> m or kg m-2]

  • h_u :: [inout] Grid thickness at zonal velocity

  • h_v :: [inout] Grid thickness at meridional velocity

  • obc :: Open boundary structure

  • debug :: [in] If true, show the call tree

Call to:

ale_remap_set_h_vel_obc ale_remap_set_h_vel_partial mom_error_handler::calltree_enter mom_error_handler::calltree_leave

Called from:

ale_regrid_accelerated

subroutine mom_ale/ale_remap_set_h_vel_via_dz(CS, G, GV, h_new, h_u, h_v, OBC, h_old, dzInterface, debug)

This routine sets the thicknesses at velocity points used for vertical remapping using a combination of the old grid and interface movements.

Parameters:
  • cs :: [in] ALE control structure

  • g :: [in] Ocean grid structure

  • gv :: [in] Ocean vertical grid structure

  • h_new :: [in] Thickness at tracer points of the grid being interpolated to velocity points [H ~> m or kg m-2]

  • h_u :: [inout] Grid thickness at zonal velocity

  • h_v :: [inout] Grid thickness at meridional velocity

  • obc :: Open boundary structure

  • h_old :: [in] Thickness of source grid when generating

  • dzinterface :: [in] Change in interface position

  • debug :: [in] If true, show the call tree

Call to:

ale_remap_set_h_vel_obc ale_remap_set_h_vel_partial mom_error_handler::calltree_enter mom_error_handler::calltree_leave

Called from:

ale_regrid_accelerated

subroutine mom_ale/ale_remap_set_h_vel_partial(CS, G, GV, h_mask, h_u, h_v)

Mask out the thicknesses at velocity points where they are below the minimum depth at adjacent tracer points.

Parameters:
  • cs :: [in] ALE control structure

  • g :: [in] Ocean grid structure

  • gv :: [in] Ocean vertical grid structure

  • h_mask :: [in] Thickness at tracer points used to apply the partial cell masking [H ~> m or kg m-2]

  • h_u :: [inout] Grid thickness at zonal velocity

  • h_v :: [inout] Grid thickness at meridional velocity

Call to:

apply_partial_cell_mask

Called from:

ale_remap_set_h_vel ale_remap_set_h_vel_via_dz

subroutine mom_ale/ale_remap_set_h_vel_obc(G, GV, h_new, h_u, h_v, OBC)
Parameters:
  • g :: [in] Ocean grid structure

  • gv :: [in] Ocean vertical grid structure

  • h_new :: [in] Thickness at tracer points of the grid being interpolated to velocity points [H ~> m or kg m-2]

  • h_u :: [inout] Grid thickness at zonal velocity

  • h_v :: [inout] Grid thickness at meridional velocity

  • obc :: Open boundary structure

Call to:

mom_open_boundary::obc_direction_n

Called from:

ale_remap_set_h_vel ale_remap_set_h_vel_via_dz

subroutine mom_ale/ale_remap_velocities(CS, G, GV, h_old_u, h_old_v, h_new_u, h_new_v, u, v, debug)

This routine remaps velocity components between the old and the new grids, with thicknesses at velocity points taken to be arithmetic averages of tracer thicknesses. This routine may be called during initialization of the model at time=0, to remap initial conditions to the model grid. It is also called during a time step to update the state.

Parameters:
  • cs :: [in] ALE control structure

  • g :: [in] Ocean grid structure

  • gv :: [in] Ocean vertical grid structure

  • h_old_u :: [in] Source grid thickness at zonal

  • h_old_v :: [in] Source grid thickness at meridional

  • h_new_u :: [in] Destination grid thickness at zonal

  • h_new_v :: [in] Destination grid thickness at meridional

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

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

  • debug :: [in] If true, show the call tree

Call to:

mom_error_handler::calltree_enter mom_error_handler::calltree_leave mom_error_handler::calltree_waypoint mask_near_bottom_vel

Called from:

ale_regrid_accelerated mom_dynamics_split_rk2::remap_dyn_split_rk2_aux_vars

subroutine mom_ale/ale_remap_interface_vals(CS, G, GV, h_old, h_new, int_val)

Interpolate to find an updated array of values at interfaces after remapping.

Parameters:
  • cs :: [in] ALE control structure

  • g :: [in] Ocean grid structure

  • gv :: [in] Ocean vertical grid structure

  • h_old :: [in] Thickness of source grid [H ~> m or kg m-2]

  • h_new :: [in] Thickness of destination grid [H ~> m or kg m-2]

  • int_val :: [inout] The interface values to interpolate [A]

Called from:

mom_set_visc::remap_vertvisc_aux_vars

subroutine mom_ale/ale_remap_vertex_vals(CS, G, GV, h_old, h_new, vert_val)

Interpolate to find an updated array of values at vertices of tracer cells after remapping.

Parameters:
  • cs :: [in] ALE control structure

  • g :: [in] Ocean grid structure

  • gv :: [in] Ocean vertical grid structure

  • h_old :: [in] Thickness of source grid [H ~> m or kg m-2]

  • h_new :: [in] Thickness of destination grid [H ~> m or kg m-2]

  • vert_val :: [inout] The interface values to interpolate [A]

Called from:

mom_set_visc::remap_vertvisc_aux_vars

subroutine mom_ale/apply_partial_cell_mask(h1, h_mask)

Mask out thicknesses to 0 when their running sum exceeds a specified value.

Parameters:
  • h1 :: [inout] A column of thicknesses to be masked out after their running vertical sum exceeds h_mask [H ~> m or kg m-2]

  • h_mask :: [in] The depth after which the thicknesses in h1 are masked out [H ~> m or kg m-2]

Called from:

ale_remap_set_h_vel_partial

subroutine mom_ale/mask_near_bottom_vel(vel, h, h_BBL, h_thin, nk)

Zero out velocities in a column in very thin layers near the seafloor.

Parameters:
  • nk :: [in] The number of layers in this column

  • vel :: [inout] The velocity component being zeroed out [L T-1 ~> m s-1]

  • h :: [in] The layer thicknesses at velocity points [H ~> m or kg m-2]

  • h_bbl :: [in] The thickness of the near-bottom region over which to apply the filtering [H ~> m or kg m-2]

  • h_thin :: [in] A layer thickness below which the filtering is applied [H ~> m or kg m-2]

Called from:

ale_remap_velocities

subroutine mom_ale/ale_remap_scalar(CS, G, GV, nk_src, h_src, s_src, h_dst, s_dst, all_cells, old_remap, answers_2018, answer_date, h_neglect, h_neglect_edge)

Remaps a single scalar between grids described by thicknesses h_src and h_dst. h_dst must be dimensioned as a model array with GVke layers while h_src can have an arbitrary number of layers specified by nk_src.

Parameters:
  • cs :: [in] Remapping control structure

  • g :: [in] Ocean grid structure

  • gv :: [in] Ocean vertical grid structure

  • nk_src :: [in] Number of levels on source grid

  • h_src :: [in] Level thickness of source grid [H ~> m or kg m-2] or other units if H_neglect is provided

  • s_src :: [in] Scalar on source grid, in arbitrary units [A]

  • h_dst :: [in] Level thickness of destination grid in the same units as h_src, often [H ~> m or kg m-2]

  • s_dst :: [inout] Scalar on destination grid, in the same arbitrary units as s_src [A]

  • all_cells :: [in] If false, only reconstruct for non-vanished cells. Use all vanished layers otherwise (default).

  • old_remap :: [in] If true, use the old “remapping_core_w” method, otherwise use “remapping_core_h”.

  • answers_2018 :: [in] If true, use the order of arithmetic and expressions that recover the answers for remapping from the end of 2018. Otherwise, use more robust forms of the same expressions.

  • answer_date :: [in] The vintage of the expressions to use for remapping

  • h_neglect :: [in] A negligibly small thickness used in remapping cell reconstructions, in the same units as h_src, often [H ~> m or kg m-2]

  • h_neglect_edge :: [in] A negligibly small thickness used in remapping edge value calculations, in the same units as h_src, often [H ~> m or kg m-2]

Call to:

mom_remapping::dzfromh1h2

Called from:

ale_offline_inputs mom_tracer_initialization_from_z::mom_initialize_tracer_from_z

subroutine mom_ale/ts_plm_edge_values(CS, S_t, S_b, T_t, T_b, G, GV, tv, h, bdry_extrap)

Calculate edge values (top and bottom of layer) for T and S consistent with a PLM reconstruction in the vertical direction. Boundary reconstructions are PCM unless bdry_extrap is true.

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

  • gv :: [in] Ocean vertical grid structure

  • cs :: [inout] module control structure

  • s_t :: [inout] Salinity at the top edge of each layer [S ~> ppt]

  • s_b :: [inout] Salinity at the bottom edge of each layer [S ~> ppt]

  • t_t :: [inout] Temperature at the top edge of each layer [C ~> degC]

  • t_b :: [inout] Temperature at the bottom edge of each layer [C ~> degC]

  • tv :: [in] thermodynamics structure

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

  • bdry_extrap :: [in] If true, use high-order boundary extrapolation within boundary cells

Call to:

ale_plm_edge_values

Called from:

mom_pressureforce_fv::pressureforce_fv_bouss mom_pressureforce_fv::pressureforce_fv_nonbouss mom_state_initialization::trim_for_ice

subroutine mom_ale/ale_plm_edge_values(CS, G, GV, h, Q, bdry_extrap, Q_t, Q_b)

Calculate edge values (top and bottom of layer) 3d scalar array. Boundary reconstructions are PCM unless bdry_extrap is true.

Parameters:
  • cs :: [in] module control structure

  • g :: [in] ocean grid structure

  • gv :: [in] Ocean vertical grid structure

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

  • q :: [in] 3d scalar array, in arbitrary units [A]

  • bdry_extrap :: [in] If true, use high-order boundary extrapolation within boundary cells

  • q_t :: [inout] Scalar at the top edge of each layer [A]

  • q_b :: [inout] Scalar at the bottom edge of each layer [A]

Call to:

plm_functions::plm_extrapolate_slope plm_functions::plm_monotonized_slope plm_functions::plm_slope_wa

Called from:

ts_plm_edge_values

subroutine mom_ale/ts_ppm_edge_values(CS, S_t, S_b, T_t, T_b, G, GV, tv, h, bdry_extrap)

Calculate edge values (top and bottom of layer) for T and S consistent with a PPM reconstruction in the vertical direction. Boundary reconstructions are PCM unless bdry_extrap is true.

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

  • gv :: [in] Ocean vertical grid structure

  • cs :: [inout] module control structure

  • s_t :: [inout] Salinity at the top edge of each layer [S ~> ppt]

  • s_b :: [inout] Salinity at the bottom edge of each layer [S ~> ppt]

  • t_t :: [inout] Temperature at the top edge of each layer [C ~> degC]

  • t_b :: [inout] Temperature at the bottom edge of each layer [C ~> degC]

  • tv :: [in] thermodynamics structure

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

  • bdry_extrap :: [in] If true, use high-order boundary extrapolation within boundary cells

Call to:

regrid_edge_values::edge_values_implicit_h4 ppm_functions::ppm_boundary_extrapolation ppm_functions::ppm_reconstruction

Called from:

mom_pressureforce_fv::pressureforce_fv_bouss mom_pressureforce_fv::pressureforce_fv_nonbouss

subroutine mom_ale/ale_initregridding(GV, US, max_depth, param_file, mdl, regridCS)

Initializes regridding for the main ALE algorithm.

Parameters:
  • gv :: [in] Ocean vertical grid structure

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

  • max_depth :: [in] The maximum depth of the ocean [Z ~> m].

  • param_file :: [in] parameter file

  • mdl :: [in] Name of calling module

  • regridcs :: [out] Regridding parameters and work arrays

Called from:

ale_init

function mom_ale/ale_getcoordinate(CS) [real]

Query the target coordinate interfaces positions.

Parameters:

cs :: module control structure

Return:

undefined :: The coordinate positions, in the appropriate units of the target coordinate, e.g. [Z ~> m] for z*, non-dimensional for sigma, etc.

function mom_ale/ale_getcoordinateunits(CS) [character(len=20)]

Query the target coordinate units.

Parameters:

cs :: module control structure

function mom_ale/ale_remap_init_conds(CS) [logical]

Returns true if initial conditions should be regridded and remapped.

Parameters:

cs :: module control structure

subroutine mom_ale/ale_update_regrid_weights(dt, CS)

Updates the weights for time filtering the new grid generated in regridding.

Parameters:
  • dt :: [in] Time-step used between ALE calls [T ~> s]

  • cs :: ALE control structure

Called from:

ale_regrid_accelerated mom::step_mom_thermo

subroutine mom_ale/ale_updateverticalgridtype(CS, GV)

Update the vertical grid type with ALE information. This subroutine sets information in the verticalGrid_type to be consistent with the use of ALE mode.

Parameters:
  • cs :: ALE control structure

  • gv :: vertical grid information

Called from:

mom_oda_driver_mod::init_oda

subroutine mom_ale/ale_writecoordinatefile(CS, GV, directory)

Write the vertical coordinate information into a file. This subroutine writes out a file containing any available data related to the vertical grid used by the MOM ocean model when in ALE mode.

Parameters:
  • cs :: module control structure

  • gv :: [in] ocean vertical grid structure

  • directory :: [in] directory for writing grid info

subroutine mom_ale/ale_initthicknesstocoord(CS, G, GV, h, height_units)

Set h to coordinate values for fixed coordinate systems.

Parameters:
  • cs :: [inout] module control structure

  • g :: [in] module grid structure

  • gv :: [in] Ocean vertical grid structure

  • h :: [out] layer thickness in thickness units [H ~> m or kg m-2] or height units [Z ~> m]

  • height_units :: [in] If present and true, the thicknesses are in height units

Call to:

mom_regridding::getstaticthickness

Called from:

mom_oda_driver_mod::init_oda