mom_domains module reference

Describes the decomposed MOM domain and has routines for communications across PEs.

More…

Data Types

mom_domain_type

The MOM_domain_type contains information about the domain decompositoin.

Functions/Subroutines

pass_var_3d()

pass_var_3d does a halo update for a three-dimensional array.

pass_var_2d()

pass_var_2d does a halo update for a two-dimensional array.

pass_var_start_2d()

pass_var_start_2d starts a halo update for a two-dimensional array.

pass_var_start_3d()

pass_var_start_3d starts a halo update for a three-dimensional array.

pass_var_complete_2d()

pass_var_complete_2d completes a halo update for a two-dimensional array.

pass_var_complete_3d()

pass_var_complete_3d completes a halo update for a three-dimensional array.

pass_vector_2d()

pass_vector_2d does a halo update for a pair of two-dimensional arrays representing the compontents of a two-dimensional horizontal vector.

fill_vector_symmetric_edges_2d()

fill_vector_symmetric_edges_2d does an usual set of halo updates that only fill in the values at the edge of a pair of symmetric memory two-dimensional arrays representing the compontents of a two-dimensional horizontal vector. If symmetric memory is not being used, this subroutine does nothing except to possibly turn optional cpu clocks on or off.

pass_vector_3d()

pass_vector_3d does a halo update for a pair of three-dimensional arrays representing the compontents of a three-dimensional horizontal vector.

pass_vector_start_2d()

pass_vector_start_2d starts a halo update for a pair of two-dimensional arrays representing the compontents of a two-dimensional horizontal vector.

pass_vector_start_3d()

pass_vector_start_3d starts a halo update for a pair of three-dimensional arrays representing the compontents of a three-dimensional horizontal vector.

pass_vector_complete_2d()

pass_vector_complete_2d completes a halo update for a pair of two-dimensional arrays representing the compontents of a two-dimensional horizontal vector.

pass_vector_complete_3d()

pass_vector_complete_3d completes a halo update for a pair of three-dimensional arrays representing the compontents of a three-dimensional horizontal vector.

create_var_group_pass_2d()

create_var_group_pass_2d sets up a group of two-dimensional array halo updates.

create_var_group_pass_3d()

create_var_group_pass_3d sets up a group of three-dimensional array halo updates.

create_vector_group_pass_2d()

create_vector_group_pass_2d sets up a group of two-dimensional vector halo updates.

create_vector_group_pass_3d()

create_vector_group_pass_3d sets up a group of three-dimensional vector halo updates.

do_group_pass()

do_group_pass carries out a group halo update.

start_group_pass()

start_group_pass starts out a group halo update.

complete_group_pass()

complete_group_pass completes a group halo update.

mom_domains_init()

MOM_domains_init initalizes a MOM_domain_type variable, based on the information read in from a param_file_type, and optionally returns data describing various’ properties of the domain type.

clone_md_to_md()

clone_MD_to_MD copies one MOM_domain_type into another, while allowing some properties of the new type to differ from the original one.

clone_md_to_d2d()

clone_MD_to_d2D uses information from a MOM_domain_type to create a new domain2d type, while allowing some properties of the new type to differ from the original one.

get_domain_extent()

Returns various data that has been stored in a MOM_domain_type.

get_domain_extent_dsamp2()

get_simple_array_i_ind()

Return the (potentially symmetric) computational domain i-bounds for an array passed without index specifications (i.e.

get_simple_array_j_ind()

Return the (potentially symmetric) computational domain j-bounds for an array passed without index specifications (i.e.

get_global_shape()

Returns the global shape of h-point arrays.

Detailed Description

Describes the decomposed MOM domain and has routines for communications across PEs.

Type Documentation

type mom_domains/mom_domain_type

The MOM_domain_type contains information about the domain decompositoin.

Type fields
  • % mpp_domain [type(domain2d),pointer] :: The FMS domain with halos on this processor, centered at h points.

  • % mpp_domain_d2 [type(domain2d),pointer] :: A coarse FMS domain with halos on this processor, centered at h points.

  • % niglobal [integer] :: The total horizontal i-domain size.

  • % njglobal [integer] :: The total horizontal j-domain size.

  • % nihalo [integer] :: The i-halo size in memory.

  • % njhalo [integer] :: The j-halo size in memory.

  • % symmetric [logical] :: True if symmetric memory is used with this domain.

  • % nonblocking_updates [logical] :: If true, non-blocking halo updates are allowed. The default is .false. (for now).

  • % thin_halo_updates [logical] :: If true, optional arguments may be used to specify the width of the halos that are updated with each call.

  • % layout [integer(2)] :: This domain’s processor layout. This is saved to enable the construction of related new domains with different resolutions or other properties.

  • % io_layout [integer(2)] :: The IO-layout used with this domain.

  • % x_flags [integer] :: Flag that specifies the properties of the domain in the i-direction in a define_domain call.

  • % y_flags [integer] :: Flag that specifies the properties of the domain in the j-direction in a define_domain call.

  • % maskmap [logical(:,:),pointer] :: A pointer to an array indicating which logical processors are actually used for the ocean code. The other logical processors would be contain only land points and are not assigned to actual processors. This need not be assigned if all logical processors are used.

Function/Subroutine Documentation

subroutine mom_domains/pass_var_3d(array, MOM_dom, sideflag, complete, position, halo, clock)

pass_var_3d does a halo update for a three-dimensional array.

Parameters
  • array :: [inout] The array which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • sideflag :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH. For example, TO_EAST sends the data to the processor to the east, sothe halos on the western side are filled. TO_ALL is the default if sideflag is omitted.

  • complete :: [in] An optional argument indicating whether the halo updates should be completed before progress resumes. Omitting complete is the same as setting complete to .true.

  • position :: [in] An optional argument indicating the position. This is CENTER by default and is often CORNER, but could also be EAST_FACE or NORTH_FACE.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Call to

to_all

subroutine mom_domains/pass_var_2d(array, MOM_dom, sideflag, complete, position, halo, inner_halo, clock)

pass_var_2d does a halo update for a two-dimensional array.

Parameters
  • array :: [inout] The array which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • sideflag :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if sideflag is omitted.

  • complete :: [in] An optional argument indicating whether the halo updates should be completed before progress resumes. Omitting complete is the same as setting complete to .true.

  • position :: [in] An optional argument indicating the position. This is CENTER by default and is often CORNER, but could also be EAST_FACE or NORTH_FACE.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • inner_halo :: [in] The size of an inner halo to avoid updating, or 0 to avoid updating symmetric memory computational domain points. Setting this >=0 also enforces that complete=.true.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Call to

mom_error_handler::mom_error to_all

function mom_domains/pass_var_start_2d(array, MOM_dom, sideflag, position, complete, halo, clock) [integer]

pass_var_start_2d starts a halo update for a two-dimensional array.

Parameters
  • array :: [inout] The array which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • sideflag :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if sideflag is omitted.

  • position :: [in] An optional argument indicating the position. This is CENTER by default and is often CORNER, but could also be EAST_FACE or NORTH_FACE.

  • complete :: [in] An optional argument indicating whether the halo updates should be completed before progress resumes. Omitting complete is the same as setting complete to .true.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Return

undefined :: The integer index for this update.

Call to

to_all

function mom_domains/pass_var_start_3d(array, MOM_dom, sideflag, position, complete, halo, clock) [integer]

pass_var_start_3d starts a halo update for a three-dimensional array.

Parameters
  • array :: [inout] The array which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • sideflag :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if sideflag is omitted.

  • position :: [in] An optional argument indicating the position. This is CENTER by default and is often CORNER, but could also be EAST_FACE or NORTH_FACE.

  • complete :: [in] An optional argument indicating whether the halo updates should be completed before progress resumes. Omitting complete is the same as setting complete to .true.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Return

undefined :: The integer index for this update.

Call to

to_all

subroutine mom_domains/pass_var_complete_2d(id_update, array, MOM_dom, sideflag, position, halo, clock)

pass_var_complete_2d completes a halo update for a two-dimensional array.

Parameters
  • id_update :: [in] The integer id of this update which has been returned from a previous call to pass_var_start()..

  • array :: [inout] The array which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • sideflag :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if sideflag is omitted.

  • position :: [in] An optional argument indicating the position. This is CENTER by default and is often CORNER, but could also be EAST_FACE or NORTH_FACE.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Call to

to_all

subroutine mom_domains/pass_var_complete_3d(id_update, array, MOM_dom, sideflag, position, halo, clock)

pass_var_complete_3d completes a halo update for a three-dimensional array.

Parameters
  • id_update :: [in] The integer id of this update which has been returned from a previous call to pass_var_start()..

  • array :: [inout] The array which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • sideflag :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if sideflag is omitted.

  • position :: [in] An optional argument indicating the position. This is CENTER by default and is often CORNER, but could also be EAST_FACE or NORTH_FACE.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Call to

to_all

subroutine mom_domains/pass_vector_2d(u_cmpt, v_cmpt, MOM_dom, direction, stagger, complete, halo, clock)

pass_vector_2d does a halo update for a pair of two-dimensional arrays representing the compontents of a two-dimensional horizontal vector.

Parameters
  • u_cmpt :: [inout] The nominal zonal (u) component of the vector pair which is having its halos points exchanged.

  • v_cmpt :: [inout] The nominal meridional (v) component of the vector pair which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • direction :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH, possibly plus SCALAR_PAIR if these are paired non-directional scalars discretized at the typical vector component locations. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if omitted.

  • stagger :: [in] An optional flag, which may be one of A_GRID, BGRID_NE, or CGRID_NE, indicating where the two components of the vector are discretized. Omitting stagger is the same as setting it to CGRID_NE.

  • complete :: [in] An optional argument indicating whether the halo updates should be completed before progress resumes. Omitting complete is the same as setting complete to .true.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Call to

to_all

subroutine mom_domains/fill_vector_symmetric_edges_2d(u_cmpt, v_cmpt, MOM_dom, stagger, scalar, clock)

fill_vector_symmetric_edges_2d does an usual set of halo updates that only fill in the values at the edge of a pair of symmetric memory two-dimensional arrays representing the compontents of a two-dimensional horizontal vector. If symmetric memory is not being used, this subroutine does nothing except to possibly turn optional cpu clocks on or off.

Parameters
  • u_cmpt :: [inout] The nominal zonal (u) component of the vector pair which is having its halos points exchanged.

  • v_cmpt :: [inout] The nominal meridional (v) component of the vector pair which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • stagger :: [in] An optional flag, which may be one of A_GRID, BGRID_NE, or CGRID_NE, indicating where the two components of the vector are discretized. Omitting stagger is the same as setting it to CGRID_NE.

  • scalar :: [in] An optional argument indicating whether.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Call to

to_all

subroutine mom_domains/pass_vector_3d(u_cmpt, v_cmpt, MOM_dom, direction, stagger, complete, halo, clock)

pass_vector_3d does a halo update for a pair of three-dimensional arrays representing the compontents of a three-dimensional horizontal vector.

Parameters
  • u_cmpt :: [inout] The nominal zonal (u) component of the vector pair which is having its halos points exchanged.

  • v_cmpt :: [inout] The nominal meridional (v) component of the vector pair which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • direction :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH, possibly plus SCALAR_PAIR if these are paired non-directional scalars discretized at the typical vector component locations. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if omitted.

  • stagger :: [in] An optional flag, which may be one of A_GRID, BGRID_NE, or CGRID_NE, indicating where the two components of the vector are discretized. Omitting stagger is the same as setting it to CGRID_NE.

  • complete :: [in] An optional argument indicating whether the halo updates should be completed before progress resumes. Omitting complete is the same as setting complete to .true.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Call to

to_all

function mom_domains/pass_vector_start_2d(u_cmpt, v_cmpt, MOM_dom, direction, stagger, complete, halo, clock) [integer]

pass_vector_start_2d starts a halo update for a pair of two-dimensional arrays representing the compontents of a two-dimensional horizontal vector.

Parameters
  • u_cmpt :: [inout] The nominal zonal (u) component of the vector pair which is having its halos points exchanged.

  • v_cmpt :: [inout] The nominal meridional (v) component of the vector pair which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • direction :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH, possibly plus SCALAR_PAIR if these are paired non-directional scalars discretized at the typical vector component locations. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if omitted.

  • stagger :: [in] An optional flag, which may be one of A_GRID, BGRID_NE, or CGRID_NE, indicating where the two components of the vector are discretized. Omitting stagger is the same as setting it to CGRID_NE.

  • complete :: [in] An optional argument indicating whether the halo updates should be completed before progress resumes. Omitting complete is the same as setting complete to .true.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Return

undefined :: The integer index for this update.

Call to

to_all

function mom_domains/pass_vector_start_3d(u_cmpt, v_cmpt, MOM_dom, direction, stagger, complete, halo, clock) [integer]

pass_vector_start_3d starts a halo update for a pair of three-dimensional arrays representing the compontents of a three-dimensional horizontal vector.

Parameters
  • u_cmpt :: [inout] The nominal zonal (u) component of the vector pair which is having its halos points exchanged.

  • v_cmpt :: [inout] The nominal meridional (v) component of the vector pair which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • direction :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH, possibly plus SCALAR_PAIR if these are paired non-directional scalars discretized at the typical vector component locations. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if omitted.

  • stagger :: [in] An optional flag, which may be one of A_GRID, BGRID_NE, or CGRID_NE, indicating where the two components of the vector are discretized. Omitting stagger is the same as setting it to CGRID_NE.

  • complete :: [in] An optional argument indicating whether the halo updates should be completed before progress resumes. Omitting complete is the same as setting complete to .true.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Return

undefined :: The integer index for this update.

Call to

to_all

subroutine mom_domains/pass_vector_complete_2d(id_update, u_cmpt, v_cmpt, MOM_dom, direction, stagger, halo, clock)

pass_vector_complete_2d completes a halo update for a pair of two-dimensional arrays representing the compontents of a two-dimensional horizontal vector.

Parameters
  • id_update :: [in] The integer id of this update which has been returned from a previous call to pass_var_start()..

  • u_cmpt :: [inout] The nominal zonal (u) component of the vector pair which is having its halos points exchanged.

  • v_cmpt :: [inout] The nominal meridional (v) component of the vector pair which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • direction :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH, possibly plus SCALAR_PAIR if these are paired non-directional scalars discretized at the typical vector component locations. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if omitted.

  • stagger :: [in] An optional flag, which may be one of A_GRID, BGRID_NE, or CGRID_NE, indicating where the two components of the vector are discretized. Omitting stagger is the same as setting it to CGRID_NE.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Call to

to_all

subroutine mom_domains/pass_vector_complete_3d(id_update, u_cmpt, v_cmpt, MOM_dom, direction, stagger, halo, clock)

pass_vector_complete_3d completes a halo update for a pair of three-dimensional arrays representing the compontents of a three-dimensional horizontal vector.

Parameters
  • id_update :: [in] The integer id of this update which has been returned from a previous call to pass_var_start()..

  • u_cmpt :: [inout] The nominal zonal (u) component of the vector pair which is having its halos points exchanged.

  • v_cmpt :: [inout] The nominal meridional (v) component of the vector pair which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • direction :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH, possibly plus SCALAR_PAIR if these are paired non-directional scalars discretized at the typical vector component locations. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if omitted.

  • stagger :: [in] An optional flag, which may be one of A_GRID, BGRID_NE, or CGRID_NE, indicating where the two components of the vector are discretized. Omitting stagger is the same as setting it to CGRID_NE.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Call to

to_all

subroutine mom_domains/create_var_group_pass_2d(group, array, MOM_dom, sideflag, position, halo, clock)

create_var_group_pass_2d sets up a group of two-dimensional array halo updates.

Parameters
  • group :: [inout] The data type that store information for group update. This data will be used in do_group_pass.

  • array :: [inout] The array which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • sideflag :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if sideflag is omitted.

  • position :: [in] An optional argument indicating the position. This is CENTER by default and is often CORNER, but could also be EAST_FACE or NORTH_FACE.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Call to

to_all

subroutine mom_domains/create_var_group_pass_3d(group, array, MOM_dom, sideflag, position, halo, clock)

create_var_group_pass_3d sets up a group of three-dimensional array halo updates.

Parameters
  • group :: [inout] The data type that store information for group update. This data will be used in do_group_pass.

  • array :: [inout] The array which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • sideflag :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if sideflag is omitted.

  • position :: [in] An optional argument indicating the position. This is CENTER by default and is often CORNER, but could also be EAST_FACE or NORTH_FACE.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Call to

to_all

subroutine mom_domains/create_vector_group_pass_2d(group, u_cmpt, v_cmpt, MOM_dom, direction, stagger, halo, clock)

create_vector_group_pass_2d sets up a group of two-dimensional vector halo updates.

Parameters
  • group :: [inout] The data type that store information for group update. This data will be used in do_group_pass.

  • u_cmpt :: [inout] The nominal zonal (u) component of the vector pair which is having its halos points exchanged.

  • v_cmpt :: [inout] The nominal meridional (v) component of the vector pair which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent

  • direction :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH, possibly plus SCALAR_PAIR if these are paired non-directional scalars discretized at the typical vector component locations. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if omitted.

  • stagger :: [in] An optional flag, which may be one of A_GRID, BGRID_NE, or CGRID_NE, indicating where the two components of the vector are discretized. Omitting stagger is the same as setting it to CGRID_NE.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Call to

to_all

subroutine mom_domains/create_vector_group_pass_3d(group, u_cmpt, v_cmpt, MOM_dom, direction, stagger, halo, clock)

create_vector_group_pass_3d sets up a group of three-dimensional vector halo updates.

Parameters
  • group :: [inout] The data type that store information for group update. This data will be used in do_group_pass.

  • u_cmpt :: [inout] The nominal zonal (u) component of the vector pair which is having its halos points exchanged.

  • v_cmpt :: [inout] The nominal meridional (v) component of the vector pair which is having its halos points exchanged.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • direction :: [in] An optional integer indicating which directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST, TO_NORTH, and TO_SOUTH, possibly plus SCALAR_PAIR if these are paired non-directional scalars discretized at the typical vector component locations. For example, TO_EAST sends the data to the processor to the east, so the halos on the western side are filled. TO_ALL is the default if omitted.

  • stagger :: [in] An optional flag, which may be one of A_GRID, BGRID_NE, or CGRID_NE, indicating where the two components of the vector are discretized. Omitting stagger is the same as setting it to CGRID_NE.

  • halo :: [in] The size of the halo to update - the full halo by default.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Call to

to_all

subroutine mom_domains/do_group_pass(group, MOM_dom, clock)

do_group_pass carries out a group halo update.

Parameters
  • group :: [inout] The data type that store information for group update. This data will be used in do_group_pass.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Called from

mom_tracer_advect::advect_tracer mom_ale::ale_regrid_accelerated mom_bulk_mixed_layer::bulkmixedlayer mom_diabatic_driver::diabatic_ale mom_diabatic_driver::layered_diabatic mom_meke::meke_init mom_meke::step_forward_meke

subroutine mom_domains/start_group_pass(group, MOM_dom, clock)

start_group_pass starts out a group halo update.

Parameters
  • group :: [inout] The data type that store information for group update. This data will be used in do_group_pass.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Called from

mom_barotropic::btstep mom_internal_tides::propagate_int_tide mom::step_mom mom_dynamics_split_rk2::step_mom_dyn_split_rk2

subroutine mom_domains/complete_group_pass(group, MOM_dom, clock)

complete_group_pass completes a group halo update.

Parameters
  • group :: [inout] The data type that store information for group update. This data will be used in do_group_pass.

  • mom_dom :: [inout] The MOM_domain_type containing the mpp_domain needed to determine where data should be sent.

  • clock :: [in] The handle for a cpu time clock that should be started then stopped to time this routine.

Called from

mom_barotropic::btstep mom_internal_tides::propagate_int_tide mom::step_mom mom_dynamics_split_rk2::step_mom_dyn_split_rk2

subroutine mom_domains/mom_domains_init(MOM_dom, param_file, symmetric, static_memory, NIHALO, NJHALO, NIGLOBAL, NJGLOBAL, NIPROC, NJPROC, min_halo, domain_name, include_name, param_suffix)

MOM_domains_init initalizes a MOM_domain_type variable, based on the information read in from a param_file_type, and optionally returns data describing various’ properties of the domain type.

Parameters
  • mom_dom :: A pointer to the MOM_domain_type being defined here.

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

  • symmetric :: [in] If present, this specifies whether this domain is symmetric, regardless of whether the macro SYMMETRIC_MEMORY_ is defined.

  • static_memory :: [in] If present and true, this domain type is set up for static memory and error checking of various input values is performed against those in the input file.

  • nihalo :: [in] Default halo sizes, required with static memory.

  • njhalo :: [in] Default halo sizes, required with static memory.

  • niglobal :: [in] Total domain sizes, required with static memory.

  • njglobal :: [in] Total domain sizes, required with static memory.

  • niproc :: [in] Processor counts, required with static memory.

  • njproc :: [in] Processor counts, required with static memory.

  • min_halo :: [inout] If present, this sets the minimum halo size for this domain in the i- and j- directions, and returns the actual halo size used.

  • domain_name :: [in] A name for this domain, “MOM” if missing.

  • include_name :: [in] A name for model’s include file, “MOM_memory.h” if missing.

  • param_suffix :: [in] A suffix to apply to layout-specific parameters.

Call to

mom_error_handler::mom_error mom_error_handler::mom_mesg mom_string_functions::slasher

Called from

mom_oda_driver_mod::init_oda

subroutine mom_domains/clone_md_to_md(MD_in, MOM_dom, min_halo, halo_size, symmetric, domain_name, turns)

clone_MD_to_MD copies one MOM_domain_type into another, while allowing some properties of the new type to differ from the original one.

Parameters
  • md_in :: [in] An existing MOM_domain

  • mom_dom :: A pointer to a MOM_domain that will be allocated if it is unassociated, and will have data copied from MD_in

  • min_halo :: [inout] If present, this sets the

  • halo_size :: [in] If present, this sets the halo size for the domain in the i- and j-directions. min_halo and halo_size can not both be present.

  • symmetric :: [in] If present, this specifies whether the new domain is symmetric, regardless of whether the macro SYMMETRIC_MEMORY_ is defined.

  • domain_name :: [in] A name for the new domain, “MOM”

  • turns :: [in] Number of quarter turns

Call to

mom_error_handler::mom_error

subroutine mom_domains/clone_md_to_d2d(MD_in, mpp_domain, min_halo, halo_size, symmetric, domain_name, turns)

clone_MD_to_d2D uses information from a MOM_domain_type to create a new domain2d type, while allowing some properties of the new type to differ from the original one.

Parameters
  • md_in :: [in] An existing MOM_domain to be cloned

  • mpp_domain :: [inout] The new mpp_domain to be set up

  • min_halo :: [inout] If present, this sets the

  • halo_size :: [in] If present, this sets the halo size for the domain in the i- and j-directions. min_halo and halo_size can not both be present.

  • symmetric :: [in] If present, this specifies whether the new domain is symmetric, regardless of whether the macro SYMMETRIC_MEMORY_ is defined.

  • domain_name :: [in] A name for the new domain, “MOM”

  • turns :: [in] If true, swap X and Y axes

Call to

mom_error_handler::mom_error

subroutine mom_domains/get_domain_extent(Domain, isc, iec, jsc, jec, isd, ied, jsd, jed, isg, ieg, jsg, jeg, idg_offset, jdg_offset, symmetric, local_indexing, index_offset)

Returns various data that has been stored in a MOM_domain_type.

Parameters
  • domain :: [in] The MOM domain from which to extract information

  • isc :: [out] The start i-index of the computational domain

  • iec :: [out] The end i-index of the computational domain

  • jsc :: [out] The start j-index of the computational domain

  • jec :: [out] The end j-index of the computational domain

  • isd :: [out] The start i-index of the data domain

  • ied :: [out] The end i-index of the data domain

  • jsd :: [out] The start j-index of the data domain

  • jed :: [out] The end j-index of the data domain

  • isg :: [out] The start i-index of the global domain

  • ieg :: [out] The end i-index of the global domain

  • jsg :: [out] The start j-index of the global domain

  • jeg :: [out] The end j-index of the global domain

  • idg_offset :: [out] The offset between the corresponding global and data i-index spaces.

  • jdg_offset :: [out] The offset between the corresponding global and data j-index spaces.

  • symmetric :: [out] True if symmetric memory is used.

  • local_indexing :: [in] If true, local tracer array indices start at 1, as in most MOM6 code.

  • index_offset :: [in] A fixed additional offset to all indices. This can be useful for some types of debugging with dynamic memory allocation.

Called from

mom_hor_index::hor_index_init

subroutine mom_domains/get_domain_extent_dsamp2(Domain, isc_d2, iec_d2, jsc_d2, jec_d2, isd_d2, ied_d2, jsd_d2, jed_d2, isg_d2, ieg_d2, jsg_d2, jeg_d2)
Parameters
  • domain :: [in] The MOM domain from which to extract information

  • isc_d2 :: [out] The start i-index of the computational domain

  • iec_d2 :: [out] The end i-index of the computational domain

  • jsc_d2 :: [out] The start j-index of the computational domain

  • jec_d2 :: [out] The end j-index of the computational domain

  • isd_d2 :: [out] The start i-index of the data domain

  • ied_d2 :: [out] The end i-index of the data domain

  • jsd_d2 :: [out] The start j-index of the data domain

  • jed_d2 :: [out] The end j-index of the data domain

  • isg_d2 :: [out] The start i-index of the global domain

  • ieg_d2 :: [out] The end i-index of the global domain

  • jsg_d2 :: [out] The start j-index of the global domain

  • jeg_d2 :: [out] The end j-index of the global domain

Called from

mom_grid::mom_grid_init

subroutine mom_domains/get_simple_array_i_ind(domain, size, is, ie, symmetric)

Return the (potentially symmetric) computational domain i-bounds for an array passed without index specifications (i.e. indices start at 1) based on an array size.

Parameters
  • domain :: [in] MOM domain from which to extract information

  • size :: [in] The i-array size

  • is :: [out] The computational domain starting i-index.

  • ie :: [out] The computational domain ending i-index.

  • symmetric :: [in] If present, indicates whether symmetric sizes can be considered.

Call to

mom_error_handler::mom_error

Called from

mom_io::mom_read_data_2d mom_io::mom_read_data_3d mom_io::mom_read_data_4d mom_io::mom_read_vector_2d mom_io::mom_read_vector_3d

subroutine mom_domains/get_simple_array_j_ind(domain, size, js, je, symmetric)

Return the (potentially symmetric) computational domain j-bounds for an array passed without index specifications (i.e. indices start at 1) based on an array size.

Parameters
  • domain :: [in] MOM domain from which to extract information

  • size :: [in] The j-array size

  • js :: [out] The computational domain starting j-index.

  • je :: [out] The computational domain ending j-index.

  • symmetric :: [in] If present, indicates whether symmetric sizes can be considered.

Call to

mom_error_handler::mom_error

Called from

mom_io::mom_read_data_2d mom_io::mom_read_data_3d mom_io::mom_read_data_4d mom_io::mom_read_vector_2d mom_io::mom_read_vector_3d

subroutine mom_domains/get_global_shape(domain, niglobal, njglobal)

Returns the global shape of h-point arrays.

Parameters
  • domain :: [in] MOM domain

  • niglobal :: [out] i-index global size of h-point arrays

  • njglobal :: [out] j-index global size of h-point arrays

Called from

mom_grid::get_global_grid_size mom_hor_index::hor_index_init