55 & LBi, UBi, LBj, UBj, UBk, &
56 & IminS, ImaxS, JminS, JmaxS, &
70 integer,
intent(in) :: ng, tile
71 integer,
intent(in) :: lbi, ubi, lbj, ubj, ubk
72 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
73 integer,
intent(in) :: nstp, nout
76 real(r8),
intent(inout) :: tl_v(lbi:,lbj:,:,:)
78 real(r8),
intent(inout) :: tl_v(lbi:ubi,lbj:ubj,ubk,2)
86 real(r8) :: ce, cx, cff
87 real(r8) :: obc_in, obc_out, tau
89 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_grad
91# include "set_bounds.h"
97 IF (
domain(ng)%Southern_Edge(tile))
THEN
102 IF (
iic(ng).ne.0)
THEN
108 tl_grad(i,jstr)=0.0_r8
112# if defined CELERITY_READ && defined FORWARD_READ
116 & (
clima(ng)%M3nudgcof(i,jstr-1,k)+ &
117 &
clima(ng)%M3nudgcof(i,jstr ,k))
118 obc_in =
obcfac(ng)*obc_out
123 IF (
boundary(ng)%v_south_Ce(i,k).lt.0.0_r8)
THEN
144 tl_v(i,jstr,k,nout)=(cff*tl_v(i,jstr ,k,nstp)+ &
145 & ce *tl_v(i,jstr+1,k,nout)- &
147 & tl_grad(i ,jstr)- &
149 & tl_grad(i+1,jstr))/ &
157 tl_v(i,jstr,k,nout)=tl_v(i,jstr,k,nout)- &
158 & tau*tl_v(i,jstr,k,nstp)
164 tl_v(i,jstr,k,nout)=tl_v(i,jstr,k,nout)* &
165 &
grid(ng)%vmask(i,jstr)
180 tl_v(i,jstr,k,nout)=
boundary(ng)%tl_v_south(i,k)
185 tl_v(i,jstr,k,nout)=tl_v(i,jstr,k,nout)* &
186 &
grid(ng)%vmask(i,jstr)
200 tl_v(i,jstr,k,nout)=tl_v(i,jstr+1,k,nout)
205 tl_v(i,jstr,k,nout)=tl_v(i,jstr,k,nout)* &
206 &
grid(ng)%vmask(i,jstr)
220 tl_v(i,jstr,k,nout)=0.0_r8
231 IF (
domain(ng)%Northern_Edge(tile))
THEN
236 IF (
iic(ng).ne.0)
THEN
242 tl_grad(i,jend+1)=0.0_r8
246# if defined CELERITY_READ && defined FORWARD_READ
250 & (
clima(ng)%M3nudgcof(i,jend ,k)+ &
251 &
clima(ng)%M3nudgcof(i,jend+1,k))
252 obc_in =
obcfac(ng)*obc_out
257 IF (
boundary(ng)%v_south_Ce(i,k).lt.0.0_r8)
THEN
278 tl_v(i,jend+1,k,nout)=(cff*tl_v(i,jend+1,k,nstp)+ &
279 & ce *tl_v(i,jend ,k,nout)- &
281 & tl_grad(i ,jend+1)- &
283 & tl_grad(i+1,jend+1))/ &
291 tl_v(i,jend+1,k,nout)=tl_v(i,jend+1,k,nout)- &
292 & tau*tl_v(i,jend+1,k,nstp)
298 tl_v(i,jend+1,k,nout)=tl_v(i,jend+1,k,nout)* &
299 &
grid(ng)%vmask(i,jend+1)
314 tl_v(i,jend+1,k,nout)=
boundary(ng)%tl_v_north(i,k)
319 tl_v(i,jend+1,k,nout)=tl_v(i,jend+1,k,nout)* &
320 &
grid(ng)%vmask(i,jend+1)
334 tl_v(i,jend+1,k,nout)=tl_v(i,jend,k,nout)
339 tl_v(i,jend+1,k,nout)=tl_v(i,jend+1,k,nout)* &
340 &
grid(ng)%vmask(i,jend+1)
354 tl_v(i,jend+1,k,nout)=0.0_r8
365 IF (
domain(ng)%Western_Edge(tile))
THEN
370 IF (
iic(ng).ne.0)
THEN
376 tl_grad(istr-1,j)=0.0_r8
380# if defined CELERITY_READ && defined FORWARD_READ
384 & (
clima(ng)%M3nudgcof(istr-1,j-1,k)+ &
385 &
clima(ng)%M3nudgcof(istr-1,j ,k))
386 obc_in =
obcfac(ng)*obc_out
391 IF (
boundary(ng)%v_west_Cx(j,k).lt.0.0_r8)
THEN
412 tl_v(istr-1,j,k,nout)=(cff*tl_v(istr-1,j,k,nstp)+ &
413 & cx *tl_v(istr ,j,k,nout)- &
415 & tl_grad(istr-1,j-1)- &
417 & tl_grad(istr-1,j ))/ &
425 tl_v(istr-1,j,k,nout)=tl_v(istr-1,j,k,nout)- &
426 & tau*tl_v(istr-1,j,k,nstp)
432 tl_v(istr-1,j,k,nout)=tl_v(istr-1,j,k,nout)* &
433 &
grid(ng)%vmask(istr-1,j)
448 tl_v(istr-1,j,k,nout)=
boundary(ng)%tl_v_west(j,k)
453 tl_v(istr-1,j,k,nout)=tl_v(istr-1,j,k,nout)* &
454 &
grid(ng)%vmask(istr-1,j)
468 tl_v(istr-1,j,k,nout)=tl_v(istr,j,k,nout)
473 tl_v(istr-1,j,k,nout)=tl_v(istr-1,j,k,nout)* &
474 &
grid(ng)%vmask(istr-1,j)
496 tl_v(istr-1,j,k,nout)=
gamma2(ng)*tl_v(istr,j,k,nout)
501 tl_v(istr-1,j,k,nout)=tl_v(istr-1,j,k,nout)* &
502 &
grid(ng)%vmask(istr-1,j)
514 IF (
domain(ng)%Eastern_Edge(tile))
THEN
519 IF (
iic(ng).ne.0)
THEN
525 tl_grad(iend+1,j)=0.0_r8
529# if defined CELERITY_READ && defined FORWARD_READ
533 & (
clima(ng)%M3nudgcof(iend+1,j-1,k)+ &
534 &
clima(ng)%M3nudgcof(iend+1,j ,k))
535 obc_in =
obcfac(ng)*obc_out
540 IF (
boundary(ng)%v_east_Cx(j,k).lt.0.0_r8)
THEN
561 tl_v(iend+1,j,k,nout)=(cff*tl_v(iend+1,j,k,nstp)+ &
562 & cx *tl_v(iend ,j,k,nout)- &
564 & tl_grad(iend+1,j-1)- &
566 & tl_grad(iend+1,j ))/ &
574 tl_v(iend+1,j,k,nout)=tl_v(iend+1,j,k,nout)- &
575 & tau*tl_v(iend+1,j,k,nstp)
581 tl_v(iend+1,j,k,nout)=tl_v(iend+1,j,k,nout)* &
582 &
grid(ng)%vmask(iend+1,j)
597 tl_v(iend+1,j,k,nout)=
boundary(ng)%tl_v_east(j,k)
602 tl_v(iend+1,j,k,nout)=tl_v(iend+1,j,k,nout)* &
603 &
grid(ng)%vmask(iend+1,j)
617 tl_v(iend+1,j,k,nout)=tl_v(iend,j,k,nout)
622 tl_v(iend+1,j,k,nout)=tl_v(iend+1,j,k,nout)* &
623 &
grid(ng)%vmask(iend+1,j)
645 tl_v(iend+1,j,k,nout)=
gamma2(ng)*tl_v(iend,j,k,nout)
650 tl_v(iend+1,j,k,nout)=tl_v(iend+1,j,k,nout)* &
651 &
grid(ng)%vmask(iend+1,j)
664 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
671 tl_v(istr-1,jstr,k,nout)=0.5_r8* &
672 & (tl_v(istr ,jstr ,k,nout)+ &
673 & tl_v(istr-1,jstr+1,k,nout))
677 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
684 tl_v(iend+1,jstr,k,nout)=0.5_r8* &
685 & (tl_v(iend ,jstr ,k,nout)+ &
686 & tl_v(iend+1,jstr+1,k,nout))
690 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
697 tl_v(istr-1,jend+1,k,nout)=0.5_r8* &
698 & (tl_v(istr-1,jend ,k,nout)+ &
699 & tl_v(istr ,jend+1,k,nout))
703 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
710 tl_v(iend+1,jend+1,k,nout)=0.5_r8* &
711 & (tl_v(iend+1,jend ,k,nout)+ &
712 & tl_v(iend ,jend+1,k,nout))