95 & LBi, UBi, LBj, UBj, &
96 & IminS, ImaxS, JminS, JmaxS, &
102 & umask_wet, vmask_wet, &
104 & Hz, pmon_u, pnom_v, pm, pn, &
106# ifdef TS_U3ADV_SPLIT
107 & diff3d_u, diff3d_v, &
129 integer,
intent(in) :: ng, tile
130 integer,
intent(in) :: LBi, UBi, LBj, UBj
131 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
132 integer,
intent(in) :: nrhs, nstp, nnew
136 real(r8),
intent(in) :: umask(LBi:,LBj:)
137 real(r8),
intent(in) :: vmask(LBi:,LBj:)
140 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
141 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
144# ifdef TS_U3ADV_SPLIT
145 real(r8),
intent(in) :: diff3d_u(LBi:,LBj:,:)
146 real(r8),
intent(in) :: diff3d_v(LBi:,LBj:,:)
148 real(r8),
intent(in) :: diff3d_r(LBi:,LBj:,:)
151 real(r8),
intent(in) :: diff4(LBi:,LBj:,:)
153 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
154 real(r8),
intent(in) :: pmon_u(LBi:,LBj:)
155 real(r8),
intent(in) :: pnom_v(LBi:,LBj:)
156 real(r8),
intent(in) :: pm(LBi:,LBj:)
157 real(r8),
intent(in) :: pn(LBi:,LBj:)
159 real(r8),
intent(in) :: tclm(LBi:,LBj:,:,:)
161# ifdef DIAGNOSTICS_TS
162 real(r8),
intent(inout) :: DiaTwrk(LBi:,LBj:,:,:,:)
164 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
167 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
168 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
171 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
172 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
175# ifdef TS_U3ADV_SPLIT
176 real(r8),
intent(in) :: diff3d_u(LBi:UBi,LBj:UBj,N(ng))
177 real(r8),
intent(in) :: diff3d_v(LBi:UBi,LBj:UBj,N(ng))
179 real(r8),
intent(in) :: diff3d_r(LBi:UBi,LBj:UBj,N(ng))
182 real(r8),
intent(in) :: diff4(LBi:UBi,LBj:UBj,NT(ng))
184 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
185 real(r8),
intent(in) :: pmon_u(LBi:UBi,LBj:UBj)
186 real(r8),
intent(in) :: pnom_v(LBi:UBi,LBj:UBj)
187 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
188 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
190 real(r8),
intent(in) :: tclm(LBi:UBi,LBj:UBj,N(ng),NT(ng))
192# ifdef DIAGNOSTICS_TS
193 real(r8),
intent(inout) :: DiaTwrk(LBi:UBi,LBj:UBj,N(ng),NT(ng), &
196 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
201 integer :: Imin, Imax, Jmin, Jmax
202 integer :: i, itrc, j, k
204 real(r8) :: cff, cff1, cff2, cff3
206 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FE
207 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FX
208 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: LapT
210#include "set_bounds.h"
216#ifdef TS_MIX_STABILITY
229 imax=min(iend+1,
lm(ng))
236 jmax=min(jend+1,
mm(ng))
246# ifdef TS_U3ADV_SPLIT
247 cff=0.5_r8*diff3d_u(i,j,k)*pmon_u(i,j)
249 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
253 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
260 cff=cff*umask_wet(i,j)
262#if defined TS_MIX_STABILITY
264 & (hz(i,j,k)+hz(i-1,j,k))* &
265 & (0.75_r8*(t(i ,j,k,nrhs,itrc)- &
266 & t(i-1,j,k,nrhs,itrc))+ &
267 & 0.25_r8*(t(i ,j,k,nstp,itrc)- &
268 & t(i-1,j,k,nstp,itrc)))
269#elif defined TS_MIX_CLIMA
272 & (hz(i,j,k)+hz(i-1,j,k))* &
273 & ((t(i ,j,k,nrhs,itrc)-tclm(i ,j,k,itrc))- &
274 & (t(i-1,j,k,nrhs,itrc)-tclm(i-1,j,k,itrc)))
277 & (hz(i,j,k)+hz(i-1,j,k))* &
278 & (t(i ,j,k,nrhs,itrc)- &
279 & t(i-1,j,k,nrhs,itrc))
283 & (hz(i,j,k)+hz(i-1,j,k))* &
284 & (t(i ,j,k,nrhs,itrc)- &
285 & t(i-1,j,k,nrhs,itrc))
292# ifdef TS_U3ADV_SPLIT
293 cff=0.5_r8*diff3d_v(i,j,k)*pnom_v(i,j)
295 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
299 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
306 cff=cff*vmask_wet(i,j)
308#if defined TS_MIX_STABILITY
310 & (hz(i,j,k)+hz(i,j-1,k))* &
311 & (0.75_r8*(t(i,j ,k,nrhs,itrc)- &
312 & t(i,j-1,k,nrhs,itrc))+ &
313 & 0.25_r8*(t(i,j ,k,nstp,itrc)- &
314 & t(i,j-1,k,nstp,itrc)))
315#elif defined TS_MIX_CLIMA
318 & (hz(i,j,k)+hz(i,j-1,k))* &
319 & ((t(i,j ,k,nrhs,itrc)-tclm(i,j ,k,itrc))- &
320 & (t(i,j-1,k,nrhs,itrc)-tclm(i,j-1,k,itrc)))
323 & (hz(i,j,k)+hz(i,j-1,k))* &
324 & (t(i,j ,k,nrhs,itrc)- &
325 & t(i,j-1,k,nrhs,itrc))
329 & (hz(i,j,k)+hz(i,j-1,k))* &
330 & (t(i,j ,k,nrhs,itrc)- &
331 & t(i,j-1,k,nrhs,itrc))
342 lapt(i,j)=pm(i,j)*pn(i,j)*cff* &
343 & (fx(i+1,j)-fx(i,j)+ &
352 IF (
domain(ng)%Western_Edge(tile))
THEN
355 lapt(istr-1,j)=0.0_r8
359 lapt(istr-1,j)=lapt(istr,j)
366 IF (
domain(ng)%Eastern_Edge(tile))
THEN
369 lapt(iend+1,j)=0.0_r8
373 lapt(iend+1,j)=lapt(iend,j)
380 IF (
domain(ng)%Southern_Edge(tile))
THEN
383 lapt(i,jstr-1)=0.0_r8
387 lapt(i,jstr-1)=lapt(i,jstr)
394 IF (
domain(ng)%Northern_Edge(tile))
THEN
397 lapt(i,jend+1)=0.0_r8
401 lapt(i,jend+1)=lapt(i,jend)
412# ifdef TS_U3ADV_SPLIT
413 cff=0.5_r8*diff3d_u(i,j,k)*pmon_u(i,j)
415 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i-1,j,k))* &
419 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i-1,j,itrc))* &
423 & (hz(i,j,k)+hz(i-1,j,k))* &
424 & (lapt(i,j)-lapt(i-1,j))
426 fx(i,j)=fx(i,j)*umask(i,j)
429 fx(i,j)=fx(i,j)*umask_wet(i,j)
436# ifdef TS_U3ADV_SPLIT
437 cff=0.5_r8*diff3d_v(i,j,k)*pnom_v(i,j)
439 cff=0.25_r8*(diff3d_r(i,j,k)+diff3d_r(i,j-1,k))* &
443 cff=0.25_r8*(diff4(i,j,itrc)+diff4(i,j-1,itrc))* &
447 & (hz(i,j,k)+hz(i,j-1,k))* &
448 & (lapt(i,j)-lapt(i,j-1))
450 fe(i,j)=fe(i,j)*vmask(i,j)
453 fe(i,j)=fe(i,j)*vmask_wet(i,j)
462 cff=
dt(ng)*pm(i,j)*pn(i,j)
463 cff1=cff*(fx(i+1,j )-fx(i,j))
464 cff2=cff*(fe(i ,j+1)-fe(i,j))
466 t(i,j,k,nnew,itrc)=t(i,j,k,nnew,itrc)-cff3
468 diatwrk(i,j,k,itrc,
itxdif)=-cff1
469 diatwrk(i,j,k,itrc,
itydif)=-cff2
470 diatwrk(i,j,k,itrc,
ithdif)=-cff3