94 & LBi, UBi, LBj, UBj, &
95 & IminS, ImaxS, JminS, JmaxS, &
100#ifdef WET_DRY_NOT_YET
101 & umask_wet, vmask_wet, &
104 & pmon_u, pnom_v, pm, pn, &
124 integer,
intent(in) :: ng, tile
125 integer,
intent(in) :: LBi, UBi, LBj, UBj
126 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
127 integer,
intent(in) :: nrhs, nstp, nnew
131 real(r8),
intent(in) :: umask(LBi:,LBj:)
132 real(r8),
intent(in) :: vmask(LBi:,LBj:)
134# ifdef WET_DRY_NOT_YET
135 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
136 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
139 real(r8),
intent(in) :: diff3d_r(LBi:,LBj:,:)
141 real(r8),
intent(in) :: diff2(LBi:,LBj:,:)
143 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
144 real(r8),
intent(in) :: pmon_u(LBi:,LBj:)
145 real(r8),
intent(in) :: pnom_v(LBi:,LBj:)
146 real(r8),
intent(in) :: pm(LBi:,LBj:)
147 real(r8),
intent(in) :: pn(LBi:,LBj:)
149 real(r8),
intent(in) :: tclm(LBi:,LBj:,:,:)
151# ifdef DIAGNOSTICS_TS
154 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
156 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
157 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
160 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
161 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
163# ifdef WET_DRY_NOT_YET
164 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
165 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
168 real(r8),
intent(in) :: diff3d_r(LBi:UBi,LBj:UBj,N(ng))
170 real(r8),
intent(in) :: diff2(LBi:UBi,LBj:UBj,NT(ng))
172 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
173 real(r8),
intent(in) :: pmon_u(LBi:UBi,LBj:UBj)
174 real(r8),
intent(in) :: pnom_v(LBi:UBi,LBj:UBj)
175 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
176 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
178 real(r8),
intent(in) :: tclm(LBi:UBi,LBj:UBj,N(ng),NT(ng))
180# ifdef DIAGNOSTICS_TS
184 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
186 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
187 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
192 integer :: i, itrc, j, k
194 real(r8) :: cff, cff1
195 real(r8) :: adfac, adfac1, adfac2, adfac3, adfac4, ad_cff, ad_cff1
197 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_FE
198 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_FX
200#include "set_bounds.h"
209 ad_fe(imins:imaxs,jmins:jmaxs)=0.0_r8
210 ad_fx(imins:imaxs,jmins:jmaxs)=0.0_r8
229 ad_cff=ad_cff+ad_t(i,j,k,nnew,itrc)
234 adfac=
dt(ng)*pm(i,j)*pn(i,j)*ad_cff
235 ad_fx(i ,j)=ad_fx(i ,j)-adfac
236 ad_fx(i+1,j)=ad_fx(i+1,j)+adfac
237 ad_fe(i,j )=ad_fe(i,j )-adfac
238 ad_fe(i,j+1)=ad_fe(i,j+1)+adfac
248 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
251 cff=0.25_r8*(diff2(i,j,itrc)+diff2(i,j-1,itrc))* &
254#ifdef WET_DRY_NOT_YET
255 fe(i,j)=fe(i,j)*vmask_wet(i,j)
260 ad_fe(i,j)=ad_fe(i,j)*vmask(i,j)
262#if defined TS_MIX_STABILITY
276 adfac1=adfac*(0.75_r8*(t(i,j ,k,nrhs,itrc)- &
277 & t(i,j-1,k,nrhs,itrc))+ &
278 & 0.25_r8*(t(i,j ,k,nstp,itrc)- &
279 & t(i,j-1,k,nstp,itrc)))
280 adfac2=adfac*(hz(i,j,k)+hz(i,j-1,k))
281 adfac3=adfac2*0.75_r8
282 adfac4=adfac2*0.25_r8
283 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
284 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
285 ad_t(i,j-1,k,nrhs,itrc)=ad_t(i,j-1,k,nrhs,itrc)-adfac3
286 ad_t(i,j ,k,nrhs,itrc)=ad_t(i,j ,k,nrhs,itrc)+adfac3
287 ad_t(i,j-1,k,nstp,itrc)=ad_t(i,j-1,k,nstp,itrc)-adfac4
288 ad_t(i,j ,k,nstp,itrc)=ad_t(i,j ,k,nstp,itrc)+adfac4
290#elif defined TS_MIX_CLIMA
303 adfac1=adfac*((t(i,j ,k,nrhs,itrc)- &
304 & tclm(i,j ,k,itrc))- &
305 & (t(i,j-1,k,nrhs,itrc)- &
306 & tclm(i,j-1,k,itrc)))
307 adfac2=adfac*(hz(i,j,k)+hz(i,j-1,k))
308 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
309 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
310 ad_t(i,j-1,k,nrhs,itrc)=ad_t(i,j-1,k,nrhs,itrc)-adfac2
311 ad_t(i,j ,k,nrhs,itrc)=ad_t(i,j ,k,nrhs,itrc)+adfac2
323 adfac1=adfac*(t(i,j,k,nrhs,itrc)-t(i,j-1,k,nrhs,itrc))
324 adfac2=adfac*(hz(i,j,k)+hz(i,j-1,k))
325 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
326 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
327 ad_t(i,j-1,k,nrhs,itrc)=ad_t(i,j-1,k,nrhs,itrc)-adfac2
328 ad_t(i,j ,k,nrhs,itrc)=ad_t(i,j ,k,nrhs,itrc)+adfac2
341 adfac1=adfac*(t(i,j,k,nrhs,itrc)-t(i,j-1,k,nrhs,itrc))
342 adfac2=adfac*(hz(i,j,k)+hz(i,j-1,k))
343 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
344 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
345 ad_t(i,j-1,k,nrhs,itrc)=ad_t(i,j-1,k,nrhs,itrc)-adfac2
346 ad_t(i,j ,k,nrhs,itrc)=ad_t(i,j ,k,nrhs,itrc)+adfac2
354 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
357 cff=0.25_r8*(diff2(i,j,itrc)+diff2(i-1,j,itrc))* &
360#ifdef WET_DRY_NOT_YET
361 fx(i,j)=fx(i,j)*umask_wet(i,j)
366 ad_fx(i,j)=ad_fx(i,j)*umask(i,j)
368#if defined TS_MIX_STABILITY
382 adfac1=adfac*(0.75_r8*(t(i ,j,k,nrhs,itrc)- &
383 & t(i-1,j,k,nrhs,itrc))+ &
384 & 0.25_r8*(t(i ,j,k,nstp,itrc)- &
385 & t(i-1,j,k,nstp,itrc)))
386 adfac2=adfac*(hz(i,j,k)+hz(i-1,j,k))
387 adfac3=adfac2*0.75_r8
388 adfac4=adfac2*0.25_r8
389 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
390 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
391 ad_t(i-1,j,k,nrhs,itrc)=ad_t(i-1,j,k,nrhs,itrc)-adfac3
392 ad_t(i ,j,k,nrhs,itrc)=ad_t(i ,j,k,nrhs,itrc)+adfac3
393 ad_t(i-1,j,k,nstp,itrc)=ad_t(i-1,j,k,nstp,itrc)-adfac4
394 ad_t(i ,j,k,nstp,itrc)=ad_t(i ,j,k,nstp,itrc)+adfac4
396#elif defined TS_MIX_CLIMA
409 adfac1=adfac*((t(i ,j,k,nrhs,itrc)- &
410 & tclm(i ,j,k,itrc))- &
411 & (t(i-1,j,k,nrhs,itrc)- &
412 & tclm(i-1,j,k,itrc)))
413 adfac2=adfac*(hz(i,j,k)+hz(i-1,j,k))
414 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
415 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
416 ad_t(i-1,j,k,nrhs,itrc)=ad_t(i-1,j,k,nrhs,itrc)-adfac2
417 ad_t(i ,j,k,nrhs,itrc)=ad_t(i ,j,k,nrhs,itrc)+adfac2
429 adfac1=adfac*(t(i,j,k,nrhs,itrc)-t(i-1,j,k,nrhs,itrc))
430 adfac2=adfac*(hz(i,j,k)+hz(i-1,j,k))
431 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
432 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
433 ad_t(i-1,j,k,nrhs,itrc)=ad_t(i-1,j,k,nrhs,itrc)-adfac2
434 ad_t(i ,j,k,nrhs,itrc)=ad_t(i ,j,k,nrhs,itrc)+adfac2
447 adfac1=adfac*(t(i,j,k,nrhs,itrc)-t(i-1,j,k,nrhs,itrc))
448 adfac2=adfac*(hz(i,j,k)+hz(i-1,j,k))
449 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
450 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
451 ad_t(i-1,j,k,nrhs,itrc)=ad_t(i-1,j,k,nrhs,itrc)-adfac2
452 ad_t(i ,j,k,nrhs,itrc)=ad_t(i ,j,k,nrhs,itrc)+adfac2