65 PUBLIC :: exchange_p2d_xtr_tile
66 PUBLIC :: exchange_r2d_xtr_tile
67 PUBLIC :: exchange_u2d_xtr_tile
68 PUBLIC :: exchange_v2d_xtr_tile
74 SUBROUTINE exchange_p2d_xtr_tile (ng, tile, &
75 & LBi, UBi, LBj, UBj, &
81 integer,
intent(in) :: ng, tile
82 integer,
intent(in) :: LBi, UBi, LBj, UBj
85 real(r8),
intent(inout) :: A(LBi:,LBj:)
87 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj)
92 logical :: EW_exchange
93 logical :: NS_exchange
95 integer :: Imin, Imax, Jmin, Jmax
98# include "set_bounds_xtr.h"
106 ew_exchange=
ntilei(ng).eq.1
116 ns_exchange=
ntilej(ng).eq.1
137 IF (ew_exchange)
THEN
138 IF (
domain(ng)%Western_Edge(tile))
THEN
140 a(xtr_lm(ng)+1,j)=a(1,j)
141 a(xtr_lm(ng)+2,j)=a(2,j)
145 a(xtr_lm(ng)+3,j)=a(3,j)
149 IF (
domain(ng)%Eastern_Edge(tile))
THEN
151 a(-2,j)=a(xtr_lm(ng)-2,j)
152 a(-1,j)=a(xtr_lm(ng)-1,j)
153 a( 0,j)=a(xtr_lm(ng) ,j)
172 IF (ns_exchange)
THEN
173 IF (
domain(ng)%Southern_Edge(tile))
THEN
175 a(i,xtr_mm(ng)+1)=a(i,1)
176 a(i,xtr_mm(ng)+2)=a(i,2)
180 a(i,xtr_mm(ng)+3)=a(i,3)
184 IF (
domain(ng)%Northern_Edge(tile))
THEN
186 a(i,-2)=a(i,xtr_mm(ng)-2)
187 a(i,-1)=a(i,xtr_mm(ng)-1)
188 a(i, 0)=a(i,xtr_mm(ng) )
199 IF (ew_exchange.and.ns_exchange)
THEN
200 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
201 a(xtr_lm(ng)+1,xtr_mm(ng)+1)=a(1,1)
202 a(xtr_lm(ng)+1,xtr_mm(ng)+2)=a(1,2)
203 a(xtr_lm(ng)+2,xtr_mm(ng)+1)=a(2,1)
204 a(xtr_lm(ng)+2,xtr_mm(ng)+2)=a(2,2)
206 a(xtr_lm(ng)+1,xtr_mm(ng)+3)=a(1,3)
207 a(xtr_lm(ng)+2,xtr_mm(ng)+3)=a(2,3)
208 a(xtr_lm(ng)+3,xtr_mm(ng)+1)=a(3,1)
209 a(xtr_lm(ng)+3,xtr_mm(ng)+2)=a(3,2)
210 a(xtr_lm(ng)+3,xtr_mm(ng)+3)=a(3,3)
213 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
214 a(-2,xtr_mm(ng)+1)=a(xtr_lm(ng)-2,1)
215 a(-1,xtr_mm(ng)+1)=a(xtr_lm(ng)-1,1)
216 a( 0,xtr_mm(ng)+1)=a(xtr_lm(ng) ,1)
217 a(-2,xtr_mm(ng)+2)=a(xtr_lm(ng)-2,2)
218 a(-1,xtr_mm(ng)+2)=a(xtr_lm(ng)-1,2)
219 a( 0,xtr_mm(ng)+2)=a(xtr_lm(ng) ,2)
221 a(-2,xtr_mm(ng)+3)=a(xtr_lm(ng)-2,3)
222 a(-1,xtr_mm(ng)+3)=a(xtr_lm(ng)-1,3)
223 a( 0,xtr_mm(ng)+3)=a(xtr_lm(ng) ,3)
226 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
227 a(xtr_lm(ng)+1,-2)=a(1,xtr_mm(ng)-2)
228 a(xtr_lm(ng)+1,-1)=a(1,xtr_mm(ng)-1)
229 a(xtr_lm(ng)+1, 0)=a(1,xtr_mm(ng) )
230 a(xtr_lm(ng)+2,-2)=a(2,xtr_mm(ng)-2)
231 a(xtr_lm(ng)+2,-1)=a(2,xtr_mm(ng)-1)
232 a(xtr_lm(ng)+2, 0)=a(2,xtr_mm(ng) )
234 a(xtr_lm(ng)+3,-2)=a(3,xtr_mm(ng)-2)
235 a(xtr_lm(ng)+3,-1)=a(3,xtr_mm(ng)-1)
236 a(xtr_lm(ng)+3, 0)=a(3,xtr_mm(ng) )
239 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
240 a(-2,-2)=a(xtr_lm(ng)-2,xtr_mm(ng)-2)
241 a(-2,-1)=a(xtr_lm(ng)-2,xtr_mm(ng)-1)
242 a(-2, 0)=a(xtr_lm(ng)-2,xtr_mm(ng) )
243 a(-1,-2)=a(xtr_lm(ng)-1,xtr_mm(ng)-2)
244 a(-1,-1)=a(xtr_lm(ng)-1,xtr_mm(ng)-1)
245 a(-1, 0)=a(xtr_lm(ng)-1,xtr_mm(ng) )
246 a( 0,-2)=a(xtr_lm(ng) ,xtr_mm(ng)-2)
247 a( 0,-1)=a(xtr_lm(ng) ,xtr_mm(ng)-1)
248 a( 0, 0)=a(xtr_lm(ng) ,xtr_mm(ng) )
254 END SUBROUTINE exchange_p2d_xtr_tile
258 SUBROUTINE exchange_r2d_xtr_tile (ng, tile, &
259 & LBi, UBi, LBj, UBj, &
265 integer,
intent(in) :: ng, tile
266 integer,
intent(in) :: LBi, UBi, LBj, UBj
269 real(r8),
intent(inout) :: A(LBi:,LBj:)
271 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj)
276 logical :: EW_exchange
277 logical :: NS_exchange
279 integer :: Imin, Imax, Jmin, Jmax
282# include "set_bounds_xtr.h"
290 ew_exchange=
ntilei(ng).eq.1
300 ns_exchange=
ntilej(ng).eq.1
321 IF (ew_exchange)
THEN
322 IF (
domain(ng)%Western_Edge(tile))
THEN
324 a(xtr_lm(ng)+1,j)=a(1,j)
325 a(xtr_lm(ng)+2,j)=a(2,j)
329 a(xtr_lm(ng)+3,j)=a(3,j)
333 IF (
domain(ng)%Eastern_Edge(tile))
THEN
335 a(-2,j)=a(xtr_lm(ng)-2,j)
336 a(-1,j)=a(xtr_lm(ng)-1,j)
337 a( 0,j)=a(xtr_lm(ng) ,j)
356 IF (ns_exchange)
THEN
357 IF (
domain(ng)%Southern_Edge(tile))
THEN
359 a(i,xtr_mm(ng)+1)=a(i,1)
360 a(i,xtr_mm(ng)+2)=a(i,2)
364 a(i,xtr_mm(ng)+3)=a(i,3)
368 IF (
domain(ng)%Northern_Edge(tile))
THEN
370 a(i,-2)=a(i,xtr_mm(ng)-2)
371 a(i,-1)=a(i,xtr_mm(ng)-1)
372 a(i, 0)=a(i,xtr_mm(ng) )
383 IF (ew_exchange.and.ns_exchange)
THEN
384 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
385 a(xtr_lm(ng)+1,xtr_mm(ng)+1)=a(1,1)
386 a(xtr_lm(ng)+1,xtr_mm(ng)+2)=a(1,2)
387 a(xtr_lm(ng)+2,xtr_mm(ng)+1)=a(2,1)
388 a(xtr_lm(ng)+2,xtr_mm(ng)+2)=a(2,2)
390 a(xtr_lm(ng)+1,xtr_mm(ng)+3)=a(1,3)
391 a(xtr_lm(ng)+2,xtr_mm(ng)+3)=a(2,3)
392 a(xtr_lm(ng)+3,xtr_mm(ng)+1)=a(3,1)
393 a(xtr_lm(ng)+3,xtr_mm(ng)+2)=a(3,2)
394 a(xtr_lm(ng)+3,xtr_mm(ng)+3)=a(3,3)
397 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
398 a(-2,xtr_mm(ng)+1)=a(xtr_lm(ng)-2,1)
399 a(-1,xtr_mm(ng)+1)=a(xtr_lm(ng)-1,1)
400 a( 0,xtr_mm(ng)+1)=a(xtr_lm(ng) ,1)
401 a(-2,xtr_mm(ng)+2)=a(xtr_lm(ng)-2,2)
402 a(-1,xtr_mm(ng)+2)=a(xtr_lm(ng)-1,2)
403 a( 0,xtr_mm(ng)+2)=a(xtr_lm(ng) ,2)
405 a(-2,xtr_mm(ng)+3)=a(xtr_lm(ng)-2,3)
406 a(-1,xtr_mm(ng)+3)=a(xtr_lm(ng)-1,3)
407 a( 0,xtr_mm(ng)+3)=a(xtr_lm(ng) ,3)
410 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
411 a(xtr_lm(ng)+1,-2)=a(1,xtr_mm(ng)-2)
412 a(xtr_lm(ng)+1,-1)=a(1,xtr_mm(ng)-1)
413 a(xtr_lm(ng)+1, 0)=a(1,xtr_mm(ng) )
414 a(xtr_lm(ng)+2,-2)=a(2,xtr_mm(ng)-2)
415 a(xtr_lm(ng)+2,-1)=a(2,xtr_mm(ng)-1)
416 a(xtr_lm(ng)+2, 0)=a(2,xtr_mm(ng) )
418 a(xtr_lm(ng)+3,-2)=a(3,xtr_mm(ng)-2)
419 a(xtr_lm(ng)+3,-1)=a(3,xtr_mm(ng)-1)
420 a(xtr_lm(ng)+3, 0)=a(3,xtr_mm(ng) )
423 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
424 a(-2,-2)=a(xtr_lm(ng)-2,xtr_mm(ng)-2)
425 a(-2,-1)=a(xtr_lm(ng)-2,xtr_mm(ng)-1)
426 a(-2, 0)=a(xtr_lm(ng)-2,xtr_mm(ng) )
427 a(-1,-2)=a(xtr_lm(ng)-1,xtr_mm(ng)-2)
428 a(-1,-1)=a(xtr_lm(ng)-1,xtr_mm(ng)-1)
429 a(-1, 0)=a(xtr_lm(ng)-1,xtr_mm(ng) )
430 a( 0,-2)=a(xtr_lm(ng) ,xtr_mm(ng)-2)
431 a( 0,-1)=a(xtr_lm(ng) ,xtr_mm(ng)-1)
432 a( 0, 0)=a(xtr_lm(ng) ,xtr_mm(ng) )
438 END SUBROUTINE exchange_r2d_xtr_tile
442 SUBROUTINE exchange_u2d_xtr_tile (ng, tile, &
443 & LBi, UBi, LBj, UBj, &
449 integer,
intent(in) :: ng, tile
450 integer,
intent(in) :: LBi, UBi, LBj, UBj
453 real(r8),
intent(inout) :: A(LBi:,LBj:)
455 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj)
460 logical :: EW_exchange
461 logical :: NS_exchange
463 integer :: Imin, Imax, Jmin, Jmax
466# include "set_bounds_xtr.h"
474 ew_exchange=
ntilei(ng).eq.1
484 ns_exchange=
ntilej(ng).eq.1
505 IF (ew_exchange)
THEN
506 IF (
domain(ng)%Western_Edge(tile))
THEN
508 a(xtr_lm(ng)+1,j)=a(1,j)
509 a(xtr_lm(ng)+2,j)=a(2,j)
513 a(xtr_lm(ng)+3,j)=a(3,j)
517 IF (
domain(ng)%Eastern_Edge(tile))
THEN
519 a(-2,j)=a(xtr_lm(ng)-2,j)
520 a(-1,j)=a(xtr_lm(ng)-1,j)
521 a( 0,j)=a(xtr_lm(ng) ,j)
540 IF (ns_exchange)
THEN
541 IF (
domain(ng)%Southern_Edge(tile))
THEN
543 a(i,xtr_mm(ng)+1)=a(i,1)
544 a(i,xtr_mm(ng)+2)=a(i,2)
548 a(i,xtr_mm(ng)+3)=a(i,3)
552 IF (
domain(ng)%Northern_Edge(tile))
THEN
554 a(i,-2)=a(i,xtr_mm(ng)-2)
555 a(i,-1)=a(i,xtr_mm(ng)-1)
556 a(i, 0)=a(i,xtr_mm(ng) )
567 IF (ew_exchange.and.ns_exchange)
THEN
568 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
569 a(xtr_lm(ng)+1,xtr_mm(ng)+1)=a(1,1)
570 a(xtr_lm(ng)+1,xtr_mm(ng)+2)=a(1,2)
571 a(xtr_lm(ng)+2,xtr_mm(ng)+1)=a(2,1)
572 a(xtr_lm(ng)+2,xtr_mm(ng)+2)=a(2,2)
574 a(xtr_lm(ng)+1,xtr_mm(ng)+3)=a(1,3)
575 a(xtr_lm(ng)+2,xtr_mm(ng)+3)=a(2,3)
576 a(xtr_lm(ng)+3,xtr_mm(ng)+1)=a(3,1)
577 a(xtr_lm(ng)+3,xtr_mm(ng)+2)=a(3,2)
578 a(xtr_lm(ng)+3,xtr_mm(ng)+3)=a(3,3)
581 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
582 a(-2,xtr_mm(ng)+1)=a(xtr_lm(ng)-2,1)
583 a(-1,xtr_mm(ng)+1)=a(xtr_lm(ng)-1,1)
584 a( 0,xtr_mm(ng)+1)=a(xtr_lm(ng) ,1)
585 a(-2,xtr_mm(ng)+2)=a(xtr_lm(ng)-2,2)
586 a(-1,xtr_mm(ng)+2)=a(xtr_lm(ng)-1,2)
587 a( 0,xtr_mm(ng)+2)=a(xtr_lm(ng) ,2)
589 a(-2,xtr_mm(ng)+3)=a(xtr_lm(ng)-2,3)
590 a(-1,xtr_mm(ng)+3)=a(xtr_lm(ng)-1,3)
591 a( 0,xtr_mm(ng)+3)=a(xtr_lm(ng) ,3)
594 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
595 a(xtr_lm(ng)+1,-2)=a(1,xtr_mm(ng)-2)
596 a(xtr_lm(ng)+1,-1)=a(1,xtr_mm(ng)-1)
597 a(xtr_lm(ng)+1, 0)=a(1,xtr_mm(ng) )
598 a(xtr_lm(ng)+2,-2)=a(2,xtr_mm(ng)-2)
599 a(xtr_lm(ng)+2,-1)=a(2,xtr_mm(ng)-1)
600 a(xtr_lm(ng)+2, 0)=a(2,xtr_mm(ng) )
602 a(xtr_lm(ng)+3,-2)=a(3,xtr_mm(ng)-2)
603 a(xtr_lm(ng)+3,-1)=a(3,xtr_mm(ng)-1)
604 a(xtr_lm(ng)+3, 0)=a(3,xtr_mm(ng) )
607 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
608 a(-2,-2)=a(xtr_lm(ng)-2,xtr_mm(ng)-2)
609 a(-2,-1)=a(xtr_lm(ng)-2,xtr_mm(ng)-1)
610 a(-2, 0)=a(xtr_lm(ng)-2,xtr_mm(ng) )
611 a(-1,-2)=a(xtr_lm(ng)-1,xtr_mm(ng)-2)
612 a(-1,-1)=a(xtr_lm(ng)-1,xtr_mm(ng)-1)
613 a(-1, 0)=a(xtr_lm(ng)-1,xtr_mm(ng) )
614 a( 0,-2)=a(xtr_lm(ng) ,xtr_mm(ng)-2)
615 a( 0,-1)=a(xtr_lm(ng) ,xtr_mm(ng)-1)
616 a( 0, 0)=a(xtr_lm(ng) ,xtr_mm(ng) )
622 END SUBROUTINE exchange_u2d_xtr_tile
626 SUBROUTINE exchange_v2d_xtr_tile (ng, tile, &
627 & LBi, UBi, LBj, UBj, &
633 integer,
intent(in) :: ng, tile
634 integer,
intent(in) :: LBi, UBi, LBj, UBj
637 real(r8),
intent(inout) :: A(LBi:,LBj:)
639 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj)
644 logical :: EW_exchange
645 logical :: NS_exchange
647 integer :: Imin, Imax, Jmin, Jmax
650# include "set_bounds_xtr.h"
658 ew_exchange=
ntilei(ng).eq.1
668 ns_exchange=
ntilej(ng).eq.1
689 IF (ew_exchange)
THEN
690 IF (
domain(ng)%Western_Edge(tile))
THEN
692 a(xtr_lm(ng)+1,j)=a(1,j)
693 a(xtr_lm(ng)+2,j)=a(2,j)
697 a(xtr_lm(ng)+3,j)=a(3,j)
701 IF (
domain(ng)%Eastern_Edge(tile))
THEN
703 a(-2,j)=a(xtr_lm(ng)-2,j)
704 a(-1,j)=a(xtr_lm(ng)-1,j)
705 a( 0,j)=a(xtr_lm(ng) ,j)
724 IF (ns_exchange)
THEN
725 IF (
domain(ng)%Southern_Edge(tile))
THEN
727 a(i,xtr_mm(ng)+1)=a(i,1)
728 a(i,xtr_mm(ng)+2)=a(i,2)
732 a(i,xtr_mm(ng)+3)=a(i,3)
736 IF (
domain(ng)%Northern_Edge(tile))
THEN
738 a(i,-2)=a(i,xtr_mm(ng)-2)
739 a(i,-1)=a(i,xtr_mm(ng)-1)
740 a(i, 0)=a(i,xtr_mm(ng) )
751 IF (ew_exchange.and.ns_exchange)
THEN
752 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
753 a(xtr_lm(ng)+1,xtr_mm(ng)+1)=a(1,1)
754 a(xtr_lm(ng)+1,xtr_mm(ng)+2)=a(1,2)
755 a(xtr_lm(ng)+2,xtr_mm(ng)+1)=a(2,1)
756 a(xtr_lm(ng)+2,xtr_mm(ng)+2)=a(2,2)
758 a(xtr_lm(ng)+1,xtr_mm(ng)+3)=a(1,3)
759 a(xtr_lm(ng)+2,xtr_mm(ng)+3)=a(2,3)
760 a(xtr_lm(ng)+3,xtr_mm(ng)+1)=a(3,1)
761 a(xtr_lm(ng)+3,xtr_mm(ng)+2)=a(3,2)
762 a(xtr_lm(ng)+3,xtr_mm(ng)+3)=a(3,3)
765 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
766 a(-2,xtr_mm(ng)+1)=a(xtr_lm(ng)-2,1)
767 a(-1,xtr_mm(ng)+1)=a(xtr_lm(ng)-1,1)
768 a( 0,xtr_mm(ng)+1)=a(xtr_lm(ng) ,1)
769 a(-2,xtr_mm(ng)+2)=a(xtr_lm(ng)-2,2)
770 a(-1,xtr_mm(ng)+2)=a(xtr_lm(ng)-1,2)
771 a( 0,xtr_mm(ng)+2)=a(xtr_lm(ng) ,2)
773 a(-2,xtr_mm(ng)+3)=a(xtr_lm(ng)-2,3)
774 a(-1,xtr_mm(ng)+3)=a(xtr_lm(ng)-1,3)
775 a( 0,xtr_mm(ng)+3)=a(xtr_lm(ng) ,3)
778 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
779 a(xtr_lm(ng)+1,-2)=a(1,xtr_mm(ng)-2)
780 a(xtr_lm(ng)+1,-1)=a(1,xtr_mm(ng)-1)
781 a(xtr_lm(ng)+1, 0)=a(1,xtr_mm(ng) )
782 a(xtr_lm(ng)+2,-2)=a(2,xtr_mm(ng)-2)
783 a(xtr_lm(ng)+2,-1)=a(2,xtr_mm(ng)-1)
784 a(xtr_lm(ng)+2, 0)=a(2,xtr_mm(ng) )
786 a(xtr_lm(ng)+3,-2)=a(3,xtr_mm(ng)-2)
787 a(xtr_lm(ng)+3,-1)=a(3,xtr_mm(ng)-1)
788 a(xtr_lm(ng)+3, 0)=a(3,xtr_mm(ng) )
791 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
792 a(-2,-2)=a(xtr_lm(ng)-2,xtr_mm(ng)-2)
793 a(-2,-1)=a(xtr_lm(ng)-2,xtr_mm(ng)-1)
794 a(-2, 0)=a(xtr_lm(ng)-2,xtr_mm(ng) )
795 a(-1,-2)=a(xtr_lm(ng)-1,xtr_mm(ng)-2)
796 a(-1,-1)=a(xtr_lm(ng)-1,xtr_mm(ng)-1)
797 a(-1, 0)=a(xtr_lm(ng)-1,xtr_mm(ng) )
798 a( 0,-2)=a(xtr_lm(ng) ,xtr_mm(ng)-2)
799 a( 0,-1)=a(xtr_lm(ng) ,xtr_mm(ng)-1)
800 a( 0, 0)=a(xtr_lm(ng) ,xtr_mm(ng) )
806 END SUBROUTINE exchange_v2d_xtr_tile
type(t_domain), dimension(:), allocatable domain
integer, dimension(:), allocatable ntilei
integer, dimension(:), allocatable ntilej
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic