Set up a group of halo updates.
Definition at line 84 of file MOM_domains.F90.
|
| 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...
|
| |
Set up a group of halo updates.
Definition at line 84 of file MOM_domains.F90.
◆ 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] | group | The data type that store information for group update. This data will be used in do_group_pass. |
| [in,out] | array | The array which is having its halos points exchanged. |
| [in,out] | mom_dom | The MOM_domain_type containing the mpp_domain needed to determine where data should be sent. |
| [in] | sideflag | 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. |
| [in] | position | An optional argument indicating the position. This is CENTER by default and is often CORNER, but could also be EAST_FACE or NORTH_FACE. |
| [in] | halo | The size of the halo to update - the full halo by default. |
| [in] | clock | The 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
914 real,
dimension(:,:),
intent(inout) :: array
916 type(mom_domain_type),
intent(inout) :: mom_dom
919 integer,
optional,
intent(in) :: sideflag
923 integer,
optional,
intent(in) :: position
926 integer,
optional,
intent(in) :: halo
928 integer,
optional,
intent(in) :: clock
933 if (
present(clock))
then ;
if (clock>0)
call cpu_clock_begin(clock) ;
endif 936 if (
present(sideflag))
then ;
if (sideflag > 0) dirflag = sideflag ;
endif 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)
945 call mpp_create_group_update(group, array, mom_dom%mpp_domain, flags=dirflag, &
949 if (
present(clock))
then ;
if (clock>0)
call cpu_clock_end(clock) ;
endif
◆ 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] | group | The data type that store information for group update. This data will be used in do_group_pass. |
| [in,out] | array | The array which is having its halos points exchanged. |
| [in,out] | mom_dom | The MOM_domain_type containing the mpp_domain needed to determine where data should be sent. |
| [in] | sideflag | 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. |
| [in] | position | An optional argument indicating the position. This is CENTER by default and is often CORNER, but could also be EAST_FACE or NORTH_FACE. |
| [in] | halo | The size of the halo to update - the full halo by default. |
| [in] | clock | The 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
959 real,
dimension(:,:,:),
intent(inout) :: array
961 type(mom_domain_type),
intent(inout) :: mom_dom
964 integer,
optional,
intent(in) :: sideflag
968 integer,
optional,
intent(in) :: position
971 integer,
optional,
intent(in) :: halo
973 integer,
optional,
intent(in) :: clock
978 if (
present(clock))
then ;
if (clock>0)
call cpu_clock_begin(clock) ;
endif 981 if (
present(sideflag))
then ;
if (sideflag > 0) dirflag = sideflag ;
endif 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)
990 call mpp_create_group_update(group, array, mom_dom%mpp_domain, flags=dirflag, &
994 if (
present(clock))
then ;
if (clock>0)
call cpu_clock_end(clock) ;
endif
◆ 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] | group | The data type that store information for group update. This data will be used in do_group_pass. |
| [in,out] | u_cmpt | The nominal zonal (u) component of the vector pair which is having its halos points exchanged. |
| [in,out] | v_cmpt | The nominal meridional (v) component of the vector pair which is having its halos points exchanged. |
| [in,out] | mom_dom | The MOM_domain_type containing the mpp_domain needed to determine where data should be sent |
| [in] | direction | 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. |
| [in] | stagger | 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. |
| [in] | halo | The size of the halo to update - the full halo by default. |
| [in] | clock | The 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
1004 real,
dimension(:,:),
intent(inout) :: u_cmpt
1007 real,
dimension(:,:),
intent(inout) :: v_cmpt
1011 type(mom_domain_type),
intent(inout) :: mom_dom
1014 integer,
optional,
intent(in) :: direction
1020 integer,
optional,
intent(in) :: stagger
1023 integer,
optional,
intent(in) :: halo
1025 integer,
optional,
intent(in) :: clock
1028 integer :: stagger_local
1031 if (
present(clock))
then ;
if (clock>0)
call cpu_clock_begin(clock) ;
endif 1033 stagger_local = cgrid_ne
1034 if (
present(stagger)) stagger_local = stagger
1037 if (
present(direction))
then ;
if (direction > 0) dirflag = direction ;
endif 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)
1046 call mpp_create_group_update(group, u_cmpt, v_cmpt, mom_dom%mpp_domain, &
1047 flags=dirflag, gridtype=stagger_local)
1050 if (
present(clock))
then ;
if (clock>0)
call cpu_clock_end(clock) ;
endif
◆ 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] | group | The data type that store information for group update. This data will be used in do_group_pass. |
| [in,out] | u_cmpt | The nominal zonal (u) component of the vector pair which is having its halos points exchanged. |
| [in,out] | v_cmpt | The nominal meridional (v) component of the vector pair which is having its halos points exchanged. |
| [in,out] | mom_dom | The MOM_domain_type containing the mpp_domain needed to determine where data should be sent. |
| [in] | direction | 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. |
| [in] | stagger | 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. |
| [in] | halo | The size of the halo to update - the full halo by default. |
| [in] | clock | The 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
1060 real,
dimension(:,:,:),
intent(inout) :: u_cmpt
1063 real,
dimension(:,:,:),
intent(inout) :: v_cmpt
1067 type(mom_domain_type),
intent(inout) :: mom_dom
1070 integer,
optional,
intent(in) :: direction
1076 integer,
optional,
intent(in) :: stagger
1079 integer,
optional,
intent(in) :: halo
1081 integer,
optional,
intent(in) :: clock
1085 integer :: stagger_local
1088 if (
present(clock))
then ;
if (clock>0)
call cpu_clock_begin(clock) ;
endif 1090 stagger_local = cgrid_ne
1091 if (
present(stagger)) stagger_local = stagger
1094 if (
present(direction))
then ;
if (direction > 0) dirflag = direction ;
endif 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)
1103 call mpp_create_group_update(group, u_cmpt, v_cmpt, mom_dom%mpp_domain, &
1104 flags=dirflag, gridtype=stagger_local)
1107 if (
present(clock))
then ;
if (clock>0)
call cpu_clock_end(clock) ;
endif
The documentation for this interface was generated from the following file: