101 & LBi, UBi, LBj, UBj, &
102 & IminS, ImaxS, JminS, JmaxS, &
103 & nrhs, nstp, nnew, &
107#ifdef WET_DRY_NOT_YET
108 & umask_wet, vmask_wet, &
110 & om_v, on_u, pm, pn, &
114# ifdef TS_U3ADV_SPLIT
115 & diff3d_u, diff3d_v, &
137 integer,
intent(in) :: ng, tile
138 integer,
intent(in) :: LBi, UBi, LBj, UBj
139 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
140 integer,
intent(in) :: nrhs, nstp, nnew
144 real(r8),
intent(in) :: umask(LBi:,LBj:)
145 real(r8),
intent(in) :: vmask(LBi:,LBj:)
147# ifdef WET_DRY_NOT_YET
148 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
149 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
152# ifdef TS_U3ADV_SPLIT
153 real(r8),
intent(in) :: diff3d_u(LBi:,LBj:,:)
154 real(r8),
intent(in) :: diff3d_v(LBi:,LBj:,:)
156 real(r8),
intent(in) :: diff3d_r(LBi:,LBj:,:)
159 real(r8),
intent(in) :: diff4(LBi:,LBj:,:)
161 real(r8),
intent(in) :: om_v(LBi:,LBj:)
162 real(r8),
intent(in) :: on_u(LBi:,LBj:)
163 real(r8),
intent(in) :: pm(LBi:,LBj:)
164 real(r8),
intent(in) :: pn(LBi:,LBj:)
165 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
166 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
167 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
169 real(r8),
intent(in) :: tclm(LBi:,LBj:,:,:)
171# ifdef DIAGNOSTICS_TS
172 real(r8),
intent(inout) :: DiaTwrk(LBi:,LBj:,:,:,:)
174 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
175 real(r8),
intent(inout) :: ad_z_r(LBi:,LBj:,:)
176 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
179 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
180 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
182# ifdef WET_DRY_NOT_YET
183 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
184 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
187# ifdef TS_U3ADV_SPLIT
188 real(r8),
intent(in) :: diff3d_u(LBi:UBi,LBj:UBj,N(ng))
189 real(r8),
intent(in) :: diff3d_v(LBi:UBi,LBj:UBj,N(ng))
191 real(r8),
intent(in) :: diff3d_r(LBi:UBi,LBj:UBj,N(ng))
194 real(r8),
intent(in) :: diff4(LBi:UBi,LBj:UBj,NT(ng))
196 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
197 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
198 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
199 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
200 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
201 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
202 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
204 real(r8),
intent(in) :: tclm(LBi:UBi,LBj:UBj,N(ng),NT(ng))
206# ifdef DIAGNOSTICS_TS
210 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
211 real(r8),
intent(inout) :: ad_z_r(LBi:UBi,LBj:UBj,N(ng))
212 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
217 integer :: Imin, Imax, Jmin, Jmax
218 integer :: i, itrc, j, k, kk, kt, k1, k1b, k2, k2b
220 real(r8) :: cff, cff1, cff2, cff3, cff4, dife, difx
221 real(r8) :: ad_cff, ad_cff1, ad_cff2, ad_cff3, ad_cff4
222 real(r8) :: adfac, adfac1, adfac2, adfac3, adfac4
224 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: LapT
226 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: ad_LapT
228 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FE
229 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FX
231 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_FE
232 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_FX
234 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: FS
235 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTde
236 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTdx
237 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTdz
238 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZde
239 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZdx
241 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_FS
242 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dTde
243 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dTdx
244 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dTdz
245 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dZde
246 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dZdx
248#include "set_bounds.h"
260 ad_fe(imins:imaxs,jmins:jmaxs)=0.0_r8
261 ad_fx(imins:imaxs,jmins:jmaxs)=0.0_r8
263 ad_fs(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
265 ad_dtdz(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
266 ad_dtdx(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
267 ad_dtde(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
268 ad_dzdx(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
269 ad_dzde(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
271 ad_lapt(imins:imaxs,jmins:jmaxs,1:n(ng))=0.0_r8
286 imax=min(iend+1,
lm(ng))
293 jmax=min(jend+1,
mm(ng))
306 t_loop :
DO itrc=1,nt(ng)
308 k_loop1 :
DO k=0,n(ng)
314 cff=0.5_r8*(pm(i,j)+pm(i-1,j))
318#ifdef WET_DRY_NOT_YET
319 cff=cff*umask_wet(i,j)
321 dzdx(i,j,k2)=cff*(z_r(i ,j,k+1)- &
323#if defined TS_MIX_STABILITY
324 dtdx(i,j,k2)=cff*(0.75_r8*(t(i ,j,k+1,nrhs,itrc)- &
325 & t(i-1,j,k+1,nrhs,itrc))+ &
326 & 0.25_r8*(t(i ,j,k+1,nstp,itrc)- &
327 & t(i-1,j,k+1,nstp,itrc)))
328#elif defined TS_MIX_CLIMA
330 dtdx(i,j,k2)=cff*((t(i ,j,k+1,nrhs,itrc)- &
331 & tclm(i ,j,k+1,itrc))- &
332 & (t(i-1,j,k+1,nrhs,itrc)- &
333 & tclm(i-1,j,k+1,itrc)))
335 dtdx(i,j,k2)=cff*(t(i ,j,k+1,nrhs,itrc)- &
336 & t(i-1,j,k+1,nrhs,itrc))
339 dtdx(i,j,k2)=cff*(t(i ,j,k+1,nrhs,itrc)- &
340 & t(i-1,j,k+1,nrhs,itrc))
346 cff=0.5_r8*(pn(i,j)+pn(i,j-1))
350#ifdef WET_DRY_NOT_YET
351 cff=cff*vmask_wet(i,j)
353 dzde(i,j,k2)=cff*(z_r(i,j ,k+1)- &
355#if defined TS_MIX_STABILITY
356 dtde(i,j,k2)=cff*(0.75_r8*(t(i,j ,k+1,nrhs,itrc)- &
357 & t(i,j-1,k+1,nrhs,itrc))+ &
358 & 0.25_r8*(t(i,j ,k+1,nstp,itrc)- &
359 & t(i,j-1,k+1,nstp,itrc)))
360#elif defined TS_MIX_CLIMA
362 dtde(i,j,k2)=cff*((t(i,j ,k+1,nrhs,itrc)- &
363 & tclm(i,j ,k+1,itrc))- &
364 & (t(i,j-1,k+1,nrhs,itrc)- &
365 & tclm(i,j-1,k+1,itrc)))
367 dtde(i,j,k2)=cff*(t(i,j ,k+1,nrhs,itrc)- &
368 & t(i,j-1,k+1,nrhs,itrc))
371 dtde(i,j,k2)=cff*(t(i,j ,k+1,nrhs,itrc)- &
372 & t(i,j-1,k+1,nrhs,itrc))
377 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
387 cff=1.0_r8/(z_r(i,j,k+1)-z_r(i,j,k))
388#if defined TS_MIX_STABILITY
389 dtdz(i,j,k2)=cff*(0.75_r8*(t(i,j,k+1,nrhs,itrc)- &
390 & t(i,j,k ,nrhs,itrc))+ &
391 & 0.25_r8*(t(i,j,k+1,nstp,itrc)- &
392 & t(i,j,k ,nstp,itrc)))
393#elif defined TS_MIX_CLIMA
395 dtdz(i,j,k2)=cff*((t(i,j,k+1,nrhs,itrc)- &
396 & tclm(i,j,k+1,itrc))- &
397 & (t(i,j,k ,nrhs,itrc)- &
398 & tclm(i,j,k ,itrc)))
400 dtdz(i,j,k2)=cff*(t(i,j,k+1,nrhs,itrc)- &
401 & t(i,j,k ,nrhs,itrc))
404 dtdz(i,j,k2)=cff*(t(i,j,k+1,nrhs,itrc)- &
405 & t(i,j,k ,nrhs,itrc))
414# ifdef TS_U3ADV_SPLIT
415 cff=0.5_r8*diff3d_u(i,j,k)*on_u(i,j)
417 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
421 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
425 & (hz(i,j,k)+hz(i-1,j,k))* &
427 & 0.5_r8*(min(dzdx(i,j,k1),0.0_r8)* &
430 & max(dzdx(i,j,k1),0.0_r8)* &
438# ifdef TS_U3ADV_SPLIT
439 cff=0.5_r8*diff3d_v(i,j,k)*om_v(i,j)
441 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
445 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
449 & (hz(i,j,k)+hz(i,j-1,k))* &
451 & 0.5_r8*(min(dzde(i,j,k1),0.0_r8)* &
454 & max(dzde(i,j,k1),0.0_r8)* &
463# ifdef TS_U3ADV_SPLIT
464 difx=0.125_r8*(diff3d_u(i,j,k )+diff3d_u(i+1,j,k )+ &
465 & diff3d_u(i,j,k+1)+diff3d_u(i+1,j,k+1))
466 dife=0.125_r8*(diff3d_v(i,j,k )+diff3d_v(i,j+1,k )+ &
467 & diff3d_v(i,j,k+1)+diff3d_v(i,j+1,k+1))
469 difx=0.5_r8*diff3d_r(i,j,k)
473 difx=0.5_r8*diff4(i,j,itrc)
476 cff1=min(dzdx(i ,j,k1),0.0_r8)
477 cff2=min(dzdx(i+1,j,k2),0.0_r8)
478 cff3=max(dzdx(i ,j,k2),0.0_r8)
479 cff4=max(dzdx(i+1,j,k1),0.0_r8)
481 & (cff1*(cff1*dtdz(i,j,k2)- &
483 & cff2*(cff2*dtdz(i,j,k2)- &
485 & cff3*(cff3*dtdz(i,j,k2)- &
487 & cff4*(cff4*dtdz(i,j,k2)- &
490 cff1=min(dzde(i,j ,k1),0.0_r8)
491 cff2=min(dzde(i,j+1,k2),0.0_r8)
492 cff3=max(dzde(i,j ,k2),0.0_r8)
493 cff4=max(dzde(i,j+1,k1),0.0_r8)
494 fs(i,j,k2)=fs(i,j,k2)+ &
496 & (cff1*(cff1*dtdz(i,j,k2)- &
498 & cff2*(cff2*dtdz(i,j,k2)- &
500 & cff3*(cff3*dtdz(i,j,k2)- &
502 & cff4*(cff4*dtdz(i,j,k2)- &
515 cff1=1.0_r8/hz(i,j,k)
516 lapt(i,j,k)=cff1*(cff* &
517 & (fx(i+1,j)-fx(i,j)+ &
518 & fe(i,j+1)-fe(i,j))+ &
519 & (fs(i,j,k2)-fs(i,j,k1)))
529 IF (
domain(ng)%Western_Edge(tile))
THEN
533 lapt(istr-1,j,k)=0.0_r8
539 lapt(istr-1,j,k)=lapt(istr,j,k)
547 IF (
domain(ng)%Eastern_Edge(tile))
THEN
551 lapt(iend+1,j,k)=0.0_r8
557 lapt(iend+1,j,k)=lapt(iend,j,k)
565 IF (
domain(ng)%Southern_Edge(tile))
THEN
569 lapt(i,jstr-1,k)=0.0_r8
575 lapt(i,jstr-1,k)=lapt(i,jstr,k)
583 IF (
domain(ng)%Northern_Edge(tile))
THEN
587 lapt(i,jend+1,k)=0.0_r8
593 lapt(i,jend+1,k)=lapt(i,jend,k)
602 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
604 lapt(istr-1,jstr-1,k)=0.5_r8* &
605 & (lapt(istr ,jstr-1,k)+ &
606 & lapt(istr-1,jstr ,k))
613 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
615 lapt(iend+1,jstr-1,k)=0.5_r8* &
616 & (lapt(iend ,jstr-1,k)+ &
617 & lapt(iend+1,jstr ,k))
624 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
626 lapt(istr-1,jend+1,k)=0.5_r8* &
627 & (lapt(istr ,jend+1,k)+ &
628 & lapt(istr-1,jend ,k))
635 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
637 lapt(iend+1,jend+1,k)=0.5_r8* &
638 & (lapt(iend ,jend+1,k)+ &
639 & lapt(iend+1,jend ,k))
665 k_loop2:
DO k=n(ng),0,-1
674 IF (kk.lt.n(ng))
THEN
677 cff=0.5_r8*(pm(i,j)+pm(i-1,j))
681#ifdef WET_DRY_NOT_YET
682 cff=cff*umask_wet(i,j)
684 dzdx(i,j,k2b)=cff*(z_r(i ,j,kk+1)- &
686 dtdx(i,j,k2b)=cff*(lapt(i ,j,kk+1)- &
700 cff=0.5_r8*(pn(i,j)+pn(i,j-1))
704#ifdef WET_DRY_NOT_YET
705 cff=cff*vmask_wet(i,j)
707 dzde(i,j,k2b)=cff*(z_r(i,j ,kk+1)- &
709 dtde(i,j,k2b)=cff*(lapt(i,j ,kk+1)- &
722 IF ((kk.eq.0).or.(kk.eq.n(ng)))
THEN
740 cff=1.0_r8/(z_r(i,j,kk+1)-z_r(i,j,kk))
741 dtdz(i,j,k2b)=cff*(lapt(i,j,kk+1)- &
759 ad_cff=ad_cff-ad_t(i,j,k,nnew,itrc)
766 adfac1=adfac*pm(i,j)*pn(i,j)
767 ad_fs(i,j,k1)=ad_fs(i,j,k1)-adfac
768 ad_fs(i,j,k2)=ad_fs(i,j,k2)+adfac
769 ad_fx(i ,j)=ad_fx(i ,j)-adfac1
770 ad_fx(i+1,j)=ad_fx(i+1,j)+adfac1
771 ad_fe(i,j )=ad_fe(i,j )-adfac1
772 ad_fe(i,j+1)=ad_fe(i,j+1)+adfac1
780# ifdef TS_U3ADV_SPLIT
781 difx=0.125_r8*(diff3d_v(i,j,k )+diff3d_v(i,j+1,k )+ &
782 & diff3d_v(i,j,k+1)+diff3d_v(i,j+1,k+1))
783 dife=0.125_r8*(diff3d_u(i,j,k )+diff3d_u(i+1,j,k )+ &
784 & diff3d_u(i,j,k+1)+diff3d_u(i+1,j,k+1))
786 difx=0.5_r8*diff3d_r(i,j,k)
790 difx=0.5_r8*diff4(i,j,itrc)
793 cff1=min(dzde(i,j ,k1),0.0_r8)
794 cff2=min(dzde(i,j+1,k2),0.0_r8)
795 cff3=max(dzde(i,j ,k2),0.0_r8)
796 cff4=max(dzde(i,j+1,k1),0.0_r8)
820 adfac=dife*ad_fs(i,j,k2)
822 & (2.0_r8*cff1*dtdz(i,j,k2)-dtde(i,j ,k1))* &
825 & (2.0_r8*cff2*dtdz(i,j,k2)-dtde(i,j+1,k2))* &
828 & (2.0_r8*cff3*dtdz(i,j,k2)-dtde(i,j ,k2))* &
831 & (2.0_r8*cff4*dtdz(i,j,k2)-dtde(i,j+1,k1))* &
833 ad_dtdz(i,j,k2)=ad_dtdz(i,j,k2)+ &
838 ad_dtde(i,j ,k1)=ad_dtde(i,j ,k1)-cff1*adfac
839 ad_dtde(i,j+1,k2)=ad_dtde(i,j+1,k2)-cff2*adfac
840 ad_dtde(i,j ,k2)=ad_dtde(i,j ,k2)-cff3*adfac
841 ad_dtde(i,j+1,k1)=ad_dtde(i,j+1,k1)-cff4*adfac
845 ad_dzde(i,j+1,k1)=ad_dzde(i,j+1,k1)+ &
846 & (0.5_r8+sign(0.5_r8, &
847 & dzde(i,j+1,k1)))* &
853 ad_dzde(i,j ,k2)=ad_dzde(i,j ,k2)+ &
854 & (0.5_r8+sign(0.5_r8, &
861 ad_dzde(i,j+1,k2)=ad_dzde(i,j+1,k2)+ &
862 & (0.5_r8+sign(0.5_r8, &
863 & -dzde(i,j+1,k2)))* &
869 ad_dzde(i,j ,k1)=ad_dzde(i,j ,k1)+ &
870 & (0.5_r8+sign(0.5_r8, &
871 & -dzde(i,j ,k1)))* &
875 cff1=min(dzdx(i ,j,k1),0.0_r8)
876 cff2=min(dzdx(i+1,j,k2),0.0_r8)
877 cff3=max(dzdx(i ,j,k2),0.0_r8)
878 cff4=max(dzdx(i+1,j,k1),0.0_r8)
901 adfac=difx*ad_fs(i,j,k2)
903 & (2.0_r8*cff1*dtdz(i,j,k2)-dtdx(i ,j,k1))* &
906 & (2.0_r8*cff2*dtdz(i,j,k2)-dtdx(i+1,j,k2))* &
909 & (2.0_r8*cff3*dtdz(i,j,k2)-dtdx(i ,j,k2))* &
912 & (2.0_r8*cff4*dtdz(i,j,k2)-dtdx(i+1,j,k1))* &
914 ad_dtdz(i,j,k2)=ad_dtdz(i,j,k2)+ &
919 ad_dtdx(i ,j,k1)=ad_dtdx(i ,j,k1)-cff1*adfac
920 ad_dtdx(i+1,j,k2)=ad_dtdx(i+1,j,k2)-cff2*adfac
921 ad_dtdx(i ,j,k2)=ad_dtdx(i ,j,k2)-cff3*adfac
922 ad_dtdx(i+1,j,k1)=ad_dtdx(i+1,j,k1)-cff4*adfac
927 ad_dzdx(i+1,j,k1)=ad_dzdx(i+1,j,k1)+ &
928 & (0.5_r8+sign(0.5_r8, &
929 & dzdx(i+1,j,k1)))* &
935 ad_dzdx(i ,j,k2)=ad_dzdx(i ,j,k2)+ &
936 & (0.5_r8+sign(0.5_r8, &
943 ad_dzdx(i+1,j,k2)=ad_dzdx(i+1,j,k2)+ &
944 & (0.5_r8+sign(0.5_r8, &
945 & -dzdx(i+1,j,k2)))* &
951 ad_dzdx(i ,j,k1)=ad_dzdx(i ,j,k1)+ &
952 & (0.5_r8+sign(0.5_r8, &
953 & -dzdx(i ,j,k1)))* &
962# ifdef TS_U3ADV_SPLIT
963 cff=0.5_r8*diff3d_v(i,j,k)*om_v(i,j)
965 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
969 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
999 adfac1=adfac*(dtde(i,j,k1)- &
1000 & 0.5_r8*(min(dzde(i,j,k1),0.0_r8)* &
1001 & (dtdz(i,j-1,k1)+ &
1003 & max(dzde(i,j,k1),0.0_r8)* &
1004 & (dtdz(i,j-1,k2)+ &
1006 adfac2=adfac*(hz(i,j,k)+hz(i,j-1,k))
1007 adfac3=adfac2*0.5_r8*min(dzde(i,j,k1),0.0_r8)
1008 adfac4=adfac2*0.5_r8*max(dzde(i,j,k1),0.0_r8)
1009 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
1010 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
1011 ad_dtde(i,j,k1)=ad_dtde(i,j,k1)+adfac2
1012 ad_dtdz(i,j-1,k1)=ad_dtdz(i,j-1,k1)-adfac3
1013 ad_dtdz(i,j ,k2)=ad_dtdz(i,j ,k2)-adfac3
1014 ad_dtdz(i,j-1,k2)=ad_dtdz(i,j-1,k2)-adfac4
1015 ad_dtdz(i,j ,k1)=ad_dtdz(i,j ,k1)-adfac4
1016 ad_dzde(i,j,k1)=ad_dzde(i,j,k1)- &
1018 & ((0.5_r8+sign(0.5_r8,-dzde(i,j,k1)))* &
1019 & (dtdz(i,j-1,k1)+dtdz(i,j,k2))+ &
1020 & (0.5_r8+sign(0.5_r8, dzde(i,j,k1)))* &
1021 & (dtdz(i,j-1,k2)+dtdz(i,j,k1)))
1028# ifdef TS_U3ADV_SPLIT
1029 cff=0.5_r8*diff3d_u(i,j,k)*on_u(i,j)
1031 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
1035 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
1064 adfac=cff*ad_fx(i,j)
1065 adfac1=adfac*(dtdx(i,j,k1)- &
1066 & 0.5_r8*(min(dzdx(i,j,k1),0.0_r8)* &
1067 & (dtdz(i-1,j,k1)+ &
1069 & max(dzdx(i,j,k1),0.0_r8)* &
1070 & (dtdz(i-1,j,k2)+ &
1072 adfac2=adfac*(hz(i,j,k)+hz(i-1,j,k))
1073 adfac3=adfac2*0.5_r8*min(dzdx(i,j,k1),0.0_r8)
1074 adfac4=adfac2*0.5_r8*max(dzdx(i,j,k1),0.0_r8)
1075 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
1076 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
1077 ad_dtdx(i,j,k1)=ad_dtdx(i,j,k1)+adfac2
1078 ad_dtdz(i-1,j,k1)=ad_dtdz(i-1,j,k1)-adfac3
1079 ad_dtdz(i ,j,k2)=ad_dtdz(i ,j,k2)-adfac3
1080 ad_dtdz(i-1,j,k2)=ad_dtdz(i-1,j,k2)-adfac4
1081 ad_dtdz(i ,j,k1)=ad_dtdz(i ,j,k1)-adfac4
1082 ad_dzdx(i,j,k1)=ad_dzdx(i,j,k1)- &
1084 & ((0.5_r8+sign(0.5_r8,-dzdx(i,j,k1)))* &
1085 & (dtdz(i-1,j,k1)+dtdz(i,j,k2))+ &
1086 & (0.5_r8+sign(0.5_r8, dzdx(i,j,k1)))* &
1087 & (dtdz(i-1,j,k2)+dtdz(i,j,k1)))
1092 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
1097 ad_fs(i,j,k2)=0.0_r8
1101 ad_dtdz(i,j,k2)=0.0_r8
1107 cff=1.0_r8/(z_r(i,j,k+1)-z_r(i,j,k))
1113 adfac=cff*ad_dtdz(i,j,k2)
1114 ad_lapt(i,j,k )=ad_lapt(i,j,k )-adfac
1115 ad_lapt(i,j,k+1)=ad_lapt(i,j,k+1)+adfac
1116 ad_cff=ad_cff+(lapt(i,j,k+1)- &
1117 & lapt(i,j,k ))*ad_dtdz(i,j,k2)
1118 ad_dtdz(i,j,k2)=0.0_r8
1121 adfac=-cff*cff*ad_cff
1122 ad_z_r(i,j,k )=ad_z_r(i,j,k )-adfac
1123 ad_z_r(i,j,k+1)=ad_z_r(i,j,k+1)+adfac
1128 IF (k.lt.n(ng))
THEN
1131 cff=0.5_r8*(pn(i,j)+pn(i,j-1))
1135#ifdef WET_DRY_NOT_YET
1136 cff=cff*vmask_wet(i,j)
1141 adfac=cff*ad_dtde(i,j,k2)
1142 ad_lapt(i,j-1,k+1)=ad_lapt(i,j-1,k+1)-adfac
1143 ad_lapt(i,j ,k+1)=ad_lapt(i,j ,k+1)+adfac
1144 ad_dtde(i,j,k2)=0.0_r8
1148 adfac=cff*ad_dzde(i,j,k2)
1149 ad_z_r(i,j-1,k+1)=ad_z_r(i,j-1,k+1)-adfac
1150 ad_z_r(i,j ,k+1)=ad_z_r(i,j ,k+1)+adfac
1151 ad_dzde(i,j,k2)=0.0_r8
1156 cff=0.5_r8*(pm(i,j)+pm(i-1,j))
1160#ifdef WET_DRY_NOT_YET
1161 cff=cff*umask_wet(i,j)
1166 adfac=cff*ad_dtdx(i,j,k2)
1167 ad_lapt(i-1,j,k+1)=ad_lapt(i-1,j,k+1)-adfac
1168 ad_lapt(i ,j,k+1)=ad_lapt(i ,j,k+1)+adfac
1169 ad_dtdx(i,j,k2)=0.0_r8
1173 adfac=cff*ad_dzdx(i,j,k2)
1174 ad_z_r(i-1,j,k+1)=ad_z_r(i-1,j,k+1)-adfac
1175 ad_z_r(i ,j,k+1)=ad_z_r(i ,j,k+1)+adfac
1176 ad_dzdx(i,j,k2)=0.0_r8
1193 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
1199 adfac=0.5_r8*ad_lapt(iend+1,jend+1,k)
1200 ad_lapt(iend+1,jend ,k)=ad_lapt(iend+1,jend ,k)+adfac
1201 ad_lapt(iend ,jend+1,k)=ad_lapt(iend ,jend+1,k)+adfac
1202 ad_lapt(iend+1,jend+1,k)=0.0_r8
1209 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
1215 adfac=0.5_r8*ad_lapt(istr-1,jend+1,k)
1216 ad_lapt(istr-1,jend ,k)=ad_lapt(istr-1,jend ,k)+adfac
1217 ad_lapt(istr ,jend+1,k)=ad_lapt(istr ,jend+1,k)+adfac
1218 ad_lapt(istr-1,jend+1,k)=0.0_r8
1225 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
1231 adfac=0.5_r8*ad_lapt(iend+1,jstr-1,k)
1232 ad_lapt(iend ,jstr-1,k)=ad_lapt(iend ,jstr-1,k)+adfac
1233 ad_lapt(iend+1,jstr ,k)=ad_lapt(iend+1,jstr ,k)+adfac
1234 ad_lapt(iend+1,jstr-1,k)=0.0_r8
1241 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
1247 adfac=0.5_r8*ad_lapt(istr-1,jstr-1,k)
1248 ad_lapt(istr ,jstr-1,k)=ad_lapt(istr ,jstr-1,k)+adfac
1249 ad_lapt(istr-1,jstr ,k)=ad_lapt(istr-1,jstr ,k)+adfac
1250 ad_lapt(istr-1,jstr-1,k)=0.0_r8
1256 IF (
domain(ng)%Northern_Edge(tile))
THEN
1262 ad_lapt(i,jend+1,k)=0.0_r8
1270 ad_lapt(i,jend,k)=ad_lapt(i,jend,k)+ &
1271 & ad_lapt(i,jend+1,k)
1272 ad_lapt(i,jend+1,k)=0.0_r8
1280 IF (
domain(ng)%Southern_Edge(tile))
THEN
1286 ad_lapt(i,jstr-1,k)=0.0_r8
1294 ad_lapt(i,jstr,k)=ad_lapt(i,jstr,k)+ &
1295 & ad_lapt(i,jstr-1,k)
1296 ad_lapt(i,jstr-1,k)=0.0_r8
1304 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1310 ad_lapt(iend+1,j,k)=0.0_r8
1318 ad_lapt(iend,j,k)=ad_lapt(iend,j,k)+ &
1319 & ad_lapt(iend+1,j,k)
1320 ad_lapt(iend+1,j,k)=0.0_r8
1328 IF (
domain(ng)%Western_Edge(tile))
THEN
1334 ad_lapt(istr-1,j,k)=0.0_r8
1342 ad_lapt(istr,j,k)=ad_lapt(istr,j,k)+ &
1343 & ad_lapt(istr-1,j,k)
1344 ad_lapt(istr-1,j,k)=0.0_r8
1377 k_loop3:
DO k=n(ng),0,-1
1382 IF (kk.lt.n(ng))
THEN
1385 cff=0.5_r8*(pm(i,j)+pm(i-1,j))
1389#ifdef WET_DRY_NOT_YET
1390 cff=cff*umask_wet(i,j)
1392 dzdx(i,j,k2b)=cff*(z_r(i ,j,kk+1)- &
1394#if defined TS_MIX_STABILITY
1395 dtdx(i,j,k2b)=cff*(0.75_r8*(t(i ,j,kk+1,nrhs,itrc)- &
1396 & t(i-1,j,kk+1,nrhs,itrc))+ &
1397 & 0.25_r8*(t(i ,j,kk+1,nstp,itrc)- &
1398 & t(i-1,j,kk+1,nstp,itrc)))
1399#elif defined TS_MIX_CLIMA
1401 dtdx(i,j,k2b)=cff*((t(i ,j,kk+1,nrhs,itrc)- &
1402 & tclm(i ,j,kk+1,itrc))- &
1403 & (t(i-1,j,kk+1,nrhs,itrc)- &
1404 & tclm(i-1,j,kk+1,itrc)))
1406 dtdx(i,j,k2b)=cff*(t(i ,j,kk+1,nrhs,itrc)- &
1407 & t(i-1,j,kk+1,nrhs,itrc))
1410 dtdx(i,j,k2b)=cff*(t(i ,j,kk+1,nrhs,itrc)- &
1411 & t(i-1,j,kk+1,nrhs,itrc))
1418 dzdx(i,j,k1b)=0.0_r8
1419 dtdx(i,j,k1b)=0.0_r8
1425 cff=0.5_r8*(pn(i,j)+pn(i,j-1))
1429#ifdef WET_DRY_NOT_YET
1430 cff=cff*vmask_wet(i,j)
1432 dzde(i,j,k2b)=cff*(z_r(i,j ,kk+1)- &
1434#if defined TS_MIX_STABILITY
1435 dtde(i,j,k2b)=cff*(0.75_r8*(t(i,j ,kk+1,nrhs,itrc)- &
1436 & t(i,j-1,kk+1,nrhs,itrc))+ &
1437 & 0.25_r8*(t(i,j ,kk+1,nstp,itrc)- &
1438 & t(i,j-1,kk+1,nstp,itrc)))
1439#elif defined TS_MIX_CLIMA
1441 dtde(i,j,k2b)=cff*((t(i,j ,kk+1,nrhs,itrc)- &
1442 & tclm(i,j ,kk+1,itrc))- &
1443 & (t(i,j-1,kk+1,nrhs,itrc)- &
1444 & tclm(i,j-1,kk+1,itrc)))
1446 dtde(i,j,k2b)=cff*(t(i,j ,kk+1,nrhs,itrc)- &
1447 & t(i,j-1,kk+1,nrhs,itrc))
1450 dtde(i,j,k2b)=cff*(t(i,j ,kk+1,nrhs,itrc)- &
1451 & t(i,j-1,kk+1,nrhs,itrc))
1458 dzde(i,j,k1b)=0.0_r8
1459 dtde(i,j,k1b)=0.0_r8
1464 IF ((kk.eq.0).or.(kk.eq.n(ng)))
THEN
1467 dtdz(i,j,k2b)=0.0_r8
1474 dtdz(i,j,k1b)=0.0_r8
1482 cff=1.0_r8/(z_r(i,j,kk+1)-z_r(i,j,kk))
1483#if defined TS_MIX_STABILITY
1484 dtdz(i,j,k2b)=cff*(0.75_r8*(t(i,j,kk+1,nrhs,itrc)- &
1485 & t(i,j,kk ,nrhs,itrc))+ &
1486 & 0.25_r8*(t(i,j,kk+1,nstp,itrc)- &
1487 & t(i,j,kk ,nstp,itrc)))
1488#elif defined TS_MIX_CLIMA
1490 dtdz(i,j,k2b)=cff*((t(i,j,kk+1,nrhs,itrc)- &
1491 & tclm(i,j,kk+1,itrc))- &
1492 & (t(i,j,kk ,nrhs,itrc)- &
1493 & tclm(i,j,kk ,itrc)))
1495 dtdz(i,j,k2b)=cff*(t(i,j,kk+1,nrhs,itrc)- &
1496 & t(i,j,kk ,nrhs,itrc))
1499 dtdz(i,j,k2b)=cff*(t(i,j,kk+1,nrhs,itrc)- &
1500 & t(i,j,kk ,nrhs,itrc))
1509# ifdef TS_U3ADV_SPLIT
1510 cff=0.5_r8*diff3d_u(i,j,kk)*on_u(i,j)
1512 cff=0.25_r8*(diff3d_r(i,j,kk)+diff3d_r(i-1,j,kk))* &
1516 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
1520 & (hz(i,j,kk)+hz(i-1,j,kk))* &
1522 & 0.5_r8*(min(dzdx(i,j,k1b),0.0_r8)* &
1523 & (dtdz(i-1,j,k1b)+ &
1524 & dtdz(i ,j,k2b))+ &
1525 & max(dzdx(i,j,k1b),0.0_r8)* &
1526 & (dtdz(i-1,j,k2b)+ &
1533# ifdef TS_U3ADV_SPLIT
1534 cff=0.5_r8*diff3d_v(i,j,kk)*om_v(i,j)
1536 cff=0.25_r8*(diff3d_r(i,j,kk)+diff3d_r(i,j-1,kk))* &
1540 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
1544 & (hz(i,j,kk)+hz(i,j-1,kk))* &
1546 & 0.5_r8*(min(dzde(i,j,k1b),0.0_r8)* &
1547 & (dtdz(i,j-1,k1b)+ &
1548 & dtdz(i,j ,k2b))+ &
1549 & max(dzde(i,j,k1b),0.0_r8)* &
1550 & (dtdz(i,j-1,k2b)+ &
1554 IF (kk.lt.n(ng))
THEN
1558# ifdef TS_U3ADV_SPLIT
1560 & (diff3d_u(i,j,kk )+diff3d_u(i+1,j,kk )+ &
1561 & diff3d_u(i,j,kk+1)+diff3d_u(i+1,j,kk+1))
1563 & (diff3d_v(i,j,kk )+diff3d_v(i,j+1,kk )+ &
1564 & diff3d_v(i,j,kk+1)+diff3d_v(i,j+1,kk+1))
1566 difx=0.5_r8*diff3d_r(i,j,kk)
1570 difx=0.5_r8*diff4(i,j,itrc)
1573 cff1=min(dzdx(i ,j,k1b),0.0_r8)
1574 cff2=min(dzdx(i+1,j,k2b),0.0_r8)
1575 cff3=max(dzdx(i ,j,k2b),0.0_r8)
1576 cff4=max(dzdx(i+1,j,k1b),0.0_r8)
1578 & (cff1*(cff1*dtdz(i,j,k2b)- &
1579 & dtdx(i ,j,k1b))+ &
1580 & cff2*(cff2*dtdz(i,j,k2b)- &
1581 & dtdx(i+1,j,k2b))+ &
1582 & cff3*(cff3*dtdz(i,j,k2b)- &
1583 & dtdx(i ,j,k2b))+ &
1584 & cff4*(cff4*dtdz(i,j,k2b)- &
1587 cff1=min(dzde(i,j ,k1b),0.0_r8)
1588 cff2=min(dzde(i,j+1,k2b),0.0_r8)
1589 cff3=max(dzde(i,j ,k2b),0.0_r8)
1590 cff4=max(dzde(i,j+1,k1b),0.0_r8)
1591 fs(i,j,k2b)=fs(i,j,k2b)+ &
1593 & (cff1*(cff1*dtdz(i,j,k2b)- &
1594 & dtde(i,j ,k1b))+ &
1595 & cff2*(cff2*dtdz(i,j,k2b)- &
1596 & dtde(i,j+1,k2b))+ &
1597 & cff3*(cff3*dtdz(i,j,k2b)- &
1598 & dtde(i,j ,k2b))+ &
1599 & cff4*(cff4*dtdz(i,j,k2b)- &
1615 cff1=1.0_r8/hz(i,j,k)
1625 adfac=cff1*ad_lapt(i,j,k)
1627 ad_fs(i,j,k1)=ad_fs(i,j,k1)-adfac
1628 ad_fs(i,j,k2)=ad_fs(i,j,k2)+adfac
1629 ad_fe(i,j )=ad_fe(i,j )-adfac1
1630 ad_fe(i,j+1)=ad_fe(i,j+1)+adfac1
1631 ad_fx(i ,j)=ad_fx(i ,j)-adfac1
1632 ad_fx(i+1,j)=ad_fx(i+1,j)+adfac1
1633 ad_cff1=ad_cff1+(cff* &
1634 & (fx(i+1,j)-fx(i,j)+ &
1635 & fe(i,j+1)-fe(i,j))+ &
1636 & (fs(i,j,k2)-fs(i,j,k1)))* &
1638 ad_lapt(i,j,k)=0.0_r8
1641 ad_hz(i,j,k)=ad_hz(i,j,k)-cff1*cff1*ad_cff1
1645 IF (k.lt.n(ng))
THEN
1649# ifdef TS_U3ADV_SPLIT
1650 difx=0.125_r8*(diff3d_v(i,j,k )+diff3d_v(i,j+1,k )+ &
1651 & diff3d_v(i,j,k+1)+diff3d_v(i,j+1,k+1))
1652 dife=0.125_r8*(diff3d_u(i,j,k )+diff3d_u(i+1,j,k )+ &
1653 & diff3d_u(i,j,k+1)+diff3d_u(i+1,j,k+1))
1655 difx=0.5_r8*diff3d_r(i,j,k)
1659 difx=0.5_r8*diff4(i,j,itrc)
1662 cff1=min(dzde(i,j ,k1),0.0_r8)
1663 cff2=min(dzde(i,j+1,k2),0.0_r8)
1664 cff3=max(dzde(i,j ,k2),0.0_r8)
1665 cff4=max(dzde(i,j+1,k1),0.0_r8)
1689 adfac=dife*ad_fs(i,j,k2)
1691 & (2.0_r8*cff1*dtdz(i,j,k2)-dtde(i,j ,k1))* &
1694 & (2.0_r8*cff2*dtdz(i,j,k2)-dtde(i,j+1,k2))* &
1697 & (2.0_r8*cff3*dtdz(i,j,k2)-dtde(i,j ,k2))* &
1700 & (2.0_r8*cff4*dtdz(i,j,k2)-dtde(i,j+1,k1))* &
1702 ad_dtdz(i,j,k2)=ad_dtdz(i,j,k2)+ &
1703 & adfac*(cff1*cff1+ &
1707 ad_dtde(i,j ,k1)=ad_dtde(i,j ,k1)-cff1*adfac
1708 ad_dtde(i,j+1,k2)=ad_dtde(i,j+1,k2)-cff2*adfac
1709 ad_dtde(i,j ,k2)=ad_dtde(i,j ,k2)-cff3*adfac
1710 ad_dtde(i,j+1,k1)=ad_dtde(i,j+1,k1)-cff4*adfac
1714 ad_dzde(i,j+1,k1)=ad_dzde(i,j+1,k1)+ &
1715 & (0.5_r8+sign(0.5_r8, &
1716 & dzde(i,j+1,k1)))* &
1722 ad_dzde(i,j ,k2)=ad_dzde(i,j ,k2)+ &
1723 & (0.5_r8+sign(0.5_r8, &
1724 & dzde(i,j ,k2)))* &
1730 ad_dzde(i,j+1,k2)=ad_dzde(i,j+1,k2)+ &
1731 & (0.5_r8+sign(0.5_r8, &
1732 & -dzde(i,j+1,k2)))* &
1738 ad_dzde(i,j ,k1)=ad_dzde(i,j ,k1)+ &
1739 & (0.5_r8+sign(0.5_r8, &
1740 & -dzde(i,j ,k1)))* &
1744 cff1=min(dzdx(i ,j,k1),0.0_r8)
1745 cff2=min(dzdx(i+1,j,k2),0.0_r8)
1746 cff3=max(dzdx(i ,j,k2),0.0_r8)
1747 cff4=max(dzdx(i+1,j,k1),0.0_r8)
1770 adfac=difx*ad_fs(i,j,k2)
1772 & (2.0_r8*cff1*dtdz(i,j,k2)-dtdx(i ,j,k1))* &
1775 & (2.0_r8*cff2*dtdz(i,j,k2)-dtdx(i+1,j,k2))* &
1778 & (2.0_r8*cff3*dtdz(i,j,k2)-dtdx(i ,j,k2))* &
1781 & (2.0_r8*cff4*dtdz(i,j,k2)-dtdx(i+1,j,k1))* &
1783 ad_dtdz(i,j,k2)=ad_dtdz(i,j,k2)+ &
1784 & adfac*(cff1*cff1+ &
1788 ad_dtdx(i ,j,k1)=ad_dtdx(i ,j,k1)-cff1*adfac
1789 ad_dtdx(i+1,j,k2)=ad_dtdx(i+1,j,k2)-cff2*adfac
1790 ad_dtdx(i ,j,k2)=ad_dtdx(i ,j,k2)-cff3*adfac
1791 ad_dtdx(i+1,j,k1)=ad_dtdx(i+1,j,k1)-cff4*adfac
1792 ad_fs(i,j,k2)=0.0_r8
1796 ad_dzdx(i+1,j,k1)=ad_dzdx(i+1,j,k1)+ &
1797 & (0.5_r8+sign(0.5_r8, &
1798 & dzdx(i+1,j,k1)))* &
1804 ad_dzdx(i ,j,k2)=ad_dzdx(i ,j,k2)+ &
1805 & (0.5_r8+sign(0.5_r8, &
1806 & dzdx(i ,j,k2)))* &
1812 ad_dzdx(i+1,j,k2)=ad_dzdx(i+1,j,k2)+ &
1813 & (0.5_r8+sign(0.5_r8, &
1814 & -dzdx(i+1,j,k2)))* &
1820 ad_dzdx(i ,j,k1)=ad_dzdx(i ,j,k1)+ &
1821 & (0.5_r8+sign(0.5_r8, &
1822 & -dzdx(i ,j,k1)))* &
1831# ifdef TS_U3ADV_SPLIT
1832 cff=0.5_r8*diff3d_v(i,j,k)*om_v(i,j)
1834 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
1838 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
1867 adfac=cff*ad_fe(i,j)
1868 adfac1=adfac*(dtde(i,j,k1)- &
1869 & 0.5_r8*(min(dzde(i,j,k1),0.0_r8)* &
1870 & (dtdz(i,j-1,k1)+ &
1872 & max(dzde(i,j,k1),0.0_r8)* &
1873 & (dtdz(i,j-1,k2)+ &
1875 adfac2=adfac*(hz(i,j,k)+hz(i,j-1,k))
1876 adfac3=adfac2*0.5_r8*min(dzde(i,j,k1),0.0_r8)
1877 adfac4=adfac2*0.5_r8*max(dzde(i,j,k1),0.0_r8)
1878 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
1879 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
1880 ad_dtde(i,j,k1)=ad_dtde(i,j,k1)+adfac2
1881 ad_dtdz(i,j-1,k1)=ad_dtdz(i,j-1,k1)-adfac3
1882 ad_dtdz(i,j ,k2)=ad_dtdz(i,j ,k2)-adfac3
1883 ad_dtdz(i,j-1,k2)=ad_dtdz(i,j-1,k2)-adfac4
1884 ad_dtdz(i,j ,k1)=ad_dtdz(i,j ,k1)-adfac4
1885 ad_dzde(i,j,k1)=ad_dzde(i,j,k1)- &
1887 & ((0.5_r8+sign(0.5_r8,-dzde(i,j,k1)))* &
1888 & (dtdz(i,j-1,k1)+dtdz(i,j,k2))+ &
1889 & (0.5_r8+sign(0.5_r8, dzde(i,j,k1)))* &
1890 & (dtdz(i,j-1,k2)+dtdz(i,j,k1)))
1897# ifdef TS_U3ADV_SPLIT
1898 cff=0.5_r8*diff3d_u(i,j,k)*on_u(i,j)
1900 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
1904 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
1933 adfac=cff*ad_fx(i,j)
1934 adfac1=adfac*(dtdx(i,j,k1)- &
1935 & 0.5_r8*(min(dzdx(i,j,k1),0.0_r8)* &
1936 & (dtdz(i-1,j,k1)+ &
1938 & max(dzdx(i,j,k1),0.0_r8)* &
1939 & (dtdz(i-1,j,k2)+ &
1941 adfac2=adfac*(hz(i,j,k)+hz(i-1,j,k))
1942 adfac3=adfac2*0.5_r8*min(dzdx(i,j,k1),0.0_r8)
1943 adfac4=adfac2*0.5_r8*max(dzdx(i,j,k1),0.0_r8)
1944 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
1945 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
1946 ad_dtdx(i,j,k1)=ad_dtdx(i,j,k1)+adfac2
1947 ad_dtdz(i-1,j,k1)=ad_dtdz(i-1,j,k1)-adfac3
1948 ad_dtdz(i ,j,k2)=ad_dtdz(i ,j,k2)-adfac3
1949 ad_dtdz(i-1,j,k2)=ad_dtdz(i-1,j,k2)-adfac4
1950 ad_dtdz(i ,j,k1)=ad_dtdz(i ,j,k1)-adfac4
1951 ad_dzdx(i,j,k1)=ad_dzdx(i,j,k1)- &
1953 & ((0.5_r8+sign(0.5_r8,-dzdx(i,j,k1)))* &
1954 & (dtdz(i-1,j,k1)+dtdz(i,j,k2))+ &
1955 & (0.5_r8+sign(0.5_r8, dzdx(i,j,k1)))* &
1956 & (dtdz(i-1,j,k2)+dtdz(i,j,k1)))
1961 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
1966 ad_dtdz(i,j,k2)=0.0_r8
1970 ad_fs(i,j,k2)=0.0_r8
1976 cff=1.0_r8/(z_r(i,j,k+1)-z_r(i,j,k))
1977#if defined TS_MIX_STABILITY
1987 adfac=cff*ad_dtdz(i,j,k2)
1988 adfac1=adfac*0.75_r8
1989 adfac2=adfac*0.25_r8
1990 ad_t(i,j,k ,nrhs,itrc)=ad_t(i,j,k ,nrhs,itrc)-adfac1
1991 ad_t(i,j,k+1,nrhs,itrc)=ad_t(i,j,k+1,nrhs,itrc)+adfac1
1992 ad_t(i,j,k ,nstp,itrc)=ad_t(i,j,k ,nstp,itrc)-adfac2
1993 ad_t(i,j,k+1,nstp,itrc)=ad_t(i,j,k+1,nstp,itrc)+adfac2
1994 ad_cff=ad_cff+(0.75_r8*(t(i,j,k+1,nrhs,itrc)- &
1995 & t(i,j,k ,nrhs,itrc))+ &
1996 & 0.25_r8*(t(i,j,k+1,nstp,itrc)- &
1997 & t(i,j,k ,nstp,itrc)))* &
1999 ad_dtdz(i,j,k2)=0.0_r8
2000#elif defined TS_MIX_CLIMA
2009 adfac=cff*ad_dtdz(i,j,k2)
2010 ad_t(i,j,k ,nrhs,itrc)=ad_t(i,j,k ,nrhs,itrc)-adfac
2011 ad_t(i,j,k+1,nrhs,itrc)=ad_t(i,j,k+1,nrhs,itrc)+adfac
2013 & ((t(i,j,k+1,nrhs,itrc)- &
2014 & tclm(i,j,k+1,itrc))- &
2015 & (t(i,j,k ,nrhs,itrc)- &
2016 & tclm(i,j,k ,itrc)))*ad_dtdz(i,j,k2)
2017 ad_dtdz(i,j,k2)=0.0_r8
2024 adfac=cff*ad_dtdz(i,j,k2)
2025 ad_t(i,j,k ,nrhs,itrc)=ad_t(i,j,k ,nrhs,itrc)-adfac
2026 ad_t(i,j,k+1,nrhs,itrc)=ad_t(i,j,k+1,nrhs,itrc)+adfac
2028 & (t(i,j,k+1,nrhs,itrc)- &
2029 & t(i,j,k ,nrhs,itrc))*ad_dtdz(i,j,k2)
2030 ad_dtdz(i,j,k2)=0.0_r8
2038 adfac=cff*ad_dtdz(i,j,k2)
2039 ad_t(i,j,k ,nrhs,itrc)=ad_t(i,j,k ,nrhs,itrc)-adfac
2040 ad_t(i,j,k+1,nrhs,itrc)=ad_t(i,j,k+1,nrhs,itrc)+adfac
2042 & (t(i,j,k+1,nrhs,itrc)- &
2043 & t(i,j,k ,nrhs,itrc))*ad_dtdz(i,j,k2)
2044 ad_dtdz(i,j,k2)=0.0_r8
2048 adfac=-cff*cff*ad_cff
2049 ad_z_r(i,j,k )=ad_z_r(i,j,k )-adfac
2050 ad_z_r(i,j,k+1)=ad_z_r(i,j,k+1)+adfac
2055 IF (k.lt.n(ng))
THEN
2058 cff=0.5_r8*(pn(i,j)+pn(i,j-1))
2062#ifdef WET_DRY_NOT_YET
2063 cff=cff*vmask_wet(i,j)
2065#if defined TS_MIX_STABILITY
2072 adfac=cff*ad_dtde(i,j,k2)
2073 adfac1=adfac*0.75_r8
2074 adfac2=adfac*0.25_r8
2075 ad_t(i,j-1,k+1,nrhs,itrc)=ad_t(i,j-1,k+1,nrhs,itrc)- &
2077 ad_t(i,j ,k+1,nrhs,itrc)=ad_t(i,j ,k+1,nrhs,itrc)+ &
2079 ad_t(i,j-1,k+1,nstp,itrc)=ad_t(i,j-1,k+1,nstp,itrc)- &
2081 ad_t(i,j ,k+1,nstp,itrc)=ad_t(i,j ,k+1,nstp,itrc)+ &
2083 ad_dtde(i,j,k2)=0.0_r8
2084#elif defined TS_MIX_CLIMA
2088 adfac=cff*ad_dtde(i,j,k2)
2089 ad_t(i,j-1,k+1,nrhs,itrc)=ad_t(i,j-1,k+1,nrhs,itrc)- &
2091 ad_t(i,j ,k+1,nrhs,itrc)=ad_t(i,j ,k+1,nrhs,itrc)+ &
2093 ad_dtde(i,j,k2)=0.0_r8
2098 adfac=cff*ad_dtde(i,j,k2)
2099 ad_t(i,j-1,k+1,nrhs,itrc)=ad_t(i,j-1,k+1,nrhs,itrc)- &
2101 ad_t(i,j ,k+1,nrhs,itrc)=ad_t(i,j ,k+1,nrhs,itrc)+ &
2103 ad_dtde(i,j,k2)=0.0_r8
2108 adfac=cff*ad_dzde(i,j,k2)
2109 ad_z_r(i,j-1,k+1)=ad_z_r(i,j-1,k+1)-adfac
2110 ad_z_r(i,j ,k+1)=ad_z_r(i,j ,k+1)+adfac
2111 ad_dzde(i,j,k2)=0.0_r8
2116 cff=0.5_r8*(pm(i,j)+pm(i-1,j))
2120#ifdef WET_DRY_NOT_YET
2121 cff=cff*umask_wet(i,j)
2123#if defined TS_MIX_STABILITY
2130 adfac=cff*ad_dtdx(i,j,k2)
2131 adfac1=adfac*0.75_r8
2132 adfac2=adfac*0.25_r8
2133 ad_t(i-1,j,k+1,nrhs,itrc)=ad_t(i-1,j,k+1,nrhs,itrc)- &
2135 ad_t(i ,j,k+1,nrhs,itrc)=ad_t(i ,j,k+1,nrhs,itrc)+ &
2137 ad_t(i-1,j,k+1,nstp,itrc)=ad_t(i-1,j,k+1,nstp,itrc)- &
2139 ad_t(i ,j,k+1,nstp,itrc)=ad_t(i ,j,k+1,nstp,itrc)+ &
2141 ad_dtdx(i,j,k2)=0.0_r8
2142#elif defined TS_MIX_CLIMA
2146 adfac=cff*ad_dtdx(i,j,k2)
2147 ad_t(i-1,j,k+1,nrhs,itrc)=ad_t(i-1,j,k+1,nrhs,itrc)- &
2149 ad_t(i ,j,k+1,nrhs,itrc)=ad_t(i ,j,k+1,nrhs,itrc)+ &
2151 ad_dtdx(i,j,k2)=0.0_r8
2156 adfac=cff*ad_dtdx(i,j,k2)
2157 ad_t(i-1,j,k+1,nrhs,itrc)=ad_t(i-1,j,k+1,nrhs,itrc)- &
2159 ad_t(i ,j,k+1,nrhs,itrc)=ad_t(i ,j,k+1,nrhs,itrc)+ &
2161 ad_dtdx(i,j,k2)=0.0_r8
2166 adfac=cff*ad_dzdx(i,j,k2)
2167 ad_z_r(i-1,j,k+1)=ad_z_r(i-1,j,k+1)-adfac
2168 ad_z_r(i ,j,k+1)=ad_z_r(i ,j,k+1)+adfac
2169 ad_dzdx(i,j,k2)=0.0_r8