97 & LBi, UBi, LBj, UBj, &
98 & IminS, ImaxS, JminS, JmaxS, &
103#ifdef WET_DRY_NOT_YET
104 & umask_wet, vmask_wet, &
107 & pmon_u, pnom_v, pm, pn, &
109# ifdef TS_U3ADV_SPLIT_NOT_YET
110 & diff3d_u, diff3d_v, &
131 integer,
intent(in) :: ng, tile
132 integer,
intent(in) :: LBi, UBi, LBj, UBj
133 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
134 integer,
intent(in) :: nrhs, nstp, nnew
138 real(r8),
intent(in) :: umask(LBi:,LBj:)
139 real(r8),
intent(in) :: vmask(LBi:,LBj:)
141# ifdef WET_DRY_NOT_YET
142 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
143 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
146# ifdef TS_U3ADV_SPLIT_NOT_YET
147 real(r8),
intent(in) :: diff3d_u(LBi:,LBj:,:)
148 real(r8),
intent(in) :: diff3d_v(LBi:,LBj:,:)
150 real(r8),
intent(in) :: diff3d_r(LBi:,LBj:,:)
153 real(r8),
intent(in) :: diff4(LBi:,LBj:,:)
155 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
156 real(r8),
intent(in) :: pmon_u(LBi:,LBj:)
157 real(r8),
intent(in) :: pnom_v(LBi:,LBj:)
158 real(r8),
intent(in) :: pm(LBi:,LBj:)
159 real(r8),
intent(in) :: pn(LBi:,LBj:)
160 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
162 real(r8),
intent(in) :: tclm(LBi:,LBj:,:,:)
164# ifdef DIAGNOSTICS_TS
167 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
168 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
171 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
172 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
174# ifdef WET_DRY_NOT_YET
175 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
176 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
179# ifdef TS_U3ADV_SPLIT_NOT_YET
180 real(r8),
intent(in) :: diff3d_u(LBi:UBi,LBj:UBj,N(ng))
181 real(r8),
intent(in) :: diff3d_v(LBi:UBi,LBj:UBj,N(ng))
183 real(r8),
intent(in) :: diff3d_r(LBi:UBi,LBj:UBj,N(ng))
186 real(r8),
intent(in) :: diff4(LBi:UBi,LBj:UBj,NT(ng))
188 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
189 real(r8),
intent(in) :: pmon_u(LBi:UBi,LBj:UBj)
190 real(r8),
intent(in) :: pnom_v(LBi:UBi,LBj:UBj)
191 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
192 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
193 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
195 real(r8),
intent(in) :: tclm(LBi:UBi,LBj:UBj,N(ng),NT(ng))
197# ifdef DIAGNOSTICS_TS
201 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
202 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
207 integer :: Imin, Imax, Jmin, Jmax
208 integer :: i, itrc, j, k
210 real(r8) :: cff, cff1
211 real(r8) :: adfac, adfac1, adfac2, adfac3, adfac4, ad_cff, ad_cff1
213 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FE
214 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FX
215 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: LapT
217 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_FE
218 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_FX
219 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_LapT
221#include "set_bounds.h"
230 ad_fe(imins:imaxs,jmins:jmaxs)=0.0_r8
231 ad_fx(imins:imaxs,jmins:jmaxs)=0.0_r8
233 ad_lapt(imins:imaxs,jmins:jmaxs)=0.0_r8
248 imax=min(iend+1,
lm(ng))
255 jmax=min(jend+1,
mm(ng))
265# ifdef TS_U3ADV_SPLIT_NOT_YET
266 cff=0.5_r8*diff3d_u(i,j,k)*pmon_u(i,j)
268 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
272 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
279 cff=cff*umask_wet(i,j)
281#if defined TS_MIX_STABILITY
283 & (hz(i,j,k)+hz(i-1,j,k))* &
284 & (0.75_r8*(t(i ,j,k,nrhs,itrc)- &
285 & t(i-1,j,k,nrhs,itrc))+ &
286 & 0.25_r8*(t(i ,j,k,nstp,itrc)- &
287 & t(i-1,j,k,nstp,itrc)))
288#elif defined TS_MIX_CLIMA
291 & (hz(i,j,k)+hz(i-1,j,k))* &
292 & ((t(i ,j,k,nrhs,itrc)-tclm(i ,j,k,itrc))- &
293 & (t(i-1,j,k,nrhs,itrc)-tclm(i-1,j,k,itrc)))
296 & (hz(i,j,k)+hz(i-1,j,k))* &
297 & (t(i ,j,k,nrhs,itrc)- &
298 & t(i-1,j,k,nrhs,itrc))
302 & (hz(i,j,k)+hz(i-1,j,k))* &
303 & (t(i ,j,k,nrhs,itrc)- &
304 & t(i-1,j,k,nrhs,itrc))
311# ifdef TS_U3ADV_SPLIT_NOT_YET
312 cff=0.5_r8*diff3d_v(i,j,k)*pnom_v(i,j)
314 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
318 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
325 cff=cff*vmask_wet(i,j)
327#if defined TS_MIX_STABILITY
329 & (hz(i,j,k)+hz(i,j-1,k))* &
330 & (0.75_r8*(t(i,j ,k,nrhs,itrc)- &
331 & t(i,j-1,k,nrhs,itrc))+ &
332 & 0.25_r8*(t(i,j ,k,nstp,itrc)- &
333 & t(i,j-1,k,nstp,itrc)))
334#elif defined TS_MIX_CLIMA
337 & (hz(i,j,k)+hz(i,j-1,k))* &
338 & ((t(i,j ,k,nrhs,itrc)-tclm(i,j ,k,itrc))- &
339 & (t(i,j-1,k,nrhs,itrc)-tclm(i,j-1,k,itrc)))
342 & (hz(i,j,k)+hz(i,j-1,k))* &
343 & (t(i,j ,k,nrhs,itrc)- &
344 & t(i,j-1,k,nrhs,itrc))
348 & (hz(i,j,k)+hz(i,j-1,k))* &
349 & (t(i,j ,k,nrhs,itrc)- &
350 & t(i,j-1,k,nrhs,itrc))
361 lapt(i,j)=pm(i,j)*pn(i,j)*cff* &
362 & (fx(i+1,j)-fx(i,j)+ &
371 IF (
domain(ng)%Western_Edge(tile))
THEN
374 lapt(istr-1,j)=0.0_r8
378 lapt(istr-1,j)=lapt(istr,j)
385 IF (
domain(ng)%Eastern_Edge(tile))
THEN
388 lapt(iend+1,j)=0.0_r8
392 lapt(iend+1,j)=lapt(iend,j)
399 IF (
domain(ng)%Southern_Edge(tile))
THEN
402 lapt(i,jstr-1)=0.0_r8
406 lapt(i,jstr-1)=lapt(i,jstr)
413 IF (
domain(ng)%Northern_Edge(tile))
THEN
416 lapt(i,jend+1)=0.0_r8
420 lapt(i,jend+1)=lapt(i,jend)
435 ad_cff=ad_cff-ad_t(i,j,k,nnew,itrc)
440 adfac=
dt(ng)*pm(i,j)*pn(i,j)*ad_cff
441 ad_fx(i ,j)=ad_fx(i ,j)-adfac
442 ad_fx(i+1,j)=ad_fx(i+1,j)+adfac
443 ad_fe(i,j )=ad_fe(i,j )-adfac
444 ad_fe(i,j+1)=ad_fe(i,j+1)+adfac
454# ifdef TS_U3ADV_SPLIT_NOT_YET
455 cff=0.5_r8*diff3d_v(i,j,k)*pnom_v(i,j)
457 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
461 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
464#ifdef WET_DRY_NOT_YET
465 fe(i,j)=fe(i,j)*vmask_wet(i,j)
470 ad_fe(i,j)=ad_fe(i,j)*vmask(i,j)
479 adfac1=adfac*(lapt(i,j)-lapt(i,j-1))
480 adfac2=adfac*(hz(i,j,k)+hz(i,j-1,k))
481 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
482 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
483 ad_lapt(i,j-1)=ad_lapt(i,j-1)-adfac2
484 ad_lapt(i,j )=ad_lapt(i,j )+adfac2
491# ifdef TS_U3ADV_SPLIT_NOT_YET
492 cff=0.5_r8*diff3d_u(i,j,k)*pmon_u(i,j)
494 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
498 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
501#ifdef WET_DRY_NOT_YET
502 fx(i,j)=fx(i,j)*umask_wet(i,j)
507 ad_fx(i,j)=ad_fx(i,j)*umask(i,j)
516 adfac1=adfac*(lapt(i,j)-lapt(i-1,j))
517 adfac2=adfac*(hz(i,j,k)+hz(i-1,j,k))
518 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
519 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
520 ad_lapt(i-1,j)=ad_lapt(i-1,j)-adfac2
521 ad_lapt(i ,j)=ad_lapt(i ,j)+adfac2
530 IF (
domain(ng)%Northern_Edge(tile))
THEN
535 ad_lapt(i,jend+1)=0.0_r8
541 ad_lapt(i,jend)=ad_lapt(i,jend)+ad_lapt(i,jend+1)
542 ad_lapt(i,jend+1)=0.0_r8
549 IF (
domain(ng)%Southern_Edge(tile))
THEN
554 ad_lapt(i,jstr-1)=0.0_r8
560 ad_lapt(i,jstr)=ad_lapt(i,jstr)+ad_lapt(i,jstr-1)
561 ad_lapt(i,jstr-1)=0.0_r8
568 IF (
domain(ng)%Eastern_Edge(tile))
THEN
573 ad_lapt(iend+1,j)=0.0_r8
579 ad_lapt(iend,j)=ad_lapt(iend,j)+ad_lapt(iend+1,j)
580 ad_lapt(iend+1,j)=0.0_r8
587 IF (
domain(ng)%Western_Edge(tile))
THEN
592 ad_lapt(istr-1,j)=0.0_r8
598 ad_lapt(istr,j)=ad_lapt(istr,j)+ad_lapt(istr-1,j)
599 ad_lapt(istr-1,j)=0.0_r8
619 adfac=pm(i,j)*pn(i,j)*ad_lapt(i,j)
622 & adfac*(fx(i+1,j)-fx(i,j)+ &
624 ad_fx(i ,j)=ad_fx(i ,j)-adfac1
625 ad_fx(i+1,j)=ad_fx(i+1,j)+adfac1
626 ad_fe(i,j )=ad_fe(i,j )-adfac1
627 ad_fe(i,j+1)=ad_fe(i,j+1)+adfac1
631 ad_hz(i,j,k)=ad_hz(i,j,k)-cff*cff*ad_cff
641# ifdef TS_U3ADV_SPLIT_NOT_YET
642 cff=0.5_r8*diff3d_v(i,j,k)*pnom_v(i,j)
644 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
648 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
651#ifdef WET_DRY_NOT_YET
652 cff=cff*vmask_wet(i,j)
657#if defined TS_MIX_STABILITY
671 adfac1=adfac*(0.75_r8*(t(i,j ,k,nrhs,itrc)- &
672 & t(i,j-1,k,nrhs,itrc))+ &
673 & 0.25_r8*(t(i,j ,k,nstp,itrc)- &
674 & t(i,j-1,k,nstp,itrc)))
675 adfac2=adfac*(hz(i,j,k)+hz(i,j-1,k))
676 adfac3=adfac2*0.75_r8
677 adfac4=adfac2*0.25_r8
678 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
679 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
680 ad_t(i,j-1,k,nrhs,itrc)=ad_t(i,j-1,k,nrhs,itrc)-adfac3
681 ad_t(i,j ,k,nrhs,itrc)=ad_t(i,j ,k,nrhs,itrc)+adfac3
682 ad_t(i,j-1,k,nstp,itrc)=ad_t(i,j-1,k,nstp,itrc)-adfac4
683 ad_t(i,j ,k,nstp,itrc)=ad_t(i,j ,k,nstp,itrc)+adfac4
685#elif defined TS_MIX_CLIMA
698 adfac1=adfac*((t(i,j ,k,nrhs,itrc)- &
699 & tclm(i,j ,k,itrc))- &
700 & (t(i,j-1,k,nrhs,itrc)- &
701 & tclm(i,j-1,k,itrc)))
702 adfac2=adfac*(hz(i,j,k)+hz(i,j-1,k))
703 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
704 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
705 ad_t(i,j-1,k,nrhs,itrc)=ad_t(i,j-1,k,nrhs,itrc)-adfac2
706 ad_t(i,j ,k,nrhs,itrc)=ad_t(i,j ,k,nrhs,itrc)+adfac2
718 adfac1=adfac*(t(i,j ,k,nrhs,itrc)- &
719 & t(i,j-1,k,nrhs,itrc))
720 adfac2=adfac*(hz(i,j,k)+hz(i,j-1,k))
721 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
722 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
723 ad_t(i,j-1,k,nrhs,itrc)=ad_t(i,j-1,k,nrhs,itrc)-adfac2
724 ad_t(i,j ,k,nrhs,itrc)=ad_t(i,j ,k,nrhs,itrc)+adfac2
737 adfac1=adfac*(t(i,j ,k,nrhs,itrc)- &
738 & t(i,j-1,k,nrhs,itrc))
739 adfac2=adfac*(hz(i,j,k)+hz(i,j-1,k))
740 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
741 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
742 ad_t(i,j-1,k,nrhs,itrc)=ad_t(i,j-1,k,nrhs,itrc)-adfac2
743 ad_t(i,j ,k,nrhs,itrc)=ad_t(i,j ,k,nrhs,itrc)+adfac2
752# ifdef TS_U3ADV_SPLIT_NOT_YET
753 cff=0.5_r8*diff3d_u(i,j,k)*pmon_u(i,j)
755 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
759 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
762#ifdef WET_DRY_NOT_YET
763 cff=cff*umask_wet(i,j)
768#if defined TS_MIX_STABILITY
782 adfac1=adfac*(0.75_r8*(t(i ,j,k,nrhs,itrc)- &
783 & t(i-1,j,k,nrhs,itrc))+ &
784 & 0.25_r8*(t(i ,j,k,nstp,itrc)- &
785 & t(i-1,j,k,nstp,itrc)))
786 adfac2=adfac*(hz(i,j,k)+hz(i-1,j,k))
787 adfac3=adfac2*0.75_r8
788 adfac4=adfac2*0.25_r8
789 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
790 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
791 ad_t(i-1,j,k,nrhs,itrc)=ad_t(i-1,j,k,nrhs,itrc)-adfac3
792 ad_t(i ,j,k,nrhs,itrc)=ad_t(i ,j,k,nrhs,itrc)+adfac3
793 ad_t(i-1,j,k,nstp,itrc)=ad_t(i-1,j,k,nstp,itrc)-adfac4
794 ad_t(i ,j,k,nstp,itrc)=ad_t(i ,j,k,nstp,itrc)+adfac4
796#elif defined TS_MIX_CLIMA
809 adfac1=adfac*((t(i ,j,k,nrhs,itrc)- &
810 & tclm(i ,j,k,itrc))- &
811 & (t(i-1,j,k,nrhs,itrc)- &
812 & tclm(i-1,j,k,itrc)))
813 adfac2=adfac*(hz(i,j,k)+hz(i-1,j,k))
814 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
815 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
816 ad_t(i-1,j,k,nrhs,itrc)=ad_t(i-1,j,k,nrhs,itrc)-adfac2
817 ad_t(i ,j,k,nrhs,itrc)=ad_t(i ,j,k,nrhs,itrc)+adfac2
829 adfac1=adfac*(t(i ,j,k,nrhs,itrc)- &
830 & t(i-1,j,k,nrhs,itrc))
831 adfac2=adfac*(hz(i,j,k)+hz(i-1,j,k))
832 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
833 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
834 ad_t(i-1,j,k,nrhs,itrc)=ad_t(i-1,j,k,nrhs,itrc)-adfac2
835 ad_t(i ,j,k,nrhs,itrc)=ad_t(i ,j,k,nrhs,itrc)+adfac2
848 adfac1=adfac*(t(i ,j,k,nrhs,itrc)- &
849 & t(i-1,j,k,nrhs,itrc))
850 adfac2=adfac*(hz(i,j,k)+hz(i-1,j,k))
851 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
852 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
853 ad_t(i-1,j,k,nrhs,itrc)=ad_t(i-1,j,k,nrhs,itrc)-adfac2
854 ad_t(i ,j,k,nrhs,itrc)=ad_t(i ,j,k,nrhs,itrc)+adfac2