157
158
162
163
164
165 integer, intent(in) :: ng, tile
166 integer, intent(in) :: LBi, UBi, LBj, UBj
167 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
168 integer, intent(in) :: nrhs, nnew
169
170#ifdef ASSUMED_SHAPE
171# ifdef MASKING
172 real(r8), intent(in) :: pmask(LBi:,LBj:)
173 real(r8), intent(in) :: rmask(LBi:,LBj:)
174 real(r8), intent(in) :: umask(LBi:,LBj:)
175 real(r8), intent(in) :: vmask(LBi:,LBj:)
176# endif
177 real(r8), intent(in) :: om_p(LBi:,LBj:)
178 real(r8), intent(in) :: om_r(LBi:,LBj:)
179 real(r8), intent(in) :: om_u(LBi:,LBj:)
180 real(r8), intent(in) :: om_v(LBi:,LBj:)
181 real(r8), intent(in) :: on_p(LBi:,LBj:)
182 real(r8), intent(in) :: on_r(LBi:,LBj:)
183 real(r8), intent(in) :: on_u(LBi:,LBj:)
184 real(r8), intent(in) :: on_v(LBi:,LBj:)
185 real(r8), intent(in) :: pm(LBi:,LBj:)
186 real(r8), intent(in) :: pn(LBi:,LBj:)
187 real(r8), intent(in) :: Hz(LBi:,LBj:,:)
188 real(r8), intent(in) :: tl_Hz(LBi:,LBj:,:)
189 real(r8), intent(in) :: z_r(LBi:,LBj:,:)
190 real(r8), intent(in) :: tl_z_r(LBi:,LBj:,:)
191# ifdef VISC_3DCOEF
192# ifdef UV_U3ADV_SPLIT
193 real(r8), intent(in) :: Uvis3d_r(LBi:,LBj:,:)
194 real(r8), intent(in) :: Vvis3d_r(LBi:,LBj:,:)
195# else
196 real(r8), intent(in) :: visc3d_r(LBi:,LBj:,:)
197# endif
198# else
199 real(r8), intent(in) :: visc4_p(LBi:,LBj:)
200 real(r8), intent(in) :: visc4_r(LBi:,LBj:)
201# endif
202 real(r8), intent(in) :: u(LBi:,LBj:,:,:)
203 real(r8), intent(in) :: v(LBi:,LBj:,:,:)
204
205# ifdef DIAGNOSTICS_UV
206
207
208
209
210# endif
211# ifdef VISC_3DCOEF
212# ifdef UV_U3ADV_SPLIT
213 real(r8), intent(inout) :: tl_Uvis3d_r(LBi:,LBj:,:)
214 real(r8), intent(inout) :: tl_Vvis3d_r(LBi:,LBj:,:)
215# else
216 real(r8), intent(inout) :: tl_visc3d_r(LBi:,LBj:,:)
217# endif
218# endif
219 real(r8), intent(inout) :: tl_rufrc(LBi:,LBj:)
220 real(r8), intent(inout) :: tl_rvfrc(LBi:,LBj:)
221 real(r8), intent(inout) :: tl_u(LBi:,LBj:,:,:)
222 real(r8), intent(inout) :: tl_v(LBi:,LBj:,:,:)
223#else
224# ifdef MASKING
225 real(r8), intent(in) :: pmask(LBi:UBi,LBj:UBj)
226 real(r8), intent(in) :: rmask(LBi:UBi,LBj:UBj)
227 real(r8), intent(in) :: umask(LBi:UBi,LBj:UBj)
228 real(r8), intent(in) :: vmask(LBi:UBi,LBj:UBj)
229# endif
230 real(r8), intent(in) :: om_p(LBi:UBi,LBj:UBj)
231 real(r8), intent(in) :: om_r(LBi:UBi,LBj:UBj)
232 real(r8), intent(in) :: om_u(LBi:UBi,LBj:UBj)
233 real(r8), intent(in) :: om_v(LBi:UBi,LBj:UBj)
234 real(r8), intent(in) :: on_p(LBi:UBi,LBj:UBj)
235 real(r8), intent(in) :: on_r(LBi:UBi,LBj:UBj)
236 real(r8), intent(in) :: on_u(LBi:UBi,LBj:UBj)
237 real(r8), intent(in) :: on_v(LBi:UBi,LBj:UBj)
238 real(r8), intent(in) :: pm(LBi:UBi,LBj:UBj)
239 real(r8), intent(in) :: pn(LBi:UBi,LBj:UBj)
240 real(r8), intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
241 real(r8), intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
242 real(r8), intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
243 real(r8), intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
244# ifdef VISC_3DCOEF
245# ifdef UV_U3ADV_SPLIT
246 real(r8), intent(in) :: Uvis3d_r(LBi:UBi,LBj:UBj,N(ng))
247 real(r8), intent(in) :: Vvis3d_r(LBi:UBi,LBj:UBj,N(ng))
248# else
249 real(r8), intent(in) :: visc3d_r(LBi:UBi,LBj:UBj,N(ng))
250# endif
251# else
252 real(r8), intent(in) :: visc4_p(LBi:UBi,LBj:UBj)
253 real(r8), intent(in) :: visc4_r(LBi:UBi,LBj:UBj)
254# endif
255 real(r8), intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
256 real(r8), intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
257
258# ifdef DIAGNOSTICS_UV
259
260
261
262
263# endif
264# ifdef VISC_3DCOEF
265# ifdef UV_U3ADV_SPLIT
266 real(r8), intent(inout) :: tl_Uvis3d_r(LBi:UBi,LBj:UBj,N(ng))
267 real(r8), intent(inout) :: tl_Vvis3d_r(LBi:UBi,LBj:UBj,N(ng))
268# else
269 real(r8), intent(inout) :: tl_visc3d_r(LBi:UBi,LBj:UBj,N(ng))
270# endif
271# endif
272 real(r8), intent(inout) :: tl_rufrc(LBi:UBi,LBj:UBj)
273 real(r8), intent(inout) :: tl_rvfrc(LBi:UBi,LBj:UBj)
274 real(r8), intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
275 real(r8), intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
276#endif
277
278
279
280 integer :: i, j, k, k1, k2
281
282 real(r8) :: cff, fac1, fac2, pm_p, pn_p
283 real(r8) :: cff1, cff2, cff3, cff4
284 real(r8) :: cff5, cff6, cff7, cff8
285 real(r8) :: dmUdz, dnUdz, dmVdz, dnVdz
286#ifdef VISC_3DCOEF
287 real(r8) :: Uvis_p, Vvis_p, visc_p
288 real(r8) :: tl_fac1, tl_fac2, tl_Uvis_p, tl_Vvis_p, tl_visc_p
289#endif
290 real(r8) :: tl_cff
291 real(r8) :: tl_cff1, tl_cff2, tl_cff3, tl_cff4
292 real(r8) :: tl_cff5, tl_cff6, tl_cff7, tl_cff8
293 real(r8) :: tl_dmUdz, tl_dnUdz, tl_dmVdz, tl_dnVdz
294
295 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: LapU
296 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: LapV
297
298 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: tl_LapU
299 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: tl_LapV
300
301 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
302 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
303 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
304 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
305
306 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: tl_UFe
307 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: tl_UFx
308 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: tl_VFe
309 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: tl_VFx
310
311 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: UFse
312 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: UFsx
313 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: VFse
314 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: VFsx
315 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: dmUde
316 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: dmVde
317 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: dnUdx
318 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: dnVdx
319 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: dUdz
320 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: dVdz
321 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZde_p
322 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZde_r
323 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZdx_p
324 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZdx_r
325
326 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_UFse
327 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_UFsx
328 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_VFse
329 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_VFsx
330 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dmUde
331 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dmVde
332 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dnUdx
333 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dnVdx
334 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dUdz
335 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dVdz
336 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dZde_p
337 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dZde_r
338 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dZdx_p
339 real(r8), dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dZdx_r
340
341#include "set_bounds.h"
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365 k2=1
366 k_loop1 :
DO k=0,
n(ng)
367 k1=k2
368 k2=3-k1
370
371
372
373 DO j=jstrm2,jendp2
374 DO i=istrum2,iendp2
375 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
376#ifdef MASKING
377 cff=cff*umask(i,j)
378#endif
379 ufx(i,j)=cff*(z_r(i ,j,k+1)- &
380 & z_r(i-1,j,k+1))
381 tl_ufx(i,j)=cff*(tl_z_r(i ,j,k+1)- &
382 & tl_z_r(i-1,j,k+1))
383 END DO
384 END DO
385 DO j=jstrvm2,jendp2
386 DO i=istrm2,iendp2
387 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
388#ifdef MASKING
389 cff=cff*vmask(i,j)
390#endif
391 vfe(i,j)=cff*(z_r(i,j ,k+1)- &
392 & z_r(i,j-1,k+1))
393 tl_vfe(i,j)=cff*(tl_z_r(i,j ,k+1)- &
394 & tl_z_r(i,j-1,k+1))
395 END DO
396 END DO
397
398 DO j=jstrm1,jendp2
399 DO i=istrm1,iendp2
400 dzdx_p(i,j,k2)=0.5_r8*(ufx(i,j-1)+ &
401 & ufx(i,j ))
402 tl_dzdx_p(i,j,k2)=0.5_r8*(tl_ufx(i,j-1)+ &
403 & tl_ufx(i,j ))
404 dzde_p(i,j,k2)=0.5_r8*(vfe(i-1,j)+ &
405 & vfe(i ,j))
406 tl_dzde_p(i,j,k2)=0.5_r8*(tl_vfe(i-1,j)+ &
407 & tl_vfe(i ,j))
408 END DO
409 END DO
410 DO j=jstrvm2,jendp1
411 DO i=istrum2,iendp1
412 dzdx_r(i,j,k2)=0.5_r8*(ufx(i ,j)+ &
413 & ufx(i+1,j))
414 tl_dzdx_r(i,j,k2)=0.5_r8*(tl_ufx(i ,j)+ &
415 & tl_ufx(i+1,j))
416 dzde_r(i,j,k2)=0.5_r8*(vfe(i,j )+ &
417 & vfe(i,j+1))
418 tl_dzde_r(i,j,k2)=0.5_r8*(tl_vfe(i,j )+ &
419 & tl_vfe(i,j+1))
420 END DO
421 END DO
422
423
424
425 DO j=jstrvm2,jendp1
426 DO i=istrum2,iendp1
427 cff=0.5_r8*pm(i,j)
428#ifdef MASKING
429 cff=cff*rmask(i,j)
430#endif
431 dnudx(i,j,k2)=cff*((pn(i ,j)+pn(i+1,j))* &
432 & u(i+1,j,k+1,nrhs)- &
433 & (pn(i-1,j)+pn(i ,j))* &
434 & u(i ,j,k+1,nrhs))
435 tl_dnudx(i,j,k2)=cff*((pn(i ,j)+pn(i+1,j))* &
436 & tl_u(i+1,j,k+1,nrhs)- &
437 & (pn(i-1,j)+pn(i ,j))* &
438 & tl_u(i ,j,k+1,nrhs))
439 END DO
440 END DO
441
442 DO j=jstrm1,jendp2
443 DO i=istrm1,iendp2
444 cff=0.125_r8*(pn(i-1,j )+pn(i,j )+ &
445 & pn(i-1,j-1)+pn(i,j-1))
446#ifdef MASKING
447 cff=cff*pmask(i,j)
448#endif
449 dmude(i,j,k2)=cff*((pm(i-1,j )+pm(i,j ))* &
450 & u(i,j ,k+1,nrhs)- &
451 & (pm(i-1,j-1)+pm(i,j-1))* &
452 & u(i,j-1,k+1,nrhs))
453 tl_dmude(i,j,k2)=cff*((pm(i-1,j )+pm(i,j ))* &
454 & tl_u(i,j ,k+1,nrhs)- &
455 & (pm(i-1,j-1)+pm(i,j-1))* &
456 & tl_u(i,j-1,k+1,nrhs))
457 END DO
458 END DO
459
460 DO j=jstrm1,jendp2
461 DO i=istrm1,iendp2
462 cff=0.125_r8*(pm(i-1,j )+pm(i,j )+ &
463 & pm(i-1,j-1)+pm(i,j-1))
464#ifdef MASKING
465 cff=cff*pmask(i,j)
466#endif
467 dnvdx(i,j,k2)=cff*((pn(i ,j-1)+pn(i ,j))* &
468 & v(i ,j,k+1,nrhs)- &
469 & (pn(i-1,j-1)+pn(i-1,j))* &
470 & v(i-1,j,k+1,nrhs))
471 tl_dnvdx(i,j,k2)=cff*((pn(i ,j-1)+pn(i ,j))* &
472 & tl_v(i ,j,k+1,nrhs)- &
473 & (pn(i-1,j-1)+pn(i-1,j))* &
474 & tl_v(i-1,j,k+1,nrhs))
475 END DO
476 END DO
477
478 DO j=jstrvm2,jendp1
479 DO i=istrum2,iendp1
480 cff=0.5_r8*pn(i,j)
481#ifdef MASKING
482 cff=cff*rmask(i,j)
483#endif
484 dmvde(i,j,k2)=cff*((pm(i,j )+pm(i,j+1))* &
485 & v(i,j+1,k+1,nrhs)- &
486 & (pm(i,j-1)+pm(i,j ))* &
487 & v(i,j ,k+1,nrhs))
488 tl_dmvde(i,j,k2)=cff*((pm(i,j )+pm(i,j+1))* &
489 & tl_v(i,j+1,k+1,nrhs)- &
490 & (pm(i,j-1)+pm(i,j ))* &
491 & tl_v(i,j ,k+1,nrhs))
492 END DO
493 END DO
494 END IF
495
496 IF ((k.eq.0).or.(k.eq.
n(ng)))
THEN
497 DO j=jstrm2,jendp2
498 DO i=istrum2,iendp2
499 dudz(i,j,k2)=0.0_r8
500 tl_dudz(i,j,k2)=0.0_r8
501 END DO
502 END DO
503 DO j=jstrvm2,jendp2
504 DO i=istrm2,iendp2
505 dvdz(i,j,k2)=0.0_r8
506 tl_dvdz(i,j,k2)=0.0_r8
507 END DO
508 END DO
509
510 DO j=jstrm1,jendp1
511 DO i=istrum1,iendp1
512 ufsx(i,j,k2)=0.0_r8
513 tl_ufsx(i,j,k2)=0.0_r8
514 ufse(i,j,k2)=0.0_r8
515 tl_ufse(i,j,k2)=0.0_r8
516 END DO
517 END DO
518 DO j=jstrvm1,jendp1
519 DO i=istrm1,iendp1
520 vfsx(i,j,k2)=0.0_r8
521 tl_vfsx(i,j,k2)=0.0_r8
522 vfse(i,j,k2)=0.0_r8
523 tl_vfse(i,j,k2)=0.0_r8
524 END DO
525 END DO
526 ELSE
527 DO j=jstrm2,jendp2
528 DO i=istrum2,iendp2
529 cff=1.0_r8/(0.5_r8*(z_r(i-1,j,k+1)- &
530 & z_r(i-1,j,k )+ &
531 & z_r(i ,j,k+1)- &
532 & z_r(i ,j,k )))
533 tl_cff=-cff*cff*(0.5_r8*(tl_z_r(i-1,j,k+1)- &
534 & tl_z_r(i-1,j,k )+ &
535 & tl_z_r(i ,j,k+1)- &
536 & tl_z_r(i ,j,k )))
537 dudz(i,j,k2)=cff*(u(i,j,k+1,nrhs)- &
538 & u(i,j,k ,nrhs))
539 tl_dudz(i,j,k2)=tl_cff*(u(i,j,k+1,nrhs)- &
540 & u(i,j,k ,nrhs))+ &
541 & cff*(tl_u(i,j,k+1,nrhs)- &
542 & tl_u(i,j,k ,nrhs))
543 END DO
544 END DO
545
546 DO j=jstrvm2,jendp2
547 DO i=istrm2,iendp2
548 cff=1.0_r8/(0.5_r8*(z_r(i,j-1,k+1)- &
549 & z_r(i,j-1,k )+ &
550 & z_r(i,j ,k+1)- &
551 & z_r(i,j ,k )))
552 tl_cff=-cff*cff*(0.5_r8*(tl_z_r(i,j-1,k+1)- &
553 & tl_z_r(i,j-1,k )+ &
554 & tl_z_r(i,j ,k+1)- &
555 & tl_z_r(i,j ,k )))
556 dvdz(i,j,k2)=cff*(v(i,j,k+1,nrhs)- &
557 & v(i,j,k ,nrhs))
558 tl_dvdz(i,j,k2)=tl_cff*(v(i,j,k+1,nrhs)- &
559 & v(i,j,k ,nrhs))+ &
560 & cff*(tl_v(i,j,k+1,nrhs)- &
561 & tl_v(i,j,k ,nrhs))
562 END DO
563 END DO
564 END IF
565
566
567
568
569 IF (k.gt.0) THEN
570 DO j=jstrvm2,jendp1
571 DO i=istrum2,iendp1
572 cff1=min(dzdx_r(i,j,k1),0.0_r8)
573 cff2=max(dzdx_r(i,j,k1),0.0_r8)
574 cff3=min(dzde_r(i,j,k1),0.0_r8)
575 cff4=max(dzde_r(i,j,k1),0.0_r8)
576 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx_r(i,j,k1)))* &
577 & tl_dzdx_r(i,j,k1)
578 tl_cff2=(0.5_r8+sign(0.5_r8, dzdx_r(i,j,k1)))* &
579 & tl_dzdx_r(i,j,k1)
580 tl_cff3=(0.5_r8+sign(0.5_r8,-dzde_r(i,j,k1)))* &
581 & tl_dzde_r(i,j,k1)
582 tl_cff4=(0.5_r8+sign(0.5_r8, dzde_r(i,j,k1)))* &
583 & tl_dzde_r(i,j,k1)
584 cff=on_r(i,j)*(dnudx(i,j,k1)- &
585 & 0.5_r8*pn(i,j)* &
586 & (cff1*(dudz(i ,j,k1)+ &
587 & dudz(i+1,j,k2))+ &
588 & cff2*(dudz(i ,j,k2)+ &
589 & dudz(i+1,j,k1))))- &
590 & om_r(i,j)*(dmvde(i,j,k1)- &
591 & 0.5_r8*pm(i,j)* &
592 & (cff3*(dvdz(i,j ,k1)+ &
593 & dvdz(i,j+1,k2))+ &
594 & cff4*(dvdz(i,j ,k2)+ &
595 & dvdz(i,j+1,k1))))
596 tl_cff=on_r(i,j)*(tl_dnudx(i,j,k1)- &
597 & 0.5_r8*pn(i,j)* &
598 & (tl_cff1*(dudz(i ,j,k1)+ &
599 & dudz(i+1,j,k2))+ &
600 & cff1*(tl_dudz(i ,j,k1)+ &
601 & tl_dudz(i+1,j,k2))+ &
602 & tl_cff2*(dudz(i ,j,k2)+ &
603 & dudz(i+1,j,k1))+ &
604 & cff2*(tl_dudz(i ,j,k2)+ &
605 & tl_dudz(i+1,j,k1))))- &
606 & om_r(i,j)*(tl_dmvde(i,j,k1)- &
607 & 0.5_r8*pm(i,j)* &
608 & (tl_cff3*(dvdz(i,j ,k1)+ &
609 & dvdz(i,j+1,k2))+ &
610 & cff3*(tl_dvdz(i,j ,k1)+ &
611 & tl_dvdz(i,j+1,k2))+ &
612 & tl_cff4*(dvdz(i,j ,k2)+ &
613 & dvdz(i,j+1,k1))+ &
614 & cff4*(tl_dvdz(i,j ,k2)+ &
615 & tl_dvdz(i,j+1,k1))))
616#ifdef MASKING
617 cff=cff*rmask(i,j)
618 tl_cff=tl_cff*rmask(i,j)
619#endif
620#ifdef VISC_3DCOEF
621# ifdef UV_U3ADV_SPLIT
622 ufx(i,j)=on_r(i,j)*on_r(i,j)*uvis3d_r(i,j,k)*cff
623 tl_ufx(i,j)=on_r(i,j)*on_r(i,j)* &
624 & (tl_uvis3d_r(i,j,k)*cff+ &
625 & uvis3d_r(i,j,k)*tl_cff)
626 vfe(i,j)=om_r(i,j)*om_r(i,j)*vvis3d_r(i,j,k)*cff
627 tl_vfe(i,j)=om_r(i,j)*om_r(i,j)* &
628 & (tl_vvis3d_r(i,j,k)*cff+ &
629 & vvis3d_r(i,j,k)*tl_cff)
630# else
631 ufx(i,j)=on_r(i,j)*on_r(i,j)*visc3d_r(i,j,k)*cff
632 tl_ufx(i,j)=on_r(i,j)*on_r(i,j)* &
633 & (tl_visc3d_r(i,j,k)*cff+ &
634 & visc3d_r(i,j,k)*tl_cff)
635 vfe(i,j)=om_r(i,j)*om_r(i,j)*visc3d_r(i,j,k)*cff
636 tl_vfe(i,j)=om_r(i,j)*om_r(i,j)* &
637 & (tl_visc3d_r(i,j,k)*cff+ &
638 & visc3d_r(i,j,k)*tl_cff)
639# endif
640#else
641 ufx(i,j)=on_r(i,j)*on_r(i,j)*visc4_r(i,j)*cff
642 tl_ufx(i,j)=on_r(i,j)*on_r(i,j)*visc4_r(i,j)*tl_cff
643 vfe(i,j)=om_r(i,j)*om_r(i,j)*visc4_r(i,j)*cff
644 tl_vfe(i,j)=om_r(i,j)*om_r(i,j)*visc4_r(i,j)*tl_cff
645#endif
646 END DO
647 END DO
648
649 DO j=jstrm1,jendp2
650 DO i=istrm1,iendp2
651 pm_p=0.25_r8*(pm(i-1,j-1)+pm(i-1,j)+ &
652 & pm(i ,j-1)+pm(i ,j))
653 pn_p=0.25_r8*(pn(i-1,j-1)+pn(i-1,j)+ &
654 & pn(i ,j-1)+pn(i ,j))
655 cff1=min(dzdx_p(i,j,k1),0.0_r8)
656 cff2=max(dzdx_p(i,j,k1),0.0_r8)
657 cff3=min(dzde_p(i,j,k1),0.0_r8)
658 cff4=max(dzde_p(i,j,k1),0.0_r8)
659 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx_p(i,j,k1)))* &
660 & tl_dzdx_p(i,j,k1)
661 tl_cff2=(0.5_r8+sign(0.5_r8, dzdx_p(i,j,k1)))* &
662 & tl_dzdx_p(i,j,k1)
663 tl_cff3=(0.5_r8+sign(0.5_r8,-dzde_p(i,j,k1)))* &
664 & tl_dzde_p(i,j,k1)
665 tl_cff4=(0.5_r8+sign(0.5_r8, dzde_p(i,j,k1)))* &
666 & tl_dzde_p(i,j,k1)
667 cff=on_p(i,j)*(dnvdx(i,j,k1)- &
668 & 0.5_r8*pn_p* &
669 & (cff1*(dvdz(i-1,j,k1)+ &
670 & dvdz(i ,j,k2))+ &
671 & cff2*(dvdz(i-1,j,k2)+ &
672 & dvdz(i ,j,k1))))+ &
673 & om_p(i,j)*(dmude(i,j,k1)- &
674 & 0.5_r8*pm_p* &
675 & (cff3*(dudz(i,j-1,k1)+ &
676 & dudz(i,j ,k2))+ &
677 & cff4*(dudz(i,j-1,k2)+ &
678 & dudz(i,j ,k1))))
679 tl_cff=on_p(i,j)*(tl_dnvdx(i,j,k1)- &
680 & 0.5_r8*pn_p* &
681 & (tl_cff1*(dvdz(i-1,j,k1)+ &
682 & dvdz(i ,j,k2))+ &
683 & cff1*(tl_dvdz(i-1,j,k1)+ &
684 & tl_dvdz(i ,j,k2))+ &
685 & tl_cff2*(dvdz(i-1,j,k2)+ &
686 & dvdz(i ,j,k1))+ &
687 & cff2*(tl_dvdz(i-1,j,k2)+ &
688 & tl_dvdz(i ,j,k1))))+ &
689 & om_p(i,j)*(tl_dmude(i,j,k1)- &
690 & 0.5_r8*pm_p* &
691 & (tl_cff3*(dudz(i,j-1,k1)+ &
692 & dudz(i,j ,k2))+ &
693 & cff3*(tl_dudz(i,j-1,k1)+ &
694 & tl_dudz(i,j ,k2))+ &
695 & tl_cff4*(dudz(i,j-1,k2)+ &
696 & dudz(i,j ,k1))+ &
697 & cff4*(tl_dudz(i,j-1,k2)+ &
698 & tl_dudz(i,j ,k1))))
699#ifdef MASKING
700 cff=cff*pmask(i,j)
701 tl_cff=tl_cff*pmask(i,j)
702#endif
703#ifdef VISC_3DCOEF
704# ifdef UV_U3ADV_SPLIT
705 uvis_p=0.25_r8* &
706 & (uvis3d_r(i-1,j-1,k)+uvis3d_r(i-1,j,k)+ &
707 & uvis3d_r(i ,j-1,k)+uvis3d_r(i ,j,k))
708 tl_uvis_p=0.25_r8* &
709 & (tl_uvis3d_r(i-1,j-1,k)+tl_uvis3d_r(i-1,j,k)+ &
710 & tl_uvis3d_r(i ,j-1,k)+tl_uvis3d_r(i ,j,k))
711 vvis_p=0.25_r8* &
712 & (vvis3d_r(i-1,j-1,k)+vvis3d_r(i-1,j,k)+ &
713 & vvis3d_r(i ,j-1,k)+vvis3d_r(i ,j,k))
714 tl_vvis_p=0.25_r8* &
715 & (tl_vvis3d_r(i-1,j-1,k)+tl_vvis3d_r(i-1,j,k)+ &
716 & tl_vvis3d_r(i ,j-1,k)+tl_vvis3d_r(i ,j,k))
717 ufe(i,j)=om_p(i,j)*om_p(i,j)*uvis_p*cff
718 tl_ufe(i,j)=om_p(i,j)*om_p(i,j)* &
719 & (tl_uvis_p*cff+uvis_p*tl_cff)
720 vfx(i,j)=on_p(i,j)*on_p(i,j)*vvis_p*cff
721 tl_vfx(i,j)=on_p(i,j)*on_p(i,j)* &
722 & (tl_vvis_p*cff+vvis_p*tl_cff)
723# else
724 visc_p=0.25_r8* &
725 & (visc3d_r(i-1,j-1,k)+visc3d_r(i-1,j,k)+ &
726 & visc3d_r(i ,j-1,k)+visc3d_r(i ,j,k))
727 tl_visc_p=0.25_r8* &
728 & (tl_visc3d_r(i-1,j-1,k)+tl_visc3d_r(i-1,j,k)+ &
729 & tl_visc3d_r(i ,j-1,k)+tl_visc3d_r(i ,j,k))
730 ufe(i,j)=om_p(i,j)*om_p(i,j)*visc_p*cff
731 tl_ufe(i,j)=om_p(i,j)*om_p(i,j)* &
732 & (tl_visc_p*cff+visc_p*tl_cff)
733 vfx(i,j)=on_p(i,j)*on_p(i,j)*visc_p*cff
734 tl_vfx(i,j)=on_p(i,j)*on_p(i,j)* &
735 & (tl_visc_p*cff+visc_p*tl_cff)
736# endif
737#else
738 ufe(i,j)=om_p(i,j)*om_p(i,j)*visc4_p(i,j)*cff
739 tl_ufe(i,j)=om_p(i,j)*om_p(i,j)*visc4_p(i,j)*tl_cff
740 vfx(i,j)=on_p(i,j)*on_p(i,j)*visc4_p(i,j)*cff
741 tl_vfx(i,j)=on_p(i,j)*on_p(i,j)*visc4_p(i,j)*tl_cff
742#endif
743 END DO
744 END DO
745
746
747
748
750 DO j=jstrm1,jendp1
751 DO i=istrum1,iendp1
752#ifdef VISC_3DCOEF
753# ifdef UV_U3ADV_SPLIT
754 cff=0.125_r8* &
755 & (uvis3d_r(i-1,j,k )+uvis3d_r(i,j,k )+ &
756 & uvis3d_r(i-1,j,k+1)+uvis3d_r(i,j,k+1))
757 tl_cff=0.125_r8* &
758 & (tl_uvis3d_r(i-1,j,k )+tl_uvis3d_r(i,j,k )+ &
759 & tl_uvis3d_r(i-1,j,k+1)+tl_uvis3d_r(i,j,k+1))
760# else
761 cff=0.125_r8* &
762 & (visc3d_r(i-1,j,k )+visc3d_r(i,j,k )+ &
763 & visc3d_r(i-1,j,k+1)+visc3d_r(i,j,k+1))
764 tl_cff=0.125_r8* &
765 & (tl_visc3d_r(i-1,j,k )+tl_visc3d_r(i,j,k )+ &
766 & tl_visc3d_r(i-1,j,k+1)+tl_visc3d_r(i,j,k+1))
767# endif
768 fac1=cff*on_u(i,j)
769 tl_fac1=tl_cff*on_u(i,j)
770 fac2=cff*om_u(i,j)
771 tl_fac2=tl_cff*om_u(i,j)
772#else
773 cff=0.25_r8*(visc4_r(i-1,j)+visc4_r(i,j))
774 fac1=cff*on_u(i,j)
775 fac2=cff*om_u(i,j)
776#endif
777 cff=0.5_r8*(pn(i-1,j)+pn(i,j))
778 dnudz=cff*dudz(i,j,k2)
779 tl_dnudz=cff*tl_dudz(i,j,k2)
780 dnvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2)+ &
781 & dvdz(i ,j+1,k2)+ &
782 & dvdz(i-1,j ,k2)+ &
783 & dvdz(i ,j ,k2))
784 tl_dnvdz=cff*0.25_r8*(tl_dvdz(i-1,j+1,k2)+ &
785 & tl_dvdz(i ,j+1,k2)+ &
786 & tl_dvdz(i-1,j ,k2)+ &
787 & tl_dvdz(i ,j ,k2))
788 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
789 dmudz=cff*dudz(i,j,k2)
790 tl_dmudz=cff*tl_dudz(i,j,k2)
791 dmvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2)+ &
792 & dvdz(i ,j+1,k2)+ &
793 & dvdz(i-1,j ,k2)+ &
794 & dvdz(i ,j ,k2))
795 tl_dmvdz=cff*0.25_r8*(tl_dvdz(i-1,j+1,k2)+ &
796 & tl_dvdz(i ,j+1,k2)+ &
797 & tl_dvdz(i-1,j ,k2)+ &
798 & tl_dvdz(i ,j ,k2))
799
800 cff1=min(dzdx_r(i-1,j,k1),0.0_r8)
801 cff2=min(dzdx_r(i ,j,k2),0.0_r8)
802 cff3=max(dzdx_r(i-1,j,k2),0.0_r8)
803 cff4=max(dzdx_r(i ,j,k1),0.0_r8)
804 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx_r(i-1,j,k1)))* &
805 & tl_dzdx_r(i-1,j,k1)
806 tl_cff2=(0.5_r8+sign(0.5_r8,-dzdx_r(i ,j,k2)))* &
807 & tl_dzdx_r(i ,j,k2)
808 tl_cff3=(0.5_r8+sign(0.5_r8, dzdx_r(i-1,j,k2)))* &
809 & tl_dzdx_r(i-1,j,k2)
810 tl_cff4=(0.5_r8+sign(0.5_r8, dzdx_r(i ,j,k1)))* &
811 & tl_dzdx_r(i ,j,k1)
812 ufsx(i,j,k2)=fac1* &
813 & (cff1*(cff1*dnudz-dnudx(i-1,j,k1))+ &
814 & cff2*(cff2*dnudz-dnudx(i ,j,k2))+ &
815 & cff3*(cff3*dnudz-dnudx(i-1,j,k2))+ &
816 & cff4*(cff4*dnudz-dnudx(i ,j,k1)))
817 tl_ufsx(i,j,k2)=fac1* &
818 & (tl_cff1*(cff1*dnudz-dnudx(i-1,j,k1))+ &
819 & tl_cff2*(cff2*dnudz-dnudx(i ,j,k2))+ &
820 & tl_cff3*(cff3*dnudz-dnudx(i-1,j,k2))+ &
821 & tl_cff4*(cff4*dnudz-dnudx(i ,j,k1))+ &
822 & cff1*(tl_cff1*dnudz+cff1*tl_dnudz- &
823 & tl_dnudx(i-1,j,k1))+ &
824 & cff2*(tl_cff2*dnudz+cff2*tl_dnudz- &
825 & tl_dnudx(i ,j,k2))+ &
826 & cff3*(tl_cff3*dnudz+cff3*tl_dnudz- &
827 & tl_dnudx(i-1,j,k2))+ &
828 & cff4*(tl_cff4*dnudz+cff4*tl_dnudz- &
829 & tl_dnudx(i ,j,k1)))
830#ifdef VISC_3DCOEF
831 tl_ufsx(i,j,k2)=tl_ufsx(i,j,k2)+ &
832 & tl_fac1* &
833 & (cff1*(cff1*dnudz-dnudx(i-1,j,k1))+ &
834 & cff2*(cff2*dnudz-dnudx(i ,j,k2))+ &
835 & cff3*(cff3*dnudz-dnudx(i-1,j,k2))+ &
836 & cff4*(cff4*dnudz-dnudx(i ,j,k1)))
837#endif
838
839 cff1=min(dzde_p(i,j ,k1),0.0_r8)
840 cff2=min(dzde_p(i,j+1,k2),0.0_r8)
841 cff3=max(dzde_p(i,j ,k2),0.0_r8)
842 cff4=max(dzde_p(i,j+1,k1),0.0_r8)
843 tl_cff1=(0.5_r8+sign(0.5_r8,-dzde_p(i,j ,k1)))* &
844 & tl_dzde_p(i,j ,k1)
845 tl_cff2=(0.5_r8+sign(0.5_r8,-dzde_p(i,j+1,k2)))* &
846 & tl_dzde_p(i,j+1,k2)
847 tl_cff3=(0.5_r8+sign(0.5_r8, dzde_p(i,j ,k2)))* &
848 & tl_dzde_p(i,j ,k2)
849 tl_cff4=(0.5_r8+sign(0.5_r8, dzde_p(i,j+1,k1)))* &
850 & tl_dzde_p(i,j+1,k1)
851 ufse(i,j,k2)=fac2* &
852 & (cff1*(cff1*dmudz-dmude(i,j ,k1))+ &
853 & cff2*(cff2*dmudz-dmude(i,j+1,k2))+ &
854 & cff3*(cff3*dmudz-dmude(i,j ,k2))+ &
855 & cff4*(cff4*dmudz-dmude(i,j+1,k1)))
856 tl_ufse(i,j,k2)=fac2* &
857 & (tl_cff1*(cff1*dmudz-dmude(i,j ,k1))+ &
858 & tl_cff2*(cff2*dmudz-dmude(i,j+1,k2))+ &
859 & tl_cff3*(cff3*dmudz-dmude(i,j ,k2))+ &
860 & tl_cff4*(cff4*dmudz-dmude(i,j+1,k1))+ &
861 & cff1*(tl_cff1*dmudz+cff1*tl_dmudz- &
862 & tl_dmude(i,j ,k1))+ &
863 & cff2*(tl_cff2*dmudz+cff2*tl_dmudz- &
864 & tl_dmude(i,j+1,k2))+ &
865 & cff3*(tl_cff3*dmudz+cff3*tl_dmudz- &
866 & tl_dmude(i,j ,k2))+ &
867 & cff4*(tl_cff4*dmudz+cff4*tl_dmudz- &
868 & tl_dmude(i,j+1,k1)))
869#ifdef VISC_3DCOEF
870 tl_ufse(i,j,k2)=tl_ufse(i,j,k2)+ &
871 & tl_fac2* &
872 & (cff1*(cff1*dmudz-dmude(i,j ,k1))+ &
873 & cff2*(cff2*dmudz-dmude(i,j+1,k2))+ &
874 & cff3*(cff3*dmudz-dmude(i,j ,k2))+ &
875 & cff4*(cff4*dmudz-dmude(i,j+1,k1)))
876#endif
877
878 cff1=min(dzde_p(i,j ,k1),0.0_r8)
879 cff2=min(dzde_p(i,j+1,k2),0.0_r8)
880 cff3=max(dzde_p(i,j ,k2),0.0_r8)
881 cff4=max(dzde_p(i,j+1,k1),0.0_r8)
882 cff5=min(dzdx_p(i,j ,k1),0.0_r8)
883 cff6=min(dzdx_p(i,j+1,k2),0.0_r8)
884 cff7=max(dzdx_p(i,j ,k2),0.0_r8)
885 cff8=max(dzdx_p(i,j+1,k1),0.0_r8)
886 tl_cff1=(0.5_r8+sign(0.5_r8,-dzde_p(i,j ,k1)))* &
887 & tl_dzde_p(i,j ,k1)
888 tl_cff2=(0.5_r8+sign(0.5_r8,-dzde_p(i,j+1,k2)))* &
889 & tl_dzde_p(i,j+1,k2)
890 tl_cff3=(0.5_r8+sign(0.5_r8, dzde_p(i,j ,k2)))* &
891 & tl_dzde_p(i,j ,k2)
892 tl_cff4=(0.5_r8+sign(0.5_r8, dzde_p(i,j+1,k1)))* &
893 & tl_dzde_p(i,j+1,k1)
894 tl_cff5=(0.5_r8+sign(0.5_r8,-dzdx_p(i,j ,k1)))* &
895 & tl_dzdx_p(i,j ,k1)
896 tl_cff6=(0.5_r8+sign(0.5_r8,-dzdx_p(i,j+1,k2)))* &
897 & tl_dzdx_p(i,j+1,k2)
898 tl_cff7=(0.5_r8+sign(0.5_r8, dzdx_p(i,j ,k2)))* &
899 & tl_dzdx_p(i,j ,k2)
900 tl_cff8=(0.5_r8+sign(0.5_r8, dzdx_p(i,j+1,k1)))* &
901 & tl_dzdx_p(i,j+1,k1)
902 ufsx(i,j,k2)=ufsx(i,j,k2)+ &
903 & fac1* &
904 & (cff1*(cff5*dnvdz-dnvdx(i,j ,k1))+ &
905 & cff2*(cff6*dnvdz-dnvdx(i,j+1,k2))+ &
906 & cff3*(cff7*dnvdz-dnvdx(i,j ,k2))+ &
907 & cff4*(cff8*dnvdz-dnvdx(i,j+1,k1)))
908 tl_ufsx(i,j,k2)=tl_ufsx(i,j,k2)+ &
909 & fac1* &
910 & (tl_cff1*(cff5*dnvdz-dnvdx(i,j ,k1))+ &
911 & tl_cff2*(cff6*dnvdz-dnvdx(i,j+1,k2))+ &
912 & tl_cff3*(cff7*dnvdz-dnvdx(i,j ,k2))+ &
913 & tl_cff4*(cff8*dnvdz-dnvdx(i,j+1,k1))+ &
914 & cff1*(tl_cff5*dnvdz+cff5*tl_dnvdz- &
915 & tl_dnvdx(i,j ,k1))+ &
916 & cff2*(tl_cff6*dnvdz+cff6*tl_dnvdz- &
917 & tl_dnvdx(i,j+1,k2))+ &
918 & cff3*(tl_cff7*dnvdz+cff7*tl_dnvdz- &
919 & tl_dnvdx(i,j ,k2))+ &
920 & cff4*(tl_cff8*dnvdz+cff8*tl_dnvdz- &
921 & tl_dnvdx(i,j+1,k1)))
922#ifdef VISC_3DCOEF
923 tl_ufsx(i,j,k2)=tl_ufsx(i,j,k2)+ &
924 & tl_fac1* &
925 & (cff1*(cff5*dnvdz-dnvdx(i,j ,k1))+ &
926 & cff2*(cff6*dnvdz-dnvdx(i,j+1,k2))+ &
927 & cff3*(cff7*dnvdz-dnvdx(i,j ,k2))+ &
928 & cff4*(cff8*dnvdz-dnvdx(i,j+1,k1)))
929#endif
930
931 cff1=min(dzdx_r(i-1,j,k1),0.0_r8)
932 cff2=min(dzdx_r(i ,j,k2),0.0_r8)
933 cff3=max(dzdx_r(i-1,j,k2),0.0_r8)
934 cff4=max(dzdx_r(i ,j,k1),0.0_r8)
935 cff5=min(dzde_r(i-1,j,k1),0.0_r8)
936 cff6=min(dzde_r(i ,j,k2),0.0_r8)
937 cff7=max(dzde_r(i-1,j,k2),0.0_r8)
938 cff8=max(dzde_r(i ,j,k1),0.0_r8)
939 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx_r(i-1,j,k1)))* &
940 & tl_dzdx_r(i-1,j,k1)
941 tl_cff2=(0.5_r8+sign(0.5_r8,-dzdx_r(i ,j,k2)))* &
942 & tl_dzdx_r(i ,j,k2)
943 tl_cff3=(0.5_r8+sign(0.5_r8, dzdx_r(i-1,j,k2)))* &
944 & tl_dzdx_r(i-1,j,k2)
945 tl_cff4=(0.5_r8+sign(0.5_r8, dzdx_r(i ,j,k1)))* &
946 & tl_dzdx_r(i ,j,k1)
947 tl_cff5=(0.5_r8+sign(0.5_r8,-dzde_r(i-1,j,k1)))* &
948 & tl_dzde_r(i-1,j,k1)
949 tl_cff6=(0.5_r8+sign(0.5_r8,-dzde_r(i ,j,k2)))* &
950 & tl_dzde_r(i ,j,k2)
951 tl_cff7=(0.5_r8+sign(0.5_r8, dzde_r(i-1,j,k2)))* &
952 & tl_dzde_r(i-1,j,k2)
953 tl_cff8=(0.5_r8+sign(0.5_r8, dzde_r(i ,j,k1)))* &
954 & tl_dzde_r(i ,j,k1)
955 ufse(i,j,k2)=ufse(i,j,k2)- &
956 & fac2* &
957 & (cff1*(cff5*dmvdz-dmvde(i-1,j,k1))+ &
958 & cff2*(cff6*dmvdz-dmvde(i ,j,k2))+ &
959 & cff3*(cff7*dmvdz-dmvde(i-1,j,k2))+ &
960 & cff4*(cff8*dmvdz-dmvde(i ,j,k1)))
961 tl_ufse(i,j,k2)=tl_ufse(i,j,k2)- &
962 & fac2* &
963 & (tl_cff1*(cff5*dmvdz-dmvde(i-1,j,k1))+ &
964 & tl_cff2*(cff6*dmvdz-dmvde(i ,j,k2))+ &
965 & tl_cff3*(cff7*dmvdz-dmvde(i-1,j,k2))+ &
966 & tl_cff4*(cff8*dmvdz-dmvde(i ,j,k1))+ &
967 & cff1*(tl_cff5*dmvdz+cff5*tl_dmvdz- &
968 & tl_dmvde(i-1,j,k1))+ &
969 & cff2*(tl_cff6*dmvdz+cff6*tl_dmvdz- &
970 & tl_dmvde(i ,j,k2))+ &
971 & cff3*(tl_cff7*dmvdz+cff7*tl_dmvdz- &
972 & tl_dmvde(i-1,j,k2))+ &
973 & cff4*(tl_cff8*dmvdz+cff8*tl_dmvdz- &
974 & tl_dmvde(i ,j,k1)))
975#ifdef VISC_3DCOEF
976 tl_ufse(i,j,k2)=tl_ufse(i,j,k2)- &
977 & tl_fac2* &
978 & (cff1*(cff5*dmvdz-dmvde(i-1,j,k1))+ &
979 & cff2*(cff6*dmvdz-dmvde(i ,j,k2))+ &
980 & cff3*(cff7*dmvdz-dmvde(i-1,j,k2))+ &
981 & cff4*(cff8*dmvdz-dmvde(i ,j,k1)))
982#endif
983 END DO
984 END DO
985
986 DO j=jstrvm1,jendp1
987 DO i=istrm1,iendp1
988#ifdef VISC_3DCOEF
989# ifdef UV_U3ADV_SPLIT
990 cff=0.125_r8* &
991 & (vvis3d_r(i,j-1,k )+vvis3d_r(i,j,k )+ &
992 & vvis3d_r(i,j-1,k+1)+vvis3d_r(i,j,k+1))
993 tl_cff=0.125_r8* &
994 & (tl_vvis3d_r(i,j-1,k )+tl_vvis3d_r(i,j,k )+ &
995 & tl_vvis3d_r(i,j-1,k+1)+tl_vvis3d_r(i,j,k+1))
996# else
997 cff=0.125_r8* &
998 & (visc3d_r(i,j-1,k )+visc3d_r(i,j,k )+ &
999 & visc3d_r(i,j-1,k+1)+visc3d_r(i,j,k+1))
1000 tl_cff=0.125_r8* &
1001 & (tl_visc3d_r(i,j-1,k )+tl_visc3d_r(i,j,k )+ &
1002 & tl_visc3d_r(i,j-1,k+1)+tl_visc3d_r(i,j,k+1))
1003# endif
1004 fac1=cff*on_v(i,j)
1005 tl_fac1=tl_cff*on_v(i,j)
1006 fac2=cff*om_v(i,j)
1007 tl_fac2=tl_cff*om_v(i,j)
1008#else
1009 cff=0.25_r8*(visc4_r(i,j-1)+visc4_r(i,j))
1010 fac1=cff*on_v(i,j)
1011 fac2=cff*om_v(i,j)
1012#endif
1013 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
1014 dnudz=cff*0.25_r8*(dudz(i ,j ,k2)+ &
1015 & dudz(i+1,j ,k2)+ &
1016 & dudz(i ,j-1,k2)+ &
1017 & dudz(i+1,j-1,k2))
1018 tl_dnudz=cff*0.25_r8*(tl_dudz(i ,j ,k2)+ &
1019 & tl_dudz(i+1,j ,k2)+ &
1020 & tl_dudz(i ,j-1,k2)+ &
1021 & tl_dudz(i+1,j-1,k2))
1022 dnvdz=cff*dvdz(i,j,k2)
1023 tl_dnvdz=cff*tl_dvdz(i,j,k2)
1024 cff=0.5_r8*(pm(i,j-1)+pm(i,j))
1025 dmudz=cff*0.25_r8*(dudz(i ,j ,k2)+ &
1026 & dudz(i+1,j ,k2)+ &
1027 & dudz(i ,j-1,k2)+ &
1028 & dudz(i+1,j-1,k2))
1029 tl_dmudz=cff*0.25_r8*(tl_dudz(i ,j ,k2)+ &
1030 & tl_dudz(i+1,j ,k2)+ &
1031 & tl_dudz(i ,j-1,k2)+ &
1032 & tl_dudz(i+1,j-1,k2))
1033 dmvdz=cff*dvdz(i,j,k2)
1034 tl_dmvdz=cff*tl_dvdz(i,j,k2)
1035
1036 cff1=min(dzdx_p(i ,j,k1),0.0_r8)
1037 cff2=min(dzdx_p(i+1,j,k2),0.0_r8)
1038 cff3=max(dzdx_p(i ,j,k2),0.0_r8)
1039 cff4=max(dzdx_p(i+1,j,k1),0.0_r8)
1040 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx_p(i ,j,k1)))* &
1041 & tl_dzdx_p(i ,j,k1)
1042 tl_cff2=(0.5_r8+sign(0.5_r8,-dzdx_p(i+1,j,k2)))* &
1043 & tl_dzdx_p(i+1,j,k2)
1044 tl_cff3=(0.5_r8+sign(0.5_r8, dzdx_p(i ,j,k2)))* &
1045 & tl_dzdx_p(i ,j,k2)
1046 tl_cff4=(0.5_r8+sign(0.5_r8, dzdx_p(i+1,j,k1)))* &
1047 & tl_dzdx_p(i+1,j,k1)
1048 vfsx(i,j,k2)=fac1* &
1049 & (cff1*(cff1*dnvdz-dnvdx(i ,j,k1))+ &
1050 & cff2*(cff2*dnvdz-dnvdx(i+1,j,k2))+ &
1051 & cff3*(cff3*dnvdz-dnvdx(i ,j,k2))+ &
1052 & cff4*(cff4*dnvdz-dnvdx(i+1,j,k1)))
1053 tl_vfsx(i,j,k2)=fac1* &
1054 & (tl_cff1*(cff1*dnvdz-dnvdx(i ,j,k1))+ &
1055 & tl_cff2*(cff2*dnvdz-dnvdx(i+1,j,k2))+ &
1056 & tl_cff3*(cff3*dnvdz-dnvdx(i ,j,k2))+ &
1057 & tl_cff4*(cff4*dnvdz-dnvdx(i+1,j,k1))+ &
1058 & cff1*(tl_cff1*dnvdz+cff1*tl_dnvdz- &
1059 & tl_dnvdx(i ,j,k1))+ &
1060 & cff2*(tl_cff2*dnvdz+cff2*tl_dnvdz- &
1061 & tl_dnvdx(i+1,j,k2))+ &
1062 & cff3*(tl_cff3*dnvdz+cff3*tl_dnvdz- &
1063 & tl_dnvdx(i ,j,k2))+ &
1064 & cff4*(tl_cff4*dnvdz+cff4*tl_dnvdz- &
1065 & tl_dnvdx(i+1,j,k1)))
1066#ifdef VISC_3DCOEF
1067 tl_vfsx(i,j,k2)=tl_vfsx(i,j,k2)+ &
1068 & tl_fac1* &
1069 & (cff1*(cff1*dnvdz-dnvdx(i ,j,k1))+ &
1070 & cff2*(cff2*dnvdz-dnvdx(i+1,j,k2))+ &
1071 & cff3*(cff3*dnvdz-dnvdx(i ,j,k2))+ &
1072 & cff4*(cff4*dnvdz-dnvdx(i+1,j,k1)))
1073#endif
1074
1075 cff1=min(dzde_r(i,j-1,k1),0.0_r8)
1076 cff2=min(dzde_r(i,j ,k2),0.0_r8)
1077 cff3=max(dzde_r(i,j-1,k2),0.0_r8)
1078 cff4=max(dzde_r(i,j ,k1),0.0_r8)
1079 tl_cff1=(0.5_r8+sign(0.5_r8,-dzde_r(i,j-1,k1)))* &
1080 & tl_dzde_r(i,j-1,k1)
1081 tl_cff2=(0.5_r8+sign(0.5_r8,-dzde_r(i,j ,k2)))* &
1082 & tl_dzde_r(i,j ,k2)
1083 tl_cff3=(0.5_r8+sign(0.5_r8, dzde_r(i,j-1,k2)))* &
1084 & tl_dzde_r(i,j-1,k2)
1085 tl_cff4=(0.5_r8+sign(0.5_r8, dzde_r(i,j ,k1)))* &
1086 & tl_dzde_r(i,j ,k1)
1087 vfse(i,j,k2)=fac2* &
1088 & (cff1*(cff1*dmvdz-dmvde(i,j-1,k1))+ &
1089 & cff2*(cff2*dmvdz-dmvde(i,j ,k2))+ &
1090 & cff3*(cff3*dmvdz-dmvde(i,j-1,k2))+ &
1091 & cff4*(cff4*dmvdz-dmvde(i,j ,k1)))
1092 tl_vfse(i,j,k2)=fac2* &
1093 & (tl_cff1*(cff1*dmvdz-dmvde(i,j-1,k1))+ &
1094 & tl_cff2*(cff2*dmvdz-dmvde(i,j ,k2))+ &
1095 & tl_cff3*(cff3*dmvdz-dmvde(i,j-1,k2))+ &
1096 & tl_cff4*(cff4*dmvdz-dmvde(i,j ,k1))+ &
1097 & cff1*(tl_cff1*dmvdz+cff1*tl_dmvdz- &
1098 & tl_dmvde(i,j-1,k1))+ &
1099 & cff2*(tl_cff2*dmvdz+cff2*tl_dmvdz- &
1100 & tl_dmvde(i,j ,k2))+ &
1101 & cff3*(tl_cff3*dmvdz+cff3*tl_dmvdz- &
1102 & tl_dmvde(i,j-1,k2))+ &
1103 & cff4*(tl_cff4*dmvdz+cff4*tl_dmvdz- &
1104 & tl_dmvde(i,j ,k1)))
1105#ifdef VISC_3DCOEF
1106 tl_vfse(i,j,k2)=tl_vfse(i,j,k2)+ &
1107 & tl_fac2* &
1108 & (cff1*(cff1*dmvdz-dmvde(i,j-1,k1))+ &
1109 & cff2*(cff2*dmvdz-dmvde(i,j ,k2))+ &
1110 & cff3*(cff3*dmvdz-dmvde(i,j-1,k2))+ &
1111 & cff4*(cff4*dmvdz-dmvde(i,j ,k1)))
1112#endif
1113
1114 cff1=min(dzde_r(i,j-1,k1),0.0_r8)
1115 cff2=min(dzde_r(i,j ,k2),0.0_r8)
1116 cff3=max(dzde_r(i,j-1,k2),0.0_r8)
1117 cff4=max(dzde_r(i,j ,k1),0.0_r8)
1118 cff5=min(dzdx_r(i,j-1,k1),0.0_r8)
1119 cff6=min(dzdx_r(i,j ,k2),0.0_r8)
1120 cff7=max(dzdx_r(i,j-1,k2),0.0_r8)
1121 cff8=max(dzdx_r(i,j ,k1),0.0_r8)
1122 tl_cff1=(0.5_r8+sign(0.5_r8,-dzde_r(i,j-1,k1)))* &
1123 & tl_dzde_r(i,j-1,k1)
1124 tl_cff2=(0.5_r8+sign(0.5_r8,-dzde_r(i,j ,k2)))* &
1125 & tl_dzde_r(i,j ,k2)
1126 tl_cff3=(0.5_r8+sign(0.5_r8, dzde_r(i,j-1,k2)))* &
1127 & tl_dzde_r(i,j-1,k2)
1128 tl_cff4=(0.5_r8+sign(0.5_r8, dzde_r(i,j ,k1)))* &
1129 & tl_dzde_r(i,j ,k1)
1130 tl_cff5=(0.5_r8+sign(0.5_r8,-dzdx_r(i,j-1,k1)))* &
1131 & tl_dzdx_r(i,j-1,k1)
1132 tl_cff6=(0.5_r8+sign(0.5_r8,-dzdx_r(i,j ,k2)))* &
1133 & tl_dzdx_r(i,j ,k2)
1134 tl_cff7=(0.5_r8+sign(0.5_r8, dzdx_r(i,j-1,k2)))* &
1135 & tl_dzdx_r(i,j-1,k2)
1136 tl_cff8=(0.5_r8+sign(0.5_r8, dzdx_r(i,j ,k1)))* &
1137 & tl_dzdx_r(i,j ,k1)
1138 vfsx(i,j,k2)=vfsx(i,j,k2)- &
1139 & fac1* &
1140 & (cff1*(cff5*dnudz-dnudx(i,j-1,k1))+ &
1141 & cff2*(cff6*dnudz-dnudx(i,j ,k2))+ &
1142 & cff3*(cff7*dnudz-dnudx(i,j-1,k2))+ &
1143 & cff4*(cff8*dnudz-dnudx(i,j ,k1)))
1144 tl_vfsx(i,j,k2)=tl_vfsx(i,j,k2)- &
1145 & fac1* &
1146 & (tl_cff1*(cff5*dnudz-dnudx(i,j-1,k1))+ &
1147 & tl_cff2*(cff6*dnudz-dnudx(i,j ,k2))+ &
1148 & tl_cff3*(cff7*dnudz-dnudx(i,j-1,k2))+ &
1149 & tl_cff4*(cff8*dnudz-dnudx(i,j ,k1))+ &
1150 & cff1*(tl_cff5*dnudz+cff5*tl_dnudz- &
1151 & tl_dnudx(i,j-1,k1))+ &
1152 & cff2*(tl_cff6*dnudz+cff6*tl_dnudz- &
1153 & tl_dnudx(i,j ,k2))+ &
1154 & cff3*(tl_cff7*dnudz+cff7*tl_dnudz- &
1155 & tl_dnudx(i,j-1,k2))+ &
1156 & cff4*(tl_cff8*dnudz+cff8*tl_dnudz- &
1157 & tl_dnudx(i,j ,k1)))
1158#ifdef VISC_3DCOEF
1159 tl_vfsx(i,j,k2)=tl_vfsx(i,j,k2)- &
1160 & tl_fac1* &
1161 & (cff1*(cff5*dnudz-dnudx(i,j-1,k1))+ &
1162 & cff2*(cff6*dnudz-dnudx(i,j ,k2))+ &
1163 & cff3*(cff7*dnudz-dnudx(i,j-1,k2))+ &
1164 & cff4*(cff8*dnudz-dnudx(i,j ,k1)))
1165#endif
1166
1167 cff1=min(dzdx_p(i ,j,k1),0.0_r8)
1168 cff2=min(dzdx_p(i+1,j,k2),0.0_r8)
1169 cff3=max(dzdx_p(i ,j,k2),0.0_r8)
1170 cff4=max(dzdx_p(i+1,j,k1),0.0_r8)
1171 cff5=min(dzde_p(i ,j,k1),0.0_r8)
1172 cff6=min(dzde_p(i+1,j,k2),0.0_r8)
1173 cff7=max(dzde_p(i ,j,k2),0.0_r8)
1174 cff8=max(dzde_p(i+1,j,k1),0.0_r8)
1175 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx_p(i ,j,k1)))* &
1176 & tl_dzdx_p(i ,j,k1)
1177 tl_cff2=(0.5_r8+sign(0.5_r8,-dzdx_p(i+1,j,k2)))* &
1178 & tl_dzdx_p(i+1,j,k2)
1179 tl_cff3=(0.5_r8+sign(0.5_r8, dzdx_p(i ,j,k2)))* &
1180 & tl_dzdx_p(i ,j,k2)
1181 tl_cff4=(0.5_r8+sign(0.5_r8, dzdx_p(i+1,j,k1)))* &
1182 & tl_dzdx_p(i+1,j,k1)
1183 tl_cff5=(0.5_r8+sign(0.5_r8,-dzde_p(i ,j,k1)))* &
1184 & tl_dzde_p(i ,j,k1)
1185 tl_cff6=(0.5_r8+sign(0.5_r8,-dzde_p(i+1,j,k2)))* &
1186 & tl_dzde_p(i+1,j,k2)
1187 tl_cff7=(0.5_r8+sign(0.5_r8, dzde_p(i ,j,k2)))* &
1188 & tl_dzde_p(i ,j,k2)
1189 tl_cff8=(0.5_r8+sign(0.5_r8, dzde_p(i+1,j,k1)))* &
1190 & tl_dzde_p(i+1,j,k1)
1191 vfse(i,j,k2)=vfse(i,j,k2)+ &
1192 & fac2* &
1193 & (cff1*(cff5*dmudz-dmude(i ,j,k1))+ &
1194 & cff2*(cff6*dmudz-dmude(i+1,j,k2))+ &
1195 & cff3*(cff7*dmudz-dmude(i ,j,k2))+ &
1196 & cff4*(cff8*dmudz-dmude(i+1,j,k1)))
1197 tl_vfse(i,j,k2)=tl_vfse(i,j,k2)+ &
1198 & fac2* &
1199 & (tl_cff1*(cff5*dmudz-dmude(i ,j,k1))+ &
1200 & tl_cff2*(cff6*dmudz-dmude(i+1,j,k2))+ &
1201 & tl_cff3*(cff7*dmudz-dmude(i ,j,k2))+ &
1202 & tl_cff4*(cff8*dmudz-dmude(i+1,j,k1))+ &
1203 & cff1*(tl_cff5*dmudz+cff5*tl_dmudz- &
1204 & tl_dmude(i ,j,k1))+ &
1205 & cff2*(tl_cff6*dmudz+cff6*tl_dmudz- &
1206 & tl_dmude(i+1,j,k2))+ &
1207 & cff3*(tl_cff7*dmudz+cff7*tl_dmudz- &
1208 & tl_dmude(i ,j,k2))+ &
1209 & cff4*(tl_cff8*dmudz+cff8*tl_dmudz- &
1210 & tl_dmude(i+1,j,k1)))
1211#ifdef VISC_3DCOEF
1212 tl_vfse(i,j,k2)=tl_vfse(i,j,k2)+ &
1213 & tl_fac2* &
1214 & (cff1*(cff5*dmudz-dmude(i ,j,k1))+ &
1215 & cff2*(cff6*dmudz-dmude(i+1,j,k2))+ &
1216 & cff3*(cff7*dmudz-dmude(i ,j,k2))+ &
1217 & cff4*(cff8*dmudz-dmude(i+1,j,k1)))
1218#endif
1219 END DO
1220 END DO
1221 END IF
1222
1223
1224
1225 DO j=jstrm1,jendp1
1226 DO i=istrum1,iendp1
1227 cff=0.125_r8*(pm(i-1,j)+pm(i,j))* &
1228 & (pn(i-1,j)+pn(i,j))
1229 cff1=1.0_r8/(0.5_r8*(hz(i-1,j,k)+hz(i,j,k)))
1230 tl_cff1=-cff1*cff1* &
1231 & (0.5_r8*(tl_hz(i-1,j,k)+tl_hz(i,j,k)))
1232 lapu(i,j,k)=cff*((pn(i-1,j)+pn(i,j))* &
1233 (ufx(i,j)-ufx(i-1,j))+ &
1234 & (pm(i-1,j)+pm(i,j))* &
1235 & (ufe(i,j+1)-ufe(i,j)))+ &
1236 & cff1*((ufsx(i,j,k2)+ufse(i,j,k2))- &
1237 & (ufsx(i,j,k1)+ufse(i,j,k1)))
1238 tl_lapu(i,j,k)=cff*((pn(i-1,j)+pn(i,j))* &
1239 (tl_ufx(i,j)-tl_ufx(i-1,j))+ &
1240 & (pm(i-1,j)+pm(i,j))* &
1241 & (tl_ufe(i,j+1)-tl_ufe(i,j)))+ &
1242 & tl_cff1*((ufsx(i,j,k2)+ufse(i,j,k2))- &
1243 & (ufsx(i,j,k1)+ufse(i,j,k1)))+ &
1244 & cff1*((tl_ufsx(i,j,k2)+tl_ufse(i,j,k2))- &
1245 & (tl_ufsx(i,j,k1)+tl_ufse(i,j,k1)))
1246#ifdef MASKING
1247 lapu(i,j,k)=lapu(i,j,k)*umask(i,j)
1248 tl_lapu(i,j,k)=tl_lapu(i,j,k)*umask(i,j)
1249#endif
1250 END DO
1251 END DO
1252
1253 DO j=jstrvm1,jendp1
1254 DO i=istrm1,iendp1
1255 cff=0.125_r8*(pm(i,j)+pm(i,j-1))* &
1256 & (pn(i,j)+pn(i,j-1))
1257 cff1=1.0_r8/(0.5_r8*(hz(i,j-1,k)+hz(i,j,k)))
1258 tl_cff1=-cff1*cff1* &
1259 & (0.5_r8*(tl_hz(i,j-1,k)+tl_hz(i,j,k)))
1260 lapv(i,j,k)=cff*((pn(i,j-1)+pn(i,j))* &
1261 & (vfx(i+1,j)-vfx(i,j))- &
1262 & (pm(i,j-1)+pm(i,j))* &
1263 & (vfe(i,j)-vfe(i,j-1)))+ &
1264 & cff1*((vfsx(i,j,k2)+vfse(i,j,k2))- &
1265 & (vfsx(i,j,k1)+vfse(i,j,k1)))
1266 tl_lapv(i,j,k)=cff*((pn(i,j-1)+pn(i,j))* &
1267 & (tl_vfx(i+1,j)-tl_vfx(i,j))- &
1268 & (pm(i,j-1)+pm(i,j))* &
1269 & (tl_vfe(i,j)-tl_vfe(i,j-1)))+ &
1270 & tl_cff1*((vfsx(i,j,k2)+vfse(i,j,k2))- &
1271 & (vfsx(i,j,k1)+vfse(i,j,k1)))+ &
1272 & cff1*((tl_vfsx(i,j,k2)+tl_vfse(i,j,k2))- &
1273 & (tl_vfsx(i,j,k1)+tl_vfse(i,j,k1)))
1274#ifdef MASKING
1275 lapv(i,j,k)=lapv(i,j,k)*vmask(i,j)
1276 tl_lapv(i,j,k)=tl_lapv(i,j,k)*vmask(i,j)
1277#endif
1278 END DO
1279 END DO
1280 END IF
1281 END DO k_loop1
1282
1283
1284
1285
1287 IF (
domain(ng)%Western_Edge(tile))
THEN
1290 DO j=jstrm1,jendp1
1291 lapu(istru-1,j,k)=0.0_r8
1292 tl_lapu(istru-1,j,k)=0.0_r8
1293 END DO
1294 END DO
1295 ELSE
1297 DO j=jstrm1,jendp1
1298 lapu(istru-1,j,k)=lapu(istru,j,k)
1299 tl_lapu(istru-1,j,k)=tl_lapu(istru,j,k)
1300 END DO
1301 END DO
1302 END IF
1305 DO j=jstrvm1,jendp1
1306 lapv(istr-1,j,k)=
gamma2(ng)*lapv(istr,j,k)
1307 tl_lapv(istr-1,j,k)=
gamma2(ng)*tl_lapv(istr,j,k)
1308 END DO
1309 END DO
1310 ELSE
1312 DO j=jstrvm1,jendp1
1313 lapv(istr-1,j,k)=0.0_r8
1314 tl_lapv(istr-1,j,k)=0.0_r8
1315 END DO
1316 END DO
1317 END IF
1318 END IF
1319 END IF
1320
1322 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1325 DO j=jstrm1,jendp1
1326 lapu(iend+1,j,k)=0.0_r8
1327 tl_lapu(iend+1,j,k)=0.0_r8
1328 END DO
1329 END DO
1330 ELSE
1332 DO j=jstrm1,jendp1
1333 lapu(iend+1,j,k)=lapu(iend,j,k)
1334 tl_lapu(iend+1,j,k)=tl_lapu(iend,j,k)
1335 END DO
1336 END DO
1337 END IF
1340 DO j=jstrvm1,jendp1
1341 lapv(iend+1,j,k)=
gamma2(ng)*lapv(iend,j,k)
1342 tl_lapv(iend+1,j,k)=
gamma2(ng)*tl_lapv(iend,j,k)
1343 END DO
1344 END DO
1345 ELSE
1347 DO j=jstrvm1,jendp1
1348 lapv(iend+1,j,k)=0.0_r8
1349 tl_lapv(iend+1,j,k)=0.0_r8
1350 END DO
1351 END DO
1352 END IF
1353 END IF
1354 END IF
1355
1357 IF (
domain(ng)%Southern_Edge(tile))
THEN
1360 DO i=istrum1,iendp1
1361 lapu(i,jstr-1,k)=
gamma2(ng)*lapu(i,jstr,k)
1362 tl_lapu(i,jstr-1,k)=
gamma2(ng)*tl_lapu(i,jstr,k)
1363 END DO
1364 END DO
1365 ELSE
1367 DO i=istrum1,iendp1
1368 lapu(i,jstr-1,k)=0.0_r8
1369 tl_lapu(i,jstr-1,k)=0.0_r8
1370 END DO
1371 END DO
1372 END IF
1375 DO i=istrm1,iendp1
1376 lapv(i,jstrv-1,k)=0.0_r8
1377 tl_lapv(i,jstrv-1,k)=0.0_r8
1378 END DO
1379 END DO
1380 ELSE
1382 DO i=istrm1,iendp1
1383 lapv(i,jstrv-1,k)=lapv(i,jstrv,k)
1384 tl_lapv(i,jstrv-1,k)=tl_lapv(i,jstrv,k)
1385 END DO
1386 END DO
1387 END IF
1388 END IF
1389 END IF
1390
1392 IF (
domain(ng)%Northern_Edge(tile))
THEN
1395 DO i=istrum1,iendp1
1396 lapu(i,jend+1,k)=
gamma2(ng)*lapu(i,jend,k)
1397 tl_lapu(i,jend+1,k)=
gamma2(ng)*tl_lapu(i,jend,k)
1398 END DO
1399 END DO
1400 ELSE
1402 DO i=istrum1,iendp1
1403 lapu(i,jend+1,k)=0.0_r8
1404 tl_lapu(i,jend+1,k)=0.0_r8
1405 END DO
1406 END DO
1407 END IF
1410 DO i=istrm1,iendp1
1411 lapv(i,jend+1,k)=0.0_r8
1412 tl_lapv(i,jend+1,k)=0.0_r8
1413 END DO
1414 END DO
1415 ELSE
1417 DO i=istrm1,iendp1
1418 lapv(i,jend+1,k)=lapv(i,jend,k)
1419 tl_lapv(i,jend+1,k)=tl_lapv(i,jend,k)
1420 END DO
1421 END DO
1422 END IF
1423 END IF
1424 END IF
1425
1428 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
1430 lapu(istr ,jstr-1,k)=0.5_r8* &
1431 & (lapu(istr+1,jstr-1,k)+ &
1432 & lapu(istr ,jstr ,k))
1433 tl_lapu(istr ,jstr-1,k)=0.5_r8* &
1434 & (tl_lapu(istr+1,jstr-1,k)+ &
1435 & tl_lapu(istr ,jstr ,k))
1436 lapv(istr-1,jstr ,k)=0.5_r8* &
1437 & (lapv(istr-1,jstr+1,k)+ &
1438 & lapv(istr ,jstr ,k))
1439 tl_lapv(istr-1,jstr ,k)=0.5_r8* &
1440 & (tl_lapv(istr-1,jstr+1,k)+ &
1441 & tl_lapv(istr ,jstr ,k))
1442 END DO
1443 END IF
1444 END IF
1445
1448 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
1450 lapu(iend+1,jstr-1,k)=0.5_r8* &
1451 & (lapu(iend ,jstr-1,k)+ &
1452 & lapu(iend+1,jstr ,k))
1453 tl_lapu(iend+1,jstr-1,k)=0.5_r8* &
1454 & (tl_lapu(iend ,jstr-1,k)+ &
1455 & tl_lapu(iend+1,jstr ,k))
1456 lapv(iend+1,jstr ,k)=0.5_r8* &
1457 & (lapv(iend ,jstr ,k)+ &
1458 & lapv(iend+1,jstr+1,k))
1459 tl_lapv(iend+1,jstr ,k)=0.5_r8* &
1460 & (tl_lapv(iend ,jstr ,k)+ &
1461 & tl_lapv(iend+1,jstr+1,k))
1462 END DO
1463 END IF
1464 END IF
1465
1468 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
1470 lapu(istr ,jend+1,k)=0.5_r8* &
1471 & (lapu(istr+1,jend+1,k)+ &
1472 & lapu(istr ,jend ,k))
1473 tl_lapu(istr ,jend+1,k)=0.5_r8* &
1474 & (tl_lapu(istr+1,jend+1,k)+ &
1475 & tl_lapu(istr ,jend ,k))
1476 lapv(istr-1,jend+1,k)=0.5_r8* &
1477 & (lapv(istr ,jend+1,k)+ &
1478 & lapv(istr-1,jend ,k))
1479 tl_lapv(istr-1,jend+1,k)=0.5_r8* &
1480 & (tl_lapv(istr ,jend+1,k)+ &
1481 & tl_lapv(istr-1,jend ,k))
1482 END DO
1483 END IF
1484 END IF
1485
1488 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
1490 lapu(iend+1,jend+1,k)=0.5_r8* &
1491 & (lapu(iend ,jend+1,k)+ &
1492 & lapu(iend+1,jend ,k))
1493 tl_lapu(iend+1,jend+1,k)=0.5_r8* &
1494 & (tl_lapu(iend ,jend+1,k)+ &
1495 & tl_lapu(iend+1,jend ,k))
1496 lapv(iend+1,jend+1,k)=0.5_r8* &
1497 & (lapv(iend ,jend+1,k)+ &
1498 & lapv(iend+1,jend ,k))
1499 tl_lapv(iend+1,jend+1,k)=0.5_r8* &
1500 & (tl_lapv(iend ,jend+1,k)+ &
1501 & tl_lapv(iend+1,jend ,k))
1502 END DO
1503 END IF
1504 END IF
1505
1506
1507
1508
1509 k2=1
1510 k_loop2 :
DO k=0,
n(ng)
1511 k1=k2
1512 k2=3-k1
1513 IF (k.lt.
n(ng))
THEN
1514
1515
1516
1517 DO j=jstr-1,jend+1
1518 DO i=istru-1,iend+1
1519 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
1520#ifdef MASKING
1521 cff=cff*umask(i,j)
1522#endif
1523 ufx(i,j)=cff*(z_r(i ,j,k+1)- &
1524 & z_r(i-1,j,k+1))
1525 tl_ufx(i,j)=cff*(tl_z_r(i ,j,k+1)- &
1526 & tl_z_r(i-1,j,k+1))
1527 END DO
1528 END DO
1529 DO j=jstrv-1,jend+1
1530 DO i=istr-1,iend+1
1531 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
1532#ifdef MASKING
1533 cff=cff*vmask(i,j)
1534#endif
1535 vfe(i,j)=cff*(z_r(i,j ,k+1)- &
1536 & z_r(i,j-1,k+1))
1537 tl_vfe(i,j)=cff*(tl_z_r(i,j ,k+1)- &
1538 & tl_z_r(i,j-1,k+1))
1539 END DO
1540 END DO
1541
1542 DO j=jstr,jend+1
1543 DO i=istr,iend+1
1544 dzdx_p(i,j,k2)=0.5_r8*(ufx(i,j-1)+ &
1545 & ufx(i,j ))
1546 tl_dzdx_p(i,j,k2)=0.5_r8*(tl_ufx(i,j-1)+ &
1547 & tl_ufx(i,j ))
1548 dzde_p(i,j,k2)=0.5_r8*(vfe(i-1,j)+ &
1549 & vfe(i ,j))
1550 tl_dzde_p(i,j,k2)=0.5_r8*(tl_vfe(i-1,j)+ &
1551 & tl_vfe(i ,j))
1552 END DO
1553 END DO
1554 DO j=jstrv-1,jend
1555 DO i=istru-1,iend
1556 dzdx_r(i,j,k2)=0.5_r8*(ufx(i ,j)+ &
1557 & ufx(i+1,j))
1558 tl_dzdx_r(i,j,k2)=0.5_r8*(tl_ufx(i ,j)+ &
1559 & tl_ufx(i+1,j))
1560 dzde_r(i,j,k2)=0.5_r8*(vfe(i,j )+ &
1561 & vfe(i,j+1))
1562 tl_dzde_r(i,j,k2)=0.5_r8*(tl_vfe(i,j )+ &
1563 & tl_vfe(i,j+1))
1564 END DO
1565 END DO
1566
1567
1568
1569
1570 DO j=jstrv-1,jend
1571 DO i=istru-1,iend
1572 cff=0.5_r8*pm(i,j)
1573#ifdef MASKING
1574 cff=cff*rmask(i,j)
1575#endif
1576 dnudx(i,j,k2)=cff*((pn(i ,j)+pn(i+1,j))* &
1577 & lapu(i+1,j,k+1)- &
1578 & (pn(i-1,j)+pn(i ,j))* &
1579 & lapu(i ,j,k+1))
1580 tl_dnudx(i,j,k2)=cff*((pn(i ,j)+pn(i+1,j))* &
1581 & tl_lapu(i+1,j,k+1)- &
1582 & (pn(i-1,j)+pn(i ,j))* &
1583 & tl_lapu(i ,j,k+1))
1584 END DO
1585 END DO
1586
1587 DO j=jstr,jend+1
1588 DO i=istr,iend+1
1589 cff=0.125_r8*(pn(i-1,j )+pn(i,j )+ &
1590 & pn(i-1,j-1)+pn(i,j-1))
1591#ifdef MASKING
1592 cff=cff*pmask(i,j)
1593#endif
1594 dmude(i,j,k2)=cff*((pm(i-1,j )+pm(i,j ))* &
1595 & lapu(i,j ,k+1)- &
1596 & (pm(i-1,j-1)+pm(i,j-1))* &
1597 & lapu(i,j-1,k+1))
1598 tl_dmude(i,j,k2)=cff*((pm(i-1,j )+pm(i,j ))* &
1599 & tl_lapu(i,j ,k+1)- &
1600 & (pm(i-1,j-1)+pm(i,j-1))* &
1601 & tl_lapu(i,j-1,k+1))
1602 END DO
1603 END DO
1604
1605 DO j=jstr,jend+1
1606 DO i=istr,iend+1
1607 cff=0.125_r8*(pm(i-1,j )+pm(i,j )+ &
1608 & pm(i-1,j-1)+pm(i,j-1))
1609#ifdef MASKING
1610 cff=cff*pmask(i,j)
1611#endif
1612 dnvdx(i,j,k2)=cff*((pn(i ,j-1)+pn(i ,j))* &
1613 & lapv(i ,j,k+1)- &
1614 & (pn(i-1,j-1)+pn(i-1,j))* &
1615 & lapv(i-1,j,k+1))
1616 tl_dnvdx(i,j,k2)=cff*((pn(i ,j-1)+pn(i ,j))* &
1617 & tl_lapv(i ,j,k+1)- &
1618 & (pn(i-1,j-1)+pn(i-1,j))* &
1619 & tl_lapv(i-1,j,k+1))
1620 END DO
1621 END DO
1622
1623 DO j=jstrv-1,jend
1624 DO i=istru-1,iend
1625 cff=0.5_r8*pn(i,j)
1626#ifdef MASKING
1627 cff=cff*rmask(i,j)
1628#endif
1629 dmvde(i,j,k2)=cff*((pm(i,j )+pm(i,j+1))* &
1630 & lapv(i,j+1,k+1)- &
1631 & (pm(i,j-1)+pm(i,j ))* &
1632 & lapv(i,j ,k+1))
1633 tl_dmvde(i,j,k2)=cff*((pm(i,j )+pm(i,j+1))* &
1634 & tl_lapv(i,j+1,k+1)- &
1635 & (pm(i,j-1)+pm(i,j ))* &
1636 & tl_lapv(i,j ,k+1))
1637 END DO
1638 END DO
1639 END IF
1640
1641 IF ((k.eq.0).or.(k.eq.
n(ng)))
THEN
1642 DO j=jstr-1,jend+1
1643 DO i=istru-1,iend+1
1644 dudz(i,j,k2)=0.0_r8
1645 tl_dudz(i,j,k2)=0.0_r8
1646 END DO
1647 END DO
1648 DO j=jstrv-1,jend+1
1649 DO i=istr-1,iend+1
1650 dvdz(i,j,k2)=0.0_r8
1651 tl_dvdz(i,j,k2)=0.0_r8
1652 END DO
1653 END DO
1654
1655 DO j=jstr,jend
1656 DO i=istru,iend
1657 ufsx(i,j,k2)=0.0_r8
1658 tl_ufsx(i,j,k2)=0.0_r8
1659 ufse(i,j,k2)=0.0_r8
1660 tl_ufse(i,j,k2)=0.0_r8
1661 END DO
1662 END DO
1663 DO j=jstrv,jend
1664 DO i=istr,iend
1665 vfsx(i,j,k2)=0.0_r8
1666 tl_vfsx(i,j,k2)=0.0_r8
1667 vfse(i,j,k2)=0.0_r8
1668 tl_vfse(i,j,k2)=0.0_r8
1669 END DO
1670 END DO
1671 ELSE
1672 DO j=jstr-1,jend+1
1673 DO i=istru-1,iend+1
1674 cff=1.0_r8/(0.5_r8*(z_r(i-1,j,k+1)- &
1675 & z_r(i-1,j,k )+ &
1676 & z_r(i ,j,k+1)- &
1677 & z_r(i ,j,k )))
1678 tl_cff=-cff*cff*(0.5_r8*(tl_z_r(i-1,j,k+1)- &
1679 & tl_z_r(i-1,j,k )+ &
1680 & tl_z_r(i ,j,k+1)- &
1681 & tl_z_r(i ,j,k )))
1682 dudz(i,j,k2)=cff*(lapu(i,j,k+1)- &
1683 & lapu(i,j,k ))
1684 tl_dudz(i,j,k2)=tl_cff*(lapu(i,j,k+1)- &
1685 & lapu(i,j,k ))+ &
1686 & cff*(tl_lapu(i,j,k+1)- &
1687 & tl_lapu(i,j,k ))
1688 END DO
1689 END DO
1690 DO j=jstrv-1,jend+1
1691 DO i=istr-1,iend+1
1692 cff=1.0_r8/(0.5_r8*(z_r(i,j-1,k+1)- &
1693 & z_r(i,j-1,k )+ &
1694 & z_r(i,j ,k+1)- &
1695 & z_r(i,j ,k )))
1696 tl_cff=-cff*cff*(0.5_r8*(tl_z_r(i,j-1,k+1)- &
1697 & tl_z_r(i,j-1,k )+ &
1698 & tl_z_r(i,j ,k+1)- &
1699 & tl_z_r(i,j ,k )))
1700 dvdz(i,j,k2)=cff*(lapv(i,j,k+1)- &
1701 & lapv(i,j,k ))
1702 tl_dvdz(i,j,k2)=tl_cff*(lapv(i,j,k+1)- &
1703 & lapv(i,j,k ))+ &
1704 & cff*(tl_lapv(i,j,k+1)- &
1705 & tl_lapv(i,j,k ))
1706 END DO
1707 END DO
1708 END IF
1709
1710
1711
1712
1713 IF (k.gt.0) THEN
1714 DO j=jstrv-1,jend
1715 DO i=istru-1,iend
1716 cff1=min(dzdx_r(i,j,k1),0.0_r8)
1717 cff2=max(dzdx_r(i,j,k1),0.0_r8)
1718 cff3=min(dzde_r(i,j,k1),0.0_r8)
1719 cff4=max(dzde_r(i,j,k1),0.0_r8)
1720 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx_r(i,j,k1)))* &
1721 & tl_dzdx_r(i,j,k1)
1722 tl_cff2=(0.5_r8+sign(0.5_r8, dzdx_r(i,j,k1)))* &
1723 & tl_dzdx_r(i,j,k1)
1724 tl_cff3=(0.5_r8+sign(0.5_r8,-dzde_r(i,j,k1)))* &
1725 & tl_dzde_r(i,j,k1)
1726 tl_cff4=(0.5_r8+sign(0.5_r8, dzde_r(i,j,k1)))* &
1727 & tl_dzde_r(i,j,k1)
1728#ifdef VISC_3DCOEF
1729 cff=hz(i,j,k)* &
1730 & (on_r(i,j)*(dnudx(i,j,k1)- &
1731 & 0.5_r8*pn(i,j)* &
1732 & (cff1*(dudz(i ,j,k1)+ &
1733 & dudz(i+1,j,k2))+ &
1734 & cff2*(dudz(i ,j,k2)+ &
1735 & dudz(i+1,j,k1))))- &
1736 & om_r(i,j)*(dmvde(i,j,k1)- &
1737 & 0.5_r8*pm(i,j)* &
1738 & (cff3*(dvdz(i,j ,k1)+ &
1739 & dvdz(i,j+1,k2))+ &
1740 & cff4*(dvdz(i,j ,k2)+ &
1741 & dvdz(i,j+1,k1)))))
1742#else
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757#endif
1758 tl_cff=tl_hz(i,j,k)* &
1759 & (on_r(i,j)*(dnudx(i,j,k1)- &
1760 & 0.5_r8*pn(i,j)* &
1761 & (cff1*(dudz(i ,j,k1)+ &
1762 & dudz(i+1,j,k2))+ &
1763 & cff2*(dudz(i ,j,k2)+ &
1764 & dudz(i+1,j,k1))))- &
1765 & om_r(i,j)*(dmvde(i,j,k1)- &
1766 & 0.5_r8*pm(i,j)* &
1767 & (cff3*(dvdz(i,j ,k1)+ &
1768 & dvdz(i,j+1,k2))+ &
1769 & cff4*(dvdz(i,j ,k2)+ &
1770 & dvdz(i,j+1,k1)))))+ &
1771 & hz(i,j,k)* &
1772 & (on_r(i,j)*(tl_dnudx(i,j,k1)- &
1773 & 0.5_r8*pn(i,j)* &
1774 & (tl_cff1*(dudz(i ,j,k1)+ &
1775 & dudz(i+1,j,k2))+ &
1776 & cff1*(tl_dudz(i ,j,k1)+ &
1777 & tl_dudz(i+1,j,k2))+ &
1778 & tl_cff2*(dudz(i ,j,k2)+ &
1779 & dudz(i+1,j,k1))+ &
1780 & cff2*(tl_dudz(i ,j,k2)+ &
1781 & tl_dudz(i+1,j,k1))))- &
1782 & om_r(i,j)*(tl_dmvde(i,j,k1)- &
1783 & 0.5_r8*pm(i,j)* &
1784 & (tl_cff3*(dvdz(i,j ,k1)+ &
1785 & dvdz(i,j+1,k2))+ &
1786 & cff3*(tl_dvdz(i,j ,k1)+ &
1787 & tl_dvdz(i,j+1,k2))+ &
1788 & tl_cff4*(dvdz(i,j ,k2)+ &
1789 & dvdz(i,j+1,k1))+ &
1790 & cff4*(tl_dvdz(i,j ,k2)+ &
1791 & tl_dvdz(i,j+1,k1)))))
1792#ifdef MASKING
1793# ifdef VISC_3DCOEF
1794 cff=cff*rmask(i,j)
1795# else
1796
1797
1798# endif
1799 tl_cff=tl_cff*rmask(i,j)
1800#endif
1801#ifdef VISC_3DCOEF
1802# ifdef UV_U3ADV_SPLIT
1803
1804
1805 tl_ufx(i,j)=on_r(i,j)*on_r(i,j)* &
1806 & (tl_uvis3d_r(i,j,k)*cff+ &
1807 & uvis3d_r(i,j,k)*tl_cff)
1808
1809
1810 tl_vfe(i,j)=om_r(i,j)*om_r(i,j)* &
1811 & (tl_vvis3d_r(i,j,k)*cff+ &
1812 & vvis3d_r(i,j,k)*tl_cff)
1813# else
1814
1815
1816 tl_ufx(i,j)=on_r(i,j)*on_r(i,j)* &
1817 & (tl_visc3d_r(i,j,k)*cff+ &
1818 & visc3d_r(i,j,k)*tl_cff)
1819
1820
1821 tl_vfe(i,j)=om_r(i,j)*om_r(i,j)* &
1822 & (tl_visc3d_r(i,j,k)*cff+ &
1823 & visc3d_r(i,j,k)*tl_cff)
1824# endif
1825#else
1826
1827
1828 tl_ufx(i,j)=on_r(i,j)*on_r(i,j)*visc4_r(i,j)*tl_cff
1829
1830
1831 tl_vfe(i,j)=om_r(i,j)*om_r(i,j)*visc4_r(i,j)*tl_cff
1832#endif
1833 END DO
1834 END DO
1835
1836 DO j=jstr,jend+1
1837 DO i=istr,iend+1
1838 pm_p=0.25_r8*(pm(i-1,j-1)+pm(i-1,j)+ &
1839 & pm(i ,j-1)+pm(i ,j))
1840 pn_p=0.25_r8*(pn(i-1,j-1)+pn(i-1,j)+ &
1841 & pn(i ,j-1)+pn(i ,j))
1842 cff1=min(dzdx_p(i,j,k1),0.0_r8)
1843 cff2=max(dzdx_p(i,j,k1),0.0_r8)
1844 cff3=min(dzde_p(i,j,k1),0.0_r8)
1845 cff4=max(dzde_p(i,j,k1),0.0_r8)
1846 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx_p(i,j,k1)))* &
1847 & tl_dzdx_p(i,j,k1)
1848 tl_cff2=(0.5_r8+sign(0.5_r8, dzdx_p(i,j,k1)))* &
1849 & tl_dzdx_p(i,j,k1)
1850 tl_cff3=(0.5_r8+sign(0.5_r8,-dzde_p(i,j,k1)))* &
1851 & tl_dzde_p(i,j,k1)
1852 tl_cff4=(0.5_r8+sign(0.5_r8, dzde_p(i,j,k1)))* &
1853 & tl_dzde_p(i,j,k1)
1854#ifdef VISC_3DCOEF
1855 cff=0.25_r8* &
1856 & (hz(i-1,j ,k)+hz(i,j ,k)+ &
1857 & hz(i-1,j-1,k)+hz(i,j-1,k))* &
1858 & (on_p(i,j)*(dnvdx(i,j,k1)- &
1859 & 0.5_r8*pn_p* &
1860 & (cff1*(dvdz(i-1,j,k1)+ &
1861 & dvdz(i ,j,k2))+ &
1862 & cff2*(dvdz(i-1,j,k2)+ &
1863 & dvdz(i ,j,k1))))+ &
1864 & om_p(i,j)*(dmude(i,j,k1)- &
1865 & 0.5_r8*pm_p* &
1866 & (cff3*(dudz(i,j-1,k1)+ &
1867 & dudz(i,j ,k2))+ &
1868 & cff4*(dudz(i,j-1,k2)+ &
1869 & dudz(i,j ,k1)))))
1870#else
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887#endif
1888 tl_cff=0.25_r8* &
1889 & ((tl_hz(i-1,j ,k)+tl_hz(i,j ,k)+ &
1890 & tl_hz(i-1,j-1,k)+tl_hz(i,j-1,k))* &
1891 & (on_p(i,j)*(dnvdx(i,j,k1)- &
1892 & 0.5_r8*pn_p* &
1893 & (cff1*(dvdz(i-1,j,k1)+ &
1894 & dvdz(i ,j,k2))+ &
1895 & cff2*(dvdz(i-1,j,k2)+ &
1896 & dvdz(i ,j,k1))))+ &
1897 & om_p(i,j)*(dmude(i,j,k1)- &
1898 & 0.5_r8*pm_p* &
1899 & (cff3*(dudz(i,j-1,k1)+ &
1900 & dudz(i,j ,k2))+ &
1901 & cff4*(dudz(i,j-1,k2)+ &
1902 & dudz(i,j ,k1)))))+ &
1903 & (hz(i-1,j ,k)+hz(i,j ,k)+ &
1904 & hz(i-1,j-1,k)+hz(i,j-1,k))* &
1905 & (on_p(i,j)*(tl_dnvdx(i,j,k1)- &
1906 & 0.5_r8*pn_p* &
1907 & (tl_cff1*(dvdz(i-1,j,k1)+ &
1908 & dvdz(i ,j,k2))+ &
1909 & cff1*(tl_dvdz(i-1,j,k1)+ &
1910 & tl_dvdz(i ,j,k2))+ &
1911 & tl_cff2*(dvdz(i-1,j,k2)+ &
1912 & dvdz(i ,j,k1))+ &
1913 & cff2*(tl_dvdz(i-1,j,k2)+ &
1914 & tl_dvdz(i ,j,k1))))+ &
1915 & om_p(i,j)*(tl_dmude(i,j,k1)- &
1916 & 0.5_r8*pm_p* &
1917 & (tl_cff3*(dudz(i,j-1,k1)+ &
1918 & dudz(i,j ,k2))+ &
1919 & cff3*(tl_dudz(i,j-1,k1)+ &
1920 & tl_dudz(i,j ,k2))+ &
1921 & tl_cff4*(dudz(i,j-1,k2)+ &
1922 & dudz(i,j ,k1))+ &
1923 & cff4*(tl_dudz(i,j-1,k2)+ &
1924 & tl_dudz(i,j ,k1))))))
1925#ifdef MASKING
1926# ifdef VISC_3DCOEF
1927 cff=cff*pmask(i,j)
1928# else
1929
1930
1931# endif
1932 tl_cff=tl_cff*pmask(i,j)
1933#endif
1934#ifdef VISC_3DCOEF
1935# ifdef UV_U3ADV_SPLIT
1936 uvis_p=0.25_r8* &
1937 & (uvis3d_r(i-1,j-1,k)+uvis3d_r(i-1,j,k)+ &
1938 & uvis3d_r(i ,j-1,k)+uvis3d_r(i ,j,k))
1939 tl_uvis_p=0.25_r8* &
1940 & (tl_uvis3d_r(i-1,j-1,k)+tl_uvis3d_r(i-1,j,k)+ &
1941 & tl_uvis3d_r(i ,j-1,k)+tl_uvis3d_r(i ,j,k))
1942 vvis_p=0.25_r8* &
1943 & (vvis3d_r(i-1,j-1,k)+vvis3d_r(i-1,j,k)+ &
1944 & vvis3d_r(i ,j-1,k)+vvis3d_r(i ,j,k))
1945 tl_vvis_p=0.25_r8* &
1946 & (tl_vvis3d_r(i-1,j-1,k)+tl_vvis3d_r(i-1,j,k)+ &
1947 & tl_vvis3d_r(i ,j-1,k)+tl_vvis3d_r(i ,j,k))
1948
1949
1950 tl_ufe(i,j)=om_p(i,j)*om_p(i,j)* &
1951 & (tl_uvis_p*cff+uvis_p*tl_cff)
1952
1953
1954 tl_vfx(i,j)=on_p(i,j)*on_p(i,j)* &
1955 & (tl_vvis_p*cff+vvis_p*tl_cff)
1956# else
1957 visc_p=0.25_r8* &
1958 & (visc3d_r(i-1,j-1,k)+visc3d_r(i-1,j,k)+ &
1959 & visc3d_r(i ,j-1,k)+visc3d_r(i ,j,k))
1960 tl_visc_p=0.25_r8* &
1961 & (tl_visc3d_r(i-1,j-1,k)+tl_visc3d_r(i-1,j,k)+ &
1962 & tl_visc3d_r(i ,j-1,k)+tl_visc3d_r(i ,j,k))
1963
1964
1965 tl_ufe(i,j)=om_p(i,j)*om_p(i,j)* &
1966 & (tl_visc_p*cff+visc_p*tl_cff)
1967
1968
1969 tl_vfx(i,j)=on_p(i,j)*on_p(i,j)* &
1970 & (tl_visc_p*cff+visc_p*tl_cff)
1971# endif
1972#else
1973
1974
1975 tl_ufe(i,j)=om_p(i,j)*om_p(i,j)*visc4_p(i,j)*tl_cff
1976
1977
1978 tl_vfx(i,j)=on_p(i,j)*on_p(i,j)*visc4_p(i,j)*tl_cff
1979#endif
1980 END DO
1981 END DO
1982
1983
1984
1985
1986 IF (k.lt.
n(ng))
THEN
1987 DO j=jstr,jend
1988 DO i=istru,iend
1989#ifdef VISC_3DCOEF
1990# ifdef UV_U3ADV_SPLIT
1991 cff=0.125_r8* &
1992 & (uvis3d_r(i-1,j,k )+uvis3d_r(i,j,k )+ &
1993 & uvis3d_r(i-1,j,k+1)+uvis3d_r(i,j,k+1))
1994 tl_cff=0.125_r8* &
1995 & (tl_uvis3d_r(i-1,j,k )+tl_uvis3d_r(i,j,k )+ &
1996 & tl_uvis3d_r(i-1,j,k+1)+tl_uvis3d_r(i,j,k+1))
1997# else
1998 cff=0.125_r8* &
1999 & (visc3d_r(i-1,j,k )+visc3d_r(i,j,k )+ &
2000 & visc3d_r(i-1,j,k+1)+visc3d_r(i,j,k+1))
2001 tl_cff=0.125_r8* &
2002 & (tl_visc3d_r(i-1,j,k )+tl_visc3d_r(i,j,k )+ &
2003 & tl_visc3d_r(i-1,j,k+1)+tl_visc3d_r(i,j,k+1))
2004# endif
2005 fac1=cff*on_u(i,j)
2006 tl_fac1=tl_cff*on_u(i,j)
2007 fac2=cff*om_u(i,j)
2008 tl_fac2=tl_cff*om_u(i,j)
2009#else
2010 cff=0.25_r8*(visc4_r(i-1,j)+visc4_r(i,j))
2011 fac1=cff*on_u(i,j)
2012 fac2=cff*om_u(i,j)
2013#endif
2014 cff=0.5_r8*(pn(i-1,j)+pn(i,j))
2015 dnudz=cff*dudz(i,j,k2)
2016 tl_dnudz=cff*tl_dudz(i,j,k2)
2017 dnvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2)+ &
2018 & dvdz(i ,j+1,k2)+ &
2019 & dvdz(i-1,j ,k2)+ &
2020 & dvdz(i ,j ,k2))
2021 tl_dnvdz=cff*0.25_r8*(tl_dvdz(i-1,j+1,k2)+ &
2022 & tl_dvdz(i ,j+1,k2)+ &
2023 & tl_dvdz(i-1,j ,k2)+ &
2024 & tl_dvdz(i ,j ,k2))
2025 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
2026 dmudz=cff*dudz(i,j,k2)
2027 tl_dmudz=cff*tl_dudz(i,j,k2)
2028 dmvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2)+ &
2029 & dvdz(i ,j+1,k2)+ &
2030 & dvdz(i-1,j ,k2)+ &
2031 & dvdz(i ,j ,k2))
2032 tl_dmvdz=cff*0.25_r8*(tl_dvdz(i-1,j+1,k2)+ &
2033 & tl_dvdz(i ,j+1,k2)+ &
2034 & tl_dvdz(i-1,j ,k2)+ &
2035 & tl_dvdz(i ,j ,k2))
2036
2037 cff1=min(dzdx_r(i-1,j,k1),0.0_r8)
2038 cff2=min(dzdx_r(i ,j,k2),0.0_r8)
2039 cff3=max(dzdx_r(i-1,j,k2),0.0_r8)
2040 cff4=max(dzdx_r(i ,j,k1),0.0_r8)
2041 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx_r(i-1,j,k1)))* &
2042 & tl_dzdx_r(i-1,j,k1)
2043 tl_cff2=(0.5_r8+sign(0.5_r8,-dzdx_r(i ,j,k2)))* &
2044 & tl_dzdx_r(i ,j,k2)
2045 tl_cff3=(0.5_r8+sign(0.5_r8, dzdx_r(i-1,j,k2)))* &
2046 & tl_dzdx_r(i-1,j,k2)
2047 tl_cff4=(0.5_r8+sign(0.5_r8, dzdx_r(i ,j,k1)))* &
2048 tl_dzdx_r(i ,j,k1)
2049
2050
2051
2052
2053
2054
2055 tl_ufsx(i,j,k2)=fac1* &
2056 & (tl_cff1*(cff1*dnudz-dnudx(i-1,j,k1))+ &
2057 & tl_cff2*(cff2*dnudz-dnudx(i ,j,k2))+ &
2058 & tl_cff3*(cff3*dnudz-dnudx(i-1,j,k2))+ &
2059 & tl_cff4*(cff4*dnudz-dnudx(i ,j,k1))+ &
2060 & cff1*(tl_cff1*dnudz+cff1*tl_dnudz- &
2061 & tl_dnudx(i-1,j,k1))+ &
2062 & cff2*(tl_cff2*dnudz+cff2*tl_dnudz- &
2063 & tl_dnudx(i ,j,k2))+ &
2064 & cff3*(tl_cff3*dnudz+cff3*tl_dnudz- &
2065 & tl_dnudx(i-1,j,k2))+ &
2066 & cff4*(tl_cff4*dnudz+cff4*tl_dnudz- &
2067 & tl_dnudx(i ,j,k1)))
2068#ifdef VISC_3DCOEF
2069 tl_ufsx(i,j,k2)=tl_ufsx(i,j,k2)+ &
2070 & tl_fac1* &
2071 & (cff1*(cff1*dnudz-dnudx(i-1,j,k1))+ &
2072 & cff2*(cff2*dnudz-dnudx(i ,j,k2))+ &
2073 & cff3*(cff3*dnudz-dnudx(i-1,j,k2))+ &
2074 & cff4*(cff4*dnudz-dnudx(i ,j,k1)))
2075#endif
2076
2077 cff1=min(dzde_p(i,j ,k1),0.0_r8)
2078 cff2=min(dzde_p(i,j+1,k2),0.0_r8)
2079 cff3=max(dzde_p(i,j ,k2),0.0_r8)
2080 cff4=max(dzde_p(i,j+1,k1),0.0_r8)
2081 tl_cff1=(0.5_r8+sign(0.5_r8,-dzde_p(i,j ,k1)))* &
2082 & tl_dzde_p(i,j ,k1)
2083 tl_cff2=(0.5_r8+sign(0.5_r8,-dzde_p(i,j+1,k2)))* &
2084 & tl_dzde_p(i,j+1,k2)
2085 tl_cff3=(0.5_r8+sign(0.5_r8, dzde_p(i,j ,k2)))* &
2086 & tl_dzde_p(i,j ,k2)
2087 tl_cff4=(0.5_r8+sign(0.5_r8, dzde_p(i,j+1,k1)))* &
2088 tl_dzde_p(i,j+1,k1)
2089
2090
2091
2092
2093
2094
2095 tl_ufse(i,j,k2)=fac2* &
2096 & (tl_cff1*(cff1*dmudz-dmude(i,j ,k1))+ &
2097 & tl_cff2*(cff2*dmudz-dmude(i,j+1,k2))+ &
2098 & tl_cff3*(cff3*dmudz-dmude(i,j ,k2))+ &
2099 & tl_cff4*(cff4*dmudz-dmude(i,j+1,k1))+ &
2100 & cff1*(tl_cff1*dmudz+cff1*tl_dmudz- &
2101 & tl_dmude(i,j ,k1))+ &
2102 & cff2*(tl_cff2*dmudz+cff2*tl_dmudz- &
2103 & tl_dmude(i,j+1,k2))+ &
2104 & cff3*(tl_cff3*dmudz+cff3*tl_dmudz- &
2105 & tl_dmude(i,j ,k2))+ &
2106 & cff4*(tl_cff4*dmudz+cff4*tl_dmudz- &
2107 & tl_dmude(i,j+1,k1)))
2108#ifdef VISC_3DCOEF
2109 tl_ufse(i,j,k2)=tl_ufse(i,j,k2)+ &
2110 & tl_fac2* &
2111 & (cff1*(cff1*dmudz-dmude(i,j ,k1))+ &
2112 & cff2*(cff2*dmudz-dmude(i,j+1,k2))+ &
2113 & cff3*(cff3*dmudz-dmude(i,j ,k2))+ &
2114 & cff4*(cff4*dmudz-dmude(i,j+1,k1)))
2115#endif
2116
2117 cff1=min(dzde_p(i,j ,k1),0.0_r8)
2118 cff2=min(dzde_p(i,j+1,k2),0.0_r8)
2119 cff3=max(dzde_p(i,j ,k2),0.0_r8)
2120 cff4=max(dzde_p(i,j+1,k1),0.0_r8)
2121 cff5=min(dzdx_p(i,j ,k1),0.0_r8)
2122 cff6=min(dzdx_p(i,j+1,k2),0.0_r8)
2123 cff7=max(dzdx_p(i,j ,k2),0.0_r8)
2124 cff8=max(dzdx_p(i,j+1,k1),0.0_r8)
2125 tl_cff1=(0.5_r8+sign(0.5_r8,-dzde_p(i,j ,k1)))* &
2126 & tl_dzde_p(i,j ,k1)
2127 tl_cff2=(0.5_r8+sign(0.5_r8,-dzde_p(i,j+1,k2)))* &
2128 & tl_dzde_p(i,j+1,k2)
2129 tl_cff3=(0.5_r8+sign(0.5_r8, dzde_p(i,j ,k2)))* &
2130 & tl_dzde_p(i,j ,k2)
2131 tl_cff4=(0.5_r8+sign(0.5_r8, dzde_p(i,j+1,k1)))* &
2132 & tl_dzde_p(i,j+1,k1)
2133 tl_cff5=(0.5_r8+sign(0.5_r8,-dzdx_p(i,j ,k1)))* &
2134 & tl_dzdx_p(i,j ,k1)
2135 tl_cff6=(0.5_r8+sign(0.5_r8,-dzdx_p(i,j+1,k2)))* &
2136 & tl_dzdx_p(i,j+1,k2)
2137 tl_cff7=(0.5_r8+sign(0.5_r8, dzdx_p(i,j ,k2)))* &
2138 & tl_dzdx_p(i,j ,k2)
2139 tl_cff8=(0.5_r8+sign(0.5_r8, dzdx_p(i,j+1,k1)))* &
2140 & tl_dzdx_p(i,j+1,k1)
2141
2142
2143
2144
2145
2146
2147
2148 tl_ufsx(i,j,k2)=tl_ufsx(i,j,k2)+ &
2149 & fac1* &
2150 & (tl_cff1*(cff5*dnvdz-dnvdx(i,j ,k1))+ &
2151 & tl_cff2*(cff6*dnvdz-dnvdx(i,j+1,k2))+ &
2152 & tl_cff3*(cff7*dnvdz-dnvdx(i,j ,k2))+ &
2153 & tl_cff4*(cff8*dnvdz-dnvdx(i,j+1,k1))+ &
2154 & cff1*(tl_cff5*dnvdz+cff5*tl_dnvdz- &
2155 & tl_dnvdx(i,j ,k1))+ &
2156 & cff2*(tl_cff6*dnvdz+cff6*tl_dnvdz- &
2157 & tl_dnvdx(i,j+1,k2))+ &
2158 & cff3*(tl_cff7*dnvdz+cff7*tl_dnvdz- &
2159 & tl_dnvdx(i,j ,k2))+ &
2160 & cff4*(tl_cff8*dnvdz+cff8*tl_dnvdz- &
2161 & tl_dnvdx(i,j+1,k1)))
2162#ifdef VISC_3DCOEF
2163 tl_ufsx(i,j,k2)=tl_ufsx(i,j,k2)+ &
2164 & tl_fac1* &
2165 & (cff1*(cff5*dnvdz-dnvdx(i,j ,k1))+ &
2166 & cff2*(cff6*dnvdz-dnvdx(i,j+1,k2))+ &
2167 & cff3*(cff7*dnvdz-dnvdx(i,j ,k2))+ &
2168 & cff4*(cff8*dnvdz-dnvdx(i,j+1,k1)))
2169#endif
2170
2171 cff1=min(dzdx_r(i-1,j,k1),0.0_r8)
2172 cff2=min(dzdx_r(i ,j,k2),0.0_r8)
2173 cff3=max(dzdx_r(i-1,j,k2),0.0_r8)
2174 cff4=max(dzdx_r(i ,j,k1),0.0_r8)
2175 cff5=min(dzde_r(i-1,j,k1),0.0_r8)
2176 cff6=min(dzde_r(i ,j,k2),0.0_r8)
2177 cff7=max(dzde_r(i-1,j,k2),0.0_r8)
2178 cff8=max(dzde_r(i ,j,k1),0.0_r8)
2179 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx_r(i-1,j,k1)))* &
2180 & tl_dzdx_r(i-1,j,k1)
2181 tl_cff2=(0.5_r8+sign(0.5_r8,-dzdx_r(i ,j,k2)))* &
2182 & tl_dzdx_r(i ,j,k2)
2183 tl_cff3=(0.5_r8+sign(0.5_r8, dzdx_r(i-1,j,k2)))* &
2184 & tl_dzdx_r(i-1,j,k2)
2185 tl_cff4=(0.5_r8+sign(0.5_r8, dzdx_r(i ,j,k1)))* &
2186 & tl_dzdx_r(i ,j,k1)
2187 tl_cff5=(0.5_r8+sign(0.5_r8,-dzde_r(i-1,j,k1)))* &
2188 & tl_dzde_r(i-1,j,k1)
2189 tl_cff6=(0.5_r8+sign(0.5_r8,-dzde_r(i ,j,k2)))* &
2190 & tl_dzde_r(i ,j,k2)
2191 tl_cff7=(0.5_r8+sign(0.5_r8, dzde_r(i-1,j,k2)))* &
2192 & tl_dzde_r(i-1,j,k2)
2193 tl_cff8=(0.5_r8+sign(0.5_r8, dzde_r(i ,j,k1)))* &
2194 & tl_dzde_r(i ,j,k1)
2195
2196
2197
2198
2199
2200
2201
2202 tl_ufse(i,j,k2)=tl_ufse(i,j,k2)- &
2203 & fac2* &
2204 & (tl_cff1*(cff5*dmvdz-dmvde(i-1,j,k1))+ &
2205 & tl_cff2*(cff6*dmvdz-dmvde(i ,j,k2))+ &
2206 & tl_cff3*(cff7*dmvdz-dmvde(i-1,j,k2))+ &
2207 & tl_cff4*(cff8*dmvdz-dmvde(i ,j,k1))+ &
2208 & cff1*(tl_cff5*dmvdz+cff5*tl_dmvdz- &
2209 & tl_dmvde(i-1,j,k1))+ &
2210 & cff2*(tl_cff6*dmvdz+cff6*tl_dmvdz- &
2211 & tl_dmvde(i ,j,k2))+ &
2212 & cff3*(tl_cff7*dmvdz+cff7*tl_dmvdz- &
2213 & tl_dmvde(i-1,j,k2))+ &
2214 & cff4*(tl_cff8*dmvdz+cff8*tl_dmvdz- &
2215 & tl_dmvde(i ,j,k1)))
2216#ifdef VISC_3DCOEF
2217 tl_ufse(i,j,k2)=tl_ufse(i,j,k2)- &
2218 & tl_fac2* &
2219 & (cff1*(cff5*dmvdz-dmvde(i-1,j,k1))+ &
2220 & cff2*(cff6*dmvdz-dmvde(i ,j,k2))+ &
2221 & cff3*(cff7*dmvdz-dmvde(i-1,j,k2))+ &
2222 & cff4*(cff8*dmvdz-dmvde(i ,j,k1)))
2223#endif
2224 END DO
2225 END DO
2226
2227 DO j=jstrv,jend
2228 DO i=istr,iend
2229#ifdef VISC_3DCOEF
2230# ifdef UV_U3ADV_SPLIT
2231 cff=0.125_r8* &
2232 & (vvis3d_r(i,j-1,k )+vvis3d_r(i,j,k )+ &
2233 & vvis3d_r(i,j-1,k+1)+vvis3d_r(i,j,k+1))
2234 tl_cff=0.125_r8* &
2235 & (tl_vvis3d_r(i,j-1,k )+tl_vvis3d_r(i,j,k )+ &
2236 & tl_vvis3d_r(i,j-1,k+1)+tl_vvis3d_r(i,j,k+1))
2237# else
2238 cff=0.125_r8* &
2239 & (visc3d_r(i,j-1,k )+visc3d_r(i,j,k )+ &
2240 & visc3d_r(i,j-1,k+1)+visc3d_r(i,j,k+1))
2241 tl_cff=0.125_r8* &
2242 & (tl_visc3d_r(i,j-1,k )+tl_visc3d_r(i,j,k )+ &
2243 & tl_visc3d_r(i,j-1,k+1)+tl_visc3d_r(i,j,k+1))
2244# endif
2245 fac1=cff*on_v(i,j)
2246 tl_fac1=tl_cff*on_v(i,j)
2247 fac2=cff*om_v(i,j)
2248 tl_fac2=tl_cff*om_v(i,j)
2249#else
2250 cff=0.25_r8*(visc4_r(i,j-1)+visc4_r(i,j))
2251 fac1=cff*on_v(i,j)
2252 fac2=cff*om_v(i,j)
2253#endif
2254 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
2255 dnudz=cff*0.25_r8*(dudz(i ,j ,k2)+ &
2256 & dudz(i+1,j ,k2)+ &
2257 & dudz(i ,j-1,k2)+ &
2258 & dudz(i+1,j-1,k2))
2259 tl_dnudz=cff*0.25_r8*(tl_dudz(i ,j ,k2)+ &
2260 & tl_dudz(i+1,j ,k2)+ &
2261 & tl_dudz(i ,j-1,k2)+ &
2262 & tl_dudz(i+1,j-1,k2))
2263 dnvdz=cff*dvdz(i,j,k2)
2264 tl_dnvdz=cff*tl_dvdz(i,j,k2)
2265 cff=0.5_r8*(pm(i,j-1)+pm(i,j))
2266 dmudz=cff*0.25_r8*(dudz(i ,j ,k2)+ &
2267 & dudz(i+1,j ,k2)+ &
2268 & dudz(i ,j-1,k2)+ &
2269 & dudz(i+1,j-1,k2))
2270 tl_dmudz=cff*0.25_r8*(tl_dudz(i ,j ,k2)+ &
2271 & tl_dudz(i+1,j ,k2)+ &
2272 & tl_dudz(i ,j-1,k2)+ &
2273 & tl_dudz(i+1,j-1,k2))
2274 dmvdz=cff*dvdz(i,j,k2)
2275 tl_dmvdz=cff*tl_dvdz(i,j,k2)
2276
2277 cff1=min(dzdx_p(i ,j,k1),0.0_r8)
2278 cff2=min(dzdx_p(i+1,j,k2),0.0_r8)
2279 cff3=max(dzdx_p(i ,j,k2),0.0_r8)
2280 cff4=max(dzdx_p(i+1,j,k1),0.0_r8)
2281 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx_p(i ,j,k1)))* &
2282 & tl_dzdx_p(i ,j,k1)
2283 tl_cff2=(0.5_r8+sign(0.5_r8,-dzdx_p(i+1,j,k2)))* &
2284 & tl_dzdx_p(i+1,j,k2)
2285 tl_cff3=(0.5_r8+sign(0.5_r8, dzdx_p(i ,j,k2)))* &
2286 & tl_dzdx_p(i ,j,k2)
2287 tl_cff4=(0.5_r8+sign(0.5_r8, dzdx_p(i+1,j,k1)))* &
2288 & tl_dzdx_p(i+1,j,k1)
2289
2290
2291
2292
2293
2294
2295 tl_vfsx(i,j,k2)=fac1* &
2296 & (tl_cff1*(cff1*dnvdz-dnvdx(i ,j,k1))+ &
2297 & tl_cff2*(cff2*dnvdz-dnvdx(i+1,j,k2))+ &
2298 & tl_cff3*(cff3*dnvdz-dnvdx(i ,j,k2))+ &
2299 & tl_cff4*(cff4*dnvdz-dnvdx(i+1,j,k1))+ &
2300 & cff1*(tl_cff1*dnvdz+cff1*tl_dnvdz- &
2301 & tl_dnvdx(i ,j,k1))+ &
2302 & cff2*(tl_cff2*dnvdz+cff2*tl_dnvdz- &
2303 & tl_dnvdx(i+1,j,k2))+ &
2304 & cff3*(tl_cff3*dnvdz+cff3*tl_dnvdz- &
2305 & tl_dnvdx(i ,j,k2))+ &
2306 & cff4*(tl_cff4*dnvdz+cff4*tl_dnvdz- &
2307 & tl_dnvdx(i+1,j,k1)))
2308#ifdef VISC_3DCOEF
2309 tl_vfsx(i,j,k2)=tl_vfsx(i,j,k2)+ &
2310 & tl_fac1* &
2311 & (cff1*(cff1*dnvdz-dnvdx(i ,j,k1))+ &
2312 & cff2*(cff2*dnvdz-dnvdx(i+1,j,k2))+ &
2313 & cff3*(cff3*dnvdz-dnvdx(i ,j,k2))+ &
2314 & cff4*(cff4*dnvdz-dnvdx(i+1,j,k1)))
2315#endif
2316
2317 cff1=min(dzde_r(i,j-1,k1),0.0_r8)
2318 cff2=min(dzde_r(i,j ,k2),0.0_r8)
2319 cff3=max(dzde_r(i,j-1,k2),0.0_r8)
2320 cff4=max(dzde_r(i,j ,k1),0.0_r8)
2321 tl_cff1=(0.5_r8+sign(0.5_r8,-dzde_r(i,j-1,k1)))* &
2322 & tl_dzde_r(i,j-1,k1)
2323 tl_cff2=(0.5_r8+sign(0.5_r8,-dzde_r(i,j ,k2)))* &
2324 & tl_dzde_r(i,j ,k2)
2325 tl_cff3=(0.5_r8+sign(0.5_r8, dzde_r(i,j-1,k2)))* &
2326 & tl_dzde_r(i,j-1,k2)
2327 tl_cff4=(0.5_r8+sign(0.5_r8, dzde_r(i,j ,k1)))* &
2328 & tl_dzde_r(i,j ,k1)
2329
2330
2331
2332
2333
2334
2335 tl_vfse(i,j,k2)=fac2* &
2336 & (tl_cff1*(cff1*dmvdz-dmvde(i,j-1,k1))+ &
2337 & tl_cff2*(cff2*dmvdz-dmvde(i,j ,k2))+ &
2338 & tl_cff3*(cff3*dmvdz-dmvde(i,j-1,k2))+ &
2339 & tl_cff4*(cff4*dmvdz-dmvde(i,j ,k1))+ &
2340 & cff1*(tl_cff1*dmvdz+cff1*tl_dmvdz- &
2341 & tl_dmvde(i,j-1,k1))+ &
2342 & cff2*(tl_cff2*dmvdz+cff2*tl_dmvdz- &
2343 & tl_dmvde(i,j ,k2))+ &
2344 & cff3*(tl_cff3*dmvdz+cff3*tl_dmvdz- &
2345 & tl_dmvde(i,j-1,k2))+ &
2346 & cff4*(tl_cff4*dmvdz+cff4*tl_dmvdz- &
2347 & tl_dmvde(i,j ,k1)))
2348#ifdef VISC_3DCOEF
2349 tl_vfse(i,j,k2)=tl_vfse(i,j,k2)+ &
2350 & tl_fac2* &
2351 & (cff1*(cff1*dmvdz-dmvde(i,j-1,k1))+ &
2352 & cff2*(cff2*dmvdz-dmvde(i,j ,k2))+ &
2353 & cff3*(cff3*dmvdz-dmvde(i,j-1,k2))+ &
2354 & cff4*(cff4*dmvdz-dmvde(i,j ,k1)))
2355#endif
2356
2357 cff1=min(dzde_r(i,j-1,k1),0.0_r8)
2358 cff2=min(dzde_r(i,j ,k2),0.0_r8)
2359 cff3=max(dzde_r(i,j-1,k2),0.0_r8)
2360 cff4=max(dzde_r(i,j ,k1),0.0_r8)
2361 cff5=min(dzdx_r(i,j-1,k1),0.0_r8)
2362 cff6=min(dzdx_r(i,j ,k2),0.0_r8)
2363 cff7=max(dzdx_r(i,j-1,k2),0.0_r8)
2364 cff8=max(dzdx_r(i,j ,k1),0.0_r8)
2365 tl_cff1=(0.5_r8+sign(0.5_r8,-dzde_r(i,j-1,k1)))* &
2366 & tl_dzde_r(i,j-1,k1)
2367 tl_cff2=(0.5_r8+sign(0.5_r8,-dzde_r(i,j ,k2)))* &
2368 & tl_dzde_r(i,j ,k2)
2369 tl_cff3=(0.5_r8+sign(0.5_r8, dzde_r(i,j-1,k2)))* &
2370 & tl_dzde_r(i,j-1,k2)
2371 tl_cff4=(0.5_r8+sign(0.5_r8, dzde_r(i,j ,k1)))* &
2372 & tl_dzde_r(i,j ,k1)
2373 tl_cff5=(0.5_r8+sign(0.5_r8,-dzdx_r(i,j-1,k1)))* &
2374 & tl_dzdx_r(i,j-1,k1)
2375 tl_cff6=(0.5_r8+sign(0.5_r8,-dzdx_r(i,j ,k2)))* &
2376 & tl_dzdx_r(i,j ,k2)
2377 tl_cff7=(0.5_r8+sign(0.5_r8, dzdx_r(i,j-1,k2)))* &
2378 & tl_dzdx_r(i,j-1,k2)
2379 tl_cff8=(0.5_r8+sign(0.5_r8, dzdx_r(i,j ,k1)))* &
2380 & tl_dzdx_r(i,j ,k1)
2381
2382
2383
2384
2385
2386
2387
2388 tl_vfsx(i,j,k2)=tl_vfsx(i,j,k2)- &
2389 & fac1* &
2390 & (tl_cff1*(cff5*dnudz-dnudx(i,j-1,k1))+ &
2391 & tl_cff2*(cff6*dnudz-dnudx(i,j ,k2))+ &
2392 & tl_cff3*(cff7*dnudz-dnudx(i,j-1,k2))+ &
2393 & tl_cff4*(cff8*dnudz-dnudx(i,j ,k1))+ &
2394 & cff1*(tl_cff5*dnudz+cff5*tl_dnudz- &
2395 & tl_dnudx(i,j-1,k1))+ &
2396 & cff2*(tl_cff6*dnudz+cff6*tl_dnudz- &
2397 & tl_dnudx(i,j ,k2))+ &
2398 & cff3*(tl_cff7*dnudz+cff7*tl_dnudz- &
2399 & tl_dnudx(i,j-1,k2))+ &
2400 & cff4*(tl_cff8*dnudz+cff8*tl_dnudz- &
2401 & tl_dnudx(i,j ,k1)))
2402#ifdef VISC_3DCOEF
2403 tl_vfsx(i,j,k2)=tl_vfsx(i,j,k2)- &
2404 & tl_fac1* &
2405 & (cff1*(cff5*dnudz-dnudx(i,j-1,k1))+ &
2406 & cff2*(cff6*dnudz-dnudx(i,j ,k2))+ &
2407 & cff3*(cff7*dnudz-dnudx(i,j-1,k2))+ &
2408 & cff4*(cff8*dnudz-dnudx(i,j ,k1)))
2409#endif
2410
2411 cff1=min(dzdx_p(i ,j,k1),0.0_r8)
2412 cff2=min(dzdx_p(i+1,j,k2),0.0_r8)
2413 cff3=max(dzdx_p(i ,j,k2),0.0_r8)
2414 cff4=max(dzdx_p(i+1,j,k1),0.0_r8)
2415 cff5=min(dzde_p(i ,j,k1),0.0_r8)
2416 cff6=min(dzde_p(i+1,j,k2),0.0_r8)
2417 cff7=max(dzde_p(i ,j,k2),0.0_r8)
2418 cff8=max(dzde_p(i+1,j,k1),0.0_r8)
2419 tl_cff1=(0.5_r8+sign(0.5_r8,-dzdx_p(i ,j,k1)))* &
2420 & tl_dzdx_p(i ,j,k1)
2421 tl_cff2=(0.5_r8+sign(0.5_r8,-dzdx_p(i+1,j,k2)))* &
2422 & tl_dzdx_p(i+1,j,k2)
2423 tl_cff3=(0.5_r8+sign(0.5_r8, dzdx_p(i ,j,k2)))* &
2424 & tl_dzdx_p(i ,j,k2)
2425 tl_cff4=(0.5_r8+sign(0.5_r8, dzdx_p(i+1,j,k1)))* &
2426 & tl_dzdx_p(i+1,j,k1)
2427 tl_cff5=(0.5_r8+sign(0.5_r8,-dzde_p(i ,j,k1)))* &
2428 & tl_dzde_p(i ,j,k1)
2429 tl_cff6=(0.5_r8+sign(0.5_r8,-dzde_p(i+1,j,k2)))* &
2430 & tl_dzde_p(i+1,j,k2)
2431 tl_cff7=(0.5_r8+sign(0.5_r8, dzde_p(i ,j,k2)))* &
2432 & tl_dzde_p(i ,j,k2)
2433 tl_cff8=(0.5_r8+sign(0.5_r8, dzde_p(i+1,j,k1)))* &
2434 & tl_dzde_p(i+1,j,k1)
2435
2436
2437
2438
2439
2440
2441
2442 tl_vfse(i,j,k2)=tl_vfse(i,j,k2)+ &
2443 & fac2* &
2444 & (tl_cff1*(cff5*dmudz-dmude(i ,j,k1))+ &
2445 & tl_cff2*(cff6*dmudz-dmude(i+1,j,k2))+ &
2446 & tl_cff3*(cff7*dmudz-dmude(i ,j,k2))+ &
2447 & tl_cff4*(cff8*dmudz-dmude(i+1,j,k1))+ &
2448 & cff1*(tl_cff5*dmudz+cff5*tl_dmudz- &
2449 & tl_dmude(i ,j,k1))+ &
2450 & cff2*(tl_cff6*dmudz+cff6*tl_dmudz- &
2451 & tl_dmude(i+1,j,k2))+ &
2452 & cff3*(tl_cff7*dmudz+cff7*tl_dmudz- &
2453 & tl_dmude(i ,j,k2))+ &
2454 & cff4*(tl_cff8*dmudz+cff8*tl_dmudz- &
2455 & tl_dmude(i+1,j,k1)))
2456#ifdef VISC_3DCOEF
2457 tl_vfse(i,j,k2)=tl_vfse(i,j,k2)+ &
2458 & tl_fac2* &
2459 & (cff1*(cff5*dmudz-dmude(i ,j,k1))+ &
2460 & cff2*(cff6*dmudz-dmude(i+1,j,k2))+ &
2461 & cff3*(cff7*dmudz-dmude(i ,j,k2))+ &
2462 & cff4*(cff8*dmudz-dmude(i+1,j,k1)))
2463#endif
2464 END DO
2465 END DO
2466 END IF
2467
2468
2469
2470
2471#ifdef DIAGNOSTICS_UV
2472
2473
2474#endif
2475
2476 DO j=jstr,jend
2477 DO i=istru,iend
2478 cff=
dt(ng)*0.25_r8*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
2479
2480
2481 tl_cff1=0.5_r8*(pn(i-1,j)+pn(i,j))* &
2482 & (tl_ufx(i,j )-tl_ufx(i-1,j))
2483
2484
2485 tl_cff2=0.5_r8*(pm(i-1,j)+pm(i,j))* &
2486 & (tl_ufe(i,j+1)-tl_ufe(i ,j))
2487
2488
2489 tl_cff3=tl_ufsx(i,j,k2)-tl_ufsx(i,j,k1)
2490
2491
2492 tl_cff4=tl_ufse(i,j,k2)-tl_ufse(i,j,k1)
2493
2494
2495 tl_cff5=cff*(tl_cff1+tl_cff2)
2496
2497
2498 tl_cff6=
dt(ng)*(tl_cff3+tl_cff4)
2499
2500
2501 tl_rufrc(i,j)=tl_rufrc(i,j)- &
2502 & tl_cff1-tl_cff2-tl_cff3-tl_cff4
2503
2504
2505 tl_u(i,j,k,nnew)=tl_u(i,j,k,nnew)-tl_cff5-tl_cff6
2506#ifdef DIAGNOSTICS_UV
2507
2508
2509
2510
2511
2512
2513
2514#endif
2515 END DO
2516 END DO
2517
2518 DO j=jstrv,jend
2519 DO i=istr,iend
2520 cff=
dt(ng)*0.25_r8*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
2521
2522
2523 tl_cff1=0.5_r8*(pn(i,j-1)+pn(i,j))* &
2524 & (tl_vfx(i+1,j)-tl_vfx(i,j ))
2525
2526
2527 tl_cff2=0.5_r8*(pm(i,j-1)+pm(i,j))* &
2528 & (tl_vfe(i ,j)-tl_vfe(i,j-1))
2529
2530
2531 tl_cff3=tl_vfsx(i,j,k2)-tl_vfsx(i,j,k1)
2532
2533
2534 tl_cff4=tl_vfse(i,j,k2)-tl_vfse(i,j,k1)
2535
2536
2537 tl_cff5=cff*(tl_cff1-tl_cff2)
2538
2539
2540 tl_cff6=
dt(ng)*(tl_cff3+tl_cff4)
2541
2542
2543 tl_rvfrc(i,j)=tl_rvfrc(i,j)- &
2544 & tl_cff1+tl_cff2-tl_cff3-tl_cff4
2545
2546
2547 tl_v(i,j,k,nnew)=tl_v(i,j,k,nnew)-tl_cff5-tl_cff6
2548#ifdef DIAGNOSTICS_UV
2549
2550
2551
2552
2553
2554
2555
2556#endif
2557 END DO
2558 END DO
2559 END IF
2560 END DO k_loop2
2561
2562 RETURN
integer, dimension(:), allocatable n
type(t_lbc), dimension(:,:,:), allocatable tl_lbc
type(t_domain), dimension(:), allocatable domain
real(dp), dimension(:), allocatable dt
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
real(r8), dimension(:), allocatable gamma2
logical, dimension(:,:), allocatable compositegrid
integer, parameter isouth
integer, parameter inorth