46 & LBi, UBi, LBj, UBj, LBk, UBk, &
59 integer,
intent(in) :: ng, tile
60 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
63 real(r8),
intent(inout) :: A(LBi:,LBj:,LBk:)
65 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj,LBk:UBk)
72# include "set_bounds.h"
79 IF (
domain(ng)%Eastern_Edge(tile))
THEN
83 a(iend+1,j,k)=a(iend,j,k)
89 IF (
domain(ng)%Western_Edge(tile))
THEN
93 a(istr-1,j,k)=a(istr,j,k)
105 IF (
domain(ng)%Northern_Edge(tile))
THEN
109 a(i,jend+1,k)=a(i,jend,k)
115 IF (
domain(ng)%Southern_Edge(tile))
THEN
119 a(i,jstr-1,k)=a(i,jstr,k)
131 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
135 a(istr-1,jstr-1,k)=0.5_r8*(a(istr ,jstr-1,k)+ &
140 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
144 a(iend+1,jstr-1,k)=0.5_r8*(a(iend ,jstr-1,k)+ &
149 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
153 a(istr-1,jend+1,k)=0.5_r8*(a(istr-1,jend ,k)+ &
158 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
162 a(iend+1,jend+1,k)=0.5_r8*(a(iend+1,jend ,k)+ &
175 & lbi, ubi, lbj, ubj, lbk, ubk, &
185 & LBi, UBi, LBj, UBj, LBk, UBk, &
199 integer,
intent(in) :: ng, tile
200 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
203 real(r8),
intent(inout) :: A(LBi:,LBj:,LBk:)
205 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj,LBk:UBk)
210 integer :: Imin, Imax
213# include "set_bounds.h"
220 IF (
domain(ng)%Eastern_Edge(tile))
THEN
233 a(iend+1,j,k)=a(iend,j,k)
240 IF (
domain(ng)%Western_Edge(tile))
THEN
253 a(istr,j,k)=a(istr+1,j,k)
267 IF (
domain(ng)%Northern_Edge(tile))
THEN
279 a(i,jend+1,k)=
gamma2(ng)*a(i,jend,k)
281 a(i,jend+1,k)=a(i,jend+1,k)*
grid(ng)%umask(i,jend+1)
290 a(i,jend+1,k)=a(i,jend,k)
297 IF (
domain(ng)%Southern_Edge(tile))
THEN
309 a(i,jstr-1,k)=
gamma2(ng)*a(i,jstr,k)
311 a(i,jstr-1,k)=a(i,jstr-1,k)*
grid(ng)%umask(i,jstr-1)
320 a(i,jstr-1,k)=a(i,jstr,k)
333 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
337 a(istr ,jstr-1,k)=0.5_r8*(a(istr+1,jstr-1,k)+ &
342 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
346 a(iend+1,jstr-1,k)=0.5_r8*(a(iend ,jstr-1,k)+ &
351 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
355 a(istr ,jend+1,k)=0.5_r8*(a(istr ,jend ,k)+ &
356 & a(istr+1,jend+1,k))
360 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
364 a(iend+1,jend+1,k)=0.5_r8*(a(iend+1,jend ,k)+ &
377 & lbi, ubi, lbj, ubj, lbk, ubk, &
387 & LBi, UBi, LBj, UBj, LBk, UBk, &
401 integer,
intent(in) :: ng, tile
402 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
405 real(r8),
intent(inout) :: A(LBi:,LBj:,:)
407 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj,LBk:UBk)
412 integer :: Jmin, Jmax
415# include "set_bounds.h"
423 IF (
domain(ng)%Eastern_Edge(tile))
THEN
435 a(iend+1,j,k)=
gamma2(ng)*a(iend,j,k)
437 a(iend+1,j,k)=a(iend+1,j,k)*
grid(ng)%vmask(iend+1,j)
446 a(iend+1,j,k)=a(iend,j,k)
453 IF (
domain(ng)%Western_Edge(tile))
THEN
465 a(istr-1,j,k)=
gamma2(ng)*a(istr,j,k)
467 a(istr-1,j,k)=a(istr-1,j,k)*
grid(ng)%vmask(istr-1,j)
476 a(istr-1,j,k)=a(istr,j,k)
489 IF (
domain(ng)%Northern_Edge(tile))
THEN
502 a(i,jend+1,k)=a(i,jend,k)
509 IF (
domain(ng)%Southern_Edge(tile))
THEN
522 a(i,jstr,k)=a(i,jstr+1,k)
535 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
539 a(istr-1,jstr ,k)=0.5_r8*(a(istr ,jstr ,k)+ &
540 & a(istr-1,jstr+1,k))
544 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
548 a(iend+1,jstr ,k)=0.5_r8*(a(iend ,jstr ,k)+ &
549 & a(iend+1,jstr+1,k))
553 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
557 a(istr-1,jend+1,k)=0.5_r8*(a(istr-1,jend ,k)+ &
562 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
566 a(iend+1,jend+1,k)=0.5_r8*(a(iend+1,jend ,k)+ &
579 & lbi, ubi, lbj, ubj, lbk, ubk, &
589 & LBi, UBi, LBj, UBj, LBk, UBk, &
602 integer,
intent(in) :: ng, tile
603 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
606 real(r8),
intent(inout) :: A(LBi:,LBj:,LBk:)
608 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj,LBk:UBk)
615# include "set_bounds.h"
622 IF (
domain(ng)%Eastern_Edge(tile))
THEN
626 a(iend+1,j,k)=a(iend,j,k)
632 IF (
domain(ng)%Western_Edge(tile))
THEN
636 a(istr-1,j,k)=a(istr,j,k)
648 IF (
domain(ng)%Northern_Edge(tile))
THEN
652 a(i,jend+1,k)=a(i,jend,k)
658 IF (
domain(ng)%Southern_Edge(tile))
THEN
662 a(i,jstr-1,k)=a(i,jstr,k)
674 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
678 a(istr-1,jstr-1,k)=0.5_r8*(a(istr ,jstr-1,k)+ &
683 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
687 a(iend+1,jstr-1,k)=0.5_r8*(a(iend ,jstr-1,k)+ &
692 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
696 a(istr-1,jend+1,k)=0.5_r8*(a(istr-1,jend ,k)+ &
701 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
705 a(iend+1,jend+1,k)=0.5_r8*(a(iend+1,jend ,k)+ &
718 & lbi, ubi, lbj, ubj, lbk, ubk, &
728 & LBi, UBi, LBj, UBj, LBk, UBk, &
741 integer,
intent(in) :: ng, tile
742 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
745 real(r8),
intent(inout) :: A(LBi:,LBj:,LBk:)
747 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj,LBk:UBk)
754# include "set_bounds.h"
761 IF (
domain(ng)%Eastern_Edge(tile))
THEN
765 a(iend+1,j,k)=a(iend,j,k)
771 IF (
domain(ng)%Western_Edge(tile))
THEN
775 a(istr-1,j,k)=a(istr,j,k)
787 IF (
domain(ng)%Northern_Edge(tile))
THEN
791 a(i,jend+1,k)=a(i,jend,k)
797 IF (
domain(ng)%Southern_Edge(tile))
THEN
801 a(i,jstr-1,k)=a(i,jstr,k)
813 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
817 a(istr-1,jstr-1,k)=0.5_r8*(a(istr ,jstr-1,k)+ &
822 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
826 a(iend+1,jstr-1,k)=0.5_r8*(a(iend ,jstr-1,k)+ &
831 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
835 a(istr-1,jend+1,k)=0.5_r8*(a(istr-1,jend ,k)+ &
840 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
844 a(iend+1,jend+1,k)=0.5_r8*(a(iend+1,jend ,k)+ &
857 & lbi, ubi, lbj, ubj, lbk, ubk, &
867 & LBi, UBi, LBj, UBj, LBk, UBk, &
881 integer,
intent(in) :: ng, tile
882 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
885 real(r8),
intent(inout) :: A(LBi:,LBj:,LBk:)
887 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj,LBk:UBk)
892 integer :: Imin, Imax
895# include "set_bounds.h"
902 IF (
domain(ng)%Eastern_Edge(tile))
THEN
906 a(iend+1,j,k)=a(iend,j,k)
912 IF (
domain(ng)%Western_Edge(tile))
THEN
916 a(istr,j,k)=a(istr+1,j,k)
928 IF (
domain(ng)%Northern_Edge(tile))
THEN
932 a(i,jend+1,k)=a(i,jend,k)
938 IF (
domain(ng)%Southern_Edge(tile))
THEN
942 a(i,jstr-1,k)=a(i,jstr,k)
954 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
958 a(istr ,jstr-1,k)=0.5_r8*(a(istr+1,jstr-1,k)+ &
963 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
967 a(iend+1,jstr-1,k)=0.5_r8*(a(iend ,jstr-1,k)+ &
972 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
976 a(istr ,jend+1,k)=0.5_r8*(a(istr ,jend ,k)+ &
977 & a(istr+1,jend+1,k))
981 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
985 a(iend+1,jend+1,k)=0.5_r8*(a(iend+1,jend ,k)+ &
998 & lbi, ubi, lbj, ubj, lbk, ubk, &
1008 & LBi, UBi, LBj, UBj, LBk, UBk, &
1022 integer,
intent(in) :: ng, tile
1023 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
1025# ifdef ASSUMED_SHAPE
1026 real(r8),
intent(inout) :: A(LBi:,LBj:,:)
1028 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj,LBk:UBk)
1033 integer :: Jmin, Jmax
1036# include "set_bounds.h"
1044 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1048 a(iend+1,j,k)=a(iend,j,k)
1054 IF (
domain(ng)%Western_Edge(tile))
THEN
1058 a(istr-1,j,k)=a(istr,j,k)
1070 IF (
domain(ng)%Northern_Edge(tile))
THEN
1074 a(i,jend+1,k)=a(i,jend,k)
1080 IF (
domain(ng)%Southern_Edge(tile))
THEN
1084 a(i,jstr,k)=a(i,jstr+1,k)
1096 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
1100 a(istr-1,jstr ,k)=0.5_r8*(a(istr ,jstr ,k)+ &
1101 & a(istr-1,jstr+1,k))
1105 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
1109 a(iend+1,jstr ,k)=0.5_r8*(a(iend ,jstr ,k)+ &
1110 & a(iend+1,jstr+1,k))
1114 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
1118 a(istr-1,jend+1,k)=0.5_r8*(a(istr-1,jend ,k)+ &
1119 & a(istr ,jend+1,k))
1123 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
1127 a(iend+1,jend+1,k)=0.5_r8*(a(iend+1,jend ,k)+ &
1128 & a(iend ,jend+1,k))
1140 & lbi, ubi, lbj, ubj, lbk, ubk, &
subroutine dabc_u3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine bc_u3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine dabc_r3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine bc_w3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine bc_r3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine bc_v3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine dabc_v3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine exchange_u3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine exchange_r3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine exchange_v3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine exchange_w3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
type(t_apply), dimension(:), allocatable lbc_apply
type(t_grid), dimension(:), allocatable grid
type(t_lbc), dimension(:,:,:), allocatable lbc
type(t_domain), dimension(:), allocatable domain
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
real(r8), dimension(:), allocatable gamma2
integer, parameter isouth
integer, parameter inorth