260
261
265
266
267
268 integer, intent(in) :: ng, tile
269 integer, intent(in) :: LBi, UBi, LBj, UBj
270 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
271 integer, intent(in) :: knew, nrhs
272
273# ifdef ASSUMED_SHAPE
274 real(r8), intent(in) :: Hz(LBi:,LBj:,:)
275 real(r8), intent(in) :: Huon(LBi:,LBj:,:)
276 real(r8), intent(in) :: Hvom(LBi:,LBj:,:)
277# if defined CURVGRID && defined UV_ADV
278 real(r8), intent(in) :: dmde(LBi:,LBj:)
279 real(r8), intent(in) :: dndx(LBi:,LBj:)
280# endif
281 real(r8), intent(in) :: fomn(LBi:,LBj:)
282 real(r8), intent(in) :: om_u(LBi:,LBj:)
283 real(r8), intent(in) :: om_v(LBi:,LBj:)
284 real(r8), intent(in) :: on_u(LBi:,LBj:)
285 real(r8), intent(in) :: on_v(LBi:,LBj:)
286 real(r8), intent(in) :: pm(LBi:,LBj:)
287 real(r8), intent(in) :: pn(LBi:,LBj:)
288# ifdef WET_DRY_NOT_YET
289 real(r8), intent(in) :: umask_wet(LBi:,LBj:)
290 real(r8), intent(in) :: vmask_wet(LBi:,LBj:)
291# endif
292 real(r8), intent(in) :: bustr(LBi:,LBj:)
293 real(r8), intent(in) :: bvstr(LBi:,LBj:)
294 real(r8), intent(in) :: sustr(LBi:,LBj:)
295 real(r8), intent(in) :: svstr(LBi:,LBj:)
296 real(r8), intent(in) :: u(LBi:,LBj:,:,:)
297 real(r8), intent(in) :: v(LBi:,LBj:,:,:)
298 real(r8), intent(in) :: W(LBi:,LBj:,0:)
299# ifdef WEC_MELLOR
300 real(r8), intent(in) :: u_stokes(LBi:,LBj:,:)
301 real(r8), intent(in) :: v_stokes(LBi:,LBj:,:)
302# endif
303# ifdef DIAGNOSTICS_UV
304
305
306
307
308# endif
309 real(r8), intent(inout) :: ad_Hz(LBi:,LBj:,:)
310 real(r8), intent(inout) :: ad_Huon(LBi:,LBj:,:)
311 real(r8), intent(inout) :: ad_Hvom(LBi:,LBj:,:)
312 real(r8), intent(inout) :: ad_bustr(LBi:,LBj:)
313 real(r8), intent(inout) :: ad_bvstr(LBi:,LBj:)
314 real(r8), intent(inout) :: ad_sustr(LBi:,LBj:)
315 real(r8), intent(inout) :: ad_svstr(LBi:,LBj:)
316 real(r8), intent(inout) :: ad_u(LBi:,LBj:,:,:)
317 real(r8), intent(inout) :: ad_v(LBi:,LBj:,:,:)
318 real(r8), intent(inout) :: ad_W(LBi:,LBj:,0:)
319# ifdef WEC_MELLOR
320 real(r8), intent(inout) :: ad_u_stokes(LBi:,LBj:,:)
321 real(r8), intent(inout) :: ad_v_stokes(LBi:,LBj:,:)
322 real(r8), intent(inout) :: ad_rulag3d(LBi:,LBj:,:)
323 real(r8), intent(inout) :: ad_rvlag3d(LBi:,LBj:,:)
324 real(r8), intent(inout) :: ad_rustr3d(LBi:,LBj:,:)
325 real(r8), intent(inout) :: ad_rvstr3d(LBi:,LBj:,:)
326# endif
327 real(r8), intent(inout) :: ad_ru(LBi:,LBj:,0:,:)
328 real(r8), intent(inout) :: ad_rv(LBi:,LBj:,0:,:)
329
330 real(r8), intent(inout) :: ad_rufrc(LBi:,LBj:)
331 real(r8), intent(inout) :: ad_rvfrc(LBi:,LBj:)
332# else
333 real(r8), intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
334 real(r8), intent(in) :: Huon(LBi:UBi,LBj:UBj,N(ng))
335 real(r8), intent(in) :: Hvom(LBi:UBi,LBj:UBj,N(ng))
336# if defined CURVGRID && defined UV_ADV
337 real(r8), intent(in) :: dmde(LBi:UBi,LBj:UBj)
338 real(r8), intent(in) :: dndx(LBi:UBi,LBj:UBj)
339# endif
340 real(r8), intent(in) :: fomn(LBi:UBi,LBj:UBj)
341 real(r8), intent(in) :: om_u(LBi:UBi,LBj:UBj)
342 real(r8), intent(in) :: om_v(LBi:UBi,LBj:UBj)
343 real(r8), intent(in) :: on_u(LBi:UBi,LBj:UBj)
344 real(r8), intent(in) :: on_v(LBi:UBi,LBj:UBj)
345 real(r8), intent(in) :: pm(LBi:UBi,LBj:UBj)
346 real(r8), intent(in) :: pn(LBi:UBi,LBj:UBj)
347# ifdef WET_DRY_NOT_YET
348 real(r8), intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
349 real(r8), intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
350# endif
351 real(r8), intent(in) :: bustr(LBi:UBi,LBj:UBj)
352 real(r8), intent(in) :: bvstr(LBi:UBi,LBj:UBj)
353 real(r8), intent(in) :: sustr(LBi:UBi,LBj:UBj)
354 real(r8), intent(in) :: svstr(LBi:UBi,LBj:UBj)
355 real(r8), intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
356 real(r8), intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
357 real(r8), intent(in) :: W(LBi:UBi,LBj:UBj,0:N(ng))
358# ifdef WEC_MELLOR
359 real(r8), intent(in) :: u_stokes(LBi:UBi,LBj:UBj,N(ng))
360 real(r8), intent(in) :: v_stokes(LBi:UBi,LBj:UBj,N(ng))
361# endif
362# ifdef DIAGNOSTICS_UV
363
364
365
366
367# endif
368 real(r8), intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
369 real(r8), intent(inout) :: ad_Huon(LBi:UBi,LBj:UBj,N(ng))
370 real(r8), intent(inout) :: ad_Hvom(LBi:UBi,LBj:UBj,N(ng))
371 real(r8), intent(inout) :: ad_bustr(LBi:UBi,LBj:UBj)
372 real(r8), intent(inout) :: ad_bvstr(LBi:UBi,LBj:UBj)
373 real(r8), intent(inout) :: ad_sustr(LBi:UBi,LBj:UBj)
374 real(r8), intent(inout) :: ad_svstr(LBi:UBi,LBj:UBj)
375 real(r8), intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
376 real(r8), intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
377 real(r8), intent(inout) :: ad_W(LBi:UBi,LBj:UBj,0:N(ng))
378# ifdef WEC_MELLOR
379 real(r8), intent(inout) :: ad_u_stokes(LBi:UBi,LBj:UBj,N(ng))
380 real(r8), intent(inout) :: ad_v_stokes(LBi:UBi,LBj:UBj,N(ng))
381 real(r8), intent(inout) :: ad_rulag3d(LBi:UBi,LBj:UBj,N(ng))
382 real(r8), intent(inout) :: ad_rvlag3d(LBi:UBi,LBj:UBj,N(ng))
383 real(r8), intent(inout) :: ad_rustr3d(LBi:UBi,LBj:UBj,N(ng))
384 real(r8), intent(inout) :: ad_rvstr3d(LBi:UBi,LBj:UBj,N(ng))
385# endif
386 real(r8), intent(inout) :: ad_ru(LBi:UBi,LBj:UBj,0:N(ng),2)
387 real(r8), intent(inout) :: ad_rv(LBi:UBi,LBj:UBj,0:N(ng),2)
388
389 real(r8), intent(inout) :: ad_rufrc(LBi:UBi,LBj:UBj)
390 real(r8), intent(inout) :: ad_rvfrc(LBi:UBi,LBj:UBj)
391# endif
392
393
394
395 integer :: i, j, k
396
397 real(r8), parameter :: Gadv = -0.25_r8
398
399 real(r8) :: cff, cff1, cff2, cff3, cff4
400 real(r8) :: ad_cff, ad_cff1, ad_cff2, ad_cff3, ad_cff4
401 real(r8) :: adfac, adfac1, adfac2, adfac3, adfac4, adfac5
402
403 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: CF
404 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: DC
405 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: FC
406
407 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: ad_CF
408 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: ad_DC
409 real(r8), dimension(IminS:ImaxS,0:N(ng)) :: ad_FC
410
411 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Huee
412 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Huxx
413 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Hvee
414 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Hvxx
415 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
416 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
417 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Uwrk
418 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
419 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
420 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Vwrk
421 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: uee
422 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: uxx
423 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: vee
424 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: vxx
425 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: wrk
426
427 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Huee
428 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Huxx
429 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Hvee
430 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Hvxx
431 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFx
432 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFe
433 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Uwrk
434 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFx
435 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFe
436 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Vwrk
437 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_uee
438 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_uxx
439 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_vee
440 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_vxx
441 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_wrk
442
443# include "set_bounds.h"
444
445
446
447
448
449 ad_cff=0.0_r8
450 ad_cff1=0.0_r8
451 ad_cff2=0.0_r8
452 ad_cff3=0.0_r8
453 ad_cff4=0.0_r8
454 DO j=jmins,jmaxs
455 DO i=imins,imaxs
456 ad_huee(i,j)=0.0_r8
457 ad_huxx(i,j)=0.0_r8
458 ad_hvee(i,j)=0.0_r8
459 ad_hvxx(i,j)=0.0_r8
460 ad_ufx(i,j)=0.0_r8
461 ad_ufe(i,j)=0.0_r8
462 ad_vfx(i,j)=0.0_r8
463 ad_vfe(i,j)=0.0_r8
464 ad_uwrk(i,j)=0.0_r8
465 ad_vwrk(i,j)=0.0_r8
466 ad_uee(i,j)=0.0_r8
467 ad_uxx(i,j)=0.0_r8
468 ad_vee(i,j)=0.0_r8
469 ad_vxx(i,j)=0.0_r8
470 ad_wrk(i,j)=0.0_r8
471 END DO
472 END DO
474 DO i=imins,imaxs
475 ad_cf(i,k)=0.0_r8
476 ad_dc(i,k)=0.0_r8
477 ad_fc(i,k)=0.0_r8
478 END DO
479 END DO
480
481 j_loop : DO j=jstr,jend
482
483
484
485
486
487
488
489
490
491 IF (j.ge.jstrv) THEN
492# ifndef BODYFORCE
493 DO i=istr,iend
494 cff=om_v(i,j)*on_v(i,j)
495# ifdef DIAGNOSTICS_UV
496
497
498# endif
499# ifdef WET_DRY_NOT_YET
500
501
502 ad_rvfrc(i,j)=ad_rvfrc(i,j)*vmask_wet(i,j)
503# endif
504
505
506 ad_cff1=ad_cff1+ad_rvfrc(i,j)
507 ad_cff2=ad_cff2+ad_rvfrc(i,j)
508
509
510 ad_bvstr(i,j)=ad_bvstr(i,j)-cff*ad_cff2
511 ad_cff2=0.0_r8
512
513
514 ad_svstr(i,j)=ad_svstr(i,j)+cff*ad_cff1
515 ad_cff1=0.0_r8
516 END DO
517# endif
519 DO i=istr,iend
520# ifdef DIAGNOSTICS_UV
521# ifdef BODYFORCE
522
523
524# endif
525# ifdef WEC_MELLOR
526
527
528# endif
529# ifdef UV_ADV
530
531
532
533
534
535
536# endif
537# ifdef UV_COR
538
539
540# endif
541
542
543# endif
544
545
546 ad_rv(i,j,k,nrhs)=ad_rv(i,j,k,nrhs)+ad_rvfrc(i,j)
547# ifdef WET_DRY_NOT_YET
548
549
550 ad_rv(i,j,k,nrhs)=ad_rv(i,j,k,nrhs)*vmask_wet(i,j)
551# endif
552 END DO
553 END DO
554 DO i=istr,iend
555# ifdef DIAGNOSTICS_UV
556# ifdef BODYFORCE
557
558# endif
559# if defined UV_VIS2 || defined UV_VIS4
560
561
562
563# endif
564# ifdef WEC_MELLOR
565
566# endif
567# ifdef UV_ADV
568
569
570
571# endif
572# ifdef UV_COR
573
574# endif
575
576# endif
577
578
579 ad_rv(i,j,1,nrhs)=ad_rv(i,j,1,nrhs)+ad_rvfrc(i,j)
580 ad_rvfrc(i,j)=0.0_r8
581# ifdef WET_DRY_NOT_YET
582
583
584 ad_rv(i,j,1,nrhs)=ad_rv(i,j,1,nrhs)*vmask_wet(i,j)
585# endif
586 END DO
587 END IF
588# ifndef BODYFORCE
589 DO i=istru,iend
590 cff=om_u(i,j)*on_u(i,j)
591# ifdef DIAGNOSTICS_UV
592
593
594# endif
595# ifdef WET_DRY_NOT_YET
596
597
598 at_rufrc(i,j)=ad_rufrc(i,j)*umask_wet(i,j)
599# endif
600
601
602 ad_cff1=ad_cff1+ad_rufrc(i,j)
603 ad_cff2=ad_cff2+ad_rufrc(i,j)
604
605
606 ad_bustr(i,j)=ad_bustr(i,j)-cff*ad_cff2
607 ad_cff2=0.0_r8
608
609
610 ad_sustr(i,j)=ad_sustr(i,j)+cff*ad_cff1
611 ad_cff1=0.0_r8
612 END DO
613# endif
615 DO i=istru,iend
616# ifdef DIAGNOSTICS_UV
617# ifdef BODYFORCE
618
619
620# endif
621# ifdef WEC_MELLOR
622
623
624# endif
625# ifdef UV_ADV
626
627
628
629
630
631
632# endif
633# ifdef UV_COR
634
635
636# endif
637
638
639# endif
640
641
642 ad_ru(i,j,k,nrhs)=ad_ru(i,j,k,nrhs)+ad_rufrc(i,j)
643# ifdef WET_DRY_NOT_YET
644
645
646 ad_ru(i,j,k,nrhs)=ad_ru(i,j,k,nrhs)*umask_wet(i,j)
647# endif
648 END DO
649 END DO
650 DO i=istru,iend
651# ifdef DIAGNOSTICS_UV
652# ifdef BODYFORCE
653
654# endif
655# if defined UV_VIS2 || defined UV_VIS4
656
657
658
659# endif
660# ifdef WEC_MELLOR
661
662# endif
663# ifdef UV_ADV
664
665
666
667# endif
668# ifdef UV_COR
669
670# endif
671
672# endif
673
674
675 ad_ru(i,j,1,nrhs)=ad_ru(i,j,1,nrhs)+ad_rufrc(i,j)
676 ad_rufrc(i,j)=0.0_r8
677# ifdef WET_DRY_NOT_YET
678
679
680 ad_ru(i,j,1,nrhs)=ad_ru(i,j,1,nrhs)*umask_wet(i,j)
681# endif
682 END DO
683# ifdef UV_ADV
684
685
686
687
688
689 IF (j.ge.jstrv) THEN
691 DO i=istr,iend
692# ifdef DIAGNOSTICS_UV
693
694# endif
695
696
697 ad_cff=ad_cff-ad_rv(i,j,k,nrhs)
698
699
700 ad_fc(i,k-1)=ad_fc(i,k-1)-ad_cff
701 ad_fc(i,k )=ad_fc(i,k )+ad_cff
702 ad_cff=0.0_r8
703 END DO
704 END DO
705# ifdef UV_SADVECTION
706
707
708
709
710 cff1=9.0_r8/16.0_r8
711 cff2=1.0_r8/16.0_r8
713 DO i=istr,iend
714 dc(i,k)=(cff1*(hz(i,j ,k)+ &
715 & hz(i,j-1,k))- &
716 & cff2*(hz(i,j+1,k)+ &
717 & hz(i,j-2,k)))
718 END DO
719 END DO
720 DO i=istr,iend
721 fc(i,0)=0.0_r8
722 cf(i,0)=0.0_r8
723 END DO
725 DO i=istr,iend
726 cff=1.0_r8/(2.0_r8*dc(i,k+1)+dc(i,k)*(2.0_r8-fc(i,k-1)))
727 fc(i,k)=cff*dc(i,k+1)
728 cf(i,k)=cff*(6.0_r8*(v(i,j,k+1,nrhs)- &
729# ifdef WEC_MELLOR
730 & v_stokes(i,j,k )+ &
731 & v_stokes(i,j,k+1)- &
732# endif
733 & v(i,j,k ,nrhs))- &
734 & dc(i,k)*cf(i,k-1))
735 END DO
736 END DO
737 DO i=istr,iend
739 END DO
741 DO i=istr,iend
742 cf(i,k)=cf(i,k)-fc(i,k)*cf(i,k+1)
743 END DO
744 END DO
745
746
747
748 DO i=istr,iend
749
750
751 ad_fc(i,
n(ng))=0.0_r8
752
753
754 ad_fc(i,0)=0.0_r8
755 END DO
756 cff3=1.0_r8/3.0_r8
757 cff4=1.0_r8/6.0_r8
759 DO i=istr,iend
760
761
762
763
764
765# ifdef WEC_MELLOR
766
767# endif
768
769
770
771
772
773
774
775# ifdef WEC_MELLOR
776
777# endif
778
779
780
781
782
783 adfac1=(cff1*(w(i,j ,k)+ &
784 & w(i,j-1,k))- &
785 & cff2*(w(i,j+1,k)+ &
786 & w(i,j-2,k)))*ad_fc(i,k)
787 adfac2=adfac1*dc(i,k)
788 adfac3=(v(i,j,k,nrhs)+ &
789# ifdef WEC_MELLOR
790 & v_stokes(i,j,k)+ &
791# endif
792 & dc(i,k)*(cff3*cf(i,k )+ &
793 & cff4*cf(i,k-1)))*ad_fc(i,k)
794 adfac4=adfac3*cff1
795 adfac5=adfac3*cff2
796 ad_dc(i,k)=ad_dc(i,k)+(cff3*cf(i,k )+ &
797 cff4*cf(i,k-1))*adfac1
798 ad_cf(i,k-1)=ad_cf(i,k-1)+cff4*adfac2
799 ad_cf(i,k )=ad_cf(i,k )+cff3*adfac2
800 ad_v(i,j,k,nrhs)=ad_v(i,j,k,nrhs)+adfac1
801# ifdef WEC_MELLOR
802 ad_v_stokes(i,j,k)=ad_v_stokes(i,j,k)+adfac1
803# endif
804 ad_w(i,j-2,k)=ad_w(i,j-2,k)-adfac5
805 ad_w(i,j-1,k)=ad_w(i,j-1,k)+adfac4
806 ad_w(i,j ,k)=ad_w(i,j ,k)+adfac4
807 ad_w(i,j+1,k)=ad_w(i,j+1,k)-adfac5
808 ad_fc(i,k)=0.0_r8
809 END DO
810 END DO
811
812
813
814
816 DO i=istr,iend
817
818
819 ad_cf(i,k+1)=ad_cf(i,k+1)-fc(i,k)*ad_cf(i,k)
820 END DO
821 END DO
822 DO i=istr,iend
823
824
825 ad_cf(i,
n(ng))=0.0_r8
826 END DO
828 DO i=istr,iend
829 cff=1.0_r8/(2.0_r8*dc(i,k+1)+dc(i,k)*(2.0_r8-fc(i,k-1)))
830
831# ifdef WEC_MELLOR
832
833
834# endif
835
836
837
838
839
840
841
842 adfac=cff*ad_cf(i,k)
843 adfac1=adfac*6.0_r8
844 ad_cf(i,k-1)=ad_cf(i,k-1)-dc(i,k)*adfac
845 ad_dc(i,k )=ad_dc(i,k )- &
846 & (cf(i,k-1)+2.0_r8*cf(i,k))*adfac
847 ad_dc(i,k+1)=ad_dc(i,k+1)- &
848 & (cf(i,k+1)+2.0_r8*cf(i,k))*adfac
849 ad_v(i,j,k ,nrhs)=ad_v(i,j,k ,nrhs)-adfac1
850 ad_v(i,j,k+1,nrhs)=ad_v(i,j,k+1,nrhs)+adfac1
851# ifdef WEC_MELLOR
852 ad_v_stokes(i,j,k )=ad_v_stokes(i,j,k )-adfac1
853 ad_v_stokes(i,j,k+1)=ad_v_stokes(i,j,k+1)+adfac1
854# endif
855 ad_cf(i,k)=0.0_r8
856 END DO
857 END DO
858 DO i=istr,iend
859
860
861 ad_cf(i,0)=0.0_r8
862 END DO
863 cff1=9.0_r8/16.0_r8
864 cff2=1.0_r8/16.0_r8
866 DO i=istr,iend
867
868
869
870
871
872 adfac1=cff1*ad_dc(i,k)
873 adfac2=cff2*ad_dc(i,k)
874 ad_hz(i,j-2,k)=ad_hz(i,j-2,k)-adfac2
875 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
876 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
877 ad_hz(i,j+1,k)=ad_hz(i,j+1,k)-adfac2
878 ad_dc(i,k)=0.0
879 END DO
880 END DO
881# elif defined UV_C2ADVECTION
882
883
884
885 DO i=istr,iend
886
887
888 ad_fc(i,0)=0.0_r8
889
890
891 ad_fc(i,
n(ng))=0.0_r8
892 END DO
894 DO i=istr,iend
895
896# ifdef WEC_MELLOR
897
898
899# endif
900
901
902
903
904# ifdef WEC_MELLOR
905
906
907# endif
908
909
910
911
912 adfac=0.25_r8*ad_fc(i,k)
913 adfac1=adfac*(v(i,j,k ,nrhs)+ &
914# ifdef WEC_MELLOR
915 & v_stokes(i,j,k )+ &
916 & v_stokes(i,j,k+1)+ &
917# endif
918 & v(i,j,k+1,nrhs))
919 adfac2=adfac*(w(i,j ,k)+ &
920 & w(i,j-1,k))
921 ad_w(i,j-1,k)=ad_w(i,j-1,k)+adfac1
922 ad_w(i,j ,k)=ad_w(i,j ,k)+adfac1
923 ad_v(i,j,k ,nrhs)=ad_v(i,j,k ,nrhs)+adfac2
924 ad_v(i,j,k+1,nrhs)=ad_v(i,j,k+1,nrhs)+adfac2
925# ifdef WEC_MELLOR
926 ad_v_stokes(i,j,k )=ad_v_stokes(i,j,k )+adfac2
927 ad_v_stokes(i,j,k+1)=ad_v_stokes(i,j,k+1)+adfac2
928# endif
929 ad_fc(i,k)=0.0_r8
930 END DO
931 END DO
932# elif defined UV_C4ADVECTION
933
934
935
936 cff1=9.0_r8/32.0_r8
937 cff2=1.0_r8/32.0_r8
938 DO i=istr,iend
939
940
941 ad_fc(i,0)=0.0_r8
942
943# ifdef WEC_MELLOR
944
945
946# endif
947
948
949# ifdef WEC_MELLOR
950
951
952# endif
953
954
955
956
957# ifdef WEC_MELLOR
958
959
960# endif
961
962
963# ifdef WEC_MELLOR
964
965
966# endif
967
968
969
970
971 adfac=(w(i,j ,1)+ &
972 & w(i,j-1,1))*ad_fc(i,1)
973 adfac1=adfac*cff1
974 adfac2=adfac*cff2
975 adfac3=(cff1*(v(i,j,1,nrhs)+ &
976# ifdef WEC_MELLOR
977 & v_stokes(i,j,1)+ &
978 & v_stokes(i,j,2)+ &
979# endif
980 & v(i,j,2,nrhs))- &
981 & cff2*(v(i,j,1,nrhs)+ &
982# ifdef WEC_MELLOR
983 & v_stokes(i,j,1)+ &
984 & v_stokes(i,j,3)+ &
985# endif
986 & v(i,j,3,nrhs)))*ad_fc(i,1)
987 ad_w(i,j-1,1)=ad_w(i,j-1,1)+adfac3
988 ad_w(i,j ,1)=ad_w(i,j ,1)+adfac3
989 ad_v(i,j,1,nrhs)=ad_v(i,j,1,nrhs)+adfac1-adfac2
990 ad_v(i,j,2,nrhs)=ad_v(i,j,2,nrhs)+adfac1
991 ad_v(i,j,3,nrhs)=ad_v(i,j,3,nrhs)-adfac2
992# ifdef WEC_MELLOR
993 ad_v_stokes(i,j,1)=ad_v_stokes(i,j,1)+adfac1-adfac2
994 ad_v_stokes(i,j,2)=ad_v_stokes(i,j,2)+adfac1
995 ad_v_stokes(i,j,3)=ad_v_stokes(i,j,3)-adfac2
996# endif
997 ad_fc(i,1)=0.0_r8
998
999# ifdef WEC_MELLOR
1000
1001
1002# endif
1003
1004
1005# ifdef WEC_MELLOR
1006
1007
1008# endif
1009
1010
1011
1012
1013# ifdef WEC_MELLOR
1014
1015
1016# endif
1017
1018
1019# ifdef WEC_MELLOR
1020
1021
1022# endif
1023
1024
1025
1026
1027 adfac=(w(i,j ,
n(ng)-1)+ &
1028 & w(i,j-1,
n(ng)-1))*ad_fc(i,
n(ng)-1)
1029 adfac1=adfac*cff1
1030 adfac2=adfac*cff2
1031 adfac3=(cff1*(v(i,j,
n(ng)-1,nrhs)+ &
1032# ifdef WEC_MELLOR
1033 & v_stokes(i,j,
n(ng)-1)+ &
1034 & v_stokes(i,j,
n(ng) )+ &
1035# endif
1036 & v(i,j,
n(ng) ,nrhs))- &
1037 & cff2*(v(i,j,
n(ng)-2,nrhs)+ &
1038# ifdef WEC_MELLOR
1039 & v_stokes(i,j,
n(ng)-2)+ &
1040 & v_stokes(i,j,
n(ng) )+ &
1041# endif
1042 & v(i,j,
n(ng) ,nrhs)))*ad_fc(i,
n(ng)-1)
1043 ad_w(i,j-1,
n(ng)-1)=ad_w(i,j-1,
n(ng)-1)+adfac3
1044 ad_w(i,j ,
n(ng)-1)=ad_w(i,j ,
n(ng)-1)+adfac3
1045 ad_v(i,j,
n(ng)-2,nrhs)=ad_v(i,j,
n(ng)-2,nrhs)-adfac2
1046 ad_v(i,j,
n(ng)-1,nrhs)=ad_v(i,j,
n(ng)-1,nrhs)+adfac1
1047 ad_v(i,j,
n(ng) ,nrhs)=ad_v(i,j,
n(ng) ,nrhs)+adfac1-adfac2
1048# ifdef WEC_MELLOR
1049 ad_v_stokes(i,j,
n(ng)-2)=ad_v_stokes(i,j,
n(ng)-2)-adfac2
1050 ad_v_stokes(i,j,
n(ng)-1)=ad_v_stokes(i,j,
n(ng)-1)+adfac1
1051 ad_v_stokes(i,j,
n(ng) )=ad_v_stokes(i,j,
n(ng) )+adfac1- &
1052 & adfac2
1053# endif
1054 ad_fc(i,
n(ng)-1)=0.0_r8
1055
1056
1057 ad_fc(i,
n(ng))=0.0_r8
1058 END DO
1060 DO i=istr,iend
1061
1062# ifdef WEC_MELLOR
1063
1064
1065# endif
1066
1067
1068# ifdef WEC_MELLOR
1069
1070
1071# endif
1072
1073
1074
1075
1076# ifdef WEC_MELLOR
1077
1078
1079# endif
1080
1081
1082# ifdef WEC_MELLOR
1083
1084
1085# endif
1086
1087
1088
1089
1090 adfac=(w(i,j ,k)+ &
1091 & w(i,j-1,k))*ad_fc(i,k)
1092 adfac1=adfac*cff1
1093 adfac2=adfac*cff2
1094 adfac3=(cff1*(v(i,j,k ,nrhs)+ &
1095# ifdef WEC_MELLOR
1096 & v_stokes(i,j,k )+ &
1097 & v_stokes(i,j,k+1)+ &
1098# endif
1099 & v(i,j,k+1,nrhs))- &
1100 & cff2*(v(i,j,k-1,nrhs)+ &
1101# ifdef WEC_MELLOR
1102 & v_stokes(i,j,k-1)+ &
1103 & v_stokes(i,j,k+2)+ &
1104# endif
1105 & v(i,j,k+2,nrhs)))*ad_fc(i,k)
1106 ad_w(i,j-1,k)=ad_w(i,j-1,k)+adfac3
1107 ad_w(i,j ,k)=ad_w(i,j ,k)+adfac3
1108 ad_v(i,j,k-1,nrhs)=ad_v(i,j,k-1,nrhs)-adfac2
1109 ad_v(i,j,k ,nrhs)=ad_v(i,j,k ,nrhs)+adfac1
1110 ad_v(i,j,k+1,nrhs)=ad_v(i,j,k+1,nrhs)+adfac1
1111 ad_v(i,j,k+2,nrhs)=ad_v(i,j,k+2,nrhs)-adfac2
1112# ifdef WEC_MELLOR
1113 ad_v_stokes(i,j,k-1)=ad_v_stokes(i,j,k-1)-adfac2
1114 ad_v_stokes(i,j,k )=ad_v_stokes(i,j,k )+adfac1
1115 ad_v_stokes(i,j,k+1)=ad_v_stokes(i,j,k+1)+adfac1
1116 ad_v_stokes(i,j,k+2)=ad_v_stokes(i,j,k+2)-adfac2
1117# endif
1118 ad_fc(i,k)=0.0_r8
1119 END DO
1120 END DO
1121# else
1122
1123
1124
1125 cff1=9.0_r8/16.0_r8
1126 cff2=1.0_r8/16.0_r8
1127 DO i=istr,iend
1128
1129
1130 ad_fc(i,0)=0.0_r8
1131
1132# ifdef WEC_MELLOR
1133
1134
1135# endif
1136
1137
1138# ifdef WEC_MELLOR
1139
1140
1141# endif
1142
1143
1144
1145
1146
1147
1148# ifdef WEC_MELLOR
1149
1150
1151# endif
1152
1153
1154# ifdef WEC_MELLOR
1155
1156
1157# endif
1158
1159
1160
1161
1162
1163
1164 adfac=(cff1*(w(i,j ,1)+ &
1165 & w(i,j-1,1))- &
1166 & cff2*(w(i,j+1,1)+ &
1167 & w(i,j-2,1)))*ad_fc(i,1)
1168 adfac1=adfac*cff1
1169 adfac2=adfac*cff2
1170 adfac=(cff1*(v(i,j,1,nrhs)+ &
1171# ifdef WEC_MELLOR
1172 & v_stokes(i,j,1)+ &
1173 & v_stokes(i,j,2)+ &
1174# endif
1175 & v(i,j,2,nrhs))- &
1176 & cff2*(v(i,j,1,nrhs)+ &
1177# ifdef WEC_MELLOR
1178 & v_stokes(i,j,1)+ &
1179 & v_stokes(i,j,3)+ &
1180# endif
1181 & v(i,j,3,nrhs)))*ad_fc(i,1)
1182 adfac3=adfac*cff1
1183 adfac4=adfac*cff2
1184 ad_w(i,j-2,1)=ad_w(i,j-2,1)-adfac4
1185 ad_w(i,j-1,1)=ad_w(i,j-1,1)+adfac3
1186 ad_w(i,j ,1)=ad_w(i,j ,1)+adfac3
1187 ad_w(i,j+1,1)=ad_w(i,j+1,1)-adfac4
1188 ad_v(i,j,1,nrhs)=ad_v(i,j,1,nrhs)+adfac1-adfac2
1189 ad_v(i,j,2,nrhs)=ad_v(i,j,2,nrhs)+adfac1
1190 ad_v(i,j,3,nrhs)=ad_v(i,j,3,nrhs)-adfac2
1191# ifdef WEC_MELLOR
1192 ad_v_stokes(i,j,1)=ad_v_stokes(i,j,1)+adfac1-adfac2
1193 ad_v_stokes(i,j,2)=ad_v_stokes(i,j,2)+adfac1
1194 ad_v_stokes(i,j,3)=ad_v_stokes(i,j,3)-adfac2
1195# endif
1196 ad_fc(i,1)=0.0_r8
1197
1198# ifdef WEC_MELLOR
1199
1200
1201# endif
1202
1203
1204# ifdef WEC_MELLOR
1205
1206
1207# endif
1208
1209
1210
1211
1212
1213
1214# ifdef WEC_MELLOR
1215
1216
1217# endif
1218
1219
1220# ifdef WEC_MELLOR
1221
1222
1223# endif
1224
1225
1226
1227
1228
1229
1230 adfac=(cff1*(w(i,j ,
n(ng)-1)+ &
1231 & w(i,j-1,
n(ng)-1))- &
1232 & cff2*(w(i,j+1,
n(ng)-1)+ &
1233 & w(i,j-2,
n(ng)-1)))*ad_fc(i,
n(ng)-1)
1234 adfac1=adfac*cff1
1235 adfac2=adfac*cff2
1236 adfac=(cff1*(v(i,j,
n(ng)-1,nrhs)+ &
1237# ifdef WEC_MELLOR
1238 & v_stokes(i,j,
n(ng)-1)+ &
1239 & v_stokes(i,j,
n(ng) )+ &
1240# endif
1241 & v(i,j,
n(ng) ,nrhs))- &
1242 & cff2*(v(i,j,
n(ng)-2,nrhs)+ &
1243# ifdef WEC_MELLOR
1244 & v_stokes(i,j,
n(ng)-2)+ &
1245 & v_stokes(i,j,
n(ng) )+ &
1246# endif
1247 & v(i,j,
n(ng) ,nrhs)))*ad_fc(i,
n(ng)-1)
1248 adfac3=adfac*cff1
1249 adfac4=adfac*cff2
1250 ad_w(i,j-2,
n(ng)-1)=ad_w(i,j-2,
n(ng)-1)-adfac4
1251 ad_w(i,j-1,
n(ng)-1)=ad_w(i,j-1,
n(ng)-1)+adfac3
1252 ad_w(i,j ,
n(ng)-1)=ad_w(i,j ,
n(ng)-1)+adfac3
1253 ad_w(i,j+1,
n(ng)-1)=ad_w(i,j+1,
n(ng)-1)-adfac4
1254 ad_v(i,j,
n(ng)-2,nrhs)=ad_v(i,j,
n(ng)-2,nrhs)-adfac2
1255 ad_v(i,j,
n(ng)-1,nrhs)=ad_v(i,j,
n(ng)-1,nrhs)+adfac1
1256 ad_v(i,j,
n(ng) ,nrhs)=ad_v(i,j,
n(ng) ,nrhs)+adfac1-adfac2
1257# ifdef WEC_MELLOR
1258 ad_v_stokes(i,j,
n(ng)-2)=ad_v_stokes(i,j,
n(ng)-2)-adfac2
1259 ad_v_stokes(i,j,
n(ng)-1)=ad_v_stokes(i,j,
n(ng)-1)+adfac1
1260 ad_v_stokes(i,j,
n(ng) )=ad_v_stokes(i,j,
n(ng) )+adfac1- &
1261 & adfac2
1262# endif
1263 ad_fc(i,
n(ng)-1)=0.0_r8
1264
1265
1266 ad_fc(i,
n(ng))=0.0_r8
1267 END DO
1269 DO i=istr,iend
1270
1271# ifdef WEC_MELLOR
1272
1273
1274# endif
1275
1276
1277# ifdef WEC_MELLOR
1278
1279
1280# endif
1281
1282
1283
1284
1285
1286
1287# ifdef WEC_MELLOR
1288
1289
1290# endif
1291
1292
1293# ifdef WEC_MELLOR
1294
1295
1296# endif
1297
1298
1299
1300
1301
1302
1303 adfac=(cff1*(w(i,j ,k)+ &
1304 & w(i,j-1,k))- &
1305 & cff2*(w(i,j+1,k)+ &
1306 & w(i,j-2,k)))*ad_fc(i,k)
1307 adfac1=adfac*cff1
1308 adfac2=adfac*cff2
1309 adfac=(cff1*(v(i,j,k ,nrhs)+ &
1310# ifdef WEC_MELLOR
1311 & v_stokes(i,j,k )+ &
1312 & v_stokes(i,j,k+1)+ &
1313# endif
1314 & v(i,j,k+1,nrhs))- &
1315 & cff2*(v(i,j,k-1,nrhs)+ &
1316# ifdef WEC_MELLOR
1317 & v_stokes(i,j,k-1)+ &
1318 & v_stokes(i,j,k+2)+ &
1319# endif
1320 & v(i,j,k+2,nrhs)))*ad_fc(i,k)
1321 adfac3=adfac*cff1
1322 adfac4=adfac*cff2
1323 ad_w(i,j-2,k)=ad_w(i,j-2,k)-adfac4
1324 ad_w(i,j-1,k)=ad_w(i,j-1,k)+adfac3
1325 ad_w(i,j ,k)=ad_w(i,j ,k)+adfac3
1326 ad_w(i,j+1,k)=ad_w(i,j+1,k)-adfac4
1327 ad_v(i,j,k-1,nrhs)=ad_v(i,j,k-1,nrhs)-adfac2
1328 ad_v(i,j,k ,nrhs)=ad_v(i,j,k ,nrhs)+adfac1
1329 ad_v(i,j,k+1,nrhs)=ad_v(i,j,k+1,nrhs)+adfac1
1330 ad_v(i,j,k+2,nrhs)=ad_v(i,j,k+2,nrhs)-adfac2
1331# ifdef WEC_MELLOR
1332 ad_v_stokes(i,j,k-1)=ad_v_stokes(i,j,k-1)-adfac2
1333 ad_v_stokes(i,j,k )=ad_v_stokes(i,j,k )+adfac1
1334 ad_v_stokes(i,j,k+1)=ad_v_stokes(i,j,k+1)+adfac1
1335 ad_v_stokes(i,j,k+2)=ad_v_stokes(i,j,k+2)-adfac2
1336# endif
1337 ad_fc(i,k)=0.0_r8
1338 END DO
1339 END DO
1340# endif
1341 END IF
1342
1343
1344
1345
1346
1348 DO i=istru,iend
1349# ifdef DIAGNOSTICS_UV
1350
1351# endif
1352
1353
1354 ad_cff=ad_cff-ad_ru(i,j,k,nrhs)
1355
1356
1357 ad_fc(i,k-1)=ad_fc(i,k-1)-ad_cff
1358 ad_fc(i,k )=ad_fc(i,k )+ad_cff
1359 ad_cff=0.0_r8
1360 END DO
1361 END DO
1362# ifdef UV_SADVECTION
1363
1364
1365
1366
1367 cff1=9.0_r8/16.0_r8
1368 cff2=1.0_r8/16.0_r8
1370 DO i=istru,iend
1371 dc(i,k)=cff1*(hz(i ,j,k)+ &
1372 & hz(i-1,j,k))- &
1373 & cff2*(hz(i+1,j,k)+ &
1374 & hz(i-2,j,k))
1375 END DO
1376 END DO
1377 DO i=istru,iend
1378 fc(i,0)=0.0_r8
1379 cf(i,0)=0.0_r8
1380 END DO
1382 DO i=istru,iend
1383 cff=1.0_r8/(2.0_r8*dc(i,k+1)+dc(i,k)*(2.0_r8-fc(i,k-1)))
1384 fc(i,k)=cff*dc(i,k+1)
1385 cf(i,k)=cff*(6.0_r8*(u(i,j,k+1,nrhs)- &
1386# ifdef WEC_MELLOR
1387 & u_stokes(i,j,k )+ &
1388 & u_stokes(i,j,k+1)- &
1389# endif
1390 & u(i,j,k ,nrhs))- &
1391 & dc(i,k)*cf(i,k-1))
1392 END DO
1393 END DO
1394 DO i=istru,iend
1396 END DO
1398 DO i=istru,iend
1399 cf(i,k)=cf(i,k)-fc(i,k)*cf(i,k+1)
1400 END DO
1401 END DO
1402
1403
1404
1405 DO i=istru,iend
1406
1407
1408 ad_fc(i,
n(ng))=0.0_r8
1409
1410
1411 ad_fc(i,0)=0.0_r8
1412 END DO
1413 cff3=1.0_r8/3.0_r8
1414 cff4=1.0_r8/6.0_r8
1416 DO i=istru,iend
1417
1418
1419
1420
1421
1422# ifdef WEC_MELLOR
1423
1424# endif
1425
1426
1427
1428
1429
1430
1431
1432# ifdef WEC_MELLOR
1433
1434# endif
1435
1436
1437
1438
1439
1440 adfac1=(cff1*(w(i ,j,k)+ &
1441 & w(i-1,j,k))- &
1442 & cff2*(w(i+1,j,k)+ &
1443 & w(i-2,j,k)))*ad_fc(i,k)
1444 adfac2=adfac1*dc(i,k)
1445 adfac3=(u(i,j,k,nrhs)+ &
1446# ifdef WEC_MELLOR
1447 & u_stokes(i,j,k)+ &
1448# endif
1449 & dc(i,k)*(cff3*cf(i,k )+ &
1450 & cff4*cf(i,k-1)))*ad_fc(i,k)
1451 adfac4=adfac3*cff1
1452 adfac5=adfac3*cff2
1453 ad_dc(i,k)=ad_dc(i,k)+(cff3*cf(i,k )+ &
1454 & cff4*cf(i,k-1))*adfac1
1455 ad_cf(i,k-1)=ad_cf(i,k-1)+cff4*adfac2
1456 ad_cf(i,k )=ad_cf(i,k )+cff3*adfac2
1457 ad_u(i,j,k,nrhs)=ad_u(i,j,k,nrhs)+adfac1
1458# ifdef WEC_MELLOR
1459 ad_u_stokes(i,j,k)=ad_u_stokes(i,j,k)+adfac1
1460# endif
1461 ad_w(i-2,j,k)=ad_w(i-2,j,k)-adfac5
1462 ad_w(i-1,j,k)=ad_w(i-1,j,k)+adfac4
1463 ad_w(i ,j,k)=ad_w(i ,j,k)+adfac4
1464 ad_w(i+1,j,k)=ad_w(i+1,j,k)-adfac5
1465 ad_fc(i,k)=0.0_r8
1466 END DO
1467 END DO
1468
1469
1470
1471
1473 DO i=istru,iend
1474
1475
1476 ad_cf(i,k+1)=ad_cf(i,k+1)-fc(i,k)*ad_cf(i,k)
1477 END DO
1478 END DO
1479 DO i=istru,iend
1480
1481
1483 END DO
1485 DO i=istru,iend
1486 cff=1.0_r8/(2.0_r8*dc(i,k+1)+dc(i,k)*(2.0_r8-fc(i,k-1)))
1487
1488# ifdef WEC_MELLOR
1489
1490
1491# endif
1492
1493
1494
1495
1496
1497
1498 adfac=cff*ad_cf(i,k)
1499 adfac1=adfac*6.0_r8
1500 ad_cf(i,k-1)=ad_cf(i,k-1)-dc(i,k)*adfac
1501 ad_dc(i,k )=ad_dc(i,k )- &
1502 & (cf(i,k-1)+2.0_r8*cf(i,k))*adfac
1503 ad_dc(i,k+1)=ad_dc(i,k+1)- &
1504 & (cf(i,k+1)+2.0_r8*cf(i,k))*adfac
1505 ad_u(i,j,k ,nrhs)=ad_u(i,j,k ,nrhs)-adfac1
1506 ad_u(i,j,k+1,nrhs)=ad_u(i,j,k+1,nrhs)+adfac1
1507# ifdef WEC_MELLOR
1508 ad_u_stokes(i,j,k )=ad_u_stokes(i,j,k )-adfac1
1509 ad_u_stokes(i,j,k+1)=ad_u_stokes(i,j,k+1)+adfac1
1510# endif
1511 ad_cf(i,k)=0.0_r8
1512 END DO
1513 END DO
1514 DO i=istru,iend
1515
1516
1517 ad_cf(i,0)=0.0_r8
1518 END DO
1519 cff1=9.0_r8/16.0_r8
1520 cff2=1.0_r8/16.0_r8
1522 DO i=istru,iend
1523
1524
1525
1526
1527
1528 adfac1=cff1*ad_dc(i,k)
1529 adfac2=cff2*ad_dc(i,k)
1530 ad_hz(i-2,j,k)=ad_hz(i-2,j,k)-adfac2
1531 ad_hz(i+1,j,k)=ad_hz(i+1,j,k)-adfac2
1532 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
1533 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
1534 ad_dc(i,k)=0.0_r8
1535 END DO
1536 END DO
1537# elif defined UV_C2ADVECTION
1538
1539
1540
1541 DO i=istru,iend
1542
1543
1544 ad_fc(i,0)=0.0_r8
1545
1546
1547 ad_fc(i,
n(ng))=0.0_r8
1548 END DO
1550 DO i=istru,iend
1551
1552# ifdef WEC_MELLOR
1553
1554
1555# endif
1556
1557
1558
1559
1560# ifdef WEC_MELLOR
1561
1562
1563# endif
1564
1565
1566
1567
1568 adfac=0.25_r8*ad_fc(i,k)
1569 adfac1=adfac*(u(i,j,k ,nrhs)+ &
1570# ifdef WEC_MELLOR
1571 & u_stokes(i,j,k )+ &
1572 & u_stokes(i,j,k+1)+ &
1573# endif
1574 & u(i,j,k+1,nrhs))
1575 adfac2=adfac*(w(i ,j,k)+ &
1576 & w(i-1,j,k))
1577 ad_w(i-1,j,k)=ad_w(i-1,j,k)+adfac1
1578 ad_w(i ,j,k)=ad_w(i ,j,k)+adfac1
1579 ad_u(i,j,k ,nrhs)=ad_u(i,j,k ,nrhs)+adfac2
1580 ad_u(i,j,k+1,nrhs)=ad_u(i,j,k+1,nrhs)+adfac2
1581# ifdef WEC_MELLOR
1582 ad_u_stokes(i,j,k )=ad_u_stokes(i,j,k )+adfac2
1583 ad_u_stokes(i,j,k+1)=ad_u_stokes(i,j,k+1)+adfac2
1584# endif
1585 ad_fc(i,k)=0.0_r8
1586 END DO
1587 END DO
1588# elif defined UV_C4ADVECTION
1589
1590
1591
1592 cff1=9.0_r8/32.0_r8
1593 cff2=1.0_r8/32.0_r8
1594 DO i=istru,iend
1595
1596
1597 ad_fc(i,0)=0.0_r8
1598
1599# ifdef WEC_MELLOR
1600
1601
1602# endif
1603
1604
1605# ifdef WEC_MELLOR
1606
1607
1608# endif
1609
1610
1611
1612
1613# ifdef WEC_MELLOR
1614
1615
1616# endif
1617
1618
1619# ifdef WEC_MELLOR
1620
1621
1622# endif
1623
1624
1625
1626
1627 adfac=(w(i ,j,1)+ &
1628 & w(i-1,j,1))*ad_fc(i,1)
1629 adfac1=adfac*cff1
1630 adfac2=adfac*cff2
1631 adfac3=(cff1*(u(i,j,1,nrhs)+ &
1632# ifdef WEC_MELLOR
1633 & u_stokes(i,j,1)+ &
1634 & u_stokes(i,j,2)+ &
1635# endif
1636 & u(i,j,2,nrhs))- &
1637 & cff2*(u(i,j,1,nrhs)+ &
1638# ifdef WEC_MELLOR
1639 & u_stokes(i,j,1)+ &
1640 & u_stokes(i,j,3)+ &
1641# endif
1642 & u(i,j,3,nrhs)))*ad_fc(i,1)
1643 ad_w(i-1,j,1)=ad_w(i-1,j,1)+adfac3
1644 ad_w(i ,j,1)=ad_w(i ,j,1)+adfac3
1645 ad_u(i,j,1,nrhs)=ad_u(i,j,1,nrhs)+adfac1-adfac2
1646 ad_u(i,j,2,nrhs)=ad_u(i,j,2,nrhs)+adfac1
1647 ad_u(i,j,3,nrhs)=ad_u(i,j,3,nrhs)-adfac2
1648# ifdef WEC_MELLOR
1649 ad_u_stokes(i,j,1)=ad_u_stokes(i,j,1)+adfac1-adfac2
1650 ad_u_stokes(i,j,2)=ad_u_stokes(i,j,2)+adfac1
1651 ad_u_stokes(i,j,3)=ad_u_stokes(i,j,3)-adfac2
1652# endif
1653 ad_fc(i,1)=0.0_r8
1654
1655# ifdef WEC_MELLOR
1656
1657
1658# endif
1659
1660
1661# ifdef WEC_MELLOR
1662
1663
1664# endif
1665
1666
1667
1668
1669# ifdef WEC_MELLOR
1670
1671
1672# endif
1673
1674
1675# ifdef WEC_MELLOR
1676
1677
1678# endif
1679
1680
1681
1682
1683 adfac=(w(i ,j,
n(ng)-1)+ &
1684 & w(i-1,j,
n(ng)-1))*ad_fc(i,
n(ng)-1)
1685 adfac1=adfac*cff1
1686 adfac2=adfac*cff2
1687 adfac3=(cff1*(u(i,j,
n(ng)-1,nrhs)+ &
1688# ifdef WEC_MELLOR
1689 & u_stokes(i,j,
n(ng)-1)+ &
1690 & u_stokes(i,j,
n(ng) )+ &
1691# endif
1692 & u(i,j,
n(ng) ,nrhs))- &
1693 & cff2*(u(i,j,
n(ng)-2,nrhs)+ &
1694# ifdef WEC_MELLOR
1695 & u_stokes(i,j,
n(ng)-2)+ &
1696 & u_stokes(i,j,
n(ng) )+ &
1697# endif
1698 & u(i,j,
n(ng) ,nrhs)))*ad_fc(i,
n(ng)-1)
1699 ad_w(i ,j,
n(ng)-1)=ad_w(i ,j,
n(ng)-1)+adfac3
1700 ad_w(i-1,j,
n(ng)-1)=ad_w(i-1,j,
n(ng)-1)+adfac3
1701 ad_u(i,j,
n(ng)-2,nrhs)=ad_u(i,j,
n(ng)-2,nrhs)-adfac2
1702 ad_u(i,j,
n(ng)-1,nrhs)=ad_u(i,j,
n(ng)-1,nrhs)+adfac1
1703 ad_u(i,j,
n(ng) ,nrhs)=ad_u(i,j,
n(ng) ,nrhs)+adfac1-adfac2
1704# ifdef WEC_MELLOR
1705 ad_u_stokes(i,j,
n(ng)-2)=ad_u_stokes(i,j,
n(ng)-2)-adfac2
1706 ad_u_stokes(i,j,
n(ng)-1)=ad_u_stokes(i,j,
n(ng)-1)+adfac1
1707 ad_u_stokes(i,j,
n(ng) )=ad_u_stokes(i,j,
n(ng) )+adfac1- &
1708 & adfac2
1709# endif
1710 ad_fc(i,
n(ng)-1)=0.0_r8
1711
1712
1713 ad_fc(i,
n(ng))=0.0_r8
1714 END DO
1716 DO i=istru,iend
1717
1718# ifdef WEC_MELLOR
1719
1720
1721# endif
1722
1723
1724# ifdef WEC_MELLOR
1725
1726
1727# endif
1728
1729
1730
1731
1732# ifdef WEC_MELLOR
1733
1734
1735# endif
1736
1737
1738# ifdef WEC_MELLOR
1739
1740
1741# endif
1742
1743
1744
1745
1746 adfac=(w(i ,j,k)+ &
1747 & w(i-1,j,k))*ad_fc(i,k)
1748 adfac1=adfac*cff1
1749 adfac2=adfac*cff2
1750 adfac3=(cff1*(u(i,j,k ,nrhs)+ &
1751# ifdef WEC_MELLOR
1752 & u_stokes(i,j,k )+ &
1753 & u_stokes(i,j,k+1)+ &
1754# endif
1755 & u(i,j,k+1,nrhs))- &
1756 & cff2*(u(i,j,k-1,nrhs)+ &
1757# ifdef WEC_MELLOR
1758 & u_stokes(i,j,k-1)+ &
1759 & u_stokes(i,j,k+2)+ &
1760# endif
1761 & u(i,j,k+2,nrhs)))*ad_fc(i,k)
1762 ad_w(i-1,j,k)=ad_w(i-1,j,k)+adfac3
1763 ad_w(i ,j,k)=ad_w(i ,j,k)+adfac3
1764 ad_u(i,j,k-1,nrhs)=ad_u(i,j,k-1,nrhs)-adfac2
1765 ad_u(i,j,k ,nrhs)=ad_u(i,j,k ,nrhs)+adfac1
1766 ad_u(i,j,k+1,nrhs)=ad_u(i,j,k+1,nrhs)+adfac1
1767 ad_u(i,j,k+2,nrhs)=ad_u(i,j,k+2,nrhs)-adfac2
1768# ifdef WEC_MELLOR
1769 ad_u_stokes(i,j,k-1)=ad_u_stokes(i,j,k-1)-adfac2
1770 ad_u_stokes(i,j,k )=ad_u_stokes(i,j,k )+adfac1
1771 ad_u_stokes(i,j,k+1)=ad_u_stokes(i,j,k+1)+adfac1
1772 ad_u_stokes(i,j,k+2)=ad_u_stokes(i,j,k+2)-adfac2
1773# endif
1774 ad_fc(i,k)=0.0_r8
1775 END DO
1776 END DO
1777# else
1778
1779
1780
1781 cff1=9.0_r8/16.0_r8
1782 cff2=1.0_r8/16.0_r8
1783 DO i=istru,iend
1784
1785
1786 ad_fc(i,0)=0.0_r8
1787
1788# ifdef WEC_MELLOR
1789
1790
1791# endif
1792
1793
1794# ifdef WEC_MELLOR
1795
1796
1797# endif
1798
1799
1800
1801
1802
1803
1804# ifdef WEC_MELLOR
1805
1806
1807# endif
1808
1809
1810# ifdef WEC_MELLOR
1811
1812
1813# endif
1814
1815
1816
1817
1818
1819
1820 adfac=(cff1*(w(i ,j,1)+ &
1821 & w(i-1,j,1))- &
1822 & cff2*(w(i+1,j,1)+ &
1823 & w(i-2,j,1)))*ad_fc(i,1)
1824 adfac1=adfac*cff1
1825 adfac2=adfac*cff2
1826 adfac=(cff1*(u(i,j,1,nrhs)+ &
1827# ifdef WEC_MELLOR
1828 & u_stokes(i,j,1)+ &
1829 & u_stokes(i,j,2)+ &
1830# endif
1831 & u(i,j,2,nrhs))- &
1832 & cff2*(u(i,j,1,nrhs)+ &
1833# ifdef WEC_MELLOR
1834 & u_stokes(i,j,1)+ &
1835 & u_stokes(i,j,3)+ &
1836# endif
1837 & u(i,j,3,nrhs)))*ad_fc(i,1)
1838 adfac3=adfac*cff1
1839 adfac4=adfac*cff2
1840 ad_w(i-2,j,1)=ad_w(i-2,j,1)-adfac4
1841 ad_w(i-1,j,1)=ad_w(i-1,j,1)+adfac3
1842 ad_w(i ,j,1)=ad_w(i ,j,1)+adfac3
1843 ad_w(i+1,j,1)=ad_w(i+1,j,1)-adfac4
1844 ad_u(i,j,1,nrhs)=ad_u(i,j,1,nrhs)+adfac1-adfac2
1845 ad_u(i,j,2,nrhs)=ad_u(i,j,2,nrhs)+adfac1
1846 ad_u(i,j,3,nrhs)=ad_u(i,j,3,nrhs)-adfac2
1847# ifdef WEC_MELLOR
1848 ad_u_stokes(i,j,1)=ad_u_stokes(i,j,1)+adfac1-adfac2
1849 ad_u_stokes(i,j,2)=ad_u_stokes(i,j,2)+adfac1
1850 ad_u_stokes(i,j,3)=ad_u_stokes(i,j,3)-adfac2
1851# endif
1852 ad_fc(i,1)=0.0_r8
1853
1854# ifdef WEC_MELLOR
1855
1856
1857# endif
1858
1859
1860# ifdef WEC_MELLOR
1861
1862
1863# endif
1864
1865
1866
1867
1868
1869
1870# ifdef WEC_MELLOR
1871
1872
1873# endif
1874
1875
1876# ifdef WEC_MELLOR
1877
1878
1879# endif
1880
1881
1882
1883
1884
1885
1886 adfac=(cff1*(w(i ,j,
n(ng)-1)+ &
1887 & w(i-1,j,
n(ng)-1))- &
1888 & cff2*(w(i+1,j,
n(ng)-1)+ &
1889 & w(i-2,j,
n(ng)-1)))*ad_fc(i,
n(ng)-1)
1890 adfac1=adfac*cff1
1891 adfac2=adfac*cff2
1892 adfac=(cff1*(u(i,j,
n(ng)-1,nrhs)+ &
1893# ifdef WEC_MELLOR
1894 & u_stokes(i,j,
n(ng)-1)+ &
1895 & u_stokes(i,j,
n(ng) )+ &
1896# endif
1897 & u(i,j,
n(ng) ,nrhs))- &
1898 & cff2*(u(i,j,
n(ng)-2,nrhs)+ &
1899# ifdef WEC_MELLOR
1900 & u_stokes(i,j,
n(ng)-2)+ &
1901 & u_stokes(i,j,
n(ng) )+ &
1902# endif
1903 & u(i,j,
n(ng) ,nrhs)))*ad_fc(i,
n(ng)-1)
1904 adfac3=adfac*cff1
1905 adfac4=adfac*cff2
1906 ad_w(i-2,j,
n(ng)-1)=ad_w(i-2,j,
n(ng)-1)-adfac4
1907 ad_w(i-1,j,
n(ng)-1)=ad_w(i-1,j,
n(ng)-1)+adfac3
1908 ad_w(i ,j,
n(ng)-1)=ad_w(i ,j,
n(ng)-1)+adfac3
1909 ad_w(i+1,j,
n(ng)-1)=ad_w(i+1,j,
n(ng)-1)-adfac4
1910 ad_u(i,j,
n(ng)-2,nrhs)=ad_u(i,j,
n(ng)-2,nrhs)-adfac2
1911 ad_u(i,j,
n(ng)-1,nrhs)=ad_u(i,j,
n(ng)-1,nrhs)+adfac1
1912 ad_u(i,j,
n(ng) ,nrhs)=ad_u(i,j,
n(ng) ,nrhs)+adfac1-adfac2
1913# ifdef WEC_MELLOR
1914 ad_u_stokes(i,j,
n(ng)-2)=ad_u_stokes(i,j,
n(ng)-2)-adfac2
1915 ad_u_stokes(i,j,
n(ng)-1)=ad_u_stokes(i,j,
n(ng)-1)+adfac1
1916 ad_u_stokes(i,j,
n(ng) )=ad_u_stokes(i,j,
n(ng) )+adfac1- &
1917 & adfac2
1918# endif
1919 ad_fc(i,
n(ng)-1)=0.0_r8
1920
1921
1922 ad_fc(i,
n(ng))=0.0_r8
1923 END DO
1925 DO i=istru,iend
1926
1927# ifdef WEC_MELLOR
1928
1929
1930# endif
1931
1932
1933# ifdef WEC_MELLOR
1934
1935
1936# endif
1937
1938
1939
1940
1941
1942
1943# ifdef WEC_MELLOR
1944
1945
1946# endif
1947
1948
1949# ifdef WEC_MELLOR
1950
1951
1952# endif
1953
1954
1955
1956
1957
1958
1959 adfac=(cff1*(w(i ,j,k)+ &
1960 & w(i-1,j,k))- &
1961 & cff2*(w(i+1,j,k)+ &
1962 & w(i-2,j,k)))*ad_fc(i,k)
1963 adfac1=adfac*cff1
1964 adfac2=adfac*cff2
1965 adfac=(cff1*(u(i,j,k ,nrhs)+ &
1966# ifdef WEC_MELLOR
1967 & u_stokes(i,j,k )+ &
1968 & u_stokes(i,j,k+1)+ &
1969# endif
1970 & u(i,j,k+1,nrhs))- &
1971 & cff2*(u(i,j,k-1,nrhs)+ &
1972# ifdef WEC_MELLOR
1973 & u_stokes(i,j,k-1)+ &
1974 & u_stokes(i,j,k+2)+ &
1975# endif
1976 & u(i,j,k+2,nrhs)))*ad_fc(i,k)
1977 adfac3=adfac*cff1
1978 adfac4=adfac*cff2
1979 ad_w(i-2,j,k)=ad_w(i-2,j,k)-adfac4
1980 ad_w(i-1,j,k)=ad_w(i-1,j,k)+adfac3
1981 ad_w(i ,j,k)=ad_w(i ,j,k)+adfac3
1982 ad_w(i+1,j,k)=ad_w(i+1,j,k)-adfac4
1983 ad_u(i,j,k-1,nrhs)=ad_u(i,j,k-1,nrhs)-adfac2
1984 ad_u(i,j,k ,nrhs)=ad_u(i,j,k ,nrhs)+adfac1
1985 ad_u(i,j,k+1,nrhs)=ad_u(i,j,k+1,nrhs)+adfac1
1986 ad_u(i,j,k+2,nrhs)=ad_u(i,j,k+2,nrhs)-adfac2
1987# ifdef WEC_MELLOR
1988 ad_u_stokes(i,j,k-1)=ad_u_stokes(i,j,k-1)-adfac2
1989 ad_u_stokes(i,j,k )=ad_u_stokes(i,j,k )+adfac1
1990 ad_u_stokes(i,j,k+1)=ad_u_stokes(i,j,k+1)+adfac1
1991 ad_u_stokes(i,j,k+2)=ad_u_stokes(i,j,k+2)-adfac2
1992# endif
1993 ad_fc(i,k)=0.0_r8
1994 END DO
1995 END DO
1996# endif
1997# endif
1998 END DO j_loop
1999
2000 k_loop :
DO k=1,
n(ng)
2001
2002# ifdef WEC_MELLOR
2003
2004
2005
2006
2007
2008 DO j=jstrv,jend
2009 DO i=istr,iend
2010
2011
2012
2013
2014 ad_rvstr3d(i,j,k)=ad_rvstr3d(i,j,k)- &
2015 & om_v(i,j)*on_v(i,j)*ad_rv(i,j,k,nrhs)
2016 ad_rvlag3d(i,j,k)=ad_rvlag3d(i,j,k)-ad_rv(i,j,k,nrhs)
2017 END DO
2018 END DO
2019 DO j=jstr,jend
2020 DO i=istru,iend
2021
2022
2023
2024
2025 ad_rustr3d(i,j,k)=ad_rustr3d(i,j,k)- &
2026 & om_u(i,j)*on_u(i,j)*ad_ru(i,j,k,nrhs)
2027 ad_rulag3d(i,j,k)=ad_rulag3d(i,j,k)-ad_ru(i,j,k,nrhs)
2028 END DO
2029 END DO
2030# endif
2031
2032# ifdef UV_ADV
2033
2034
2035
2036
2037
2038
2039
2040 DO j=jstrv,jend
2041 DO i=istr,iend
2042# ifdef DIAGNOSTICS_UV
2043# ifdef CURVGRID
2044
2045
2046
2047# else
2048
2049
2050
2051# endif
2052# endif
2053
2054
2055 ad_cff=ad_cff-ad_rv(i,j,k,nrhs)
2056
2057
2058 ad_cff1=ad_cff1+ad_cff
2059 ad_cff2=ad_cff2+ad_cff
2060 ad_cff=0.0_r8
2061
2062
2063 ad_vfe(i,j-1)=ad_vfe(i,j-1)-ad_cff2
2064 ad_vfe(i,j )=ad_vfe(i,j )+ad_cff2
2065 ad_cff2=0.0_r8
2066
2067
2068 ad_vfx(i ,j)=ad_vfx(i ,j)-ad_cff1
2069 ad_vfx(i+1,j)=ad_vfx(i+1,j)+ad_cff1
2070 ad_cff1=0.0_r8
2071 END DO
2072 END DO
2073 DO j=jstr,jend
2074 DO i=istru,iend
2075# ifdef DIAGNOSTICS_UV
2076# ifdef CURVGRID
2077
2078
2079
2080# else
2081
2082
2083
2084# endif
2085# endif
2086
2087
2088 ad_cff=ad_cff-ad_ru(i,j,k,nrhs)
2089
2090
2091 ad_cff1=ad_cff1+ad_cff
2092 ad_cff2=ad_cff2+ad_cff
2093 ad_cff=0.0_r8
2094
2095
2096 ad_ufe(i,j )=ad_ufe(i,j )-ad_cff2
2097 ad_ufe(i,j+1)=ad_ufe(i,j+1)+ad_cff2
2098 ad_cff2=0.0_r8
2099
2100
2101 ad_ufx(i-1,j)=ad_ufx(i-1,j)-ad_cff1
2102 ad_ufx(i ,j)=ad_ufx(i ,j)+ad_cff1
2103 ad_cff1=0.0_r8
2104 END DO
2105 END DO
2106# ifdef UV_C2ADVECTION
2107
2108
2109
2110 DO j=jstrv-1,jend
2111 DO i=istr,iend
2112
2113
2114# ifdef WEC_MELLOR
2115
2116
2117# endif
2118
2119
2120
2121
2122# ifdef WEC_MELLOR
2123
2124
2125# endif
2126
2127
2128
2129
2130 adfac=0.25_r8*ad_vfe(i,j)
2131 adfac1=adfac*(v(i,j ,k,nrhs)+ &
2132# ifdef WEC_MELLOR
2133 & v_stokes(i,j ,k)+ &
2134 & v_stokes(i,j+1,k)+ &
2135# endif
2136 & v(i,j+1,k,nrhs))
2137 adfac2=adfac*(hvom(i,j ,k)+ &
2138 & hvom(i,j+1,k))
2139 ad_hvom(i,j ,k)=ad_hvom(i,j ,k)+adfac1
2140 ad_hvom(i,j+1,k)=ad_hvom(i,j+1,k)+adfac1
2141 ad_v(i,j ,k,nrhs)=ad_v(i,j ,k,nrhs)+adfac2
2142 ad_v(i,j+1,k,nrhs)=ad_v(i,j+1,k,nrhs)+adfac2
2143# ifdef WEC_MELLOR
2144 ad_v_stokes(i,j ,k)=ad_v_stokes(i,j ,k)+adfac2
2145 ad_v_stokes(i,j+1,k)=ad_v_stokes(i,j+1,k)+adfac2
2146# endif
2147 ad_vfe(i,j)=0.0_r8
2148 END DO
2149 END DO
2150 DO j=jstrv,jend
2151 DO i=istr,iend+1
2152
2153
2154# ifdef WEC_MELLOR
2155
2156
2157# endif
2158
2159
2160
2161
2162# ifdef WEC_MELLOR
2163
2164
2165# endif
2166
2167
2168
2169
2170 adfac=0.25_r8*ad_vfx(i,j)
2171 adfac1=adfac*(v(i-1,j,k,nrhs)+ &
2172# ifdef WEC_MELLOR
2173 & v_stokes(i-1,j,k)+ &
2174 & v_stokes(i ,j,k)+ &
2175# endif
2176 & v(i ,j,k,nrhs))
2177 adfac2=adfac*(huon(i,j-1,k)+ &
2178 & huon(i,j ,k))
2179 ad_huon(i,j-1,k)=ad_huon(i,j-1,k)+adfac1
2180 ad_huon(i,j ,k)=ad_huon(i,j ,k)+adfac1
2181 ad_v(i-1,j,k,nrhs)=ad_v(i-1,j,k,nrhs)+adfac2
2182 ad_v(i ,j,k,nrhs)=ad_v(i ,j,k,nrhs)+adfac2
2183# ifdef WEC_MELLOR
2184 ad_v_stokes(i-1,j,k)=ad_v_stokes(i-1,j,k)+adfac2
2185 ad_v_stokes(i ,j,k)=ad_v_stokes(i ,j,k)+adfac2
2186# endif
2187 ad_vfx(i,j)=0.0_r8
2188 END DO
2189 END DO
2190 DO j=jstr,jend+1
2191 DO i=istru,iend
2192
2193
2194# ifdef WEC_MELLOR
2195
2196
2197# endif
2198
2199
2200
2201
2202# ifdef WEC_MELLOR
2203
2204
2205# endif
2206
2207
2208
2209
2210 adfac=0.25_r8*ad_ufe(i,j)
2211 adfac1=adfac*(u(i,j-1,k,nrhs)+ &
2212# ifdef WEC_MELLOR
2213 & u_stokes(i,j-1,k)+ &
2214 & u_stokes(i,j ,k)+ &
2215# endif
2216 & u(i,j ,k,nrhs))
2217 adfac2=adfac*(hvom(i-1,j,k)+ &
2218 & hvom(i ,j,k))
2219 ad_hvom(i-1,j,k)=ad_hvom(i-1,j,k)+adfac1
2220 ad_hvom(i ,j,k)=ad_hvom(i ,j,k)+adfac1
2221 ad_u(i,j-1,k,nrhs)=ad_u(i,j-1,k,nrhs)+adfac2
2222 ad_u(i,j ,k,nrhs)=ad_u(i,j ,k,nrhs)+adfac2
2223# ifdef WEC_MELLOR
2224 ad_u_stokes(i,j-1,k)=ad_u_stokes(i,j-1,k)+adfac2
2225 ad_u_stokes(i,j ,k)=ad_u_stokes(i,j ,k)+adfac2
2226# endif
2227 ad_ufe(i,j)=0.0_r8
2228 END DO
2229 END DO
2230 DO j=jstr,jend
2231 DO i=istru-1,iend
2232
2233
2234# ifdef WEC_MELLOR
2235
2236
2237# endif
2238
2239
2240
2241
2242# ifdef WEC_MELLOR
2243
2244
2245# endif
2246
2247
2248
2249
2250 adfac=0.25_r8*ad_ufx(i,j)
2251 adfac1=adfac*(u(i ,j,k,nrhs)+ &
2252# ifdef WEC_MELLOR
2253 & u_stokes(i ,j,k)+ &
2254 & u_stokes(i+1,j,k)+ &
2255# endif
2256 & u(i+1,j,k,nrhs))
2257 adfac2=adfac*(huon(i ,j,k)+ &
2258 & huon(i+1,j,k))
2259 ad_huon(i ,j,k)=ad_huon(i ,j,k)+adfac1
2260 ad_huon(i+1,j,k)=ad_huon(i+1,j,k)+adfac1
2261 ad_u(i ,j,k,nrhs)=ad_u(i ,j,k,nrhs)+adfac2
2262 ad_u(i+1,j,k,nrhs)=ad_u(i+1,j,k,nrhs)+adfac2
2263# ifdef WEC_MELLOR
2264 ad_u_stokes(i ,j,k)=ad_u_stokes(i ,j,k)+adfac2
2265 ad_u_stokes(i+1,j,k)=ad_u_stokes(i+1,j,k)+adfac2
2266# endif
2267 ad_ufx(i,j)=0.0_r8
2268 END DO
2269 END DO
2270# else
2271
2272# ifdef UV_C4ADVECTION
2273
2274# else
2275
2276
2277# endif
2278
2279 DO j=jstrvm1,jendp1
2280 DO i=istr,iend
2281 vee(i,j)=v(i,j-1,k,nrhs)-2.0_r8*v(i,j,k,nrhs)+ &
2282# ifdef WEC_MELLOR
2283 & v_stokes(i,j-1,k)-2.0_r8*v_stokes(i,j,k)+ &
2284 & v_stokes(i,j+1,k)+ &
2285# endif
2286 & v(i,j+1,k,nrhs)
2287 hvee(i,j)=hvom(i,j-1,k)-2.0_r8*hvom(i,j,k)+hvom(i,j+1,k)
2288 END DO
2289 END DO
2291 IF (
domain(ng)%Southern_Edge(tile))
THEN
2292 DO i=istr,iend
2293 vee(i,jstr)=vee(i,jstr+1)
2294 hvee(i,jstr)=hvee(i,jstr+1)
2295 END DO
2296 END IF
2297 END IF
2299 IF (
domain(ng)%Northern_Edge(tile))
THEN
2300 DO i=istr,iend
2301 vee(i,jend+1)=vee(i,jend)
2302 hvee(i,jend+1)=hvee(i,jend)
2303 END DO
2304 END IF
2305 END IF
2306# ifdef UV_C4ADVECTION
2307 cff=1.0_r8/6.0_r8
2308 DO j=jstrv-1,jend
2309 DO i=istr,iend
2310
2311# ifdef WEC_MELLOR
2312
2313
2314# endif
2315
2316
2317
2318
2319
2320
2321
2322
2323# ifdef WEC_MELLOR
2324
2325
2326# endif
2327
2328
2329
2330
2331
2332
2333
2334
2335 adfac=0.25_r8*ad_vfe(i,j)
2336 adfac1=adfac*(v(i,j ,k,nrhs)+ &
2337# ifdef WEC_MELLOR
2338 & v_stokes(i,j ,k)+ &
2339 & v_stokes(i,j+1,k)+ &
2340# endif
2341 & v(i,j+1,k,nrhs)- &
2342 & cff*(vee(i,j )+ &
2343 & vee(i,j+1)))
2344 adfac2=adfac1*cff
2345 adfac3=adfac*(hvom(i,j ,k)+ &
2346 & hvom(i,j+1,k)- &
2347 & cff*(hvee(i,j )+ &
2348 & hvee(i,j+1)))
2349 adfac4=adfac3*cff
2350 ad_hvom(i,j ,k)=ad_hvom(i,j ,k)+adfac1
2351 ad_hvom(i,j+1,k)=ad_hvom(i,j+1,k)+adfac1
2352 ad_hvee(i,j )=ad_hvee(i,j )-adfac2
2353 ad_hvee(i,j+1)=ad_hvee(i,j+1)-adfac2
2354 ad_v(i,j ,k,nrhs)=ad_v(i,j ,k,nrhs)+adfac3
2355 ad_v(i,j+1,k,nrhs)=ad_v(i,j+1,k,nrhs)+adfac3
2356# ifdef WEC_MELLOR
2357 ad_v_stokes(i,j ,k)=ad_v_stokes(i,j ,k)+adfac3
2358 ad_v_stokes(i,j+1,k)=ad_v_stokes(i,j+1,k)+adfac3
2359# endif
2360 ad_vee(i,j )=ad_vee(i,j )-adfac4
2361 ad_vee(i,j+1)=ad_vee(i,j+1)-adfac4
2362 ad_vfe(i,j)=0.0_r8
2363 END DO
2364 END DO
2365# else
2366 DO j=jstrv-1,jend
2367 DO i=istr,iend
2368 cff1=v(i,j ,k,nrhs)+ &
2369# ifdef WEC_MELLOR
2370 & v_stokes(i,j ,k)+ &
2371 & v_stokes(i,j+1,k)+ &
2372# endif
2373 & v(i,j+1,k,nrhs)
2374 IF (cff1.gt.0.0_r8) THEN
2375 cff=vee(i,j)
2376 ELSE
2377 cff=vee(i,j+1)
2378 END IF
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391 adfac=0.25_r8*ad_vfe(i,j)
2392 adfac1=adfac*(cff1+gadv*cff)
2393 adfac2=adfac1*gadv*0.5_r8
2394 adfac3=adfac*(hvom(i,j ,k)+ &
2395 & hvom(i,j+1,k)+ &
2396 & gadv*0.5_r8*(hvee(i,j )+ &
2397 & hvee(i,j+1)))
2398 ad_hvom(i,j ,k)=ad_hvom(i,j ,k)+adfac1
2399 ad_hvom(i,j+1,k)=ad_hvom(i,j+1,k)+adfac1
2400 ad_hvee(i,j )=ad_hvee(i,j )+adfac2
2401 ad_hvee(i,j+1)=ad_hvee(i,j+1)+adfac2
2402 ad_cff=ad_cff+gadv*adfac3
2403 ad_cff1=ad_cff1+adfac3
2404 ad_vfe(i,j)=0.0_r8
2405 IF (cff1.gt.0.0_r8) THEN
2406
2407
2408 ad_vee(i,j)=ad_vee(i,j)+ad_cff
2409 ad_cff=0.0_r8
2410 ELSE
2411
2412
2413 ad_vee(i,j+1)=ad_vee(i,j+1)+ad_cff
2414 ad_cff=0.0_r8
2415 END IF
2416
2417# ifdef WEC_MELLOR
2418
2419
2420# endif
2421
2422
2423 ad_v(i,j ,k,nrhs)=ad_v(i,j ,k,nrhs)+ad_cff1
2424 ad_v(i,j+1,k,nrhs)=ad_v(i,j+1,k,nrhs)+ad_cff1
2425# ifdef WEC_MELLOR
2426 ad_v_stokes(i,j ,k)=ad_v_stokes(i,j ,k)+ad_cff1
2427 ad_v_stokes(i,j+1,k)=ad_v_stokes(i,j+1,k)+ad_cff1
2428# endif
2429 ad_cff1=0.0_r8
2430 END DO
2431 END DO
2432# endif
2434 IF (
domain(ng)%Northern_Edge(tile))
THEN
2435 DO i=istr,iend
2436
2437
2438 ad_hvee(i,jend)=ad_hvee(i,jend)+ad_hvee(i,jend+1)
2439 ad_hvee(i,jend+1)=0.0_r8
2440
2441
2442 ad_vee(i,jend)=ad_vee(i,jend)+ad_vee(i,jend+1)
2443 ad_vee(i,jend+1)=0.0_r8
2444 END DO
2445 END IF
2446 END IF
2448 IF (
domain(ng)%Southern_Edge(tile))
THEN
2449 DO i=istr,iend
2450
2451
2452 ad_hvee(i,jstr+1)=ad_hvee(i,jstr+1)+ad_hvee(i,jstr)
2453 ad_hvee(i,jstr)=0.0_r8
2454
2455
2456 ad_vee(i,jstr+1)=ad_vee(i,jstr+1)+ad_vee(i,jstr)
2457 ad_vee(i,jstr)=0.0_r8
2458 END DO
2459 END IF
2460 END IF
2461 DO j=jstrvm1,jendp1
2462 DO i=istr,iend
2463
2464
2465
2466 ad_hvom(i,j-1,k)=ad_hvom(i,j-1,k)+ad_hvee(i,j)
2467 ad_hvom(i,j ,k)=ad_hvom(i,j ,k)-2.0_r8*ad_hvee(i,j)
2468 ad_hvom(i,j+1,k)=ad_hvom(i,j+1,k)+ad_hvee(i,j)
2469 ad_hvee(i,j)=0.0_r8
2470
2471# ifdef WEC_MELLOR
2472
2473
2474# endif
2475
2476
2477 ad_v(i,j-1,k,nrhs)=ad_v(i,j-1,k,nrhs)+ad_vee(i,j)
2478 ad_v(i,j ,k,nrhs)=ad_v(i,j ,k,nrhs)-2.0_r8*ad_vee(i,j)
2479 ad_v(i,j+1,k,nrhs)=ad_v(i,j+1,k,nrhs)+ad_vee(i,j)
2480# ifdef WEC_MELLOR
2481 ad_v_stokes(i,j-1,k)=ad_v_stokes(i,j-1,k)+ad_vee(i,j)
2482 ad_v_stokes(i,j ,k)=ad_v_stokes(i,j ,k)-2.0_r8*ad_vee(i,j)
2483 ad_v_stokes(i,j+1,k)=ad_v_stokes(i,j+1,k)+ad_vee(i,j)
2484# endif
2485 ad_vee(i,j)=0.0_r8
2486 END DO
2487 END DO
2488 DO j=jstrv,jend
2489 DO i=istrm1,iendp1
2490 vxx(i,j)=v(i-1,j,k,nrhs)-2.0_r8*v(i,j,k,nrhs)+ &
2491# ifdef WEC_MELLOR
2492 & v_stokes(i-1,j,k)-2.0_r8*v_stokes(i,j,k)+ &
2493 & v_stokes(i+1,j,k)+ &
2494# endif
2495 & v(i+1,j,k,nrhs)
2496 END DO
2497 END DO
2499 IF (
domain(ng)%Western_Edge(tile))
THEN
2500 DO j=jstrv,jend
2501 vxx(istr-1,j)=vxx(istr,j)
2502 END DO
2503 END IF
2504 END IF
2506 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2507 DO j=jstrv,jend
2508 vxx(iend+1,j)=vxx(iend,j)
2509 END DO
2510 END IF
2511 END IF
2512 DO j=jstrv-1,jend
2513 DO i=istr,iend+1
2514 huee(i,j)=huon(i,j-1,k)-2.0_r8*huon(i,j,k)+huon(i,j+1,k)
2515 END DO
2516 END DO
2517# ifdef UV_C4ADVECTION
2518 cff=1.0_r8/6.0_r8
2519 DO j=jstrv,jend
2520 DO i=istr,iend+1
2521
2522# ifdef WEC_MELLOR
2523
2524
2525# endif
2526
2527
2528
2529
2530
2531
2532
2533
2534# ifdef WEC_MELLOR
2535
2536
2537# endif
2538
2539
2540
2541
2542
2543
2544
2545
2546 adfac=0.25_r8*ad_vfx(i,j)
2547 adfac1=adfac*(v(i ,j,k,nrhs)+ &
2548# ifdef WEC_MELLOR
2549 & v_stokes(i ,j,k)+ &
2550 & v_stokes(i-1,j,k)+ &
2551# endif
2552 & v(i-1,j,k,nrhs)- &
2553 & cff*(vxx(i ,j)+ &
2554 & vxx(i-1,j)))
2555 adfac2=adfac1*cff
2556 adfac3=adfac*(huon(i,j ,k)+ &
2557 & huon(i,j-1,k)- &
2558 & cff*(huee(i,j )+ &
2559 & huee(i,j-1)))
2560 adfac4=adfac3*cff
2561 ad_huon(i,j-1,k)=ad_huon(i,j-1,k)+adfac1
2562 ad_huon(i,j ,k)=ad_huon(i,j ,k)+adfac1
2563 ad_huee(i,j )=ad_huee(i,j )-adfac2
2564 ad_huee(i,j-1)=ad_huee(i,j-1)-adfac2
2565 ad_v(i-1,j,k,nrhs)=ad_v(i-1,j,k,nrhs)+adfac3
2566 ad_v(i ,j,k,nrhs)=ad_v(i ,j,k,nrhs)+adfac3
2567# ifdef WEC_MELLOR
2568 ad_v_stokes(i-1,j,k)=ad_v_stokes(i-1,j,k)+adfac3
2569 ad_v_stokes(i ,j,k)=ad_v_stokes(i ,j,k)+adfac3
2570# endif
2571 ad_vxx(i-1,j)=ad_vxx(i-1,j)-adfac4
2572 ad_vxx(i ,j)=ad_vxx(i ,j)-adfac4
2573 ad_vfx(i,j)=0.0_r8
2574 END DO
2575 END DO
2576# else
2577 DO j=jstrv,jend
2578 DO i=istr,iend+1
2579 cff1=v(i ,j,k,nrhs)+ &
2580# ifdef WEC_MELLOR
2581 & v_stokes(i ,j,k)+ &
2582 & v_stokes(i-1,j,k)+ &
2583# endif
2584 & v(i-1,j,k,nrhs)
2585 cff2=huon(i,j,k)+huon(i,j-1,k)
2586 IF (cff2.gt.0.0_r8) THEN
2587 cff=vxx(i-1,j)
2588 ELSE
2589 cff=vxx(i,j)
2590 END IF
2591
2592
2593
2594
2595
2596
2597
2598
2599 adfac=0.25_r8*ad_vfx(i,j)
2600 adfac1=adfac*(cff1+gadv*cff)
2601 adfac2=adfac1*gadv*0.5_r8
2602 adfac3=adfac*(cff2+gadv*0.5_r8*(huee(i,j )+ &
2603 & huee(i,j-1)))
2604 ad_huee(i,j-1)=ad_huee(i,j-1)+adfac2
2605 ad_huee(i,j )=ad_huee(i,j )+adfac2
2606 ad_cff2=ad_cff2+adfac1
2607 ad_cff1=ad_cff1+adfac3
2608 ad_cff=ad_cff+gadv*adfac3
2609 ad_vfx(i,j)=0.0_r8
2610 IF (cff2.gt.0.0_r8) THEN
2611
2612
2613 ad_vxx(i-1,j)=ad_vxx(i-1,j)+ad_cff
2614 ad_cff=0.0_r8
2615 ELSE
2616
2617
2618 ad_vxx(i,j)=ad_vxx(i,j)+ad_cff
2619 ad_cff=0.0_r8
2620 END IF
2621
2622
2623 ad_huon(i,j-1,k)=ad_huon(i,j-1,k)+ad_cff2
2624 ad_huon(i,j ,k)=ad_huon(i,j ,k)+ad_cff2
2625 ad_cff2=0.0_r8
2626
2627# ifdef WEC_MELLOR
2628
2629
2630# endif
2631
2632
2633 ad_v(i-1,j,k,nrhs)=ad_v(i-1,j,k,nrhs)+ad_cff1
2634 ad_v(i ,j,k,nrhs)=ad_v(i ,j,k,nrhs)+ad_cff1
2635# ifdef WEC_MELLOR
2636 ad_v_stokes(i-1,j,k)=ad_v_stokes(i-1,j,k)+ad_cff1
2637 ad_v_stokes(i ,j,k)=ad_v_stokes(i ,j,k)+ad_cff1
2638# endif
2639 ad_cff1=0.0_r8
2640 END DO
2641 END DO
2642# endif
2643 DO j=jstrv-1,jend
2644 DO i=istr,iend+1
2645
2646
2647
2648 ad_huon(i,j-1,k)=ad_huon(i,j-1,k)+ad_huee(i,j)
2649 ad_huon(i,j ,k)=ad_huon(i,j ,k)-2.0_r8*ad_huee(i,j)
2650 ad_huon(i,j+1,k)=ad_huon(i,j+1,k)+ad_huee(i,j)
2651 ad_huee(i,j)=0.0_r8
2652 END DO
2653 END DO
2655 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2656 DO j=jstrv,jend
2657
2658
2659 ad_vxx(iend,j)=ad_vxx(iend,j)+ad_vxx(iend+1,j)
2660 ad_vxx(iend+1,j)=0.0_r8
2661 END DO
2662 END IF
2663 END IF
2665 IF (
domain(ng)%Western_Edge(tile))
THEN
2666 DO j=jstrv,jend
2667
2668
2669 ad_vxx(istr,j)=ad_vxx(istr,j)+ad_vxx(istr-1,j)
2670 ad_vxx(istr-1,j)=0.0_r8
2671 END DO
2672 END IF
2673 END IF
2674 DO j=jstrv,jend
2675 DO i=istrm1,iendp1
2676
2677# ifdef WEC_MELLOR
2678
2679
2680# endif
2681
2682
2683 ad_v(i-1,j,k,nrhs)=ad_v(i-1,j,k,nrhs)+ad_vxx(i,j)
2684 ad_v(i ,j,k,nrhs)=ad_v(i ,j,k,nrhs)-2.0_r8*ad_vxx(i,j)
2685 ad_v(i+1,j,k,nrhs)=ad_v(i+1,j,k,nrhs)+ad_vxx(i,j)
2686# ifdef WEC_MELLOR
2687 ad_v_stokes(i-1,j,k)=ad_v_stokes(i-1,j,k)+ad_vxx(i,j)
2688 ad_v_stokes(i ,j,k)=ad_v_stokes(i ,j,k)-2.0_r8*ad_vxx(i,j)
2689 ad_v_stokes(i+1,j,k)=ad_v_stokes(i+1,j,k)+ad_vxx(i,j)
2690# endif
2691 ad_vxx(i,j)=0.0_r8
2692 END DO
2693 END DO
2694 DO j=jstrm1,jendp1
2695 DO i=istru,iend
2696 uee(i,j)=u(i,j-1,k,nrhs)-2.0_r8*u(i,j,k,nrhs)+ &
2697# ifdef WEC_MELLOR
2698 & u_stokes(i,j-1,k)-2.0_r8*u_stokes(i,j,k)+ &
2699 & u_stokes(i,j+1,k)+ &
2700# endif
2701 & u(i,j+1,k,nrhs)
2702 END DO
2703 END DO
2705 IF (
domain(ng)%Southern_Edge(tile))
THEN
2706 DO i=istru,iend
2707 uee(i,jstr-1)=uee(i,jstr)
2708 END DO
2709 END IF
2710 END IF
2712 IF (
domain(ng)%Northern_Edge(tile))
THEN
2713 DO i=istru,iend
2714 uee(i,jend+1)=uee(i,jend)
2715 END DO
2716 END IF
2717 END IF
2718 DO j=jstr,jend+1
2719 DO i=istru-1,iend
2720 hvxx(i,j)=hvom(i-1,j,k)-2.0_r8*hvom(i,j,k)+hvom(i+1,j,k)
2721 END DO
2722 END DO
2723# ifdef UV_C4ADVECTION
2724
2725
2726
2727 cff=1.0_r8/6.0_r8
2728 DO j=jstr,jend+1
2729 DO i=istru,iend
2730
2731# ifdef WEC_MELLOR
2732
2733
2734# endif
2735
2736
2737
2738
2739
2740
2741
2742
2743# ifdef WEC_MELLOR
2744
2745
2746# endif
2747
2748
2749
2750
2751
2752
2753
2754
2755 adfac=0.25_r8*ad_ufe(i,j)
2756 adfac1=adfac*(u(i,j ,k,nrhs)+ &
2757# ifdef WEC_MELLOR
2758 & u_stokes(i,j ,k)+ &
2759 & u_stokes(i,j-1,k)+ &
2760# endif
2761 & u(i,j-1,k,nrhs)- &
2762 & cff*(uee(i,j )+ &
2763 & uee(i,j-1)))
2764 adfac2=adfac1*cff
2765 adfac3=adfac*(hvom(i ,j,k)+ &
2766 & hvom(i-1,j,k)- &
2767 & cff*(hvxx(i ,j)+ &
2768 & hvxx(i-1,j)))
2769 adfac4=adfac3*cff
2770 ad_hvom(i-1,j,k)=ad_hvom(i-1,j,k)+adfac1
2771 ad_hvom(i ,j,k)=ad_hvom(i ,j,k)+adfac1
2772 ad_hvxx(i-1,j)=ad_hvxx(i-1,j)-adfac2
2773 ad_hvxx(i ,j)=ad_hvxx(i ,j)-adfac2
2774 ad_u(i,j-1,k,nrhs)=ad_u(i,j-1,k,nrhs)+adfac3
2775 ad_u(i,j ,k,nrhs)=ad_u(i,j ,k,nrhs)+adfac3
2776# ifdef WEC_MELLOR
2777 ad_u_stokes(i,j-1,k)=ad_u_stokes(i,j-1,k)+adfac3
2778 ad_u_stokes(i,j ,k)=ad_u_stokes(i,j ,k)+adfac3
2779# endif
2780 ad_uee(i,j-1)=ad_uee(i,j-1)-adfac4
2781 ad_uee(i,j )=ad_uee(i,j )-adfac4
2782 ad_ufe(i,j)=0.0_r8
2783 END DO
2784 END DO
2785# else
2786
2787
2788
2789
2790 DO j=jstr,jend+1
2791 DO i=istru,iend
2792 cff1=u(i,j ,k,nrhs)+ &
2793# ifdef WEC_MELLOR
2794 & u_stokes(i,j ,k)+ &
2795 & u_stokes(i,j-1,k)+ &
2796# endif
2797 & u(i,j-1,k,nrhs)
2798 cff2=hvom(i,j,k)+hvom(i-1,j,k)
2799 IF (cff2.gt.0.0_r8) THEN
2800 cff=uee(i,j-1)
2801 ELSE
2802 cff=uee(i,j)
2803 END IF
2804
2805
2806
2807
2808
2809
2810
2811
2812 adfac=0.25_r8*ad_ufe(i,j)
2813 adfac1=adfac*(cff1+gadv*cff)
2814 adfac2=adfac1*gadv*0.5_r8
2815 adfac3=adfac*(cff2+gadv*0.5_r8*(hvxx(i ,j)+ &
2816 & hvxx(i-1,j)))
2817 ad_hvxx(i-1,j)=ad_hvxx(i-1,j)+adfac2
2818 ad_hvxx(i ,j)=ad_hvxx(i ,j)+adfac2
2819 ad_cff2=ad_cff2+adfac1
2820 ad_cff1=ad_cff1+adfac3
2821 ad_cff=ad_cff+gadv*adfac3
2822 ad_ufe(i,j)=0.0_r8
2823 IF (cff2.gt.0.0_r8) THEN
2824
2825
2826 ad_uee(i,j-1)=ad_uee(i,j-1)+ad_cff
2827 ad_cff=0.0_r8
2828 ELSE
2829
2830
2831 ad_uee(i,j)=ad_uee(i,j)+ad_cff
2832 ad_cff=0.0_r8
2833 END IF
2834
2835
2836 ad_hvom(i-1,j,k)=ad_hvom(i-1,j,k)+ad_cff2
2837 ad_hvom(i ,j,k)=ad_hvom(i ,j,k)+ad_cff2
2838 ad_cff2=0.0_r8
2839
2840# ifdef WEC_MELLOR
2841
2842
2843# endif
2844
2845
2846 ad_u(i,j-1,k,nrhs)=ad_u(i,j-1,k,nrhs)+ad_cff1
2847 ad_u(i,j ,k,nrhs)=ad_u(i,j ,k,nrhs)+ad_cff1
2848# ifdef WEC_MELLOR
2849 ad_u_stokes(i,j-1,k)=ad_u_stokes(i,j-1,k)+ad_cff1
2850 ad_u_stokes(i,j ,k)=ad_u_stokes(i,j ,k)+ad_cff1
2851# endif
2852 ad_cff1=0.0_r8
2853 END DO
2854 END DO
2855# endif
2856 DO j=jstr,jend+1
2857 DO i=istru-1,iend
2858
2859
2860
2861 ad_hvom(i-1,j,k)=ad_hvom(i-1,j,k)+ad_hvxx(i,j)
2862 ad_hvom(i ,j,k)=ad_hvom(i ,j,k)-2.0_r8*ad_hvxx(i,j)
2863 ad_hvom(i+1,j,k)=ad_hvom(i+1,j,k)+ad_hvxx(i,j)
2864 ad_hvxx(i,j)=0.0_r8
2865 END DO
2866 END DO
2868 IF (
domain(ng)%Northern_Edge(tile))
THEN
2869 DO i=istru,iend
2870
2871
2872 ad_uee(i,jend)=ad_uee(i,jend)+ad_uee(i,jend+1)
2873 ad_uee(i,jend+1)=0.0_r8
2874 END DO
2875 END IF
2876 END IF
2878 IF (
domain(ng)%Southern_Edge(tile))
THEN
2879 DO i=istru,iend
2880
2881
2882 ad_uee(i,jstr)=ad_uee(i,jstr)+ad_uee(i,jstr-1)
2883 ad_uee(i,jstr-1)=0.0_r8
2884 END DO
2885 END IF
2886 END IF
2887 DO j=jstrm1,jendp1
2888 DO i=istru,iend
2889
2890# ifdef WEC_MELLOR
2891
2892
2893# endif
2894
2895
2896 ad_u(i,j-1,k,nrhs)=ad_u(i,j-1,k,nrhs)+ad_uee(i,j)
2897 ad_u(i,j ,k,nrhs)=ad_u(i,j ,k,nrhs)-2.0_r8*ad_uee(i,j)
2898 ad_u(i,j+1,k,nrhs)=ad_u(i,j+1,k,nrhs)+ad_uee(i,j)
2899# ifdef WEC_MELLOR
2900 ad_u_stokes(i,j-1,k)=ad_u_stokes(i,j-1,k)+ad_uee(i,j)
2901 ad_u_stokes(i,j ,k)=ad_u_stokes(i,j ,k)-2.0_r8*ad_uee(i,j)
2902 ad_u_stokes(i,j+1,k)=ad_u_stokes(i,j+1,k)+ad_uee(i,j)
2903# endif
2904 ad_uee(i,j)=0.0_r8
2905 END DO
2906 END DO
2907 DO j=jstr,jend
2908 DO i=istrum1,iendp1
2909 uxx(i,j)=u(i-1,j,k,nrhs)-2.0_r8*u(i,j,k,nrhs)+ &
2910# ifdef WEC_MELLOR
2911 & u_stokes(i-1,j,k)-2.0_r8*u_stokes(i,j,k)+ &
2912 & u_stokes(i+1,j,k)+ &
2913# endif
2914 & u(i+1,j,k,nrhs)
2915 huxx(i,j)=huon(i-1,j,k)-2.0_r8*huon(i,j,k)+huon(i+1,j,k)
2916 END DO
2917 END DO
2919 IF (
domain(ng)%Western_Edge(tile))
THEN
2920 DO j=jstr,jend
2921 uxx(istr,j)=uxx(istr+1,j)
2922 huxx(istr,j)=huxx(istr+1,j)
2923 END DO
2924 END IF
2925 END IF
2927 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2928 DO j=jstr,jend
2929 uxx(iend+1,j)=uxx(iend,j)
2930 huxx(iend+1,j)=huxx(iend,j)
2931 END DO
2932 END IF
2933 END IF
2934# ifdef UV_C4ADVECTION
2935 cff=1.0_r8/6.0_r8
2936 DO j=jstr,jend
2937 DO i=istru-1,iend
2938
2939# ifdef WEC_MELLOR
2940
2941
2942# endif
2943
2944
2945
2946
2947
2948
2949
2950
2951# ifdef WEC_MELLOR
2952
2953
2954# endif
2955
2956
2957
2958
2959
2960
2961
2962
2963 adfac=0.25_r8*ad_ufx(i,j)
2964 adfac1=adfac*(u(i ,j,k,nrhs)+ &
2965# ifdef WEC_MELLOR
2966 & u_stokes(i ,j,k)+ &
2967 & u_stokes(i+1,j,k)+ &
2968# endif
2969 & u(i+1,j,k,nrhs)- &
2970 & cff*(uxx(i ,j)+ &
2971 & uxx(i+1,j)))
2972 adfac2=adfac1*cff
2973 adfac3=adfac*(huon(i ,j,k)+ &
2974 & huon(i+1,j,k)- &
2975 & cff*(huxx(i ,j)+ &
2976 & huxx(i+1,j)))
2977 adfac4=adfac3*cff
2978 ad_huon(i ,j,k)=ad_huon(i ,j,k)+adfac1
2979 ad_huon(i+1,j,k)=ad_huon(i+1,j,k)+adfac1
2980 ad_huxx(i ,j)=ad_huxx(i ,j)-adfac2
2981 ad_huxx(i+1,j)=ad_huxx(i+1,j)-adfac2
2982 ad_u(i ,j,k,nrhs)=ad_u(i ,j,k,nrhs)+adfac3
2983 ad_u(i+1,j,k,nrhs)=ad_u(i+1,j,k,nrhs)+adfac3
2984# ifdef WEC_MELLOR
2985 ad_u_stokes(i ,j,k)=ad_u_stokes(i ,j,k)+adfac3
2986 ad_u_stokes(i+1,j,k)=ad_u_stokes(i+1,j,k)+adfac3
2987# endif
2988 ad_uxx(i ,j)=ad_uxx(i ,j)-adfac4
2989 ad_uxx(i+1,j)=ad_uxx(i+1,j)-adfac4
2990 ad_ufx(i,j)=0.0_r8
2991 END DO
2992 END DO
2993# else
2994 DO j=jstr,jend
2995 DO i=istru-1,iend
2996 cff1=u(i ,j,k,nrhs)+ &
2997# ifdef WEC_MELLOR
2998 & u_stokes(i ,j,k)+ &
2999 & u_stokes(i+1,j,k)+ &
3000# endif
3001 & u(i+1,j,k,nrhs)
3002 IF (cff1.gt.0.0_r8) THEN
3003 cff=uxx(i,j)
3004 ELSE
3005 cff=uxx(i+1,j)
3006 END IF
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019 adfac=0.25_r8*ad_ufx(i,j)
3020 adfac1=adfac*(cff1+gadv*cff)
3021 adfac2=adfac1*gadv*0.5_r8
3022 adfac3=adfac*(huon(i ,j,k)+ &
3023 & huon(i+1,j,k)+ &
3024 & gadv*0.5_r8*(huxx(i ,j)+ &
3025 & huxx(i+1,j)))
3026 ad_huon(i ,j,k)=ad_huon(i ,j,k)+adfac1
3027 ad_huon(i+1,j,k)=ad_huon(i+1,j,k)+adfac1
3028 ad_huxx(i ,j)=ad_huxx(i ,j)+adfac2
3029 ad_huxx(i+1,j)=ad_huxx(i+1,j)+adfac2
3030 ad_cff1=ad_cff1+adfac3
3031 ad_cff=ad_cff+gadv*adfac3
3032 ad_ufx(i,j)=0.0_r8
3033 IF (cff1.gt.0.0_r8) THEN
3034
3035
3036 ad_uxx(i,j)=ad_uxx(i,j)+ad_cff
3037 ad_cff=0.0_r8
3038 ELSE
3039
3040
3041 ad_uxx(i+1,j)=ad_uxx(i+1,j)+ad_cff
3042 ad_cff=0.0_r8
3043 END IF
3044
3045# ifdef WEC_MELLOR
3046
3047
3048# endif
3049
3050
3051 ad_u(i ,j,k,nrhs)=ad_u(i ,j,k,nrhs)+ad_cff1
3052 ad_u(i+1,j,k,nrhs)=ad_u(i+1,j,k,nrhs)+ad_cff1
3053# ifdef WEC_MELLOR
3054 ad_u_stokes(i ,j,k)=ad_u_stokes(i ,j,k)+ad_cff1
3055 ad_u_stokes(i+1,j,k)=ad_u_stokes(i+1,j,k)+ad_cff1
3056# endif
3057 ad_cff1=0.0_r8
3058 END DO
3059 END DO
3060# endif
3062 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3063 DO j=jstr,jend
3064
3065
3066 ad_huxx(iend,j)=ad_huxx(iend,j)+ad_huxx(iend+1,j)
3067 ad_huxx(iend+1,j)=0.0_r8
3068
3069
3070 ad_uxx(iend,j)=ad_uxx(iend,j)+ad_uxx(iend+1,j)
3071 ad_uxx(iend+1,j)=0.0_r8
3072 END DO
3073 END IF
3074 END IF
3076 IF (
domain(ng)%Western_Edge(tile))
THEN
3077 DO j=jstr,jend
3078
3079
3080 ad_huxx(istr+1,j)=ad_huxx(istr+1,j)+ad_huxx(istr,j)
3081 ad_huxx(istr,j)=0.0_r8
3082
3083
3084 ad_uxx(istr+1,j)=ad_uxx(istr+1,j)+ad_uxx(istr,j)
3085 ad_uxx(istr ,j)=0.0_r8
3086 END DO
3087 END IF
3088 END IF
3089 DO j=jstr,jend
3090 DO i=istrum1,iendp1
3091
3092
3093
3094 ad_huon(i-1,j,k)=ad_huon(i-1,j,k)+ad_huxx(i,j)
3095 ad_huon(i ,j,k)=ad_huon(i ,j,k)-2.0_r8*ad_huxx(i,j)
3096 ad_huon(i+1,j,k)=ad_huon(i+1,j,k)+ad_huxx(i,j)
3097 ad_huxx(i,j)=0.0_r8
3098
3099# ifdef WEC_MELLOR
3100
3101
3102# endif
3103
3104
3105 ad_u(i-1,j,k,nrhs)=ad_u(i-1,j,k,nrhs)+ad_uxx(i,j)
3106 ad_u(i ,j,k,nrhs)=ad_u(i ,j,k,nrhs)-2.0_r8*ad_uxx(i,j)
3107 ad_u(i+1,j,k,nrhs)=ad_u(i+1,j,k,nrhs)+ad_uxx(i,j)
3108# ifdef WEC_MELLOR
3109 ad_u_stokes(i-1,j,k)=ad_u_stokes(i-1,j,k)+ad_uxx(i,j)
3110 ad_u_stokes(i ,j,k)=ad_u_stokes(i ,j,k)-2.0_r8*ad_uxx(i,j)
3111 ad_u_stokes(i+1,j,k)=ad_u_stokes(i+1,j,k)+ad_uxx(i,j)
3112# endif
3113 ad_uxx(i,j)=0.0_r8
3114 END DO
3115 END DO
3116# endif
3117# endif
3118
3119
3120
3121
3122
3124 DO j=jstrv,jend
3125 DO i=istr,iend
3126 cff=0.25_r8*(
clima(ng)%M3nudgcof(i,j-1,k)+ &
3127 &
clima(ng)%M3nudgcof(i,j ,k))* &
3128 & om_v(i,j)*on_v(i,j)
3129
3130
3131
3132
3133
3134
3135
3136 adfac=cff*ad_rv(i,j,k,nrhs)
3137 adfac1=adfac*(
clima(ng)%vclm(i,j,k)-v(i,j,k,nrhs))
3138 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
3139 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
3140 ad_v(i,j,k,nrhs)=ad_v(i,j,k,nrhs)- &
3141 & (hz(i,j-1,k)+hz(i,j,k))*adfac
3142 END DO
3143 END DO
3144 DO j=jstr,jend
3145 DO i=istru,iend
3146 cff=0.25_r8*(
clima(ng)%M3nudgcof(i-1,j,k)+ &
3147 &
clima(ng)%M3nudgcof(i ,j,k))* &
3148 & om_u(i,j)*on_u(i,j)
3149
3150
3151
3152
3153
3154
3155
3156 adfac=cff*ad_ru(i,j,k,nrhs)
3157 adfac1=adfac*(
clima(ng)%uclm(i,j,k)-u(i,j,k,nrhs))
3158 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
3159 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
3160 ad_u(i,j,k,nrhs)=ad_u(i,j,k,nrhs)- &
3161 & (hz(i-1,j,k)+hz(i,j,k))*adfac
3162 END DO
3163 END DO
3164 END IF
3165
3166# if defined CURVGRID && defined UV_ADV
3167
3168
3169
3170
3171
3172 DO j=jstrv,jend
3173 DO i=istr,iend
3174# ifdef DIAGNOSTICS_UV
3175
3176
3177
3178
3179# endif
3180
3181
3182 ad_cff1=ad_cff1-ad_rv(i,j,k,nrhs)
3183
3184
3185 adfac=0.5_r8*ad_cff1
3186 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac
3187 ad_vfe(i,j )=ad_vfe(i,j )+adfac
3188 ad_cff1=0.0_r8
3189 END DO
3190 END DO
3191 DO j=jstr,jend
3192 DO i=istru,iend
3193# ifdef DIAGNOSTICS_UV
3194
3195
3196
3197
3198# endif
3199
3200
3201 ad_cff1=ad_cff1+ad_ru(i,j,k,nrhs)
3202
3203
3204 adfac=0.5_r8*ad_cff1
3205 ad_ufx(i-1,j)=ad_ufx(i-1,j)+adfac
3206 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
3207 ad_cff1=0.0_r8
3208 END DO
3209 END DO
3210 DO j=jstrv-1,jend
3211 DO i=istru-1,iend
3212 cff1=0.5_r8*(v(i,j ,k,nrhs)+ &
3213# ifdef WEC_MELLOR
3214 & v_stokes(i,j ,k)+ &
3215 & v_stokes(i,j+1,k)+ &
3216# endif
3217 & v(i,j+1,k,nrhs))
3218 cff2=0.5_r8*(u(i ,j,k,nrhs)+ &
3219# ifdef WEC_MELLOR
3220 & u_stokes(i ,j,k)+ &
3221 & u_stokes(i+1,j,k)+ &
3222# endif
3223 & u(i+1,j,k,nrhs))
3224 cff3=cff1*dndx(i,j)
3225 cff4=cff2*dmde(i,j)
3226 cff=hz(i,j,k)*(cff3-cff4)
3227# if defined DIAGNOSTICS_UV
3228
3229
3230
3231# endif
3232
3233
3234
3235 ad_cff=ad_cff+ &
3236 & cff1*ad_ufx(i,j)+ &
3237 & cff2*ad_vfe(i,j)
3238 ad_cff1=ad_cff1+cff*ad_ufx(i,j)
3239 ad_cff2=ad_cff2+cff*ad_vfe(i,j)
3240 ad_ufx(i,j)=0.0_r8
3241 ad_vfe(i,j)=0.0_r8
3242
3243
3244
3245 adfac=hz(i,j,k)*ad_cff
3246 ad_cff3=ad_cff3+adfac
3247 ad_cff4=ad_cff4-adfac
3248 ad_hz(i,j,k)=ad_hz(i,j,k)+(cff3-cff4)*ad_cff
3249 ad_cff=0.0_r8
3250
3251
3252 ad_cff2=ad_cff2+dmde(i,j)*ad_cff4
3253 ad_cff4=0.0_r8
3254
3255
3256 ad_cff1=ad_cff1+dndx(i,j)*ad_cff3
3257 ad_cff3=0.0_r8
3258
3259# ifdef WEC_MELLOR
3260
3261
3262# endif
3263
3264
3265 adfac=0.5_r8*ad_cff2
3266 ad_u(i ,j,k,nrhs)=ad_u(i ,j,k,nrhs)+adfac
3267 ad_u(i+1,j,k,nrhs)=ad_u(i+1,j,k,nrhs)+adfac
3268# ifdef WEC_MELLOR
3269 ad_u_stokes(i ,j,k)=ad_u_stokes(i ,j,k)+adfac
3270 ad_u_stokes(i+1,j,k)=ad_u_stokes(i+1,j,k)+adfac
3271# endif
3272 ad_cff2=0.0_r8
3273
3274# ifdef WEC_MELLOR
3275
3276
3277# endif
3278
3279
3280 adfac=0.5_r8*ad_cff1
3281 ad_v(i,j ,k,nrhs)=ad_v(i,j ,k,nrhs)+adfac
3282 ad_v(i,j+1,k,nrhs)=ad_v(i,j+1,k,nrhs)+adfac
3283# ifdef WEC_MELLOR
3284 ad_v_stokes(i,j ,k)=ad_v_stokes(i,j ,k)+adfac
3285 ad_v_stokes(i,j+1,k)=ad_v_stokes(i,j+1,k)+adfac
3286# endif
3287 ad_cff1=0.0_r8
3288 END DO
3289 END DO
3290# endif
3291# ifdef UV_COR
3292
3293
3294
3295
3296
3297 DO j=jstrv,jend
3298 DO i=istr,iend
3299# ifdef DIAGNOSTICS_UV
3300
3301# endif
3302
3303
3304 ad_cff1=ad_cff1-ad_rv(i,j,k,nrhs)
3305
3306
3307 adfac=0.5_r8*ad_cff1
3308 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac
3309 ad_vfe(i,j )=ad_vfe(i,j )+adfac
3310 ad_cff1=0.0_r8
3311 END DO
3312 END DO
3313 DO j=jstr,jend
3314 DO i=istru,iend
3315# ifdef DIAGNOSTICS_UV
3316
3317# endif
3318
3319
3320 ad_cff1=ad_cff1+ad_ru(i,j,k,nrhs)
3321
3322
3323 adfac=0.5_r8*ad_cff1
3324 ad_ufx(i-1,j)=ad_ufx(i-1,j)+adfac
3325 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
3326 ad_cff1=0.0_r8
3327 END DO
3328 END DO
3329 DO j=jstrv-1,jend
3330 DO i=istru-1,iend
3331 cff=0.5_r8*hz(i,j,k)*fomn(i,j)
3332
3333# ifdef WEC_MELLOR
3334
3335
3336# endif
3337
3338
3339# ifdef WEC_MELLOR
3340
3341
3342# endif
3343
3344
3345 adfac=cff*ad_vfe(i,j)
3346 ad_u(i ,j,k,nrhs)=ad_u(i ,j,k,nrhs)+adfac
3347 ad_u(i+1,j,k,nrhs)=ad_u(i+1,j,k,nrhs)+adfac
3348# ifdef WEC_MELLOR
3349 ad_u_stokes(i ,j,k)=ad_u_stokes(i ,j,k)+adfac
3350 ad_u_stokes(i+1,j,k)=ad_u_stokes(i+1,j,k)+adfac
3351# endif
3352 ad_cff=ad_cff+(u(i ,j,k,nrhs)+ &
3353# ifdef WEC_MELLOR
3354 & u_stokes(i ,j,k)+ &
3355 & u_stokes(i+1,j,k)+ &
3356# endif
3357 & u(i+1,j,k,nrhs))*ad_vfe(i,j)
3358 ad_vfe(i,j)=0.0_r8
3359
3360# ifdef WEC_MELLOR
3361
3362
3363# endif
3364
3365
3366# ifdef WEC_MELLOR
3367
3368
3369# endif
3370
3371
3372 adfac=cff*ad_ufx(i,j)
3373 ad_v(i,j ,k,nrhs)=ad_v(i,j ,k,nrhs)+adfac
3374 ad_v(i,j+1,k,nrhs)=ad_v(i,j+1,k,nrhs)+adfac
3375# ifdef WEC_MELLOR
3376 ad_v_stokes(i,j ,k)=ad_v_stokes(i,j ,k)+adfac
3377 ad_v_stokes(i,j+1,k)=ad_v_stokes(i,j+1,k)+adfac
3378# endif
3379 ad_cff=ad_cff+(v(i,j ,k,nrhs)+ &
3380# ifdef WEC_MELLOR
3381 & v_stokes(i,j ,k)+ &
3382 & v_stokes(i,j+1,k)+ &
3383# endif
3384 & v(i,j+1,k,nrhs))*ad_ufx(i,j)
3385 ad_ufx(i,j)=0.0_r8
3386
3387
3388 ad_hz(i,j,k)=ad_hz(i,j,k)+ &
3389 & 0.5_r8*fomn(i,j)*ad_cff
3390 ad_cff=0.0_r8
3391 END DO
3392 END DO
3393# endif
3394 END DO k_loop
3395# ifdef BODYFORCE
3396
3397
3398
3399
3400
3401
3402 DO j=jstrv-1,jend
3403 DO i=istru-1,iend
3404 wrk(i,j)=0.0_r8
3405 END DO
3406 END DO
3408 DO j=jstrv-1,jend
3409 DO i=istru-1,iend
3410 wrk(i,j)=wrk(i,j)+hz(i,j,k)
3411 END DO
3412 END DO
3413 END DO
3415 DO j=jstrv,jend
3416 DO i=istr,iend
3417# ifdef DIAGNOSTICS_UV
3418
3419
3420# endif
3421
3422
3423 ad_cff=ad_cff-ad_rv(i,j,k,nrhs)
3424
3425
3426
3427
3428
3429 adfac=vwrk(i,j)*ad_cff
3430 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac
3431 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac
3432 ad_vwrk(i,j)=ad_vwrk(i,j)+(hz(i,j ,k)+
3433 & hz(i,j-1,k))*ad_cff
3434 ad_cff=0.0_r8
3435 END DO
3436 END DO
3437 DO j=jstr,jend
3438 DO i=istru,iend
3439# ifdef DIAGNOSTICS_UV
3440
3441
3442# endif
3443
3444
3445 ad_cff=ad_cff-ad_ru(i,j,k,nrhs)
3446
3447
3448
3449
3450
3451 adfac=uwrk(i,j)*ad_cff
3452 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac
3453 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac
3454 ad_uwrk(i,j)=ad_uwrk(i,j)+(hz(i ,j,k)+ &
3455 & hz(i-1,j,k))*ad_cff
3456 ad_cff=0.0_r8
3457 END DO
3458 END DO
3459 END DO
3460 DO j=jstrv,jend
3461 DO i=istr,iend
3462 cff=0.25_r8*(pm(i,j-1)+pm(i,j))* &
3463 & (pn(i,j-1)+pn(i,j))
3464 cff1=1.0_r8/(cff*(wrk(i,j-1)+wrk(i,j)))
3465 vwrk(i,j)=bvstr(i,j)*cff1
3466
3467
3468
3469 ad_cff1=ad_cff+bvstr(i,j)*ad_vwrk(i,j)
3470 ad_bvstr(i,j)=tl_bvstr(i,j)+cff1*ad_vwrk(i,j)
3471 ad_vwrk(i,j)=0.0_r8
3472
3473
3474 adfac=-cff1*cff1*cff*ad_cff1
3475 ad_wrk(i,j )=ad_wrk(i,j )+adfac
3476 ad_wrk(i,j-1)=ad_wrk(i,j-1)+adfac
3477 ad_cff1=0.0_r8
3478 END DO
3479 END DO
3480 DO j=jstr,jend
3481 DO i=istru,iend
3482 cff=0.25_r8*(pm(i-1,j)+pm(i,j))* &
3483 & (pn(i-1,j)+pn(i,j))
3484 cff1=1.0_r8/(cff*(wrk(i-1,j)+wrk(i,j)))
3485 uwrk(i,j)=bustr(i,j)*cff1
3486
3487
3488
3489 ad_cff1=ad_cff1+bustr(i,j)*ad_uwrk(i,j)
3490 ad_bustr(i,j)=ad_bustr(i,j)+cff1*ad_uwrk(i,j)
3491 ad_uwrk(i,j)=0.0_r8
3492
3493
3494 adfac=-cff1*cff1*cff*ad_cff1
3495 ad_wrk(i-1,j)=ad_wrk(i-1,j)+adfac
3496 ad_wrk(i ,j)=ad_wrk(i ,j)+adfac
3497 ad_cff=0.0_r8
3498 END DO
3499 END DO
3501 DO j=jstrv-1,jend
3502 DO i=istru-1,iend
3503
3504
3505 ad_hz(i,j,k)=ad_hz(i,j,k)+ad_wrk(i,j)
3506 ad_wrk(i,j)=0.0_r8
3507 END DO
3508 END DO
3509 END DO
3510 DO j=jstrv-1,jend
3511 DO i=istru-1,iend
3512
3513
3514 ad_wrk(i,j)=0.0_r8
3515 END DO
3516 END DO
3517
3518
3519
3520
3521
3522
3523 DO j=jstrv-1,jend
3524 DO i=istru-1,iend
3525 wrk(i,j)=0.0_r8
3526 END DO
3527 END DO
3529 DO j=jstrv-1,jend
3530 DO i=istru-1,iend
3531 wrk(i,j)=wrk(i,j)+hz(i,j,k)
3532 END DO
3533 END DO
3534 END DO
3536 DO j=jstrv,jend
3537 DO i=istr,iend
3538# ifdef DIAGNOSTICS_UV
3539
3540
3541# endif
3542
3543
3544 ad_cff=ad_cff+tl_rv(i,j,k,nrhs)
3545
3546
3547
3548
3549
3550 adfac=vwrk(i,j)*ad_cff
3551 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac
3552 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac
3553 ad_vwrk(i,j)=ad_vwrk(i,j)+(hz(i,j ,k)+ &
3554 & hz(i,j-1,k))*ad_cff
3555 ad_cff=0.0_r8
3556 END DO
3557 END DO
3558 DO j=jstr,jend
3559 DO i=istru,iend
3560# ifdef DIAGNOSTICS_UV
3561
3562
3563# endif
3564
3565
3566 ad_cff=ad_cff+tl_ru(i,j,k,nrhs)
3567
3568
3569
3570
3571
3572 adfac=uwrk(i,j)*ad_cff
3573 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac
3574 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac
3575 ad_uwrk(i,j)=ad_uwrk(i,j)+(hz(i ,j,k)+ &
3576 & hz(i-1,j,k))*ad_fac
3577 ad_fac=0.0_r8
3578 END DO
3579 END DO
3580 END DO
3581 DO j=jstrv,jend
3582 DO i=istr,iend
3583 cff=0.25*(pm(i,j-1)+pm(i,j))* &
3584 & (pn(i,j-1)+pn(i,j))
3585 cff1=1.0_r8/(cff*(tl_wrk(i,j-1)+tl_wrk(i,j)))
3586 vwrk(i,j)=svstr(i,j)*cff1
3587
3588
3589
3590 ad_cff1=ad_cff1+svstr(i,j)*ad_vwrk(i,j)
3591 ad_svstr(i,j)=ad_svstr(i,j)+cff1*ad_vwrk(i,j)
3592 ad_vwrk(i,j)=0.0_r8
3593
3594
3595 adfac=-cff1*cff1*cff*ad_cff1
3596 ad_wrk(i,j-1)=ad_wrk(i,j-1)+adfac
3597 ad_wrk(i,j )=ad_wrk(i,j )+adfac
3598 ad_cff1=0.0_r8
3599 END DO
3600 END DO
3601 DO j=jstr,jend
3602 DO i=istru,iend
3603 cff=0.25_r8*(pm(i-1,j)+pm(i,j))* &
3604 & (pn(i-1,j)+pn(i,j))
3605 cff1=1.0_r8/(cff*(wrk(i-1,j)+wrk(i,j)))
3606 uwrk(i,j)=sustr(i,j)*cff1
3607
3608
3609
3610 ad_cff1=ad_cff1+sustr(i,j)*ad_uwrk(i,j)
3611 ad_sustr(i,j)=ad_sustr(i,j)+cff1*ad_uwrk(i,j)
3612 ad_uwrk(i,j)=0.0_r8
3613
3614
3615 adfac=-cff1*cff1*cff*ad_cff1
3616 ad_wrk(i-1,j)=ad_wrk(i-1,j)+adfac
3617 ad_wrk(i ,j)=ad_wrk(i ,j)+adfac
3618 ad_cff1=0.0_r8
3619 END DO
3620 END DO
3622 DO j=jstrv-1,jend
3623 DO i=istru-1,iend
3624
3625
3626 ad_hz(i,j,k)=ad_hz(i,j,k)+ad_wrk(i,j)
3627 ad_wrk(i,j)=0.0_r8
3628 END DO
3629 END DO
3630 END DO
3631 DO j=jstrv-1,jend
3632 DO i=istru-1,iend
3633
3634
3635 ad_wrk(i,j)=0.0_r8
3636 END DO
3637 END DO
3638# ifdef DIAGNOSTICS_UV
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659# endif
3660# endif
3661
3662 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