91 & LBi, UBi, LBj, UBj, &
92 & IminS, ImaxS, JminS, JmaxS, &
98 & umask_wet, vmask_wet, &
100 & om_v, on_u, pm, pn, &
121 integer,
intent(in) :: ng, tile
122 integer,
intent(in) :: LBi, UBi, LBj, UBj
123 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
124 integer,
intent(in) :: nrhs, nstp, nnew
128 real(r8),
intent(in) :: umask(LBi:,LBj:)
129 real(r8),
intent(in) :: vmask(LBi:,LBj:)
132 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
133 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
136 real(r8),
intent(in) :: diff3d_r(LBi:,LBj:,:)
138 real(r8),
intent(in) :: diff2(LBi:,LBj:,:)
140 real(r8),
intent(in) :: om_v(LBi:,LBj:)
141 real(r8),
intent(in) :: on_u(LBi:,LBj:)
142 real(r8),
intent(in) :: pm(LBi:,LBj:)
143 real(r8),
intent(in) :: pn(LBi:,LBj:)
144 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
145 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
147 real(r8),
intent(in) :: tclm(LBi:,LBj:,:,:)
149# ifdef DIAGNOSTICS_TS
150 real(r8),
intent(inout) :: DiaTwrk(LBi:,LBj:,:,:,:)
152 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
155 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
156 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
159 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
160 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
163 real(r8),
intent(in) :: diff3d_r(LBi:UBi,LBj:UBj,N(ng))
165 real(r8),
intent(in) :: diff2(LBi:UBi,LBj:UBj,NT(ng))
167 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
168 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
169 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
170 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
171 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
172 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
174 real(r8),
intent(in) :: tclm(LBi:UBi,LBj:UBj,N(ng),NT(ng))
176# ifdef DIAGNOSTICS_TS
177 real(r8),
intent(inout) :: DiaTwrk(LBi:UBi,LBj:UBj,N(ng),NT(ng), &
180 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
185 integer :: i, itrc, j, k, k1, k2
187 real(r8) :: cff, cff1, cff2, cff3, cff4
189 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FE
190 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FX
192 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: FS
193 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTdz
194 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTdx
195 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dTde
196 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZdx
197 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZde
199#include "set_bounds.h"
213#ifdef TS_MIX_STABILITY
219 t_loop :
DO itrc=1,nt(ng)
221 k_loop :
DO k=0,n(ng)
227 cff=0.5_r8*(pm(i,j)+pm(i-1,j))
232 cff=cff*umask_wet(i,j)
234 dzdx(i,j,k2)=cff*(z_r(i ,j,k+1)- &
236#if defined TS_MIX_STABILITY
237 dtdx(i,j,k2)=cff*(0.75_r8*(t(i ,j,k+1,nrhs,itrc)- &
238 & t(i-1,j,k+1,nrhs,itrc))+ &
239 & 0.25_r8*(t(i ,j,k+1,nstp,itrc)- &
240 & t(i-1,j,k+1,nstp,itrc)))
241#elif defined TS_MIX_CLIMA
243 dtdx(i,j,k2)=cff*((t(i ,j,k+1,nrhs,itrc)- &
244 & tclm(i ,j,k+1,itrc))- &
245 & (t(i-1,j,k+1,nrhs,itrc)- &
246 & tclm(i-1,j,k+1,itrc)))
248 dtdx(i,j,k2)=cff*(t(i ,j,k+1,nrhs,itrc)- &
249 & t(i-1,j,k+1,nrhs,itrc))
252 dtdx(i,j,k2)=cff*(t(i ,j,k+1,nrhs,itrc)- &
253 & t(i-1,j,k+1,nrhs,itrc))
259 cff=0.5_r8*(pn(i,j)+pn(i,j-1))
264 cff=cff*vmask_wet(i,j)
266 dzde(i,j,k2)=cff*(z_r(i,j ,k+1)- &
268#if defined TS_MIX_STABILITY
269 dtde(i,j,k2)=cff*(0.75_r8*(t(i,j ,k+1,nrhs,itrc)- &
270 & t(i,j-1,k+1,nrhs,itrc))+ &
271 & 0.25_r8*(t(i,j ,k+1,nstp,itrc)- &
272 & t(i,j-1,k+1,nstp,itrc)))
273#elif defined TS_MIX_CLIMA
275 dtde(i,j,k2)=cff*((t(i,j ,k+1,nrhs,itrc)- &
276 & tclm(i,j ,k+1,itrc))- &
277 & (t(i,j-1,k+1,nrhs,itrc)- &
278 & tclm(i,j-1,k+1,itrc)))
280 dtde(i,j,k2)=cff*(t(i,j ,k+1,nrhs,itrc)- &
281 & t(i,j-1,k+1,nrhs,itrc))
284 dtde(i,j,k2)=cff*(t(i,j ,k+1,nrhs,itrc)- &
285 & t(i,j-1,k+1,nrhs,itrc))
290 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
300 cff=1.0_r8/(z_r(i,j,k+1)-z_r(i,j,k))
301#if defined TS_MIX_STABILITY
302 dtdz(i,j,k2)=cff*(0.75_r8*(t(i,j,k+1,nrhs,itrc)- &
303 & t(i,j,k ,nrhs,itrc))+ &
304 & 0.25_r8*(t(i,j,k+1,nstp,itrc)- &
305 & t(i,j,k ,nstp,itrc)))
306#elif defined TS_MIX_CLIMA
308 dtdz(i,j,k2)=cff*((t(i,j,k+1,nrhs,itrc)- &
309 & tclm(i,j,k+1,itrc))- &
310 & (t(i,j,k ,nrhs,itrc)- &
311 & tclm(i,j,k ,itrc)))
313 dtdz(i,j,k2)=cff*(t(i,j,k+1,nrhs,itrc)- &
314 & t(i,j,k ,nrhs,itrc))
317 dtdz(i,j,k2)=cff*(t(i,j,k+1,nrhs,itrc)- &
318 & t(i,j,k ,nrhs,itrc))
331 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
334 cff=0.25_r8*(diff2(i,j,itrc)+diff2(i-1,j,itrc))* &
338 & (hz(i,j,k)+hz(i-1,j,k))* &
340 & 0.5_r8*(min(dzdx(i,j,k1),0.0_r8)* &
343 & max(dzdx(i,j,k1),0.0_r8)* &
351 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
354 cff=0.25_r8*(diff2(i,j,itrc)+diff2(i,j-1,itrc))* &
358 & (hz(i,j,k)+hz(i,j-1,k))* &
360 & 0.5_r8*(min(dzde(i,j,k1),0.0_r8)* &
363 & max(dzde(i,j,k1),0.0_r8)* &
372 cff=0.5_r8*diff3d_r(i,j,k)
374 cff=0.5_r8*diff2(i,j,itrc)
376 cff1=min(dzdx(i ,j,k1),0.0_r8)
377 cff2=min(dzdx(i+1,j,k2),0.0_r8)
378 cff3=max(dzdx(i ,j,k2),0.0_r8)
379 cff4=max(dzdx(i+1,j,k1),0.0_r8)
381 & (cff1*(cff1*dtdz(i,j,k2)-dtdx(i ,j,k1))+ &
382 & cff2*(cff2*dtdz(i,j,k2)-dtdx(i+1,j,k2))+ &
383 & cff3*(cff3*dtdz(i,j,k2)-dtdx(i ,j,k2))+ &
384 & cff4*(cff4*dtdz(i,j,k2)-dtdx(i+1,j,k1)))
385 cff1=min(dzde(i,j ,k1),0.0_r8)
386 cff2=min(dzde(i,j+1,k2),0.0_r8)
387 cff3=max(dzde(i,j ,k2),0.0_r8)
388 cff4=max(dzde(i,j+1,k1),0.0_r8)
389 fs(i,j,k2)=fs(i,j,k2)+ &
391 & (cff1*(cff1*dtdz(i,j,k2)-dtde(i,j ,k1))+ &
392 & cff2*(cff2*dtdz(i,j,k2)-dtde(i,j+1,k2))+ &
393 & cff3*(cff3*dtdz(i,j,k2)-dtde(i,j ,k2))+ &
394 & cff4*(cff4*dtdz(i,j,k2)-dtde(i,j+1,k1)))
403 cff=
dt(ng)*pm(i,j)*pn(i,j)
404 cff1=cff*(fx(i+1,j )-fx(i,j))
405 cff2=cff*(fe(i ,j+1)-fe(i,j))
406 cff3=
dt(ng)*(fs(i,j,k2)-fs(i,j,k1))
408 t(i,j,k,nnew,itrc)=t(i,j,k,nnew,itrc)+cff4
410 diatwrk(i,j,k,itrc,
itxdif)=cff1
411 diatwrk(i,j,k,itrc,
itydif)=cff2
412 diatwrk(i,j,k,itrc,
itsdif)=cff3
413 diatwrk(i,j,k,itrc,
ithdif)=cff4