131 type(group_halo_update_type),
intent(inout) :: group
132 real,
dimension(:,:),
intent(inout) :: array
133 type(domain2D),
intent(inout) :: domain
134 integer,
optional,
intent(in) :: flags
135 integer,
optional,
intent(in) :: position
136 integer,
optional,
intent(in) :: whalo, ehalo, shalo, nhalo
137 logical,
optional,
intent(in) :: complete
139 logical :: is_complete
158 call mpp_update_domains(array, domain, flags=flags, position=position, whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
162 if (mpp_group_update_initialized(group))
then 166 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
170 if(
present(complete)) is_complete = complete
183 type(group_halo_update_type),
intent(inout) :: group
184 real,
dimension(:,:,:),
intent(inout) :: array
185 type(domain2D),
intent(inout) :: domain
186 integer,
optional,
intent(in) :: flags
187 integer,
optional,
intent(in) :: position
188 integer,
optional,
intent(in) :: whalo, ehalo, shalo, nhalo
189 logical,
optional,
intent(in) :: complete
191 logical :: is_complete
211 call mpp_update_domains(array, domain, flags=flags, position=position, whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
215 if (mpp_group_update_initialized(group))
then 219 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
223 if(
present(complete)) is_complete = complete
235 type(group_halo_update_type),
intent(inout) :: group
236 real,
dimension(:,:,:,:),
intent(inout) :: array
237 type(domain2D),
intent(inout) :: domain
238 integer,
optional,
intent(in) :: flags
239 integer,
optional,
intent(in) :: position
240 integer,
optional,
intent(in) :: whalo, ehalo, shalo, nhalo
241 logical,
optional,
intent(in) :: complete
243 logical :: is_complete
265 call mpp_update_domains(array, domain, flags=flags, position=position, whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
269 if (mpp_group_update_initialized(group))
then 273 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
277 if(
present(complete)) is_complete = complete
290 subroutine start_vector_group_update_2d(group, u_cmpt, v_cmpt, domain, flags, gridtype, whalo, ehalo, shalo, nhalo, complete)
291 type(group_halo_update_type),
intent(inout) :: group
292 real,
dimension(:,:),
intent(inout) :: u_cmpt, v_cmpt
293 type(domain2d),
intent(inout) :: domain
294 integer,
optional,
intent(in) :: flags
295 integer,
optional,
intent(in) :: gridtype
296 integer,
optional,
intent(in) :: whalo, ehalo, shalo, nhalo
297 logical,
optional,
intent(in) :: complete
299 logical :: is_complete
324 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
328 if (mpp_group_update_initialized(group))
then 332 flags=flags, gridtype=gridtype, &
333 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
337 if(
present(complete)) is_complete = complete
348 subroutine start_vector_group_update_3d(group, u_cmpt, v_cmpt, domain, flags, gridtype, whalo, ehalo, shalo, nhalo, complete)
349 type(group_halo_update_type),
intent(inout) :: group
350 real,
dimension(:,:,:),
intent(inout) :: u_cmpt, v_cmpt
351 type(domain2d),
intent(inout) :: domain
352 integer,
optional,
intent(in) :: flags
353 integer,
optional,
intent(in) :: gridtype
354 integer,
optional,
intent(in) :: whalo, ehalo, shalo, nhalo
355 logical,
optional,
intent(in) :: complete
357 logical :: is_complete
382 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
386 if (mpp_group_update_initialized(group))
then 390 flags=flags, gridtype=gridtype, &
391 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
395 if(
present(complete)) is_complete = complete
414 array, array_tl, domain, flags, position, whalo, ehalo, shalo, nhalo, complete, complete_tl)
416 type(group_halo_update_type),
intent(inout) :: group
418 type(group_halo_update_type),
intent(inout) :: group_tl
420 real,
dimension(:,:),
intent(inout) :: array, array_tl
421 type(domain2D),
intent(inout) :: domain
422 integer,
optional,
intent(in) :: flags
423 integer,
optional,
intent(in) :: position
424 integer,
optional,
intent(in) :: whalo, ehalo, shalo, nhalo
425 logical,
optional,
intent(in) :: complete, complete_tl
427 logical :: is_complete, is_complete_tl
446 call mpp_update_domains(array , domain, flags=flags, position=position, whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
447 call mpp_update_domains(array_tl, domain, flags=flags, position=position, whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
451 if (mpp_group_update_initialized(group))
then 455 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
459 if(
present(complete)) is_complete = complete
465 if (mpp_group_update_initialized(group_tl))
then 469 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
472 is_complete_tl = .true.
473 if(
present(complete_tl)) is_complete_tl = complete_tl
474 if(is_complete_tl)
then 488 array, array_tl, domain, flags, position, whalo, ehalo, shalo, nhalo, complete, complete_tl)
490 type(group_halo_update_type),
intent(inout) :: group
492 type(group_halo_update_type),
intent(inout) :: group_tl
494 real,
dimension(:,:,:),
intent(inout) :: array, array_tl
495 type(domain2D),
intent(inout) :: domain
496 integer,
optional,
intent(in) :: flags
497 integer,
optional,
intent(in) :: position
498 integer,
optional,
intent(in) :: whalo, ehalo, shalo, nhalo
499 logical,
optional,
intent(in) :: complete, complete_tl
501 logical :: is_complete, is_complete_tl
521 call mpp_update_domains(array , domain, flags=flags, position=position, whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
522 call mpp_update_domains(array_tl, domain, flags=flags, position=position, whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
526 if (mpp_group_update_initialized(group))
then 530 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
534 if(
present(complete)) is_complete = complete
539 if (mpp_group_update_initialized(group_tl))
then 543 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
546 is_complete_tl = .true.
547 if(
present(complete_tl)) is_complete_tl = complete_tl
548 if(is_complete_tl)
then 562 array, array_tl, domain, flags, position, whalo, ehalo, shalo, nhalo, complete, complete_tl)
564 type(group_halo_update_type),
intent(inout) :: group
566 type(group_halo_update_type),
intent(inout) :: group_tl
568 real,
dimension(:,:,:,:),
intent(inout) :: array, array_tl
569 type(domain2D),
intent(inout) :: domain
570 integer,
optional,
intent(in) :: flags
571 integer,
optional,
intent(in) :: position
572 integer,
optional,
intent(in) :: whalo, ehalo, shalo, nhalo
573 logical,
optional,
intent(in) :: complete, complete_tl
575 logical :: is_complete, is_complete_tl
597 call mpp_update_domains(array , domain, flags=flags, position=position, whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
598 call mpp_update_domains(array_tl, domain, flags=flags, position=position, whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
602 if (mpp_group_update_initialized(group))
then 606 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
610 if(
present(complete)) is_complete = complete
615 if (mpp_group_update_initialized(group_tl))
then 619 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
622 is_complete_tl = .true.
623 if(
present(complete_tl)) is_complete_tl = complete_tl
624 if(is_complete_tl)
then 640 u_cmpt, u_cmpt_tl, v_cmpt, v_cmpt_tl, domain, flags, gridtype, whalo, ehalo, shalo, nhalo, complete, complete_tl)
642 type(group_halo_update_type),
intent(inout) :: group
644 type(group_halo_update_type),
intent(inout) :: group_tl
646 real,
dimension(:,:),
intent(inout) :: u_cmpt, v_cmpt
647 real,
dimension(:,:),
intent(inout) :: u_cmpt_tl, v_cmpt_tl
648 type(domain2d),
intent(inout) :: domain
649 integer,
optional,
intent(in) :: flags
650 integer,
optional,
intent(in) :: gridtype
651 integer,
optional,
intent(in) :: whalo, ehalo, shalo, nhalo
652 logical,
optional,
intent(in) :: complete, complete_tl
654 logical :: is_complete, is_complete_tl
679 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
680 call mpp_update_domains(u_cmpt_tl, v_cmpt_tl, domain, flags=flags, gridtype=gridtype, &
681 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
686 if (mpp_group_update_initialized(group))
then 690 flags=flags, gridtype=gridtype, &
691 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
695 if(
present(complete)) is_complete = complete
701 if (mpp_group_update_initialized(group_tl))
then 705 flags=flags, gridtype=gridtype, &
706 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
709 is_complete_tl = .true.
710 if(
present(complete_tl)) is_complete_tl = complete_tl
711 if(is_complete_tl)
then 725 u_cmpt, u_cmpt_tl, v_cmpt, v_cmpt_tl, domain, flags, gridtype, whalo, ehalo, shalo, nhalo, complete, complete_tl)
727 type(group_halo_update_type),
intent(inout) :: group
729 type(group_halo_update_type),
intent(inout) :: group_tl
731 real,
dimension(:,:,:),
intent(inout) :: u_cmpt, v_cmpt
732 real,
dimension(:,:,:),
intent(inout) :: u_cmpt_tl, v_cmpt_tl
733 type(domain2d),
intent(inout) :: domain
734 integer,
optional,
intent(in) :: flags
735 integer,
optional,
intent(in) :: gridtype
736 integer,
optional,
intent(in) :: whalo, ehalo, shalo, nhalo
737 logical,
optional,
intent(in) :: complete, complete_tl
739 logical :: is_complete, is_complete_tl
764 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
765 call mpp_update_domains(u_cmpt_tl, v_cmpt_tl, domain, flags=flags, gridtype=gridtype, &
766 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo, complete=complete)
771 if (mpp_group_update_initialized(group))
then 775 flags=flags, gridtype=gridtype, &
776 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
780 if(
present(complete)) is_complete = complete
785 if (mpp_group_update_initialized(group_tl))
then 789 flags=flags, gridtype=gridtype, &
790 whalo=whalo, ehalo=ehalo, shalo=shalo, nhalo=nhalo)
793 is_complete_tl = .true.
794 if(
present(complete_tl)) is_complete_tl = complete_tl
795 if(is_complete_tl)
then 815 type(group_halo_update_type),
intent(inout) :: group
817 type(group_halo_update_type),
intent(inout) :: group_tl
819 type(
domain2d),
intent(inout) :: domain
845 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: q
846 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: q_tl
847 integer,
intent(in) :: npx, npy
849 integer,
intent(in) :: fill
850 logical,
optional,
intent(in) :: agrid, bgrid
853 if (
present(bgrid))
then 860 if (is .eq. 1 .and. js .eq. 1)
then 861 q_tl(1-i, 1-j) = q_tl(1-j, i+1)
862 q(1-i, 1-j) = q(1-j, i+1)
865 if (is .eq. 1 .and. je .eq. npy - 1)
then 866 q_tl(1-i, npy+j) = q_tl(1-j, npy-i)
867 q(1-i, npy+j) = q(1-j, npy-i)
870 if (ie .eq. npx - 1 .and. js .eq. 1)
then 871 q_tl(npx+i, 1-j) = q_tl(npx+j, i+1)
872 q(npx+i, 1-j) = q(npx+j, i+1)
875 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 876 q_tl(npx+i, npy+j) = q_tl(npx+j, npy-i)
877 q(npx+i, npy+j) = q(npx+j, npy-i)
885 if (is .eq. 1 .and. js .eq. 1)
then 886 q_tl(1-j, 1-i) = q_tl(i+1, 1-j)
887 q(1-j, 1-i) = q(i+1, 1-j)
890 if (is .eq. 1 .and. je .eq. npy - 1)
then 891 q_tl(1-j, npy+i) = q_tl(i+1, npy+j)
892 q(1-j, npy+i) = q(i+1, npy+j)
895 if (ie .eq. npx - 1 .and. js .eq. 1)
then 896 q_tl(npx+j, 1-i) = q_tl(npx-i, 1-j)
897 q(npx+j, 1-i) = q(npx-i, 1-j)
900 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 901 q_tl(npx+j, npy+i) = q_tl(npx-i, npy+j)
902 q(npx+j, npy+i) = q(npx-i, npy+j)
910 if (is .eq. 1 .and. js .eq. 1)
then 911 q_tl(1-i, 1-j) = q_tl(1-j, i+1)
912 q(1-i, 1-j) = q(1-j, i+1)
915 if (is .eq. 1 .and. je .eq. npy - 1)
then 916 q_tl(1-i, npy+j) = q_tl(1-j, npy-i)
917 q(1-i, npy+j) = q(1-j, npy-i)
920 if (ie .eq. npx - 1 .and. js .eq. 1)
then 921 q_tl(npx+i, 1-j) = q_tl(npx+j, i+1)
922 q(npx+i, 1-j) = q(npx+j, i+1)
925 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 926 q_tl(npx+i, npy+j) = q_tl(npx+j, npy-i)
927 q(npx+i, npy+j) = q(npx+j, npy-i)
933 else if (
present(agrid))
then 940 if (is .eq. 1 .and. js .eq. 1)
then 941 q_tl(1-i, 1-j) = q_tl(1-j, i)
942 q(1-i, 1-j) = q(1-j, i)
945 if (is .eq. 1 .and. je .eq. npy - 1)
then 946 q_tl(1-i, npy-1+j) = q_tl(1-j, npy-1-i+1)
947 q(1-i, npy-1+j) = q(1-j, npy-1-i+1)
950 if (ie .eq. npx - 1 .and. js .eq. 1)
then 951 q_tl(npx-1+i, 1-j) = q_tl(npx-1+j, i)
952 q(npx-1+i, 1-j) = q(npx-1+j, i)
955 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 956 q_tl(npx-1+i, npy-1+j) = q_tl(npx-1+j, npy-1-i+1)
957 q(npx-1+i, npy-1+j) = q(npx-1+j, npy-1-i+1)
965 if (is .eq. 1 .and. js .eq. 1)
then 966 q_tl(1-j, 1-i) = q_tl(i, 1-j)
967 q(1-j, 1-i) = q(i, 1-j)
970 if (is .eq. 1 .and. je .eq. npy - 1)
then 971 q_tl(1-j, npy-1+i) = q_tl(i, npy-1+j)
972 q(1-j, npy-1+i) = q(i, npy-1+j)
975 if (ie .eq. npx - 1 .and. js .eq. 1)
then 976 q_tl(npx-1+j, 1-i) = q_tl(npx-1-i+1, 1-j)
977 q(npx-1+j, 1-i) = q(npx-1-i+1, 1-j)
980 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 981 q_tl(npx-1+j, npy-1+i) = q_tl(npx-1-i+1, npy-1+j)
982 q(npx-1+j, npy-1+i) = q(npx-1-i+1, npy-1+j)
990 if (is .eq. 1 .and. js .eq. 1)
then 991 q_tl(1-j, 1-i) = q_tl(i, 1-j)
992 q(1-j, 1-i) = q(i, 1-j)
995 if (is .eq. 1 .and. je .eq. npy - 1)
then 996 q_tl(1-j, npy-1+i) = q_tl(i, npy-1+j)
997 q(1-j, npy-1+i) = q(i, npy-1+j)
1000 if (ie .eq. npx - 1 .and. js .eq. 1)
then 1001 q_tl(npx-1+j, 1-i) = q_tl(npx-1-i+1, 1-j)
1002 q(npx-1+j, 1-i) = q(npx-1-i+1, 1-j)
1005 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 1006 q_tl(npx-1+j, npy-1+i) = q_tl(npx-1-i+1, npy-1+j)
1007 q(npx-1+j, npy-1+i) = q(npx-1-i+1, npy-1+j)
1018 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: q
1019 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: q_tl
1020 integer,
intent(in) :: npx, npy
1022 integer,
intent(in) :: fill
1023 logical,
optional,
intent(in) :: agrid, bgrid
1026 if (
present(bgrid))
then 1033 if (is .eq. 1 .and. js .eq. 1)
then 1034 q_tl(1-i, 1-j) = q_tl(1-j, i+1)
1035 q(1-i, 1-j) = q(1-j, i+1)
1038 if (is .eq. 1 .and. je .eq. npy - 1)
then 1039 q_tl(1-i, npy+j) = q_tl(1-j, npy-i)
1040 q(1-i, npy+j) = q(1-j, npy-i)
1043 if (ie .eq. npx - 1 .and. js .eq. 1)
then 1044 q_tl(npx+i, 1-j) = q_tl(npx+j, i+1)
1045 q(npx+i, 1-j) = q(npx+j, i+1)
1048 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 1049 q_tl(npx+i, npy+j) = q_tl(npx+j, npy-i)
1050 q(npx+i, npy+j) = q(npx+j, npy-i)
1058 if (is .eq. 1 .and. js .eq. 1)
then 1059 q_tl(1-j, 1-i) = q_tl(i+1, 1-j)
1060 q(1-j, 1-i) = q(i+1, 1-j)
1063 if (is .eq. 1 .and. je .eq. npy - 1)
then 1064 q_tl(1-j, npy+i) = q_tl(i+1, npy+j)
1065 q(1-j, npy+i) = q(i+1, npy+j)
1068 if (ie .eq. npx - 1 .and. js .eq. 1)
then 1069 q_tl(npx+j, 1-i) = q_tl(npx-i, 1-j)
1070 q(npx+j, 1-i) = q(npx-i, 1-j)
1073 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 1074 q_tl(npx+j, npy+i) = q_tl(npx-i, npy+j)
1075 q(npx+j, npy+i) = q(npx-i, npy+j)
1083 if (is .eq. 1 .and. js .eq. 1)
then 1084 q_tl(1-i, 1-j) = q_tl(1-j, i+1)
1085 q(1-i, 1-j) = q(1-j, i+1)
1088 if (is .eq. 1 .and. je .eq. npy - 1)
then 1089 q_tl(1-i, npy+j) = q_tl(1-j, npy-i)
1090 q(1-i, npy+j) = q(1-j, npy-i)
1093 if (ie .eq. npx - 1 .and. js .eq. 1)
then 1094 q_tl(npx+i, 1-j) = q_tl(npx+j, i+1)
1095 q(npx+i, 1-j) = q(npx+j, i+1)
1098 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 1099 q_tl(npx+i, npy+j) = q_tl(npx+j, npy-i)
1100 q(npx+i, npy+j) = q(npx+j, npy-i)
1106 else if (
present(agrid))
then 1113 if (is .eq. 1 .and. js .eq. 1)
then 1114 q_tl(1-i, 1-j) = q_tl(1-j, i)
1115 q(1-i, 1-j) = q(1-j, i)
1118 if (is .eq. 1 .and. je .eq. npy - 1)
then 1119 q_tl(1-i, npy-1+j) = q_tl(1-j, npy-1-i+1)
1120 q(1-i, npy-1+j) = q(1-j, npy-1-i+1)
1123 if (ie .eq. npx - 1 .and. js .eq. 1)
then 1124 q_tl(npx-1+i, 1-j) = q_tl(npx-1+j, i)
1125 q(npx-1+i, 1-j) = q(npx-1+j, i)
1128 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 1129 q_tl(npx-1+i, npy-1+j) = q_tl(npx-1+j, npy-1-i+1)
1130 q(npx-1+i, npy-1+j) = q(npx-1+j, npy-1-i+1)
1138 if (is .eq. 1 .and. js .eq. 1)
then 1139 q_tl(1-j, 1-i) = q_tl(i, 1-j)
1140 q(1-j, 1-i) = q(i, 1-j)
1143 if (is .eq. 1 .and. je .eq. npy - 1)
then 1144 q_tl(1-j, npy-1+i) = q_tl(i, npy-1+j)
1145 q(1-j, npy-1+i) = q(i, npy-1+j)
1148 if (ie .eq. npx - 1 .and. js .eq. 1)
then 1149 q_tl(npx-1+j, 1-i) = q_tl(npx-1-i+1, 1-j)
1150 q(npx-1+j, 1-i) = q(npx-1-i+1, 1-j)
1153 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 1154 q_tl(npx-1+j, npy-1+i) = q_tl(npx-1-i+1, npy-1+j)
1155 q(npx-1+j, npy-1+i) = q(npx-1-i+1, npy-1+j)
1163 if (is .eq. 1 .and. js .eq. 1)
then 1164 q_tl(1-j, 1-i) = q_tl(i, 1-j)
1165 q(1-j, 1-i) = q(i, 1-j)
1168 if (is .eq. 1 .and. je .eq. npy - 1)
then 1169 q_tl(1-j, npy-1+i) = q_tl(i, npy-1+j)
1170 q(1-j, npy-1+i) = q(i, npy-1+j)
1173 if (ie .eq. npx - 1 .and. js .eq. 1)
then 1174 q_tl(npx-1+j, 1-i) = q_tl(npx-1-i+1, 1-j)
1175 q(npx-1+j, 1-i) = q(npx-1-i+1, 1-j)
1178 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 1179 q_tl(npx-1+j, npy-1+i) = q_tl(npx-1-i+1, npy-1+j)
1180 q(npx-1+j, npy-1+i) = q(npx-1-i+1, npy-1+j)
1190 & , agrid, cgrid, vector)
1193 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: x
1194 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: x_tl
1196 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: y
1197 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: y_tl
1198 integer,
intent(in) :: npx, npy
1199 logical,
optional,
intent(in) :: dgrid, agrid, cgrid, vector
1201 real(kind=4) :: mysign
1204 if (
present(vector))
then 1205 if (vector) mysign = -1.0
1207 if (
present(dgrid))
then 1209 else if (
present(cgrid))
then 1211 else if (
present(agrid))
then 1219 & , agrid, cgrid, vector)
1222 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: x
1223 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: x_tl
1225 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: y
1226 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: y_tl
1227 integer,
intent(in) :: npx, npy
1228 logical,
optional,
intent(in) :: dgrid, agrid, cgrid, vector
1230 real(kind=8) :: mysign
1233 if (
present(vector))
then 1234 if (vector) mysign = -1.0
1236 if (
present(dgrid))
then 1238 else if (
present(cgrid))
then 1240 else if (
present(agrid))
then 1250 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: x
1251 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: x_tl
1252 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: y
1253 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: y_tl
1254 integer,
intent(in) :: npx, npy
1255 real(kind=4),
intent(in) :: mysign
1260 if (is .eq. 1 .and. js .eq. 1)
then 1261 x_tl(1-i, 1-j) = mysign*y_tl(1-j, i)
1262 x(1-i, 1-j) = mysign*y(1-j, i)
1265 if (is .eq. 1 .and. je .eq. npy - 1)
then 1266 x_tl(1-i, npy-1+j) = y_tl(1-j, npy-1-i+1)
1267 x(1-i, npy-1+j) = y(1-j, npy-1-i+1)
1270 if (ie .eq. npx - 1 .and. js .eq. 1)
then 1271 x_tl(npx-1+i, 1-j) = y_tl(npx-1+j, i)
1272 x(npx-1+i, 1-j) = y(npx-1+j, i)
1275 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 1276 x_tl(npx-1+i, npy-1+j) = mysign*y_tl(npx-1+j, npy-1-i+1)
1277 x(npx-1+i, npy-1+j) = mysign*y(npx-1+j, npy-1-i+1)
1284 if (is .eq. 1 .and. js .eq. 1)
then 1285 y_tl(1-j, 1-i) = mysign*x_tl(i, 1-j)
1286 y(1-j, 1-i) = mysign*x(i, 1-j)
1289 if (is .eq. 1 .and. je .eq. npy - 1)
then 1290 y_tl(1-j, npy-1+i) = x_tl(i, npy-1+j)
1291 y(1-j, npy-1+i) = x(i, npy-1+j)
1294 if (ie .eq. npx - 1 .and. js .eq. 1)
then 1295 y_tl(npx-1+j, 1-i) = x_tl(npx-1-i+1, 1-j)
1296 y(npx-1+j, 1-i) = x(npx-1-i+1, 1-j)
1299 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 1300 y_tl(npx-1+j, npy-1+i) = mysign*x_tl(npx-1-i+1, npy-1+j)
1301 y(npx-1+j, npy-1+i) = mysign*x(npx-1-i+1, npy-1+j)
1310 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: x
1311 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: x_tl
1312 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: y
1313 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: y_tl
1314 integer,
intent(in) :: npx, npy
1315 real(kind=8),
intent(in) :: mysign
1320 if (is .eq. 1 .and. js .eq. 1)
then 1321 x_tl(1-i, 1-j) = mysign*y_tl(1-j, i)
1322 x(1-i, 1-j) = mysign*y(1-j, i)
1325 if (is .eq. 1 .and. je .eq. npy - 1)
then 1326 x_tl(1-i, npy-1+j) = y_tl(1-j, npy-1-i+1)
1327 x(1-i, npy-1+j) = y(1-j, npy-1-i+1)
1330 if (ie .eq. npx - 1 .and. js .eq. 1)
then 1331 x_tl(npx-1+i, 1-j) = y_tl(npx-1+j, i)
1332 x(npx-1+i, 1-j) = y(npx-1+j, i)
1335 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 1336 x_tl(npx-1+i, npy-1+j) = mysign*y_tl(npx-1+j, npy-1-i+1)
1337 x(npx-1+i, npy-1+j) = mysign*y(npx-1+j, npy-1-i+1)
1344 if (is .eq. 1 .and. js .eq. 1)
then 1345 y_tl(1-j, 1-i) = mysign*x_tl(i, 1-j)
1346 y(1-j, 1-i) = mysign*x(i, 1-j)
1349 if (is .eq. 1 .and. je .eq. npy - 1)
then 1350 y_tl(1-j, npy-1+i) = x_tl(i, npy-1+j)
1351 y(1-j, npy-1+i) = x(i, npy-1+j)
1354 if (ie .eq. npx - 1 .and. js .eq. 1)
then 1355 y_tl(npx-1+j, 1-i) = x_tl(npx-1-i+1, 1-j)
1356 y(npx-1+j, 1-i) = x(npx-1-i+1, 1-j)
1359 if (ie .eq. npx - 1 .and. je .eq. npy - 1)
then 1360 y_tl(npx-1+j, npy-1+i) = mysign*x_tl(npx-1-i+1, npy-1+j)
1361 y(npx-1+j, npy-1+i) = mysign*x(npx-1-i+1, npy-1+j)
1370 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: x
1371 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: x_tl
1372 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: y
1373 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: y_tl
1374 integer,
intent(in) :: npx, npy
1375 real(kind=4),
intent(in) :: mysign
1380 if (is .eq. 1 .and. js .eq. 1)
then 1381 x_tl(1-i, 1-j) = y_tl(j, 1-i)
1382 x(1-i, 1-j) = y(j, 1-i)
1385 if (is .eq. 1 .and. je + 1 .eq. npy)
then 1386 x_tl(1-i, npy-1+j) = mysign*y_tl(j, npy+i)
1387 x(1-i, npy-1+j) = mysign*y(j, npy+i)
1390 if (ie + 1 .eq. npx .and. js .eq. 1)
then 1391 x_tl(npx+i, 1-j) = mysign*y_tl(npx-j, 1-i)
1392 x(npx+i, 1-j) = mysign*y(npx-j, 1-i)
1395 if (ie + 1 .eq. npx .and. je + 1 .eq. npy)
then 1396 x_tl(npx+i, npy-1+j) = y_tl(npx-j, npy+i)
1397 x(npx+i, npy-1+j) = y(npx-j, npy+i)
1404 if (is .eq. 1 .and. js .eq. 1)
then 1405 y_tl(1-i, 1-j) = x_tl(1-j, i)
1406 y(1-i, 1-j) = x(1-j, i)
1409 if (is .eq. 1 .and. je + 1 .eq. npy)
then 1410 y_tl(1-i, npy+j) = mysign*x_tl(1-j, npy-i)
1411 y(1-i, npy+j) = mysign*x(1-j, npy-i)
1414 if (ie + 1 .eq. npx .and. js .eq. 1)
then 1415 y_tl(npx-1+i, 1-j) = mysign*x_tl(npx+j, i)
1416 y(npx-1+i, 1-j) = mysign*x(npx+j, i)
1419 if (ie + 1 .eq. npx .and. je + 1 .eq. npy)
then 1420 y_tl(npx-1+i, npy+j) = x_tl(npx+j, npy-i)
1421 y(npx-1+i, npy+j) = x(npx+j, npy-i)
1430 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: x
1431 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: x_tl
1432 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: y
1433 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: y_tl
1434 integer,
intent(in) :: npx, npy
1435 real(kind=8),
intent(in) :: mysign
1440 if (is .eq. 1 .and. js .eq. 1)
then 1441 x_tl(1-i, 1-j) = y_tl(j, 1-i)
1442 x(1-i, 1-j) = y(j, 1-i)
1445 if (is .eq. 1 .and. je + 1 .eq. npy)
then 1446 x_tl(1-i, npy-1+j) = mysign*y_tl(j, npy+i)
1447 x(1-i, npy-1+j) = mysign*y(j, npy+i)
1450 if (ie + 1 .eq. npx .and. js .eq. 1)
then 1451 x_tl(npx+i, 1-j) = mysign*y_tl(npx-j, 1-i)
1452 x(npx+i, 1-j) = mysign*y(npx-j, 1-i)
1455 if (ie + 1 .eq. npx .and. je + 1 .eq. npy)
then 1456 x_tl(npx+i, npy-1+j) = y_tl(npx-j, npy+i)
1457 x(npx+i, npy-1+j) = y(npx-j, npy+i)
1464 if (is .eq. 1 .and. js .eq. 1)
then 1465 y_tl(1-i, 1-j) = x_tl(1-j, i)
1466 y(1-i, 1-j) = x(1-j, i)
1469 if (is .eq. 1 .and. je + 1 .eq. npy)
then 1470 y_tl(1-i, npy+j) = mysign*x_tl(1-j, npy-i)
1471 y(1-i, npy+j) = mysign*x(1-j, npy-i)
1474 if (ie + 1 .eq. npx .and. js .eq. 1)
then 1475 y_tl(npx-1+i, 1-j) = mysign*x_tl(npx+j, i)
1476 y(npx-1+i, 1-j) = mysign*x(npx+j, i)
1479 if (ie + 1 .eq. npx .and. je + 1 .eq. npy)
then 1480 y_tl(npx-1+i, npy+j) = x_tl(npx+j, npy-i)
1481 y(npx-1+i, npy+j) = x(npx+j, npy-i)
1490 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: x
1491 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: x_tl
1492 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: y
1493 real(kind=4),
dimension(isd:, jsd:),
intent(inout) :: y_tl
1494 integer,
intent(in) :: npx, npy
1495 real(kind=4),
intent(in) :: mysign
1504 if (is .eq. 1 .and. js .eq. 1)
then 1505 x_tl(1-i, 1-j) = mysign*y_tl(1-j, i)
1506 x(1-i, 1-j) = mysign*y(1-j, i)
1509 if (is .eq. 1 .and. je + 1 .eq. npy)
then 1510 x_tl(1-i, npy+j) = y_tl(1-j, npy-i)
1511 x(1-i, npy+j) = y(1-j, npy-i)
1514 if (ie + 1 .eq. npx .and. js .eq. 1)
then 1515 x_tl(npx-1+i, 1-j) = y_tl(npx+j, i)
1516 x(npx-1+i, 1-j) = y(npx+j, i)
1519 if (ie + 1 .eq. npx .and. je + 1 .eq. npy)
then 1520 x_tl(npx-1+i, npy+j) = mysign*y_tl(npx+j, npy-i)
1521 x(npx-1+i, npy+j) = mysign*y(npx+j, npy-i)
1532 if (is .eq. 1 .and. js .eq. 1)
then 1533 y_tl(1-i, 1-j) = mysign*x_tl(j, 1-i)
1534 y(1-i, 1-j) = mysign*x(j, 1-i)
1537 if (is .eq. 1 .and. je + 1 .eq. npy)
then 1538 y_tl(1-i, npy-1+j) = x_tl(j, npy+i)
1539 y(1-i, npy-1+j) = x(j, npy+i)
1542 if (ie + 1 .eq. npx .and. js .eq. 1)
then 1543 y_tl(npx+i, 1-j) = x_tl(npx-j, 1-i)
1544 y(npx+i, 1-j) = x(npx-j, 1-i)
1547 if (ie + 1 .eq. npx .and. je + 1 .eq. npy)
then 1548 y_tl(npx+i, npy-1+j) = mysign*x_tl(npx-j, npy+i)
1549 y(npx+i, npy-1+j) = mysign*x(npx-j, npy+i)
1558 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: x
1559 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: x_tl
1560 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: y
1561 real(kind=8),
dimension(isd:, jsd:),
intent(inout) :: y_tl
1562 integer,
intent(in) :: npx, npy
1563 real(kind=8),
intent(in) :: mysign
1572 if (is .eq. 1 .and. js .eq. 1)
then 1573 x_tl(1-i, 1-j) = mysign*y_tl(1-j, i)
1574 x(1-i, 1-j) = mysign*y(1-j, i)
1577 if (is .eq. 1 .and. je + 1 .eq. npy)
then 1578 x_tl(1-i, npy+j) = y_tl(1-j, npy-i)
1579 x(1-i, npy+j) = y(1-j, npy-i)
1582 if (ie + 1 .eq. npx .and. js .eq. 1)
then 1583 x_tl(npx-1+i, 1-j) = y_tl(npx+j, i)
1584 x(npx-1+i, 1-j) = y(npx+j, i)
1587 if (ie + 1 .eq. npx .and. je + 1 .eq. npy)
then 1588 x_tl(npx-1+i, npy+j) = mysign*y_tl(npx+j, npy-i)
1589 x(npx-1+i, npy+j) = mysign*y(npx+j, npy-i)
1600 if (is .eq. 1 .and. js .eq. 1)
then 1601 y_tl(1-i, 1-j) = mysign*x_tl(j, 1-i)
1602 y(1-i, 1-j) = mysign*x(j, 1-i)
1605 if (is .eq. 1 .and. je + 1 .eq. npy)
then 1606 y_tl(1-i, npy-1+j) = x_tl(j, npy+i)
1607 y(1-i, npy-1+j) = x(j, npy+i)
1610 if (ie + 1 .eq. npx .and. js .eq. 1)
then 1611 y_tl(npx+i, 1-j) = x_tl(npx-j, 1-i)
1612 y(npx+i, 1-j) = x(npx-j, 1-i)
1615 if (ie + 1 .eq. npx .and. je + 1 .eq. npy)
then 1616 y_tl(npx+i, npy-1+j) = mysign*x_tl(npx-j, npy+i)
1617 y(npx+i, npy-1+j) = mysign*x(npx-j, npy+i)
1628 real(kind=4),
intent(INOUT) :: mysum, mysum_tl
1630 real(kind=4) :: gsum, gsum_tl
1632 call mpi_allreduce( mysum, gsum, 1, mpi_real, mpi_sum, &
1634 call mpi_allreduce( mysum_tl, gsum_tl, 1, mpi_real, mpi_sum, &
1643 real(kind=8),
intent(INOUT) :: mysum, mysum_tl
1645 real(kind=8) :: gsum, gsum_tl
1647 call mpi_allreduce( mysum, gsum, 1, mpi_double_precision, mpi_sum, &
1649 call mpi_allreduce( mysum_tl, gsum_tl, 1, mpi_double_precision, mpi_sum, &
1658 integer,
intent(in) :: npts
1659 real(kind=4),
intent(in) :: sum1d(npts), sum1d_tl(npts)
1660 real(kind=4),
intent(INOUT) :: mysum, mysum_tl
1662 real(kind=4) :: gsum, gsum_tl
1668 mysum = mysum + sum1d(i)
1669 mysum_tl = mysum_tl + sum1d_tl(i)
1672 call mpi_allreduce( mysum, gsum, 1, mpi_double_precision, mpi_sum, &
1674 call mpi_allreduce( mysum_tl, gsum_tl, 1, mpi_double_precision, mpi_sum, &
1683 integer,
intent(in) :: npts
1684 real(kind=8),
intent(in) :: sum1d(npts), sum1d_tl(npts)
1685 real(kind=8),
intent(INOUT) :: mysum, mysum_tl
1687 real(kind=8) :: gsum, gsum_tl
1693 mysum = mysum + sum1d(i)
1694 mysum_tl = mysum_tl + sum1d_tl(i)
1697 call mpi_allreduce( mysum, gsum, 1, mpi_double_precision, mpi_sum, &
1699 call mpi_allreduce( mysum_tl, gsum_tl, 1, mpi_double_precision, mpi_sum, &
1717 real(kind=r_grid) function mpp_global_sum_2d_tlm(domain, field, field_tl, flags, position, tile_count, mpp_global_sum_2d)
1720 type(
domain2d),
intent(in) :: domain
1721 real(r_grid),
intent(in) :: field(:, :)
1722 real(r_grid),
intent(in) :: field_tl(:, :)
1723 integer,
intent(in),
optional :: flags
1724 integer,
intent(in),
optional :: position
1725 integer,
intent(in),
optional :: tile_count
1726 real(kind=r_grid) :: mpp_global_sum_2d
1728 mpp_global_sum_2d =
mpp_global_sum(domain,field,flags=flags,position=position,tile_count=tile_count)
1738 whalo, ehalo, shalo, nhalo, name, tile_count)
1740 real,
dimension(:,:),
intent(inout) :: array, array_tl
1741 type(domain2d),
intent(inout) :: domain
1742 integer,
intent(in),
optional :: flags
1743 logical,
intent(in),
optional :: complete
1744 integer,
intent(in),
optional :: position
1745 integer,
intent(in),
optional :: whalo, ehalo, shalo, nhalo
1746 character(len=*),
intent(in),
optional :: name
1747 integer,
intent(in),
optional :: tile_count
1752 flags = flags, complete = complete, position = position, &
1753 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1754 name = name, tile_count = tile_count )
1756 flags = flags, complete = complete, position = position, &
1757 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1758 name = name, tile_count = tile_count )
1765 whalo, ehalo, shalo, nhalo, name, tile_count)
1767 real,
dimension(:,:,:),
intent(inout) :: array, array_tl
1768 type(domain2d),
intent(inout) :: domain
1769 integer,
intent(in),
optional :: flags
1770 logical,
intent(in),
optional :: complete
1771 integer,
intent(in),
optional :: position
1772 integer,
intent(in),
optional :: whalo, ehalo, shalo, nhalo
1773 character(len=*),
intent(in),
optional :: name
1774 integer,
intent(in),
optional :: tile_count
1779 flags = flags, complete = complete, position = position, &
1780 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1781 name = name, tile_count = tile_count )
1783 flags = flags, complete = complete, position = position, &
1784 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1785 name = name, tile_count = tile_count )
1792 whalo, ehalo, shalo, nhalo, name, tile_count)
1794 real,
dimension(:,:,:,:),
intent(inout) :: array, array_tl
1795 type(domain2d),
intent(inout) :: domain
1796 integer,
intent(in),
optional :: flags
1797 logical,
intent(in),
optional :: complete
1798 integer,
intent(in),
optional :: position
1799 integer,
intent(in),
optional :: whalo, ehalo, shalo, nhalo
1800 character(len=*),
intent(in),
optional :: name
1801 integer,
intent(in),
optional :: tile_count
1806 flags = flags, complete = complete, position = position, &
1807 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1808 name = name, tile_count = tile_count )
1810 flags = flags, complete = complete, position = position, &
1811 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1812 name = name, tile_count = tile_count )
1819 whalo, ehalo, shalo, nhalo, name, tile_count)
1821 real,
dimension(:,:,:,:,:),
intent(inout) :: array, array_tl
1822 type(domain2d),
intent(inout) :: domain
1823 integer,
intent(in),
optional :: flags
1824 logical,
intent(in),
optional :: complete
1825 integer,
intent(in),
optional :: position
1826 integer,
intent(in),
optional :: whalo, ehalo, shalo, nhalo
1827 character(len=*),
intent(in),
optional :: name
1828 integer,
intent(in),
optional :: tile_count
1833 flags = flags, complete = complete, position = position, &
1834 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1835 name = name, tile_count = tile_count )
1837 flags = flags, complete = complete, position = position, &
1838 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1839 name = name, tile_count = tile_count )
1846 whalo, ehalo, shalo, nhalo, name, tile_count )
1848 real,
dimension(:,:),
intent(inout) :: u_cmpt, v_cmpt, u_cmpt_tl, v_cmpt_tl
1849 type(domain2d),
intent(inout) :: domain
1850 integer,
intent(in),
optional :: flags, gridtype
1851 logical,
intent(in),
optional :: complete
1852 integer,
intent(in),
optional :: whalo, ehalo, shalo, nhalo
1853 character(len=*),
intent(in),
optional :: name
1854 integer,
intent(in),
optional :: tile_count
1858 call mpp_update_domains( u_cmpt,v_cmpt,domain,flags = flags, gridtype = gridtype, complete = complete, &
1859 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1860 name = name, tile_count = tile_count )
1861 call mpp_update_domains( u_cmpt_tl,v_cmpt_tl,domain,flags = flags, gridtype = gridtype, complete = complete, &
1862 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1863 name = name, tile_count = tile_count )
1870 whalo, ehalo, shalo, nhalo, name, tile_count )
1872 real,
dimension(:,:,:),
intent(inout) :: u_cmpt, v_cmpt, u_cmpt_tl, v_cmpt_tl
1873 type(domain2d),
intent(inout) :: domain
1874 integer,
intent(in),
optional :: flags, gridtype
1875 logical,
intent(in),
optional :: complete
1876 integer,
intent(in),
optional :: whalo, ehalo, shalo, nhalo
1877 character(len=*),
intent(in),
optional :: name
1878 integer,
intent(in),
optional :: tile_count
1882 call mpp_update_domains( u_cmpt,v_cmpt,domain,flags = flags, gridtype = gridtype, complete = complete, &
1883 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1884 name = name, tile_count = tile_count )
1885 call mpp_update_domains( u_cmpt_tl,v_cmpt_tl,domain,flags = flags, gridtype = gridtype, complete = complete, &
1886 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1887 name = name, tile_count = tile_count )
1894 whalo, ehalo, shalo, nhalo, name, tile_count )
1896 real,
dimension(:,:,:,:),
intent(inout) :: u_cmpt, v_cmpt, u_cmpt_tl, v_cmpt_tl
1897 type(domain2d),
intent(inout) :: domain
1898 integer,
intent(in),
optional :: flags, gridtype
1899 logical,
intent(in),
optional :: complete
1900 integer,
intent(in),
optional :: whalo, ehalo, shalo, nhalo
1901 character(len=*),
intent(in),
optional :: name
1902 integer,
intent(in),
optional :: tile_count
1906 call mpp_update_domains( u_cmpt,v_cmpt,domain,flags = flags, gridtype = gridtype, complete = complete, &
1907 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1908 name = name, tile_count = tile_count )
1909 call mpp_update_domains( u_cmpt_tl,v_cmpt_tl,domain,flags = flags, gridtype = gridtype, complete = complete, &
1910 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1911 name = name, tile_count = tile_count )
1918 whalo, ehalo, shalo, nhalo, name, tile_count )
1920 real,
dimension(:,:,:,:,:),
intent(inout) :: u_cmpt, v_cmpt, u_cmpt_tl, v_cmpt_tl
1921 type(domain2d),
intent(inout) :: domain
1922 integer,
intent(in),
optional :: flags, gridtype
1923 logical,
intent(in),
optional :: complete
1924 integer,
intent(in),
optional :: whalo, ehalo, shalo, nhalo
1925 character(len=*),
intent(in),
optional :: name
1926 integer,
intent(in),
optional :: tile_count
1930 call mpp_update_domains( u_cmpt,v_cmpt,domain,flags = flags, gridtype = gridtype, complete = complete, &
1931 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1932 name = name, tile_count = tile_count )
1933 call mpp_update_domains( u_cmpt_tl,v_cmpt_tl,domain,flags = flags, gridtype = gridtype, complete = complete, &
1934 whalo = whalo, ehalo = ehalo, shalo = shalo, nhalo = nhalo, &
1935 name = name, tile_count = tile_count )
1946 ebuffer, ebuffer_tl, &
1947 sbuffer, sbuffer_tl, &
1948 wbuffer, wbuffer_tl, &
1949 nbuffer, nbuffer_tl, &
1950 flags, position, complete, tile_count )
1952 real,
dimension(:,:),
intent(in) :: array, array_tl
1953 type(domain2d),
intent(in) :: domain
1954 real,
intent(inout),
optional :: ebuffer(:), sbuffer(:), wbuffer(:), nbuffer(:)
1955 real,
intent(inout),
optional :: ebuffer_tl(:), sbuffer_tl(:), wbuffer_tl(:), nbuffer_tl(:)
1956 integer,
intent(in),
optional :: flags, position, tile_count
1957 logical,
intent(in),
optional :: complete
1961 if (
present(wbuffer)) wbuffer = 0.0
1962 if (
present(sbuffer)) sbuffer = 0.0
1963 if (
present(ebuffer)) ebuffer = 0.0
1964 if (
present(nbuffer)) nbuffer = 0.0
1965 if (
present(wbuffer_tl)) wbuffer_tl = 0.0
1966 if (
present(sbuffer_tl)) sbuffer_tl = 0.0
1967 if (
present(ebuffer_tl)) ebuffer_tl = 0.0
1968 if (
present(nbuffer_tl)) nbuffer_tl = 0.0
1970 call mpp_get_boundary( array,domain,ebuffer=ebuffer,sbuffer=sbuffer,wbuffer=wbuffer,nbuffer=nbuffer,&
1971 flags = flags, position = position, complete = complete, tile_count = tile_count )
1972 call mpp_get_boundary( array_tl,domain,ebuffer=ebuffer_tl,sbuffer=sbuffer_tl,wbuffer=wbuffer_tl,nbuffer=nbuffer_tl,&
1973 flags = flags, position = position, complete = complete, tile_count = tile_count )
1980 ebuffer, ebuffer_tl, &
1981 sbuffer, sbuffer_tl, &
1982 wbuffer, wbuffer_tl, &
1983 nbuffer, nbuffer_tl, &
1984 flags, position, complete, tile_count )
1986 real,
dimension(:,:,:),
intent(in) :: array, array_tl
1987 type(domain2d),
intent(in) :: domain
1988 real,
intent(inout),
optional :: ebuffer(:,:), sbuffer(:,:), wbuffer(:,:), nbuffer(:,:)
1989 real,
intent(inout),
optional :: ebuffer_tl(:,:), sbuffer_tl(:,:), wbuffer_tl(:,:), nbuffer_tl(:,:)
1990 integer,
intent(in),
optional :: flags, position, tile_count
1991 logical,
intent(in),
optional :: complete
1993 if (
present(wbuffer)) wbuffer = 0.0
1994 if (
present(sbuffer)) sbuffer = 0.0
1995 if (
present(ebuffer)) ebuffer = 0.0
1996 if (
present(nbuffer)) nbuffer = 0.0
1997 if (
present(wbuffer_tl)) wbuffer_tl = 0.0
1998 if (
present(sbuffer_tl)) sbuffer_tl = 0.0
1999 if (
present(ebuffer_tl)) ebuffer_tl = 0.0
2000 if (
present(nbuffer_tl)) nbuffer_tl = 0.0
2004 call mpp_get_boundary( array,domain,ebuffer=ebuffer,sbuffer=sbuffer,wbuffer=wbuffer,nbuffer=nbuffer,&
2005 flags = flags, position = position, complete = complete, tile_count = tile_count )
2006 call mpp_get_boundary( array_tl,domain,ebuffer=ebuffer_tl,sbuffer=sbuffer_tl,wbuffer=wbuffer_tl,nbuffer=nbuffer_tl,&
2007 flags = flags, position = position, complete = complete, tile_count = tile_count )
2014 ebufferx, ebufferx_tl, &
2015 sbufferx, sbufferx_tl, &
2016 wbufferx, wbufferx_tl, &
2017 nbufferx, nbufferx_tl, &
2018 ebuffery, ebuffery_tl, &
2019 sbuffery, sbuffery_tl, &
2020 wbuffery, wbuffery_tl, &
2021 nbuffery, nbuffery_tl, &
2022 flags, gridtype, complete, tile_count )
2024 real,
dimension(:,:),
intent(in) :: u_cmpt, u_cmpt_tl, v_cmpt, v_cmpt_tl
2025 type(domain2d),
intent(in) :: domain
2026 real,
intent(inout),
optional :: ebufferx(:), sbufferx(:), wbufferx(:), nbufferx(:)
2027 real,
intent(inout),
optional :: ebufferx_tl(:), sbufferx_tl(:), wbufferx_tl(:), nbufferx_tl(:)
2028 real,
intent(inout),
optional :: ebuffery(:), sbuffery(:), wbuffery(:), nbuffery(:)
2029 real,
intent(inout),
optional :: ebuffery_tl(:), sbuffery_tl(:), wbuffery_tl(:), nbuffery_tl(:)
2030 integer,
intent(in),
optional :: flags, gridtype, tile_count
2031 logical,
intent(in),
optional :: complete
2035 if (
present(wbufferx)) wbufferx = 0.0
2036 if (
present(sbufferx)) sbufferx = 0.0
2037 if (
present(ebufferx)) ebufferx = 0.0
2038 if (
present(nbufferx)) nbufferx = 0.0
2039 if (
present(wbufferx_tl)) wbufferx_tl = 0.0
2040 if (
present(sbufferx_tl)) sbufferx_tl = 0.0
2041 if (
present(ebufferx_tl)) ebufferx_tl = 0.0
2042 if (
present(nbufferx_tl)) nbufferx_tl = 0.0
2043 if (
present(wbuffery)) wbuffery = 0.0
2044 if (
present(sbuffery)) sbuffery = 0.0
2045 if (
present(ebuffery)) ebuffery = 0.0
2046 if (
present(nbuffery)) nbuffery = 0.0
2047 if (
present(wbuffery_tl)) wbuffery_tl = 0.0
2048 if (
present(sbuffery_tl)) sbuffery_tl = 0.0
2049 if (
present(ebuffery_tl)) ebuffery_tl = 0.0
2050 if (
present(nbuffery_tl)) nbuffery_tl = 0.0
2053 ebufferx = ebufferx, &
2054 sbufferx = sbufferx, &
2055 wbufferx = wbufferx, &
2056 nbufferx = nbufferx, &
2057 ebuffery = ebuffery, &
2058 sbuffery = sbuffery, &
2059 wbuffery = wbuffery, &
2060 nbuffery = nbuffery, &
2061 flags = flags, gridtype = gridtype, &
2062 complete = complete, tile_count = tile_count )
2065 ebufferx = ebufferx_tl, &
2066 sbufferx = sbufferx_tl, &
2067 wbufferx = wbufferx_tl, &
2068 nbufferx = nbufferx_tl, &
2069 ebuffery = ebuffery_tl, &
2070 sbuffery = sbuffery_tl, &
2071 wbuffery = wbuffery_tl, &
2072 nbuffery = nbuffery_tl, &
2073 flags = flags, gridtype = gridtype, &
2074 complete = complete, tile_count = tile_count )
2081 ebufferx, ebufferx_tl, &
2082 sbufferx, sbufferx_tl, &
2083 wbufferx, wbufferx_tl, &
2084 nbufferx, nbufferx_tl, &
2085 ebuffery, ebuffery_tl, &
2086 sbuffery, sbuffery_tl, &
2087 wbuffery, wbuffery_tl, &
2088 nbuffery, nbuffery_tl, &
2089 flags, gridtype, complete, tile_count )
2091 real,
dimension(:,:,:),
intent(in) :: u_cmpt, u_cmpt_tl, v_cmpt, v_cmpt_tl
2092 type(domain2d),
intent(in) :: domain
2093 real,
intent(inout),
optional :: ebufferx(:,:), sbufferx(:,:), wbufferx(:,:), nbufferx(:,:)
2094 real,
intent(inout),
optional :: ebufferx_tl(:,:), sbufferx_tl(:,:), wbufferx_tl(:,:), nbufferx_tl(:,:)
2095 real,
intent(inout),
optional :: ebuffery(:,:), sbuffery(:,:), wbuffery(:,:), nbuffery(:,:)
2096 real,
intent(inout),
optional :: ebuffery_tl(:,:), sbuffery_tl(:,:), wbuffery_tl(:,:), nbuffery_tl(:,:)
2097 integer,
intent(in),
optional :: flags, gridtype, tile_count
2098 logical,
intent(in),
optional :: complete
2102 if (
present(wbufferx)) wbufferx = 0.0
2103 if (
present(sbufferx)) sbufferx = 0.0
2104 if (
present(ebufferx)) ebufferx = 0.0
2105 if (
present(nbufferx)) nbufferx = 0.0
2106 if (
present(wbufferx_tl)) wbufferx_tl = 0.0
2107 if (
present(sbufferx_tl)) sbufferx_tl = 0.0
2108 if (
present(ebufferx_tl)) ebufferx_tl = 0.0
2109 if (
present(nbufferx_tl)) nbufferx_tl = 0.0
2110 if (
present(wbuffery)) wbuffery = 0.0
2111 if (
present(sbuffery)) sbuffery = 0.0
2112 if (
present(ebuffery)) ebuffery = 0.0
2113 if (
present(nbuffery)) nbuffery = 0.0
2114 if (
present(wbuffery_tl)) wbuffery_tl = 0.0
2115 if (
present(sbuffery_tl)) sbuffery_tl = 0.0
2116 if (
present(ebuffery_tl)) ebuffery_tl = 0.0
2117 if (
present(nbuffery_tl)) nbuffery_tl = 0.0
2120 ebufferx = ebufferx, &
2121 sbufferx = sbufferx, &
2122 wbufferx = wbufferx, &
2123 nbufferx = nbufferx, &
2124 ebuffery = ebuffery, &
2125 sbuffery = sbuffery, &
2126 wbuffery = wbuffery, &
2127 nbuffery = nbuffery, &
2128 flags = flags, gridtype = gridtype, &
2129 complete = complete, tile_count = tile_count )
2132 ebufferx = ebufferx_tl, &
2133 sbufferx = sbufferx_tl, &
2134 wbufferx = wbufferx_tl, &
2135 nbufferx = nbufferx_tl, &
2136 ebuffery = ebuffery_tl, &
2137 sbuffery = sbuffery_tl, &
2138 wbuffery = wbuffery_tl, &
2139 nbuffery = nbuffery_tl, &
2140 flags = flags, gridtype = gridtype, &
2141 complete = complete, tile_count = tile_count )
subroutine start_var_group_update_2d_tlm(group, group_tl, array, array_tl, domain, flags, position, whalo, ehalo, shalo, nhalo, complete, complete_tl)
subroutine start_vector_group_update_3d(group, u_cmpt, v_cmpt, domain, flags, gridtype, whalo, ehalo, shalo, nhalo, complete)
subroutine mpp_update_domain2d_5dv_tlm(u_cmpt, u_cmpt_tl, v_cmpt, v_cmpt_tl, domain, flags, gridtype, complete, whalo, ehalo, shalo, nhalo, name, tile_count)
subroutine fill_corners_2d_r4_tlm(q, q_tl, npx, npy, fill, agrid, bgrid)
subroutine fill_corners_xy_2d_r8_tlm(x, x_tl, y, y_tl, npx, npy, dgrid, agrid, cgrid, vector)
subroutine fill_corners_cgrid_r4_tlm(x, x_tl, y, y_tl, npx, npy, mysign)
subroutine mpp_update_domain2d_3d_tlm(array, array_tl, domain, flags, complete, position, whalo, ehalo, shalo, nhalo, name, tile_count)
subroutine mpp_get_boundary_3dv_tlm(u_cmpt, u_cmpt_tl, v_cmpt, v_cmpt_tl, domain, ebufferx, ebufferx_tl, sbufferx, sbufferx_tl, wbufferx, wbufferx_tl, nbufferx, nbufferx_tl, ebuffery, ebuffery_tl, sbuffery, sbuffery_tl, wbuffery, wbuffery_tl, nbuffery, nbuffery_tl, flags, gridtype, complete, tile_count)
subroutine start_vector_group_update_2d_tlm(group, group_tl, u_cmpt, u_cmpt_tl, v_cmpt, v_cmpt_tl, domain, flags, gridtype, whalo, ehalo, shalo, nhalo, complete, complete_tl)
subroutine fill_corners_2d_r8_tlm(q, q_tl, npx, npy, fill, agrid, bgrid)
subroutine fill_corners_dgrid_r8_tlm(x, x_tl, y, y_tl, npx, npy, mysign)
subroutine mpp_update_domain2d_4d_tlm(array, array_tl, domain, flags, complete, position, whalo, ehalo, shalo, nhalo, name, tile_count)
subroutine mpp_update_domain2d_4dv_tlm(u_cmpt, u_cmpt_tl, v_cmpt, v_cmpt_tl, domain, flags, gridtype, complete, whalo, ehalo, shalo, nhalo, name, tile_count)
subroutine fill_corners_xy_2d_r4_tlm(x, x_tl, y, y_tl, npx, npy, dgrid, agrid, cgrid, vector)
subroutine start_var_group_update_4d(group, array, domain, flags, position, whalo, ehalo, shalo, nhalo, complete)
subroutine mp_reduce_sum_r4_tlm(mysum, mysum_tl)
subroutine, public complete_group_halo_update(group, group_tl, domain)
subroutine start_vector_group_update_3d_tlm(group, group_tl, u_cmpt, u_cmpt_tl, v_cmpt, v_cmpt_tl, domain, flags, gridtype, whalo, ehalo, shalo, nhalo, complete, complete_tl)
subroutine fill_corners_agrid_r4_tlm(x, x_tl, y, y_tl, npx, npy, mysign)
subroutine start_var_group_update_3d_tlm(group, group_tl, array, array_tl, domain, flags, position, whalo, ehalo, shalo, nhalo, complete, complete_tl)
integer, parameter, public ng
subroutine timing_on(blk_name)
subroutine start_var_group_update_4d_tlm(group, group_tl, array, array_tl, domain, flags, position, whalo, ehalo, shalo, nhalo, complete, complete_tl)
subroutine fill_corners_cgrid_r8_tlm(x, x_tl, y, y_tl, npx, npy, mysign)
subroutine mpp_update_domain2d_2dv_tlm(u_cmpt, u_cmpt_tl, v_cmpt, v_cmpt_tl, domain, flags, gridtype, complete, whalo, ehalo, shalo, nhalo, name, tile_count)
subroutine start_vector_group_update_2d(group, u_cmpt, v_cmpt, domain, flags, gridtype, whalo, ehalo, shalo, nhalo, complete)
subroutine mpp_get_boundary_3d_tlm(array, array_tl, domain, ebuffer, ebuffer_tl, sbuffer, sbuffer_tl, wbuffer, wbuffer_tl, nbuffer, nbuffer_tl, flags, position, complete, tile_count)
integer, parameter, public r_grid
subroutine mp_reduce_sum_r8_tlm(mysum, mysum_tl)
subroutine mpp_get_boundary_2dv_tlm(u_cmpt, u_cmpt_tl, v_cmpt, v_cmpt_tl, domain, ebufferx, ebufferx_tl, sbufferx, sbufferx_tl, wbufferx, wbufferx_tl, nbufferx, nbufferx_tl, ebuffery, ebuffery_tl, sbuffery, sbuffery_tl, wbuffery, wbuffery_tl, nbuffery, nbuffery_tl, flags, gridtype, complete, tile_count)
subroutine start_var_group_update_3d(group, array, domain, flags, position, whalo, ehalo, shalo, nhalo, complete)
subroutine mpp_update_domain2d_5d_tlm(array, array_tl, domain, flags, complete, position, whalo, ehalo, shalo, nhalo, name, tile_count)
subroutine start_var_group_update_2d(group, array, domain, flags, position, whalo, ehalo, shalo, nhalo, complete)
subroutine fill_corners_agrid_r8_tlm(x, x_tl, y, y_tl, npx, npy, mysign)
subroutine mpp_update_domain2d_2d_tlm(array, array_tl, domain, flags, complete, position, whalo, ehalo, shalo, nhalo, name, tile_count)
subroutine fill_corners_dgrid_r4_tlm(x, x_tl, y, y_tl, npx, npy, mysign)
subroutine mp_reduce_sum_r4_1d_tlm(mysum, mysum_tl, sum1d, sum1d_tl, npts)
real(kind=r_grid) function mpp_global_sum_2d_tlm(domain, field, field_tl, flags, position, tile_count, mpp_global_sum_2d)
subroutine mpp_update_domain2d_3dv_tlm(u_cmpt, u_cmpt_tl, v_cmpt, v_cmpt_tl, domain, flags, gridtype, complete, whalo, ehalo, shalo, nhalo, name, tile_count)
subroutine mpp_get_boundary_2d_tlm(array, array_tl, domain, ebuffer, ebuffer_tl, sbuffer, sbuffer_tl, wbuffer, wbuffer_tl, nbuffer, nbuffer_tl, flags, position, complete, tile_count)
subroutine mp_reduce_sum_r8_1d_tlm(mysum, mysum_tl, sum1d, sum1d_tl, npts)
subroutine timing_off(blk_name)