53 & LBi, UBi, LBj, UBj, UBk, &
54 & IminS, ImaxS, JminS, JmaxS, &
68 integer,
intent(in) :: ng, tile
69 integer,
intent(in) :: lbi, ubi, lbj, ubj, ubk
70 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
71 integer,
intent(in) :: nstp, nout
74 real(r8),
intent(inout) :: tl_u(lbi:,lbj:,:,:)
76 real(r8),
intent(inout) :: tl_u(lbi:ubi,lbj:ubj,ubk,2)
84 real(r8) :: ce, cx, cff
85 real(r8) :: obc_in, obc_out, tau
87 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_grad
89# include "set_bounds.h"
95 IF (
domain(ng)%Western_Edge(tile))
THEN
100 IF (
iic(ng).ne.0)
THEN
106 tl_grad(istr,j)=0.0_r8
110# if defined CELERITY_READ && defined FORWARD_READ
114 & (
clima(ng)%M3nudgcof(istr-1,j,k)+ &
115 &
clima(ng)%M3nudgcof(istr ,j,k))
116 obc_in =
obcfac(ng)*obc_out
121 IF (
boundary(ng)%u_west_Cx(j,k).lt.0.0_r8)
THEN
142 tl_u(istr,j,k,nout)=(cff*tl_u(istr ,j,k,nstp)+ &
143 & cx *tl_u(istr+1,j,k,nout)- &
145 & tl_grad(istr,j )- &
147 & tl_grad(istr,j+1))/ &
155 tl_u(istr,j,k,nout)=tl_u(istr,j,k,nout)- &
156 & tau*tl_u(istr,j,k,nstp)
162 tl_u(istr,j,k,nout)=tl_u(istr,j,k,nout)* &
163 &
grid(ng)%umask(istr,j)
178# ifdef ADJUST_BOUNDARY
180 tl_u(istr,j,k,nout)=
boundary(ng)%tl_u_west(j,k)
182 tl_u(istr,j,k,nout)=0.0_r8
185 tl_u(istr,j,k,nout)=0.0_r8
191 tl_u(istr,j,k,nout)=tl_u(istr,j,k,nout)* &
192 &
grid(ng)%umask(istr,j)
206 tl_u(istr,j,k,nout)=tl_u(istr+1,j,k,nout)
211 tl_u(istr,j,k,nout)=tl_u(istr,j,k,nout)* &
212 &
grid(ng)%umask(istr,j)
226 tl_u(istr,j,k,nout)=0.0_r8
237 IF (
domain(ng)%Eastern_Edge(tile))
THEN
242 IF (
iic(ng).ne.0)
THEN
248 tl_grad(iend+1,j)=0.0_r8
252# if defined CELERITY_READ && defined FORWARD_READ
256 & (
clima(ng)%M3nudgcof(iend ,j,k)+ &
257 &
clima(ng)%M3nudgcof(iend+1,j,k))
258 obc_in =
obcfac(ng)*obc_out
263 IF (
boundary(ng)%u_east_Cx(j,k).lt.0.0_r8)
THEN
284 tl_u(iend+1,j,k,nout)=(cff*tl_u(iend+1,j,k,nstp)+ &
285 & cx *tl_u(iend ,j,k,nout)- &
287 & tl_grad(iend+1,j )- &
289 & tl_grad(iend+1,j+1))/ &
297 tl_u(iend+1,j,k,nout)=tl_u(iend+1,j,k,nout)- &
298 & tau*tl_u(iend+1,j,k,nstp)
304 tl_u(iend+1,j,k,nout)=tl_u(iend+1,j,k,nout)* &
305 &
grid(ng)%umask(iend+1,j)
320# ifdef ADJUST_BOUNDARY
322 tl_u(iend+1,j,k,nout)=
boundary(ng)%tl_u_east(j,k)
324 tl_u(iend+1,j,k,nout)=0.0_r8
327 tl_u(iend+1,j,k,nout)=0.0_r8
333 tl_u(iend+1,j,k,nout)=tl_u(iend+1,j,k,nout)* &
334 &
grid(ng)%umask(iend+1,j)
348 tl_u(iend+1,j,k,nout)=tl_u(iend,j,k,nout)
353 tl_u(iend+1,j,k,nout)=tl_u(iend+1,j,k,nout)* &
354 &
grid(ng)%umask(iend+1,j)
368 tl_u(iend+1,j,k,nout)=0.0_r8
379 IF (
domain(ng)%Southern_Edge(tile))
THEN
384 IF (
iic(ng).ne.0)
THEN
390 tl_grad(i,jstr-1)=0.0_r8
394# if defined CELERITY_READ && defined FORWARD_READ
398 & (
clima(ng)%M3nudgcof(i-1,jstr-1,k)+ &
399 &
clima(ng)%M3nudgcof(i ,jstr-1,k))
400 obc_in =
obcfac(ng)*obc_out
405 IF (
boundary(ng)%u_south_Ce(i,k).lt.0.0_r8)
THEN
426 tl_u(i,jstr-1,k,nout)=(cff*tl_u(i,jstr-1,k,nstp)+ &
427 & ce *tl_u(i,jstr ,k,nout)- &
429 & tl_grad(i-1,jstr-1)- &
431 & tl_grad(i ,jstr-1))/ &
439 tl_u(i,jstr-1,k,nout)=tl_u(i,jstr-1,k,nout)- &
440 & tau*tl_u(i,jstr-1,k,nstp)
446 tl_u(i,jstr-1,k,nout)=tl_u(i,jstr-1,k,nout)* &
447 &
grid(ng)%umask(i,jstr-1)
462# ifdef ADJUST_BOUNDARY
464 tl_u(i,jstr-1,k,nout)=
boundary(ng)%tl_u_south(i,k)
466 tl_u(i,jstr-1,k,nout)=0.0_r8
469 tl_u(i,jstr-1,k,nout)=0.0_r8
475 tl_u(i,jstr-1,k,nout)=tl_u(i,jstr-1,k,nout)* &
476 &
grid(ng)%umask(i,jstr-1)
490 tl_u(i,jstr-1,k,nout)=tl_u(i,jstr,k,nout)
495 tl_u(i,jstr-1,k,nout)=tl_u(i,jstr-1,k,nout)* &
496 &
grid(ng)%umask(i,jstr-1)
518 tl_u(i,jstr-1,k,nout)=
gamma2(ng)*tl_u(i,jstr,k,nout)
523 tl_u(i,jstr-1,k,nout)=tl_u(i,jstr-1,k,nout)* &
524 &
grid(ng)%umask(i,jstr-1)
536 IF (
domain(ng)%Northern_Edge(tile))
THEN
541 IF (
iic(ng).ne.0)
THEN
547 tl_grad(i,jend+1)=0.0_r8
551# if defined CELERITY_READ && defined FORWARD_READ
555 & (
clima(ng)%M3nudgcof(i-1,jend+1,k)+ &
556 &
clima(ng)%M3nudgcof(i ,jend+1,k))
557 obc_in =
obcfac(ng)*obc_out
562 IF (
boundary(ng)%u_north_Ce(i,k).lt.0.0_r8)
THEN
583 tl_u(i,jend+1,k,nout)=(cff*tl_u(i,jend+1,k,nstp)+ &
584 & ce *tl_u(i,jend ,k,nout)- &
586 & tl_grad(i-1,jend+1)- &
588 & tl_grad(i ,jend+1))/ &
596 tl_u(i,jend+1,k,nout)=tl_u(i,jend+1,k,nout)- &
597 & tau*tl_u(i,jend+1,k,nstp)
603 tl_u(i,jend+1,k,nout)=tl_u(i,jend+1,k,nout)* &
604 &
grid(ng)%umask(i,jend+1)
619# ifdef ADJUST_BOUNDARY
621 tl_u(i,jend+1,k,nout)=
boundary(ng)%tl_u_north(i,k)
623 tl_u(i,jend+1,k,nout)=0.0_r8
626 tl_u(i,jend+1,k,nout)=0.0_r8
632 tl_u(i,jend+1,k,nout)=tl_u(i,jend+1,k,nout)* &
633 &
grid(ng)%umask(i,jend+1)
647 tl_u(i,jend+1,k,nout)=tl_u(i,jend,k,nout)
652 tl_u(i,jend+1,k,nout)=tl_u(i,jend+1,k,nout)* &
653 &
grid(ng)%umask(i,jend+1)
675 tl_u(i,jend+1,k,nout)=
gamma2(ng)*tl_u(i,jend,k,nout)
680 tl_u(i,jend+1,k,nout)=tl_u(i,jend+1,k,nout)* &
681 &
grid(ng)%umask(i,jend+1)
694 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
701 tl_u(istr,jstr-1,k,nout)=0.5_r8* &
702 & (tl_u(istr+1,jstr-1,k,nout)+ &
703 & tl_u(istr ,jstr ,k,nout))
707 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
714 tl_u(iend+1,jstr-1,k,nout)=0.5_r8* &
715 & (tl_u(iend ,jstr-1,k,nout)+ &
716 & tl_u(iend+1,jstr ,k,nout))
720 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
727 tl_u(istr,jend+1,k,nout)=0.5_r8* &
728 & (tl_u(istr ,jend ,k,nout)+ &
729 & tl_u(istr+1,jend+1,k,nout))
733 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
740 tl_u(iend+1,jend+1,k,nout)=0.5_r8* &
741 & (tl_u(iend+1,jend ,k,nout)+ &
742 & tl_u(iend ,jend+1,k,nout))