mom_domains module reference¶
Describes the decomposed MOM domain and has routines for communications across PEs.
Data Types¶
The MOM_domain_type contains information about the domain decompositoin. |
Functions/Subroutines¶
pass_var_3d does a halo update for a three-dimensional array. |
|
pass_var_2d does a halo update for a two-dimensional array. |
|
pass_var_start_2d starts a halo update for a two-dimensional array. |
|
pass_var_start_3d starts a halo update for a three-dimensional array. |
|
pass_var_complete_2d completes a halo update for a two-dimensional array. |
|
pass_var_complete_3d completes a halo update for a three-dimensional array. |
|
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 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 does a halo update for a pair of three-dimensional arrays representing the compontents of a three-dimensional horizontal vector. |
|
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 starts a halo update for a pair of three-dimensional arrays representing the compontents of a three-dimensional horizontal vector. |
|
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 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 sets up a group of two-dimensional array halo updates. |
|
create_var_group_pass_3d sets up a group of three-dimensional array halo updates. |
|
create_vector_group_pass_2d sets up a group of two-dimensional vector halo updates. |
|
create_vector_group_pass_3d sets up a group of three-dimensional vector halo updates. |
|
do_group_pass carries out a group halo update. |
|
start_group_pass starts out a group halo update. |
|
complete_group_pass completes a group halo update. |
|
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 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 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. |
|
Returns various data that has been stored in a MOM_domain_type. |
|
Return the (potentially symmetric) computational domain i-bounds for an array passed without index specifications (i.e. |
|
Return the (potentially symmetric) computational domain j-bounds for an array passed without index specifications (i.e. |
|
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
-
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
-
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
-
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
-
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
-
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
- 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
- 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