MOM6
mom_domains::create_group_pass Interface Reference

Detailed Description

Set up a group of halo updates.

Definition at line 79 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...
 

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 usally CORNER, but is CENTER by default.
[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 888 of file MOM_domains.F90.

888  type(group_pass_type), intent(inout) :: group !< The data type that store information for
889  !! group update. This data will be used in
890  !! do_group_pass.
891  real, dimension(:,:), intent(inout) :: array !< The array which is having its halos points
892  !! exchanged.
893  type(MOM_domain_type), intent(inout) :: MOM_dom !< The MOM_domain_type containing the mpp_domain
894  !! needed to determine where data should be
895  !! sent.
896  integer, optional, intent(in) :: sideflag !< An optional integer indicating which
897  !! directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST,
898  !! TO_NORTH, and TO_SOUTH. For example, TO_EAST sends the data to the processor to the east,
899  !! so the halos on the western side are filled. TO_ALL is the default if sideflag is omitted.
900  integer, optional, intent(in) :: position !< An optional argument indicating the position.
901  !! This is usally CORNER, but is CENTER
902  !! by default.
903  integer, optional, intent(in) :: halo !< The size of the halo to update - the full
904  !! halo by default.
905  integer, optional, intent(in) :: clock !< The handle for a cpu time clock that should be
906  !! started then stopped to time this routine.
907  ! Local variables
908  integer :: dirflag
909 
910  if (present(clock)) then ; if (clock>0) call cpu_clock_begin(clock) ; endif
911 
912  dirflag = to_all ! 60
913  if (present(sideflag)) then ; if (sideflag > 0) dirflag = sideflag ; endif
914 
915  if (mpp_group_update_initialized(group)) then
916  call mpp_reset_group_update_field(group,array)
917  elseif (present(halo) .and. mom_dom%thin_halo_updates) then
918  call mpp_create_group_update(group, array, mom_dom%mpp_domain, flags=dirflag, &
919  position=position, whalo=halo, ehalo=halo, &
920  shalo=halo, nhalo=halo)
921  else
922  call mpp_create_group_update(group, array, mom_dom%mpp_domain, flags=dirflag, &
923  position=position)
924  endif
925 
926  if (present(clock)) then ; if (clock>0) call cpu_clock_end(clock) ; endif
927 

◆ 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 usally CORNER, but is CENTER by default.
[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 933 of file MOM_domains.F90.

933  type(group_pass_type), intent(inout) :: group !< The data type that store information for
934  !! group update. This data will be used in
935  !! do_group_pass.
936  real, dimension(:,:,:), intent(inout) :: array !< The array which is having its halos points
937  !! exchanged.
938  type(MOM_domain_type), intent(inout) :: MOM_dom !< The MOM_domain_type containing the mpp_domain
939  !! needed to determine where data should be
940  !! sent.
941  integer, optional, intent(in) :: sideflag !< An optional integer indicating which
942  !! directions the data should be sent. It is TO_ALL or the sum of any of TO_EAST, TO_WEST,
943  !! TO_NORTH, and TO_SOUTH. For example, TO_EAST sends the data to the processor to the east,
944  !! so the halos on the western side are filled. TO_ALL is the default if sideflag is omitted.
945  integer, optional, intent(in) :: position !< An optional argument indicating the position.
946  !! This is usally CORNER, but is CENTER
947  !! by default.
948  integer, optional, intent(in) :: halo !< The size of the halo to update - the full
949  !! halo by default.
950  integer, optional, intent(in) :: clock !< The handle for a cpu time clock that should be
951  !! started then stopped to time this routine.
952  ! Local variables
953  integer :: dirflag
954 
955  if (present(clock)) then ; if (clock>0) call cpu_clock_begin(clock) ; endif
956 
957  dirflag = to_all ! 60
958  if (present(sideflag)) then ; if (sideflag > 0) dirflag = sideflag ; endif
959 
960  if (mpp_group_update_initialized(group)) then
961  call mpp_reset_group_update_field(group,array)
962  elseif (present(halo) .and. mom_dom%thin_halo_updates) then
963  call mpp_create_group_update(group, array, mom_dom%mpp_domain, flags=dirflag, &
964  position=position, whalo=halo, ehalo=halo, &
965  shalo=halo, nhalo=halo)
966  else
967  call mpp_create_group_update(group, array, mom_dom%mpp_domain, flags=dirflag, &
968  position=position)
969  endif
970 
971  if (present(clock)) then ; if (clock>0) call cpu_clock_end(clock) ; endif
972 

◆ 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 978 of file MOM_domains.F90.

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

◆ 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 1034 of file MOM_domains.F90.

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

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