64 & LBi, UBi, LBj, UBj, &
73 integer,
intent(in) :: ng, tile
74 integer,
intent(in) :: LBi, UBi, LBj, UBj
77 real(r8),
intent(inout) :: A(LBi:,LBj:)
79 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj)
84 logical :: EW_exchange
85 logical :: NS_exchange
87 integer :: Imin, Imax, Jmin, Jmax
90#include "set_bounds.h"
98 ew_exchange=
ntilei(ng).eq.1
108 ns_exchange=
ntilej(ng).eq.1
129 IF (ew_exchange)
THEN
130 IF (
domain(ng)%Western_Edge(tile))
THEN
141 IF (
domain(ng)%Eastern_Edge(tile))
THEN
143 a(-2,j)=a(
lm(ng)-2,j)
144 a(-1,j)=a(
lm(ng)-1,j)
164 IF (ns_exchange)
THEN
165 IF (
domain(ng)%Southern_Edge(tile))
THEN
176 IF (
domain(ng)%Northern_Edge(tile))
THEN
178 a(i,-2)=a(i,
mm(ng)-2)
179 a(i,-1)=a(i,
mm(ng)-1)
191 IF (ew_exchange.and.ns_exchange)
THEN
192 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
193 a(
lm(ng)+1,
mm(ng)+1)=a(1,1)
194 a(
lm(ng)+1,
mm(ng)+2)=a(1,2)
195 a(
lm(ng)+2,
mm(ng)+1)=a(2,1)
196 a(
lm(ng)+2,
mm(ng)+2)=a(2,2)
198 a(
lm(ng)+1,
mm(ng)+3)=a(1,3)
199 a(
lm(ng)+2,
mm(ng)+3)=a(2,3)
200 a(
lm(ng)+3,
mm(ng)+1)=a(3,1)
201 a(
lm(ng)+3,
mm(ng)+2)=a(3,2)
202 a(
lm(ng)+3,
mm(ng)+3)=a(3,3)
205 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
206 a(-2,
mm(ng)+1)=a(
lm(ng)-2,1)
207 a(-1,
mm(ng)+1)=a(
lm(ng)-1,1)
208 a( 0,
mm(ng)+1)=a(
lm(ng) ,1)
209 a(-2,
mm(ng)+2)=a(
lm(ng)-2,2)
210 a(-1,
mm(ng)+2)=a(
lm(ng)-1,2)
211 a( 0,
mm(ng)+2)=a(
lm(ng) ,2)
213 a(-2,
mm(ng)+3)=a(
lm(ng)-2,3)
214 a(-1,
mm(ng)+3)=a(
lm(ng)-1,3)
215 a( 0,
mm(ng)+3)=a(
lm(ng) ,3)
218 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
219 a(
lm(ng)+1,-2)=a(1,
mm(ng)-2)
220 a(
lm(ng)+1,-1)=a(1,
mm(ng)-1)
221 a(
lm(ng)+1, 0)=a(1,
mm(ng) )
222 a(
lm(ng)+2,-2)=a(2,
mm(ng)-2)
223 a(
lm(ng)+2,-1)=a(2,
mm(ng)-1)
224 a(
lm(ng)+2, 0)=a(2,
mm(ng) )
226 a(
lm(ng)+3,-2)=a(3,
mm(ng)-2)
227 a(
lm(ng)+3,-1)=a(3,
mm(ng)-1)
228 a(
lm(ng)+3, 0)=a(3,
mm(ng) )
231 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
232 a(-2,-2)=a(
lm(ng)-2,
mm(ng)-2)
233 a(-2,-1)=a(
lm(ng)-2,
mm(ng)-1)
234 a(-2, 0)=a(
lm(ng)-2,
mm(ng) )
235 a(-1,-2)=a(
lm(ng)-1,
mm(ng)-2)
236 a(-1,-1)=a(
lm(ng)-1,
mm(ng)-1)
237 a(-1, 0)=a(
lm(ng)-1,
mm(ng) )
238 a( 0,-2)=a(
lm(ng) ,
mm(ng)-2)
239 a( 0,-1)=a(
lm(ng) ,
mm(ng)-1)
240 a( 0, 0)=a(
lm(ng) ,
mm(ng) )
251 & LBi, UBi, LBj, UBj, &
260 integer,
intent(in) :: ng, tile
261 integer,
intent(in) :: LBi, UBi, LBj, UBj
264 real(r8),
intent(inout) :: A(LBi:,LBj:)
266 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj)
271 logical :: EW_exchange
272 logical :: NS_exchange
274 integer :: Imin, Imax, Jmin, Jmax
277#include "set_bounds.h"
285 ew_exchange=
ntilei(ng).eq.1
295 ns_exchange=
ntilej(ng).eq.1
316 IF (ew_exchange)
THEN
317 IF (
domain(ng)%Western_Edge(tile))
THEN
328 IF (
domain(ng)%Eastern_Edge(tile))
THEN
330 a(-2,j)=a(
lm(ng)-2,j)
331 a(-1,j)=a(
lm(ng)-1,j)
351 IF (ns_exchange)
THEN
352 IF (
domain(ng)%Southern_Edge(tile))
THEN
363 IF (
domain(ng)%Northern_Edge(tile))
THEN
365 a(i,-2)=a(i,
mm(ng)-2)
366 a(i,-1)=a(i,
mm(ng)-1)
378 IF (ew_exchange.and.ns_exchange)
THEN
379 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
380 a(
lm(ng)+1,
mm(ng)+1)=a(1,1)
381 a(
lm(ng)+1,
mm(ng)+2)=a(1,2)
382 a(
lm(ng)+2,
mm(ng)+1)=a(2,1)
383 a(
lm(ng)+2,
mm(ng)+2)=a(2,2)
385 a(
lm(ng)+1,
mm(ng)+3)=a(1,3)
386 a(
lm(ng)+2,
mm(ng)+3)=a(2,3)
387 a(
lm(ng)+3,
mm(ng)+1)=a(3,1)
388 a(
lm(ng)+3,
mm(ng)+2)=a(3,2)
389 a(
lm(ng)+3,
mm(ng)+3)=a(3,3)
392 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
393 a(-2,
mm(ng)+1)=a(
lm(ng)-2,1)
394 a(-1,
mm(ng)+1)=a(
lm(ng)-1,1)
395 a( 0,
mm(ng)+1)=a(
lm(ng) ,1)
396 a(-2,
mm(ng)+2)=a(
lm(ng)-2,2)
397 a(-1,
mm(ng)+2)=a(
lm(ng)-1,2)
398 a( 0,
mm(ng)+2)=a(
lm(ng) ,2)
400 a(-2,
mm(ng)+3)=a(
lm(ng)-2,3)
401 a(-1,
mm(ng)+3)=a(
lm(ng)-1,3)
402 a( 0,
mm(ng)+3)=a(
lm(ng) ,3)
405 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
406 a(
lm(ng)+1,-2)=a(1,
mm(ng)-2)
407 a(
lm(ng)+1,-1)=a(1,
mm(ng)-1)
408 a(
lm(ng)+1, 0)=a(1,
mm(ng) )
409 a(
lm(ng)+2,-2)=a(2,
mm(ng)-2)
410 a(
lm(ng)+2,-1)=a(2,
mm(ng)-1)
411 a(
lm(ng)+2, 0)=a(2,
mm(ng) )
413 a(
lm(ng)+3,-2)=a(3,
mm(ng)-2)
414 a(
lm(ng)+3,-1)=a(3,
mm(ng)-1)
415 a(
lm(ng)+3, 0)=a(3,
mm(ng) )
418 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
419 a(-2,-2)=a(
lm(ng)-2,
mm(ng)-2)
420 a(-2,-1)=a(
lm(ng)-2,
mm(ng)-1)
421 a(-2, 0)=a(
lm(ng)-2,
mm(ng) )
422 a(-1,-2)=a(
lm(ng)-1,
mm(ng)-2)
423 a(-1,-1)=a(
lm(ng)-1,
mm(ng)-1)
424 a(-1, 0)=a(
lm(ng)-1,
mm(ng) )
425 a( 0,-2)=a(
lm(ng) ,
mm(ng)-2)
426 a( 0,-1)=a(
lm(ng) ,
mm(ng)-1)
427 a( 0, 0)=a(
lm(ng) ,
mm(ng) )
438 & LBi, UBi, LBj, UBj, &
447 integer,
intent(in) :: ng, tile
448 integer,
intent(in) :: LBi, UBi, LBj, UBj
451 real(r8),
intent(inout) :: A(LBi:,LBj:)
453 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj)
458 logical :: EW_exchange
459 logical :: NS_exchange
461 integer :: Imin, Imax, Jmin, Jmax
464#include "set_bounds.h"
472 ew_exchange=
ntilei(ng).eq.1
482 ns_exchange=
ntilej(ng).eq.1
503 IF (ew_exchange)
THEN
504 IF (
domain(ng)%Western_Edge(tile))
THEN
515 IF (
domain(ng)%Eastern_Edge(tile))
THEN
517 a(-2,j)=a(
lm(ng)-2,j)
518 a(-1,j)=a(
lm(ng)-1,j)
538 IF (ns_exchange)
THEN
539 IF (
domain(ng)%Southern_Edge(tile))
THEN
550 IF (
domain(ng)%Northern_Edge(tile))
THEN
552 a(i,-2)=a(i,
mm(ng)-2)
553 a(i,-1)=a(i,
mm(ng)-1)
565 IF (ew_exchange.and.ns_exchange)
THEN
566 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
567 a(
lm(ng)+1,
mm(ng)+1)=a(1,1)
568 a(
lm(ng)+1,
mm(ng)+2)=a(1,2)
569 a(
lm(ng)+2,
mm(ng)+1)=a(2,1)
570 a(
lm(ng)+2,
mm(ng)+2)=a(2,2)
572 a(
lm(ng)+1,
mm(ng)+3)=a(1,3)
573 a(
lm(ng)+2,
mm(ng)+3)=a(2,3)
574 a(
lm(ng)+3,
mm(ng)+1)=a(3,1)
575 a(
lm(ng)+3,
mm(ng)+2)=a(3,2)
576 a(
lm(ng)+3,
mm(ng)+3)=a(3,3)
579 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
580 a(-2,
mm(ng)+1)=a(
lm(ng)-2,1)
581 a(-1,
mm(ng)+1)=a(
lm(ng)-1,1)
582 a( 0,
mm(ng)+1)=a(
lm(ng) ,1)
583 a(-2,
mm(ng)+2)=a(
lm(ng)-2,2)
584 a(-1,
mm(ng)+2)=a(
lm(ng)-1,2)
585 a( 0,
mm(ng)+2)=a(
lm(ng) ,2)
587 a(-2,
mm(ng)+3)=a(
lm(ng)-2,3)
588 a(-1,
mm(ng)+3)=a(
lm(ng)-1,3)
589 a( 0,
mm(ng)+3)=a(
lm(ng) ,3)
592 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
593 a(
lm(ng)+1,-2)=a(1,
mm(ng)-2)
594 a(
lm(ng)+1,-1)=a(1,
mm(ng)-1)
595 a(
lm(ng)+1, 0)=a(1,
mm(ng) )
596 a(
lm(ng)+2,-2)=a(2,
mm(ng)-2)
597 a(
lm(ng)+2,-1)=a(2,
mm(ng)-1)
598 a(
lm(ng)+2, 0)=a(2,
mm(ng) )
600 a(
lm(ng)+3,-2)=a(3,
mm(ng)-2)
601 a(
lm(ng)+3,-1)=a(3,
mm(ng)-1)
602 a(
lm(ng)+3, 0)=a(3,
mm(ng) )
605 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
606 a(-2,-2)=a(
lm(ng)-2,
mm(ng)-2)
607 a(-2,-1)=a(
lm(ng)-2,
mm(ng)-1)
608 a(-2, 0)=a(
lm(ng)-2,
mm(ng) )
609 a(-1,-2)=a(
lm(ng)-1,
mm(ng)-2)
610 a(-1,-1)=a(
lm(ng)-1,
mm(ng)-1)
611 a(-1, 0)=a(
lm(ng)-1,
mm(ng) )
612 a( 0,-2)=a(
lm(ng) ,
mm(ng)-2)
613 a( 0,-1)=a(
lm(ng) ,
mm(ng)-1)
614 a( 0, 0)=a(
lm(ng) ,
mm(ng) )
625 & LBi, UBi, LBj, UBj, &
634 integer,
intent(in) :: ng, tile
635 integer,
intent(in) :: LBi, UBi, LBj, UBj
638 real(r8),
intent(inout) :: A(LBi:,LBj:)
640 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj)
645 logical :: EW_exchange
646 logical :: NS_exchange
648 integer :: Imin, Imax, Jmin, Jmax
651#include "set_bounds.h"
659 ew_exchange=
ntilei(ng).eq.1
669 ns_exchange=
ntilej(ng).eq.1
690 IF (ew_exchange)
THEN
691 IF (
domain(ng)%Western_Edge(tile))
THEN
702 IF (
domain(ng)%Eastern_Edge(tile))
THEN
704 a(-2,j)=a(
lm(ng)-2,j)
705 a(-1,j)=a(
lm(ng)-1,j)
725 IF (ns_exchange)
THEN
726 IF (
domain(ng)%Southern_Edge(tile))
THEN
737 IF (
domain(ng)%Northern_Edge(tile))
THEN
739 a(i,-2)=a(i,
mm(ng)-2)
740 a(i,-1)=a(i,
mm(ng)-1)
752 IF (ew_exchange.and.ns_exchange)
THEN
753 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
754 a(
lm(ng)+1,
mm(ng)+1)=a(1,1)
755 a(
lm(ng)+1,
mm(ng)+2)=a(1,2)
756 a(
lm(ng)+2,
mm(ng)+1)=a(2,1)
757 a(
lm(ng)+2,
mm(ng)+2)=a(2,2)
759 a(
lm(ng)+1,
mm(ng)+3)=a(1,3)
760 a(
lm(ng)+2,
mm(ng)+3)=a(2,3)
761 a(
lm(ng)+3,
mm(ng)+1)=a(3,1)
762 a(
lm(ng)+3,
mm(ng)+2)=a(3,2)
763 a(
lm(ng)+3,
mm(ng)+3)=a(3,3)
766 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
767 a(-2,
mm(ng)+1)=a(
lm(ng)-2,1)
768 a(-1,
mm(ng)+1)=a(
lm(ng)-1,1)
769 a( 0,
mm(ng)+1)=a(
lm(ng) ,1)
770 a(-2,
mm(ng)+2)=a(
lm(ng)-2,2)
771 a(-1,
mm(ng)+2)=a(
lm(ng)-1,2)
772 a( 0,
mm(ng)+2)=a(
lm(ng) ,2)
774 a(-2,
mm(ng)+3)=a(
lm(ng)-2,3)
775 a(-1,
mm(ng)+3)=a(
lm(ng)-1,3)
776 a( 0,
mm(ng)+3)=a(
lm(ng) ,3)
779 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
780 a(
lm(ng)+1,-2)=a(1,
mm(ng)-2)
781 a(
lm(ng)+1,-1)=a(1,
mm(ng)-1)
782 a(
lm(ng)+1, 0)=a(1,
mm(ng) )
783 a(
lm(ng)+2,-2)=a(2,
mm(ng)-2)
784 a(
lm(ng)+2,-1)=a(2,
mm(ng)-1)
785 a(
lm(ng)+2, 0)=a(2,
mm(ng) )
787 a(
lm(ng)+3,-2)=a(3,
mm(ng)-2)
788 a(
lm(ng)+3,-1)=a(3,
mm(ng)-1)
789 a(
lm(ng)+3, 0)=a(3,
mm(ng) )
792 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
793 a(-2,-2)=a(
lm(ng)-2,
mm(ng)-2)
794 a(-2,-1)=a(
lm(ng)-2,
mm(ng)-1)
795 a(-2, 0)=a(
lm(ng)-2,
mm(ng) )
796 a(-1,-2)=a(
lm(ng)-1,
mm(ng)-2)
797 a(-1,-1)=a(
lm(ng)-1,
mm(ng)-1)
798 a(-1, 0)=a(
lm(ng)-1,
mm(ng) )
799 a( 0,-2)=a(
lm(ng) ,
mm(ng)-2)
800 a( 0,-1)=a(
lm(ng) ,
mm(ng)-1)
801 a( 0, 0)=a(
lm(ng) ,
mm(ng) )
subroutine exchange_r2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
subroutine exchange_u2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
subroutine exchange_p2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
subroutine exchange_v2d_tile(ng, tile, lbi, ubi, lbj, ubj, 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