249
250
255#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
257#endif
259
262#ifdef DISTRIBUTE
265#endif
271#ifdef WET_DRY_NOT_YET
272
273#endif
274
275
276
277 integer, intent(in) :: ng, tile
278 integer, intent(in) :: LBi, UBi, LBj, UBj, UBk
279 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
280 integer, intent(in) :: krhs, kstp, knew
281#ifdef SOLVE3D
282 integer, intent(in) :: nstp, nnew
283#endif
284
285#ifdef ASSUMED_SHAPE
286# ifdef MASKING
287 real(r8), intent(in) :: pmask(LBi:,LBj:)
288 real(r8), intent(in) :: rmask(LBi:,LBj:)
289 real(r8), intent(in) :: umask(LBi:,LBj:)
290 real(r8), intent(in) :: vmask(LBi:,LBj:)
291# endif
292 real(r8), intent(in) :: fomn(LBi:,LBj:)
293 real(r8), intent(in) :: h(LBi:,LBj:)
294 real(r8), intent(in) :: om_u(LBi:,LBj:)
295 real(r8), intent(in) :: om_v(LBi:,LBj:)
296 real(r8), intent(in) :: on_u(LBi:,LBj:)
297 real(r8), intent(in) :: on_v(LBi:,LBj:)
298 real(r8), intent(in) :: omn(LBi:,LBj:)
299 real(r8), intent(in) :: pm(LBi:,LBj:)
300 real(r8), intent(in) :: pn(LBi:,LBj:)
301# if defined CURVGRID && defined UV_ADV
302 real(r8), intent(in) :: dndx(LBi:,LBj:)
303 real(r8), intent(in) :: dmde(LBi:,LBj:)
304# endif
305# if defined UV_VIS2 || defined UV_VIS4
306 real(r8), intent(in) :: pmon_r(LBi:,LBj:)
307 real(r8), intent(in) :: pnom_r(LBi:,LBj:)
308 real(r8), intent(in) :: pmon_p(LBi:,LBj:)
309 real(r8), intent(in) :: pnom_p(LBi:,LBj:)
310 real(r8), intent(in) :: om_r(LBi:,LBj:)
311 real(r8), intent(in) :: on_r(LBi:,LBj:)
312 real(r8), intent(in) :: om_p(LBi:,LBj:)
313 real(r8), intent(in) :: on_p(LBi:,LBj:)
314# ifdef UV_VIS2
315 real(r8), intent(in) :: visc2_p(LBi:,LBj:)
316 real(r8), intent(in) :: visc2_r(LBi:,LBj:)
317# endif
318# ifdef UV_VIS4
319 real(r8), intent(in) :: visc4_p(LBi:,LBj:)
320 real(r8), intent(in) :: visc4_r(LBi:,LBj:)
321# endif
322# endif
323# ifdef WEC_MELLOR
324 real(r8), intent(in) :: ubar_stokes(LBi:,LBj:)
325 real(r8), intent(in) :: vbar_stokes(LBi:,LBj:)
326# endif
327 real(r8), intent(in) :: rubar(LBi:,LBj:,:)
328 real(r8), intent(in) :: rvbar(LBi:,LBj:,:)
329 real(r8), intent(in) :: rzeta(LBi:,LBj:,:)
330 real(r8), intent(in) :: ubar(LBi:,LBj:,:)
331 real(r8), intent(in) :: vbar(LBi:,LBj:,:)
332 real(r8), intent(in) :: zeta(LBi:,LBj:,:)
333# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
334 real(r8), intent(in) :: eq_tide(LBi:,LBj:)
335# endif
336# if !defined SOLVE3D && defined ATM_PRESS
337 real(r8), intent(in) :: Pair(LBi:,LBj:)
338# endif
339# ifdef SOLVE3D
340# if defined VAR_RHO_2D_NOT_YET
341 real(r8), intent(in) :: rhoA(LBi:,LBj:)
342 real(r8), intent(in) :: rhoS(LBi:,LBj:)
343# endif
344 real(r8), intent(in) :: Zt_avg1(LBi:,LBj:)
345
346 real(r8), intent(inout) :: ad_DU_avg1(LBi:,LBj:)
347 real(r8), intent(inout) :: ad_DU_avg2(LBi:,LBj:)
348 real(r8), intent(inout) :: ad_DV_avg1(LBi:,LBj:)
349 real(r8), intent(inout) :: ad_DV_avg2(LBi:,LBj:)
350 real(r8), intent(inout) :: ad_Zt_avg1(LBi:,LBj:)
351# if defined VAR_RHO_2D_NOT_YET
352 real(r8), intent(inout) :: ad_rhoA(LBi:,LBj:)
353 real(r8), intent(inout) :: ad_rhoS(LBi:,LBj:)
354# endif
355 real(r8), intent(inout) :: ad_rufrc(LBi:,LBj:)
356 real(r8), intent(inout) :: ad_rvfrc(LBi:,LBj:)
357 real(r8), intent(inout) :: ad_ru(LBi:,LBj:,0:,:)
358 real(r8), intent(inout) :: ad_rv(LBi:,LBj:,0:,:)
359# else
360 real(r8), intent(inout) :: ad_sustr(LBi:,LBj:)
361 real(r8), intent(inout) :: ad_svstr(LBi:,LBj:)
362 real(r8), intent(inout) :: ad_bustr(LBi:,LBj:)
363 real(r8), intent(inout) :: ad_bvstr(LBi:,LBj:)
364# endif
365# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
366 real(r8), intent(inout) :: ad_bed_thick(LBi:,LBj:,:)
367# endif
368# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
369 real(r8), intent(inout) :: ad_eq_tide(LBi:,LBj:)
370# endif
371# ifdef WEC_MELLOR
372 real(r8), intent(inout) :: ad_rustr2d(LBi:,LBj:)
373 real(r8), intent(inout) :: ad_rvstr2d(LBi:,LBj:)
374 real(r8), intent(inout) :: ad_rulag2d(LBi:,LBj:)
375 real(r8), intent(inout) :: ad_rvlag2d(LBi:,LBj:)
376 real(r8), intent(inout) :: ad_ubar_stokes(LBi:,LBj:)
377 real(r8), intent(inout) :: ad_vbar_stokes(LBi:,LBj:)
378# endif
379# ifdef WET_DRY_NOT_YET
380 real(r8), intent(inout) :: pmask_full(LBi:,LBj:)
381 real(r8), intent(inout) :: rmask_full(LBi:,LBj:)
382 real(r8), intent(inout) :: umask_full(LBi:,LBj:)
383 real(r8), intent(inout) :: vmask_full(LBi:,LBj:)
384
385 real(r8), intent(inout) :: pmask_wet(LBi:,LBj:)
386 real(r8), intent(inout) :: rmask_wet(LBi:,LBj:)
387 real(r8), intent(inout) :: umask_wet(LBi:,LBj:)
388 real(r8), intent(inout) :: vmask_wet(LBi:,LBj:)
389# ifdef SOLVE3D
390 real(r8), intent(inout) :: rmask_wet_avg(LBi:,LBj:)
391# endif
392# endif
393# ifdef DIAGNOSTICS_UV
394
395
396
397
398# ifdef SOLVE3D
399
400
401
402
403# endif
404# endif
405 real(r8), intent(inout) :: ad_h(LBi:,LBj:)
406 real(r8), intent(inout) :: ad_rubar(LBi:,LBj:,:)
407 real(r8), intent(inout) :: ad_rvbar(LBi:,LBj:,:)
408 real(r8), intent(inout) :: ad_rzeta(LBi:,LBj:,:)
409 real(r8), intent(inout) :: ad_ubar(LBi:,LBj:,:)
410 real(r8), intent(inout) :: ad_vbar(LBi:,LBj:,:)
411 real(r8), intent(inout) :: ad_zeta(LBi:,LBj:,:)
412# ifndef SOLVE3D
413 real(r8), intent(out) :: ad_ubar_sol(LBi:,LBj:)
414 real(r8), intent(out) :: ad_vbar_sol(LBi:,LBj:)
415 real(r8), intent(out) :: ad_zeta_sol(LBi:,LBj:)
416# endif
417
418#else
419
420# ifdef MASKING
421 real(r8), intent(in) :: pmask(LBi:UBi,LBj:UBj)
422 real(r8), intent(in) :: rmask(LBi:UBi,LBj:UBj)
423 real(r8), intent(in) :: umask(LBi:UBi,LBj:UBj)
424 real(r8), intent(in) :: vmask(LBi:UBi,LBj:UBj)
425# endif
426 real(r8), intent(in) :: fomn(LBi:UBi,LBj:UBj)
427 real(r8), intent(in) :: h(LBi:UBi,LBj:UBj)
428 real(r8), intent(in) :: om_u(LBi:UBi,LBj:UBj)
429 real(r8), intent(in) :: om_v(LBi:UBi,LBj:UBj)
430 real(r8), intent(in) :: on_u(LBi:UBi,LBj:UBj)
431 real(r8), intent(in) :: on_v(LBi:UBi,LBj:UBj)
432 real(r8), intent(in) :: omn(LBi:UBi,LBj:UBj)
433 real(r8), intent(in) :: pm(LBi:UBi,LBj:UBj)
434 real(r8), intent(in) :: pn(LBi:UBi,LBj:UBj)
435# if defined CURVGRID && defined UV_ADV
436 real(r8), intent(in) :: dndx(LBi:UBi,LBj:UBj)
437 real(r8), intent(in) :: dmde(LBi:UBi,LBj:UBj)
438# endif
439# if defined UV_VIS2 || defined UV_VIS4
440 real(r8), intent(in) :: pmon_r(LBi:UBi,LBj:UBj)
441 real(r8), intent(in) :: pnom_r(LBi:UBi,LBj:UBj)
442 real(r8), intent(in) :: pmon_p(LBi:UBi,LBj:UBj)
443 real(r8), intent(in) :: pnom_p(LBi:UBi,LBj:UBj)
444 real(r8), intent(in) :: om_r(LBi:UBi,LBj:UBj)
445 real(r8), intent(in) :: on_r(LBi:UBi,LBj:UBj)
446 real(r8), intent(in) :: om_p(LBi:UBi,LBj:UBj)
447 real(r8), intent(in) :: on_p(LBi:UBi,LBj:UBj)
448# ifdef UV_VIS2
449 real(r8), intent(in) :: visc2_p(LBi:UBi,LBj:UBj)
450 real(r8), intent(in) :: visc2_r(LBi:UBi,LBj:UBj)
451# endif
452# ifdef UV_VIS4
453 real(r8), intent(in) :: visc4_p(LBi:UBi,LBj:UBj)
454 real(r8), intent(in) :: visc4_r(LBi:UBi,LBj:UBj)
455# endif
456# endif
457# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
458 real(r8), intent(inout) :: ad_bed_thick(LBi:UBi,LBj:UBj,3)
459# endif
460# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
461 real(r8), intent(in) :: eq_tide(LBi:UBi,LBj:UBj)
462# endif
463# ifdef WEC_MELLOR
464 real(r8), intent(in) :: ubar_stokes(LBi:UBi,LBj:UBj)
465 real(r8), intent(in) :: vbar_stokes(LBi:UBi,LBj:UBj)
466# endif
467 real(r8), intent(in) :: rubar(LBi:UBi,LBj:UBj,2)
468 real(r8), intent(in) :: rvbar(LBi:UBi,LBj:UBj,2)
469 real(r8), intent(in) :: rzeta(LBi:UBi,LBj:UBj,2)
470 real(r8), intent(in) :: ubar(LBi:UBi,LBj:UBj,:)
471 real(r8), intent(in) :: vbar(LBi:UBi,LBj:UBj,:)
472 real(r8), intent(in) :: zeta(LBi:UBi,LBj:UBj,:)
473# if !defined SOLVE3D && defined ATM_PRESS
474 real(r8), intent(in) :: Pair(LBi:UBi,LBj:UBj)
475# endif
476# ifdef SOLVE3D
477# ifdef VAR_RHO_2D_NOT_YET
478 real(r8), intent(in) :: rhoA(LBi:UBi,LBj:UBj)
479 real(r8), intent(in) :: rhoS(LBi:UBi,LBj:UBj)
480# endif
481 real(r8), intent(in) :: Zt_avg1(LBi:UBi,LBj:UBj)
482
483 real(r8), intent(inout) :: ad_DU_avg1(LBi:UBi,LBj:UBj)
484 real(r8), intent(inout) :: ad_DU_avg2(LBi:UBi,LBj:UBj)
485 real(r8), intent(inout) :: ad_DV_avg1(LBi:UBi,LBj:UBj)
486 real(r8), intent(inout) :: ad_DV_avg2(LBi:UBi,LBj:UBj)
487 real(r8), intent(inout) :: ad_Zt_avg1(LBi:UBi,LBj:UBj)
488# if defined VAR_RHO_2D_NOT_YET
489 real(r8), intent(inout) :: ad_rhoA(LBi:UBi,LBj:UBj)
490 real(r8), intent(inout) :: ad_rhoS(LBi:UBi,LBj:UBj)
491# endif
492 real(r8), intent(inout) :: ad_rufrc(LBi:UBi,LBj:UBj)
493 real(r8), intent(inout) :: ad_rvfrc(LBi:UBi,LBj:UBj)
494 real(r8), intent(inout) :: ad_ru(LBi:UBi,LBj:UBj,0:UBk,2)
495 real(r8), intent(inout) :: ad_rv(LBi:UBi,LBj:UBj,0:UBk,2)
496# else
497 real(r8), intent(inout) :: ad_sustr(LBi:UBi,LBj:UBj)
498 real(r8), intent(inout) :: ad_svstr(LBi:UBi,LBj:UBj)
499 real(r8), intent(inout) :: ad_bustr(LBi:UBi,LBj:UBj)
500 real(r8), intent(inout) :: ad_bvstr(LBi:UBi,LBj:UBj)
501# endif
502# ifdef WEC_MELLOR
503 real(r8), intent(inout) :: ad_rustr2d(LBi:UBi,LBj:UBj)
504 real(r8), intent(inout) :: ad_rvstr2d(LBi:UBi,LBj:UBj)
505 real(r8), intent(inout) :: ad_rulag2d(LBi:UBi,LBj:UBj)
506 real(r8), intent(inout) :: ad_rvlag2d(LBi:UBi,LBj:UBj)
507 real(r8), intent(inout) :: ad_ubar_stokes(LBi:UBi,LBj:UBj)
508 real(r8), intent(inout) :: ad_vbar_stokes(LBi:UBi,LBj:UBj)
509# endif
510# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
511 real(r8), intent(inout) :: ad_eq_tide(LBi:UBi,LBj:UBj)
512# endif
513# ifdef WET_DRY_NOT_YET
514 real(r8), intent(inout) :: pmask_full(LBi:UBi,LBj:UBj)
515 real(r8), intent(inout) :: rmask_full(LBi:UBi,LBj:UBj)
516 real(r8), intent(inout) :: umask_full(LBi:UBi,LBj:UBj)
517 real(r8), intent(inout) :: vmask_full(LBi:UBi,LBj:UBj)
518
519 real(r8), intent(inout) :: pmask_wet(LBi:UBi,LBj:UBj)
520 real(r8), intent(inout) :: rmask_wet(LBi:UBi,LBj:UBj)
521 real(r8), intent(inout) :: umask_wet(LBi:UBi,LBj:UBj)
522 real(r8), intent(inout) :: vmask_wet(LBi:UBi,LBj:UBj)
523# ifdef SOLVE3D
524 real(r8), intent(inout) :: rmask_wet_avg(LBi:UBi,LBj:UBj)
525# endif
526# endif
527# ifdef DIAGNOSTICS_UV
528
529
530
531
532# ifdef SOLVE3D
533
534
535
536
537# endif
538# endif
539 real(r8), intent(inout) :: ad_h(LBi:UBi,LBj:UBj)
540 real(r8), intent(inout) :: ad_rubar(LBi:UBi,LBj:UBj,2)
541 real(r8), intent(inout) :: ad_rvbar(LBi:UBi,LBj:UBj,2)
542 real(r8), intent(inout) :: ad_rzeta(LBi:UBi,LBj:UBj,2)
543 real(r8), intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
544 real(r8), intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
545 real(r8), intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
546# ifndef SOLVE3D
547 real(r8), intent(out) :: ad_ubar_sol(LBi:UBi,LBj:UBj)
548 real(r8), intent(out) :: ad_vbar_sol(LBi:UBi,LBj:UBj)
549 real(r8), intent(out) :: ad_zeta_sol(LBi:UBi,LBj:UBj)
550# endif
551#endif
552
553
554
555 logical :: CORRECTOR_2D_STEP
556
557 integer :: i, is, j, ptsk
558#ifdef DIAGNOSTICS_UV
559
560#endif
561
562 real(r8) :: cff, cff1, cff2, cff3, cff4, cff5, cff6, cff7
563 real(r8) :: fac, fac1, fac2, fac3
564 real(r8) :: ad_cff, ad_cff1, ad_cff2, ad_cff3, ad_cff4
565 real(r8) :: ad_fac, ad_fac1
566 real(r8) :: adfac, adfac1, adfac2, adfac3, adfac4
567
568 real(r8), parameter :: IniVal = 0.0_r8
569
570 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Dgrad
571 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Dnew
572 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs
573 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs_p
574 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Dstp
575 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: DUon
576 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: DVom
577#ifdef WEC_MELLOR
578 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: DUSon
579 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: DVSom
580#endif
581#ifdef UV_VIS4
582 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: LapU
583 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: LapV
584 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
585 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
586 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
587 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
588#endif
589 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: grad
590 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: gzeta
591 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: gzeta2
592#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
593 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: gzetaSA
594#endif
595 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_ubar
596 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_vbar
597 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_zeta
598 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: zeta_new
599 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: zwrk
600#ifdef WET_DRY_NOT_YET
601
602#endif
603#ifdef DIAGNOSTICS_UV
604
605
606
607
608
609
610#endif
611
612 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Dgrad
613 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Dnew
614 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Drhs
615 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Drhs_p
616 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Dstp
617 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DUon
618 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DVom
619#ifdef WEC_MELLOR
620 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DUSon
621 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DVSom
622#endif
623#ifdef UV_VIS4
624 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_LapU
625 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_LapV
626#endif
627 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFe
628 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFx
629 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFe
630 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFx
631 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_grad
632 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_gzeta
633 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_gzeta2
634#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
635 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_gzetaSA
636#endif
637 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rhs_ubar
638 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rhs_vbar
639 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rhs_zeta
640 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_zeta_new
641 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_zwrk
642#ifdef WET_DRY_NOT_YET
643
644#endif
645
646#include "set_bounds.h"
647
648 ptsk=3-kstp
650#ifdef DEBUG
651 WRITE (21,20)
iic(ng), corrector_2d_step, &
652 & kstp, krhs, knew, ptsk
653 20 FORMAT (' iic = ',i5.5,' corrector = ',l1,' kstp = ',i1, &
654 & ' krhs = ',i1,' knew = ',i1,' ptsk = ',i1)
655#endif
656
657
658
659
660
661 ad_cff=inival
662 ad_cff1=inival
663 ad_cff2=inival
664 ad_cff3=inival
665 ad_cff4=inival
666 ad_fac=inival
667 ad_fac1=inival
668 DO j=jmins,jmaxs
669 DO i=imins,imaxs
670 ad_dgrad(i,j)=inival
671 ad_dnew(i,j)=inival
672 ad_drhs(i,j)=inival
673 ad_drhs_p(i,j)=inival
674 ad_dstp(i,j)=inival
675 ad_duon(i,j)=inival
676 ad_dvom(i,j)=inival
677#ifdef WEC_MELLOR
678 ad_duson(i,j)=inival
679 ad_dvsom(i,j)=inival
680#endif
681#ifdef UV_VIS4
682 ad_lapu(i,j)=inival
683 ad_lapv(i,j)=inival
684#endif
685 ad_ufe(i,j)=inival
686 ad_ufx(i,j)=inival
687 ad_vfe(i,j)=inival
688 ad_vfx(i,j)=inival
689 ad_grad(i,j)=inival
690 ad_gzeta(i,j)=inival
691 ad_gzeta2(i,j)=inival
692#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
693 ad_gzetasa(i,j)=inival
694#endif
695 ad_rhs_ubar(i,j)=inival
696 ad_rhs_vbar(i,j)=inival
697 ad_rhs_zeta(i,j)=inival
698 ad_zeta_new(i,j)=inival
699 ad_zwrk(i,j)=inival
700 ad_duon(i,j)=inival
701 ad_dvom(i,j)=inival
702
703#ifdef INITIALIZE_AUTOMATIC
704 dgrad(i,j)=inival
705 dnew(i,j)=inival
706 drhs(i,j)=inival
707 drhs_p(i,j)=inival
708 dstp(i,j)=inival
709 duon(i,j)=inival
710 dvom(i,j)=inival
711# ifdef WEC_MELLOR
712 duson(i,j)=inival
713 dvsom(i,j)=inival
714# endif
715# ifdef UV_VIS4
716 lapu(i,j)=inival
717 lapv(i,j)=inival
718 ufe(i,j)=inival
719 ufx(i,j)=inival
720 vfe(i,j)=inival
721 vfx(i,j)=inival
722# endif
723 grad(i,j)=inival
724 gzeta(i,j)=inival
725 gzeta2(i,j)=inival
726# if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
727 gzetasa(i,j)=inival
728# endif
729 rhs_ubar(i,j)=inival
730 rhs_vbar(i,j)=inival
731 rhs_zeta(i,j)=inival
732 zeta_new(i,j)=inival
733 zwrk(i,j)=inival
734#endif
735 END DO
736 END DO
737
738
739
740
741
742
743#ifdef DISTRIBUTE
744
745
746
747
748
749
750
751
752 DO j=jstrv-2,jendp2
753 DO i=istru-2,iendp2
754 dnew(i,j)=zeta(i,j,knew)+h(i,j)
755 drhs(i,j)=zeta(i,j,krhs)+h(i,j)
756 dstp(i,j)=zeta(i,j,kstp)+h(i,j)
757 END DO
758 END DO
759 DO j=jstrv-2,jendp2
760 DO i=istru-1,iendp2
761 cff=0.5_r8*on_u(i,j)
762 cff1=cff*(drhs(i,j)+drhs(i-1,j))
763 duon(i,j)=ubar(i,j,krhs)*cff1
764# ifdef WEC_MELLOR
765 duson(i,j)=ubar_stokes(i,j)*cff1
766 duon(i,j)=duon(i,j)+duson(i,j)
767# endif
768 END DO
769 END DO
770 DO j=jstrv-1,jendp2
771 DO i=istru-2,iendp2
772 cff=0.5_r8*om_v(i,j)
773 cff1=cff*(drhs(i,j)+drhs(i,j-1))
774 dvom(i,j)=vbar(i,j,krhs)*cff1
775# ifdef WEC_MELLOR
776 dvsom(i,j)=vbar_stokes(i,j)*cff1
777 dvom(i,j)=dvom(i,j)+dvsom(i,j)
778# endif
779 END DO
780 END DO
783 & imins, imaxs, jmins, jmaxs, &
784 & duon)
786 & imins, imaxs, jmins, jmaxs, &
787 & dvom)
788 END IF
790 & imins, imaxs, jmins, jmaxs, &
793 & duon, dvom)
794
795#else
796
797 DO j=jstrvm2-1,jendp2
798 DO i=istrum2-1,iendp2
799 dnew(i,j)=zeta(i,j,knew)+h(i,j)
800 drhs(i,j)=zeta(i,j,krhs)+h(i,j)
801 dstp(i,j)=zeta(i,j,kstp)+h(i,j)
802 END DO
803 END DO
804 DO j=jstrvm2-1,jendp2
805 DO i=istrum2,iendp2
806 cff=0.5_r8*on_u(i,j)
807 cff1=cff*(drhs(i,j)+drhs(i-1,j))
808 duon(i,j)=ubar(i,j,krhs)*cff1
809# ifdef WEC_MELLOR
810 duson(i,j)=ubar_stokes(i,j)*cff1
811 duon(i,j)=duon(i,j)+duson(i,j)
812# endif
813 END DO
814 END DO
815 DO j=jstrvm2,jendp2
816 DO i=istrum2-1,iendp2
817 cff=0.5_r8*om_v(i,j)
818 cff1=cff*(drhs(i,j)+drhs(i,j-1))
819 dvom(i,j)=vbar(i,j,krhs)*cff1
820# ifdef WEC_MELLOR
821 dvsom(i,j)=vbar_stokes(i,j)*cff1
822 dvom(i,j)=dvom(i,j)+dvsom(i,j)
823# endif
824 END DO
825 END DO
826#endif
827
828
829
830
831
834 & lbi, ubi, lbj, ubj, &
835 & imins, imaxs, jmins, jmaxs, &
836 & knew, &
837# ifdef MASKING
838 & umask, vmask, &
839# endif
840 & h, om_v, on_u, &
841 & ubar, vbar, zeta)
842
843
844
845
847 & lbi, ubi, lbj, ubj, &
848 & imins, imaxs, jmins, jmaxs, &
849 & krhs, &
850# ifdef MASKING
851 & umask, vmask, &
852# endif
853 & om_v, on_u, &
854 & ubar, vbar, &
855 & drhs, duon, dvom)
856 END IF
857#if defined UV_VIS2 || defined UV_VIS4
858
859
860
861# ifdef UV_VIS4
862 DO j=jstrm1,jendp2
863 DO i=istrm1,iendp2
864# else
865 DO j=jstr,jend+1
866 DO i=istr,iend+1
867# endif
868 drhs_p(i,j)=0.25_r8*(drhs(i,j )+drhs(i-1,j )+ &
869 & drhs(i,j-1)+drhs(i-1,j-1))
870 END DO
871 END DO
872#endif
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890 DO j=jstr,jend
891 DO i=istr,iend
892 rhs_ubar(i,j)=0.0_r8
893 rhs_vbar(i,j)=0.0_r8
894 END DO
895 END DO
896
897
898
899
900 step_loop :
IF (
iif(ng).le.
nfast(ng))
THEN
901
902
903
904
905
906#ifdef DISTRIBUTE
907
908
909
910
911
912
913
915 & lbi, ubi, lbj, ubj, &
918 & ad_ubar(:,:,knew), &
919 & ad_vbar(:,:,knew))
920
921#endif
922
924
925
926
927
929 & lbi, ubi, lbj, ubj, &
930 & ad_vbar(:,:,knew))
931
932
933
934
936 & lbi, ubi, lbj, ubj, &
937 & ad_ubar(:,:,knew))
938 END IF
939
940
941
942
943
944
949 IF (((istrr.le.i).and.(i.le.iendr)).and. &
950 & ((jstrr.le.j).and.(j.le.jendr))) THEN
951 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
952 cff=1.0_r8/(on_u(i,j)* &
953 & 0.5_r8*(zeta(i-1,j,knew)+h(i-1,j)+ &
954 & zeta(i ,j,knew)+h(i ,j)))
955
956
957
959 & cff*ad_ubar(i,j,knew)
960 ad_cff=ad_cff+ &
961 &
sources(ng)%Qbar(is)*ad_ubar(i,j,knew)
962 ad_ubar(i,j,knew)=0.0_r8
963
964
965
966
967 adfac=-cff*cff*on_u(i,j)*0.5_r8*ad_cff
968 ad_h(i-1,j)=ad_h(i-1,j)+adfac
969 ad_h(i ,j)=ad_h(i ,j)+adfac
970 ad_zeta(i-1,j,knew)=ad_zeta(i-1,j,knew)+adfac
971 ad_zeta(i ,j,knew)=ad_zeta(i ,j,knew)+adfac
972 ad_cff=0.0_r8
973 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
974 cff=1.0_r8/(om_v(i,j)* &
975 & 0.5_r8*(zeta(i,j-1,knew)+h(i,j-1)+ &
976 & zeta(i,j ,knew)+h(i,j )))
977
978
979
981 & cff*ad_vbar(i,j,knew)
982 ad_cff=ad_cff+ &
983 &
sources(ng)%Qbar(is)*ad_vbar(i,j,knew)
984 ad_vbar(i,j,knew)=0.0_r8
985
986
987
988
989 adfac=-cff*cff*om_v(i,j)*0.5_r8*ad_cff
990 ad_h(i,j-1)=ad_h(i,j-1)+adfac
991 ad_h(i,j )=ad_h(i,j )+adfac
992 ad_zeta(i,j-1,knew)=ad_zeta(i,j-1,knew)+adfac
993 ad_zeta(i,j ,knew)=ad_zeta(i,j ,knew)+adfac
994 ad_cff=0.0_r8
995 END IF
996 END IF
997 END DO
998 END IF
999
1000
1001
1002
1003
1004
1005
1006
1008
1009
1010
1011
1012# ifdef MASKING
1013
1014# endif
1015
1016
1017
1018
1020 & lbi, ubi, lbj, ubj, &
1021 & imins, imaxs, jmins, jmaxs, &
1022 & knew, &
1023# ifdef MASKING
1024 & umask, vmask, &
1025# endif
1026 & h, ad_h, om_v, on_u, &
1027 & ubar, vbar, zeta, &
1028 & ad_ubar, ad_vbar, ad_zeta)
1029 END IF
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1041 & lbi, ubi, lbj, ubj, &
1042 & imins, imaxs, jmins, jmaxs, &
1043 & krhs, kstp, knew, &
1044 & ubar, vbar, zeta, &
1045 & ad_ubar, ad_vbar, ad_zeta)
1046
1047
1048
1049
1050
1051
1052
1054 & lbi, ubi, lbj, ubj, &
1055 & imins, imaxs, jmins, jmaxs, &
1056 & krhs, kstp, knew, &
1057 & ubar, vbar, zeta, &
1058 & ad_ubar, ad_vbar, ad_zeta)
1059
1060
1061
1062
1064#ifdef DIAGNOSTICS_UV
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077#endif
1078 DO j=jstrv,jend
1079 DO i=istr,iend
1080
1081
1082 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)+ad_rvbar(i,j,krhs)
1083 ad_rvbar(i,j,krhs)=0.0_r8
1084 END DO
1085 END DO
1086 DO j=jstr,jend
1087 DO i=istru,iend
1088
1089
1090 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)+ad_rubar(i,j,krhs)
1091 ad_rubar(i,j,krhs)=0.0_r8
1092 END DO
1093 END DO
1094 END IF
1095#ifdef DIAGNOSTICS_UV
1096
1097
1098
1099
1100
1101# ifdef SOLVE3D
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157# else
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236# endif
1237#endif
1238
1239
1240
1241
1242
1243#ifndef SOLVE3D
1244
1245
1246
1247 DO j=jstrr,jendr
1248 DO i=istr,iendr
1249 ad_ubar_sol(i,j)=ad_ubar(i,j,knew)
1250 END DO
1251 IF (j.ge.jstr) THEN
1252 DO i=istrr,iendr
1253 ad_vbar_sol(i,j)=ad_vbar(i,j,knew)
1254 END DO
1255 END IF
1256 END DO
1257#endif
1258
1259
1260
1261
1262#ifdef WET_DRY_NOT_YET
1263
1264
1265#endif
1266
1267 IF (first_2d_step) THEN
1269#ifdef WET_DRY_NOT_YET
1270 cff2=1.0_r8/cff1
1271#endif
1272 DO j=jstrv,jend
1273 DO i=istr,iend
1274 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
1275 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
1276#ifdef WET_DRY_NOT_YET
1277 fac1=cff2/cff
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287 adfac=fac1*ad_rhs_vbar(i,j)
1288 adfac1=adfac*vbar(i,j,knew)
1289 adfac2=adfac*vbar(i,j,kstp)
1290 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)+ &
1291 & (dnew(i,j)+dnew(i,j-1))*adfac
1292 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)- &
1293 & (dstp(i,j)+dstp(i,j-1))*adfac
1294 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac1
1295 ad_dnew(i,j )=ad_dnew(i,j )+adfac1
1296 ad_dstp(i,j-1)=ad_dstp(i,j-1)-adfac2
1297 ad_dstp(i,j )=ad_dstp(i,j )-adfac2
1298 ad_rhs_vbar(i,j)=0.0_r8
1299
1300
1301
1302
1303
1304
1305
1306
1307#endif
1308#ifdef MASKING
1309
1310
1311 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)*vmask(i,j)
1312#endif
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322 adfac=fac*ad_vbar(i,j,knew)
1323 adfac1=adfac*(dstp(i,j)+dstp(i,j-1))
1324 adfac2=adfac*cff*cff1
1325 adfac3=adfac*vbar(i,j,kstp)
1326 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)+adfac1
1327 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)+adfac2
1328 ad_dstp(i,j-1)=ad_dstp(i,j-1)+adfac3
1329 ad_dstp(i,j )=ad_dstp(i,j )+adfac3
1330 ad_fac=ad_fac+ &
1331 & (vbar(i,j,kstp)*(dstp(i,j)+dstp(i,j-1))+ &
1332 & cff*cff1*rhs_vbar(i,j))*ad_vbar(i,j,knew)
1333 ad_vbar(i,j,knew)=0.0_r8
1334
1335
1336 adfac=-fac*fac*ad_fac
1337 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac
1338 ad_dnew(i,j )=ad_dnew(i,j )+adfac
1339 ad_fac=0.0_r8
1340 END DO
1341 END DO
1342 DO j=jstr,jend
1343 DO i=istru,iend
1344 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
1345 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
1346#ifdef WET_DRY_NOT_YET
1347 fac1=cff2/cff
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357 adfac=fac1*ad_rhs_ubar(i,j)
1358 adfac1=adfac*ubar(i,j,knew)
1359 adfac2=adfac*ubar(i,j,kstp)
1360 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)+ &
1361 & (dnew(i,j)+dnew(i-1,j))*adfac
1362 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)- &
1363 & (dstp(i,j)+dstp(i-1,j))*adfac
1364 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac1
1365 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac1
1366 ad_dstp(i-1,j)=ad_dstp(i-1,j)-adfac2
1367 ad_dstp(i ,j)=ad_dstp(i ,j)-adfac2
1368 ad_rhs_ubar(i,j)=0.0_r8
1369
1370
1371
1372
1373
1374
1375
1376
1377#endif
1378#ifdef MASKING
1379
1380
1381 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)*umask(i,j)
1382#endif
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392 adfac=fac*ad_ubar(i,j,knew)
1393 adfac1=adfac*(dstp(i,j)+dstp(i-1,j))
1394 adfac2=adfac*cff*cff1
1395 adfac3=adfac*ubar(i,j,kstp)
1396 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)+adfac1
1397 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)+adfac2
1398 ad_dstp(i-1,j)=ad_dstp(i-1,j)+adfac3
1399 ad_dstp(i ,j)=ad_dstp(i ,j)+adfac3
1400 ad_fac=ad_fac+ &
1401 & (ubar(i,j,kstp)*(dstp(i,j)+dstp(i-1,j))+ &
1402 & cff*cff1*rhs_ubar(i,j))*ad_ubar(i,j,knew)
1403 ad_ubar(i,j,knew)=0.0_r8
1404
1405
1406 adfac=-fac*fac*ad_fac
1407 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac
1408 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac
1409 ad_fac=0.0_r8
1410 END DO
1411 END DO
1414#ifdef WET_DRY_NOT_YET
1415 cff2=1.0_r8/cff1
1416#endif
1417 DO j=jstrv,jend
1418 DO i=istr,iend
1419 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
1420 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
1421#ifdef WET_DRY_NOT_YET
1422 fac1=cff2/cff
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432 adfac=fac1*ad_rhs_vbar(i,j)
1433 adfac1=adfac*vbar(i,j,knew)
1434 adfac2=adfac*vbar(i,j,kstp)
1435 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)+ &
1436 & (dnew(i,j)+dnew(i,j-1))*adfac
1437 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)- &
1438 & (dstp(i,j)+dstp(i,j-1))*adfac
1439 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac1
1440 ad_dnew(i,j )=ad_dnew(i,j )+adfac1
1441 ad_dstp(i,j-1)=ad_dstp(i,j-1)-adfac2
1442 ad_dstp(i,j )=ad_dstp(i,j )-adfac2
1443 ad_rhs_vbar(i,j)=0.0_r8
1444
1445
1446
1447
1448
1449
1450
1451
1452#endif
1453#ifdef MASKING
1454
1455
1456 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)*vmask(i,j)
1457#endif
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467 adfac=fac*ad_vbar(i,j,knew)
1468 adfac1=adfac*(dstp(i,j)+dstp(i,j-1))
1469 adfac2=adfac*cff*cff1
1470 adfac3=adfac*vbar(i,j,kstp)
1471 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)+adfac1
1472 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)+adfac2
1473 ad_dstp(i,j-1)=ad_dstp(i,j-1)+adfac3
1474 ad_dstp(i,j )=ad_dstp(i,j )+adfac3
1475 ad_fac=ad_fac+ &
1476 & (vbar(i,j,kstp)*(dstp(i,j)+dstp(i,j-1))+ &
1477 & cff*cff1*rhs_vbar(i,j))*ad_vbar(i,j,knew)
1478 ad_vbar(i,j,knew)=0.0_r8
1479
1480
1481 adfac=-fac*fac*ad_fac
1482 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac
1483 ad_dnew(i,j )=ad_dnew(i,j )+adfac
1484 ad_fac=0.0_r8
1485 END DO
1486 END DO
1487 DO j=jstr,jend
1488 DO i=istru,iend
1489 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
1490 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
1491#ifdef WET_DRY_NOT_YET
1492 fac1=cff2/cff
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502 adfac=fac1*ad_rhs_ubar(i,j)
1503 adfac1=adfac*ubar(i,j,knew)
1504 adfac2=adfac*ubar(i,j,kstp)
1505 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)+ &
1506 & (dnew(i,j)+dnew(i-1,j))*adfac
1507 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)- &
1508 (dstp(i,j)+dstp(i-1,j))*adfac
1509 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac1
1510 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac1
1511 ad_dstp(i-1,j)=ad_dstp(i-1,j)-adfac2
1512 ad_dstp(i ,j)=ad_dstp(i ,j)-adfac2
1513 ad_rhs_ubar(i,j)=0.0_r8
1514
1515
1516
1517
1518
1519
1520
1521
1522#endif
1523#ifdef MASKING
1524
1525
1526 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)*umask(i,j)
1527#endif
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537 adfac=fac*ad_ubar(i,j,knew)
1538 adfac1=adfac*(dstp(i,j)+dstp(i-1,j))
1539 adfac2=adfac*cff*cff1
1540 adfac3=adfac*ubar(i,j,kstp)
1541 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)+adfac1
1542 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)+adfac2
1543 ad_dstp(i-1,j)=ad_dstp(i-1,j)+adfac3
1544 ad_dstp(i ,j)=ad_dstp(i ,j)+adfac3
1545 ad_fac=ad_fac+ &
1546 & (ubar(i,j,kstp)*(dstp(i,j)+dstp(i-1,j))+ &
1547 & cff*cff1*rhs_ubar(i,j))*ad_ubar(i,j,knew)
1548 ad_ubar(i,j,knew)=0.0_r8
1549
1550
1551 adfac=-fac*fac*ad_fac
1552 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac
1553 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac
1554 ad_fac=0.0_r8
1555 END DO
1556 END DO
1557 ELSE IF (corrector_2d_step) THEN
1558 cff1=0.5_r8*
dtfast(ng)*5.0_r8/12.0_r8
1559 cff2=0.5_r8*
dtfast(ng)*8.0_r8/12.0_r8
1560 cff3=0.5_r8*
dtfast(ng)*1.0_r8/12.0_r8
1561#ifdef WET_DRY_NOT_YET
1562 cff4=1.0_r8/cff1
1563#endif
1564 DO j=jstrv,jend
1565 DO i=istr,iend
1566 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
1567 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
1568#ifdef WET_DRY_NOT_YET
1569 fac1=1.0_r8/cff
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581 adfac=cff4*ad_rhs_vbar(i,j)
1582 adfac1=adfac*fac1*vbar(i,j,knew)
1583 adfac2=adfac*fac1*vbar(i,j,kstp)
1584 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)+ &
1585 & (dnew(i,j)+dnew(i,j-1))*adfac
1586 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)- &
1587 & (dstp(i,j)+dstp(i,j-1))*adfac
1588 ad_rvbar(i,j,kstp)=ad_rvbar(i,j,kstp)-cff2*adfac
1589 ad_rvbar(i,j,ptsk)=ad_rvbar(i,j,ptsk)+cff3*adfac
1590 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac1
1591 ad_dnew(i,j )=ad_dnew(i,j )+adfac1
1592 ad_dstp(i,j-1)=ad_dstp(i,j-1)-adfac2
1593 ad_dstp(i,j )=ad_dstp(i,j )-adfac2
1594 ad_rhs_vbar(i,j)=0.0_r8
1595
1596
1597
1598
1599
1600
1601
1602
1603#endif
1604#ifdef MASKING
1605
1606
1607 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)*vmask(i,j)
1608#endif
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622 adfac=fac*ad_vbar(i,j,knew)
1623 adfac1=adfac*(dstp(i,j)+dstp(i,j-1))
1624 adfac2=adfac*cff
1625 adfac3=adfac*vbar(i,j,kstp)
1626 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)+adfac1
1627 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)+cff1*adfac2
1628 ad_rvbar(i,j,kstp)=ad_rvbar(i,j,kstp)+cff2*adfac2
1629 ad_rvbar(i,j,ptsk)=-cff3*adfac2
1630 ad_dstp(i,j-1)=ad_dstp(i,j-1)+adfac3
1631 ad_dstp(i,j )=ad_dstp(i,j )+adfac3
1632 ad_fac=ad_fac+ &
1633 & (vbar(i,j,kstp)*(dstp(i,j)+dstp(i,j-1))+ &
1634 & cff*(cff1*rhs_vbar(i,j)+ &
1635 & cff2*rvbar(i,j,kstp)- &
1636 & cff3*rvbar(i,j,ptsk)))*ad_vbar(i,j,knew)
1637 ad_vbar(i,j,knew)=0.0_r8
1638
1639
1640 adfac=-fac*fac*ad_fac
1641 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac
1642 ad_dnew(i,j )=ad_dnew(i,j )+adfac
1643 ad_fac=0.0_r8
1644 END DO
1645 END DO
1646 DO j=jstr,jend
1647 DO i=istru,iend
1648 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
1649 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
1650#ifdef WET_DRY_NOT_YET
1651 fac1=1.0_r8/cff
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663 adfac=cff4*ad_rhs_ubar(i,j)
1664 adfac1=adfac*fac1*ubar(i,j,knew)
1665 adfac2=adfac*fac1*ubar(i,j,kstp)
1666 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)+ &
1667 & (dnew(i,j)+dnew(i-1,j))*adfac
1668 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)- &
1669 & (dstp(i,j)+dstp(i-1,j))*adfac
1670 ad_rubar(i,j,kstp)=ad_rubar(i,j,kstp)-cff2*adfac
1671 ad_rubar(i,j,ptsk)=ad_rubar(i,j,ptsk)+cff3*adfac
1672 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac1
1673 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac1
1674 ad_dstp(i-1,j)=ad_dstp(i-1,j)-adfac2
1675 ad_dstp(i ,j)=ad_dstp(i ,j)-adfac2
1676 ad_rhs_ubar(i,j)=0.0_r8
1677
1678
1679
1680
1681
1682
1683
1684
1685#endif
1686#ifdef MASKING
1687
1688
1689 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)*umask(i,j)
1690#endif
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704 adfac=fac*ad_ubar(i,j,knew)
1705 adfac1=adfac*(dstp(i,j)+dstp(i-1,j))
1706 adfac2=adfac*cff
1707 adfac3=adfac*ubar(i,j,kstp)
1708 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)+adfac1
1709 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)+cff1*adfac2
1710 ad_rubar(i,j,kstp)=ad_rubar(i,j,kstp)+cff2*adfac2
1711 ad_rubar(i,j,ptsk)=-cff3*adfac2
1712 ad_dstp(i-1,j)=ad_dstp(i-1,j)+adfac3
1713 ad_dstp(i ,j)=ad_dstp(i ,j)+adfac3
1714 ad_fac=ad_fac+ &
1715 & (ubar(i,j,kstp)*(dstp(i,j)+dstp(i-1,j))+ &
1716 & cff*(cff1*rhs_ubar(i,j)+ &
1717 & cff2*rubar(i,j,kstp)- &
1718 & cff3*rubar(i,j,ptsk)))*ad_ubar(i,j,knew)
1719 ad_ubar(i,j,knew)=0.0_r8
1720
1721
1722 adfac=-fac*fac*ad_fac
1723 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac
1724 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac
1725 ad_fac=0.0_r8
1726 END DO
1727 END DO
1728 END IF
1729
1730
1731
1732 DO j=jstrv-1,jend
1733 DO i=istru-1,iend
1734
1735
1736 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+ad_dstp(i,j)
1737 ad_h(i,j)=ad_h(i,j)+ad_dstp(i,j)
1738 ad_dstp(i,j)=0.0_r8
1739 END DO
1740 END DO
1741
1742
1743
1744
1745
1746#ifdef SOLVE3D
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1767 DO j=jstrv,jend
1768 DO i=istr,iend
1769# ifdef DIAGNOSTICS_UV
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781# endif
1782
1783
1784 ad_rvfrc(i,j)=ad_rvfrc(i,j)+ad_rv(i,j,0,nstp)
1785 ad_rv(i,j,0,nstp)=0.0_r8
1786
1787
1788 ad_rvfrc(i,j)=ad_rvfrc(i,j)+ad_rhs_vbar(i,j)
1789
1790
1791 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)-ad_rvfrc(i,j)
1792 END DO
1793 END DO
1794 DO j=jstr,jend
1795 DO i=istru,iend
1796# ifdef DIAGNOSTICS_UV
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808# endif
1809
1810
1811 ad_rufrc(i,j)=ad_rufrc(i,j)+ad_ru(i,j,0,nstp)
1812 ad_ru(i,j,0,nstp)=0.0_r8
1813
1814
1815 ad_rufrc(i,j)=ad_rufrc(i,j)+ad_rhs_ubar(i,j)
1816
1817
1818 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)-ad_rufrc(i,j)
1819 END DO
1820 END DO
1822 DO j=jstrv,jend
1823 DO i=istr,iend
1824# ifdef DIAGNOSTICS_UV
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839# endif
1840
1841
1842 ad_rvfrc(i,j)=ad_rvfrc(i,j)+ad_rv(i,j,0,nstp)
1843 ad_rv(i,j,0,nstp)=0.0_r8
1844
1845
1846
1847
1848 ad_rvfrc(i,j)=ad_rvfrc(i,j)+1.5_r8*ad_rhs_vbar(i,j)
1849 ad_rv(i,j,0,nnew)=ad_rv(i,j,0,nnew)- &
1850 & 0.5_r8*ad_rhs_vbar(i,j)
1851
1852
1853 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)-ad_rvfrc(i,j)
1854 END DO
1855 END DO
1856 DO j=jstr,jend
1857 DO i=istru,iend
1858# ifdef DIAGNOSTICS_UV
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873# endif
1874
1875
1876 ad_rufrc(i,j)=ad_rufrc(i,j)+ad_ru(i,j,0,nstp)
1877 ad_ru(i,j,0,nstp)=0.0_r8
1878
1879
1880
1881
1882 ad_rufrc(i,j)=ad_rufrc(i,j)+1.5_r8*ad_rhs_ubar(i,j)
1883 ad_ru(i,j,0,nnew)=ad_ru(i,j,0,nnew)- &
1884 & 0.5_r8*ad_rhs_ubar(i,j)
1885
1886
1887 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)-ad_rufrc(i,j)
1888 END DO
1889 END DO
1890 ELSE
1891 cff1=23.0_r8/12.0_r8
1892 cff2=16.0_r8/12.0_r8
1893 cff3= 5.0_r8/12.0_r8
1894 DO j=jstrv,jend
1895 DO i=istr,iend
1896# ifdef DIAGNOSTICS_UV
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914# endif
1915
1916
1917 ad_rvfrc(i,j)=ad_rvfrc(i,j)+ad_rv(i,j,0,nstp)
1918 ad_rv(i,j,0,nstp)=0.0_r8
1919
1920
1921
1922
1923
1924 ad_rvfrc(i,j)=ad_rvfrc(i,j)+cff1*ad_rhs_vbar(i,j)
1925 ad_rv(i,j,0,nnew)=ad_rv(i,j,0,nnew)- &
1926 & cff2*ad_rhs_vbar(i,j)
1927 ad_rv(i,j,0,nstp)=ad_rv(i,j,0,nstp)+ &
1928 & cff3*ad_rhs_vbar(i,j)
1929
1930
1931 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)-ad_rvfrc(i,j)
1932 END DO
1933 END DO
1934 DO j=jstr,jend
1935 DO i=istru,iend
1936# ifdef DIAGNOSTICS_UV
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954# endif
1955
1956
1957 ad_rufrc(i,j)=ad_rufrc(i,j)+ad_ru(i,j,0,nstp)
1958 ad_ru(i,j,0,nstp)=0.0_r8
1959
1960
1961
1962
1963
1964 ad_rufrc(i,j)=ad_rufrc(i,j)+cff1*ad_rhs_ubar(i,j)
1965 ad_ru(i,j,0,nnew)=ad_ru(i,j,0,nnew)- &
1966 & cff2*ad_rhs_ubar(i,j)
1967 ad_ru(i,j,0,nstp)=ad_ru(i,j,0,nstp)+ &
1968 & cff3*ad_rhs_ubar(i,j)
1969
1970
1971 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)-ad_rufrc(i,j)
1972 END DO
1973 END DO
1974 END IF
1975 ELSE
1976 DO j=jstrv,jend
1977 DO i=istr,iend
1978# ifdef DIAGNOSTICS_UV
1979
1980
1981
1982
1983
1984
1985# endif
1986
1987
1988 ad_rvfrc(i,j)=ad_rvfrc(i,j)+ad_rhs_vbar(i,j)
1989 END DO
1990 END DO
1991 DO j=jstr,jend
1992 DO i=istru,iend
1993# ifdef DIAGNOSTICS_UV
1994
1995
1996
1997
1998
1999
2000# endif
2001
2002
2003 ad_rufrc(i,j)=ad_rufrc(i,j)+ad_rhs_ubar(i,j)
2004 END DO
2005 END DO
2006 END IF
2007#else
2008
2009
2010
2011
2012
2013 DO j=jstr,jend
2014 DO i=istru,iend
2015# ifdef DIAGNOSTICS_UV
2016
2017# endif
2018
2019
2020 ad_fac=ad_fac+ad_rhs_ubar(i,j)
2021
2022
2023 ad_sustr(i,j)=ad_sustr(i,j)+om_u(i,j)*on_u(i,j)*ad_fac
2024 ad_fac=0.0_r8
2025 END DO
2026 END DO
2027 DO j=jstrv,jend
2028 DO i=istr,iend
2029# ifdef DIAGNOSTICS_UV
2030
2031# endif
2032
2033
2034 ad_fac=ad_fac+ad_rhs_vbar(i,j)
2035
2036
2037 ad_svstr(i,j)=ad_svstr(i,j)+om_v(i,j)*on_v(i,j)*ad_fac
2038 ad_fac=0.0_r8
2039 END DO
2040 END DO
2041#endif
2042
2043
2044
2045
2046
2048 DO j=jstrv,jend
2049 DO i=istr,iend
2050 cff=0.25_r8*(
clima(ng)%M2nudgcof(i,j-1)+ &
2051 &
clima(ng)%M2nudgcof(i,j ))* &
2052 & om_v(i,j)*on_v(i,j)
2053
2054
2055
2056
2057
2058
2059
2060 adfac=cff*ad_rhs_vbar(i,j)
2061 adfac1=adfac*(drhs(i,j-1)+drhs(i,j))
2062 adfac2=adfac*(
clima(ng)%vbarclm(i,j)-vbar(i,j,krhs))
2063 ad_vbar(i,j,krhs)=ad_vbar(i,j,krhs)-adfac1
2064 ad_drhs(i,j-1)=ad_drhs(i,j-1)+adfac2
2065 ad_drhs(i,j )=ad_drhs(i,j )+adfac2
2066 END DO
2067 END DO
2068 DO j=jstr,jend
2069 DO i=istru,iend
2070 cff=0.25_r8*(
clima(ng)%M2nudgcof(i-1,j)+ &
2071 &
clima(ng)%M2nudgcof(i ,j))* &
2072 & om_u(i,j)*on_u(i,j)
2073
2074
2075
2076
2077
2078
2079
2080 adfac=cff*ad_rhs_ubar(i,j)
2081 adfac1=adfac*(drhs(i-1,j)+drhs(i,j))
2082 adfac2=adfac*(
clima(ng)%ubarclm(i,j)-ubar(i,j,krhs))
2083 ad_ubar(i,j,krhs)=ad_ubar(i,j,krhs)-adfac1
2084 ad_drhs(i-1,j)=ad_drhs(i-1,j)+adfac2
2085 ad_drhs(i ,j)=ad_drhs(i ,j)+adfac2
2086 END DO
2087 END DO
2088 END IF
2089
2090#ifndef SOLVE3D
2091
2092
2093
2094
2095
2096 DO j=jstrv,jend
2097 DO i=istr,iend
2098# ifdef DIAGNOSTICS_UV
2099
2100# endif
2101
2102
2103 ad_fac=ad_fac-ad_rhs_vbar(i,j)
2104
2105
2106 ad_bvstr(i,j)=ad_bvstr(i,j)+om_v(i,j)*on_v(i,j)*ad_fac
2107 ad_fac=0.0_r8
2108 END DO
2109 END DO
2110 DO j=jstr,jend
2111 DO i=istru,iend
2112# ifdef DIAGNOSTICS_UV
2113
2114# endif
2115
2116
2117 ad_fac=ad_fac-ad_rhs_ubar(i,j)
2118
2119
2120 ad_bustr(i,j)=ad_bustr(i,j)+om_u(i,j)*on_u(i,j)*ad_fac
2121 ad_fac=0.0_r8
2122 END DO
2123 END DO
2124#else
2125# ifdef DIAGNOSTICS_UV
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139# endif
2140#endif
2141#if defined WEC_MELLOR && \
2142 (
2143
2144
2145
2146
2147
2148 DO j=jstrv,jend
2149 DO i=istr,iend
2150# ifdef DIAGNOSTICS_UV
2151
2152# endif
2153# ifndef SOLVE3D
2154
2155
2156 ad_cff2=ad_cff2-ad_rhs_vbar(i,j)
2157 ad_cff1=ad_cff1-ad_rhs_vbar(i,j)
2158# endif
2159
2160
2161 ad_rvlag2d(i,j)=ad_rvlag2d(i,j)+ad_cff2
2162 ad_cff2=0.0_r8
2163
2164
2165 ad_rvstr2d(i,j)=ad_rvstr2d(i,j)+ &
2166 & om_v(i,j)*on_v(i,j)*ad_cff1
2167 ad_cff1=0.0_r8
2168 END DO
2169 END DO
2170 DO j=jstr,jend
2171 DO i=istru,iend
2172# ifdef DIAGNOSTICS_UV
2173
2174# endif
2175# ifndef SOLVE3D
2176
2177
2178 ad_cff2=ad_cff2-ad_rhs_ubar(i,j)
2179 ad_cff1=ad_cff1-ad_rhs_ubar(i,j)
2180# endif
2181
2182
2183 ad_rulag2d(i,j)=ad_rulag2d(i,j)+ad_cff2
2184 ad_cff2=0.0_r8
2185
2186
2187 ad_rustr2d(i,j)=ad_rustr2d(i,j)+ &
2188 & om_u(i,j)*on_u(i,j)*ad_cff1
2189 ad_cff1=0.0_r8
2190 END DO
2191 END DO
2192#endif
2193#if defined UV_VIS2 || defined UV_VIS4
2194
2195
2196
2197
2198
2199# ifdef UV_VIS4
2200 DO j=jstrm1,jendp2
2201 DO i=istrm1,iendp2
2202# else
2203 DO j=jstr,jend+1
2204 DO i=istr,iend+1
2205# endif
2206 drhs_p(i,j)=0.25_r8*(drhs(i,j )+drhs(i-1,j )+ &
2207 & drhs(i,j-1)+drhs(i-1,j-1))
2208 END DO
2209 END DO
2210#endif
2211#ifdef UV_VIS4
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221 DO j=jstrvm2,jendp1
2222 DO i=istrum2,iendp1
2223 cff=visc4_r(i,j)*0.5_r8* &
2224 & (pmon_r(i,j)* &
2225 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,krhs)- &
2226 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,krhs))- &
2227 & pnom_r(i,j)* &
2228 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,krhs)- &
2229 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,krhs)))
2230 ufx(i,j)=on_r(i,j)*on_r(i,j)*cff
2231 vfe(i,j)=om_r(i,j)*om_r(i,j)*cff
2232 END DO
2233 END DO
2234 DO j=jstrm1,jendp2
2235 DO i=istrm1,iendp2
2236 cff=visc4_p(i,j)*0.5_r8* &
2237 & (pmon_p(i,j)* &
2238 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,krhs)- &
2239 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,krhs))+ &
2240 & pnom_p(i,j)* &
2241 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,krhs)- &
2242 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,krhs)))
2243# ifdef MASKING
2244 cff=cff*pmask(i,j)
2245# endif
2246 ufe(i,j)=om_p(i,j)*om_p(i,j)*cff
2247 vfx(i,j)=on_p(i,j)*on_p(i,j)*cff
2248 END DO
2249 END DO
2250
2251
2252
2253 DO j=jstrm1,jendp1
2254 DO i=istrum1,iendp1
2255 lapu(i,j)=0.125_r8* &
2256 & (pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))* &
2257 & ((pn(i-1,j)+pn(i,j))* &
2258 & (ufx(i,j )-ufx(i-1,j))+ &
2259 & (pm(i-1,j)+pm(i,j))* &
2260 & (ufe(i,j+1)-ufe(i ,j)))
2261 END DO
2262 END DO
2263 DO j=jstrvm1,jendp1
2264 DO i=istrm1,iendp1
2265 lapv(i,j)=0.125_r8* &
2266 & (pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))* &
2267 & ((pn(i,j-1)+pn(i,j))* &
2268 & (vfx(i+1,j)-vfx(i,j ))- &
2269 & (pm(i,j-1)+pm(i,j))* &
2270 & (vfe(i ,j)-vfe(i,j-1)))
2271 END DO
2272 END DO
2273
2274
2275
2276
2277
2279 IF (
domain(ng)%Western_Edge(tile))
THEN
2281 DO j=jstrm1,jendp1
2282 lapu(istru-1,j)=0.0_r8
2283 END DO
2284 ELSE
2285 DO j=jstrm1,jendp1
2286 lapu(istru-1,j)=lapu(istru,j)
2287 END DO
2288 END IF
2290 DO j=jstrvm1,jendp1
2291 lapv(istr-1,j)=
gamma2(ng)*lapv(istr,j)
2292 END DO
2293 ELSE
2294 DO j=jstrvm1,jendp1
2295 lapv(istr-1,j)=0.0_r8
2296 END DO
2297 END IF
2298 END IF
2299 END IF
2300
2302 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2304 DO j=jstrm1,jendp1
2305 lapu(iend+1,j)=0.0_r8
2306 END DO
2307 ELSE
2308 DO j=jstrm1,jendp1
2309 lapu(iend+1,j)=lapu(iend,j)
2310 END DO
2311 END IF
2313 DO j=jstrvm1,jendp1
2314 lapv(iend+1,j)=
gamma2(ng)*lapv(iend,j)
2315 END DO
2316 ELSE
2317 DO j=jstrvm1,jendp1
2318 lapv(iend+1,j)=0.0_r8
2319 END DO
2320 END IF
2321 END IF
2322 END IF
2323
2325 IF (
domain(ng)%Southern_Edge(tile))
THEN
2327 DO i=istrum1,iendp1
2328 lapu(i,jstr-1)=
gamma2(ng)*lapu(i,jstr)
2329 END DO
2330 ELSE
2331 DO i=istrum1,iendp1
2332 lapu(i,jstr-1)=0.0_r8
2333 END DO
2334 END IF
2336 DO i=istrm1,iendp1
2337 lapv(i,jstrv-1)=0.0_r8
2338 END DO
2339 ELSE
2340 DO i=istrm1,iendp1
2341 lapv(i,jstrv-1)=lapv(i,jstrv)
2342 END DO
2343 END IF
2344 END IF
2345 END IF
2346
2348 IF (
domain(ng)%Northern_Edge(tile))
THEN
2350 DO i=istrum1,iendp1
2351 lapu(i,jend+1)=
gamma2(ng)*lapu(i,jend)
2352 END DO
2353 ELSE
2354 DO i=istrum1,iendp1
2355 lapu(i,jend+1)=0.0_r8
2356 END DO
2357 END IF
2359 DO i=istrm1,iendp1
2360 lapv(i,jend+1)=0.0_r8
2361 END DO
2362 ELSE
2363 DO i=istrm1,iendp1
2364 lapv(i,jend+1)=lapv(i,jend)
2365 END DO
2366 END IF
2367 END IF
2368 END IF
2369
2372 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
2373 lapu(istr ,jstr-1)=0.5_r8*(lapu(istr+1,jstr-1)+ &
2374 & lapu(istr ,jstr ))
2375 lapv(istr-1,jstr )=0.5_r8*(lapv(istr-1,jstr+1)+ &
2376 & lapv(istr ,jstr ))
2377 END IF
2378 END IF
2379
2382 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
2383 lapu(iend+1,jstr-1)=0.5_r8*(lapu(iend ,jstr-1)+ &
2384 & lapu(iend+1,jstr ))
2385 lapv(iend+1,jstr )=0.5_r8*(lapv(iend ,jstr )+ &
2386 & lapv(iend+1,jstr+1))
2387 END IF
2388 END IF
2389
2392 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
2393 lapu(istr ,jend+1)=0.5_r8*(lapu(istr+1,jend+1)+ &
2394 & lapu(istr ,jend ))
2395 lapv(istr-1,jend+1)=0.5_r8*(lapv(istr ,jend+1)+ &
2396 & lapv(istr-1,jend ))
2397 END IF
2398 END IF
2399
2402 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
2403 lapu(iend+1,jend+1)=0.5_r8*(lapu(iend ,jend+1)+ &
2404 & lapu(iend+1,jend ))
2405 lapv(iend+1,jend+1)=0.5_r8*(lapv(iend ,jend+1)+ &
2406 & lapv(iend+1,jend ))
2407 END IF
2408 END IF
2409
2410
2411
2412 DO j=jstrv,jend
2413 DO i=istr,iend
2414# if defined DIAGNOSTICS_UV
2415
2416
2417
2418# endif
2419
2420
2421 ad_fac=ad_fac+ad_rhs_vbar(i,j)
2422
2423
2424 ad_cff1=ad_cff1+ad_fac
2425 ad_cff2=ad_cff2-ad_fac
2426 ad_fac=0.0_r8
2427
2428
2429
2430 adfac=0.5_r8*(pm(i,j-1)+pm(i,j))*ad_cff2
2431 ad_vfe(i,j-1)=ad_vfe(i,j-1)-adfac
2432 ad_vfe(i,j )=ad_vfe(i,j )+adfac
2433 ad_cff2=0.0_r8
2434
2435
2436
2437 adfac=0.5_r8*(pn(i,j-1)+pn(i,j))*ad_cff1
2438 ad_vfx(i ,j)=ad_vfx(i ,j)-adfac
2439 ad_vfx(i+1,j)=ad_vfx(i+1,j)+adfac
2440 ad_cff1=0.0_r8
2441 END DO
2442 END DO
2443 DO j=jstr,jend
2444 DO i=istru,iend
2445# if defined DIAGNOSTICS_UV
2446
2447
2448
2449# endif
2450
2451
2452 ad_fac=ad_fac+ad_rhs_ubar(i,j)
2453
2454
2455 ad_cff1=ad_cff1+ad_fac
2456 ad_cff2=ad_cff2+ad_fac
2457 ad_fac=0.0_r8
2458
2459
2460
2461 adfac=0.5_r8*(pm(i-1,j)+pm(i,j))*ad_cff2
2462 ufe(i,j )=ufe(i,j )-adfac
2463 ufe(i,j+1)=ufe(i,j+1)+adfac
2464 ad_cff2=0.0_r8
2465
2466
2467
2468 adfac=0.5_r8*(pn(i-1,j)+pn(i,j))*ad_cff1
2469 ad_ufx(i-1,j)=ad_ufx(i-1,j)-adfac
2470 ad_ufx(i,j )=ad_ufx(i,j )+adfac
2471 ad_cff1=0.0_r8
2472 END DO
2473 END DO
2474
2475
2476
2477
2478 DO j=jstr,jend+1
2479 DO i=istr,iend+1
2480
2481
2482
2483 ad_cff=ad_cff+ &
2484 & on_p(i,j)*on_p(i,j)*ad_vfx(i,j)+ &
2485 & om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
2486 ad_vfx(i,j)=0.0_r8
2487 ad_ufe(i,j)=0.0_r8
2488# ifdef MASKING
2489
2490
2491 ad_cff=ad_cff*pmask(i,j)
2492# endif
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509 adfac=visc4_p(i,j)*0.5_r8*ad_cff
2510 adfac1=adfac*drhs_p(i,j)*pmon_p(i,j)
2511 adfac2=adfac*drhs_p(i,j)*pnom_p(i,j)
2512 ad_drhs_p(i,j)=ad_drhs_p(i,j)+ &
2513 & (pmon_p(i,j)* &
2514 & ((pn(i ,j-1)+pn(i ,j))*lapv(i ,j)- &
2515 & (pn(i-1,j-1)+pn(i-1,j))*lapv(i-1,j))+ &
2516 & pnom_p(i,j)* &
2517 & ((pm(i-1,j )+pm(i,j ))*lapu(i,j )- &
2518 & (pm(i-1,j-1)+pm(i,j-1))*lapu(i,j-1)))* &
2519 & adfac
2520 ad_lapv(i ,j)=ad_lapv(i ,j)+ &
2521 & (pn(i ,j-1)+pn(i ,j))*adfac1
2522 ad_lapv(i-1,j)=ad_lapv(i-1,j)- &
2523 & (pn(i-1,j-1)+pn(i-1,j))*adfac1
2524 ad_lapu(i,j )=ad_lapu(i,j )+ &
2525 & (pm(i-1,j )+pm(i,j ))*adfac2
2526 ad_lapu(i,j-1)=ad_lapu(i,j-1)- &
2527 & (pm(i-1,j-1)+pm(i,j-1))*adfac2
2528 ad_cff=0.0_r8
2529 END DO
2530 END DO
2531 DO j=jstrv-1,jend
2532 DO i=istru-1,iend
2533
2534
2535
2536 ad_cff=ad_cff+ &
2537 & om_r(i,j)*om_r(i,j)*ad_vfe(i,j)+ &
2538 & on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
2539 ad_vfe(i,j)=0.0_r8
2540 ad_ufx(i,j)=0.0_r8
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557 adfac=visc4_r(i,j)*0.5_r8*ad_cff
2558 adfac1=adfac*drhs(i,j)*pmon_r(i,j)
2559 adfac2=adfac*drhs(i,j)*pnom_r(i,j)
2560 ad_drhs(i,j)=ad_drhs(i,j)+ &
2561 & (pmon_r(i,j)* &
2562 & ((pn(i ,j)+pn(i+1,j))*lapu(i+1,j)- &
2563 & (pn(i-1,j)+pn(i ,j))*lapu(i ,j))- &
2564 & pnom_r(i,j)* &
2565 & ((pm(i,j )+pm(i,j+1))*lapv(i,j+1)- &
2566 & (pm(i,j-1)+pm(i,j ))*lapv(i,j )))*adfac
2567 ad_lapu(i+1,j)=ad_lapu(i+1,j)+ &
2568 & (pn(i ,j)+pn(i+1,j))*adfac1
2569 ad_lapu(i ,j)=ad_lapu(i ,j)- &
2570 & (pn(i-1,j)+pn(i ,j))*adfac1
2571 ad_lapv(i,j+1)=ad_lapv(i,j+1)- &
2572 & (pm(i,j )+pm(i,j+1))*adfac2
2573 ad_lapv(i,j )=ad_lapv(i,j )+ &
2574 & (pm(i,j-1)+pm(i,j ))*adfac2
2575 ad_cff=0.0_r8
2576 END DO
2577 END DO
2578
2579
2580
2581
2582
2585 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
2586
2587
2588
2589 adfac=0.5_r8*ad_lapv(iend+1,jend+1)
2590 ad_lapv(iend+1,jend )=ad_lapv(iend+1,jend )+adfac
2591 ad_lapv(iend ,jend+1)=ad_lapv(iend ,jend+1)+adfac
2592 ad_lapv(iend+1,jend+1)=0.0_r8
2593
2594
2595
2596 adfac=0.5_r8*ad_lapu(iend+1,jend+1)
2597 ad_lapu(iend+1,jend )=ad_lapu(iend+1,jend )+adfac
2598 ad_lapu(iend ,jend+1)=ad_lapu(iend ,jend+1)+adfac
2599 ad_lapu(iend+1,jend+1)=0.0_r8
2600 END IF
2601 END IF
2602
2605 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
2606
2607
2608
2609 adfac=0.5_r8*ad_lapv(istr-1,jend+1)
2610 ad_lapv(istr-1,jend )=ad_lapv(istr-1,jend )+adfac
2611 ad_lapv(istr ,jend+1)=ad_lapv(istr ,jend+1)+adfac
2612 ad_lapv(istr-1,jend+1)=0.0_r8
2613
2614
2615
2616 adfac=0.5_r8*ad_lapu(istr ,jend+1)
2617 ad_lapu(istr ,jend )=ad_lapu(istr ,jend )+adfac
2618 ad_lapu(istr+1,jend+1)=ad_lapu(istr+1,jend+1)+adfac
2619 ad_lapu(istr ,jend+1)=0.0_r8
2620 END IF
2621 END IF
2622
2625 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
2626
2627
2628
2629 adfac=0.5_r8*ad_lapv(iend+1,jstr )
2630 ad_lapv(iend ,jstr )=ad_lapv(iend ,jstr )+adfac
2631 ad_lapv(iend+1,jstr+1)=ad_lapv(iend+1,jstr+1)+adfac
2632 ad_lapv(iend+1,jstr )=0.0_r8
2633
2634
2635
2636 adfac=0.5_r8*ad_lapu(iend+1,jstr-1)
2637 ad_lapu(iend ,jstr-1)=ad_lapu(iend ,jstr-1)+adfac
2638 ad_lapu(iend+1,jstr )=ad_lapu(iend+1,jstr )+adfac
2639 ad_lapu(iend+1,jstr-1)=0.0_r8
2640 END IF
2641 END IF
2642
2645 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
2646
2647
2648
2649 adfac=0.5_r8*ad_lapv(istr-1,jstr )
2650 ad_lapv(istr ,jstr )=ad_lapv(istr ,jstr )+adfac
2651 ad_lapv(istr-1,jstr+1)=ad_lapv(istr-1,jstr+1)+adfac
2652 ad_lapv(istr-1,jstr )=0.0_r8
2653
2654
2655
2656 adfac=0.5_r8*ad_lapu(istr ,jstr-1)
2657 ad_lapu(istr+1,jstr-1)=ad_lapu(istr+1,jstr-1)+adfac
2658 ad_lapu(istr ,jstr )=ad_lapu(istr ,jstr )+adfac
2659 ad_lapu(istr ,jstr-1)=0.0_r8
2660 END IF
2661 END IF
2662
2664 IF (
domain(ng)%Northern_Edge(tile))
THEN
2666 DO i=istrm1,iendp1
2667
2668
2669 ad_lapv(i,jend+1)=0.0_r8
2670 END DO
2671 ELSE
2672 DO i=istrm1,iendp1
2673
2674
2675 ad_lapv(i,jend)=ad_lapv(i,jend)+ad_lapv(i,jend+1)
2676 ad_lapv(i,jend+1)=0.0_r8
2677 END DO
2678 END IF
2680 DO i=istrum1,iendp1
2681
2682
2683 ad_lapu(i,jend)=ad_lapu(i,jend)+ &
2684 &
gamma2(ng)*ad_lapu(i,jend+1)
2685 ad_lapu(i,jend+1)=0.0_r8
2686 END DO
2687 ELSE
2688 DO i=istrum1,iendp1
2689
2690
2691 ad_lapu(i,jend+1)=0.0_r8
2692 END DO
2693 END IF
2694 END IF
2695 END IF
2696
2698 IF (
domain(ng)%Southern_Edge(tile))
THEN
2700 DO i=istrm1,iendp1
2701
2702
2703 ad_lapv(i,jstrv-1)=0.0_r8
2704 END DO
2705 ELSE
2706 DO i=istrm1,iendp1
2707
2708
2709 ad_lapv(i,jstrv)=ad_lapv(i,jstrv)+ad_lapv(i,jstrv-1)
2710 ad_lapv(i,jstrv-1)=0.0_r8
2711 END DO
2712 END IF
2714 DO i=istrum1,iendp1
2715
2716
2717 ad_lapu(i,jstr)=ad_lapu(i,jstr)+ &
2718 &
gamma2(ng)*ad_lapu(i,jstr-1)
2719 ad_lapu(i,jstr-1)=0.0_r8
2720 END DO
2721 ELSE
2722 DO i=istrum1,iendp1
2723
2724
2725 ad_lapu(i,jstr-1)=0.0_r8
2726 END DO
2727 END IF
2728 END IF
2729 END IF
2730
2732 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2734 DO j=jstrvm1,jendp1
2735
2736
2737 ad_lapv(iend,j)=ad_lapv(iend,j)+ &
2738 &
gamma2(ng)*ad_lapv(iend+1,j)
2739 ad_lapv(iend+1,j)=0.0_r8
2740 END DO
2741 ELSE
2742 DO j=jstrvm1,jendp1
2743
2744
2745 ad_lapv(iend+1,j)=0.0_r8
2746 END DO
2747 END IF
2749 DO j=jstrm1,jendp1
2750
2751
2752 ad_lapu(iend+1,j)=0.0_r8
2753 END DO
2754 ELSE
2755 DO j=jstrm1,jendp1
2756
2757
2758 ad_lapu(iend,j)=ad_lapu(iend,j)+ad_lapu(iend+1,j)
2759 ad_lapu(iend+1,j)=0.0_r8
2760 END DO
2761 END IF
2762 END IF
2763 END IF
2764
2766 IF (
domain(ng)%Western_Edge(tile))
THEN
2768 DO j=jstrvm1,jendp1
2769
2770
2771 ad_lapv(istr,j)=ad_lapv(istr,j)+ &
2772 &
gamma2(ng)*ad_lapv(istr-1,j)
2773 ad_lapv(istr-1,j)=0.0_r8
2774 END DO
2775 ELSE
2776 DO j=jstrvm1,jendp1
2777
2778
2779 ad_lapv(istr-1,j)=0.0_r8
2780 END DO
2781 END IF
2783 DO j=jstrm1,jendp1
2784
2785
2786 ad_lapu(istru-1,j)=0.0_r8
2787 END DO
2788 ELSE
2789 DO j=jstrm1,jendp1
2790
2791
2792 ad_lapu(istru,j)=ad_lapu(istru,j)+ad_lapu(istru-1,j)
2793 ad_lapu(istru-1,j)=0.0_r8
2794 END DO
2795 END IF
2796 END IF
2797 END IF
2798
2799
2800
2801 DO j=jstrvm1,jendp1
2802 DO i=istrm1,iendp1
2803
2804
2805
2806
2807
2808
2809
2810 adfac=0.125_r8*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))* &
2811 & ad_lapv(i,j)
2812 adfac1=adfac*(pn(i,j-1)+pn(i,j))
2813 adfac2=adfac*(pm(i,j-1)+pm(i,j))
2814 ad_vfx(i ,j)=ad_vfx(i ,j)-adfac1
2815 ad_vfx(i+1,j)=ad_vfx(i+1,j)+adfac1
2816 ad_vfe(i,j )=ad_vfe(i,j )-adfac2
2817 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac2
2818 ad_lapv(i,j)=0.0_r8
2819 END DO
2820 END DO
2821
2822 DO j=jstrm1,jendp1
2823 DO i=istrum1,iendp1
2824
2825
2826
2827
2828
2829
2830
2831 adfac=0.125_r8*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))* &
2832 & ad_lapu(i,j)
2833 adfac1=adfac*(pn(i-1,j)+pn(i,j))
2834 adfac2=adfac*(pm(i-1,j)+pm(i,j))
2835 ad_ufx(i-1,j)=ad_ufx(i-1,j)-adfac1
2836 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac1
2837 ad_ufe(i,j+1)=ad_ufe(i,j+1)+adfac2
2838 ad_ufe(i,j )=ad_ufe(i,j )-adfac2
2839 ad_lapu(i,j)=0.0_r8
2840 END DO
2841 END DO
2842
2843
2844
2845
2846
2847
2848
2849
2850 DO j=jstrm1,jendp2
2851 DO i=istrm1,iendp2
2852
2853
2854
2855 ad_cff=ad_cff+ &
2856 & on_p(i,j)*on_p(i,j)*ad_vfx(i,j)+ &
2857 & om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
2858 ad_vfx(i,j)=0.0_r8
2859 ad_ufe(i,j)=0.0_r8
2860# ifdef MASKING
2861
2862
2863 ad_cff=ad_cff*pmask(i,j)
2864# endif
2865
2866
2867
2868
2869
2870
2871
2872
2873 adfac=visc4_p(i,j)*0.5_r8*ad_cff
2874 adfac1=adfac*pmon_p(i,j)
2875 adfac2=adfac*pnom_p(i,j)
2876 ad_vbar(i-1,j,krhs)=ad_vbar(i-1,j,krhs)- &
2877 & (pn(i-1,j-1)+pn(i-1,j))*adfac1
2878 ad_vbar(i ,j,krhs)=ad_vbar(i ,j,krhs)+ &
2879 & (pn(i ,j-1)+pn(i ,j))*adfac1
2880 ad_ubar(i,j-1,krhs)=ad_ubar(i,j-1,krhs)- &
2881 & (pm(i-1,j-1)+pm(i,j-1))*adfac2
2882 ad_ubar(i,j ,krhs)=ad_ubar(i,j ,krhs)+ &
2883 & (pm(i-1,j )+pm(i,j ))*adfac2
2884 ad_cff=0.0_r8
2885 END DO
2886 END DO
2887 DO j=jstrvm2,jendp1
2888 DO i=istrum2,iendp1
2889
2890
2891
2892 ad_cff=ad_cff+ &
2893 & om_r(i,j)*om_r(i,j)*ad_vfe(i,j)+ &
2894 & on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
2895 ad_vfe(i,j)=0.0_r8
2896 ad_ufx(i,j)=0.0_r8
2897
2898
2899
2900
2901
2902
2903
2904
2905 adfac=visc4_r(i,j)*0.5_r8*ad_cff
2906 adfac1=adfac*pmon_r(i,j)
2907 adfac2=adfac*pnom_r(i,j)
2908 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+ &
2909 & (pn(i ,j)+pn(i+1,j))*adfac1
2910 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)- &
2911 & (pn(i-1,j)+pn(i ,j))*adfac1
2912 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)- &
2913 & (pm(i,j )+pm(i,j+1))*adfac2
2914 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+ &
2915 & (pm(i,j-1)+pm(i,j ))*adfac2
2916 ad_cff=0.0_r8
2917 END DO
2918 END DO
2919#endif
2920#ifdef UV_VIS2
2921
2922
2923
2924
2925
2926
2927
2928 DO j=jstrv,jend
2929 DO i=istr,iend
2930# if defined DIAGNOSTICS_UV
2931
2932
2933
2934# endif
2935
2936
2937 ad_fac=ad_fac+ad_rhs_vbar(i,j)
2938
2939
2940 ad_cff1=ad_cff1+ad_fac
2941 ad_cff2=ad_cff2-ad_fac
2942 ad_fac=0.0_r8
2943
2944
2945
2946 adfac=0.5_r8*(pm(i,j-1)+pm(i,j))*ad_cff2
2947 ad_vfe(i,j-1)=ad_vfe(i,j-1)-adfac
2948 ad_vfe(i ,j)=ad_vfe(i ,j)+adfac
2949 ad_cff2=0.0_r8
2950
2951
2952
2953 adfac=0.5_r8*(pn(i,j-1)+pn(i,j))*ad_cff1
2954 ad_vfx(i ,j)=ad_vfx(i ,j)-adfac
2955 ad_vfx(i+1,j)=ad_vfx(i+1,j)+adfac
2956 ad_cff1=0.0_r8
2957 END DO
2958 END DO
2959 DO j=jstr,jend
2960 DO i=istru,iend
2961# if defined DIAGNOSTICS_UV
2962
2963
2964
2965# endif
2966
2967
2968 ad_fac=ad_fac+ad_rhs_ubar(i,j)
2969
2970
2971 ad_cff1=ad_cff1+ad_fac
2972 ad_cff2=ad_cff2+ad_fac
2973 ad_fac=0.0_r8
2974
2975
2976
2977 adfac=0.5_r8*(pm(i-1,j)+pm(i,j))*ad_cff2
2978 ad_ufe(i,j )=ad_ufe(i,j )-adfac
2979 ad_ufe(i,j+1)=ad_ufe(i,j+1)+adfac
2980 ad_cff2=0.0_r8
2981
2982
2983
2984 adfac=0.5_r8*(pn(i-1,j)+pn(i,j))*ad_cff1
2985 ad_ufx(i-1,j)=ad_ufx(i-1,j)-adfac
2986 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
2987 ad_cff1=0.0_r8
2988 END DO
2989 END DO
2990
2991
2992
2993
2994 DO j=jstr,jend+1
2995 DO i=istr,iend+1
2996
2997
2998
2999 ad_cff=ad_cff+ &
3000 & on_p(i,j)*on_p(i,j)*ad_vfx(i,j)+ &
3001 & om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
3002 ad_vfx(i,j)=0.0_r8
3003 ad_ufe(i,j)=0.0_r8
3004# ifdef MASKING
3005
3006
3007 ad_cff=ad_cff*pmask(i,j)
3008# endif
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025 adfac=visc2_p(i,j)*0.5_r8*ad_cff
3026 adfac1=adfac*drhs_p(i,j)
3027 adfac2=adfac1*pmon_p(i,j)
3028 adfac3=adfac1*pnom_p(i,j)
3029 ad_drhs_p(i,j)=ad_drhs_p(i,j)+ &
3030 & (pmon_p(i,j)* &
3031 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,krhs)- &
3032 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,krhs))+ &
3033 & pnom_p(i,j)* &
3034 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,krhs)- &
3035 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,krhs)))*&
3036 & adfac
3037 ad_vbar(i-1,j,krhs)=ad_vbar(i-1,j,krhs)- &
3038 & (pn(i-1,j-1)+pn(i-1,j))*adfac2
3039 ad_vbar(i ,j,krhs)=ad_vbar(i ,j,krhs)+ &
3040 & (pn(i ,j-1)+pn(i ,j))*adfac2
3041 ad_ubar(i,j-1,krhs)=ad_ubar(i,j-1,krhs)- &
3042 & (pm(i-1,j-1)+pm(i,j-1))*adfac3
3043 ad_ubar(i,j ,krhs)=ad_ubar(i,j ,krhs)+ &
3044 & (pm(i-1,j )+pm(i,j ))*adfac3
3045 ad_cff=0.0_r8
3046 END DO
3047 END DO
3048 DO j=jstrv-1,jend
3049 DO i=istru-1,iend
3050
3051
3052
3053 ad_cff=ad_cff+ &
3054 & om_r(i,j)*om_r(i,j)*ad_vfe(i,j)+ &
3055 & on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
3056 ad_vfe(i,j)=0.0_r8
3057 ad_ufx(i,j)=0.0_r8
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074 adfac=visc2_r(i,j)*0.5_r8*ad_cff
3075 adfac1=adfac*drhs(i,j)
3076 adfac2=adfac1*pmon_r(i,j)
3077 adfac3=adfac1*pnom_r(i,j)
3078 ad_drhs(i,j)=ad_drhs(i,j)+ &
3079 & (pmon_r(i,j)* &
3080 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,krhs)- &
3081 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,krhs))- &
3082 & pnom_r(i,j)* &
3083 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,krhs)- &
3084 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,krhs)))* &
3085 & adfac
3086 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)- &
3087 & (pn(i-1,j)+pn(i ,j))*adfac2
3088 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+ &
3089 & (pn(i ,j)+pn(i+1,j))*adfac2
3090 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+ &
3091 & (pm(i,j-1)+pm(i,j ))*adfac3
3092 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)- &
3093 & (pm(i,j )+pm(i,j+1))*adfac3
3094 ad_cff=0.0_r8
3095 END DO
3096 END DO
3097#endif
3098#if defined UV_VIS2 || defined UV_VIS4
3099
3100
3101
3102
3103
3104# ifdef UV_VIS4
3105 DO j=jstrm1,jendp2
3106 DO i=istrm1,iendp2
3107# else
3108 DO j=jstr,jend+1
3109 DO i=istr,iend+1
3110# endif
3111 drhs_p(i,j)=0.25_r8*(drhs(i,j )+drhs(i-1,j )+ &
3112 & drhs(i,j-1)+drhs(i-1,j-1))
3113
3114
3115
3116 adfac=0.25_r8*ad_drhs_p(i,j)
3117 ad_drhs(i-1,j )=ad_drhs(i-1,j )+adfac
3118 ad_drhs(i ,j )=ad_drhs(i ,j )+adfac
3119 ad_drhs(i-1,j-1)=ad_drhs(i-1,j-1)+adfac
3120 ad_drhs(i ,j-1)=ad_drhs(i ,j-1)+adfac
3121 ad_drhs_p(i,j)=0.0_r8
3122 END DO
3123 END DO
3124#endif
3125#if defined CURVGRID && defined UV_ADV
3126
3127
3128
3129
3130
3131 DO j=jstrv,jend
3132 DO i=istr,iend
3133# if defined DIAGNOSTICS_UV
3134
3135
3136
3137
3138# endif
3139
3140
3141 ad_fac1=ad_fac1-ad_rhs_vbar(i,j)
3142
3143
3144 adfac=0.5_r8*ad_fac1
3145 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac
3146 ad_vfe(i,j )=ad_vfe(i,j )+adfac
3147 ad_fac1=0.0_r8
3148 END DO
3149 END DO
3150 DO j=jstr,jend
3151 DO i=istru,iend
3152# if defined DIAGNOSTICS_UV
3153
3154
3155
3156
3157# endif
3158
3159
3160 ad_fac1=ad_fac1+ad_rhs_ubar(i,j)
3161
3162
3163 adfac=0.5_r8*ad_fac1
3164 ad_ufx(i-1,j)=ad_ufx(i-1,j)+adfac
3165 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
3166 ad_fac1=0.0_r8
3167 END DO
3168 END DO
3169 DO j=jstrv-1,jend
3170 DO i=istru-1,iend
3171 cff1=0.5_r8*(vbar(i,j ,krhs)+ &
3172# ifdef WEC_MELLOR
3173 & vbar_stokes(i,j )+ &
3174 & vbar_stokes(i,j+1)+ &
3175# endif
3176 & vbar(i,j+1,krhs))
3177 cff2=0.5_r8*(ubar(i ,j,krhs)+ &
3178# ifdef WEC_MELLOR
3179 & ubar_stokes(i ,j)+ &
3180 & ubar_stokes(i+1,j)+ &
3181# endif
3182 & ubar(i+1,j,krhs))
3183 cff3=cff1*dndx(i,j)
3184 cff4=cff2*dmde(i,j)
3185 cff=drhs(i,j)*(cff3-cff4)
3186# if defined DIAGNOSTICS_UV
3187
3188
3189
3190# endif
3191
3192
3193
3194 ad_cff=ad_cff+ &
3195 & cff1*ad_ufx(i,j)+ &
3196 & cff2*ad_vfe(i,j)
3197 ad_cff1=ad_cff1+cff*ad_ufx(i,j)
3198 ad_cff2=ad_cff2+cff*ad_vfe(i,j)
3199 ad_ufx(i,j)=0.0_r8
3200 ad_vfe(i,j)=0.0_r8
3201
3202
3203
3204 adfac=drhs(i,j)*ad_cff
3205 ad_cff4=ad_cff4-adfac
3206 ad_cff3=ad_cff3+adfac
3207 ad_drhs(i,j)=ad_drhs(i,j)+(cff3-cff4)*ad_cff
3208 ad_cff=0.0_r8
3209
3210
3211 ad_cff2=ad_cff2+dmde(i,j)*ad_cff4
3212 ad_cff4=0.0_r8
3213
3214
3215 ad_cff1=ad_cff1+dndx(i,j)*ad_cff3
3216 ad_cff3=0.0_r8
3217
3218# ifdef WEC_MELLOR
3219
3220
3221# endif
3222
3223
3224 adfac=0.5_r8*ad_cff2
3225 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)+adfac
3226 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+adfac
3227# ifdef WEC_MELLOR
3228 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac
3229 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac
3230# endif
3231 ad_cff2=0.0_r8
3232
3233# ifdef WEC_MELLOR
3234
3235
3236# endif
3237
3238
3239 adfac=0.5_r8*ad_cff1
3240 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+adfac
3241 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+adfac
3242# ifdef WEC_MELLOR
3243 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac
3244 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac
3245# endif
3246 ad_cff1=0.0_r8
3247 END DO
3248 END DO
3249#endif
3250#ifdef UV_COR
3251
3252
3253
3254
3255
3256 DO j=jstrv,jend
3257 DO i=istr,iend
3258# if defined DIAGNOSTICS_UV
3259
3260# endif
3261
3262
3263 ad_fac1=ad_fac1-ad_rhs_vbar(i,j)
3264
3265
3266 adfac=0.5_r8*ad_fac1
3267 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac
3268 ad_vfe(i,j )=ad_vfe(i,j )+adfac
3269 ad_fac1=0.0_r8
3270 END DO
3271 END DO
3272 DO j=jstr,jend
3273 DO i=istru,iend
3274# if defined DIAGNOSTICS_UV
3275
3276# endif
3277
3278
3279 ad_fac1=ad_fac1+ad_rhs_ubar(i,j)
3280
3281
3282 adfac=0.5_r8*ad_fac1
3283 ad_ufx(i-1,j)=ad_ufx(i-1,j)+adfac
3284 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
3285 ad_fac1=0.0_r8
3286 END DO
3287 END DO
3288 DO j=jstrv-1,jend
3289 DO i=istru-1,iend
3290 cff=0.5_r8*drhs(i,j)*fomn(i,j)
3291
3292# ifdef WEC_MELLOR
3293
3294
3295# endif
3296
3297
3298# ifdef WEC_MELLOR
3299
3300
3301# endif
3302
3303
3304 adfac=cff*ad_vfe(i,j)
3305 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)+adfac
3306 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+adfac
3307# ifdef WEC_MELLOR
3308 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac
3309 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac
3310# endif
3311 ad_cff=ad_cff+(ubar(i ,j,krhs)+ &
3312# ifdef WEC_MELLOR
3313 & ubar_stokes(i ,j)+ &
3314 & ubar_stokes(i+1,j)+ &
3315# endif
3316 & ubar(i+1,j,krhs))*ad_vfe(i,j)
3317 ad_vfe(i,j)=0.0_r8
3318
3319# ifdef WEC_MELLOR
3320
3321
3322# endif
3323
3324
3325# ifdef WEC_MELLOR
3326
3327
3328# endif
3329
3330
3331 adfac=cff*ad_ufx(i,j)
3332 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+adfac
3333 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+adfac
3334# ifdef WEC_MELLOR
3335 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac
3336 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac
3337# endif
3338 ad_cff=ad_cff+(vbar(i,j ,krhs)+ &
3339# ifdef WEC_MELLOR
3340 & vbar_stokes(i,j )+ &
3341 & vbar_stokes(i,j+1)+ &
3342# endif
3343 & vbar(i,j+1,krhs))*ad_ufx(i,j)
3344 ad_ufx(i,j)=0.0_r8
3345
3346
3347 ad_drhs(i,j)=ad_drhs(i,j)+0.5_r8*fomn(i,j)*ad_cff
3348 ad_cff=0.0_r8
3349 END DO
3350 END DO
3351#endif
3352#ifdef UV_ADV
3353
3354
3355
3356
3357
3358 DO j=jstrv,jend
3359 DO i=istr,iend
3360# if defined DIAGNOSTICS_UV
3361
3362
3363
3364# endif
3365
3366
3367 ad_fac=ad_fac-ad_rhs_vbar(i,j)
3368
3369
3370 ad_cff1=ad_cff1+ad_fac
3371 ad_cff2=ad_cff2+ad_fac
3372 ad_fac=0.0_r8
3373
3374
3375 ad_vfe(i,j-1)=ad_vfe(i,j-1)-ad_cff2
3376 ad_vfe(i,j )=ad_vfe(i,j )+ad_cff2
3377 ad_cff2=0.0_r8
3378
3379
3380 ad_vfx(i ,j)=ad_vfx(i ,j)-ad_cff1
3381 ad_vfx(i+1,j)=ad_vfx(i+1,j)+ad_cff1
3382 ad_cff1=0.0_r8
3383 END DO
3384 END DO
3385 DO j=jstr,jend
3386 DO i=istru,iend
3387# if defined DIAGNOSTICS_UV
3388
3389
3390
3391# endif
3392
3393
3394 ad_fac=ad_fac-ad_rhs_ubar(i,j)
3395
3396
3397 ad_cff1=ad_cff1+ad_fac
3398 ad_cff2=ad_cff2+ad_fac
3399 ad_fac=0.0_r8
3400
3401
3402 ad_ufe(i,j )=ad_ufe(i,j )-ad_cff2
3403 ad_ufe(i,j+1)=ad_ufe(i,j+1)+ad_cff2
3404 ad_cff2=0.0_r8
3405
3406
3407 ad_ufx(i-1,j)=ad_ufx(i-1,j)-ad_cff1
3408 ad_ufx(i ,j)=ad_ufx(i ,j)+ad_cff1
3409 ad_cff1=0.0_r8
3410 END DO
3411 END DO
3412# ifdef UV_C2ADVECTION
3413
3414
3415
3416 DO j=jstrv-1,jend
3417 DO i=istr,iend
3418
3419
3420
3421# ifdef WEC_MELLOR
3422
3423
3424# endif
3425
3426
3427
3428# ifdef WEC_MELLOR
3429
3430
3431# endif
3432
3433
3434 adfac=0.25_r8*ad_vfe(i,j)
3435 adfac1=adfac*(vbar(i,j ,krhs)+ &
3436# ifdef WEC_MELLOR
3437 & vbar_stokes(i,j )+ &
3438 & vbar_stokes(i,j+1)+ &
3439# endif
3440 & vbar(i,j+1,krhs))
3441 adfac2=adfac*(dvom(i,j)+dvom(i,j+1))
3442 ad_dvom(i,j )=ad_dvom(i,j )+adfac1
3443 ad_dvom(i,j+1)=ad_dvom(i,j+1)+adfac1
3444 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+adfac2
3445 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+adfac2
3446# ifdef WEC_MELLOR
3447 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac2
3448 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac2
3449# endif
3450 ad_vfe(i,j)=0.0_r8
3451 END DO
3452 END DO
3453
3454 DO j=jstrv,jend
3455 DO i=istr,iend+1
3456
3457
3458
3459# ifdef WEC_MELLOR
3460
3461
3462# endif
3463
3464
3465
3466# ifdef WEC_MELLOR
3467
3468
3469# endif
3470
3471
3472 adfac=0.25_r8*ad_vfx(i,j)
3473 adfac1=adfac*(vbar(i ,j,krhs)+ &
3474# ifdef WEC_MELLOR
3475 & vbar_stokes(i ,j)+ &
3476 & vbar_stokes(i-1,j)+ &
3477# endif
3478 & vbar(i-1,j,krhs))
3479 adfac2=adfac*(duon(i,j)+duon(i,j-1))
3480 ad_duon(i,j )=ad_duon(i,j )+adfac1
3481 ad_duon(i,j-1)=ad_duon(i,j-1)+adfac1
3482 ad_vbar(i ,j,krhs)=ad_vbar(i ,j,krhs)+adfac2
3483 ad_vbar(i-1,j,krhs)=ad_vbar(i-1,j,krhs)+adfac2
3484# ifdef WEC_MELLOR
3485 ad_vbar_stokes(i-1,j)=ad_vbar_stokes(i-1,j)+adfac2
3486 ad_vbar_stokes(i ,j)=ad_vbar_stokes(i ,j)+adfac2
3487# endif
3488 ad_vfx(i,j)=0.0_r8
3489 END DO
3490 END DO
3491
3492 DO j=jstr,jend+1
3493 DO i=istru,iend
3494
3495
3496
3497# ifdef WEC_MELLOR
3498
3499
3500# endif
3501
3502
3503
3504# ifdef WEC_MELLOR
3505
3506
3507# endif
3508
3509
3510 adfac=0.25_r8*ad_ufe(i,j)
3511 adfac1=adfac*(ubar(i,j ,krhs)+ &
3512# ifdef WEC_MELLOR
3513 & ubar_stokes(i,j )+ &
3514 & ubar_stokes(i,j-1)+ &
3515# endif
3516 & ubar(i,j-1,krhs))
3517 adfac2=adfac*(dvom(i,j)+dvom(i-1,j))
3518 ad_dvom(i ,j)=ad_dvom(i ,j)+adfac1
3519 ad_dvom(i-1,j)=ad_dvom(i-1,j)+adfac1
3520 ad_ubar(i,j ,krhs)=ad_ubar(i,j ,krhs)+adfac2
3521 ad_ubar(i,j-1,krhs)=ad_ubar(i,j-1,krhs)+adfac2
3522# ifdef WEC_MELLOR
3523 ad_ubar_stokes(i,j-1)=ad_ubar_stokes(i,j-1)+adfac2
3524 ad_ubar_stokes(i,j )=ad_ubar_stokes(i,j )+adfac2
3525# endif
3526 ad_ufe(i,j)=0.0_r8
3527 END DO
3528 END DO
3529
3530 DO j=jstr,jend
3531 DO i=istru-1,iend
3532
3533
3534
3535# ifdef WEC_MELLOR
3536
3537
3538# endif
3539
3540
3541
3542# ifdef WEC_MELLOR
3543
3544
3545# endif
3546
3547
3548 adfac=0.25_r8*ad_ufx(i,j)
3549 adfac1=adfac*(ubar(i ,j,krhs)+ &
3550# ifdef WEC_MELLOR
3551 & ubar_stokes(i ,j)+ &
3552 & ubar_stokes(i+1,j)+ &
3553# endif
3554 & ubar(i+1,j,krhs))
3555 adfac2=adfac*(duon(i,j)+duon(i+1,j))
3556 ad_duon(i ,j)=ad_duon(i ,j)+adfac1
3557 ad_duon(i+1,j)=ad_duon(i+1,j)+adfac1
3558 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)+adfac2
3559 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+adfac2
3560# ifdef WEC_MELLOR
3561 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac2
3562 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac2
3563# endif
3564 ad_ufx(i,j)=0.0_r8
3565 END DO
3566 END DO
3567# else
3568
3569
3570
3571 DO j=jstrvm1,jendp1
3572 DO i=istr,iend
3573 grad(i,j)=vbar(i,j-1,krhs)-2.0_r8*vbar(i,j,krhs)+ &
3574# ifdef WEC_MELLOR
3575 & vbar_stokes(i,j-1)-2.0_r8*vbar_stokes(i,j)+ &
3576 & vbar_stokes(i,j+1)+ &
3577# endif
3578 & vbar(i,j+1,krhs)
3579 dgrad(i,j)=dvom(i,j-1)-2.0_r8*dvom(i,j)+dvom(i,j+1)
3580 END DO
3581 END DO
3583 IF (
domain(ng)%Northern_Edge(tile))
THEN
3584 DO i=istr,iend
3585 grad(i,jend+1)=grad(i,jend)
3586 dgrad(i,jend+1)=dgrad(i,jend)
3587 END DO
3588 END IF
3589 END IF
3590
3592 IF (
domain(ng)%Southern_Edge(tile))
THEN
3593 DO i=istr,iend
3594 grad(i,jstr)=grad(i,jstr+1)
3595 dgrad(i,jstr)=dgrad(i,jstr+1)
3596 END DO
3597 END IF
3598 END IF
3599
3600 cff=1.0_r8/6.0_r8
3601 DO j=jstrv-1,jend
3602 DO i=istr,iend
3603
3604
3605# ifdef WEC_MELLOR
3606
3607
3608# endif
3609
3610
3611
3612
3613
3614# ifdef WEC_MELLOR
3615
3616
3617# endif
3618
3619
3620
3621
3622
3623 adfac=0.25_r8*ad_vfe(i,j)
3624 adfac1=adfac*(dvom(i,j)+dvom(i,j+1)- &
3625 & cff*(dgrad(i,j)+dgrad(i,j+1)))
3626 adfac2=adfac1*cff
3627 adfac3=adfac*(vbar(i,j ,krhs)+ &
3628# ifdef WEC_MELLOR
3629 & vbar_stokes(i,j )+ &
3630 & vbar_stokes(i,j+1)+ &
3631# endif
3632 & vbar(i,j+1,krhs)- &
3633 & cff*(grad(i,j)+grad(i,j+1)))
3634 adfac4=adfac3*cff
3635 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+adfac1
3636 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+adfac1
3637# ifdef WEC_MELLOR
3638 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac1
3639 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac1
3640# endif
3641 ad_grad(i,j )=ad_grad(i,j )-adfac2
3642 ad_grad(i,j+1)=ad_grad(i,j+1)-adfac2
3643 ad_dvom(i,j )=ad_dvom(i,j )+adfac3
3644 ad_dvom(i,j+1)=ad_dvom(i,j+1)+adfac3
3645 ad_dgrad(i,j )=ad_dgrad(i,j )-adfac4
3646 ad_dgrad(i,j+1)=ad_dgrad(i,j+1)-adfac4
3647 ad_vfe(i,j)=0.0_r8
3648 END DO
3649 END DO
3651 IF (
domain(ng)%Northern_Edge(tile))
THEN
3652 DO i=istr,iend
3653
3654
3655 ad_dgrad(i,jend)=ad_dgrad(i,jend)+ad_dgrad(i,jend+1)
3656 ad_dgrad(i,jend+1)=0.0_r8
3657
3658
3659 ad_grad(i,jend)=ad_grad(i,jend)+ad_grad(i,jend+1)
3660 ad_grad(i,jend+1)=0.0_r8
3661 END DO
3662 END IF
3663 END IF
3665 IF (
domain(ng)%Southern_Edge(tile))
THEN
3666 DO i=istr,iend
3667
3668
3669 ad_dgrad(i,jstr+1)=ad_dgrad(i,jstr+1)+ad_dgrad(i,jstr)
3670 ad_dgrad(i,jstr)=0.0_r8
3671
3672
3673 ad_grad(i,jstr+1)=ad_grad(i,jstr+1)+ad_grad(i,jstr)
3674 ad_grad(i,jstr)=0.0_r8
3675 END DO
3676 END IF
3677 END IF
3678
3679 DO j=jstrvm1,jendp1
3680 DO i=istr,iend
3681
3682
3683
3684 ad_dvom(i,j-1)=ad_dvom(i,j-1)+ad_dgrad(i,j)
3685 ad_dvom(i,j )=ad_dvom(i,j )-2.0_r8*ad_dgrad(i,j)
3686 ad_dvom(i,j+1)=ad_dvom(i,j+1)+ad_dgrad(i,j)
3687 ad_dgrad(i,j)=0.0_r8
3688
3689# ifdef WEC_MELLOR
3690
3691
3692
3693# endif
3694
3695
3696 ad_vbar(i,j-1,krhs)=ad_vbar(i,j-1,krhs)+ad_grad(i,j)
3697 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)- &
3698 & 2.0_r8*ad_grad(i,j)
3699 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+ad_grad(i,j)
3700# ifdef WEC_MELLOR
3701 ad_vbar_stokes(i,j-1)=ad_vbar_stokes(i,j-1)+ad_grad(i,j)
3702 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )- &
3703 & 2.0_r8*ad_grad(i,j)
3704 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+ad_grad(i,j)
3705# endif
3706 ad_grad(i,j)=0.0_r8
3707 END DO
3708 END DO
3709 DO j=jstrv,jend
3710 DO i=istrm1,iendp1
3711 grad(i,j)=vbar(i-1,j,krhs)-2.0_r8*vbar(i,j,krhs)+ &
3712# ifdef WEC_MELLOR
3713 & vbar_stokes(i-1,j)-2.0_r8*vbar_stokes(i,j)+ &
3714 & vbar_stokes(i+1,j)+ &
3715# endif
3716 & vbar(i+1,j,krhs)
3717 END DO
3718 END DO
3720 IF (
domain(ng)%Western_Edge(tile))
THEN
3721 DO j=jstrv,jend
3722 grad(istr-1,j)=grad(istr,j)
3723 END DO
3724 END IF
3725 END IF
3727 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3728 DO j=jstrv,jend
3729 grad(iend+1,j)=grad(iend,j)
3730 END DO
3731 END IF
3732 END IF
3733 DO j=jstrv-1,jend
3734 DO i=istr,iend+1
3735 dgrad(i,j)=duon(i,j-1)-2.0_r8*duon(i,j)+duon(i,j+1)
3736 END DO
3737 END DO
3738
3739 cff=1.0_r8/6.0_r8
3740 DO j=jstrv,jend
3741 DO i=istr,iend+1
3742
3743
3744# ifdef WEC_MELLOR
3745
3746
3747# endif
3748
3749
3750
3751
3752
3753# ifdef WEC_MELLOR
3754
3755
3756# endif
3757
3758
3759
3760
3761
3762 adfac=0.25_r8*ad_vfx(i,j)
3763 adfac1=adfac*(duon(i,j)+duon(i,j-1)- &
3764 & cff*(dgrad(i,j)+dgrad(i,j-1)))
3765 adfac2=adfac1*cff
3766 adfac3=adfac*(vbar(i ,j,krhs)+ &
3767# ifdef WEC_MELLOR
3768 & vbar_stokes(i ,j)+ &
3769 & vbar_stokes(i-1,j)+ &
3770# endif
3771 & vbar(i-1,j,krhs)- &
3772 & cff*(grad(i,j)+grad(i-1,j)))
3773 adfac4=adfac3*cff
3774 ad_vbar(i-1,j,krhs)=ad_vbar(i-1,j,krhs)+adfac1
3775 ad_vbar(i ,j,krhs)=ad_vbar(i ,j,krhs)+adfac1
3776# ifdef WEC_MELLOR
3777 ad_vbar_stokes(i-1,j)=ad_vbar_stokes(i-1,j)+adfac1
3778 ad_vbar_stokes(i ,j)=ad_vbar_stokes(i ,j)+adfac1
3779# endif
3780 ad_grad(i-1,j)=ad_grad(i-1,j)-adfac2
3781 ad_grad(i ,j)=ad_grad(i ,j)-adfac2
3782 ad_duon(i,j-1)=ad_duon(i,j-1)+adfac3
3783 ad_duon(i,j )=ad_duon(i,j )+adfac3
3784 ad_dgrad(i,j-1)=ad_dgrad(i,j-1)-adfac4
3785 ad_dgrad(i,j )=ad_dgrad(i,j )-adfac4
3786 ad_vfx(i,j)=0.0_r8
3787 END DO
3788 END DO
3789 DO j=jstrv-1,jend
3790 DO i=istr,iend+1
3791
3792
3793
3794 ad_duon(i,j-1)=ad_duon(i,j-1)+ad_dgrad(i,j)
3795 ad_duon(i,j )=ad_duon(i,j )-2.0_r8*ad_dgrad(i,j)
3796 ad_duon(i,j+1)=ad_duon(i,j+1)+ad_dgrad(i,j)
3797 ad_dgrad(i,j)=0.0_r8
3798 END DO
3799 END DO
3801 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3802 DO j=jstrv,jend
3803
3804
3805 ad_grad(iend,j)=ad_grad(iend,j)+ad_grad(iend+1,j)
3806 ad_grad(iend+1,j)=0.0_r8
3807 END DO
3808 END IF
3809 END IF
3811 IF (
domain(ng)%Western_Edge(tile))
THEN
3812 DO j=jstrv,jend
3813
3814
3815 ad_grad(istr,j)=ad_grad(istr,j)+ad_grad(istr-1,j)
3816 ad_grad(istr-1,j)=0.0_r8
3817 END DO
3818 END IF
3819 END IF
3820 DO j=jstrv,jend
3821 DO i=istrm1,iendp1
3822
3823# ifdef WEC_MELLOR
3824
3825
3826
3827# endif
3828
3829
3830 ad_vbar(i-1,j,krhs)=ad_vbar(i-1,j,krhs)+ad_grad(i,j)
3831 ad_vbar(i ,j,krhs)=ad_vbar(i ,j,krhs)- &
3832 & 2.0_r8*ad_grad(i,j)
3833 ad_vbar(i+1,j,krhs)=ad_vbar(i+1,j,krhs)+ad_grad(i,j)
3834# ifdef WEC_MELLOR
3835 ad_vbar_stokes(i-1,j)=ad_vbar_stokes(i-1,j)+ad_grad(i,j)
3836 ad_vbar_stokes(i ,j)=ad_vbar_stokes(i ,j)- &
3837 & 2.0_r8*ad_grad(i,j)
3838 ad_vbar_stokes(i+1,j)=ad_vbar_stokes(i+1,j)+ad_grad(i,j)
3839# endif
3840 ad_grad(i,j)=0.0_r8
3841 END DO
3842 END DO
3843 DO j=jstrm1,jendp1
3844 DO i=istru,iend
3845 grad(i,j)=ubar(i,j-1,krhs)-2.0_r8*ubar(i,j,krhs)+ &
3846# ifdef WEC_MELLOR
3847 & ubar_stokes(i,j-1)-2.0_r8*ubar_stokes(i,j)+ &
3848 & ubar_stokes(i,j+1)+ &
3849# endif
3850 & ubar(i,j+1,krhs)
3851 END DO
3852 END DO
3854 IF (
domain(ng)%Southern_Edge(tile))
THEN
3855 DO i=istru,iend
3856 grad(i,jstr-1)=grad(i,jstr)
3857 END DO
3858 END IF
3859 END IF
3861 IF (
domain(ng)%Northern_Edge(tile))
THEN
3862 DO i=istru,iend
3863 grad(i,jend+1)=grad(i,jend)
3864 END DO
3865 END IF
3866 END IF
3867 DO j=jstr,jend+1
3868 DO i=istru-1,iend
3869 dgrad(i,j)=dvom(i-1,j)-2.0_r8*dvom(i,j)+dvom(i+1,j)
3870 END DO
3871 END DO
3872
3873 cff=1.0_r8/6.0_r8
3874 DO j=jstr,jend+1
3875 DO i=istru,iend
3876
3877
3878# ifdef WEC_MELLOR
3879
3880
3881# endif
3882
3883
3884
3885
3886
3887# ifdef WEC_MELLOR
3888
3889
3890# endif
3891
3892
3893
3894
3895
3896 adfac=0.25_r8*ad_ufe(i,j)
3897 adfac1=adfac*(dvom(i,j)+dvom(i-1,j)- &
3898 & cff*(dgrad(i,j)+dgrad(i-1,j)))
3899 adfac2=adfac1*cff
3900 adfac3=adfac*(ubar(i,j ,krhs)+ &
3901# ifdef WEC_MELLOR
3902 & ubar_stokes(i,j )+ &
3903 & ubar_stokes(i,j-1)+ &
3904# endif
3905 & ubar(i,j-1,krhs)- &
3906 & cff*(grad(i,j)+grad(i,j-1)))
3907 adfac4=adfac3*cff
3908 ad_ubar(i,j-1,krhs)=ad_ubar(i,j-1,krhs)+adfac1
3909 ad_ubar(i,j ,krhs)=ad_ubar(i,j ,krhs)+adfac1
3910# ifdef WEC_MELLOR
3911 ad_ubar_stokes(i,j-1)=ad_ubar_stokes(i,j-1)+adfac1
3912 ad_ubar_stokes(i,j )=ad_ubar_stokes(i,j )+adfac1
3913# endif
3914 ad_grad(i,j-1)=ad_grad(i,j-1)-adfac2
3915 ad_grad(i,j )=ad_grad(i,j )-adfac2
3916 ad_dvom(i-1,j)=ad_dvom(i-1,j)+adfac3
3917 ad_dvom(i ,j)=ad_dvom(i ,j)+adfac3
3918 ad_dgrad(i-1,j)=ad_dgrad(i-1,j)-adfac4
3919 ad_dgrad(i ,j)=ad_dgrad(i ,j)-adfac4
3920 ad_ufe(i,j)=0.0_r8
3921 END DO
3922 END DO
3923 DO j=jstr,jend+1
3924 DO i=istru-1,iend
3925
3926
3927
3928 ad_dvom(i-1,j)=ad_dvom(i-1,j)+ad_dgrad(i,j)
3929 ad_dvom(i ,j)=ad_dvom(i ,j)-2.0_r8*ad_dgrad(i,j)
3930 ad_dvom(i+1,j)=ad_dvom(i+1,j)+ad_dgrad(i,j)
3931 ad_dgrad(i,j)=0.0_r8
3932 END DO
3933 END DO
3935 IF (
domain(ng)%Northern_Edge(tile))
THEN
3936 DO i=istru,iend
3937
3938
3939 ad_grad(i,jend)=ad_grad(i,jend)+ad_grad(i,jend+1)
3940 ad_grad(i,jend+1)=0.0_r8
3941 END DO
3942 END IF
3943 END IF
3945 IF (
domain(ng)%Southern_Edge(tile))
THEN
3946 DO i=istru,iend
3947
3948
3949 ad_grad(i,jstr)=ad_grad(i,jstr)+ad_grad(i,jstr-1)
3950 ad_grad(i,jstr-1)=0.0_r8
3951 END DO
3952 END IF
3953 END IF
3954 DO j=jstrm1,jendp1
3955 DO i=istru,iend
3956
3957# ifdef WEC_MELLOR
3958
3959
3960
3961# endif
3962
3963
3964 ad_ubar(i,j-1,krhs)=ad_ubar(i,j-1,krhs)+ad_grad(i,j)
3965 ad_ubar(i,j ,krhs)=ad_ubar(i,j ,krhs)- &
3966 & 2.0_r8*ad_grad(i,j)
3967 ad_ubar(i,j+1,krhs)=ad_ubar(i,j+1,krhs)+ad_grad(i,j)
3968# ifdef WEC_MELLOR
3969 ad_ubar_stokes(i,j-1)=ad_ubar_stokes(i,j-1)+ad_grad(i,j)
3970 ad_ubar_stokes(i,j )=ad_ubar_stokes(i,j)- &
3971 & 2.0_r8*ad_grad(i,j)
3972 ad_ubar_stokes(i,j+1)=ad_ubar_stokes(i,j+1)+ad_grad(i,j)
3973# endif
3974 ad_grad(i,j)=0.0_r8
3975 END DO
3976 END DO
3977 DO j=jstr,jend
3978 DO i=istrum1,iendp1
3979 grad(i,j)=ubar(i-1,j,krhs)-2.0_r8*ubar(i,j,krhs)+ &
3980# ifdef WEC_MELLOR
3981 & ubar_stokes(i-1,j)-2.0_r8*ubar_stokes(i,j)+ &
3982 & ubar_stokes(i+1,j)+ &
3983# endif
3984 & ubar(i+1,j,krhs)
3985 dgrad(i,j)=duon(i-1,j)-2.0_r8*duon(i,j)+duon(i+1,j)
3986 END DO
3987 END DO
3989 IF (
domain(ng)%Western_Edge(tile))
THEN
3990 DO j=jstr,jend
3991 grad(istr,j)=grad(istr+1,j)
3992 dgrad(istr,j)=dgrad(istr+1,j)
3993 END DO
3994 END IF
3995 END IF
3997 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3998 DO j=jstr,jend
3999 grad(iend+1,j)=grad(iend,j)
4000 dgrad(iend+1,j)=dgrad(iend,j)
4001 END DO
4002 END IF
4003 END IF
4004
4005 cff=1.0_r8/6.0_r8
4006 DO j=jstr,jend
4007 DO i=istru-1,iend
4008
4009
4010# ifdef WEC_MELLOR
4011
4012
4013# endif
4014
4015
4016
4017
4018
4019# ifdef WEC_MELLOR
4020
4021
4022# endif
4023
4024
4025
4026
4027
4028 adfac=0.25_r8*ad_ufx(i,j)
4029 adfac1=adfac*(duon(i,j)+duon(i+1,j)- &
4030 & cff*(dgrad(i,j)+dgrad(i+1,j)))
4031 adfac2=adfac1*cff
4032 adfac3=adfac*(ubar(i ,j,krhs)+ &
4033# ifdef WEC_MELLOR
4034 & ubar_stokes(i ,j)+ &
4035 & ubar_stokes(i+1,j)+ &
4036# endif
4037 & ubar(i+1,j,krhs)- &
4038 & cff*(grad(i,j)+grad(i+1,j)))
4039 adfac4=adfac3*cff
4040 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)+adfac1
4041 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+adfac1
4042# ifdef WEC_MELLOR
4043 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac1
4044 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac1
4045# endif
4046 ad_grad(i ,j)=ad_grad(i ,j)-adfac2
4047 ad_grad(i+1,j)=ad_grad(i+1,j)-adfac2
4048 ad_duon(i ,j)=ad_duon(i ,j)+adfac3
4049 ad_duon(i+1,j)=ad_duon(i+1,j)+adfac3
4050 ad_dgrad(i ,j)=ad_dgrad(i ,j)-adfac4
4051 ad_dgrad(i+1,j)=ad_dgrad(i+1,j)-adfac4
4052 ad_ufx(i,j)=0.0_r8
4053 END DO
4054 END DO
4056 IF (
domain(ng)%Eastern_Edge(tile))
THEN
4057 DO j=jstr,jend
4058
4059
4060 ad_dgrad(iend,j)=ad_dgrad(iend,j)+ad_dgrad(iend+1,j)
4061 ad_dgrad(iend+1,j)=0.0_r8
4062
4063
4064 ad_grad(iend,j)=ad_grad(iend,j)+ad_grad(iend+1,j)
4065 ad_grad(iend+1,j)=0.0_r8
4066 END DO
4067 END IF
4068 END IF
4070 IF (
domain(ng)%Western_Edge(tile))
THEN
4071 DO j=jstr,jend
4072
4073
4074 ad_dgrad(istr+1,j)=ad_dgrad(istr+1,j)+ad_dgrad(istr,j)
4075 ad_dgrad(istr,j)=0.0_r8
4076
4077
4078 ad_grad(istr+1,j)=ad_grad(istr+1,j)+ad_grad(istr,j)
4079 ad_grad(istr,j)=0.0_r8
4080 END DO
4081 END IF
4082 END IF
4083 DO j=jstr,jend
4084 DO i=istrum1,iendp1
4085
4086
4087
4088 ad_duon(i-1,j)=ad_duon(i-1,j)+ad_dgrad(i,j)
4089 ad_duon(i ,j)=ad_duon(i ,j)-2.0_r8*ad_dgrad(i,j)
4090 ad_duon(i+1,j)=ad_duon(i+1,j)+ad_dgrad(i,j)
4091 ad_dgrad(i,j)=0.0_r8
4092
4093# ifdef NEARHSORE_MELLOR
4094
4095
4096
4097# endif
4098
4099
4100 ad_ubar(i-1,j,krhs)=ad_ubar(i-1,j,krhs)+ad_grad(i,j)
4101 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)- &
4102 & 2.0_r8*ad_grad(i,j)
4103 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+ad_grad(i,j)
4104# ifdef NEARHSORE_MELLOR
4105 ad_ubar_stokes(i-1,j)=ad_ubar_stokes(i-1,j)+ad_grad(i,j)
4106 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)- &
4107 & 2.0_r8*ad_grad(i,j)
4108 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+ad_grad(i,j)
4109# endif
4110 ad_grad(i,j)=0.0_r8
4111 END DO
4112 END DO
4113# endif
4114#endif
4115
4116
4117
4118
4119
4120
4121
4122
4124 IF (first_2d_step) THEN
4126 DO j=jstrv-1,jend
4127 DO i=istru-1,iend
4128
4129
4130
4131
4132
4133
4134 zeta_new(i,j)=zeta(i,j,knew)
4135#ifdef MASKING
4136 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
4137#endif
4138 zwrk(i,j)=0.5_r8*(zeta(i,j,kstp)+zeta_new(i,j))
4139#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4140 gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
4141 gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
4142 gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
4143#else
4144 gzeta(i,j)=zwrk(i,j)
4145 gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
4146#endif
4147 END DO
4148 END DO
4151 cff4=4.0_r8/25.0_r8
4152 cff5=1.0_r8-2.0_r8*cff4
4153 DO j=jstrv-1,jend
4154 DO i=istru-1,iend
4155
4156
4157
4158
4159
4160
4161 zeta_new(i,j)=zeta(i,j,knew)
4162#ifdef MASKING
4163 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
4164#endif
4165 zwrk(i,j)=cff5*zeta(i,j,krhs)+ &
4166 & cff4*(zeta(i,j,kstp)+zeta_new(i,j))
4167#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4168 gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
4169 gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
4170 gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
4171#else
4172 gzeta(i,j)=zwrk(i,j)
4173 gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
4174#endif
4175 END DO
4176 END DO
4177 ELSE IF (corrector_2d_step) THEN
4178 cff1=
dtfast(ng)*5.0_r8/12.0_r8
4179 cff2=
dtfast(ng)*8.0_r8/12.0_r8
4180 cff3=
dtfast(ng)*1.0_r8/12.0_r8
4181 cff4=2.0_r8/5.0_r8
4182 cff5=1.0_r8-cff4
4183 DO j=jstrv-1,jend
4184 DO i=istru-1,iend
4185
4186
4187
4188
4189
4190
4191
4192
4193 zeta_new(i,j)=zeta(i,j,knew)
4194#ifdef MASKING
4195 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
4196#endif
4197 zwrk(i,j)=cff5*zeta_new(i,j)+cff4*zeta(i,j,krhs)
4198#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4199 gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
4200 gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
4201 gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
4202#else
4203 gzeta(i,j)=zwrk(i,j)
4204 gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
4205#endif
4206 END DO
4207 END DO
4208 END IF
4209
4210
4211
4213 cff2=1.0_r8/3.0_r8
4214#if !defined SOLVE3D && defined ATM_PRESS
4215 fac3=0.5_r8*100.0_r8/
rho0
4216#endif
4217 DO j=jstr,jend
4218 IF (j.ge.jstrv) THEN
4219 DO i=istr,iend
4220#ifdef DIAGNOSTICS_UV
4221
4222#endif
4223#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233 adfac=cff1*om_v(i,j)*ad_rhs_vbar(i,j)
4234 adfac1=adfac*(eq_tide(i,j)-eq_tide(i,j-1))
4235 adfac2=adfac*(h(i,j-1)+h(i,j)+ &
4236 & gzeta(i,j-1)+gzeta(i,j))
4237 ad_h(i,j-1)=ad_h(i,j-1)-adfac1
4238 ad_h(i,j )=ad_h(i,j )-adfac1
4239 ad_gzeta(i,j-1)=ad_gzeta(i,j-1)-adfac1
4240 ad_gzeta(i,j )=ad_gzeta(i,j )-adfac1
4241 ad_eq_tide(i,j-1)=ad_eq_tide(i,j-1)+adfac2
4242 ad_eq_tide(i,j )=ad_eq_tide(i,j )-adfac2
4243#endif
4244#if defined ATM_PRESS && !defined SOLVE3D
4245
4246
4247
4248
4249
4250
4251 adfac=-fac3*om_v(i,j)*(pair(i,j)-pair(i,j-1)* &
4252 & ad_rhs_vbar(i,j)
4253 ad_h(i,j-1)=ad_h(i,j-1)+adfac
4254 ad_h(i,j )=ad_h(i,j )+adfac
4255 ad_gzeta(i,j-1)=ad_gzeta(i,j-1)+adfac
4256 ad_gzeta(i,j )=ad_gzeta(i,j )+adfac
4257#endif
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288#endif
4289
4290
4291
4292 adfac=cff1*om_v(i,j)*ad_rhs_vbar(i,j)
4293 adfac1=adfac*(gzeta(i,j-1)-gzeta(i,j ))
4294 adfac2=adfac*(h(i,j-1)+h(i,j ))
4295 ad_h(i,j-1)=ad_h(i,j-1)+adfac1
4296 ad_h(i,j )=ad_h(i,j )+adfac1
4297 ad_gzeta(i,j-1)=ad_gzeta(i,j-1)+adfac2
4298 ad_gzeta(i,j )=ad_gzeta(i,j )-adfac2
4299 ad_gzeta2(i,j-1)=ad_gzeta2(i,j-1)+adfac
4300 ad_gzeta2(i,j )=ad_gzeta2(i,j )-adfac
4301#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4302 adfac1=adfac*(gzetasa(i,j-1)+ &
4303 & gzetasa(i,j )+ &
4304 & cff2*(rhoa(i,j-1)- &
4305 & rhoa(i,j ))* &
4306 & (zwrk(i,j-1)- &
4307 & zwrk(i,j )))
4308 adfac2=adfac*(h(i,j-1)-h(i,j))
4309 adfac3=adfac2*cff2*(zwrk(i,j-1)-zwrk(i,j))
4310 adfac4=adfac2*cff2*(rhoa(i,j-1)-rhoa(i,j))
4311 ad_h(i,j-1)=ad_h(i,j-1)+adfac1
4312 ad_h(i,j )=ad_h(i,j )-adfac1
4313 ad_gzetasa(i,j-1)=ad_gzetasa(i,j-1)+adfac2
4314 ad_gzetasa(i,j )=ad_gzetasa(i,j )+adfac2
4315 ad_rhoa(i,j-1)=ad_rhoa(i,j-1)+adfac3
4316 ad_rhoa(i,j )=ad_rhoa(i,j )-adfac3
4317 ad_zwrk(i,j-1)=ad_zwrk(i,j-1)+adfac4
4318 ad_zwrk(i,j )=ad_zwrk(i,j )-adfac4
4319#endif
4320 ad_rhs_vbar(i,j)=0.0_r8
4321 END DO
4322 END IF
4323 DO i=istru,iend
4324#ifdef DIAGNOSTICS_UV
4325
4326#endif
4327#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337 adfac=cff1*on_u(i,j)*ad_rhs_ubar(i,j)
4338 adfac1=adfac*(eq_tide(i,j)-eq_tide(i-1,j))
4339 adfac2=adfac*(h(i-1,j)+h(i,j)+ &
4340 & gzeta(i-1,j)+gzeta(i,j))
4341 ad_h(i-1,j)=ad_h(i-1,j)-adfac1
4342 ad_h(i ,j)=ad_h(i ,j)-adfac1
4343 ad_gzeta(i-1,j)=ad_gzeta(i-1,j)-adfac1
4344 ad_gzeta(i ,j)=ad_gzeta(i ,j)-adfac1
4345 ad_eq_tide(i-1,j)=ad_eq_tide(i-1,j)+adfac2
4346 ad_eq_tide(i ,j)=ad_eq_tide(i ,j)-adfac2
4347#endif
4348#if defined ATM_PRESS && !defined SOLVE3D
4349
4350
4351
4352
4353
4354
4355 adfac=-fac3*on_u(i,j)*(pair(i,j)-pair(i-1,j))* &
4356 & ad_rhs_ubar(i,j)
4357 ad_h(i-1,j)=ad_h(i-1,j)+adfac
4358 ad_h(i ,j)=ad_h(i ,j)+adfac
4359 ad_gzeta(i-1,j)=ad_gzeta(i-1,j)+adfac
4360 ad_gzeta(i ,j)=ad_gzeta(i ,j)+adfac
4361#endif
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392#endif
4393
4394
4395
4396 adfac=cff1*on_u(i,j)*ad_rhs_ubar(i,j)
4397 adfac1=adfac*(gzeta(i-1,j)-gzeta(i ,j))
4398 adfac2=adfac*(h(i-1,j)+h(i ,j))
4399 ad_h(i-1,j)=ad_h(i-1,j)+adfac1
4400 ad_h(i ,j)=ad_h(i ,j)+adfac1
4401 ad_gzeta(i-1,j)=ad_gzeta(i-1,j)+adfac2
4402 ad_gzeta(i ,j)=ad_gzeta(i ,j)-adfac2
4403 ad_gzeta2(i-1,j)=ad_gzeta2(i-1,j)+adfac
4404 ad_gzeta2(i ,j)=ad_gzeta2(i ,j)-adfac
4405#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4406 adfac1=adfac*(gzetasa(i-1,j)+ &
4407 & gzetasa(i ,j)+ &
4408 & cff2*(rhoa(i-1,j)- &
4409 & rhoa(i ,j))* &
4410 & (zwrk(i-1,j)- &
4411 & zwrk(i ,j)))
4412 adfac2=adfac*(h(i-1,j)-h(i ,j))
4413 adfac3=adfac2*cff2*(zwrk(i-1,j)-zwrk(i,j))
4414 adfac4=adfac2*cff2*(rhoa(i-1,j)-rhoa(i,j))
4415 ad_h(i-1,j)=ad_h(i-1,j)+adfac1
4416 ad_h(i ,j)=ad_h(i ,j)-adfac1
4417 ad_gzetasa(i-1,j)=ad_gzetasa(i-1,j)+adfac2
4418 ad_gzetasa(i ,j)=ad_gzetasa(i ,j)+adfac2
4419 ad_rhoa(i-1,j)=ad_rhoa(i-1,j)+adfac3
4420 ad_rhoa(i ,j)=ad_rhoa(i ,j)-adfac3
4421 ad_zwrk(i-1,j)=ad_zwrk(i-1,j)+adfac4
4422 ad_zwrk(i ,j)=ad_zwrk(i ,j)-adfac4
4423#endif
4424 ad_rhs_ubar(i,j)=0.0_r8
4425 END DO
4426 END DO
4427
4428
4429
4430#ifdef DISTRIBUTE
4431
4432
4433
4434
4435
4436
4438 & lbi, ubi, lbj, ubj, &
4441 & ad_zeta(:,:,knew))
4442#endif
4444
4445
4446
4447
4449 & lbi, ubi, lbj, ubj, &
4450 & ad_zeta(:,:,knew))
4451 END IF
4452
4453
4454
4455
4456
4457
4459 & lbi, ubi, lbj, ubj, &
4460 & imins, imaxs, jmins, jmaxs, &
4461 & krhs, kstp, knew, &
4462 & zeta, ad_zeta)
4463
4464#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
4465
4466
4467
4468
4469
4471 DO j=jstr,jend
4472 DO i=istr,iend
4473
4474
4475 ad_cff=ad_cff-ad_h(i,j)
4476
4477
4478 adfac=fac*ad_cff
4479 ad_bed_thick(i,j,nnew)=ad_bed_thick(i,j,nnew)-adfac
4480 ad_bed_thick(i,j,nstp)=ad_bed_thick(i,j,nstp)+adfac
4481 ad_cff=0.0_r8
4482 END DO
4483 END DO
4484#endif
4485
4486
4487
4488
4489
4492 IF (int(
sources(ng)%Dsrc(is)).eq.2)
THEN
4495 IF (((istrr.le.i).and.(i.le.iendr)).and. &
4496 & ((jstrr.le.j).and.(j.le.jendr))) THEN
4497
4498
4499 END IF
4500 END IF
4501 END DO
4502 END IF
4503
4504
4505
4507#ifdef DISTRIBUTE
4508
4509
4510
4511
4512
4513
4515 & lbi, ubi, lbj, ubj, &
4518 & ad_rzeta(:,:,krhs))
4519#endif
4521
4522
4523
4524
4526 & lbi, ubi, lbj, ubj, &
4527 & ad_rzeta(:,:,krhs))
4528 END IF
4529 DO j=jstr,jend
4530 DO i=istr,iend
4531
4532
4533 ad_rhs_zeta(i,j)=ad_rhs_zeta(i,j)+ad_rzeta(i,j,krhs)
4534 ad_rzeta(i,j,krhs)=0.0
4535 END DO
4536 END DO
4537 END IF
4538
4539#ifndef SOLVE3D
4540
4541
4542
4543 DO j=jstrr,jendr
4544 DO i=istrr,iendr
4545 ad_zeta_sol(i,j)=ad_zeta(i,j,knew)
4546 END DO
4547 END DO
4548#endif
4549
4550
4551
4552#ifdef WET_DRY_NOT_YET
4553
4554
4555#endif
4556
4557 DO j=jstr,jend
4558 DO i=istr,iend
4559#if defined WET_DRY_NOT_YET && defined MASKING
4560
4561
4562
4563 ad_h(i,j)=ad_h(i,j)+(1.0_r8-rmask(i,j))*ad_zeta(i,j,knew)
4564#endif
4565
4566
4567 ad_zeta_new(i,j)=ad_zeta_new(i,j)+ad_zeta(i,j,knew)
4568 ad_zeta(i,j,knew)=0.0_r8
4569 END DO
4570 END DO
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4582#endif
4583 IF (first_2d_step) THEN
4585 DO j=jstrv-1,jend
4586 DO i=istru-1,iend
4587#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4588
4589
4590
4591 adfac=zwrk(i,j)*ad_gzetasa(i,j)
4592 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4593 & (rhos(i,j)-rhoa(i,j))*ad_gzetasa(i,j)
4594 ad_rhos(i,j)=ad_rhos(i,j)+adfac
4595 ad_rhoa(i,j)=ad_rhoa(i,j)-adfac
4596 ad_gzetasa(i,j)=0.0_r8
4597
4598
4599
4600 ad_gzeta(i,j)=ad_gzeta(i,j)+zwrk(i,j)*ad_gzeta2(i,j)
4601 ad_zwrk(i,j)=ad_zwrk(i,j)+gzeta(i,j)*ad_gzeta2(i,j)
4602 ad_gzeta2(i,j)=0.0_r8
4603
4604
4605
4606 ad_rhos(i,j)=ad_rhos(i,j)+zwrk(i,j)*ad_gzeta(i,j)
4607 ad_zwrk(i,j)=ad_zwrk(i,j)+(fac+rhos(i,j))*ad_gzeta(i,j)
4608 ad_gzeta(i,j)=0.0_r8
4609#else
4610
4611
4612
4613 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4614 & 2.0_r8*zwrk(i,j)*ad_gzeta2(i,j)+ &
4615 & ad_gzeta(i,j)
4616 ad_gzeta2(i,j)=0.0_r8
4617 ad_gzeta(i,j)=0.0_r8
4618#endif
4619
4620
4621 adfac=0.5_r8*ad_zwrk(i,j)
4622 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+adfac
4623 ad_zeta_new(i,j)=ad_zeta_new(i,j)+adfac
4624 ad_zwrk(i,j)=0.0_r8
4625
4626
4627 ad_zeta_new(i,j)=ad_zeta_new(i,j)+ad_dnew(i,j)
4628 ad_h(i,j)=ad_h(i,j)+ad_dnew(i,j)
4629 ad_dnew(i,j)=0.0_r8
4630#ifdef MASKING
4631
4632
4633 ad_zeta_new(i,j)=ad_zeta_new(i,j)*rmask(i,j)
4634#endif
4635
4636
4637
4638 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+ad_zeta_new(i,j)
4639 ad_rhs_zeta(i,j)=ad_rhs_zeta(i,j)+ &
4640 & pm(i,j)*pn(i,j)*cff1*ad_zeta_new(i,j)
4641 ad_zeta_new(i,j)=0.0_r8
4642
4643
4644
4645 ad_duon(i ,j )=ad_duon(i ,j )+ad_rhs_zeta(i,j)
4646 ad_duon(i+1,j )=ad_duon(i+1,j )-ad_rhs_zeta(i,j)
4647 ad_dvom(i ,j )=ad_dvom(i ,j )+ad_rhs_zeta(i,j)
4648 ad_dvom(i ,j+1)=ad_dvom(i ,j+1)-ad_rhs_zeta(i,j)
4649 ad_rhs_zeta(i,j)=0.0_r8
4650 END DO
4651 END DO
4654 cff4=4.0_r8/25.0_r8
4655 cff5=1.0_r8-2.0_r8*cff4
4656 DO j=jstrv-1,jend
4657 DO i=istru-1,iend
4658#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4659
4660
4661
4662 adfac=zwrk(i,j)*ad_gzetasa(i,j)
4663 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4664 & (rhos(i,j)-rhoa(i,j))*ad_gzetasa(i,j)
4665 ad_rhos(i,j)=ad_rhos(i,j)+adfac
4666 ad_rhoa(i,j)=ad_rhoa(i,j)-adfac
4667 ad_gzetasa(i,j)=0.0_r8
4668
4669
4670
4671 ad_gzeta(i,j)=ad_gzeta(i,j)+zwrk(i,j)*ad_gzeta2(i,j)
4672 ad_zwrk(i,j)=ad_zwrk(i,j)+gzeta(i,j)*ad_gzeta2(i,j)
4673 ad_gzeta2(i,j)=0.0_r8
4674
4675
4676
4677 ad_zwrk(i,j)=ad_zwrk(i,j)+(fac+rhos(i,j))*ad_gzeta(i,j)
4678 ad_rhos(i,j)=ad_rhos(i,j)+zwrk(i,j)*ad_gzeta(i,j)
4679 ad_gzeta(i,j)=0.0_r8
4680#else
4681
4682
4683
4684 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4685 & 2.0_r8*zwrk(i,j)*ad_gzeta2(i,j)+ &
4686 & ad_gzeta(i,j)
4687 ad_gzeta2(i,j)=0.0_r8
4688 ad_gzeta(i,j)=0.0_r8
4689#endif
4690
4691
4692
4693 adfac=cff4*ad_zwrk(i,j)
4694 ad_zeta(i,j,krhs)=ad_zeta(i,j,krhs)+cff5*ad_zwrk(i,j)
4695 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+adfac
4696 ad_zeta_new(i,j)=ad_zeta_new(i,j)+adfac
4697 ad_zwrk(i,j)=0.0_r8
4698
4699
4700 ad_zeta_new(i,j)=ad_zeta_new(i,j)+ad_dnew(i,j)
4701 ad_h(i,j)=ad_h(i,j)+ad_dnew(i,j)
4702 ad_dnew(i,j)=0.0_r8
4703#ifdef MASKING
4704
4705
4706 ad_zeta_new(i,j)=ad_zeta_new(i,j)*rmask(i,j)
4707#endif
4708
4709
4710
4711 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+ad_zeta_new(i,j)
4712 ad_rhs_zeta(i,j)=ad_rhs_zeta(i,j)+ &
4713 & pm(i,j)*pn(i,j)*cff1*ad_zeta_new(i,j)
4714 ad_zeta_new(i,j)=0.0_r8
4715
4716
4717
4718 ad_duon(i ,j )=ad_duon(i ,j )+ad_rhs_zeta(i,j)
4719 ad_duon(i+1,j )=ad_duon(i+1,j )-ad_rhs_zeta(i,j)
4720 ad_dvom(i ,j )=ad_dvom(i ,j )+ad_rhs_zeta(i,j)
4721 ad_dvom(i ,j+1)=ad_dvom(i ,j+1)-ad_rhs_zeta(i,j)
4722 ad_rhs_zeta(i,j)=0.0_r8
4723 END DO
4724 END DO
4725 ELSE IF (corrector_2d_step) THEN
4726 cff1=
dtfast(ng)*5.0_r8/12.0_r8
4727 cff2=
dtfast(ng)*8.0_r8/12.0_r8
4728 cff3=
dtfast(ng)*1.0_r8/12.0_r8
4729 cff4=2.0_r8/5.0_r8
4730 cff5=1.0_r8-cff4
4731 DO j=jstrv-1,jend
4732 DO i=istru-1,iend
4733#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4734
4735
4736
4737 adfac=zwrk(i,j)*ad_gzetasa(i,j)
4738 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4739 & (rhos(i,j)-rhoa(i,j))*ad_gzetasa(i,j)
4740 ad_rhos(i,j)=ad_rhos(i,j)+adfac
4741 ad_rhoa(i,j)=ad_rhoa(i,j)-adfac
4742 ad_gzetasa(i,j)=0.0_r8
4743
4744
4745
4746 ad_zwrk(i,j)=ad_zwrk(i,j)+gzeta(i,j)*ad_gzeta2(i,j)
4747 ad_gzeta(i,j)=ad_gzeta(i,j)+zwrk(i,j)*ad_gzeta2(i,j)
4748 ad_gzeta2(i,j)=0.0_r8
4749
4750
4751
4752 ad_zwrk(i,j)=ad_zwrk(i,j)+(fac+rhos(i,j))*ad_gzeta(i,j)
4753 ad_rhos(i,j)=ad_rhos(i,j)+zwrk(i,j)*ad_gzeta(i,j)
4754 ad_gzeta(i,j)=0.0_r8
4755#else
4756
4757
4758
4759 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4760 & 2.0_r8*zwrk(i,j)*ad_gzeta2(i,j)+ &
4761 & ad_gzeta(i,j)
4762 ad_gzeta2(i,j)=0.0_r8
4763 ad_gzeta(i,j)=0.0_r8
4764#endif
4765
4766
4767 ad_zeta_new(i,j)=ad_zeta_new(i,j)+cff5*ad_zwrk(i,j)
4768 ad_zeta(i,j,krhs)=ad_zeta(i,j,krhs)+cff4*ad_zwrk(i,j)
4769 ad_zwrk(i,j)=0.0_r8
4770
4771
4772 ad_zeta_new(i,j)=ad_zeta_new(i,j)+ad_dnew(i,j)
4773 ad_h(i,j)=ad_h(i,j)+ad_dnew(i,j)
4774 ad_dnew(i,j)=0.0_r8
4775#ifdef MASKING
4776
4777
4778 ad_zeta_new(i,j)=ad_zeta_new(i,j)*rmask(i,j)
4779#endif
4780
4781
4782
4783
4784
4785 adfac=pm(i,j)*pn(i,j)*ad_zeta_new(i,j)
4786 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+ad_zeta_new(i,j)
4787 ad_cff=ad_cff+adfac
4788 ad_rzeta(i,j,kstp)=ad_rzeta(i,j,kstp)+adfac*cff2
4789 ad_rzeta(i,j,ptsk)=-adfac*cff3
4790 ad_zeta_new(i,j)=0.0_r8
4791
4792
4793
4794 adfac=cff1*ad_cff
4795 ad_duon(i ,j )=ad_duon(i ,j )+adfac
4796 ad_duon(i+1,j )=ad_duon(i+1,j )-adfac
4797 ad_dvom(i ,j )=ad_dvom(i ,j )+adfac
4798 ad_dvom(i ,j+1)=ad_dvom(i ,j+1)-adfac
4799 ad_cff=0.0_r8
4800 END DO
4801 END DO
4802 END IF
4803
4804#ifdef WET_DRY_NOT_YET
4805
4806
4807
4808
4809
4810
4811
4812
4813# ifdef MASKING
4814
4815# endif
4816
4817# ifdef SOLVE3D
4818
4819
4820# endif
4821
4822
4823
4824
4825
4826
4827
4828#endif
4829 END IF step_loop
4830
4831#ifdef SOLVE3D
4832
4833
4834
4835
4836
4837
4838
4839
4840# ifdef NESTING
4841
4842
4843
4844
4845# endif
4846
4848
4849# ifdef DISTRIBUTE
4850# ifdef NESTING
4851
4852
4853
4854
4855
4856
4858 & lbi, ubi, lbj, ubj, &
4861 & ad_du_avg2, ad_dv_avg2)
4862# endif
4863
4864
4865
4866
4867
4868
4870 & lbi, ubi, lbj, ubj, &
4873 & ad_zt_avg1, ad_du_avg1, ad_dv_avg1)
4874# endif
4876# ifdef NESTING
4877
4878
4879
4880
4882 & lbi, ubi, lbj, ubj, &
4883 & ad_dv_avg2)
4884
4885
4886
4888 & lbi, ubi, lbj, ubj, &
4889 & ad_du_avg2)
4890# endif
4891
4892
4893
4894
4896 & lbi, ubi, lbj, ubj, &
4897 & ad_dv_avg1)
4898
4899
4900
4901
4903 & lbi, ubi, lbj, ubj, &
4904 & ad_du_avg1)
4905
4906
4907
4908
4910 & lbi, ubi, lbj, ubj, &
4911 & ad_zt_avg1)
4912 END IF
4913 END IF
4914
4915
4916
4918 IF (first_2d_step) THEN
4919
4920
4921
4922 cff2=(-1.0_r8/12.0_r8)*
weight(2,
iif(ng)+1,ng)
4923 DO j=jstrr,jendr
4924 DO i=istrr,iendr
4925
4926
4927 ad_zt_avg1(i,j)=0.0_r8
4928 END DO
4929 DO i=istr,iendr
4930
4931
4932 ad_duon(i,j)=ad_duon(i,j)+cff2*ad_du_avg2(i,j)
4933 ad_du_avg2(i,j)=0.0_r8
4934
4935
4936 ad_du_avg1(i,j)=0.0_r8
4937 END DO
4938 END DO
4939 DO j=jstr,jendr
4940 DO i=istrr,iendr
4941
4942
4943 ad_dvom(i,j)=ad_dvom(i,j)+cff2*ad_dv_avg2(i,j)
4944 ad_dv_avg2(i,j)=0.0_r8
4945
4946
4947 ad_dv_avg1(i,j)=0.0_r8
4948 END DO
4949 END DO
4950 ELSE
4951
4952
4953
4954
4955
4957 cff2=(8.0_r8/12.0_r8)*
weight(2,
iif(ng) ,ng)- &
4958 & (1.0_r8/12.0_r8)*
weight(2,
iif(ng)+1,ng)
4959 DO j=jstrr,jendr
4960 DO i=istrr,iendr
4961
4962
4963 ad_zeta(i,j,krhs)=ad_zeta(i,j,krhs)+cff1*ad_zt_avg1(i,j)
4964 END DO
4965 DO i=istr,iendr
4966
4967
4968 ad_duon(i,j)=ad_duon(i,j)+ &
4969 & cff2*ad_du_avg2(i,j)
4970# ifdef WEC_MELLOR
4971
4972
4973 ad_duson(i,j)=ad_duson(i,j)- &
4974 & cff1*ad_du_avg1(i,j)
4975# endif
4976
4977
4978 ad_duon(i,j)=ad_duon(i,j)+ &
4979 & cff1*ad_du_avg1(i,j)
4980 END DO
4981 END DO
4982 DO j=jstr,jendr
4983 DO i=istrr,iendr
4984
4985
4986 ad_dvom(i,j)=ad_dvom(i,j)+ &
4987 & cff2*ad_dv_avg2(i,j)
4988# ifdef WEC_MELLOR
4989
4990
4991 ad_dvsom(i,j)=ad_dvsom(i,j)- &
4992 & cff1*ad_dv_avg1(i,j)
4993# endif
4994
4995
4996 ad_dvom(i,j)=ad_dvom(i,j)+ &
4997 & cff1*ad_dv_avg1(i,j)
4998 END DO
4999 END DO
5000 END IF
5001 ELSE
5002 IF (first_2d_step) THEN
5004 ELSE
5005 cff2=(5.0_r8/12.0_r8)*
weight(2,
iif(ng),ng)
5006 END IF
5007 DO j=jstrr,jendr
5008 DO i=istr,iendr
5009
5010
5011 ad_dvom(i,j)=ad_dvom(i,j)+cff2*ad_dv_avg2(i,j)
5012 END DO
5013 END DO
5014 DO j=jstr,jendr
5015 DO i=istrr,iendr
5016
5017
5018 ad_duon(i,j)=ad_duon(i,j)+cff2*ad_du_avg2(i,j)
5019 END DO
5020 END DO
5021 END IF
5022#endif
5023
5024
5025
5026
5027
5028
5029
5030
5032
5033
5034
5035
5036#ifdef MASKING
5037
5038#endif
5039
5040
5041
5042
5043
5045 & lbi, ubi, lbj, ubj, &
5046 & imins, imaxs, jmins, jmaxs, &
5047 & krhs, &
5048#ifdef MASKING
5049 & umask, vmask, &
5050#endif
5051 & om_v, on_u, ubar, vbar, &
5052 & ad_ubar, ad_vbar, &
5053 & drhs, duon, dvom, &
5054 & ad_drhs, ad_duon, ad_dvom)
5055 END IF
5056
5057#ifdef DISTRIBUTE
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5073 & imins, imaxs, jmins, jmaxs, &
5076 & ad_duon, ad_dvom)
5078
5079
5080
5081
5083 & imins, imaxs, jmins, jmaxs, &
5084 & ad_duon)
5085
5086
5087
5088
5090 & imins, imaxs, jmins, jmaxs, &
5091 & ad_dvom)
5092 END IF
5093#endif
5094#if defined DISTRIBUTE && !defined NESTING
5095
5096
5097
5098 DO j=jstrv-1,jendp2
5099 DO i=istru-2,iendp2
5100 cff=0.5_r8*om_v(i,j)
5101 cff1=cff*(drhs(i,j)+drhs(i,j-1))
5102# ifdef WEC_MELLOR
5103
5104
5105 ad_dvsom(i,j)=ad_dvsom(i,j)+ad_dvom(i,j)
5106
5107
5108
5109 ad_cff1=ad_cff1+vbar_stokes(i,j)*ad_dvsom(i,j)
5110 ad_vbar_stokes(i,j)=ad_vbar_stokes(i,j)+cff1*ad_dvsom(i,j)
5111 ad_dvsom(i,j)=0.0_r8
5112# endif
5113
5114
5115
5116 ad_cff1=ad_cff1+vbar(i,j,krhs)*ad_dvom(i,j)
5117 ad_vbar(i,j,krhs)=ad_vbar(i,j,krhs)+cff1*ad_dvom(i,j)
5118 ad_dvom(i,j)=0.0_r8
5119
5120
5121 adfac=cff*ad_cff1
5122 ad_drhs(i,j-1)=ad_drhs(i,j-1)+adfac
5123 ad_drhs(i,j )=ad_drhs(i,j )+adfac
5124 ad_cff1=0.0_r8
5125 END DO
5126 END DO
5127 DO j=jstrv-2,jendp2
5128 DO i=istru-1,iendp2
5129 cff=0.5_r8*on_u(i,j)
5130 cff1=cff*(drhs(i,j)+drhs(i-1,j))
5131# ifdef WEC_MELLOR
5132
5133
5134 ad_duson(i,j)=ad_duson(i,j)+ad_duon(i,j)
5135
5136
5137
5138 ad_cff1=ad_cff1+ubar_stokes(i,j)*ad_duson(i,j)
5139 ad_ubar_stokes(i,j)=ad_ubar_stokes(i,j)+cff1*ad_duson(i,j)
5140 ad_duson(i,j)=0.0_r8
5141# endif
5142
5143
5144
5145 ad_cff1=ad_cff1+ubar(i,j,krhs)*ad_duon(i,j)
5146 ad_ubar(i,j,krhs)=ad_ubar(i,j,krhs)+cff1*ad_duon(i,j)
5147 ad_duon(i,j)=0.0_r8
5148
5149
5150 adfac=cff*ad_cff1
5151 ad_drhs(i-1,j)=ad_drhs(i-1,j)+adfac
5152 ad_drhs(i ,j)=ad_drhs(i ,j)+adfac
5153 ad_cff1=0.0_r8
5154 END DO
5155 END DO
5156
5157
5158
5159 DO j=jstrv-2,jendp2
5160 DO i=istru-2,iendp2
5161
5162
5163 ad_zeta(i,j,krhs)=ad_zeta(i,j,krhs)+ad_drhs(i,j)
5164 ad_h(i,j)=ad_h(i,j)+ad_drhs(i,j)
5165 ad_drhs(i,j)=0.0_r8
5166 END DO
5167 END DO
5168
5169#else
5170
5171 DO j=jstrvm2,jendp2
5172 DO i=istrum2-1,iendp2
5173 cff=0.5_r8*om_v(i,j)
5174 cff1=cff*(drhs(i,j)+drhs(i,j-1))
5175# ifdef WEC_MELLOR
5176
5177
5178 ad_dvsom(i,j)=ad_dvsom(i,j)+ad_dvom(i,j)
5179
5180
5181
5182 ad_cff1=ad_cff1+vbar_stokes(i,j)*ad_dvsom(i,j)
5183 ad_vbar_stokes(i,j)=ad_vbar_stokes(i,j)+cff1*ad_dvsom(i,j)
5184 ad_dvsom(i,j)=0.0_r8
5185# endif
5186
5187
5188
5189 ad_cff1=ad_cff1+vbar(i,j,krhs)*ad_dvom(i,j)
5190 ad_vbar(i,j,krhs)=ad_vbar(i,j,krhs)+cff1*ad_dvom(i,j)
5191 ad_dvom(i,j)=0.0_r8
5192
5193
5194 adfac=cff*ad_cff1
5195 ad_drhs(i,j-1)=ad_drhs(i,j-1)+adfac
5196 ad_drhs(i,j )=ad_drhs(i,j )+adfac
5197 ad_cff1=0.0_r8
5198 END DO
5199 END DO
5200 DO j=jstrvm2-1,jendp2
5201 DO i=istrum2,iendp2
5202 cff=0.5_r8*on_u(i,j)
5203 cff1=cff*(drhs(i,j)+drhs(i-1,j))
5204# ifdef WEC_MELLOR
5205
5206
5207 ad_duson(i,j)=ad_duson(i,j)+ad_duon(i,j)
5208
5209
5210
5211 ad_cff1=ad_cff1+ubar_stokes(i,j)*ad_duson(i,j)
5212 ad_ubar_stokes(i,j)=ad_ubar_stokes(i,j)+cff1*ad_duson(i,j)
5213 ad_duson(i,j)=0.0_r8
5214# endif
5215
5216
5217
5218 ad_cff1=ad_cff1+ubar(i,j,krhs)*ad_duon(i,j)
5219 ad_ubar(i,j,krhs)=ad_ubar(i,j,krhs)+cff1*ad_duon(i,j)
5220 ad_duon(i,j)=0.0_r8
5221
5222
5223 adfac=cff*ad_cff1
5224 ad_drhs(i-1,j)=ad_drhs(i-1,j)+adfac
5225 ad_drhs(i ,j)=ad_drhs(i ,j)+adfac
5226 ad_cff1=0.0_r8
5227 END DO
5228 END DO
5229
5230
5231
5232 DO j=jstrvm2-1,jendp2
5233 DO i=istrum2-1,iendp2
5234
5235
5236 ad_zeta(i,j,krhs)=ad_zeta(i,j,krhs)+ad_drhs(i,j)
5237 ad_h(i,j)=ad_h(i,j)+ad_drhs(i,j)
5238 ad_drhs(i,j)=0.0_r8
5239 END DO
5240 END DO
5241#endif
5242
5243 RETURN
subroutine ad_exchange_u2d_tile(ng, tile, lbi, ubi, lbj, ubj, ad_a)
subroutine ad_exchange_v2d_tile(ng, tile, lbi, ubi, lbj, ubj, ad_a)
subroutine ad_exchange_r2d_tile(ng, tile, lbi, ubi, lbj, ubj, ad_a)
subroutine, public ad_set_duv_bc_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, kinp, umask, vmask, om_v, on_u, ubar, vbar, ad_ubar, ad_vbar, drhs, duon, dvom, ad_drhs, ad_duon, ad_dvom)
subroutine, public ad_obc_flux_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, kinp, umask, vmask, h, ad_h, om_v, on_u, ubar, vbar, zeta, ad_ubar, ad_vbar, ad_zeta)
subroutine, public ad_u2dbc_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, krhs, kstp, kout, ubar, vbar, zeta, ad_ubar, ad_vbar, ad_zeta)
subroutine, public ad_v2dbc_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, krhs, kstp, kout, ubar, vbar, zeta, ad_ubar, ad_vbar, ad_zeta)
subroutine, public ad_zetabc_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, krhs, kstp, kout, zeta, ad_zeta)
subroutine exchange_u2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
subroutine exchange_v2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
type(t_clima), dimension(:), allocatable clima
type(t_lbc), dimension(:,:,:), allocatable ad_lbc
type(t_domain), dimension(:), allocatable domain
logical, dimension(:), allocatable luvsrc
logical, dimension(:), allocatable lnudgem2clm
integer, dimension(:), allocatable iic
real(dp), dimension(:), allocatable dt
logical, dimension(:,:), allocatable ad_volcons
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
logical, dimension(:), allocatable predictor_2d_step
real(dp), dimension(:,:,:), allocatable weight
integer, dimension(:), allocatable nfast
integer, dimension(:), allocatable ndtfast
logical, dimension(:), allocatable lwsrc
real(r8), dimension(:), allocatable gamma2
logical, dimension(:,:), allocatable compositegrid
integer, parameter isouth
real(dp), dimension(:), allocatable dtfast
integer, dimension(:), allocatable ntfirst
integer, parameter inorth
integer, dimension(:), allocatable iif
type(t_sources), dimension(:), allocatable sources
integer, dimension(:), allocatable nsrc
subroutine ad_mp_exchange2d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, nghost, ew_periodic, ns_periodic, ad_a, ad_b, ad_c, ad_d)
subroutine mp_exchange2d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, nghost, ew_periodic, ns_periodic, a, b, c, d)
subroutine, public set_duv_bc_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, kinp, umask, vmask, om_v, on_u, ubar, vbar, drhs, duon, dvom)
subroutine, public obc_flux_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, kinp, umask, vmask, h, om_v, on_u, ubar, vbar, zeta)