MOM6
mom_domains::create_group_pass Interface Reference

Detailed Description

Set up a group of halo updates.

Definition at line 84 of file MOM_domains.F90.

Private functions

subroutine 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. More...
 
subroutine 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. More...
 
subroutine 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. More...
 
subroutine 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. More...
 

Detailed Description

Set up a group of halo updates.

Definition at line 84 of file MOM_domains.F90.

Functions and subroutines

◆ create_var_group_pass_2d()

subroutine mom_domains::create_group_pass::create_var_group_pass_2d ( type(group_pass_type), intent(inout)  group,
real, dimension(:,:), intent(inout)  array,
type(mom_domain_type), intent(inout)  MOM_dom,
integer, intent(in), optional  sideflag,
integer, intent(in), optional  position,
integer, intent(in), optional  halo,
integer, intent(in), optional  clock 
)
private

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

Parameters
[in,out]groupThe data type that store information for group update. This data will be used in do_group_pass.
[in,out]arrayThe array which is having its halos points exchanged.
[in,out]mom_domThe MOM_domain_type containing the mpp_domain needed to determine where data should be sent.
[in]sideflagAn 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.
[in]positionAn optional argument indicating the position. This is CENTER by default and is often CORNER, but could also be EAST_FACE or NORTH_FACE.
[in]haloThe size of the halo to update - the full halo by default.
[in]clockThe handle for a cpu time clock that should be started then stopped to time this routine.

Definition at line 911 of file MOM_domains.F90.

911  type(group_pass_type), intent(inout) :: group !< The data type that store information for
912  !! group update. This data will be used in
913  !! do_group_pass.
914  real, dimension(:,:), intent(inout) :: array !< The array which is having its halos points
915  !! exchanged.
916  type(MOM_domain_type), intent(inout) :: MOM_dom !< The MOM_domain_type containing the mpp_domain
917  !! needed to determine where data should be
918  !! sent.
919  integer, optional, intent(in) :: sideflag !< An optional integer indicating which
920  !! directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST,
921  !! TO_NORTH, and TO_SOUTH. For example, TO_EAST sends the data to the processor to the east,
922  !! so the halos on the western side are filled. TO_ALL is the default if sideflag is omitted.
923  integer, optional, intent(in) :: position !< An optional argument indicating the position.
924  !! This is CENTER by default and is often CORNER,
925  !! but could also be EAST_FACE or NORTH_FACE.
926  integer, optional, intent(in) :: halo !< The size of the halo to update - the full
927  !! halo by default.
928  integer, optional, intent(in) :: clock !< The handle for a cpu time clock that should be
929  !! started then stopped to time this routine.
930  ! Local variables
931  integer :: dirflag
932 
933  if (present(clock)) then ; if (clock>0) call cpu_clock_begin(clock) ; endif
934 
935  dirflag = to_all ! 60
936  if (present(sideflag)) then ; if (sideflag > 0) dirflag = sideflag ; endif
937 
938  if (mpp_group_update_initialized(group)) then
939  call mpp_reset_group_update_field(group,array)
940  elseif (present(halo) .and. mom_dom%thin_halo_updates) then
941  call mpp_create_group_update(group, array, mom_dom%mpp_domain, flags=dirflag, &
942  position=position, whalo=halo, ehalo=halo, &
943  shalo=halo, nhalo=halo)
944  else
945  call mpp_create_group_update(group, array, mom_dom%mpp_domain, flags=dirflag, &
946  position=position)
947  endif
948 
949  if (present(clock)) then ; if (clock>0) call cpu_clock_end(clock) ; endif
950 

◆ create_var_group_pass_3d()

subroutine mom_domains::create_group_pass::create_var_group_pass_3d ( type(group_pass_type), intent(inout)  group,
real, dimension(:,:,:), intent(inout)  array,
type(mom_domain_type), intent(inout)  MOM_dom,
integer, intent(in), optional  sideflag,
integer, intent(in), optional  position,
integer, intent(in), optional  halo,
integer, intent(in), optional  clock 
)
private

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

Parameters
[in,out]groupThe data type that store information for group update. This data will be used in do_group_pass.
[in,out]arrayThe array which is having its halos points exchanged.
[in,out]mom_domThe MOM_domain_type containing the mpp_domain needed to determine where data should be sent.
[in]sideflagAn 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.
[in]positionAn optional argument indicating the position. This is CENTER by default and is often CORNER, but could also be EAST_FACE or NORTH_FACE.
[in]haloThe size of the halo to update - the full halo by default.
[in]clockThe handle for a cpu time clock that should be started then stopped to time this routine.

Definition at line 956 of file MOM_domains.F90.

