222
223
227
228
229
230 integer, intent(in) :: ng, tile
231 integer, intent(in) :: LBi, UBi, LBj, UBj
232 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
233 integer, intent(in) :: nrhs
234
235# ifdef ASSUMED_SHAPE
236 real(r8), intent(in) :: Hz(LBi:,LBj:,:)
237 real(r8), intent(in) :: Huon(LBi:,LBj:,:)
238 real(r8), intent(in) :: Hvom(LBi:,LBj:,:)
239# if defined CURVGRID && defined UV_ADV
240 real(r8), intent(in) :: dmde(LBi:,LBj:)
241 real(r8), intent(in) :: dndx(LBi:,LBj:)
242# endif
243 real(r8), intent(in) :: fomn(LBi:,LBj:)
244 real(r8), intent(in) :: om_u(LBi:,LBj:)
245 real(r8), intent(in) :: om_v(LBi:,LBj:)
246 real(r8), intent(in) :: on_u(LBi:,LBj:)
247 real(r8), intent(in) :: on_v(LBi:,LBj:)
248 real(r8), intent(in) :: pm(LBi:,LBj:)
249 real(r8), intent(in) :: pn(LBi:,LBj:)
250# ifdef WET_DRY
251 real(r8), intent(in) :: umask_wet(LBi:,LBj:)
252 real(r8), intent(in) :: vmask_wet(LBi:,LBj:)
253# endif
254 real(r8), intent(in) :: bustr(LBi:,LBj:)
255 real(r8), intent(in) :: bvstr(LBi:,LBj:)
256 real(r8), intent(in) :: sustr(LBi:,LBj:)
257 real(r8), intent(in) :: svstr(LBi:,LBj:)
258 real(r8), intent(in) :: u(LBi:,LBj:,:,:)
259 real(r8), intent(in) :: v(LBi:,LBj:,:,:)
260 real(r8), intent(in) :: W(LBi:,LBj:,0:)
261# ifdef WEC
262 real(r8), intent(in) :: u_stokes(LBi:,LBj:,:)
263 real(r8), intent(in) :: v_stokes(LBi:,LBj:,:)
264 real(r8), intent(in) :: W_stokes(LBi:,LBj:,0:)
265 real(r8), intent(in) :: rustr3d(LBi:,LBj:,:)
266 real(r8), intent(in) :: rvstr3d(LBi:,LBj:,:)
267# endif
268 real(r8), intent(inout) :: ru(LBi:,LBj:,0:,:)
269 real(r8), intent(inout) :: rv(LBi:,LBj:,0:,:)
270# ifdef DIAGNOSTICS_UV
271 real(r8), intent(inout) :: DiaRUfrc(LBi:,LBj:,:,:)
272 real(r8), intent(inout) :: DiaRVfrc(LBi:,LBj:,:,:)
273 real(r8), intent(inout) :: DiaRU(LBi:,LBj:,:,:,:)
274 real(r8), intent(inout) :: DiaRV(LBi:,LBj:,:,:,:)
275# endif
276
277 real(r8), intent(out) :: rufrc(LBi:,LBj:)
278 real(r8), intent(out) :: rvfrc(LBi:,LBj:)
279# else
280 real(r8), intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
281 real(r8), intent(in) :: Huon(LBi:UBi,LBj:UBj,N(ng))
282 real(r8), intent(in) :: Hvom(LBi:UBi,LBj:UBj,N(ng))
283# if defined CURVGRID && defined UV_ADV
284 real(r8), intent(in) :: dmde(LBi:UBi,LBj:UBj)
285 real(r8), intent(in) :: dndx(LBi:UBi,LBj:UBj)
286# endif
287 real(r8), intent(in) :: fomn(LBi:UBi,LBj:UBj)
288 real(r8), intent(in) :: om_u(LBi:UBi,LBj:UBj)
289 real(r8), intent(in) :: om_v(LBi:UBi,LBj:UBj)
290 real(r8), intent(in) :: on_u(LBi:UBi,LBj:UBj)
291 real(r8), intent(in) :: on_v(LBi:UBi,LBj:UBj)
292 real(r8), intent(in) :: pm(LBi:UBi,LBj:UBj)
293 real(r8), intent(in) :: pn(LBi:UBi,LBj:UBj)
294# ifdef WET_DRY
295 real(r8), intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
296 real(r8), intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
297# endif
298 real(r8), intent(in) :: bustr(LBi:UBi,LBj:UBj)
299 real(r8), intent(in) :: bvstr(LBi:UBi,LBj:UBj)
300 real(r8), intent(in) :: sustr(LBi:UBi,LBj:UBj)
301 real(r8), intent(in) :: svstr(LBi:UBi,LBj:UBj)
302 real(r8), intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
303 real(r8), intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
304 real(r8), intent(in) :: W(LBi:UBi,LBj:UBj,0:N(ng))
305# ifdef WEC
306 real(r8), intent(in) :: u_stokes(LBi:UBi,LBj:UBj,N(ng))
307 real(r8), intent(in) :: v_stokes(LBi:UBi,LBj:UBj,N(ng))
308 real(r8), intent(in) :: W_stokes(LBi:UBi,LBj:UBj,0:N(ng))
309 real(r8), intent(in) :: rustr3d(LBi:UBi,LBj:UBj,N(ng))
310 real(r8), intent(in) :: rvstr3d(LBi:UBi,LBj:UBj,N(ng))
311# endif
312 real(r8), intent(inout) :: ru(LBi:UBi,LBj:UBj,0:N(ng),2)
313 real(r8), intent(inout) :: rv(LBi:UBi,LBj:UBj,0:N(ng),2)
314# ifdef DIAGNOSTICS_UV
315 real(r8), intent(inout) :: DiaRUfrc(LBi:UBi,LBj:UBj,3,NDM2d-1)
316 real(r8), intent(inout) :: DiaRVfrc(LBi:UBi,LBj:UBj,3,NDM2d-1)
317 real(r8), intent(inout) :: DiaRU(LBi:UBi,LBj:UBj,N(ng),2,NDrhs)
318 real(r8), intent(inout) :: DiaRV(LBi:UBi,LBj:UBj,N(ng),2,NDrhs)
319# endif
320
321 real(r8), intent(out) :: rufrc(LBi:UBi,LBj:UBj)
322 real(r8), intent(out) :: rvfrc(LBi:UBi,LBj:UBj)
323# endif
324
325
326
327 integer :: i, j, k
328
329 real(r8), parameter :: Gadv = -0.25_r8
330
331 real(r8) :: cff, cff1, cff2, cff3, cff4
332 real(r8) :: fac, fac1, fac2
333
334 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: CF
335 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: DC
336 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: FC
337# ifdef WEC_VF
338 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: FCs
339# endif
340
341 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Huee
342 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Huxx
343 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Hvee
344 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Hvxx
345 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
346 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
347 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Uwrk
348 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
349 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
350 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Vwrk
351 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: uee
352 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: uxx
353 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: vee
354 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: vxx
355 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: wrk
356
357# include "set_bounds.h"
358
359# ifdef BODYFORCE
360
361
362
363
364
365
366# ifdef DIAGNOSTICS_UV
368 DO j=jstr,jend
369 DO i=istr,iend
370 diaru(i,j,k,nrhs,
m3vvis)=0.0_r8
371 diarv(i,j,k,nrhs,
m3vvis)=0.0_r8
372 END DO
373 END DO
374 END DO
375 DO j=jstr,jend
376 DO i=istru,iend
377 diarufrc(i,j,3,
m2sstr)=0.0_r8
378 diarufrc(i,j,3,
m2bstr)=0.0_r8
379 END DO
380 END DO
381 DO j=jstrv,jend
382 DO i=istr,iend
383 diarvfrc(i,j,3,
m2sstr)=0.0_r8
384 diarvfrc(i,j,3,
m2bstr)=0.0_r8
385 END DO
386 END DO
387# endif
388 DO j=jstrv-1,jend
389 DO i=istru-1,iend
390 wrk(i,j)=0.0_r8
391 END DO
392 END DO
394 DO j=jstrv-1,jend
395 DO i=istru-1,iend
396 wrk(i,j)=wrk(i,j)+hz(i,j,k)
397 END DO
398 END DO
399 END DO
400 DO j=jstr,jend
401 DO i=istru,iend
402 cff=0.25_r8*(pm(i-1,j)+pm(i,j))* &
403 & (pn(i-1,j)+pn(i,j))
404 cff1=1.0_r8/(cff*(wrk(i-1,j)+wrk(i,j)))
405 uwrk(i,j)=sustr(i,j)*cff1
406 END DO
407 END DO
408 DO j=jstrv,jend
409 DO i=istr,iend
410 cff=0.25*(pm(i,j-1)+pm(i,j))* &
411 & (pn(i,j-1)+pn(i,j))
412 cff1=1.0_r8/(cff*(wrk(i,j-1)+wrk(i,j)))
413 vwrk(i,j)=svstr(i,j)*cff1
414 END DO
415 END DO
417 DO j=jstr,jend
418 DO i=istru,iend
419 cff=uwrk(i,j)*(hz(i ,j,k)+ &
420 & hz(i-1,j,k))
421 ru(i,j,k,nrhs)=ru(i,j,k,nrhs)+cff
422# ifdef DIAGNOSTICS_UV
425# endif
426 END DO
427 END DO
428 DO j=jstrv,jend
429 DO i=istr,iend
430 cff=vwrk(i,j)*(hz(i,j ,k)+ &
431 & hz(i,j-1,k))
432 rv(i,j,k,nrhs)=rv(i,j,k,nrhs)+cff
433# ifdef DIAGNOSTICS_UV
436# endif
437 END DO
438 END DO
439 END DO
440
441
442
443
444 DO j=jstrv-1,jend
445 DO i=istru-1,iend
446 wrk(i,j)=0.0_r8
447 END DO
448 END DO
450 DO j=jstrv-1,jend
451 DO i=istru-1,iend
452 wrk(i,j)=wrk(i,j)+hz(i,j,k)
453 END DO
454 END DO
455 END DO
456 DO j=jstr,jend
457 DO i=istru,iend
458 cff=0.25_r8*(pm(i-1,j)+pm(i,j))* &
459 & (pn(i-1,j)+pn(i,j))
460 cff1=1.0_r8/(cff*(wrk(i-1,j)+wrk(i,j)))
461 uwrk(i,j)=bustr(i,j)*cff1
462 END DO
463 END DO
464 DO j=jstrv,jend
465 DO i=istr,iend
466 cff=0.25_r8*(pm(i,j-1)+pm(i,j))* &
467 & (pn(i,j-1)+pn(i,j))
468 cff1=1.0_r8/(cff*(wrk(i,j-1)+wrk(i,j)))
469 vwrk(i,j)=bvstr(i,j)*cff1
470 END DO
471 END DO
473 DO j=jstr,jend
474 DO i=istru,iend
475 cff=uwrk(i,j)*(hz(i ,j,k)+ &
476 & hz(i-1,j,k))
477 ru(i,j,k,nrhs)=ru(i,j,k,nrhs)-cff
478# ifdef DIAGNOSTICS_UV
481# endif
482 END DO
483 END DO
484 DO j=jstrv,jend
485 DO i=istr,iend
486 cff=vwrk(i,j)*(hz(i,j ,k)+ &
487 & hz(i,j-1,k))
488 rv(i,j,k,nrhs)=rv(i,j,k,nrhs)-cff
489# ifdef DIAGNOSTICS_UV
492# endif
493 END DO
494 END DO
495 END DO
496# endif
497
498 k_loop :
DO k=1,
n(ng)
499
500# ifdef UV_COR
501
502
503
504
505
506 DO j=jstrv-1,jend
507 DO i=istru-1,iend
508 cff=0.5_r8*hz(i,j,k)*fomn(i,j)
509 ufx(i,j)=cff*(v(i,j ,k,nrhs)+ &
510 & v(i,j+1,k,nrhs))
511 vfe(i,j)=cff*(u(i ,j,k,nrhs)+ &
512 & u(i+1,j,k,nrhs))
513 END DO
514 END DO
515 DO j=jstr,jend
516 DO i=istru,iend
517 cff1=0.5_r8*(ufx(i,j)+ufx(i-1,j))
518 ru(i,j,k,nrhs)=ru(i,j,k,nrhs)+cff1
519# ifdef DIAGNOSTICS_UV
520 diaru(i,j,k,nrhs,
m3fcor)=cff1
521# endif
522 END DO
523 END DO
524 DO j=jstrv,jend
525 DO i=istr,iend
526 cff1=0.5_r8*(vfe(i,j)+vfe(i,j-1))
527 rv(i,j,k,nrhs)=rv(i,j,k,nrhs)-cff1
528# ifdef DIAGNOSTICS_UV
529 diarv(i,j,k,nrhs,
m3fcor)=-cff1
530# endif
531 END DO
532 END DO
533
534# ifdef WEC
535 DO j=jstrv-1,jend
536 DO i=istru-1,iend
537 cff=0.5_r8*hz(i,j,k)*fomn(i,j)
538 ufx(i,j)=cff*(v_stokes(i,j ,k)+ &
539 & v_stokes(i,j+1,k))
540 vfe(i,j)=cff*(u_stokes(i ,j,k)+ &
541 & u_stokes(i+1,j,k))
542 END DO
543 END DO
544 DO j=jstr,jend
545 DO i=istru,iend
546 cff1=0.5_r8*(ufx(i,j)+ufx(i-1,j))
547 ru(i,j,k,nrhs)=ru(i,j,k,nrhs)+cff1
548# ifdef DIAGNOSTICS_UV
549 diaru(i,j,k,nrhs,m3fsco)=cff1
550# endif
551 END DO
552 END DO
553 DO j=jstrv,jend
554 DO i=istr,iend
555 cff1=0.5_r8*(vfe(i,j)+vfe(i,j-1))
556 rv(i,j,k,nrhs)=rv(i,j,k,nrhs)-cff1
557# ifdef DIAGNOSTICS_UV
558 diarv(i,j,k,nrhs,m3fsco)=-cff1
559# endif
560 END DO
561 END DO
562# endif
563# endif
564# if defined CURVGRID && defined UV_ADV
565
566
567
568
569
570 DO j=jstrv-1,jend
571 DO i=istru-1,iend
572 cff1=0.5_r8*(v(i,j ,k,nrhs)+ &
573# ifdef WEC
574 & v_stokes(i,j ,k)+ &
575 & v_stokes(i,j+1,k)+ &
576# endif
577 & v(i,j+1,k,nrhs))
578 cff2=0.5_r8*(u(i ,j,k,nrhs)+ &
579# ifdef WEC
580 & u_stokes(i ,j,k)+ &
581 & u_stokes(i+1,j,k)+ &
582# endif
583 & u(i+1,j,k,nrhs))
584 cff3=cff1*dndx(i,j)
585 cff4=cff2*dmde(i,j)
586# ifdef WEC_VF
587 cff5=0.5_r8*(v_stokes(i,j ,k)+ &
588 & v_stokes(i,j+1,k))
589 cff6=0.5_r8*(u_stokes(i ,j,k)+ &
590 & u_stokes(i+1,j,k))
591 cff7=cff5*dndx(i,j)
592 cff8=cff6*dmde(i,j)
593# endif
594 cff=hz(i,j,k)*(cff3-cff4)
595 ufx(i,j)=cff*cff1
596 vfe(i,j)=cff*cff2
597# ifdef WEC_VF
598 ufx(i,j)=ufx(i,j)-(cff5*hz(i,j,k)*(cff7-cff8))
599 vfe(i,j)=vfe(i,j)+(cff6*hz(i,j,k)*(cff7-cff8))
600# endif
601# if defined DIAGNOSTICS_UV
602 cff=hz(i,j,k)*cff4
603 uwrk(i,j)=-cff*cff1
604 vwrk(i,j)=-cff*cff2
605# ifdef WEC_VF
606 uwrk(i,j)=uwrk(i,j)+hz(i,j,k)*cff5*cff8
607 vwrk(i,j)=vwrk(i,j)-hz(i,j,k)*cff6*cff8
608# endif
609# endif
610 END DO
611 END DO
612 DO j=jstr,jend
613 DO i=istru,iend
614 cff1=0.5_r8*(ufx(i,j)+ufx(i-1,j))
615 ru(i,j,k,nrhs)=ru(i,j,k,nrhs)+cff1
616# ifdef DIAGNOSTICS_UV
617 cff2=0.5_r8*(uwrk(i,j)+uwrk(i-1,j))
618# ifdef WEC_VF
619 diaru(i,j,k,nrhs,
m3xadv)=diaru(i,j,k,nrhs,
m3xadv)+cff1-cff2
622# else
623 diaru(i,j,k,nrhs,
m3xadv)=cff1-cff2
624 diaru(i,j,k,nrhs,
m3yadv)=cff2
625 diaru(i,j,k,nrhs,
m3hadv)=cff1
626# endif
627# endif
628 END DO
629 END DO
630 DO j=jstrv,jend
631 DO i=istr,iend
632 cff1=0.5_r8*(vfe(i,j)+vfe(i,j-1))
633 rv(i,j,k,nrhs)=rv(i,j,k,nrhs)-cff1
634# ifdef DIAGNOSTICS_UV
635 cff2=0.5_r8*(vwrk(i,j)+vwrk(i,j-1))
636# ifdef WEC_VF
637 diarv(i,j,k,nrhs,
m3xadv)=diarv(i,j,k,nrhs,
m3xadv)-cff1+cff2
640# else
641 diarv(i,j,k,nrhs,
m3xadv)=-cff1+cff2
642 diarv(i,j,k,nrhs,
m3yadv)=-cff2
643 diarv(i,j,k,nrhs,
m3hadv)=-cff1
644# endif
645# endif
646 END DO
647 END DO
648# endif
649
650
651
652
653
655 DO j=jstr,jend
656 DO i=istru,iend
657 cff=0.25_r8*(
clima(ng)%M3nudgcof(i-1,j,k)+ &
658 &
clima(ng)%M3nudgcof(i ,j,k))* &
659 & om_u(i,j)*on_u(i,j)
660 ru(i,j,k,nrhs)=ru(i,j,k,nrhs)+ &
661 & cff*(hz(i-1,j,k)+hz(i,j,k))* &
662 & (
clima(ng)%uclm(i,j,k)- &
663 & u(i,j,k,nrhs))
664 END DO
665 END DO
666 DO j=jstrv,jend
667 DO i=istr,iend
668 cff=0.25_r8*(
clima(ng)%M3nudgcof(i,j-1,k)+ &
669 &
clima(ng)%M3nudgcof(i,j ,k))* &
670 & om_v(i,j)*on_v(i,j)
671 rv(i,j,k,nrhs)=rv(i,j,k,nrhs)+ &
672 & cff*(hz(i,j-1,k)+hz(i,j,k))* &
673 & (
clima(ng)%vclm(i,j,k)- &
674 & v(i,j,k,nrhs))
675 END DO
676 END DO
677 END IF
678
679# ifdef UV_ADV
680
681
682
683
684
685
686
687
688# ifdef UV_C2ADVECTION
689
690
691
692 DO j=jstr,jend
693 DO i=istru-1,iend
694 ufx(i,j)=0.25_r8*(u(i ,j,k,nrhs)+ &
695 & u(i+1,j,k,nrhs))* &
696 & (huon(i ,j,k)+ &
697 & huon(i+1,j,k))
698 END DO
699 END DO
700 DO j=jstr,jend+1
701 DO i=istru,iend
702 ufe(i,j)=0.25_r8*(u(i,j-1,k,nrhs)+ &
703 & u(i,j ,k,nrhs))* &
704 & (hvom(i-1,j,k)+ &
705 & hvom(i ,j,k))
706 END DO
707 END DO
708 DO j=jstrv,jend
709 DO i=istr,iend+1
710 vfx(i,j)=0.25_r8*(v(i-1,j,k,nrhs)+ &
711 & v(i ,j,k,nrhs))* &
712 & (huon(i,j-1,k)+ &
713 & huon(i,j ,k))
714 END DO
715 END DO
716 DO j=jstrv-1,jend
717 DO i=istr,iend
718 vfe(i,j)=0.25_r8*(v(i,j ,k,nrhs)+ &
719 & v(i,j+1,k,nrhs))* &
720 & (hvom(i,j ,k)+ &
721 & hvom(i,j+1,k))
722 END DO
723 END DO
724# else
725 DO j=jstr,jend
726 DO i=istrum1,iendp1
727 uxx(i,j)=u(i-1,j,k,nrhs)-2.0_r8*u(i,j,k,nrhs)+ &
728 & u(i+1,j,k,nrhs)
729 huxx(i,j)=huon(i-1,j,k)-2.0_r8*huon(i,j,k)+huon(i+1,j,k)
730 END DO
731 END DO
733 IF (
domain(ng)%Western_Edge(tile))
THEN
734 DO j=jstr,jend
735 uxx(istr,j)=uxx(istr+1,j)
736 huxx(istr,j)=huxx(istr+1,j)
737 END DO
738 END IF
739 END IF
741 IF (
domain(ng)%Eastern_Edge(tile))
THEN
742 DO j=jstr,jend
743 uxx(iend+1,j)=uxx(iend,j)
744 huxx(iend+1,j)=huxx(iend,j)
745 END DO
746 END IF
747 END IF
748# ifdef UV_C4ADVECTION
749
750
751
752 cff=1.0_r8/6.0_r8
753 DO j=jstr,jend
754 DO i=istru-1,iend
755 ufx(i,j)=0.25_r8*(u(i ,j,k,nrhs)+ &
756 & u(i+1,j,k,nrhs)- &
757 & cff*(uxx(i ,j)+ &
758 & uxx(i+1,j)))* &
759 & (huon(i ,j,k)+ &
760 & huon(i+1,j,k)- &
761 & cff*(huxx(i ,j)+ &
762 & huxx(i+1,j)))
763 END DO
764 END DO
765# else
766
767
768
769
770 DO j=jstr,jend
771 DO i=istru-1,iend
772 cff1=u(i ,j,k,nrhs)+ &
773 & u(i+1,j,k,nrhs)
774 IF (cff1.gt.0.0_r8) THEN
775 cff=uxx(i,j)
776 ELSE
777 cff=uxx(i+1,j)
778 END IF
779 ufx(i,j)=0.25_r8*(cff1+gadv*cff)* &
780 & (huon(i ,j,k)+ &
781 & huon(i+1,j,k)+ &
782 & gadv*0.5_r8*(huxx(i ,j)+ &
783 & huxx(i+1,j)))
784 END DO
785 END DO
786# endif
787 DO j=jstrm1,jendp1
788 DO i=istru,iend
789 uee(i,j)=u(i,j-1,k,nrhs)-2.0_r8*u(i,j,k,nrhs)+ &
790 & u(i,j+1,k,nrhs)
791 END DO
792 END DO
794 IF (
domain(ng)%Southern_Edge(tile))
THEN
795 DO i=istru,iend
796 uee(i,jstr-1)=uee(i,jstr)
797 END DO
798 END IF
799 END IF
801 IF (
domain(ng)%Northern_Edge(tile))
THEN
802 DO i=istru,iend
803 uee(i,jend+1)=uee(i,jend)
804 END DO
805 END IF
806 END IF
807 DO j=jstr,jend+1
808 DO i=istru-1,iend
809 hvxx(i,j)=hvom(i-1,j,k)-2.0_r8*hvom(i,j,k)+hvom(i+1,j,k)
810 END DO
811 END DO
812# ifdef UV_C4ADVECTION
813 cff=1.0_r8/6.0_r8
814 DO j=jstr,jend+1
815 DO i=istru,iend
816 ufe(i,j)=0.25_r8*(u(i,j ,k,nrhs)+ &
817 & u(i,j-1,k,nrhs)- &
818 & cff*(uee(i,j )+ &
819 & uee(i,j-1)))* &
820 & (hvom(i ,j,k)+ &
821 & hvom(i-1,j,k)- &
822 & cff*(hvxx(i ,j)+ &
823 & hvxx(i-1,j)))
824 END DO
825 END DO
826# else
827 DO j=jstr,jend+1
828 DO i=istru,iend
829 cff1=u(i,j ,k,nrhs)+ &
830 & u(i,j-1,k,nrhs)
831 cff2=hvom(i,j,k)+hvom(i-1,j,k)
832 IF (cff2.gt.0.0_r8) THEN
833 cff=uee(i,j-1)
834 ELSE
835 cff=uee(i,j)
836 END IF
837 ufe(i,j)=0.25_r8*(cff1+gadv*cff)* &
838 & (cff2+gadv*0.5_r8*(hvxx(i ,j)+ &
839 & hvxx(i-1,j)))
840 END DO
841 END DO
842# endif
843 DO j=jstrv,jend
844 DO i=istrm1,iendp1
845 vxx(i,j)=v(i-1,j,k,nrhs)-2.0_r8*v(i,j,k,nrhs)+ &
846 & v(i+1,j,k,nrhs)
847 END DO
848 END DO
850 IF (
domain(ng)%Western_Edge(tile))
THEN
851 DO j=jstrv,jend
852 vxx(istr-1,j)=vxx(istr,j)
853 END DO
854 END IF
855 END IF
857 IF (
domain(ng)%Eastern_Edge(tile))
THEN
858 DO j=jstrv,jend
859 vxx(iend+1,j)=vxx(iend,j)
860 END DO
861 END IF
862 END IF
863 DO j=jstrv-1,jend
864 DO i=istr,iend+1
865 huee(i,j)=huon(i,j-1,k)-2.0_r8*huon(i,j,k)+huon(i,j+1,k)
866 END DO
867 END DO
868# ifdef UV_C4ADVECTION
869
870
871
872 cff=1.0_r8/6.0_r8
873 DO j=jstrv,jend
874 DO i=istr,iend+1
875 vfx(i,j)=0.25_r8*(v(i ,j,k,nrhs)+ &
876 & v(i-1,j,k,nrhs)- &
877 & cff*(vxx(i ,j)+ &
878 & vxx(i-1,j)))* &
879 & (huon(i,j ,k)+ &
880 & huon(i,j-1,k)- &
881 & cff*(huee(i,j )+ &
882 & huee(i,j-1)))
883 END DO
884 END DO
885# else
886
887
888
889
890 DO j=jstrv,jend
891 DO i=istr,iend+1
892 cff1=v(i ,j,k,nrhs)+ &
893 & v(i-1,j,k,nrhs)
894 cff2=huon(i,j,k)+huon(i,j-1,k)
895 IF (cff2.gt.0.0_r8) THEN
896 cff=vxx(i-1,j)
897 ELSE
898 cff=vxx(i,j)
899 END IF
900 vfx(i,j)=0.25_r8*(cff1+gadv*cff)* &
901 & (cff2+gadv*0.5_r8*(huee(i,j )+ &
902 & huee(i,j-1)))
903 END DO
904 END DO
905# endif
906 DO j=jstrvm1,jendp1
907 DO i=istr,iend
908 vee(i,j)=v(i,j-1,k,nrhs)-2.0_r8*v(i,j,k,nrhs)+ &
909 & v(i,j+1,k,nrhs)
910 hvee(i,j)=hvom(i,j-1,k)-2.0_r8*hvom(i,j,k)+hvom(i,j+1,k)
911 END DO
912 END DO
914 IF (
domain(ng)%Southern_Edge(tile))
THEN
915 DO i=istr,iend
916 vee(i,jstr)=vee(i,jstr+1)
917 hvee(i,jstr)=hvee(i,jstr+1)
918 END DO
919 END IF
920 END IF
922 IF (
domain(ng)%Northern_Edge(tile))
THEN
923 DO i=istr,iend
924 vee(i,jend+1)=vee(i,jend)
925 hvee(i,jend+1)=hvee(i,jend)
926 END DO
927 END IF
928 END IF
929# ifdef UV_C4ADVECTION
930 cff=1.0_r8/6.0_r8
931 DO j=jstrv-1,jend
932 DO i=istr,iend
933 vfe(i,j)=0.25_r8*(v(i,j ,k,nrhs)+ &
934 & v(i,j+1,k,nrhs)- &
935 & cff*(vee(i,j )+ &
936 & vee(i,j+1)))* &
937 & (hvom(i,j ,k)+ &
938 & hvom(i,j+1,k)- &
939 & cff*(hvee(i,j )+ &
940 & hvee(i,j+1)))
941 END DO
942 END DO
943# else
944 DO j=jstrv-1,jend
945 DO i=istr,iend
946 cff1=v(i,j ,k,nrhs)+ &
947 & v(i,j+1,k,nrhs)
948 IF (cff1.gt.0.0_r8) THEN
949 cff=vee(i,j)
950 ELSE
951 cff=vee(i,j+1)
952 END IF
953 vfe(i,j)=0.25_r8*(cff1+gadv*cff)* &
954 & (hvom(i,j ,k)+ &
955 & hvom(i,j+1,k)+ &
956 & gadv*0.5_r8*(hvee(i,j )+ &
957 & hvee(i,j+1)))
958 END DO
959 END DO
960# endif
961# endif
962
963
964
965 DO j=jstr,jend
966 DO i=istru,iend
967 cff1=ufx(i,j)-ufx(i-1,j)
968 cff2=ufe(i,j+1)-ufe(i,j)
969 cff=cff1+cff2
970 ru(i,j,k,nrhs)=ru(i,j,k,nrhs)-cff
971# ifdef DIAGNOSTICS_UV
972# if defined CURVGRID || defined WEC_VF
976# else
977 diaru(i,j,k,nrhs,
m3xadv)=-cff1
978 diaru(i,j,k,nrhs,
m3yadv)=-cff2
979 diaru(i,j,k,nrhs,
m3hadv)=-cff
980# endif
981# endif
982 END DO
983 END DO
984 DO j=jstrv,jend
985 DO i=istr,iend
986 cff1=vfx(i+1,j)-vfx(i,j)
987 cff2=vfe(i,j)-vfe(i,j-1)
988 cff=cff1+cff2
989 rv(i,j,k,nrhs)=rv(i,j,k,nrhs)-cff
990# ifdef DIAGNOSTICS_UV
991# if defined CURVGRID || defined WEC_VF
995# else
996 diarv(i,j,k,nrhs,
m3xadv)=-cff1
997 diarv(i,j,k,nrhs,
m3yadv)=-cff2
998 diarv(i,j,k,nrhs,
m3hadv)=-cff
999# endif
1000# endif
1001 END DO
1002 END DO
1003# endif
1004# ifdef WEC
1005
1006
1007
1008
1009
1010
1011 DO j=jstr,jend
1012 DO i=istru,iend
1013 ru(i,j,k,nrhs)=ru(i,j,k,nrhs)- &
1014 & rustr3d(i,j,k)*om_u(i,j)*on_u(i,j)
1015 END DO
1016 END DO
1017 DO j=jstrv,jend
1018 DO i=istr,iend
1019 rv(i,j,k,nrhs)=rv(i,j,k,nrhs)- &
1020 & rvstr3d(i,j,k)*om_v(i,j)*on_v(i,j)
1021 END DO
1022 END DO
1023# endif
1024
1025 END DO k_loop
1026
1027 j_loop : DO j=jstr,jend
1028# ifdef UV_ADV
1029
1030
1031
1032
1033
1034# ifdef UV_SADVECTION
1035
1036
1037
1038
1039 cff1=9.0_r8/16.0_r8
1040 cff2=1.0_r8/16.0_r8
1042 DO i=istru,iend
1043 dc(i,k)=cff1*(hz(i ,j,k)+ &
1044 & hz(i-1,j,k))- &
1045 & cff2*(hz(i+1,j,k)+ &
1046 & hz(i-2,j,k))
1047 END DO
1048 END DO
1049 DO i=istru,iend
1050 fc(i,0)=0.0_r8
1051 cf(i,0)=0.0_r8
1052 END DO
1054 DO i=istru,iend
1055 cff=1.0_r8/(2.0_r8*dc(i,k+1)+dc(i,k)*(2.0_r8-fc(i,k-1)))
1056 fc(i,k)=cff*dc(i,k+1)
1057 cf(i,k)=cff*(6.0_r8*(u(i,j,k+1,nrhs)- &
1058 & u(i,j,k ,nrhs))- &
1059 & dc(i,k)*cf(i,k-1))
1060 END DO
1061 END DO
1062 DO i=istru,iend
1064 END DO
1066 DO i=istru,iend
1067 cf(i,k)=cf(i,k)-fc(i,k)*cf(i,k+1)
1068 END DO
1069 END DO
1070
1071
1072
1073 cff3=1.0_r8/3.0_r8
1074 cff4=1.0_r8/6.0_r8
1076 DO i=istru,iend
1077 fc(i,k)=(cff1*(w(i ,j,k)+ &
1078 & w(i-1,j,k))- &
1079 & cff2*(w(i+1,j,k)+ &
1080 & w(i-2,j,k)))* &
1081 & (u(i,j,k,nrhs)+ &
1082 & dc(i,k)*(cff3*cf(i,k )+ &
1083 & cff4*cf(i,k-1)))
1084 END DO
1085 END DO
1086 DO i=istru,iend
1088 fc(i,0)=0.0_r8
1089 END DO
1090# elif defined UV_C2ADVECTION
1092 DO i=istru,iend
1093 fc(i,k)=0.25_r8*(u(i,j,k ,nrhs)+ &
1094 & u(i,j,k+1,nrhs))* &
1095 & (w(i ,j,k)+ &
1096 & w(i-1,j,k))
1097 END DO
1098 END DO
1099 DO i=istru,iend
1100 fc(i,0)=0.0_r8
1102 END DO
1103# elif defined UV_C4ADVECTION
1104 cff1=9.0_r8/32.0_r8
1105 cff2=1.0_r8/32.0_r8
1107 DO i=istru,iend
1108 fc(i,k)=(cff1*(u(i,j,k ,nrhs)+ &
1109 & u(i,j,k+1,nrhs))- &
1110 & cff2*(u(i,j,k-1,nrhs)+ &
1111 & u(i,j,k+2,nrhs)))* &
1112 & (w(i ,j,k)+ &
1113 & w(i-1,j,k))
1114 END DO
1115 END DO
1116 DO i=istru,iend
1118 fc(i,
n(ng)-1)=(cff1*(u(i,j,
n(ng)-1,nrhs)+ &
1119 & u(i,j,
n(ng) ,nrhs))- &
1120 & cff2*(u(i,j,
n(ng)-2,nrhs)+ &
1121 & u(i,j,
n(ng) ,nrhs)))* &
1122 & (w(i ,j,
n(ng)-1)+ &
1124 fc(i,1)=(cff1*(u(i,j,1,nrhs)+ &
1125 & u(i,j,2,nrhs))- &
1126 & cff2*(u(i,j,1,nrhs)+ &
1127 & u(i,j,3,nrhs)))* &
1128 & (w(i ,j,1)+ &
1129 & w(i-1,j,1))
1130 fc(i,0)=0.0_r8
1131 END DO
1132# else
1133 cff1=9.0_r8/16.0_r8
1134 cff2=1.0_r8/16.0_r8
1136 DO i=istru,iend
1137 fc(i,k)=(cff1*(u(i,j,k ,nrhs)+ &
1138 & u(i,j,k+1,nrhs))- &
1139 & cff2*(u(i,j,k-1,nrhs)+ &
1140 & u(i,j,k+2,nrhs)))* &
1141 & (cff1*(w(i ,j,k)+ &
1142 & w(i-1,j,k))- &
1143 & cff2*(w(i+1,j,k)+ &
1144 & w(i-2,j,k)))
1145 END DO
1146 END DO
1147 DO i=istru,iend
1149 fc(i,
n(ng)-1)=(cff1*(u(i,j,
n(ng)-1,nrhs)+ &
1150 & u(i,j,
n(ng) ,nrhs))- &
1151 & cff2*(u(i,j,
n(ng)-2,nrhs)+ &
1152 & u(i,j,
n(ng) ,nrhs)))* &
1153 & (cff1*(w(i ,j,
n(ng)-1)+ &
1154 & w(i-1,j,
n(ng)-1))- &
1155 & cff2*(w(i+1,j,
n(ng)-1)+ &
1156 & w(i-2,j,
n(ng)-1)))
1157 fc(i,1)=(cff1*(u(i,j,1,nrhs)+ &
1158 & u(i,j,2,nrhs))- &
1159 & cff2*(u(i,j,1,nrhs)+ &
1160 & u(i,j,3,nrhs)))* &
1161 & (cff1*(w(i ,j,1)+ &
1162 & w(i-1,j,1))- &
1163 & cff2*(w(i+1,j,1)+ &
1164 & w(i-2,j,1)))
1165 fc(i,0)=0.0_r8
1166 END DO
1167# endif
1169 DO i=istru,iend
1170 cff=fc(i,k)-fc(i,k-1)
1171 ru(i,j,k,nrhs)=ru(i,j,k,nrhs)-cff
1172# ifdef DIAGNOSTICS_UV
1173 diaru(i,j,k,nrhs,
m3vadv)=-cff
1174# endif
1175 END DO
1176 END DO
1177 IF (j.ge.jstrv) THEN
1178# ifdef UV_SADVECTION
1179
1180
1181
1182
1183 cff1=9.0_r8/16.0_r8
1184 cff2=1.0_r8/16.0_r8
1186 DO i=istr,iend
1187 dc(i,k)=(cff1*(hz(i,j ,k)+ &
1188 & hz(i,j-1,k))- &
1189 & cff2*(hz(i,j+1,k)+ &
1190 & hz(i,j-2,k)))
1191 END DO
1192 END DO
1193 DO i=istr,iend
1194 fc(i,0)=0.0_r8
1195 cf(i,0)=0.0_r8
1196 END DO
1198 DO i=istr,iend
1199 cff=1.0_r8/(2.0_r8*dc(i,k+1)+dc(i,k)*(2.0_r8-fc(i,k-1)))
1200 fc(i,k)=cff*dc(i,k+1)
1201 cf(i,k)=cff*(6.0_r8*(v(i,j,k+1,nrhs)- &
1202 & v(i,j,k ,nrhs))- &
1203 & dc(i,k)*cf(i,k-1))
1204 END DO
1205 END DO
1206 DO i=istr,iend
1208 END DO
1210 DO i=istr,iend
1211 cf(i,k)=cf(i,k)-fc(i,k)*cf(i,k+1)
1212 END DO
1213 END DO
1214
1215
1216
1217 cff3=1.0_r8/3.0_r8
1218 cff4=1.0_r8/6.0_r8
1220 DO i=istr,iend
1221 fc(i,k)=(cff1*(w(i,j ,k)+ &
1222 & w(i,j-1,k))- &
1223 & cff2*(w(i,j+1,k)+ &
1224 & w(i,j-2,k)))* &
1225 & (v(i,j,k,nrhs)+ &
1226 & dc(i,k)*(cff3*cf(i,k )+ &
1227 & cff4*cf(i,k-1)))
1228 END DO
1229 END DO
1230 DO i=istr,iend
1232 fc(i,0)=0.0_r8
1233 END DO
1234# elif defined UV_C2ADVECTION
1235
1236
1237
1239 DO i=istr,iend
1240 fc(i,k)=0.25_r8*(v(i,j,k ,nrhs)+ &
1241 & v(i,j,k+1,nrhs))* &
1242 & (w(i,j ,k)+ &
1243 & w(i,j-1,k))
1244 END DO
1245 END DO
1246 DO i=istr,iend
1247 fc(i,0)=0.0_r8
1249 END DO
1250# elif defined UV_C4ADVECTION
1251
1252
1253
1254 cff1=9.0_r8/32.0_r8
1255 cff2=1.0_r8/32.0_r8
1257 DO i=istr,iend
1258 fc(i,k)=(cff1*(v(i,j,k ,nrhs)+ &
1259 & v(i,j,k+1,nrhs))- &
1260 & cff2*(v(i,j,k-1,nrhs)+ &
1261 & v(i,j,k+2,nrhs)))* &
1262 & (w(i,j ,k)+ &
1263 & w(i,j-1,k))
1264 END DO
1265 END DO
1266 DO i=istr,iend
1268 fc(i,
n(ng)-1)=(cff1*(v(i,j,
n(ng)-1,nrhs)+ &
1269 & v(i,j,
n(ng) ,nrhs))- &
1270 & cff2*(v(i,j,
n(ng)-2,nrhs)+ &
1271 & v(i,j,
n(ng) ,nrhs)))* &
1272 & (w(i,j ,
n(ng)-1)+ &
1274 fc(i,1)=(cff1*(v(i,j,1,nrhs)+ &
1275 & v(i,j,2,nrhs))- &
1276 & cff2*(v(i,j,1,nrhs)+ &
1277 & v(i,j,3,nrhs)))* &
1278 & (w(i,j ,1)+ &
1279 & w(i,j-1,1))
1280 fc(i,0)=0.0_r8
1281 END DO
1282# else
1283 cff1=9.0_r8/16.0_r8
1284 cff2=1.0_r8/16.0_r8
1286 DO i=istr,iend
1287 fc(i,k)=(cff1*(v(i,j,k ,nrhs)+ &
1288 & v(i,j,k+1,nrhs))- &
1289 & cff2*(v(i,j,k-1,nrhs)+ &
1290 & v(i,j,k+2,nrhs)))* &
1291 & (cff1*(w(i,j ,k)+ &
1292 & w(i,j-1,k))- &
1293 & cff2*(w(i,j+1,k)+ &
1294 & w(i,j-2,k)))
1295 END DO
1296 END DO
1297 DO i=istr,iend
1299 fc(i,
n(ng)-1)=(cff1*(v(i,j,
n(ng)-1,nrhs)+ &
1300 & v(i,j,
n(ng) ,nrhs))- &
1301 & cff2*(v(i,j,
n(ng)-2,nrhs)+ &
1302 & v(i,j,
n(ng) ,nrhs)))* &
1303 & (cff1*(w(i,j ,
n(ng)-1)+ &
1304 & w(i,j-1,
n(ng)-1))- &
1305 & cff2*(w(i,j+1,
n(ng)-1)+ &
1306 & w(i,j-2,
n(ng)-1)))
1307 fc(i,1)=(cff1*(v(i,j,1,nrhs)+ &
1308 & v(i,j,2,nrhs))- &
1309 & cff2*(v(i,j,1,nrhs)+ &
1310 & v(i,j,3,nrhs)))* &
1311 & (cff1*(w(i,j ,1)+ &
1312 & w(i,j-1,1))- &
1313 & cff2*(w(i,j+1,1)+ &
1314 & w(i,j-2,1)))
1315 fc(i,0)=0.0_r8
1316 END DO
1317# endif
1319 DO i=istr,iend
1320 cff=fc(i,k)-fc(i,k-1)
1321 rv(i,j,k,nrhs)=rv(i,j,k,nrhs)-cff
1322# ifdef DIAGNOSTICS_UV
1323 diarv(i,j,k,nrhs,
m3vadv)=-cff
1324# endif
1325 END DO
1326 END DO
1327 END IF
1328# ifdef WEC_VF
1329
1330
1331
1332
1333
1334# ifdef UV_SADVECTION
1335
1336
1337
1338
1339 cff1=9.0_r8/16.0_r8
1340 cff2=1.0_r8/16.0_r8
1342 DO i=istru,iend
1343 dc(i,k)=cff1*(hz(i ,j,k)+ &
1344 & hz(i-1,j,k))- &
1345 & cff2*(hz(i+1,j,k)+ &
1346 & hz(i-2,j,k))
1347 END DO
1348 END DO
1349 DO i=istru,iend
1350 fc(i,0)=0.0_r8
1351 cf(i,0)=0.0_r8
1352 END DO
1354 DO i=istru,iend
1355 cff=1.0_r8/(2.0_r8*dc(i,k+1)+dc(i,k)*(2.0_r8-fc(i,k-1)))
1356 fc(i,k)=cff*dc(i,k+1)
1357 cf(i,k)=cff*(6.0_r8*(u(i,j,k+1,nrhs)- &
1358 & u(i,j,k ,nrhs))- &
1359 & dc(i,k)*cf(i,k-1))
1360 END DO
1361 END DO
1362 DO i=istru,iend
1364 END DO
1366 DO i=istru,iend
1367 cf(i,k)=cf(i,k)-fc(i,k)*cf(i,k+1)
1368 END DO
1369 END DO
1370
1371
1372
1373 cff3=1.0_r8/3.0_r8
1374 cff4=1.0_r8/6.0_r8
1376 DO i=istru,iend
1377 fc(i,k)=(cff1*(w_stokes(i ,j,k)+ &
1378 & w_stokes(i-1,j,k))- &
1379 & cff2*(w_stokes(i+1,j,k)+ &
1380 & w_stokes(i-2,j,k)))* &
1381 & (u(i,j,k,nrhs)+ &
1382 & dc(i,k)*(cff3*cf(i,k )+ &
1383 & cff4*cf(i,k-1)))
1384 fcs(i,k)=(cff1*(w_stokes(i ,j,k)+ &
1385 & w_stokes(i-1,j,k))- &
1386 & cff2*(w_stokes(i+1,j,k)+ &
1387 & w_stokes(i-2,j,k)))
1388 END DO
1389 END DO
1390 DO i=istru,iend
1392 fc(i,0)=0.0_r8
1394 fcs(i,0)=0.0_r8
1395 END DO
1396# elif defined UV_C2ADVECTION
1398 DO i=istru,iend
1399 fc(i,k)=0.25_r8*(u(i,j,k ,nrhs)+ &
1400 & u(i,j,k+1,nrhs))* &
1401 & (w_stokes(i ,j,k)+ &
1402 & w_stokes(i-1,j,k))
1403 fcs(i,k)=0.5_r8*(w_stokes(i ,j,k)+ &
1404 & w_stokes(i-1,j,k))
1405 END DO
1406 END DO
1407 DO i=istru,iend
1408 fc(i,0)=0.0_r8
1410 fcs(i,0)=0.0_r8
1412 END DO
1413# elif defined UV_C4ADVECTION
1414 cff1=9.0_r8/32.0_r8
1415 cff2=1.0_r8/32.0_r8
1417 DO i=istru,iend
1418 fc(i,k)=(cff1*(u(i,j,k ,nrhs)+ &
1419 & u(i,j,k+1,nrhs))- &
1420 & cff2*(u(i,j,k-1,nrhs)+ &
1421 & u(i,j,k+2,nrhs)))* &
1422 & (w_stokes(i ,j,k)+ &
1423 & w_stokes(i-1,j,k))
1424 fcs(i,k)=0.5_r8*(w_stokes(i ,j,k)+ &
1425 & w_stokes(i-1,j,k))
1426 END DO
1427 END DO
1428 DO i=istru,iend
1431 fc(i,
n(ng)-1)=(cff1*(u(i,j,
n(ng)-1,nrhs)+ &
1432 & u(i,j,
n(ng) ,nrhs))- &
1433 & cff2*(u(i,j,
n(ng)-2,nrhs)+ &
1434 & u(i,j,
n(ng) ,nrhs)))* &
1435 & (w_stokes(i ,j,
n(ng)-1)+ &
1436 & w_stokes(i-1,j,
n(ng)-1))
1437 fcs(i,
n(ng)-1)=0.5_r8*(w_stokes(i ,j,
n(ng)-1)+ &
1438 & w_stokes(i-1,j,
n(ng)-1))
1439 fc(i,1)=(cff1*(u(i,j,1,nrhs)+ &
1440 & u(i,j,2,nrhs))- &
1441 & cff2*(u(i,j,1,nrhs)+ &
1442 & u(i,j,3,nrhs)))* &
1443 & (w_stokes(i ,j,1)+ &
1444 & w_stokes(i-1,j,1))
1445 fcs(i,1)=0.5_r8*(w_stokes(i ,j,1)+ &
1446 & w_stokes(i-1,j,1))
1447 fc(i,0)=0.0_r8
1448 fcs(i,0)=0.0_r8
1449 END DO
1450# else
1451 cff1=9.0_r8/16.0_r8
1452 cff2=1.0_r8/16.0_r8
1454 DO i=istru,iend
1455 fc(i,k)=(cff1*(u(i,j,k ,nrhs)+ &
1456 & u(i,j,k+1,nrhs))- &
1457 & cff2*(u(i,j,k-1,nrhs)+ &
1458 & u(i,j,k+2,nrhs)))* &
1459 & (cff1*(w_stokes(i ,j,k)+ &
1460 & w_stokes(i-1,j,k))- &
1461 & cff2*(w_stokes(i+1,j,k)+ &
1462 & w_stokes(i-2,j,k)))
1463 fcs(i,k)=cff1*(w_stokes(i ,j,k)+ &
1464 & w_stokes(i-1,j,k))- &
1465 & cff2*(w_stokes(i+1,j,k)+ &
1466 & w_stokes(i-2,j,k))
1467 END DO
1468 END DO
1469 DO i=istru,iend
1472 fc(i,
n(ng)-1)=(cff1*(u(i,j,
n(ng)-1,nrhs)+ &
1473 & u(i,j,
n(ng) ,nrhs))- &
1474 & cff2*(u(i,j,
n(ng)-2,nrhs)+ &
1475 & u(i,j,
n(ng) ,nrhs)))* &
1476 & (cff1*(w_stokes(i ,j,
n(ng)-1)+ &
1477 & w_stokes(i-1,j,
n(ng)-1))- &
1478 & cff2*(w_stokes(i+1,j,
n(ng)-1)+ &
1479 & w_stokes(i-2,j,
n(ng)-1)))
1480 fcs(i,
n(ng)-1)=(cff1*(w_stokes(i ,j,
n(ng)-1)+ &
1481 & w_stokes(i-1,j,
n(ng)-1))- &
1482 & cff2*(w_stokes(i+1,j,
n(ng)-1)+ &
1483 & w_stokes(i-2,j,
n(ng)-1)))
1484 fc(i,1)=(cff1*(u(i,j,1,nrhs)+ &
1485 & u(i,j,2,nrhs))- &
1486 & cff2*(u(i,j,1,nrhs)+ &
1487 & u(i,j,3,nrhs)))* &
1488 & (cff1*(w_stokes(i ,j,1)+ &
1489 & w_stokes(i-1,j,1))- &
1490 & cff2*(w_stokes(i+1,j,1)+ &
1491 & w_stokes(i-2,j,1)))
1492 fcs(i,1)=(cff1*(w_stokes(i ,j,1)+ &
1493 & w_stokes(i-1,j,1))- &
1494 & cff2*(w_stokes(i+1,j,1)+ &
1495 & w_stokes(i-2,j,1)))
1496 fc(i,0)=0.0_r8
1497 fcs(i,0)=0.0_r8
1498 END DO
1499# endif
1501 DO i=istru,iend
1502 cff=fc(i,k)-fc(i,k-1)
1503 cff1=u(i,j,k,nrhs)*(fcs(i,k)-fcs(i,k-1))
1504 ru(i,j,k,nrhs)=ru(i,j,k,nrhs)-cff
1505# ifdef DIAGNOSTICS_UV
1507 diaru(i,j,k,nrhs,m3vjvf)=-(cff-cff1)
1508# endif
1509 END DO
1510 END DO
1511 IF (j.ge.jstrv) THEN
1512# ifdef UV_SADVECTION
1513
1514
1515
1516
1517 cff1=9.0_r8/16.0_r8
1518 cff2=1.0_r8/16.0_r8
1520 DO i=istr,iend
1521 dc(i,k)=(cff1*(hz(i,j ,k)+ &
1522 & hz(i,j-1,k))- &
1523 & cff2*(hz(i,j+1,k)+ &
1524 & hz(i,j-2,k)))
1525 END DO
1526 END DO
1527 DO i=istr,iend
1528 fc(i,0)=0.0_r8
1529 cf(i,0)=0.0_r8
1530 END DO
1532 DO i=istr,iend
1533 cff=1.0_r8/(2.0_r8*dc(i,k+1)+dc(i,k)*(2.0_r8-fc(i,k-1)))
1534 fc(i,k)=cff*dc(i,k+1)
1535 cf(i,k)=cff*(6.0_r8*(v(i,j,k+1,nrhs)- &
1536 & v(i,j,k ,nrhs))- &
1537 & dc(i,k)*cf(i,k-1))
1538 END DO
1539 END DO
1540 DO i=istr,iend
1542 END DO
1544 DO i=istr,iend
1545 cf(i,k)=cf(i,k)-fc(i,k)*cf(i,k+1)
1546 END DO
1547 END DO
1548
1549
1550
1551 cff3=1.0_r8/3.0_r8
1552 cff4=1.0_r8/6.0_r8
1554 DO i=istr,iend
1555 fc(i,k)=(cff1*(w_stokes(i,j ,k)+ &
1556 & w_stokes(i,j-1,k))- &
1557 & cff2*(w_stokes(i,j+1,k)+ &
1558 & w_stokes(i,j-2,k)))* &
1559 & (v(i,j,k,nrhs)+ &
1560 & dc(i,k)*(cff3*cf(i,k )+ &
1561 & cff4*cf(i,k-1)))
1562 fcs(i,k)=(cff1*(w_stokes(i,j ,k)+ &
1563 & w_stokes(i,j-1,k))- &
1564 & cff2*(w_stokes(i,j+1,k)+ &
1565 & w_stokes(i,j-2,k)))
1566 END DO
1567 END DO
1568 DO i=istr,iend
1570 fc(i,0)=0.0_r8
1572 fcs(i,0)=0.0_r8
1573 END DO
1574# elif defined UV_C2ADVECTION
1575
1576
1577
1579 DO i=istr,iend
1580 fc(i,k)=0.25_r8*(v(i,j,k ,nrhs)+ &
1581 & v(i,j,k+1,nrhs))* &
1582 & (w_stokes(i,j ,k)+ &
1583 & w_stokes(i,j-1,k))
1584 fcs(i,k)=0.5_r8*(w_stokes(i,j ,k)+ &
1585 & w_stokes(i,j-1,k))
1586 END DO
1587 END DO
1588 DO i=istr,iend
1589 fc(i,0)=0.0_r8
1591 fcs(i,0)=0.0_r8
1593 END DO
1594# elif defined UV_C4ADVECTION
1595
1596
1597
1598 cff1=9.0_r8/32.0_r8
1599 cff2=1.0_r8/32.0_r8
1601 DO i=istr,iend
1602 fc(i,k)=(cff1*(v(i,j,k ,nrhs)+ &
1603 & v(i,j,k+1,nrhs))- &
1604 & cff2*(v(i,j,k-1,nrhs)+ &
1605 & v(i,j,k+2,nrhs)))* &
1606 & (w_stokes(i,j ,k)+ &
1607 & w_stokes(i,j-1,k))
1608 fcs(i,k)=0.5_r8*(w_stokes(i,j ,k)+ &
1609 & w_stokes(i,j-1,k))
1610 END DO
1611 END DO
1612 DO i=istr,iend
1615 fc(i,
n(ng)-1)=(cff1*(v(i,j,
n(ng)-1,nrhs)+ &
1616 & v(i,j,
n(ng) ,nrhs))- &
1617 & cff2*(v(i,j,
n(ng)-2,nrhs)+ &
1618 & v(i,j,
n(ng) ,nrhs)))* &
1619 & (w_stokes(i,j ,
n(ng)-1)+ &
1620 & w_stokes(i,j-1,
n(ng)-1))
1621 fcs(i,
n(ng)-1)=0.5_r8*(w_stokes(i,j ,
n(ng)-1)+ &
1622 & w_stokes(i,j-1,
n(ng)-1))
1623 fc(i,1)=(cff1*(v(i,j,1,nrhs)+ &
1624 & v(i,j,2,nrhs))- &
1625 & cff2*(v(i,j,1,nrhs)+ &
1626 & v(i,j,3,nrhs)))* &
1627 & (w_stokes(i,j ,1)+ &
1628 & w_stokes(i,j-1,1))
1629 fcs(i,1)=0.5_r8*(w_stokes(i,j ,1)+ &
1630 & w_stokes(i,j-1,1))
1631 fc(i,0)=0.0_r8
1632 fcs(i,0)=0.0_r8
1633 END DO
1634# else
1635 cff1=9.0_r8/16.0_r8
1636 cff2=1.0_r8/16.0_r8
1638 DO i=istr,iend
1639 fc(i,k)=(cff1*(v(i,j,k ,nrhs)+ &
1640 & v(i,j,k+1,nrhs))- &
1641 & cff2*(v(i,j,k-1,nrhs)+ &
1642 & v(i,j,k+2,nrhs)))* &
1643 & (cff1*(w_stokes(i,j ,k)+ &
1644 & w_stokes(i,j-1,k))- &
1645 & cff2*(w_stokes(i,j+1,k)+ &
1646 & w_stokes(i,j-2,k)))
1647 fcs(i,k)=(cff1*(w_stokes(i,j ,k)+ &
1648 & w_stokes(i,j-1,k))- &
1649 & cff2*(w_stokes(i,j+1,k)+ &
1650 & w_stokes(i,j-2,k)))
1651 END DO
1652 END DO
1653 DO i=istr,iend
1656 fc(i,
n(ng)-1)=(cff1*(v(i,j,
n(ng)-1,nrhs)+ &
1657 & v(i,j,
n(ng) ,nrhs))- &
1658 & cff2*(v(i,j,
n(ng)-2,nrhs)+ &
1659 & v(i,j,
n(ng) ,nrhs)))* &
1660 & (cff1*(w_stokes(i,j ,
n(ng)-1)+ &
1661 & w_stokes(i,j-1,
n(ng)-1))- &
1662 & cff2*(w_stokes(i,j+1,
n(ng)-1)+ &
1663 & w_stokes(i,j-2,
n(ng)-1)))
1664 fcs(i,
n(ng)-1)=(cff1*(w_stokes(i,j ,
n(ng)-1)+ &
1665 & w_stokes(i,j-1,
n(ng)-1))- &
1666 & cff2*(w_stokes(i,j+1,
n(ng)-1)+ &
1667 & w_stokes(i,j-2,
n(ng)-1)))
1668 fc(i,1)=(cff1*(v(i,j,1,nrhs)+ &
1669 & v(i,j,2,nrhs))- &
1670 & cff2*(v(i,j,1,nrhs)+ &
1671 & v(i,j,3,nrhs)))* &
1672 & (cff1*(w_stokes(i,j ,1)+ &
1673 & w_stokes(i,j-1,1))- &
1674 & cff2*(w_stokes(i,j+1,1)+ &
1675 & w_stokes(i,j-2,1)))
1676 fcs(i,1)=(cff1*(w_stokes(i,j ,1)+ &
1677 & w_stokes(i,j-1,1))- &
1678 & cff2*(w_stokes(i,j+1,1)+ &
1679 & w_stokes(i,j-2,1)))
1680 fc(i,0)=0.0_r8
1681 fcs(i,0)=0.0_r8
1682 END DO
1683# endif
1685 DO i=istr,iend
1686 cff=fc(i,k)-fc(i,k-1)
1687 cff1=v(i,j,k,nrhs)*(fcs(i,k)-fcs(i,k-1))
1688 rv(i,j,k,nrhs)=rv(i,j,k,nrhs)-cff
1689# ifdef DIAGNOSTICS_UV
1691 diarv(i,j,k,nrhs,m3vjvf)=-(cff-cff1)
1692# endif
1693 END DO
1694 END DO
1695 END IF
1696# endif
1697# endif
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707 DO i=istru,iend
1708# ifdef WET_DRY
1709 ru(i,j,1,nrhs)=ru(i,j,1,nrhs)*umask_wet(i,j)
1710# endif
1711 rufrc(i,j)=ru(i,j,1,nrhs)
1712# ifdef DIAGNOSTICS_UV
1714# ifdef UV_COR
1716# endif
1717# ifdef UV_ADV
1721# endif
1722# ifdef WEC_VF
1723 diarufrc(i,j,3,m2hjvf)=diaru(i,j,1,nrhs,m3hjvf)
1724 diarufrc(i,j,3,m2kvrf)=diaru(i,j,1,nrhs,m3kvrf)
1725# ifdef UV_COR
1726 diarufrc(i,j,3,m2fsco)=diaru(i,j,1,nrhs,m3fsco)
1727# endif
1728# ifdef BOTTOM_STREAMING
1729 diarufrc(i,j,3,m2bstm)=diaru(i,j,1,nrhs,m3bstm)
1730# endif
1731# ifdef SURFACE_STREAMING
1732 diarufrc(i,j,3,m2sstm)=diaru(i,j,1,nrhs,m3sstm)
1733# endif
1734 diarufrc(i,j,3,m2wrol)=diaru(i,j,1,nrhs,m3wrol)
1735 diarufrc(i,j,3,m2wbrk)=diaru(i,j,1,nrhs,m3wbrk)
1736# endif
1737# if defined UV_VIS2 || defined UV_VIS4
1738 diarufrc(i,j,3,
m2xvis)=0.0_r8
1739 diarufrc(i,j,3,
m2yvis)=0.0_r8
1740 diarufrc(i,j,3,
m2hvis)=0.0_r8
1741# endif
1742# ifdef BODYFORCE
1743
1744# endif
1745# endif
1746 END DO
1748 DO i=istru,iend
1749# ifdef WET_DRY
1750 ru(i,j,k,nrhs)=ru(i,j,k,nrhs)*umask_wet(i,j)
1751# endif
1752 rufrc(i,j)=rufrc(i,j)+ru(i,j,k,nrhs)
1753# ifdef DIAGNOSTICS_UV
1755 & diaru(i,j,k,nrhs,
m3pgrd)
1756# ifdef UV_COR
1758 & diaru(i,j,k,nrhs,
m3fcor)
1759# endif
1760# ifdef UV_ADV
1762 & diaru(i,j,k,nrhs,
m3xadv)
1764 & diaru(i,j,k,nrhs,
m3yadv)
1766 & diaru(i,j,k,nrhs,
m3hadv)
1767# endif
1768# ifdef WEC_VF
1769 diarufrc(i,j,3,m2hjvf)=diarufrc(i,j,3,m2hjvf)+ &
1770 & diaru(i,j,k,nrhs,m3hjvf)
1771 diarufrc(i,j,3,m2kvrf)=diarufrc(i,j,3,m2kvrf)+ &
1772 & diaru(i,j,k,nrhs,m3kvrf)
1773# ifdef UV_COR
1774 diarufrc(i,j,3,m2fsco)=diarufrc(i,j,3,m2fsco)+ &
1775 & diaru(i,j,k,nrhs,m3fsco)
1776# endif
1777# ifdef BOTTOM_STREAMING
1778 diarufrc(i,j,3,m2bstm)=diarufrc(i,j,3,m2bstm)+ &
1779 & diaru(i,j,k,nrhs,m3bstm)
1780# endif
1781# ifdef SURFACE_STREAMING
1782 diarufrc(i,j,3,m2sstm)=diarufrc(i,j,3,m2sstm)+ &
1783 & diaru(i,j,k,nrhs,m3sstm)
1784# endif
1785 diarufrc(i,j,3,m2wrol)=diarufrc(i,j,3,m2wrol)+ &
1786 & diaru(i,j,k,nrhs,m3wrol)
1787 diarufrc(i,j,3,m2wbrk)=diarufrc(i,j,3,m2wbrk)+ &
1788 & diaru(i,j,k,nrhs,m3wbrk)
1789# endif
1790# ifdef BODYFORCE
1791
1792
1793# endif
1794# endif
1795 END DO
1796 END DO
1797# ifndef BODYFORCE
1798 DO i=istru,iend
1799 cff=om_u(i,j)*on_u(i,j)
1800 cff1= sustr(i,j)*cff
1801 cff2=-bustr(i,j)*cff
1802 rufrc(i,j)=rufrc(i,j)+cff1+cff2
1803# ifdef WET_DRY
1804 rufrc(i,j)=rufrc(i,j)*umask_wet(i,j)
1805# endif
1806# ifdef DIAGNOSTICS_UV
1807 diarufrc(i,j,3,
m2sstr)=cff1
1808 diarufrc(i,j,3,
m2bstr)=cff2
1809# endif
1810 END DO
1811# endif
1812 IF (j.ge.jstrv) THEN
1813 DO i=istr,iend
1814# ifdef WET_DRY
1815 rv(i,j,1,nrhs)=rv(i,j,1,nrhs)*vmask_wet(i,j)
1816# endif
1817 rvfrc(i,j)=rv(i,j,1,nrhs)
1818# ifdef DIAGNOSTICS_UV
1820# ifdef UV_COR
1822# endif
1823# ifdef UV_ADV
1827# endif
1828# ifdef WEC_VF
1829 diarvfrc(i,j,3,m2hjvf)=diarv(i,j,1,nrhs,m3hjvf)
1830 diarvfrc(i,j,3,m2kvrf)=diarv(i,j,1,nrhs,m3kvrf)
1831# ifdef UV_COR
1832 diarvfrc(i,j,3,m2fsco)=diarv(i,j,1,nrhs,m3fsco)
1833# endif
1834# ifdef BOTTOM_STREAMING
1835 diarvfrc(i,j,3,m2bstm)=diarv(i,j,1,nrhs,m3bstm)
1836# endif
1837# ifdef SURFACE_STREAMING
1838 diarvfrc(i,j,3,m2sstm)=diarv(i,j,1,nrhs,m3sstm)
1839# endif
1840 diarvfrc(i,j,3,m2wrol)=diarv(i,j,1,nrhs,m3wrol)
1841 diarvfrc(i,j,3,m2wbrk)=diarv(i,j,1,nrhs,m3wbrk)
1842# endif
1843# if defined UV_VIS2 || defined UV_VIS4
1844 diarvfrc(i,j,3,
m2hvis)=0.0_r8
1845 diarvfrc(i,j,3,
m2xvis)=0.0_r8
1846 diarvfrc(i,j,3,
m2yvis)=0.0_r8
1847# endif
1848# ifdef BODYFORCE
1849
1850# endif
1851# endif
1852 END DO
1854 DO i=istr,iend
1855# ifdef WET_DRY
1856 rv(i,j,k,nrhs)=rv(i,j,k,nrhs)*vmask_wet(i,j)
1857# endif
1858 rvfrc(i,j)=rvfrc(i,j)+rv(i,j,k,nrhs)
1859# ifdef DIAGNOSTICS_UV
1861 & diarv(i,j,k,nrhs,
m3pgrd)
1862# ifdef UV_COR
1864 & diarv(i,j,k,nrhs,
m3fcor)
1865# endif
1866# ifdef UV_ADV
1868 & diarv(i,j,k,nrhs,
m3xadv)
1870 & diarv(i,j,k,nrhs,
m3yadv)
1872 & diarv(i,j,k,nrhs,
m3hadv)
1873# endif
1874# ifdef WEC_VF
1875 diarvfrc(i,j,3,m2hjvf)=diarvfrc(i,j,3,m2hjvf)+ &
1876 & diarv(i,j,k,nrhs,m3hjvf)
1877 diarvfrc(i,j,3,m2kvrf)=diarvfrc(i,j,3,m2kvrf)+ &
1878 & diarv(i,j,k,nrhs,m3kvrf)
1879# ifdef UV_COR
1880 diarvfrc(i,j,3,m2fsco)=diarvfrc(i,j,3,m2fsco)+ &
1881 & diarv(i,j,k,nrhs,m3fsco)
1882# endif
1883# ifdef BOTTOM_STREAMING
1884 diarvfrc(i,j,3,m2bstm)=diarvfrc(i,j,3,m2bstm)+ &
1885 & diarv(i,j,k,nrhs,m3bstm)
1886# endif
1887# ifdef SURFACE_STREAMING
1888 diarvfrc(i,j,3,m2sstm)=diarvfrc(i,j,3,m2sstm)+ &
1889 & diarv(i,j,k,nrhs,m3sstm)
1890# endif
1891 diarvfrc(i,j,3,m2wrol)=diarvfrc(i,j,3,m2wrol)+ &
1892 & diarv(i,j,k,nrhs,m3wrol)
1893 diarvfrc(i,j,3,m2wbrk)=diarvfrc(i,j,3,m2wbrk)+ &
1894 & diarv(i,j,k,nrhs,m3wbrk)
1895# endif
1896# ifdef BODYFORCE
1897
1898
1899# endif
1900# endif
1901 END DO
1902 END DO
1903# ifndef BODYFORCE
1904 DO i=istr,iend
1905 cff=om_v(i,j)*on_v(i,j)
1906 cff1= svstr(i,j)*cff
1907 cff2=-bvstr(i,j)*cff
1908 rvfrc(i,j)=rvfrc(i,j)+cff1+cff2
1909# ifdef WET_DRY
1910 rvfrc(i,j)=rvfrc(i,j)*vmask_wet(i,j)
1911# endif
1912# ifdef DIAGNOSTICS_UV
1913 diarvfrc(i,j,3,
m2sstr)=cff1
1914 diarvfrc(i,j,3,
m2bstr)=cff2
1915# endif
1916 END DO
1917# endif
1918 END IF
1919 END DO j_loop
1920
1921 RETURN
type(t_clima), dimension(:), allocatable clima
integer, dimension(:), allocatable n
type(t_domain), dimension(:), allocatable domain
integer, dimension(:), allocatable levbfrc
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
logical, dimension(:), allocatable lnudgem3clm
logical, dimension(:,:), allocatable compositegrid
integer, parameter isouth
integer, parameter inorth
integer, dimension(:), allocatable levsfrc