53 & LBi, UBi, LBj, UBj, UBk, UBt, &
54 & IminS, ImaxS, JminS, JmaxS, &
68 integer,
intent(in) :: ng, tile, itrc, ic
69 integer,
intent(in) :: lbi, ubi, lbj, ubj, ubk, ubt
70 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
71 integer,
intent(in) :: nstp, nout
74 real(r8),
intent(inout) :: ad_t(lbi:,lbj:,:,:,:)
76 real(r8),
intent(inout) :: ad_t(lbi:ubi,lbj:ubj,ubk,3,ubt)
83 real(r8) :: ce, cx, cff
84 real(r8) :: obc_in, obc_out, tau
87 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_grad
89# include "set_bounds.h"
95 ad_grad(lbi:ubi,lbj:ubj)=0.0_r8
102 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
112 adfac=0.5_r8*ad_t(iend+1,jend+1,k,nout,itrc)
113 ad_t(iend+1,jend ,k,nout,itrc)=ad_t(iend+1,jend ,k, &
116 ad_t(iend ,jend+1,k,nout,itrc)=ad_t(iend ,jend+1,k, &
119 ad_t(iend+1,jend+1,k,nout,itrc)=0.0_r8
123 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
133 adfac=0.5_r8*ad_t(istr-1,jend+1,k,nout,itrc)
134 ad_t(istr-1,jend ,k,nout,itrc)=ad_t(istr-1,jend ,k, &
137 ad_t(istr ,jend+1,k,nout,itrc)=ad_t(istr ,jend+1,k, &
140 ad_t(istr-1,jend+1,k,nout,itrc)=0.0_r8
144 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
154 adfac=0.5_r8*ad_t(iend+1,jstr-1,k,nout,itrc)
155 ad_t(iend ,jstr-1,k,nout,itrc)=ad_t(iend ,jstr-1,k, &
158 ad_t(iend+1,jstr ,k,nout,itrc)=ad_t(iend+1,jstr ,k, &
161 ad_t(iend+1,jstr-1,k,nout,itrc)=0.0_r8
165 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
175 adfac=0.5_r8*ad_t(istr-1,jstr-1,k,nout,itrc)
176 ad_t(istr ,jstr-1,k,nout,itrc)=ad_t(istr ,jstr-1,k, &
179 ad_t(istr-1,jstr ,k,nout,itrc)=ad_t(istr-1,jstr ,k, &
182 ad_t(istr-1,jstr-1,k,nout,itrc)=0.0_r8
192 IF (
domain(ng)%Northern_Edge(tile))
THEN
197 IF (
iic(ng).ne.0)
THEN
201# if defined CELERITY_READ && defined FORWARD_READ
204 obc_out=
clima(ng)%Tnudgcof(i,jend+1,k,ic)
205 obc_in =
obcfac(ng)*obc_out
210 IF (
boundary(ng)%t_north_Ce(i,k,itrc).lt. &
219 cx=
boundary(ng)%t_north_Cx(i,k,itrc)
223 ce=
boundary(ng)%t_north_Ce(i,k,itrc)
224 cff=
boundary(ng)%t_north_C2(i,k,itrc)
231 ad_t(i,jend+1,k,nout,itrc)=ad_t(i,jend+1,k,nout, &
233 &
grid(ng)%rmask(i,jend+1)
242 ad_t(i,jend+1,k,nstp,itrc)=ad_t(i,jend+1,k,nstp, &
245 & ad_t(i,jend+1,k,nout, &
260 adfac=ad_t(i,jend+1,k,nout,itrc)/(cff+ce)
261 ad_grad(i ,jend+1)=ad_grad(i ,jend+1)- &
262 & max(cx,0.0_r8)*adfac
263 ad_grad(i+1,jend+1)=ad_grad(i+1,jend+1)- &
264 & min(cx,0.0_r8)*adfac
265 ad_t(i,jend ,k,nout,itrc)=ad_t(i,jend ,k,nout, &
268 ad_t(i,jend+1,k,nstp,itrc)=ad_t(i,jend+1,k,nstp, &
271 ad_t(i,jend+1,k,nout,itrc)=0.0_r8
287 ad_t(i,jend+1,k,nout,itrc)=ad_t(i,jend+1,k,nout,itrc)* &
288 &
grid(ng)%rmask(i,jend+1)
290# ifdef ADJUST_BOUNDARY
295 boundary(ng)%ad_t_north(i,k,itrc)= &
296 &
boundary(ng)%ad_t_north(i,k,itrc)+ &
299 ad_t(i,jend+1,k,nout,itrc)=0.0_r8
303 ad_t(i,jend+1,k,nout,itrc)=0.0_r8
308 ad_t(i,jend+1,k,nout,itrc)=0.0_r8
324 ad_t(i,jend+1,k,nout,itrc)=ad_t(i,jend+1,k,nout,itrc)* &
325 &
grid(ng)%rmask(i,jend+1)
329 ad_t(i,jend ,k,nout,itrc)=ad_t(i,jend ,k,nout,itrc)+ &
330 & ad_t(i,jend+1,k,nout,itrc)
331 ad_t(i,jend+1,k,nout,itrc)=0.0_r8
346 ad_t(i,jend+1,k,nout,itrc)=ad_t(i,jend+1,k,nout,itrc)* &
347 &
grid(ng)%rmask(i,jend+1)
351 ad_t(i,jend ,k,nout,itrc)=ad_t(i,jend ,k,nout,itrc)+ &
352 & ad_t(i,jend+1,k,nout,itrc)
353 ad_t(i,jend+1,k,nout,itrc)=0.0_r8
364 IF (
domain(ng)%Southern_Edge(tile))
THEN
369 IF (
iic(ng).ne.0)
THEN
373# if defined CELERITY_READ && defined FORWARD_READ
376 obc_out=
clima(ng)%Tnudgcof(i,jstr-1,k,ic)
377 obc_in =
obcfac(ng)*obc_out
382 IF (
boundary(ng)%t_south_Ce(i,k,itrc).lt. &
391 cx=
boundary(ng)%t_south_Cx(i,k,itrc)
395 ce=
boundary(ng)%t_south_Ce(i,k,itrc)
396 cff=
boundary(ng)%t_south_C2(i,k,itrc)
403 ad_t(i,jstr-1,k,nout,itrc)=ad_t(i,jstr-1,k,nout, &
405 &
grid(ng)%rmask(i,jstr-1)
414 ad_t(i,jstr-1,k,nstp,itrc)=ad_t(i,jstr-1,k,nstp, &
417 & ad_t(i,jstr-1,k,nout, &
432 adfac=ad_t(i,jstr-1,k,nout,itrc)/(cff+ce)
433 ad_grad(i ,jstr-1)=ad_grad(i ,jstr-1)- &
434 & max(cx,0.0_r8)*adfac
435 ad_grad(i+1,jstr-1)=ad_grad(i+1,jstr-1)- &
436 & min(cx,0.0_r8)*adfac
437 ad_t(i,jstr-1,k,nstp,itrc)=ad_t(i,jstr-1,k,nstp, &
440 ad_t(i,jstr ,k,nout,itrc)=ad_t(i,jstr ,k,nout, &
443 ad_t(i,jstr-1,k,nout,itrc)=0.0_r8
459 ad_t(i,jstr-1,k,nout,itrc)=ad_t(i,jstr-1,k,nout,itrc)* &
460 &
grid(ng)%rmask(i,jstr-1)
462# ifdef ADJUST_BOUNDARY
467 boundary(ng)%ad_t_south(i,k,itrc)= &
468 &
boundary(ng)%ad_t_south(i,k,itrc)+ &
471 ad_t(i,jstr-1,k,nout,itrc)=0.0_r8
475 ad_t(i,jstr-1,k,nout,itrc)=0.0_r8
480 ad_t(i,jstr-1,k,nout,itrc)=0.0_r8
496 ad_t(i,jstr-1,k,nout,itrc)=ad_t(i,jstr-1,k,nout,itrc)* &
497 &
grid(ng)%rmask(i,jstr-1)
501 ad_t(i,jstr ,k,nout,itrc)=ad_t(i,jstr ,k,nout,itrc)+ &
502 & ad_t(i,jstr-1,k,nout,itrc)
503 ad_t(i,jstr-1,k,nout,itrc)=0.0_r8
518 ad_t(i,jstr-1,k,nout,itrc)=ad_t(i,jstr-1,k,nout,itrc)* &
519 &
grid(ng)%rmask(i,jstr-1)
523 ad_t(i,jstr ,k,nout,itrc)=ad_t(i,jstr ,k,nout,itrc)+ &
524 & ad_t(i,jstr-1,k,nout,itrc)
525 ad_t(i,jstr-1,k,nout,itrc)=0.0_r8
536 IF (
domain(ng)%Eastern_Edge(tile))
THEN
541 IF (
iic(ng).ne.0)
THEN
545# if defined CELERITY_READ && defined FORWARD_READ
548 obc_out=
clima(ng)%Tnudgcof(iend+1,j,k,ic)
549 obc_in =
obcfac(ng)*obc_out
554 IF (
boundary(ng)%t_east_Cx(j,k,itrc).lt. &
568 cff=
boundary(ng)%t_east_C2(j,k,itrc)
575 ad_t(iend+1,j,k,nout,itrc)=ad_t(iend+1,j,k,nout, &
577 &
grid(ng)%rmask(iend+1,j)
586 ad_t(iend+1,j,k,nstp,itrc)=ad_t(iend+1,j,k,nstp, &
589 & ad_t(iend+1,j,k,nout, &
604 adfac=ad_t(iend+1,j,k,nout,itrc)/(cff+cx)
605 ad_grad(iend+1,j )=ad_grad(iend+1,j )- &
606 & max(ce,0.0_r8)*adfac
607 ad_grad(iend+1,j+1)=ad_grad(iend+1,j+1)- &
608 & min(ce,0.0_r8)*adfac
609 ad_t(iend ,j,k,nout,itrc)=ad_t(iend ,j,k,nout, &
612 ad_t(iend+1,j,k,nstp,itrc)=ad_t(iend+1,j,k,nstp, &
615 ad_t(iend+1,j,k,nout,itrc)=0.0_r8
631 ad_t(iend+1,j,k,nout,itrc)=ad_t(iend+1,j,k,nout,itrc)* &
632 &
grid(ng)%rmask(iend+1,j)
634# ifdef ADJUST_BOUNDARY
640 &
boundary(ng)%ad_t_east(j,k,itrc)+ &
643 ad_t(iend+1,j,k,nout,itrc)=0.0_r8
647 ad_t(iend+1,j,k,nout,itrc)=0.0_r8
652 ad_t(iend+1,j,k,nout,itrc)=0.0_r8
668 ad_t(iend+1,j,k,nout,itrc)=ad_t(iend+1,j,k,nout,itrc)* &
669 &
grid(ng)%rmask(iend+1,j)
673 ad_t(iend ,j,k,nout,itrc)=ad_t(iend ,j,k,nout,itrc)+ &
674 & ad_t(iend+1,j,k,nout,itrc)
675 ad_t(iend+1,j,k,nout,itrc)=0.0_r8
690 ad_t(iend+1,j,k,nout,itrc)=ad_t(iend+1,j,k,nout,itrc)* &
691 &
grid(ng)%rmask(iend+1,j)
695 ad_t(iend ,j,k,nout,itrc)=ad_t(iend ,j,k,nout,itrc)+ &
696 & ad_t(iend+1,j,k,nout,itrc)
697 ad_t(iend+1,j,k,nout,itrc)=0.0_r8
708 IF (
domain(ng)%Western_Edge(tile))
THEN
713 IF (
iic(ng).ne.0)
THEN
717# if defined CELERITY_READ && defined FORWARD_READ
720 obc_out=
clima(ng)%Tnudgcof(istr-1,j,k,ic)
721 obc_in =
obcfac(ng)*obc_out
726 IF (
boundary(ng)%t_west_Cx(j,k,itrc).lt. &
740 cff=
boundary(ng)%t_west_C2(j,k,itrc)
747 ad_t(istr-1,j,k,nout,itrc)=ad_t(istr-1,j,k,nout, &
749 &
grid(ng)%rmask(istr-1,j)
758 ad_t(istr-1,j,k,nstp,itrc)=ad_t(istr-1,j,k,nstp, &
761 & ad_t(istr-1,j,k,nout, &
776 adfac=ad_t(istr-1,j,k,nout,itrc)/(cff+cx)
777 ad_grad(istr-1,j )=ad_grad(istr-1,j )- &
778 & max(ce,0.0_r8)*adfac
779 ad_grad(istr-1,j+1)=ad_grad(istr-1,j+1)- &
780 & min(ce,0.0_r8)*adfac
781 ad_t(istr-1,j,k,nstp,itrc)=ad_t(istr-1,j,k,nstp, &
784 ad_t(istr ,j,k,nout,itrc)=ad_t(istr ,j,k,nout, &
787 ad_t(istr-1,j,k,nout,itrc)=0.0_r8
803 ad_t(istr-1,j,k,nout,itrc)=ad_t(istr-1,j,k,nout,itrc)* &
804 &
grid(ng)%rmask(istr-1,j)
806# ifdef ADJUST_BOUNDARY
812 &
boundary(ng)%ad_t_west(j,k,itrc)+ &
815 ad_t(istr-1,j,k,nout,itrc)=0.0_r8
819 ad_t(istr-1,j,k,nout,itrc)=0.0_r8
824 ad_t(istr-1,j,k,nout,itrc)=0.0_r8
840 ad_t(istr-1,j,k,nout,itrc)=ad_t(istr-1,j,k,nout,itrc)* &
841 &
grid(ng)%rmask(istr-1,j)
845 ad_t(istr ,j,k,nout,itrc)=ad_t(istr ,j,k,nout,itrc)+ &
846 & ad_t(istr-1,j,k,nout,itrc)
847 ad_t(istr-1,j,k,nout,itrc)=0.0_r8
862 ad_t(istr-1,j,k,nout,itrc)=ad_t(istr-1,j,k,nout,itrc)* &
863 &
grid(ng)%rmask(istr-1,j)
867 ad_t(istr ,j,k,nout,itrc)=ad_t(istr ,j,k,nout,itrc)+ &
868 & ad_t(istr-1,j,k,nout,itrc)
869 ad_t(istr-1,j,k,nout,itrc)=0.0_r8