956  type(group_pass_type), intent(inout) :: group !< The data type that store information for
957  !! group update. This data will be used in
958  !! do_group_pass.
959  real, dimension(:,:,:), intent(inout) :: array !< The array which is having its halos points
960  !! exchanged.
961  type(MOM_domain_type), intent(inout) :: MOM_dom !< The MOM_domain_type containing the mpp_domain
962  !! needed to determine where data should be
963  !! sent.
964  integer, optional, intent(in) :: sideflag !< An optional integer indicating which
965  !! directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST,
966  !! TO_NORTH, and TO_SOUTH. For example, TO_EAST sends the data to the processor to the east,
967  !! so the halos on the western side are filled. TO_ALL is the default if sideflag is omitted.
968  integer, optional, intent(in) :: position !< An optional argument indicating the position.
969  !! This is CENTER by default and is often CORNER,
970  !! but could also be EAST_FACE or NORTH_FACE.
971  integer, optional, intent(in) :: halo !< The size of the halo to update - the full
972  !! halo by default.
973  integer, optional, intent(in) :: clock !< The handle for a cpu time clock that should be
974  !! started then stopped to time this routine.
975  ! Local variables
976  integer :: dirflag
977 
978  if (present(clock)) then ; if (clock>0) call cpu_clock_begin(clock) ; endif
979 
980  dirflag = to_all ! 60
981  if (present(sideflag)) then ; if (sideflag > 0) dirflag = sideflag ; endif
982 
983  if (mpp_group_update_initialized(group)) then
984  call mpp_reset_group_update_field(group,array)
985  elseif (present(halo) .and. mom_dom%thin_halo_updates) then
986  call mpp_create_group_update(group, array, mom_dom%mpp_domain, flags=dirflag, &
987  position=position, whalo=halo, ehalo=halo, &
988  shalo=halo, nhalo=halo)
989  else
990  call mpp_create_group_update(group, array, mom_dom%mpp_domain, flags=dirflag, &
991  position=position)
992  endif
993 
994  if (present(clock)) then ; if (clock>0) call cpu_clock_end(clock) ; endif
995 

◆ create_vector_group_pass_2d()

subroutine mom_domains::create_group_pass::create_vector_group_pass_2d ( type(group_pass_type), intent(inout)  group,
real, dimension(:,:), intent(inout)  u_cmpt,
real, dimension(:,:), intent(inout)  v_cmpt,
type(mom_domain_type), intent(inout)  MOM_dom,
integer, intent(in), optional  direction,
integer, intent(in), optional  stagger,
integer, intent(in), optional  halo,
integer, intent(in), optional  clock 
)
private

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

Parameters
[in,out]groupThe data type that store information for group update. This data will be used in do_group_pass.
[in,out]u_cmptThe nominal zonal (u) component of the vector pair which is having its halos points exchanged.
[in,out]v_cmptThe nominal meridional (v) component of the vector pair which is having its halos points exchanged.
[in,out]mom_domThe MOM_domain_type containing the mpp_domain needed to determine where data should be sent
[in]directionAn 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.
[in]staggerAn 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.
[in]haloThe size of the halo to update - the full halo by default.
[in]clockThe handle for a cpu time clock that should be started then stopped to time this routine.

Definition at line 1001 of file MOM_domains.F90.

1001  type(group_pass_type), intent(inout) :: group !< The data type that store information for
1002  !! group update. This data will be used in
1003  !! do_group_pass.
1004  real, dimension(:,:), intent(inout) :: u_cmpt !< The nominal zonal (u) component of the vector
1005  !! pair which is having its halos points
1006  !! exchanged.
1007  real, dimension(:,:), intent(inout) :: v_cmpt !< The nominal meridional (v) component of the
1008  !! vector pair which is having its halos points
1009  !! exchanged.
1010 
1011  type(MOM_domain_type), intent(inout) :: MOM_dom !< The MOM_domain_type containing the mpp_domain
1012  !! needed to determine where data should be
1013  !! sent
1014  integer, optional, intent(in) :: direction !< An optional integer indicating which
1015  !! directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST,
1016  !! TO_NORTH, and TO_SOUTH, possibly plus SCALAR_PAIR if these are paired non-directional
1017  !! scalars discretized at the typical vector component locations. For example, TO_EAST sends
1018  !! the data to the processor to the east, so the halos on the western side are filled. TO_ALL
1019  !! is the default if omitted.
1020  integer, optional, intent(in) :: stagger !< An optional flag, which may be one of A_GRID,
1021  !! BGRID_NE, or CGRID_NE, indicating where the two components of the vector are
1022  !! discretized. Omitting stagger is the same as setting it to CGRID_NE.
1023  integer, optional, intent(in) :: halo !< The size of the halo to update - the full
1024  !! halo by default.
1025  integer, optional, intent(in) :: clock !< The handle for a cpu time clock that should be
1026  !! started then stopped to time this routine.
1027  ! Local variables
1028  integer :: stagger_local
1029  integer :: dirflag
1030 
1031  if (present(clock)) then ; if (clock>0) call cpu_clock_begin(clock) ; endif
1032 
1033  stagger_local = cgrid_ne ! Default value for type of grid
1034  if (present(stagger)) stagger_local = stagger
1035 
1036  dirflag = to_all ! 60
1037  if (present(direction)) then ; if (direction > 0) dirflag = direction ; endif
1038 
1039  if (mpp_group_update_initialized(group)) then
1040  call mpp_reset_group_update_field(group,u_cmpt, v_cmpt)
1041  elseif (present(halo) .and. mom_dom%thin_halo_updates) then
1042  call mpp_create_group_update(group, u_cmpt, v_cmpt, mom_dom%mpp_domain, &
1043  flags=dirflag, gridtype=stagger_local, whalo=halo, ehalo=halo, &
1044  shalo=halo, nhalo=halo)
1045  else
1046  call mpp_create_group_update(group, u_cmpt, v_cmpt, mom_dom%mpp_domain, &
1047  flags=dirflag, gridtype=stagger_local)
1048  endif
1049 
1050  if (present(clock)) then ; if (clock>0) call cpu_clock_end(clock) ; endif
1051 

