44 & LBi, UBi, LBj, UBj, &
53 integer,
intent(in) :: ng, tile
54 integer,
intent(in) :: LBi, UBi, LBj, UBj
57 real(r8),
intent(inout) :: ad_A(LBi:,LBj:)
59 real(r8),
intent(inout) :: ad_A(LBi:UBi,LBj:UBj)
64 logical :: EW_exchange
65 logical :: NS_exchange
67 integer :: Imin, Imax, Jmin, Jmax
70# include "set_bounds.h"
78 ew_exchange=
ntilei(ng).eq.1
88 ns_exchange=
ntilej(ng).eq.1
101 IF (ew_exchange.and.ns_exchange)
THEN
102 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
105 ad_a(
lm(ng)-2,
mm(ng)-2)=ad_a(
lm(ng)-2,
mm(ng)-2)+ &
110 ad_a(
lm(ng)-2,
mm(ng)-1)=ad_a(
lm(ng)-2,
mm(ng)-1)+ &
115 ad_a(
lm(ng)-2,
mm(ng) )=ad_a(
lm(ng)-2,
mm(ng) )+ &
120 ad_a(
lm(ng)-1,
mm(ng)-2)=ad_a(
lm(ng)-1,
mm(ng)-2)+ &
125 ad_a(
lm(ng)-1,
mm(ng)-1)=ad_a(
lm(ng)-1,
mm(ng)-1)+ &
130 ad_a(
lm(ng)-1,
mm(ng) )=ad_a(
lm(ng)-1,
mm(ng) )+ &
135 ad_a(
lm(ng) ,
mm(ng)-2)=ad_a(
lm(ng) ,
mm(ng)-2)+ &
140 ad_a(
lm(ng) ,
mm(ng)-1)=ad_a(
lm(ng) ,
mm(ng)-1)+ &
145 ad_a(
lm(ng) ,
mm(ng) )=ad_a(
lm(ng) ,
mm(ng) )+ &
150 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
153 ad_a(1 ,
mm(ng)-2)=ad_a(1 ,
mm(ng)-2)+ &
155 ad_a(
lm(ng)+1,-2)=0.0_r8
158 ad_a(1 ,
mm(ng)-1)=ad_a(1 ,
mm(ng)-1)+ &
160 ad_a(
lm(ng)+1,-1)=0.0_r8
163 ad_a(1 ,
mm(ng) )=ad_a(1 ,
mm(ng) )+ &
165 ad_a(
lm(ng)+1, 0)=0.0_r8
168 ad_a(2 ,
mm(ng)-2)=ad_a(2 ,
mm(ng)-2)+ &
170 ad_a(
lm(ng)+2,-2)=0.0_r8
173 ad_a(2 ,
mm(ng)-1)=ad_a(2 ,
mm(ng)-1)+ &
175 ad_a(
lm(ng)+2,-1)=0.0_r8
178 ad_a(2 ,
mm(ng) )=ad_a(2 ,
mm(ng) )+ &
180 ad_a(
lm(ng)+2, 0)=0.0_r8
184 ad_a(3 ,
mm(ng)-2)=ad_a(3 ,
mm(ng)-2)+ &
186 ad_a(
lm(ng)+3,-2)=0.0_r8
189 ad_a(3 ,
mm(ng)-1)=ad_a(3 ,
mm(ng)-1)+ &
191 ad_a(
lm(ng)+3,-1)=0.0_r8
194 ad_a(3 ,
mm(ng) )=ad_a(3 ,
mm(ng) )+ &
196 ad_a(
lm(ng)+3, 0)=0.0_r8
200 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
203 ad_a(
lm(ng)-2, 1)=ad_a(
lm(ng)-2, 1)+ &
205 ad_a(-2,
mm(ng)+1)=0.0_r8
208 ad_a(
lm(ng)-1, 1)=ad_a(
lm(ng)-1, 1)+ &
210 ad_a(-1,
mm(ng)+1)=0.0_r8
213 ad_a(
lm(ng) , 1)=ad_a(
lm(ng) , 1)+ &
215 ad_a( 0,
mm(ng)+1)=0.0_r8
218 ad_a(
lm(ng)-2, 2)=ad_a(
lm(ng)-2, 2)+ &
220 ad_a(-2,
mm(ng)+2)=0.0_r8
223 ad_a(
lm(ng)-1, 2)=ad_a(
lm(ng)-1, 2)+ &
225 ad_a(-1,
mm(ng)+2)=0.0_r8
228 ad_a(
lm(ng) , 2)=ad_a(
lm(ng) , 2)+ &
230 ad_a( 0,
mm(ng)+2)=0.0_r8
234 ad_a(
lm(ng)-2, 3)=ad_a(
lm(ng)-2, 3)+ &
236 ad_a(-2,
mm(ng)+3)=0.0_r8
239 ad_a(
lm(ng)-1, 3)=ad_a(
lm(ng)-1, 3)+ &
241 ad_a(-1,
mm(ng)+3)=0.0_r8
244 ad_a(
lm(ng) , 3)=ad_a(
lm(ng) , 3)+ &
246 ad_a( 0,
mm(ng)+3)=0.0_r8
250 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
253 ad_a( 1, 1)=ad_a( 1, 1)+ &
254 & ad_a(
lm(ng)+1,
mm(ng)+1)
255 ad_a(
lm(ng)+1,
mm(ng)+1)=0.0_r8
258 ad_a( 1, 2)=ad_a( 1, 2)+ &
259 & ad_a(
lm(ng)+1,
mm(ng)+2)
260 ad_a(
lm(ng)+1,
mm(ng)+2)=0.0_r8
263 ad_a( 2, 1)=ad_a( 2, 1)+ &
264 & ad_a(
lm(ng)+2,
mm(ng)+1)
265 ad_a(
lm(ng)+2,
mm(ng)+1)=0.0_r8
268 ad_a( 2, 2)=ad_a( 2, 2)+ &
269 & ad_a(
lm(ng)+2,
mm(ng)+2)
270 ad_a(
lm(ng)+2,
mm(ng)+2)=0.0_r8
274 ad_a( 1, 3)=ad_a( 1, 3)+ &
275 & ad_a(
lm(ng)+1,
mm(ng)+3)
276 ad_a(
lm(ng)+1,
mm(ng)+3)=0.0_r8
280 ad_a( 2, 3)=ad_a( 2, 3)+ &
281 & ad_a(
lm(ng)+2,
mm(ng)+3)
282 ad_a(
lm(ng)+2,
mm(ng)+3)=0.0_r8
285 ad_a( 3, 1)=ad_a( 3, 1)+ &
286 & ad_a(
lm(ng)+3,
mm(ng)+1)
287 ad_a(
lm(ng)+3,
mm(ng)+1)=0.0_r8
290 ad_a( 3, 2)=ad_a( 3, 2)+ &
291 & ad_a(
lm(ng)+3,
mm(ng)+2)
292 ad_a(
lm(ng)+3,
mm(ng)+2)=0.0_r8
295 ad_a( 3, 3)=ad_a( 3, 3)+ &
296 & ad_a(
lm(ng)+3,
mm(ng)+3)
297 ad_a(
lm(ng)+3,
mm(ng)+3)=0.0_r8
316 IF (ns_exchange)
THEN
317 IF (
domain(ng)%Northern_Edge(tile))
THEN
321 ad_a(i,
mm(ng)-2)=ad_a(i,
mm(ng)-2)+ &
326 ad_a(i,
mm(ng)-1)=ad_a(i,
mm(ng)-1)+ &
331 ad_a(i,
mm(ng) )=ad_a(i,
mm(ng) )+ &
336 IF (
domain(ng)%Southern_Edge(tile))
THEN
340 ad_a(i,1)=ad_a(i,1)+ &
342 ad_a(i,
mm(ng)+1)=0.0_r8
345 ad_a(i,2)=ad_a(i,2)+ &
347 ad_a(i,
mm(ng)+2)=0.0_r8
353 ad_a(i,3)=ad_a(i,3)+ &
355 ad_a(i,
mm(ng)+3)=0.0_r8
375 IF (ew_exchange)
THEN
376 IF (
domain(ng)%Eastern_Edge(tile))
THEN
380 ad_a(
lm(ng)-2,j)=ad_a(
lm(ng)-2,j)+ &
385 ad_a(
lm(ng)-1,j)=ad_a(
lm(ng)-1,j)+ &
390 ad_a(
lm(ng) ,j)=ad_a(
lm(ng) ,j)+ &
396 IF (
domain(ng)%Western_Edge(tile))
THEN
400 ad_a(1,j)=ad_a(1,j)+ &
402 ad_a(
lm(ng)+1,j)=0.0_r8
405 ad_a(2,j)=ad_a(2,j)+ &
407 ad_a(
lm(ng)+2,j)=0.0_r8
414 ad_a(3,j)=ad_a(3,j)+ &
416 ad_a(
lm(ng)+3,j)=0.0_r8
429 & LBi, UBi, LBj, UBj, &
438 integer,
intent(in) :: ng, tile
439 integer,
intent(in) :: LBi, UBi, LBj, UBj
442 real(r8),
intent(inout) :: ad_A(LBi:,LBj:)
444 real(r8),
intent(inout) :: ad_A(LBi:UBi,LBj:UBj)
449 logical :: EW_exchange
450 logical :: NS_exchange
452 integer :: Imin, Imax, Jmin, Jmax
455# include "set_bounds.h"
463 ew_exchange=
ntilei(ng).eq.1
473 ns_exchange=
ntilej(ng).eq.1
486 IF (ew_exchange.and.ns_exchange)
THEN
487 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
490 ad_a(
lm(ng)-2,
mm(ng)-2)=ad_a(
lm(ng)-2,
mm(ng)-2)+ &
495 ad_a(
lm(ng)-2,
mm(ng)-1)=ad_a(
lm(ng)-2,
mm(ng)-1)+ &
500 ad_a(
lm(ng)-2,
mm(ng) )=ad_a(
lm(ng)-2,
mm(ng) )+ &
505 ad_a(
lm(ng)-1,
mm(ng)-2)=ad_a(
lm(ng)-1,
mm(ng)-2)+ &
510 ad_a(
lm(ng)-1,
mm(ng)-1)=ad_a(
lm(ng)-1,
mm(ng)-1)+ &
515 ad_a(
lm(ng)-1,
mm(ng) )=ad_a(
lm(ng)-1,
mm(ng) )+ &
520 ad_a(
lm(ng) ,
mm(ng)-2)=ad_a(
lm(ng) ,
mm(ng)-2)+ &
525 ad_a(
lm(ng) ,
mm(ng)-1)=ad_a(
lm(ng) ,
mm(ng)-1)+ &
530 ad_a(
lm(ng) ,
mm(ng) )=ad_a(
lm(ng) ,
mm(ng) )+ &
535 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
538 ad_a( 1,
mm(ng)-2)=ad_a( 1,
mm(ng)-2)+ &
540 ad_a(
lm(ng)+1,-2)=0.0_r8
543 ad_a( 1,
mm(ng)-1)=ad_a( 1,
mm(ng)-1)+ &
545 ad_a(
lm(ng)+1,-1)=0.0_r8
548 ad_a( 1,
mm(ng) )=ad_a( 1,
mm(ng) )+ &
550 ad_a(
lm(ng)+1, 0)=0.0_r8
553 ad_a( 2,
mm(ng)-2)=ad_a( 2,
mm(ng)-2)+ &
555 ad_a(
lm(ng)+2,-2)=0.0_r8
558 ad_a( 2,
mm(ng)-1)=ad_a( 2,
mm(ng)-1)+ &
560 ad_a(
lm(ng)+2,-1)=0.0_r8
563 ad_a( 2,
mm(ng) )=ad_a( 2,
mm(ng) )+ &
565 ad_a(
lm(ng)+2, 0)=0.0_r8
569 ad_a(3 ,
mm(ng)-2)=ad_a(3 ,
mm(ng)-2)+ &
571 ad_a(
lm(ng)+3,-2)=0.0_r8
574 ad_a(3 ,
mm(ng)-1)=ad_a(3 ,
mm(ng)-1)+ &
576 ad_a(
lm(ng)+3,-1)=0.0_r8
579 ad_a(3 ,
mm(ng) )=ad_a(3 ,
mm(ng) )+ &
581 ad_a(
lm(ng)+3, 0)=0.0_r8
585 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
588 ad_a(
lm(ng)-2, 1)=ad_a(
lm(ng)-2, 1)+ &
590 ad_a(-2,
mm(ng)+1)=0.0_r8
593 ad_a(
lm(ng)-1, 1)=ad_a(
lm(ng)-1, 1)+ &
595 ad_a(-1,
mm(ng)+1)=0.0_r8
598 ad_a(
lm(ng) , 1)=ad_a(
lm(ng) , 1)+ &
600 ad_a( 0,
mm(ng)+1)=0.0_r8
603 ad_a(
lm(ng)-2, 2)=ad_a(
lm(ng)-2, 2)+ &
605 ad_a(-2,
mm(ng)+2)=0.0_r8
608 ad_a(
lm(ng)-1, 2)=ad_a(
lm(ng)-1, 2)+ &
610 ad_a(-1,
mm(ng)+2)=0.0_r8
613 ad_a(
lm(ng) , 2)=ad_a(
lm(ng) , 2)+ &
615 ad_a( 0,
mm(ng)+2)=0.0_r8
619 ad_a(
lm(ng)-2, 3)=ad_a(
lm(ng)-2, 3)+ &
621 ad_a(-2,
mm(ng)+3)=0.0_r8
624 ad_a(
lm(ng)-1, 3)=ad_a(
lm(ng)-1, 3)+ &
626 ad_a(-1,
mm(ng)+3)=0.0_r8
629 ad_a(
lm(ng) , 3)=ad_a(
lm(ng) , 3)+ &
631 ad_a( 0,
mm(ng)+3)=0.0_r8
635 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
638 ad_a(1 ,1 )=ad_a(1 ,1 )+ &
639 & ad_a(
lm(ng)+1,
mm(ng)+1)
640 ad_a(
lm(ng)+1,
mm(ng)+1)=0.0_r8
643 ad_a(1 ,2)=ad_a(1 ,2)+ &
644 & ad_a(
lm(ng)+1,
mm(ng)+2)
645 ad_a(
lm(ng)+1,
mm(ng)+2)=0.0_r8
648 ad_a(2,1 )=ad_a(2,1 )+ &
649 & ad_a(
lm(ng)+2,
mm(ng)+1)
650 ad_a(
lm(ng)+2,
mm(ng)+1)=0.0_r8
653 ad_a(2,2)=ad_a(2,2)+ &
654 & ad_a(
lm(ng)+2,
mm(ng)+2)
655 ad_a(
lm(ng)+2,
mm(ng)+2)=0.0_r8
659 ad_a( 1, 3)=ad_a( 1, 3)+ &
660 & ad_a(
lm(ng)+1,
mm(ng)+3)
661 ad_a(
lm(ng)+1,
mm(ng)+3)=0.0_r8
665 ad_a( 2, 3)=ad_a( 2, 3)+ &
666 & ad_a(
lm(ng)+2,
mm(ng)+3)
667 ad_a(
lm(ng)+2,
mm(ng)+3)=0.0_r8
670 ad_a( 3, 1)=ad_a( 3, 1)+ &
671 & ad_a(
lm(ng)+3,
mm(ng)+1)
672 ad_a(
lm(ng)+3,
mm(ng)+1)=0.0_r8
675 ad_a( 3, 2)=ad_a( 3, 2)+ &
676 & ad_a(
lm(ng)+3,
mm(ng)+2)
677 ad_a(
lm(ng)+3,
mm(ng)+2)=0.0_r8
680 ad_a( 3, 3)=ad_a( 3, 3)+ &
681 & ad_a(
lm(ng)+3,
mm(ng)+3)
682 ad_a(
lm(ng)+3,
mm(ng)+3)=0.0_r8
701 IF (ns_exchange)
THEN
702 IF (
domain(ng)%Northern_Edge(tile))
THEN
706 ad_a(i,
mm(ng)-2)=ad_a(i,
mm(ng)-2)+ &
711 ad_a(i,
mm(ng)-1)=ad_a(i,
mm(ng)-1)+ &
716 ad_a(i,
mm(ng) )=ad_a(i,
mm(ng) )+ &
722 IF (
domain(ng)%Southern_Edge(tile))
THEN
726 ad_a(i,1)=ad_a(i,1)+ &
728 ad_a(i,
mm(ng)+1)=0.0_r8
731 ad_a(i,2)=ad_a(i,2)+ &
733 ad_a(i,
mm(ng)+2)=0.0_r8
739 ad_a(i,3)=ad_a(i,3)+ &
741 ad_a(i,
mm(ng)+3)=0.0_r8
761 IF (ew_exchange)
THEN
762 IF (
domain(ng)%Eastern_Edge(tile))
THEN
766 ad_a(
lm(ng)-2,j)=ad_a(
lm(ng)-2,j)+ &
771 ad_a(
lm(ng)-1,j)=ad_a(
lm(ng)-1,j)+ &
776 ad_a(
lm(ng) ,j)=ad_a(
lm(ng) ,j)+ &
782 IF (
domain(ng)%Western_Edge(tile))
THEN
786 ad_a(1,j)=ad_a(1,j)+ &
788 ad_a(
lm(ng)+1,j)=0.0_r8
791 ad_a(2,j)=ad_a(2,j)+ &
793 ad_a(
lm(ng)+2,j)=0.0_r8
799 ad_a(3,j)=ad_a(3,j)+ &
801 ad_a(
lm(ng)+3,j)=0.0_r8
814 & LBi, UBi, LBj, UBj, &
823 integer,
intent(in) :: ng, tile
824 integer,
intent(in) :: LBi, UBi, LBj, UBj
827 real(r8),
intent(inout) :: ad_A(LBi:,LBj:)
829 real(r8),
intent(inout) :: ad_A(LBi:UBi,LBj:UBj)
834 logical :: EW_exchange
835 logical :: NS_exchange
837 integer :: Imin, Imax, Jmin, Jmax
840# include "set_bounds.h"
848 ew_exchange=
ntilei(ng).eq.1
858 ns_exchange=
ntilej(ng).eq.1
871 IF (ew_exchange.and.ns_exchange)
THEN
872 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
875 ad_a(
lm(ng)-2,
mm(ng)-2)=ad_a(
lm(ng)-2,
mm(ng)-2)+ &
880 ad_a(
lm(ng)-2,
mm(ng)-1)=ad_a(
lm(ng)-2,
mm(ng)-1)+ &
885 ad_a(
lm(ng)-2,
mm(ng) )=ad_a(
lm(ng)-2,
mm(ng) )+ &
890 ad_a(
lm(ng)-1,
mm(ng)-2)=ad_a(
lm(ng)-1,
mm(ng)-2)+ &
895 ad_a(
lm(ng)-1,
mm(ng)-1)=ad_a(
lm(ng)-1,
mm(ng)-1)+ &
900 ad_a(
lm(ng)-1,
mm(ng) )=ad_a(
lm(ng)-1,
mm(ng) )+ &
905 ad_a(
lm(ng) ,
mm(ng)-2)=ad_a(
lm(ng) ,
mm(ng)-2)+ &
910 ad_a(
lm(ng) ,
mm(ng)-1)=ad_a(
lm(ng) ,
mm(ng)-1)+ &
915 ad_a(
lm(ng) ,
mm(ng) )=ad_a(
lm(ng) ,
mm(ng) )+ &
920 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
923 ad_a( 1,
mm(ng)-2)=ad_a( 1,
mm(ng)-2)+ &
925 ad_a(
lm(ng)+1,-2)=0.0_r8
928 ad_a( 1,
mm(ng)-1)=ad_a( 1,
mm(ng)-1)+ &
930 ad_a(
lm(ng)+1,-1)=0.0_r8
933 ad_a( 1,
mm(ng) )=ad_a( 1,
mm(ng) )+ &
935 ad_a(
lm(ng)+1, 0)=0.0_r8
938 ad_a( 2,
mm(ng)-2)=ad_a( 2,
mm(ng)-2)+ &
940 ad_a(
lm(ng)+2,-2)=0.0_r8
943 ad_a( 2,
mm(ng)-1)=ad_a( 2,
mm(ng)-1)+ &
945 ad_a(
lm(ng)+2,-1)=0.0_r8
948 ad_a( 2,
mm(ng) )=ad_a( 2,
mm(ng) )+ &
950 ad_a(
lm(ng)+2, 0)=0.0_r8
954 ad_a(3 ,
mm(ng)-2)=ad_a(3 ,
mm(ng)-2)+ &
956 ad_a(
lm(ng)+3,-2)=0.0_r8
959 ad_a(3 ,
mm(ng)-1)=ad_a(3 ,
mm(ng)-1)+ &
961 ad_a(
lm(ng)+3,-1)=0.0_r8
964 ad_a(3 ,
mm(ng) )=ad_a(3 ,
mm(ng) )+ &
966 ad_a(
lm(ng)+3, 0)=0.0_r8
970 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
973 ad_a(
lm(ng)-2, 1)=ad_a(
lm(ng)-2, 1)+ &
975 ad_a(-2,
mm(ng)+1)=0.0_r8
978 ad_a(
lm(ng)-1, 1)=ad_a(
lm(ng)-1, 1)+ &
980 ad_a(-1,
mm(ng)+1)=0.0_r8
983 ad_a(
lm(ng) , 1)=ad_a(
lm(ng) , 1)+ &
985 ad_a( 0,
mm(ng)+1)=0.0_r8
988 ad_a(
lm(ng)-2, 2)=ad_a(
lm(ng)-2, 2)+ &
990 ad_a(-2,
mm(ng)+2)=0.0_r8
993 ad_a(
lm(ng)-1, 2)=ad_a(
lm(ng)-1, 2)+ &
995 ad_a(-1,
mm(ng)+2)=0.0_r8
998 ad_a(
lm(ng) , 2)=ad_a(
lm(ng) , 2)+ &
1000 ad_a( 0,
mm(ng)+2)=0.0_r8
1004 ad_a(
lm(ng)-2, 3)=ad_a(
lm(ng)-2, 3)+ &
1006 ad_a(-2,
mm(ng)+3)=0.0_r8
1009 ad_a(
lm(ng)-1, 3)=ad_a(
lm(ng)-1, 3)+ &
1011 ad_a(-1,
mm(ng)+3)=0.0_r8
1014 ad_a(
lm(ng) , 3)=ad_a(
lm(ng) , 3)+ &
1016 ad_a( 0,
mm(ng)+3)=0.0_r8
1020 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
1023 ad_a( 1, 1)=ad_a( 1, 1)+ &
1024 & ad_a(
lm(ng)+1,
mm(ng)+1)
1025 ad_a(
lm(ng)+1,
mm(ng)+1)=0.0_r8
1028 ad_a( 1, 2)=ad_a( 1, 2)+ &
1029 & ad_a(
lm(ng)+1,
mm(ng)+2)
1030 ad_a(
lm(ng)+1,
mm(ng)+2)=0.0_r8
1033 ad_a( 2, 1)=ad_a( 2, 1)+ &
1034 & ad_a(
lm(ng)+2,
mm(ng)+1)
1035 ad_a(
lm(ng)+2,
mm(ng)+1)=0.0_r8
1038 ad_a( 2, 2)=ad_a( 2, 2)+ &
1039 & ad_a(
lm(ng)+2,
mm(ng)+2)
1040 ad_a(
lm(ng)+2,
mm(ng)+2)=0.0_r8
1044 ad_a( 1, 3)=ad_a( 1, 3)+ &
1045 & ad_a(
lm(ng)+1,
mm(ng)+3)
1046 ad_a(
lm(ng)+1,
mm(ng)+3)=0.0_r8
1050 ad_a( 2, 3)=ad_a( 2, 3)+ &
1051 & ad_a(
lm(ng)+2,
mm(ng)+3)
1052 ad_a(
lm(ng)+2,
mm(ng)+3)=0.0_r8
1055 ad_a( 3, 1)=ad_a( 3, 1)+ &
1056 & ad_a(
lm(ng)+3,
mm(ng)+1)
1057 ad_a(
lm(ng)+3,
mm(ng)+1)=0.0_r8
1060 ad_a( 3, 2)=ad_a( 3, 2)+ &
1061 & ad_a(
lm(ng)+3,
mm(ng)+2)
1062 ad_a(
lm(ng)+3,
mm(ng)+2)=0.0_r8
1065 ad_a( 3, 3)=ad_a( 3, 3)+ &
1066 & ad_a(
lm(ng)+3,
mm(ng)+3)
1067 ad_a(
lm(ng)+3,
mm(ng)+3)=0.0_r8
1086 IF (ns_exchange)
THEN
1087 IF (
domain(ng)%Northern_Edge(tile))
THEN
1091 ad_a(i,
mm(ng)-2)=ad_a(i,
mm(ng)-2)+ &
1096 ad_a(i,
mm(ng)-1)=ad_a(i,
mm(ng)-1)+ &
1101 ad_a(i,
mm(ng) )=ad_a(i,
mm(ng) )+ &
1107 IF (
domain(ng)%Southern_Edge(tile))
THEN
1111 ad_a(i,1)=ad_a(i,1)+ &
1113 ad_a(i,
mm(ng)+1)=0.0_r8
1116 ad_a(i,2)=ad_a(i,2)+ &
1118 ad_a(i,
mm(ng)+2)=0.0_r8
1124 ad_a(i,3)=ad_a(i,3)+ &
1126 ad_a(i,
mm(ng)+3)=0.0_r8
1146 IF (ew_exchange)
THEN
1147 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1151 ad_a(
lm(ng)-2,j)=ad_a(
lm(ng)-2,j)+ &
1156 ad_a(
lm(ng)-1,j)=ad_a(
lm(ng)-1,j)+ &
1161 ad_a(
lm(ng) ,j)=ad_a(
lm(ng) ,j)+ &
1167 IF (
domain(ng)%Western_Edge(tile))
THEN
1171 ad_a(1,j)=ad_a(1,j)+ &
1173 ad_a(
lm(ng)+1,j)=0.0_r8
1176 ad_a(2,j)=ad_a(2,j)+ &
1178 ad_a(
lm(ng)+2,j)=0.0_r8
1184 ad_a(3,j)=ad_a(3,j)+ &
1186 ad_a(
lm(ng)+3,j)=0.0_r8
1199 & LBi, UBi, LBj, UBj, &
1208 integer,
intent(in) :: ng, tile
1209 integer,
intent(in) :: LBi, UBi, LBj, UBj
1211# ifdef ASSUMED_SHAPE
1212 real(r8),
intent(inout) :: ad_A(LBi:,LBj:)
1214 real(r8),
intent(inout) :: ad_A(LBi:UBi,LBj:UBj)
1219 logical :: EW_exchange
1220 logical :: NS_exchange
1222 integer :: Imin, Imax, Jmin, Jmax
1225# include "set_bounds.h"
1233 ew_exchange=
ntilei(ng).eq.1
1243 ns_exchange=
ntilej(ng).eq.1
1256 IF (ew_exchange.and.ns_exchange)
THEN
1257 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
1260 ad_a(
lm(ng)-2,
mm(ng)-2)=ad_a(
lm(ng)-2,
mm(ng)-2)+ &
1265 ad_a(
lm(ng)-2,
mm(ng)-1)=ad_a(
lm(ng)-2,
mm(ng)-1)+ &
1270 ad_a(
lm(ng)-2,
mm(ng) )=ad_a(
lm(ng)-2,
mm(ng) )+ &
1275 ad_a(
lm(ng)-1,
mm(ng)-2)=ad_a(
lm(ng)-1,
mm(ng)-2)+ &
1280 ad_a(
lm(ng)-1,
mm(ng)-1)=ad_a(
lm(ng)-1,
mm(ng)-1)+ &
1285 ad_a(
lm(ng)-1,
mm(ng) )=ad_a(
lm(ng)-1,
mm(ng) )+ &
1290 ad_a(
lm(ng) ,
mm(ng)-2)=ad_a(
lm(ng) ,
mm(ng)-2)+ &
1295 ad_a(
lm(ng) ,
mm(ng)-1)=ad_a(
lm(ng) ,
mm(ng)-1)+ &
1300 ad_a(
lm(ng) ,
mm(ng) )=ad_a(
lm(ng) ,
mm(ng) )+ &
1305 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
1308 ad_a( 1,
mm(ng)-2)=ad_a( 1,
mm(ng)-2)+ &
1310 ad_a(
lm(ng)+1,-2)=0.0_r8
1313 ad_a( 1,
mm(ng)-1)=ad_a( 1,
mm(ng)-1)+ &
1315 ad_a(
lm(ng)+1,-1)=0.0_r8
1318 ad_a( 1,
mm(ng) )=ad_a( 1,
mm(ng) )+ &
1320 ad_a(
lm(ng)+1, 0)=0.0_r8
1323 ad_a( 2,
mm(ng)-2)=ad_a( 2,
mm(ng)-2)+ &
1325 ad_a(
lm(ng)+2,-2)=0.0_r8
1328 ad_a( 2,
mm(ng)-1)=ad_a( 2,
mm(ng)-1)+ &
1330 ad_a(
lm(ng)+2,-1)=0.0_r8
1333 ad_a( 2,
mm(ng) )=ad_a( 2,
mm(ng) )+ &
1335 ad_a(
lm(ng)+2, 0)=0.0_r8
1339 ad_a(3 ,
mm(ng)-2)=ad_a(3 ,
mm(ng)-2)+ &
1341 ad_a(
lm(ng)+3,-2)=0.0_r8
1344 ad_a(3 ,
mm(ng)-1)=ad_a(3 ,
mm(ng)-1)+ &
1346 ad_a(
lm(ng)+3,-1)=0.0_r8
1349 ad_a(3 ,
mm(ng) )=ad_a(3 ,
mm(ng) )+ &
1351 ad_a(
lm(ng)+3, 0)=0.0_r8
1355 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
1358 ad_a(
lm(ng)-2, 1)=ad_a(
lm(ng)-2, 1)+ &
1360 ad_a(-2,
mm(ng)+1)=0.0_r8
1363 ad_a(
lm(ng)-1, 1)=ad_a(
lm(ng)-1, 1)+ &
1365 ad_a(-1,
mm(ng)+1)=0.0_r8
1368 ad_a(
lm(ng) , 1)=ad_a(
lm(ng) , 1)+ &
1370 ad_a( 0,
mm(ng)+1)=0.0_r8
1373 ad_a(
lm(ng)-2, 2)=ad_a(
lm(ng)-2, 2)+ &
1375 ad_a(-2,
mm(ng)+2)=0.0_r8
1378 ad_a(
lm(ng)-1, 2)=ad_a(
lm(ng)-1, 2)+ &
1380 ad_a(-1,
mm(ng)+2)=0.0_r8
1383 ad_a(
lm(ng) , 2)=ad_a(
lm(ng) , 2)+ &
1385 ad_a( 0,
mm(ng)+2)=0.0_r8
1389 ad_a(
lm(ng)-2, 3)=ad_a(
lm(ng)-2, 3)+ &
1391 ad_a(-2,
mm(ng)+3)=0.0_r8
1394 ad_a(
lm(ng)-1, 3)=ad_a(
lm(ng)-1, 3)+ &
1396 ad_a(-1,
mm(ng)+3)=0.0_r8
1399 ad_a(
lm(ng) , 3)=ad_a(
lm(ng) , 3)+ &
1401 ad_a( 0,
mm(ng)+3)=0.0_r8
1405 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
1408 ad_a( 1, 1)=ad_a( 1, 1)+ &
1409 & ad_a(
lm(ng)+1,
mm(ng)+1)
1410 ad_a(
lm(ng)+1,
mm(ng)+1)=0.0_r8
1413 ad_a( 1, 2)=ad_a( 1, 2)+ &
1414 & ad_a(
lm(ng)+1,
mm(ng)+2)
1415 ad_a(
lm(ng)+1,
mm(ng)+2)=0.0_r8
1418 ad_a( 2, 1)=ad_a( 2, 1 )+ &
1419 & ad_a(
lm(ng)+2,
mm(ng)+1)
1420 ad_a(
lm(ng)+2,
mm(ng)+1)=0.0_r8
1423 ad_a( 2, 2)=ad_a( 2, 2)+ &
1424 & ad_a(
lm(ng)+2,
mm(ng)+2)
1425 ad_a(
lm(ng)+2,
mm(ng)+2)=0.0_r8
1429 ad_a( 1, 3)=ad_a( 1, 3)+ &
1430 & ad_a(
lm(ng)+1,
mm(ng)+3)
1431 ad_a(
lm(ng)+1,
mm(ng)+3)=0.0_r8
1434 ad_a( 2, 3)=ad_a( 2, 3)+ &
1435 & ad_a(
lm(ng)+2,
mm(ng)+3)
1436 ad_a(
lm(ng)+2,
mm(ng)+3)=0.0_r8
1439 ad_a( 3, 1)=ad_a( 3, 1)+ &
1440 & ad_a(
lm(ng)+3,
mm(ng)+1)
1441 ad_a(
lm(ng)+3,
mm(ng)+1)=0.0_r8
1444 ad_a( 3, 2)=ad_a( 3, 2)+ &
1445 & ad_a(
lm(ng)+3,
mm(ng)+2)
1446 ad_a(
lm(ng)+3,
mm(ng)+2)=0.0_r8
1449 ad_a( 3, 3)=ad_a( 3, 3)+ &
1450 & ad_a(
lm(ng)+3,
mm(ng)+3)
1451 ad_a(
lm(ng)+3,
mm(ng)+3)=0.0_r8
1470 IF (ns_exchange)
THEN
1471 IF (
domain(ng)%Northern_Edge(tile))
THEN
1475 ad_a(i,
mm(ng)-2)=ad_a(i,
mm(ng)-2)+ &
1480 ad_a(i,
mm(ng)-1)=ad_a(i,
mm(ng)-1)+ &
1485 ad_a(i,
mm(ng) )=ad_a(i,
mm(ng) )+ &
1491 IF (
domain(ng)%Southern_Edge(tile))
THEN
1495 ad_a(i,1)=ad_a(i,1)+ &
1497 ad_a(i,
mm(ng)+1)=0.0_r8
1500 ad_a(i,2)=ad_a(i,2)+ &
1502 ad_a(i,
mm(ng)+2)=0.0_r8
1508 ad_a(i,3)=ad_a(i,3)+ &
1510 ad_a(i,
mm(ng)+3)=0.0_r8
1530 IF (ew_exchange)
THEN
1531 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1535 ad_a(
lm(ng)-2,j)=ad_a(
lm(ng)-2,j)+ &
1540 ad_a(
lm(ng)-1,j)=ad_a(
lm(ng)-1,j)+ &
1545 ad_a(
lm(ng) ,j)=ad_a(
lm(ng) ,j)+ &
1551 IF (
domain(ng)%Western_Edge(tile))
THEN
1555 ad_a(1 ,j)=ad_a(1 ,j)+ &
1557 ad_a(
lm(ng)+1,j)=0.0_r8
1560 ad_a(2,j)=ad_a(2,j)+ &
1562 ad_a(
lm(ng)+2,j)=0.0_r8
1568 ad_a(3,j)=ad_a(3,j)+ &
1570 ad_a(
lm(ng)+3,j)=0.0_r8
subroutine ad_exchange_u2d_tile(ng, tile, lbi, ubi, lbj, ubj, ad_a)
subroutine ad_exchange_v2d_tile(ng, tile, lbi, ubi, lbj, ubj, ad_a)
subroutine ad_exchange_r2d_tile(ng, tile, lbi, ubi, lbj, ubj, ad_a)
subroutine ad_exchange_p2d_tile(ng, tile, lbi, ubi, lbj, ubj, ad_a)
type(t_domain), dimension(:), allocatable domain
integer, dimension(:), allocatable lm
integer, dimension(:), allocatable ntilei
integer, dimension(:), allocatable mm
integer, dimension(:), allocatable ntilej
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic