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_v(lbi:,lbj:,:,:)
76 real(r8),
intent(inout) :: tl_v(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)%Southern_Edge(tile))
THEN
100 IF (
iic(ng).ne.0)
THEN
106 tl_grad(i,jstr)=0.0_r8
110# if defined CELERITY_READ && defined FORWARD_READ
114 & (
clima(ng)%M3nudgcof(i,jstr-1,k)+ &
115 &
clima(ng)%M3nudgcof(i,jstr ,k))
116 obc_in =
obcfac(ng)*obc_out
121 IF (
boundary(ng)%v_south_Ce(i,k).lt.0.0_r8)
THEN
142 tl_v(i,jstr,k,nout)=(cff*tl_v(i,jstr ,k,nstp)+ &
143 & ce *tl_v(i,jstr+1,k,nout)- &
145 & tl_grad(i ,jstr)- &
147 & tl_grad(i+1,jstr))/ &
155 tl_v(i,jstr,k,nout)=tl_v(i,jstr,k,nout)- &
156 & tau*tl_v(i,jstr,k,nstp)
162 tl_v(i,jstr,k,nout)=tl_v(i,jstr,k,nout)* &
163 &
grid(ng)%vmask(i,jstr)
178# ifdef ADJUST_BOUNDARY
180 tl_v(i,jstr,k,nout)=
boundary(ng)%tl_v_south(i,k)
182 tl_v(i,jstr,k,nout)=0.0_r8
185 tl_v(i,jstr,k,nout)=0.0_r8
191 tl_v(i,jstr,k,nout)=tl_v(i,jstr,k,nout)* &
192 &
grid(ng)%vmask(i,jstr)
206 tl_v(i,jstr,k,nout)=tl_v(i,jstr+1,k,nout)
211 tl_v(i,jstr,k,nout)=tl_v(i,jstr,k,nout)* &
212 &
grid(ng)%vmask(i,jstr)
226 tl_v(i,jstr,k,nout)=0.0_r8
237 IF (
domain(ng)%Northern_Edge(tile))
THEN
242 IF (
iic(ng).ne.0)
THEN
248 tl_grad(i,jend+1)=0.0_r8
252# if defined CELERITY_READ && defined FORWARD_READ
256 & (
clima(ng)%M3nudgcof(i,jend ,k)+ &
257 &
clima(ng)%M3nudgcof(i,jend+1,k))
258 obc_in =
obcfac(ng)*obc_out
263 IF (
boundary(ng)%v_south_Ce(i,k).lt.0.0_r8)
THEN
284 tl_v(i,jend+1,k,nout)=(cff*tl_v(i,jend+1,k,nstp)+ &
285 & ce *tl_v(i,jend ,k,nout)- &
287 & tl_grad(i ,jend+1)- &
289 & tl_grad(i+1,jend+1))/ &
297 tl_v(i,jend+1,k,nout)=tl_v(i,jend+1,k,nout)- &
298 & tau*tl_v(i,jend+1,k,nstp)
304 tl_v(i,jend+1,k,nout)=tl_v(i,jend+1,k,nout)* &
305 &
grid(ng)%vmask(i,jend+1)
320# ifdef ADJUST_BOUNDARY
322 tl_v(i,jend+1,k,nout)=
boundary(ng)%tl_v_north(i,k)
324 tl_v(i,jend+1,k,nout)=0.0_r8
327 tl_v(i,jend+1,k,nout)=0.0_r8
333 tl_v(i,jend+1,k,nout)=tl_v(i,jend+1,k,nout)* &
334 &
grid(ng)%vmask(i,jend+1)
348 tl_v(i,jend+1,k,nout)=tl_v(i,jend,k,nout)
353 tl_v(i,jend+1,k,nout)=tl_v(i,jend+1,k,nout)* &
354 &
grid(ng)%vmask(i,jend+1)
368 tl_v(i,jend+1,k,nout)=0.0_r8
379 IF (
domain(ng)%Western_Edge(tile))
THEN
384 IF (
iic(ng).ne.0)
THEN
390 tl_grad(istr-1,j)=0.0_r8
394# if defined CELERITY_READ && defined FORWARD_READ
398 & (
clima(ng)%M3nudgcof(istr-1,j-1,k)+ &
399 &
clima(ng)%M3nudgcof(istr-1,j ,k))
400 obc_in =
obcfac(ng)*obc_out
405 IF (
boundary(ng)%v_west_Cx(j,k).lt.0.0_r8)
THEN
426 tl_v(istr-1,j,k,nout)=(cff*tl_v(istr-1,j,k,nstp)+ &
427 & cx *tl_v(istr ,j,k,nout)- &
429 & tl_grad(istr-1,j-1)- &
431 & tl_grad(istr-1,j ))/ &
439 tl_v(istr-1,j,k,nout)=tl_v(istr-1,j,k,nout)- &
440 & tau*tl_v(istr-1,j,k,nstp)
446 tl_v(istr-1,j,k,nout)=tl_v(istr-1,j,k,nout)* &
447 &
grid(ng)%vmask(istr-1,j)
462# ifdef ADJUST_BOUNDARY
464 tl_v(istr-1,j,k,nout)=
boundary(ng)%tl_v_west(j,k)
466 tl_v(istr-1,j,k,nout)=0.0_r8
469 tl_v(istr-1,j,k,nout)=0.0_r8
475 tl_v(istr-1,j,k,nout)=tl_v(istr-1,j,k,nout)* &
476 &
grid(ng)%vmask(istr-1,j)
490 tl_v(istr-1,j,k,nout)=tl_v(istr,j,k,nout)
495 tl_v(istr-1,j,k,nout)=tl_v(istr-1,j,k,nout)* &
496 &
grid(ng)%vmask(istr-1,j)
518 tl_v(istr-1,j,k,nout)=
gamma2(ng)*tl_v(istr,j,k,nout)
523 tl_v(istr-1,j,k,nout)=tl_v(istr-1,j,k,nout)* &
524 &
grid(ng)%vmask(istr-1,j)
536 IF (
domain(ng)%Eastern_Edge(tile))
THEN
541 IF (
iic(ng).ne.0)
THEN
547 tl_grad(iend+1,j)=0.0_r8
551# if defined CELERITY_READ && defined FORWARD_READ
555 & (
clima(ng)%M3nudgcof(iend+1,j-1,k)+ &
556 &
clima(ng)%M3nudgcof(iend+1,j ,k))
557 obc_in =
obcfac(ng)*obc_out
562 IF (
boundary(ng)%v_east_Cx(j,k).lt.0.0_r8)
THEN
583 tl_v(iend+1,j,k,nout)=(cff*tl_v(iend+1,j,k,nstp)+ &
584 & cx *tl_v(iend ,j,k,nout)- &
586 & tl_grad(iend+1,j-1)- &
588 & tl_grad(iend+1,j ))/ &
596 tl_v(iend+1,j,k,nout)=tl_v(iend+1,j,k,nout)- &
597 & tau*tl_v(iend+1,j,k,nstp)
603 tl_v(iend+1,j,k,nout)=tl_v(iend+1,j,k,nout)* &
604 &
grid(ng)%vmask(iend+1,j)
619# ifdef ADJUST_BOUNDARY
621 tl_v(iend+1,j,k,nout)=
boundary(ng)%tl_v_east(j,k)
623 tl_v(iend+1,j,k,nout)=0.0_r8
626 tl_v(iend+1,j,k,nout)=0.0_r8
632 tl_v(iend+1,j,k,nout)=tl_v(iend+1,j,k,nout)* &
633 &
grid(ng)%vmask(iend+1,j)
647 tl_v(iend+1,j,k,nout)=tl_v(iend,j,k,nout)
652 tl_v(iend+1,j,k,nout)=tl_v(iend+1,j,k,nout)* &
653 &
grid(ng)%vmask(iend+1,j)
675 tl_v(iend+1,j,k,nout)=
gamma2(ng)*tl_v(iend,j,k,nout)
680 tl_v(iend+1,j,k,nout)=tl_v(iend+1,j,k,nout)* &
681 &
grid(ng)%vmask(iend+1,j)
694 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
701 tl_v(istr-1,jstr,k,nout)=0.5_r8* &
702 & (tl_v(istr ,jstr ,k,nout)+ &
703 & tl_v(istr-1,jstr+1,k,nout))
707 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
714 tl_v(iend+1,jstr,k,nout)=0.5_r8* &
715 & (tl_v(iend ,jstr ,k,nout)+ &
716 & tl_v(iend+1,jstr+1,k,nout))
720 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
727 tl_v(istr-1,jend+1,k,nout)=0.5_r8* &
728 & (tl_v(istr-1,jend ,k,nout)+ &
729 & tl_v(istr ,jend+1,k,nout))
733 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
740 tl_v(iend+1,jend+1,k,nout)=0.5_r8* &
741 & (tl_v(iend+1,jend ,k,nout)+ &
742 & tl_v(iend ,jend+1,k,nout))