◆ create_vector_group_pass_3d()

subroutine mom_domains::create_group_pass::create_vector_group_pass_3d ( type(group_pass_type), intent(inout)  group,
real, dimension(:,:,:), intent(inout)  u_cmpt,
real, dimension(:,:,:), intent(inout)  v_cmpt,
type(mom_domain_type), intent(inout)  MOM_dom,
integer, intent(in), optional  direction,
integer, intent(in), optional  stagger,
integer, intent(in), optional  halo,
integer, intent(in), optional  clock 
)
private

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

Parameters
[in,out]groupThe data type that store information for group update. This data will be used in do_group_pass.
[in,out]u_cmptThe nominal zonal (u) component of the vector pair which is having its halos points exchanged.
[in,out]v_cmptThe nominal meridional (v) component of the vector pair which is having its halos points exchanged.
[in,out]mom_domThe MOM_domain_type containing the mpp_domain needed to determine where data should be sent.
[in]directionAn 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.
[in]staggerAn 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.
[in]haloThe size of the halo to update - the full halo by default.
[in]clockThe handle for a cpu time clock that should be started then stopped to time this routine.

Definition at line 1057 of file MOM_domains.F90.

1057  type(group_pass_type), intent(inout) :: group !< The data type that store information for
1058  !! group update. This data will be used in
1059  !! do_group_pass.
1060  real, dimension(:,:,:), intent(inout) :: u_cmpt !< The nominal zonal (u) component of the vector
1061  !! pair which is having its halos points
1062  !! exchanged.
1063  real, dimension(:,:,:), intent(inout) :: v_cmpt !< The nominal meridional (v) component of the
1064  !! vector pair which is having its halos points
1065  !! exchanged.
1066 
1067  type(MOM_domain_type), intent(inout) :: MOM_dom !< The MOM_domain_type containing the mpp_domain
1068  !! needed to determine where data should be
1069  !! sent.
1070  integer, optional, intent(in) :: direction !< An optional integer indicating which
1071  !! directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST,
1072  !! TO_NORTH, and TO_SOUTH, possibly plus SCALAR_PAIR if these are paired non-directional
1073  !! scalars discretized at the typical vector component locations. For example, TO_EAST sends
1074  !! the data to the processor to the east, so the halos on the western side are filled. TO_ALL
1075  !! is the default if omitted.
1076  integer, optional, intent(in) :: stagger !< An optional flag, which may be one of A_GRID,
1077  !! BGRID_NE, or CGRID_NE, indicating where the two components of the vector are
1078  !! discretized. Omitting stagger is the same as setting it to CGRID_NE.
1079  integer, optional, intent(in) :: halo !< The size of the halo to update - the full
1080  !! halo by default.
1081  integer, optional, intent(in) :: clock !< The handle for a cpu time clock that should be
1082  !! started then stopped to time this routine.
1083 
1084  ! Local variables
1085  integer :: stagger_local
1086  integer :: dirflag
1087 
1088  if (present(clock)) then ; if (clock>0) call cpu_clock_begin(clock) ; endif
1089 
1090  stagger_local = cgrid_ne ! Default value for type of grid
1091  if (present(stagger)) stagger_local = stagger
1092 
1093  dirflag = to_all ! 60
1094  if (present(direction)) then ; if (direction > 0) dirflag = direction ; endif
1095 
1096  if (mpp_group_update_initialized(group)) then
1097  call mpp_reset_group_update_field(group,u_cmpt, v_cmpt)
1098  elseif (present(halo) .and. mom_dom%thin_halo_updates) then
1099  call mpp_create_group_update(group, u_cmpt, v_cmpt, mom_dom%mpp_domain, &
1100  flags=dirflag, gridtype=stagger_local, whalo=halo, ehalo=halo, &
1101  shalo=halo, nhalo=halo)
1102  else
1103  call mpp_create_group_update(group, u_cmpt, v_cmpt, mom_dom%mpp_domain, &
1104  flags=dirflag, gridtype=stagger_local)
1105  endif
1106 
1107  if (present(clock)) then ; if (clock>0) call cpu_clock_end(clock) ; endif
1108 

The documentation for this interface was generated from the following file: