54 & LBi, UBi, LBj, UBj, UBk, &
55 & IminS, ImaxS, JminS, JmaxS, &
69 integer,
intent(in) :: ng, tile
70 integer,
intent(in) :: lbi, ubi, lbj, ubj, ubk
71 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
72 integer,
intent(in) :: nstp, nout
75 real(r8),
intent(inout) :: tl_u(lbi:,lbj:,:,:)
77 real(r8),
intent(inout) :: tl_u(lbi:ubi,lbj:ubj,ubk,2)
85 real(r8) :: ce, cx, cff
86 real(r8) :: obc_in, obc_out, tau
88 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_grad
90# include "set_bounds.h"
96 IF (
domain(ng)%Western_Edge(tile))
THEN
101 IF (
iic(ng).ne.0)
THEN
107 tl_grad(istr,j)=0.0_r8
111# if defined CELERITY_READ && defined FORWARD_READ
115 & (
clima(ng)%M3nudgcof(istr-1,j,k)+ &
116 &
clima(ng)%M3nudgcof(istr ,j,k))
117 obc_in =
obcfac(ng)*obc_out
122 IF (
boundary(ng)%u_west_Cx(j,k).lt.0.0_r8)
THEN
143 tl_u(istr,j,k,nout)=(cff*tl_u(istr ,j,k,nstp)+ &
144 & cx *tl_u(istr+1,j,k,nout)- &
146 & tl_grad(istr,j )- &
148 & tl_grad(istr,j+1))/ &
156 tl_u(istr,j,k,nout)=tl_u(istr,j,k,nout)- &
157 & tau*tl_u(istr,j,k,nstp)
163 tl_u(istr,j,k,nout)=tl_u(istr,j,k,nout)* &
164 &
grid(ng)%umask(istr,j)
179 tl_u(istr,j,k,nout)=
boundary(ng)%tl_u_west(j,k)
184 tl_u(istr,j,k,nout)=tl_u(istr,j,k,nout)* &
185 &
grid(ng)%umask(istr,j)
199 tl_u(istr,j,k,nout)=tl_u(istr+1,j,k,nout)
204 tl_u(istr,j,k,nout)=tl_u(istr,j,k,nout)* &
205 &
grid(ng)%umask(istr,j)
219 tl_u(istr,j,k,nout)=0.0_r8
230 IF (
domain(ng)%Eastern_Edge(tile))
THEN
235 IF (
iic(ng).ne.0)
THEN
241 tl_grad(iend+1,j)=0.0_r8
245# if defined CELERITY_READ && defined FORWARD_READ
249 & (
clima(ng)%M3nudgcof(iend ,j,k)+ &
250 &
clima(ng)%M3nudgcof(iend+1,j,k))
251 obc_in =
obcfac(ng)*obc_out
256 IF (
boundary(ng)%u_east_Cx(j,k).lt.0.0_r8)
THEN
277 tl_u(iend+1,j,k,nout)=(cff*tl_u(iend+1,j,k,nstp)+ &
278 & cx *tl_u(iend ,j,k,nout)- &
280 & tl_grad(iend+1,j )- &
282 & tl_grad(iend+1,j+1))/ &
290 tl_u(iend+1,j,k,nout)=tl_u(iend+1,j,k,nout)- &
291 & tau*tl_u(iend+1,j,k,nstp)
297 tl_u(iend+1,j,k,nout)=tl_u(iend+1,j,k,nout)* &
298 &
grid(ng)%umask(iend+1,j)
313 tl_u(iend+1,j,k,nout)=
boundary(ng)%tl_u_east(j,k)
318 tl_u(iend+1,j,k,nout)=tl_u(iend+1,j,k,nout)* &
319 &
grid(ng)%umask(iend+1,j)
333 tl_u(iend+1,j,k,nout)=tl_u(iend,j,k,nout)
338 tl_u(iend+1,j,k,nout)=tl_u(iend+1,j,k,nout)* &
339 &
grid(ng)%umask(iend+1,j)
353 tl_u(iend+1,j,k,nout)=0.0_r8
364 IF (
domain(ng)%Southern_Edge(tile))
THEN
369 IF (
iic(ng).ne.0)
THEN
375 tl_grad(i,jstr-1)=0.0_r8
379# if defined CELERITY_READ && defined FORWARD_READ
383 & (
clima(ng)%M3nudgcof(i-1,jstr-1,k)+ &
384 &
clima(ng)%M3nudgcof(i ,jstr-1,k))
385 obc_in =
obcfac(ng)*obc_out
390 IF (
boundary(ng)%u_south_Ce(i,k).lt.0.0_r8)
THEN
411 tl_u(i,jstr-1,k,nout)=(cff*tl_u(i,jstr-1,k,nstp)+ &
412 & ce *tl_u(i,jstr ,k,nout)- &
414 & tl_grad(i-1,jstr-1)- &
416 & tl_grad(i ,jstr-1))/ &
424 tl_u(i,jstr-1,k,nout)=tl_u(i,jstr-1,k,nout)- &
425 & tau*tl_u(i,jstr-1,k,nstp)
431 tl_u(i,jstr-1,k,nout)=tl_u(i,jstr-1,k,nout)* &
432 &
grid(ng)%umask(i,jstr-1)
447 tl_u(i,jstr-1,k,nout)=
boundary(ng)%tl_u_south(i,k)
452 tl_u(i,jstr-1,k,nout)=tl_u(i,jstr-1,k,nout)* &
453 &
grid(ng)%umask(i,jstr-1)
467 tl_u(i,jstr-1,k,nout)=tl_u(i,jstr,k,nout)
472 tl_u(i,jstr-1,k,nout)=tl_u(i,jstr-1,k,nout)* &
473 &
grid(ng)%umask(i,jstr-1)
495 tl_u(i,jstr-1,k,nout)=
gamma2(ng)*tl_u(i,jstr,k,nout)
500 tl_u(i,jstr-1,k,nout)=tl_u(i,jstr-1,k,nout)* &
501 &
grid(ng)%umask(i,jstr-1)
513 IF (
domain(ng)%Northern_Edge(tile))
THEN
518 IF (
iic(ng).ne.0)
THEN
524 tl_grad(i,jend+1)=0.0_r8
528# if defined CELERITY_READ && defined FORWARD_READ
532 & (
clima(ng)%M3nudgcof(i-1,jend+1,k)+ &
533 &
clima(ng)%M3nudgcof(i ,jend+1,k))
534 obc_in =
obcfac(ng)*obc_out
539 IF (
boundary(ng)%u_north_Ce(i,k).lt.0.0_r8)
THEN
560 tl_u(i,jend+1,k,nout)=(cff*tl_u(i,jend+1,k,nstp)+ &
561 & ce *tl_u(i,jend ,k,nout)- &
563 & tl_grad(i-1,jend+1)- &
565 & tl_grad(i ,jend+1))/ &
573 tl_u(i,jend+1,k,nout)=tl_u(i,jend+1,k,nout)- &
574 & tau*tl_u(i,jend+1,k,nstp)
580 tl_u(i,jend+1,k,nout)=tl_u(i,jend+1,k,nout)* &
581 &
grid(ng)%umask(i,jend+1)
596 tl_u(i,jend+1,k,nout)=
boundary(ng)%tl_u_north(i,k)
601 tl_u(i,jend+1,k,nout)=tl_u(i,jend+1,k,nout)* &
602 &
grid(ng)%umask(i,jend+1)
616 tl_u(i,jend+1,k,nout)=tl_u(i,jend,k,nout)
621 tl_u(i,jend+1,k,nout)=tl_u(i,jend+1,k,nout)* &
622 &
grid(ng)%umask(i,jend+1)
644 tl_u(i,jend+1,k,nout)=
gamma2(ng)*tl_u(i,jend,k,nout)
649 tl_u(i,jend+1,k,nout)=tl_u(i,jend+1,k,nout)* &
650 &
grid(ng)%umask(i,jend+1)
663 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
670 tl_u(istr,jstr-1,k,nout)=0.5_r8* &
671 & (tl_u(istr+1,jstr-1,k,nout)+ &
672 & tl_u(istr ,jstr ,k,nout))
676 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
683 tl_u(iend+1,jstr-1,k,nout)=0.5_r8* &
684 & (tl_u(iend ,jstr-1,k,nout)+ &
685 & tl_u(iend+1,jstr ,k,nout))
689 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
696 tl_u(istr,jend+1,k,nout)=0.5_r8* &
697 & (tl_u(istr ,jend ,k,nout)+ &
698 & tl_u(istr+1,jend+1,k,nout))
702 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
709 tl_u(iend+1,jend+1,k,nout)=0.5_r8* &
710 & (tl_u(iend+1,jend ,k,nout)+ &
711 & tl_u(iend ,jend+1,k,nout))