92 & LBi, UBi, LBj, UBj, &
93 & IminS, ImaxS, JminS, JmaxS, &
99 & umask_wet, vmask_wet, &
101 & om_v, on_u, pm, pn, &
123 integer,
intent(in) :: ng, tile
124 integer,
intent(in) :: LBi, UBi, LBj, UBj
125 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
126 integer,
intent(in) :: nrhs, nstp, nnew
130 real(r8),
intent(in) :: umask(LBi:,LBj:)
131 real(r8),
intent(in) :: vmask(LBi:,LBj:)
134 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
135 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
138 real(r8),
intent(in) :: diff3d_r(LBi:,LBj:,:)
140 real(r8),
intent(in) :: diff2(LBi:,LBj:,:)
142 real(r8),
intent(in) :: om_v(LBi:,LBj:)
143 real(r8),
intent(in) :: on_u(LBi:,LBj:)
144 real(r8),
intent(in) :: pm(LBi:,LBj:)
145 real(r8),
intent(in) :: pn(LBi:,LBj:)
146 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
147 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
148 real(r8),
intent(in) :: pden(LBi:,LBj:,:)
150 real(r8),
intent(in) :: tclm(LBi:,LBj:,:,:)
152# ifdef DIAGNOSTICS_TS
153 real(r8),
intent(inout) :: DiaTwrk(LBi:,LBj:,:,:,:)
155 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
158 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
159 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
162 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
163 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
166 real(r8),
intent(in) :: diff3d_r(LBi:UBi,LBj:UBj,N(ng))
168 real(r8),
intent(in) :: diff2(LBi:UBi,LBj:UBj,NT(ng))
170 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
171 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
172 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
173 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
174 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
175 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
176 real(r8),
intent(in) :: pden(LBi:UBi,LBj:UBj,N(ng))
178 real(r8),
intent(in) :: tclm(LBi:UBi,LBj:UBj,N(ng),NT(ng))
180# ifdef DIAGNOSTICS_TS
181 real(r8),
intent(inout) :: DiaTwrk(LBi:UBi,LBj:UBj,N(ng),NT(ng), &
184 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
189 integer :: i, itrc, j, k, k1, k2
191 real(r8),
parameter :: eps = 0.5_r8
192 real(r8),
parameter :: small = 1.0e-14_r8
193 real(r8),
parameter :: slope_max = 0.0001_r8
194 real(r8),
parameter :: strat_min = 0.1_r8
196 real(r8) :: cff, cff1, cff2, cff3, cff4
198 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FE
199 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FX
201 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: FS
202 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dRde
203 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dRdx
204 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTde
205 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTdr
206 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTdx
208#include "set_bounds.h"
222 t_loop :
DO itrc=1,nt(ng)
224 k_loop :
DO k=0,n(ng)
230 cff=0.5_r8*(pm(i,j)+pm(i-1,j))
235 cff=cff*umask_wet(i,j)
237 drdx(i,j,k2)=cff*(pden(i ,j,k+1)- &
239#if defined TS_MIX_STABILITY
240 dtdx(i,j,k2)=cff*(0.75_r8*(t(i ,j,k+1,nrhs,itrc)- &
241 & t(i-1,j,k+1,nrhs,itrc))+ &
242 & 0.25_r8*(t(i ,j,k+1,nstp,itrc)- &
243 & t(i-1,j,k+1,nstp,itrc)))
244#elif defined TS_MIX_CLIMA
246 dtdx(i,j,k2)=cff*((t(i ,j,k+1,nrhs,itrc)- &
247 & tclm(i ,j,k+1,itrc))- &
248 & (t(i-1,j,k+1,nrhs,itrc)- &
249 & tclm(i-1,j,k+1,itrc)))
251 dtdx(i,j,k2)=cff*(t(i ,j,k+1,nrhs,itrc)- &
252 & t(i-1,j,k+1,nrhs,itrc))
255 dtdx(i,j,k2)=cff*(t(i ,j,k+1,nrhs,itrc)- &
256 & t(i-1,j,k+1,nrhs,itrc))
262 cff=0.5_r8*(pn(i,j)+pn(i,j-1))
267 cff=cff*vmask_wet(i,j)
269 drde(i,j,k2)=cff*(pden(i,j ,k+1)- &
271#if defined TS_MIX_STABILITY
272 dtde(i,j,k2)=cff*(0.75_r8*(t(i,j ,k+1,nrhs,itrc)- &
273 & t(i,j-1,k+1,nrhs,itrc))+ &
274 & 0.25_r8*(t(i,j ,k+1,nstp,itrc)- &
275 & t(i,j-1,k+1,nstp,itrc)))
276#elif defined TS_MIX_CLIMA
278 dtde(i,j,k2)=cff*((t(i,j ,k+1,nrhs,itrc)- &
279 & tclm(i,j ,k+1,itrc))- &
280 & (t(i,j-1,k+1,nrhs,itrc)- &
281 & tclm(i,j-1,k+1,itrc)))
283 dtde(i,j,k2)=cff*(t(i,j ,k+1,nrhs,itrc)- &
284 & t(i,j-1,k+1,nrhs,itrc))
287 dtde(i,j,k2)=cff*(t(i,j ,k+1,nrhs,itrc)- &
288 & t(i,j-1,k+1,nrhs,itrc))
293 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
303#if defined TS_MIX_MAX_SLOPE
304 cff1=sqrt(drdx(i,j,k2)**2+drdx(i+1,j,k2)**2+ &
305 & drdx(i,j,k1)**2+drdx(i+1,j,k1)**2+ &
306 & drde(i,j,k2)**2+drde(i,j+1,k2)**2+ &
307 & drde(i,j,k1)**2+drde(i,j+1,k1)**2)
308 cff2=0.25_r8*slope_max* &
309 & (z_r(i,j,k+1)-z_r(i,j,k))*cff1
310 cff3=max(pden(i,j,k)-pden(i,j,k+1),small)
313#elif defined TS_MIX_MIN_STRAT
314 cff1=max(pden(i,j,k)-pden(i,j,k+1), &
315 & strat_min*(z_r(i,j,k+1)-z_r(i,j,k)))
318 cff1=max(pden(i,j,k)-pden(i,j,k+1),eps)
321#if defined TS_MIX_STABILITY
322 dtdr(i,j,k2)=cff*(0.75_r8*(t(i,j,k+1,nrhs,itrc)- &
323 & t(i,j,k ,nrhs,itrc))+ &
324 & 0.25_r8*(t(i,j,k+1,nstp,itrc)- &
325 & t(i,j,k ,nstp,itrc)))
326#elif defined TS_MIX_CLIMA
328 dtdr(i,j,k2)=cff*((t(i,j,k+1,nrhs,itrc)- &
329 & tclm(i,j,k+1,itrc))- &
330 & (t(i,j,k ,nrhs,itrc)- &
331 & tclm(i,j,k ,itrc)))
333 dtdr(i,j,k2)=cff*(t(i,j,k+1,nrhs,itrc)- &
334 & t(i,j,k ,nrhs,itrc))
337 dtdr(i,j,k2)=cff*(t(i,j,k+1,nrhs,itrc)- &
338 & t(i,j,k ,nrhs,itrc))
340 fs(i,j,k2)=cff*(z_r(i,j,k+1)-z_r(i,j,k))
352 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
355 cff=0.25_r8*(diff2(i,j,itrc)+diff2(i-1,j,itrc))* &
359 & (hz(i,j,k)+hz(i-1,j,k))* &
361 & 0.5_r8*(max(drdx(i,j,k1),0.0_r8)* &
364 & min(drdx(i,j,k1),0.0_r8)* &
372 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
375 cff=0.25_r8*(diff2(i,j,itrc)+diff2(i,j-1,itrc))* &
379 & (hz(i,j,k)+hz(i,j-1,k))* &
381 & 0.5_r8*(max(drde(i,j,k1),0.0_r8)* &
384 & min(drde(i,j,k1),0.0_r8)* &
392 cff1=max(drdx(i ,j,k1),0.0_r8)
393 cff2=max(drdx(i+1,j,k2),0.0_r8)
394 cff3=min(drdx(i ,j,k2),0.0_r8)
395 cff4=min(drdx(i+1,j,k1),0.0_r8)
396 cff=cff1*(cff1*dtdr(i,j,k2)-dtdx(i ,j,k1))+ &
397 & cff2*(cff2*dtdr(i,j,k2)-dtdx(i+1,j,k2))+ &
398 & cff3*(cff3*dtdr(i,j,k2)-dtdx(i ,j,k2))+ &
399 & cff4*(cff4*dtdr(i,j,k2)-dtdx(i+1,j,k1))
400 cff1=max(drde(i,j ,k1),0.0_r8)
401 cff2=max(drde(i,j+1,k2),0.0_r8)
402 cff3=min(drde(i,j ,k2),0.0_r8)
403 cff4=min(drde(i,j+1,k1),0.0_r8)
405 & cff1*(cff1*dtdr(i,j,k2)-dtde(i,j ,k1))+ &
406 & cff2*(cff2*dtdr(i,j,k2)-dtde(i,j+1,k2))+ &
407 & cff3*(cff3*dtdr(i,j,k2)-dtde(i,j ,k2))+ &
408 & cff4*(cff4*dtdr(i,j,k2)-dtde(i,j+1,k1))
410 fs(i,j,k2)=0.5_r8*cff*diff3d_r(i,j,k)*fs(i,j,k2)
412 fs(i,j,k2)=0.5_r8*cff*diff2(i,j,itrc)*fs(i,j,k2)
422 cff=
dt(ng)*pm(i,j)*pn(i,j)
423 cff1=cff*(fx(i+1,j )-fx(i,j))
424 cff2=cff*(fe(i ,j+1)-fe(i,j))
425 cff3=
dt(ng)*(fs(i,j,k2)-fs(i,j,k1))
427 t(i,j,k,nnew,itrc)=t(i,j,k,nnew,itrc)+cff4
429 diatwrk(i,j,k,itrc,
itxdif)=cff1
430 diatwrk(i,j,k,itrc,
itydif)=cff2
431 diatwrk(i,j,k,itrc,
itsdif)=cff3
432 diatwrk(i,j,k,itrc,
ithdif)=cff4