203 & LBi, UBi, LBj, UBj, &
204 & IminS, ImaxS, JminS, JmaxS, &
210 & pmask, rmask, umask, vmask, &
212#ifdef WET_DRY_NOT_YET
213 & pmask_wet, pmask_full, &
214 & rmask_wet, rmask_full, &
215 & umask_wet, umask_full, &
216 & vmask_wet, vmask_full, &
221#if (defined UV_COR && !defined SOLVE3D) || defined step2d_coriolis
225 & om_u, om_v, on_u, on_v, omn, pm, pn, &
226#if defined CURVGRID && defined UV_ADV && !defined SOLVE3D
229#if defined UV_VIS2 && !defined SOLVE3D
230 & pmon_r, pnom_r, pmon_p, pnom_p, &
231 & om_r, on_r, om_p, on_p, &
232 & visc2_p, visc2_r, &
234#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
238 & ad_rustr2d, ad_rvstr2d, &
239 & ad_rulag2d, ad_rvlag2d, &
240 & ubar_stokes, ad_ubar_stokes, &
241 & vbar_stokes, ad_vbar_stokes, &
243#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
244 & eq_tide, ad_eq_tide, &
259 & ad_du_avg1, ad_du_avg2, &
260 & ad_dv_avg1, ad_dv_avg2, &
264 & ad_rufrc_bak, ad_rvfrc_bak, &
266#if defined NESTING && !defined SOLVE3D
267 & ad_du_flux, ad_dv_flux, &
287 integer,
intent(in ) :: ng, tile
288 integer,
intent(in ) :: LBi, UBi, LBj, UBj
289 integer,
intent(in ) :: IminS, ImaxS, JminS, JmaxS
290 integer,
intent(in ) :: kstp, knew
292 integer,
intent(in ) :: nstp, nnew
297 real(r8),
intent(in ) :: pmask(LBi:,LBj:)
298 real(r8),
intent(in ) :: rmask(LBi:,LBj:)
299 real(r8),
intent(in ) :: umask(LBi:,LBj:)
300 real(r8),
intent(in ) :: vmask(LBi:,LBj:)
302# if (defined UV_COR && !defined SOLVE3D) || defined STEP2D_CORIOLIS
303 real(r8),
intent(in ) :: fomn(LBi:,LBj:)
305 real(r8),
intent(in ) :: h(LBi:,LBj:)
306 real(r8),
intent(in ) :: om_u(LBi:,LBj:)
307 real(r8),
intent(in ) :: om_v(LBi:,LBj:)
308 real(r8),
intent(in ) :: on_u(LBi:,LBj:)
309 real(r8),
intent(in ) :: on_v(LBi:,LBj:)
310 real(r8),
intent(in ) :: omn(LBi:,LBj:)
311 real(r8),
intent(in ) :: pm(LBi:,LBj:)
312 real(r8),
intent(in ) :: pn(LBi:,LBj:)
313# if defined CURVGRID && defined UV_ADV && !defined SOLVE3D
314 real(r8),
intent(in ) :: dndx(LBi:,LBj:)
315 real(r8),
intent(in ) :: dmde(LBi:,LBj:)
317 real(r8),
intent(in ) :: rufrc(LBi:,LBj:)
318 real(r8),
intent(in ) :: rvfrc(LBi:,LBj:)
319# if defined UV_VIS2 && !defined SOLVE3D
320 real(r8),
intent(in ) :: pmon_r(LBi:,LBj:)
321 real(r8),
intent(in ) :: pnom_r(LBi:,LBj:)
322 real(r8),
intent(in ) :: pmon_p(LBi:,LBj:)
323 real(r8),
intent(in ) :: pnom_p(LBi:,LBj:)
324 real(r8),
intent(in ) :: om_r(LBi:,LBj:)
325 real(r8),
intent(in ) :: on_r(LBi:,LBj:)
326 real(r8),
intent(in ) :: om_p(LBi:,LBj:)
327 real(r8),
intent(in ) :: on_p(LBi:,LBj:)
328 real(r8),
intent(in ) :: visc2_p(LBi:,LBj:)
329 real(r8),
intent(in ) :: visc2_r(LBi:,LBj:)
331# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
332 real(r8),
intent(inout) :: ad_bed_thick(LBi:,LBj:,:)
335 real(r8),
intent(in ) :: ubar_stokes(LBi:,LBj:)
336 real(r8),
intent(in ) :: vbar_stokes(LBi:,LBj:)
338# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
339 real(r8),
intent(in ) :: eq_tide(LBi:,LBj:)
340 real(r8),
intent(inout) :: ad_eq_tide(LBi:,LBj:)
342 real(r8),
intent(in ) :: ubar(LBi:,LBj:,:)
343 real(r8),
intent(in ) :: vbar(LBi:,LBj:,:)
344 real(r8),
intent(in ) :: zeta(LBi:,LBj:,:)
345 real(r8),
intent(inout) :: ad_h(LBi:,LBj:)
347 real(r8),
intent(inout) :: ad_sustr(LBi:,LBj:)
348 real(r8),
intent(inout) :: ad_svstr(LBi:,LBj:)
349 real(r8),
intent(inout) :: ad_bustr(LBi:,LBj:)
350 real(r8),
intent(inout) :: ad_bvstr(LBi:,LBj:)
352 real(r8),
intent(inout) :: Pair(LBi:,LBj:)
356 real(r8),
intent(in ) :: rhoA(LBi:,LBj:)
357 real(r8),
intent(in ) :: rhoS(LBi:,LBj:)
358 real(r8),
intent(inout) :: ad_rhoA(LBi:,LBj:)
359 real(r8),
intent(inout) :: ad_rhoS(LBi:,LBj:)
362 real(r8),
intent(inout) :: ad_DU_avg1(LBi:,LBj:)
363 real(r8),
intent(inout) :: ad_DU_avg2(LBi:,LBj:)
364 real(r8),
intent(inout) :: ad_DV_avg1(LBi:,LBj:)
365 real(r8),
intent(inout) :: ad_DV_avg2(LBi:,LBj:)
366 real(r8),
intent(inout) :: ad_Zt_avg1(LBi:,LBj:)
367 real(r8),
intent(inout) :: ad_rufrc(LBi:,LBj:)
368 real(r8),
intent(inout) :: ad_rvfrc(LBi:,LBj:)
369 real(r8),
intent(inout) :: ad_rufrc_bak(LBi:,LBj:,:)
370 real(r8),
intent(inout) :: ad_rvfrc_bak(LBi:,LBj:,:)
373 real(r8),
intent(inout) :: ad_rustr2d(LBi:,LBj:)
374 real(r8),
intent(inout) :: ad_rvstr2d(LBi:,LBj:)
375 real(r8),
intent(inout) :: ad_rulag2d(LBi:,LBj:)
376 real(r8),
intent(inout) :: ad_rvlag2d(LBi:,LBj:)
377 real(r8),
intent(inout) :: ad_ubar_stokes(LBi:,LBj:)
378 real(r8),
intent(inout) :: ad_vbar_stokes(LBi:,LBj:)
380# ifdef WET_DRY_NOT_YET
381 real(r8),
intent(inout) :: pmask_full(LBi:,LBj:)
382 real(r8),
intent(inout) :: rmask_full(LBi:,LBj:)
383 real(r8),
intent(inout) :: umask_full(LBi:,LBj:)
384 real(r8),
intent(inout) :: vmask_full(LBi:,LBj:)
386 real(r8),
intent(inout) :: pmask_wet(LBi:,LBj:)
387 real(r8),
intent(inout) :: rmask_wet(LBi:,LBj:)
388 real(r8),
intent(inout) :: umask_wet(LBi:,LBj:)
389 real(r8),
intent(inout) :: vmask_wet(LBi:,LBj:)
391 real(r8),
intent(inout) :: rmask_wet_avg(LBi:,LBj:)
394# ifdef DIAGNOSTICS_UV
406 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
407 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
408 real(r8),
intent(inout) :: ad_zeta(LBi:,LBj:,:)
409# if defined NESTING && !defined SOLVE3D
410 real(r8),
intent(inout) :: ad_DU_flux(LBi:,LBj:)
411 real(r8),
intent(inout) :: ad_DV_flux(LBi:,LBj:)
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:)
420 real(r8),
intent(in ) :: pmask(LBi:UBi,LBj:UBj)
421 real(r8),
intent(in ) :: rmask(LBi:UBi,LBj:UBj)
422 real(r8),
intent(in ) :: umask(LBi:UBi,LBj:UBj)
423 real(r8),
intent(in ) :: vmask(LBi:UBi,LBj:UBj)
425# if (defined UV_COR && !defined SOLVE3D) || defined STEP2D_CORIOLIS
426 real(r8),
intent(in ) :: fomn(LBi:UBi,LBj:UBj)
428 real(r8),
intent(in ) :: h(LBi:UBi,LBj:UBj)
429 real(r8),
intent(in ) :: om_u(LBi:UBi,LBj:UBj)
430 real(r8),
intent(in ) :: om_v(LBi:UBi,LBj:UBj)
431 real(r8),
intent(in ) :: on_u(LBi:UBi,LBj:UBj)
432 real(r8),
intent(in ) :: on_v(LBi:UBi,LBj:UBj)
433 real(r8),
intent(in ) :: omn(LBi:UBi,LBj:UBj)
434 real(r8),
intent(in ) :: pm(LBi:UBi,LBj:UBj)
435 real(r8),
intent(in ) :: pn(LBi:UBi,LBj:UBj)
436# if defined CURVGRID && defined UV_ADV && !defined SOLVE3D
437 real(r8),
intent(in ) :: dndx(LBi:UBi,LBj:UBj)
438 real(r8),
intent(in ) :: dmde(LBi:UBi,LBj:UBj)
440 real(r8),
intent(in ) :: rufrc(LBi:UBi,LBj:UBj)
441 real(r8),
intent(in ) :: rvfrc(LBi:UBi,LBj:UBj)
442# if defined UV_VIS2 && !defined SOLVE3D
443 real(r8),
intent(in ) :: pmon_r(LBi:UBi,LBj:UBj)
444 real(r8),
intent(in ) :: pnom_r(LBi:UBi,LBj:UBj)
445 real(r8),
intent(in ) :: pmon_p(LBi:UBi,LBj:UBj)
446 real(r8),
intent(in ) :: pnom_p(LBi:UBi,LBj:UBj)
447 real(r8),
intent(in ) :: om_r(LBi:UBi,LBj:UBj)
448 real(r8),
intent(in ) :: on_r(LBi:UBi,LBj:UBj)
449 real(r8),
intent(in ) :: om_p(LBi:UBi,LBj:UBj)
450 real(r8),
intent(in ) :: on_p(LBi:UBi,LBj:UBj)
451 real(r8),
intent(in ) :: visc2_p(LBi:UBi,LBj:UBj)
452 real(r8),
intent(in ) :: visc2_r(LBi:UBi,LBj:UBj)
454# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
455 real(r8),
intent(inout) :: ad_bed_thick(LBi:UBi,LBj:UBj,3)
458 real(r8),
intent(in ) :: ubar_stokes(LBi:UBi,LBj:UBj)
459 real(r8),
intent(in ) :: vbar_stokes(LBi:UBi,LBj:UBj)
461# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
462 real(r8),
intent(in ) :: eq_tide(LBi:UBi,LBj:UBj)
463 real(r8),
intent(in ) :: ad_eq_tide(LBi:UBi,LBj:UBj)
465 real(r8),
intent(in ) :: ubar(LBi:UBi,LBj:UBj,:)
466 real(r8),
intent(in ) :: vbar(LBi:UBi,LBj:UBj,:)
467 real(r8),
intent(in ) :: zeta(LBi:UBi,LBj:UBj,:)
468 real(r8),
intent(inout) :: ad_h(LBi:UBi,LBj:UBj)
470 real(r8),
intent(inout) :: ad_sustr(LBi:UBi,LBj:UBj)
471 real(r8),
intent(inout) :: ad_svstr(LBi:UBi,LBj:UBj)
472 real(r8),
intent(inout) :: ad_bustr(LBi:UBi,LBj:UBj)
473 real(r8),
intent(inout) :: ad_bvstr(LBi:UBi,LBj:UBj)
475 real(r8),
intent(in ) :: Pair(LBi:UBi,LBj:UBj)
479 real(r8),
intent(in ) :: rhoA(LBi:UBi,LBj:UBj)
480 real(r8),
intent(in ) :: rhoS(LBi:UBi,LBj:UBj)
481 real(r8),
intent(inout) :: ad_rhoA(LBi:UBi,LBj:UBj)
482 real(r8),
intent(inout) :: ad_rhoS(LBi:UBi,LBj:UBj)
484 real(r8),
intent(inout) :: ad_DU_avg1(LBi:UBi,LBj:UBj)
485 real(r8),
intent(inout) :: ad_DU_avg2(LBi:UBi,LBj:UBj)
486 real(r8),
intent(inout) :: ad_DV_avg1(LBi:UBi,LBj:UBj)
487 real(r8),
intent(inout) :: ad_DV_avg2(LBi:UBi,LBj:UBj)
488 real(r8),
intent(inout) :: ad_Zt_avg1(LBi:UBi,LBj:UBj)
489 real(r8),
intent(inout) :: ad_rufrc(LBi:UBi,LBj:UBj)
490 real(r8),
intent(inout) :: ad_rvfrc(LBi:UBi,LBj:UBj)
491 real(r8),
intent(inout) :: ad_rufrc_bak(LBi:UBi,LBj:UBj,2)
492 real(r8),
intent(inout) :: ad_rvfrc_bak(LBi:UBi,LBj:UBj,2)
495 real(r8),
intent(inout) :: ad_rustr2d(LBi:UBi,LBj:UBj)
496 real(r8),
intent(inout) :: ad_rvstr2d(LBi:UBi,LBj:UBj)
497 real(r8),
intent(inout) :: ad_rulag2d(LBi:UBi,LBj:UBj)
498 real(r8),
intent(inout) :: ad_rvlag2d(LBi:UBi,LBj:UBj)
499 real(r8),
intent(inout) :: ad_ubar_stokes(LBi:UBi,LBj:UBj)
500 real(r8),
intent(inout) :: ad_vbar_stokes(LBi:UBi,LBj:UBj)
502# ifdef WET_DRY_NOT_YET
503 real(r8),
intent(inout) :: pmask_full(LBi:UBi,LBj:UBj)
504 real(r8),
intent(inout) :: rmask_full(LBi:UBi,LBj:UBj)
505 real(r8),
intent(inout) :: umask_full(LBi:UBi,LBj:UBj)
506 real(r8),
intent(inout) :: vmask_full(LBi:UBi,LBj:UBj)
508 real(r8),
intent(inout) :: pmask_wet(LBi:UBi,LBj:UBj)
509 real(r8),
intent(inout) :: rmask_wet(LBi:UBi,LBj:UBj)
510 real(r8),
intent(inout) :: umask_wet(LBi:UBi,LBj:UBj)
511 real(r8),
intent(inout) :: vmask_wet(LBi:UBi,LBj:UBj)
513 real(r8),
intent(inout) :: rmask_wet_avg(LBi:UBi,LBj:UBj)
516# ifdef DIAGNOSTICS_UV
528 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
529 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
530 real(r8),
intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
531# if defined NESTING && !defined SOLVE3D
532 real(r8),
intent(inout) :: ad_DU_flux(LBi:UBi,LBj:UBj)
533 real(r8),
intent(inout) :: ad_DV_flux(LBi:UBi,LBj:UBj)
535 real(r8),
intent(out ) :: ad_ubar_sol(LBi:UBi,LBj:UBj)
536 real(r8),
intent(out ) :: ad_vbar_sol(LBi:UBi,LBj:UBj)
537 real(r8),
intent(out ) :: ad_zeta_sol(LBi:UBi,LBj:UBj)
543 integer :: krhs, kbak
548 real(r8) :: cff, cff1, cff2, cff3, cff4
549#ifdef WET_DRY_NOT_YET
550 real(r8) :: cff5, cff6, cff7
552 real(r8) :: fac, fac1, fac2
553 real(r8) :: ad_cff, ad_cff1, ad_cff2, ad_cff3, ad_cff4
554#ifdef WET_DRY_NOT_YET
555 real(r8) :: ad_cff5, ad_cff6, ad_cff7
557 real(r8) :: ad_fac, ad_fac1, ad_fac2
558 real(r8) :: adfac, adfac1, adfac2, adfac3, adfac4, adfac5
560 real(r8),
parameter :: IniVal = 0.0_r8
562#if defined UV_C4ADVECTION && !defined SOLVE3D
563 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dgrad
565 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dnew
566 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs
567#if defined UV_VIS2 && !defined SOLVE3D
568 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs_p
570 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dstp
571 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUon
572 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVom
574 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUSon
575 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVSom
577#if defined STEP2D_CORIOLIS || !defined SOLVE3D
578 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
579 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
582 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
583 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
585#if defined UV_C4ADVECTION && !defined SOLVE3D
586 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: grad
588 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rubar
589 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rvbar
590 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rzeta
591 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rzeta2
592#if defined VAR_RHO_2D && defined SOLVE3D
593 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rzetaSA
595 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zeta_new
596 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zwrk
597#ifdef WET_DRY_NOT_YET
598 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: wetdry
607#if defined UV_C4ADVECTION && !defined SOLVE3D
608 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Dgrad
610 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Dnew
611 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Drhs
612#if defined UV_VIS2 && !defined SOLVE3D
613 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Drhs_p
615 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Dstp
616 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DUon
617 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DVom
619 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DUSon
620 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DVSom
622#if defined STEP2D_CORIOLIS || !defined SOLVE3D
623 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFx
624 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFe
627 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFe
628 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFx
630#if defined UV_C4ADVECTION && !defined SOLVE3D
631 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_grad
633 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rzeta2
634#if defined VAR_RHO_2D && defined SOLVE3D
635 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rzetaSA
637 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rzeta
638 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rubar
639 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rvbar
640 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_zwrk
642 real(r8),
allocatable :: ad_zeta_new(:,:)
659 real(r8),
parameter :: gamma=0.0_r8, &
660 & beta =0.14_r8, epsil=0.74_r8
662#include "set_bounds.h"
677 IF (first_2d_step)
THEN
686 WRITE (20,10)
iic(ng),
iif(ng), kbak, krhs, kstp, knew
687 10
FORMAT (
' iic = ',i5.5,
' iif = ',i3.3, &
688 &
' kbak = ',i1,
' krhs = ',i1,
' kstp = ',i1,
' knew = ',i1)
705#if defined UV_C4ADVECTION && !defined SOLVE3D
710#if defined UV_VIS2 && !defined SOLVE3D
720#if defined STEP2D_CORIOLIS || !defined SOLVE3D
728#if defined UV_C4ADVECTION && !defined SOLVE3D
732#if defined VAR_RHO_2D && defined SOLVE3D
745#if defined DISTRIBUTE && !defined NESTING
746# define IR_RANGE IstrUm2-1,Iendp2
747# define JR_RANGE JstrVm2-1,Jendp2
748# define IU_RANGE IstrUm1-1,Iendp2
749# define JU_RANGE Jstrm1-1,Jendp2
750# define IV_RANGE Istrm1-1,Iendp2
751# define JV_RANGE JstrVm1-1,Jendp2
753# define IR_RANGE IstrUm2-1,Iendp2
754# define JR_RANGE JstrVm2-1,Jendp2
755# define IU_RANGE IstrUm2,Iendp2
756# define JU_RANGE JstrVm2-1,Jendp2
757# define IV_RANGE IstrUm2-1,Iendp2
758# define JV_RANGE JstrVm2,Jendp2
763 drhs(i,j)=zeta(i,j,krhs)+h(i,j)
769 cff1=cff*(drhs(i,j)+drhs(i-1,j))
770 duon(i,j)=ubar(i,j,krhs)*cff1
776 cff1=cff*(drhs(i,j)+drhs(i,j-1))
777 dvom(i,j)=vbar(i,j,krhs)*cff1
788#if defined DISTRIBUTE && \
789 defined uv_adv && defined uv_c4advection &&
800 & imins, imaxs, jmins, jmaxs, &
803 & imins, imaxs, jmins, jmaxs, &
807 & imins, imaxs, jmins, jmaxs, &
818 & lbi, ubi, lbj, ubj, &
819 & imins, imaxs, jmins, jmaxs, &
831 & lbi, ubi, lbj, ubj, &
832 & imins, imaxs, jmins, jmaxs, &
852 zeta_new(i,j)=zeta(i,j,knew)
854 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
855# ifdef WET_DRY_NOT_YET
860 dnew(i,j)=h(i,j)+zeta_new(i,j)
861 dstp(i,j)=h(i,j)+zeta(i,j,kstp)
869 allocate ( ad_zeta_new(imins:imaxs,jmins:jmaxs) )
873 IF (first_2d_step)
THEN
879 cff1=0.333333333333_r8
880 cff2=0.666666666667_r8
886 cff2=1.0_r8-2.0_r8*beta
905 zwrk(i,j)=cff1*zeta_new(i,j)+ &
906 & cff2*zeta(i,j,kstp)+ &
907 & cff3*zeta(i,j,kbak)
908#if defined VAR_RHO_2D && defined SOLVE3D
909 rzeta(i,j)=(1.0_r8+rhos(i,j))*zwrk(i,j)
910 rzeta2(i,j)=rzeta(i,j)*zwrk(i,j)
911 rzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
914 rzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
919 IF (first_2d_step)
THEN
920 cff =0.333333333333_r8
921 cff1=0.333333333333_r8
922 cff2=0.333333333333_r8
926 cff1=(0.5_r8-gamma)*epsil
927 cff2=(0.5_r8+2.0_r8*gamma)*epsil
942 zwrk(i,j)=cff *zeta(i,j,krhs)+ &
943 & cff1*zeta_new(i,j)+ &
944 & cff2*zeta(i,j,kstp)+ &
945 & cff3*zeta(i,j,kbak)
946#if defined VAR_RHO_2D && defined SOLVE3D
947 rzeta(i,j)=(1.0_r8+rhos(i,j))*zwrk(i,j)
948 rzeta2(i,j)=rzeta(i,j)*zwrk(i,j)
949 rzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
952 rzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
966 ad_zeta_sol(i,j)=ad_zeta(i,j,knew)
969 ad_ubar_sol(i,j)=ad_ubar(i,j,knew)
973 ad_vbar_sol(i,j)=ad_vbar(i,j,knew)
981 ad_zeta_sol(i,j)=ad_zeta(i,j,knew)
984 ad_ubar_sol(i,j)=ad_ubar(i,j,knew)
988 ad_vbar_sol(i,j)=ad_vbar(i,j,knew)
1008 & lbi, ubi, lbj, ubj, &
1011 & ad_zeta(:,:,knew), &
1012 & ad_ubar(:,:,knew), &
1013 & ad_vbar(:,:,knew))
1022 & lbi, ubi, lbj, ubj, &
1023 & ad_vbar(:,:,knew))
1029 & lbi, ubi, lbj, ubj, &
1030 & ad_ubar(:,:,knew))
1036 & lbi, ubi, lbj, ubj, &
1037 & ad_zeta(:,:,knew))
1040#ifdef WET_DRY_NOT_YET
1066#if defined NESTING && !defined SOLVE3D
1083 & lbi, ubi, lbj, ubj, &
1086 & ad_du_flux, ad_dv_flux)
1095 & lbi, ubi, lbj, ubj, &
1102 & lbi, ubi, lbj, ubj, &
1121 IF ((
iif(ng).eq.
nfast(ng)).and.(knew.lt.3))
THEN
1140 & lbi, ubi, lbj, ubj, &
1143 & ad_du_avg2, ad_dv_avg2)
1151 & lbi, ubi, lbj, ubj, &
1154 & ad_zt_avg1, ad_du_avg1, ad_dv_avg1)
1163 & lbi, ubi, lbj, ubj, &
1170 & lbi, ubi, lbj, ubj, &
1177 & lbi, ubi, lbj, ubj, &
1184 & lbi, ubi, lbj, ubj, &
1191 & lbi, ubi, lbj, ubj, &
1212 ad_zt_avg1(i,j)=ad_zt_avg1(i,j)+ad_zeta(i,j,knew)
1213 ad_zeta(i,j,knew)=0.0_r8
1222 adfac=cff1*om_v(i,j)*ad_dv_avg1(i,j)
1223 adfac1=adfac*vbar(i,j,knew)
1224 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)+ &
1225 & (dnew(i,j)+dnew(i,j-1))*adfac
1226 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac1
1227 ad_dnew(i,j )=ad_dnew(i,j )+adfac1
1237 adfac=cff1*on_u(i,j)*ad_du_avg1(i,j)
1238 adfac1=adfac*ubar(i,j,knew)
1239 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)+ &
1240 & (dnew(i,j)+dnew(i-1,j))*adfac
1241 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac1
1242 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac1
1247 ad_zeta(i,j,knew)=ad_zeta(i,j,knew)+cff*ad_zt_avg1(i,j)
1252 IF (
domain(ng)%Northern_Edge(tile))
THEN
1256 ad_h(i,jend+1)=ad_h(i,jend+1)+ &
1258 ad_zeta_new(i,jend+1)=ad_zeta_new(i,jend+1)+ &
1260 ad_dnew(i,jend+1)=0.0_r8
1265 IF (
domain(ng)%Southern_Edge(tile))
THEN
1269 ad_h(i,jstr-1)=ad_h(i,jstr-1)+ &
1271 ad_zeta_new(i,jstr-1)=ad_zeta_new(i,jstr-1)+ &
1273 ad_dnew(i,jstr-1)=0.0_r8
1278 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1282 ad_h(iend+1,j)=ad_h(iend+1,j)+ &
1284 ad_zeta_new(iend+1,j)=ad_zeta_new(iend+1,j)+ &
1286 ad_dnew(iend+1,j)=0.0_r8
1291 IF (
domain(ng)%Western_Edge(tile))
THEN
1295 ad_h(istr-1,j)=ad_h(istr-1,j)+ &
1297 ad_zeta_new(istr-1,j)=ad_zeta_new(istr-1,j)+ &
1299 ad_dnew(istr-1,j)=0.0_r8
1317 IF (((istrr.le.i).and.(i.le.iendr)).and. &
1318 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
1319 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
1320 cff=1.0_r8/(on_u(i,j)* &
1321 & 0.5_r8*(dnew(i-1,j)+dnew(i,j)))
1322#if defined NESTING && !defined SOLVE3D
1327 ad_du_flux(i,j)=0.0_r8
1334 ad_du_avg1(i,j)=0.0_r8
1340 & cff*ad_ubar(i,j,knew)
1342 &
sources(ng)%Qbar(is)*ad_ubar(i,j,knew)
1344 ad_ubar(i,j,knew)=0.0_r8
1348 adfac=-cff*cff*on_u(i,j)*0.5_r8*ad_cff
1349 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac
1350 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac
1352 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
1353 cff=1.0_r8/(om_v(i,j)* &
1354 & 0.5_r8*(dnew(i,j-1)+dnew(i,j)))
1355#if defined NESTING && !defined SOLVE3D
1360 ad_dv_flux(i,j)=0.0_r8
1367 ad_dv_avg1(i,j)=0.0_r8
1373 & cff*ad_vbar(i,j,knew)
1375 &
sources(ng)%Qbar(is)*ad_vbar(i,j,knew)
1376 ad_vbar(i,j,knew)=0.0_r8
1380 adfac=-cff*cff*om_v(i,j)*0.5_r8*ad_cff
1381 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac
1382 ad_dnew(i,j )=ad_dnew(i,j )+adfac
1389#if defined NESTING && !defined SOLVE3D
1394 IF (
domain(ng)%Northern_Edge(tile))
THEN
1404 adfac=0.5_r8*om_v(i,jend+1)*ad_dv_flux(i,jend+1)
1405 adfac1=adfac1*vbar(i,jend+1,knew)
1406 ad_vbar(i,jend+1,knew)=ad_vbar(i,jend+1,knew)+ &
1407 & (dnew(i,jend+1)+ &
1408 & dnew(i,jend ))*adfac
1409 ad_dnew(i,jend )=ad_dnew(i,jend )+adfac1
1410 ad_dnew(i,jend+1)=ad_dnew(i,jend+1)+adfac1
1411 ad_dv_flux(i,jend+1)=0.0_r8
1422 adfac=0.5_r8*on_u(i,jend+1)*ad_du_flux(i,jend+1)
1423 adfac1=adfac*ubar(i,jend+1,knew)
1424 ad_ubar(i,jend+1,knew)=ad_ubar(i,jend+1,knew)+ &
1425 & (dnew(i ,jend+1)+ &
1426 & dnew(i-1,jend+1))*adfac
1427 ad_dnew(i-1,jend+1)=ad_dnew(i-1,jend+1)+adfac1
1428 ad_dnew(i ,jend+1)=ad_dnew(i ,jend+1)+adfac1
1429 ad_du_flux(i,jend+1)=0.0_r8
1435 IF (
domain(ng)%Southern_Edge(tile))
THEN
1445 adfac=0.5_r8*om_v(i,jstrv-1)*ad_dv_flux(i,jstrv-1)
1446 adfac1=adfac*vbar(i,jstrv-1,knew)
1447 ad_vbar(i,jstrv-1,knew)=ad_vbar(i,jstrv-1,knew)+ &
1448 & (dnew(i,jstrv-1)+ &
1449 & dnew(i,jstrv-2))*adfac
1450 ad_dnew(i,jstrv-2)=ad_dnew(i,jstrv-2)+adfac1
1451 ad_dnew(i,jstrv-1)=ad_dnew(i,jstrv-1)+adfac1
1452 ad_dv_flux(i,jstrv-1)=0.0_r8
1463 adfac=0.5_r8*on_u(i,jstr-1)*ad_du_flux(i,jstr-1)
1464 adfac1=adfac*ubar(i,jstr-1,knew)
1465 ad_ubar(i,jstr-1,knew)=ad_ubar(i,jstr-1,knew)+ &
1466 & (dnew(i ,jstr-1)+ &
1467 & dnew(i-1,jstr-1))*adfac
1468 ad_dnew(i-1,jstr-1)=ad_dnew(i-1,jstr-1)+adfac1
1469 ad_dnew(i ,jstr-1)=ad_dnew(i ,jstr-1)+adfac1
1470 ad_du_flux(i,jstr-1)=0.0_r8
1476 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1486 adfac=0.5_r8*om_v(iend+1,j)*ad_dv_flux(iend+1,j)
1487 adfac1=adfac*vbar(iend+1,j,knew)
1488 ad_vbar(iend+1,j,knew)=ad_vbar(iend+1,j,knew)+ &
1489 & (dnew(iend+1,j )+ &
1490 & dnew(iend+1,j-1))*adfac
1491 ad_dnew(iend+1,j-1)=ad_dnew(iend+1,j-1)+adfac1
1492 ad_dnew(iend+1,j )=ad_dnew(iend+1,j )+adfac1
1493 ad_dv_flux(iend+1,j)=0.0_r8
1504 adfac=0.5_r8*on_u(iend+1,j)*ad_du_flux(iend+1,j)
1505 adfac1=adfac*ubar(iend+1,j,knew)
1506 ad_ubar(iend+1,j,knew)=ad_ubar(iend+1,j,knew)+ &
1507 & (dnew(iend+1,j)+ &
1508 & dnew(iend ,j))*adfac
1509 ad_dnew(iend ,j)=ad_dnew(iend ,j)+adfac1
1510 ad_dnew(iend+1,j)=ad_dnew(iend+1,j)+adfac1
1511 ad_du_flux(iend+1,j)=0.0_r8
1517 IF (
domain(ng)%Western_Edge(tile))
THEN
1527 adfac=0.5_r8*om_v(istr-1,j)*ad_dv_flux(istr-1,j)
1528 adfac1=adfac*vbar(istr-1,j,knew)
1529 ad_vbar(istr-1,j,knew)=ad_vbar(istr-1,j,knew)+ &
1530 & (dnew(istr-1,j )+ &
1531 & dnew(istr-1,j-1))*adfac
1532 ad_dnew(istr-1,j-1)=ad_dnew(istr-1,j-1)+adfac1
1533 ad_dnew(istr-1,j )=ad_dnew(istr-1,j )+adfac1
1534 ad_dv_flux(istr-1,j)=0.0_r8
1545 adfac=0.5_r8*on_u(istru-1,j)*ad_du_flux(istru-1,j)
1546 adfac1=adfac*ubar(istru-1,j,knew)
1547 ad_ubar(istru-1,j,knew)=ad_ubar(istru-1,j,knew)+ &
1548 & (dnew(istru-1,j)+ &
1549 & dnew(istru-2,j))*adfac
1550 ad_dnew(istru-2,j)=ad_dnew(istru-2,j)+adfac1
1551 ad_dnew(istru-1,j)=ad_dnew(istru-1,j)+adfac1
1552 ad_du_flux(istru-1,j)=0.0_r8
1558 IF (
domain(ng)%Northern_Edge(tile))
THEN
1562 ad_h(i,jend+1)=ad_h(i,jend+1)+ &
1564 ad_zeta_new(i,jend+1)=ad_zeta_new(i,jend+1)+ &
1566 ad_dnew(i,jend+1)=0.0_r8
1571 IF (
domain(ng)%Southern_Edge(tile))
THEN
1575 ad_h(i,jstr-1)=ad_h(i,jstr-1)+ &
1577 ad_zeta_new(i,jstr-1)=ad_zeta_new(i,jstr-1)+ &
1579 ad_dnew(i,jstr-1)=0.0_r8
1584 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1588 ad_h(iend+1,j)=ad_h(iend+1,j)+ &
1590 ad_zeta_new(iend+1,j)=ad_zeta_new(iend+1,j)+ &
1592 ad_dnew(iend+1,j)=0.0_r8
1597 IF (
domain(ng)%Western_Edge(tile))
THEN
1601 ad_h(istr-1,j)=ad_h(istr-1,j)+ &
1603 ad_zeta_new(istr-1,j)=ad_zeta_new(istr-1,j)+ &
1605 ad_dnew(istr-1,j)=0.0_r8
1631 & lbi, ubi, lbj, ubj, &
1632 & imins, imaxs, jmins, jmaxs, &
1637 & h, ad_h, om_v, on_u, &
1638 & ubar, vbar, zeta, &
1639 & ad_ubar, ad_vbar, ad_zeta)
1652 & lbi, ubi, lbj, ubj, &
1653 & imins, imaxs, jmins, jmaxs, &
1654 & krhs, kstp, knew, &
1655 & ubar, vbar, zeta, &
1656 & ad_ubar, ad_vbar, ad_zeta)
1665 & lbi, ubi, lbj, ubj, &
1666 & imins, imaxs, jmins, jmaxs, &
1667 & krhs, kstp, knew, &
1668 & ubar, vbar, zeta, &
1669 & ad_ubar, ad_vbar, ad_zeta)
1677 IF (first_2d_step)
THEN
1685 cff3=0.5_r8+2.0_r8*gamma
1691 cff=cff1*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
1692 fac2=1.0_r8/(dnew(i,j)+dnew(i,j-1))
1693#if defined NESTING && !defined SOLVE3D
1700 adfac=0.5_r8*om_v(i,j)*ad_dv_flux(i,j)
1701 adfac1=adfac*vbar(i,j,knew)
1702 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)+ &
1703 & (dnew(i,j)+dnew(i,j-1))*adfac
1704 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac1
1705 ad_dnew(i,j )=ad_dnew(i,j )+adfac1
1706 ad_dv_flux(i,j)=0.0_r8
1708#ifdef WET_DRY_NOT_YET
1721 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)+cff2*ad_vbar(i,j,knew)
1722 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)+cff3*ad_vbar(i,j,knew)
1723 ad_vbar(i,j,kbak)=ad_vbar(i,j,kbak)+cff4*ad_vbar(i,j,knew)
1724 ad_vbar(i,j,knew)=0.0_r8
1728 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)*vmask(i,j)
1750 adfac=fac2*ad_vbar(i,j,knew)
1751 adfac1=adfac*(dstp(i,j)+dstp(i,j-1))
1753 adfac3=adfac*vbar(i,j,kbak)
1754 ad_vbar(i,j,kbak)=ad_vbar(i,j,kbak)+adfac1
1756 ad_rvbar(i,j)=ad_rvbar(i,j)+adfac2
1757 ad_rvfrc(i,j)=ad_rvfrc(i,j)+adfac2
1759 ad_rvbar(i,j)=ad_rvbar(i,j)+adfac2
1760 ad_svstr(i,j)=ad_svstr(i,j)+4.0_r8*cff1*adfac
1762 ad_dstp(i,j-1)=ad_dstp(i,j-1)+adfac3
1763 ad_dstp(i,j )=ad_dstp(i,j )+adfac3
1765 & ad_vbar(i,j,knew)* &
1766 & (vbar(i,j,kbak)* &
1767 & (dstp(i,j)+dstp(i,j-1))+ &
1769 & cff*(rvbar(i,j)+rvfrc(i,j)))
1771 & cff*rvbar(i,j)+4.0_r8*cff1*svstr(i,j))
1773 ad_vbar(i,j,knew)=0.0_r8
1776 adfac=-fac2*fac2*ad_fac2
1777 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac
1778 ad_dnew(i,j )=ad_dnew(i,j )+adfac
1785 cff=cff1*(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
1786 fac1=1.0_r8/(dnew(i,j)+dnew(i-1,j))
1787#if defined NESTING && !defined SOLVE3D
1794 adfac=0.5_r8*on_u(i,j)*ad_du_flux(i,j)
1795 adfac1=adfac*ubar(i,j,knew)
1796 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)+ &
1797 & (dnew(i,j)+dnew(i-1,j))*adfac
1798 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac1
1799 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac1
1800 ad_du_flux(i,j)=0.0_r8
1802#ifdef WET_DRY_NOT_YET
1815 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)+cff2*ad_ubar(i,j,knew)
1816 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)+cff3*ad_ubar(i,j,knew)
1817 ad_ubar(i,j,kbak)=ad_ubar(i,j,kbak)+cff4*ad_ubar(i,j,knew)
1818 ad_ubar(i,j,knew)=0.0_r8
1822 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)*umask(i,j)
1844 adfac=fac1*ad_ubar(i,j,knew)
1845 adfac1=adfac*(dstp(i,j)+dstp(i-1,j))
1847 adfac3=adfac*ubar(i,j,kbak)
1848 ad_ubar(i,j,kbak)=ad_ubar(i,j,kbak)+adfac1
1850 ad_rubar(i,j)=ad_rubar(i,j)+adfac2
1851 ad_rufrc(i,j)=ad_rufrc(i,j)+adfac2
1853 ad_rubar(i,j)=ad_rubar(i,j)+adfac2
1854 ad_sustr(i,j)=ad_sustr(i,j)+4.0_r8*cff1*adfac
1857 & ad_ubar(i,j,knew)* &
1858 & (ubar(i,j,kbak)* &
1859 & (dstp(i,j)+dstp(i-1,j))+ &
1861 & cff*(rubar(i,j)+rufrc(i,j)))
1863 & cff*rubar(i,j)+4.0_r8*cff1*sustr(i,j))
1865 ad_ubar(i,j,knew)=0.0_r8
1868 adfac=-fac1*fac1*ad_fac1
1869 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac
1870 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac
1879 cff=cff1*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
1880 fac2=1.0_r8/(dnew(i,j)+dnew(i,j-1))
1881#if defined NESTING && !defined SOLVE3D
1888 adfac=0.5_r8*om_v(i,j)*ad_dv_flux(i,j)
1889 adfac1=adfac*vbar(i,j,knew)
1890 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)+ &
1891 & (dnew(i,j)+dnew(i,j-1))*adfac
1892 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac1
1893 ad_dnew(i,j )=ad_dnew(i,j )+adfac1
1894 ad_dv_flux(i,j)=0.0_r8
1896#ifdef WET_DRY_NOT_YET
1908 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)*vmask(i,j)
1930 adfac=fac2*ad_vbar(i,j,knew)
1931 adfac1=adfac*(dstp(i,j)+dstp(i,j-1))
1933 adfac3=adfac*vbar(i,j,kstp)
1934 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)+adfac1
1936 ad_rvbar(i,j)=ad_rvbar(i,j)+adfac2
1937 ad_rvfrc(i,j)=ad_rvfrc(i,j)+adfac2
1939 ad_rvbar(i,j)=ad_rvbar(i,j)+adfac2
1940 ad_svstr(i,j)=ad_svstr(i,j)+4.0_r8*cff1*adfac
1942 ad_dstp(i,j-1)=ad_dstp(i,j-1)+adfac3
1943 ad_dstp(i,j )=ad_dstp(i,j )+adfac3
1945 & ad_vbar(i,j,knew)* &
1946 & (vbar(i,j,kstp)* &
1947 & (dstp(i,j)+dstp(i,j-1))+ &
1949 & cff*(rvbar(i,j)+rvfrc(i,j)))
1951 & cff*rvbar(i,j)+4.0_r8*cff1*svstr(i,j))
1953 ad_vbar(i,j,knew)=0.0_r8
1956 adfac=-fac2*fac2*ad_fac2
1957 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac
1958 ad_dnew(i,j )=ad_dnew(i,j )+adfac
1966 cff=cff1*(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
1967 fac1=1.0_r8/(dnew(i,j)+dnew(i-1,j))
1968#if defined NESTING && !defined SOLVE3D
1975 adfac=0.5_r8*on_u(i,j)*ad_du_flux(i,j)
1976 adfac1=adfac*ubar(i,j,knew)
1977 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)+ &
1978 & (dnew(i,j)+dnew(i-1,j))*adfac
1979 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac1
1980 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac1
1981 ad_du_flux(i,j)=0.0_r8
1983#ifdef WET_DRY_NOT_YET
1995 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)*umask(i,j)
2017 adfac=fac1*ad_ubar(i,j,knew)
2018 adfac1=adfac*(dstp(i,j)+dstp(i-1,j))
2020 adfac3=adfac*ubar(i,j,kstp)
2021 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)+adfac1
2023 ad_rubar(i,j)=ad_rubar(i,j)+adfac2
2024 ad_rufrc(i,j)=ad_rufrc(i,j)+adfac2
2026 ad_rubar(i,j)=ad_rubar(i,j)+adfac2
2027 ad_sustr(i,j)=ad_sustr(i,j)+4.0_r8*cff1*adfac
2030 & ad_ubar(i,j,knew)* &
2031 & (ubar(i,j,kstp)* &
2032 & (dstp(i,j)+dstp(i-1,j))+ &
2034 & cff*(rubar(i,j)+rufrc(i,j)))
2036 & cff*rubar(i,j)+4.0_r8*cff1*sustr(i,j))
2038 ad_ubar(i,j,knew)=0.0_r8
2041 adfac=-fac1*fac1*ad_fac1
2042 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac
2043 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac
2056 ad_h(i,j)=ad_h(i,j)+ad_dstp(i,j)
2057 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+ad_dstp(i,j)
2066 ad_h(i,j)=ad_h(i,j)+ad_dstp(i,j)
2067 ad_zeta(i,j,kbak)=ad_zeta(i,j,kbak)+ad_dstp(i,j)
2102 IF (first_time_step)
THEN
2106 ELSE IF (first_time_step+1)
THEN
2112 cff2=-0.5_r8-2.0_r8*cff3
2118 IF (j.ge.jstrv)
THEN
2119# ifdef DIAGNOSTICS_UV
2133# if defined VAR_RHO_2D && defined SOLVE3D
2158 adfac=cff1*om_v(i,j)*ad_rvbar(i,j)
2159 adfac1=adfac*(rzeta(i,j-1)-rzeta(i,j ))
2160 adfac2=adfac*(h(i,j-1)-h(i,j ))
2161 ad_h(i,j-1)=ad_h(i,j-1)+adfac1
2162 ad_h(i,j )=ad_h(i,j )+adfac1
2163 ad_rzeta(i,j-1)=ad_rzeta(i,j-1)+adfac2
2164 ad_rzeta(i,j )=ad_rzeta(i,j )-adfac2
2165 ad_rzeta2(i,j-1)=ad_rzeta2(i,j-1)+adfac
2166 ad_rzeta2(i,j )=ad_rzeta2(i,j )-adfac
2167# if defined VAR_RHO_2D && defined SOLVE3D
2168 adfac3=adfac*(rzetasa(i,j-1)+ &
2170 & cff2*(rhoa(i,j-1)- &
2174 adfac4=adfac2*cff2*(zwrk(i,j-1)-zwrk(i,j))
2175 adfac5=adfac2*cff2*(rhoa(i,j-1)-rhoa(i,j))
2176 ad_h(i,j-1)=ad_h(i,j-1)+adfac3
2177 ad_h(i,j )=ad_h(i,j )-adfac3
2178 ad_rzetasa(i,j-1)=ad_rzetasa(i,j-1)+adfac2
2179 ad_rzetasa(i,j )=ad_rzetasa(i,j )+adfac2
2180 ad_rhoa(i,j-1)=ad_rhoa(i,j-1)+adfac4
2181 ad_rhoa(i,j )=ad_rhoa(i,j )-adfac4
2182 ad_zwrk(i,j-1)=ad_zwrk(i,j-1)+adfac5
2183 ad_zwrk(i,j )=ad_zwrk(i,j )-adfac5
2187 IF (i.ge.istru)
THEN
2188# ifdef DIAGNOSTICS_UV
2202# if defined VAR_RHO_2D && defined SOLVE3D
2227 adfac=cff1*on_u(i,j)*ad_rubar(i,j)
2228 adfac1=adfac*(rzeta(i-1,j)-rzeta(i ,j))
2229 adfac2=adfac*(h(i-1,j)+h(i ,j))
2230 ad_h(i-1,j)=ad_h(i-1,j)+adfac1
2231 ad_h(i ,j)=ad_h(i ,j)+adfac1
2232 ad_rzeta(i-1,j)=ad_rzeta(i-1,j)+adfac2
2233 ad_rzeta(i ,j)=ad_rzeta(i ,j)-adfac2
2234 ad_rzeta2(i-1,j)=ad_rzeta2(i-1,j)+adfac
2235 ad_rzeta2(i ,j)=ad_rzeta2(i ,j)-adfac
2236# if defined VAR_RHO_2D && defined SOLVE3D
2237 adfac3=adfac*(rzetasa(i-1,j)+ &
2239 & cff2*(rhoa(i-1,j)- &
2243 adfac4=adfac2*cff2*(zwrk(i-1,j)-zwrk(i,j))
2244 adfac5=adfac2*cff2*(rhoa(i-1,j)-rhoa(i,j))
2245 ad_h(i-1,j)=ad_h(i-1,j)+adfac3
2246 ad_h(i ,j)=ad_h(i ,j)-adfac3
2247 ad_rzetasa(i-1,j)=ad_rzetasa(i-1,j)+adfac2
2248 ad_rzetasa(i ,j)=ad_rzetasa(i ,j)+adfac2
2249 ad_rhoa(i-1,j)=ad_rhoa(i-1,j)+adfac4
2250 ad_rhoa(i ,j)=ad_rhoa(i ,j)-adfac4
2251 ad_zwrk(i-1,j)=ad_zwrk(i-1,j)+adfac5
2252 ad_zwrk(i ,j)=ad_zwrk(i ,j)-adfac5
2264 cff2=0.333333333333_r8
2265 cff3=1.666666666666_r8
2269# if defined VAR_RHO_2D && defined SOLVE3D
2275 adfac=zwrk(i,j)*ad_rzetasa(i,j)
2276 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
2277 & (rhos(i,j)-rhoa(i,j))*ad_rzetasa(i,j)
2278 ad_rhos(i,j)=ad_rhos(i,j)+adfac
2279 ad_rhoa(i,j)=ad_rhoa(i,j)-adfac
2280 ad_rzetasa(i,j)=0.0_r8
2288 adfac=rzeta(i,j)*ad_rzeta2(i,j)
2289 ad_rzeta(i,j)=ad_rzeta(i,j)+ &
2290 & (cff2*zeta_new(i,j)+ &
2291 & cff3*zeta(i,j,kstp))*ad_rzeta2(i,j)
2292 ad_zeta_new(i,j)=ad_zeta_new(i,j)+cff2*adfac
2293 tl_zeta(i,j,kstp)=tl_zeta(i,j,kstp)+cff3*adfac
2294 ad_rzeta2(i,j)=0.0_r8
2298 ad_zwrk(i,j)=ad_zwrk(i,j)+(1.0_r8+rhos(i,j))*ad_rzeta(i,j)
2299 ad_rhos(i,j)=ad_rhos(i,j)+zwrk(i,j)*ad_rzeta(i,j)
2300 ad_rzeta(i,j)=0.0_r8
2309 adfac=zwrk(i,j)*ad_rzeta2(i,j)
2310 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
2311 & (cff2*zeta_new(i,j)+ &
2312 & cff3*zeta(i,j,kstp))*ad_rzeta2(i,j)
2313 ad_zeta_new(i,j)=ad_zeta_new(i,j)+cff2*adfac
2314 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+cff3*adfac3
2315 ad_rzeta2(i,j)=0.0_r8
2318 ad_zwrk(i,j)=ad_zwrk(i,j)+ad_rzeta(i,j)
2319 ad_rzeta(i,j)=0.0_r8
2323 adfac=cff2*ad_zwrk(i,j)
2324 ad_zeta_new(i,j)=ad_zeta_new(i,j)+adfac
2325 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)-adfac
2334 ad_cff=ad_cff+ad_rvfrc_bak(i,j,nstp)
2335 ad_rvfrc_bak(i,j,nstp)=0.0_r8
2340 ad_cff=ad_cff+cff1*ad_rvfrc(i,j)
2341 ad_rvfrc_bak(i,j,3-nstp)=ad_rvfrc_bak(i,j,3-nstp)+ &
2342 & cff2*ad_rvfrc(i,j)
2343 ad_rvfrc_bak(i,j,nstp )=ad_rvfrc_bak(i,j,nstp )+ &
2344 & cff3*ad_rvfrc(i,j)
2345 ad_rvfrc(i,j)=0.0_r8
2348 ad_rvfrc(i,j)=ad_rvfrc(i,j)+ad_cff
2349 ad_rvbar(i,j)=ad_rvbar(i,j)-ad_cff
2358 ad_cff=ad_cff+ad_rufrc_bak(i,j,nstp)
2359 ad_rufrc_bak(i,j,nstp)=0.0_r8
2364 ad_cff=ad_cff+cff1*ad_rufrc(i,j)
2365 ad_rufrc_bak(i,j,3-nstp)=ad_rufrc_bak(i,j,3-nstp)+ &
2366 & cff2*ad_rufrc(i,j)
2367 ad_rufrc_bak(i,j,nstp )=ad_rufrc_bak(i,j,nstp )+ &
2368 & cff3*ad_rufrc(i,j)
2369 ad_rufrc(i,j)=0.0_r8
2372 ad_rufrc(i,j)=ad_rufrc(i,j)+ad_cff
2373 ad_rubar(i,j)=ad_rubar(i,j)-ad_cff
2392# ifdef STEP2D_CORIOLIS
2408# ifdef DIAGNOSTICS_UV
2413 ad_fac=ad_fac-ad_rvbar(i,j)
2416 ad_bvstr(i,j)=ad_bvstr(i,j)+ &
2417 & om_v(i,j)*on_v(i,j)*ad_fac
2424# ifdef DIAGNOSTICS_UV
2429 ad_fac=ad_fac-tl_rubar(i,j)
2432 ad_bustr(i,j)=ad_bustr(i,j)+ &
2433 & om_u(i,j)*on_u(i,j)*ad_fac
2437# ifdef DIAGNOSTICS_UV
2454#if defined UV_VIS2 && !defined SOLVE3D
2464 drhs_p(i,j)=0.25_r8*(drhs(i,j )+drhs(i-1,j )+ &
2465 & drhs(i,j-1)+drhs(i-1,j-1))
2473 IF (j.ge.jstrv)
THEN
2474# if defined DIAGNOSTICS_UV
2481 ad_fac=ad_fac+ad_rvbar(i,j)
2484 ad_cff1=ad_cff1+ad_fac
2485 ad_cff2=ad_cff2-ad_fac
2490 adfac=0.5_r8*(pm(i,j-1)+pm(i,j))*ad_cff2
2491 ad_vfe(i,j-1)=ad_vfe(i,j-1)-adfac
2492 ad_vfe(i,j )=ad_vfe(i,j )+adfac
2497 adfac=0.5_r8*(pn(i,j-1)+pn(i,j))*ad_cff1
2498 ad_vfx(i ,j)=ad_vfx(i ,j)-adfac
2499 ad_vfx(i+1,j)=ad_vfx(i+1,j)+adfac
2503 IF (i.ge.istru)
THEN
2504# if defined DIAGNOSTICS_UV
2511 ad_fac=ad_fac+ad_rubar(i,j)
2514 ad_cff1=ad_cff1+ad_fac
2515 ad_cff2=ad_cff2+ad_fac
2520 adfac=0.5_r8*(pm(i-1,j)+pm(i,j))*ad_cff2
2521 ad_ufe(i,j )=ad_ufe(i,j )-adfac
2522 ad_ufe(i,j+1)=ad_ufe(i,j+1)+adfac
2527 adfac=0.5_r8*(pn(i-1,j)+pn(i,j))*ad_cff1
2528 ad_ufx(i-1,j)=ad_ufx(i-1,j)-adfac
2529 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
2544 & on_p(i,j)*on_p(i,j)*ad_vfx(i,j)+ &
2545 & om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
2548# ifdef WET_DRY_NOT_YET
2551 ad_cff=ad_cff*pmask_wet(i,j)
2556 ad_cff=ad_cff*pmask(i,j)
2574 adfac=visc2_p(i,j)*0.5_r8*ad_cff
2575 adfac1=adfac*drhs_p(i,j)
2576 adfac2=adfac1*pmon_p(i,j)
2577 adfac3=adfac1*pnom_p(i,j)
2578 ad_drhs_p(i,j)=ad_drhs_p(i,j)+ &
2580 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,kstp)- &
2581 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,kstp))+ &
2583 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,kstp)- &
2584 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,kstp)))* &
2586 ad_vbar(i-1,j,kstp)=ad_vbar(i-1,j,kstp)- &
2587 & (pn(i-1,j-1)+pn(i-1,j))*adfac2
2588 ad_vbar(i ,j,kstp)=ad_vbar(i ,j,kstp)+ &
2589 & (pn(i ,j-1)+pn(i ,j))*adfac2
2590 ad_ubar(i,j-1,kstp)=ad_ubar(i,j-1,kstp)- &
2591 & (pm(i-1,j-1)+pm(i,j-1))*adfac3
2592 ad_ubar(i,j ,kstp)=ad_ubar(i,j ,kstp)+ &
2593 & (pm(i-1,j )+pm(i,j ))*adfac3
2604 & om_r(i,j)*om_r(i,j)*ad_vfe(i,j)+ &
2605 & on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
2624 adfac=visc2_r(i,j)*0.5_r8*ad_cff
2625 adfac1=adfac*drhs(i,j)
2626 adfac2=adfac1*pmon_r(i,j)
2627 adfac3=adfac1*pnom_r(i,j)
2628 ad_drhs(i,j)=ad_drhs(i,j)+ &
2630 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,kstp)- &
2631 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,kstp))- &
2633 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,kstp)- &
2634 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,kstp)))* &
2636 ad_ubar(i ,j,kstp)=ad_ubar(i ,j,kstp)- &
2637 & (pn(i-1,j)+pn(i ,j))*adfac2
2638 ad_ubar(i+1,j,kstp)=ad_ubar(i+1,j,kstp)+ &
2639 & (pn(i ,j)+pn(i+1,j))*adfac2
2640 ad_vbar(i,j ,kstp)=ad_vbar(i,j ,kstp)+ &
2641 & (pm(i,j-1)+pm(i,j ))*adfac3
2642 ad_vbar(i,j+1,kstp)=ad_vbar(i,j+1,kstp)- &
2643 & (pm(i,j )+pm(i,j+1))*adfac3
2655 adfac=0.25_r8*ad_drhs_p(i,j)
2656 ad_drhs(i-1,j-1)=ad_drhs(i-1,j-1)+adfac
2657 ad_drhs(i-1,j )=ad_drhs(i-1,j )+adfac
2658 ad_drhs(i, j-1)=ad_drhs(i ,j-1)+adfac
2659 ad_drhs(i ,j )=ad_drhs(i ,j )+adfac
2660 ad_drhs_p(i,j)=0.0_r8
2665#if (defined CURVGRID && defined UV_ADV) && !defined SOLVE3D
2673 IF (j.ge.jstrv)
THEN
2674# if defined DIAGNOSTICS_UV
2682 ad_fac1=ad_fac1-ad_rvbar(i,j)
2685 adfac=0.5_r8*ad_fac1
2686 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac
2687 ad_vfe(i,j )=ad_vfe(i,j )+adfac
2691 IF (i.ge.istru)
THEN
2692# if defined DIAGNOSTICS_UV
2700 ad_fac1=ad_fac1+ad_rubar(i,j)
2703 adfac=0.5_r8*ad_fac1
2704 ad_ufx(i-1,j)=ad_ufx(i-1,j)+adfac
2705 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
2713 cff1=0.5_r8*(vbar(i,j ,krhs)+ &
2715 & vbar_stokes(i,j )+ &
2716 & vbar_stokes(i,j+1)+ &
2719 cff2=0.5_r8*(ubar(i ,j,krhs)+ &
2721 & ubar_stokes(i ,j)+ &
2722 & ubar_stokes(i+1,j)+ &
2727 cff=drhs(i,j)*(cff3-cff4)
2728# if defined DIAGNOSTICS_UV
2737 & cff1*ad_ufx(i,j)+ &
2739 ad_cff1=ad_cff1+cff*ad_ufx(i,j)
2740 ad_cff2=ad_cff2+cff*ad_vfe(i,j)
2746 adfac=drhs(i,j)*ad_cff
2747 ad_cff4=ad_cff4-adfac
2748 ad_cff3=ad_cff3+adfac
2749 ad_drhs(i,j)=ad_drhs(i,j)+(cff3-cff4)*ad_cff
2753 ad_cff2=ad_cff2+dmde(i,j)*ad_cff4
2757 ad_cff1=ad_cff1+dndx(i,j)*ad_cff3
2766 adfac=0.5_r8*ad_cff2
2767 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)+adfac
2768 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+adfac
2770 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac
2771 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac
2781 adfac=0.5_r8*ad_cff1
2782 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+adfac
2783 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+adfac
2785 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac
2786 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac
2793#if (defined UV_COR & !defined SOLVE3D) || defined STEP2D_CORIOLIS
2801 IF (j.ge.jstrv)
THEN
2802# if defined DIAGNOSTICS_UV
2807 ad_fac2=ad_fac2-ad_rvbar(i,j)
2810 adfac=0.5_r8*ad_fac2
2811 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac
2812 ad_vfe(i,j )=ad_vfe(i,j )+adfac
2816 IF (i.ge.istru)
THEN
2817# if defined DIAGNOSTICS_UV
2822 ad_fac1=tl_fac1+ad_rubar(i,j)
2825 adfac=0.5_r8*ad_fac1
2826 ad_ufx(i-1,j)=ad_ufx(i-1,j)+adfac
2827 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
2835 cff=0.5_r8*drhs(i,j)*fomn(i,j)
2849 adfac=cff*ad_vfe(i,j)
2850 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)+adfac
2851 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+adfac
2853 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac
2854 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac
2857 & (ubar(i ,j,krhs)+ &
2859 & ubar_stokes(i ,j)+ &
2860 & ubar_stokes(i+1,j)+ &
2862 & ubar(i+1,j,krhs))*ad_vfe(i,j)
2878 adfac=cff*ad_ufx(i,j)
2879 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+adfac
2880 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+adfac
2882 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac
2883 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac
2886 & (vbar(i,j ,krhs)+ &
2888 & vbar_stokes(i,j )+ &
2889 & vbar_stokes(i,j+1)+ &
2891 & vbar(i,j+1,krhs))*ad_ufx(i,j)
2895 ad_drhs(i,j)=ad_drhs(i,j)+0.5_r8*fomn(i,j)*ad_cff
2901#if defined UV_ADV && !defined SOLVE3D
2911 IF (j.ge.jstrv)
THEN
2912# if defined DIAGNOSTICS_UV
2919 ad_fac=ad_fac-ad_rvbar(i,j)
2922 ad_cff1=ad_cff1+ad_fac
2923 ad_cff2=ad_cff2+ad_fac
2927 ad_vfe(i,j-1)=ad_vfe(i,j-1)-ad_cff2
2928 ad_vfe(i,j )=ad_vfe(i,j )+ad_cff2
2932 ad_vfx(i ,j)=ad_vfx(i ,j)-ad_cff1
2933 ad_vfx(i+1,j)=ad_vfx(i+1,j)+ad_cff1
2937 IF (i.ge.istru)
THEN
2938# if defined DIAGNOSTICS_UV
2945 ad_fac=ad_fac-ad_rubar(i,j)
2948 ad_cff1=ad_cff1+ad_fac
2949 ad_cff2=ad_cff2+ad_fac
2953 ad_ufe(i,j )=ad_ufe(i,j )-ad_cff2
2954 ad_ufe(i,j+1)=ad_ufe(i,j+1)+ad_cff2
2958 ad_ufx(i-1,j)=ad_ufx(i-1,j)-ad_cff1
2959 ad_ufx(i ,j)=ad_ufx(i ,j)+ad_cff1
2965# ifdef UV_C2ADVECTION
2987 adfac=0.25_r8*ad_vfe(i,j)
2988 adfac1=adfac*(vbar(i,j ,krhs)+ &
2990 & vbar_stokes(i,j )+ &
2991 & vbar_stokes(i,j+1)+ &
2994 adfac2=adfac*(dvom(i,j)+dvom(i,j+1))
2995 ad_dvom(i,j )=ad_dvom(i,j )+adfac1
2996 ad_dvom(i,j+1)=ad_dvom(i,j+1)+adfac1
2997 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+adfac2
2998 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+adfac2
3000 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac2
3001 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac2
3025 adfac=0.25_r8*ad_vfx(i,j)
3026 adfac1=adfac*(vbar(i ,j,krhs)+ &
3028 & vbar_stokes(i ,j)+ &
3029 & vbar_stokes(i-1,j)+ &
3032 adfac2=adfac*(duon(i,j)+duon(i,j-1))
3033 ad_duon(i,j )=ad_duon(i,j )+adfac1
3034 ad_duon(i,j-1)=ad_duon(i,j-1)+adfac1
3035 ad_vbar(i ,j,krhs)=ad_vbar(i ,j,krhs)+adfac2
3036 ad_vbar(i-1,j,krhs)=ad_vbar(i-1,j,krhs)+adfac2
3038 ad_vbar_stokes(i-1,j)=ad_vbar_stokes(i-1,j)+adfac2
3039 ad_vbar_stokes(i ,j)=ad_vbar_stokes(i ,j)+adfac2
3063 adfac=0.25_r8*ad_ufe(i,j)
3064 adfac1=adfac*(ubar(i,j ,krhs)+ &
3066 & ubar_stokes(i,j )+ &
3067 & ubar_stokes(i,j-1)+ &
3070 adfac2=adfac*(dvom(i,j)+dvom(i-1,j))
3071 ad_dvom(i ,j)=ad_dvom(i ,j)+adfac1
3072 ad_dvom(i-1,j)=ad_dvom(i-1,j)+adfac1
3073 ad_ubar(i,j ,krhs)=ad_ubar(i,j ,krhs)+adfac2
3074 ad_ubar(i,j-1,krhs)=ad_ubar(i,j-1,krhs)+adfac2
3076 ad_ubar_stokes(i,j-1)=ad_ubar_stokes(i,j-1)+adfac2
3077 ad_ubar_stokes(i,j )=ad_ubar_stokes(i,j )+adfac2
3101 adfac=0.25_r8*ad_ufx(i,j)
3102 adfac1=adfac*(ubar(i ,j,krhs)+ &
3104 & ubar_stokes(i ,j)+ &
3105 & ubar_stokes(i+1,j)+ &
3108 adfac2=adfac*(duon(i,j)+duon(i+1,j))
3109 ad_duon(i ,j)=ad_duon(i ,j)+adfac1
3110 ad_duon(i+1,j)=ad_duon(i+1,j)+adfac1
3111 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)+adfac2
3112 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+adfac2
3114 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac2
3115 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac2
3121# elif defined UV_C4ADVECTION
3127 grad(i,j)=vbar(i,j-1,krhs)-2.0_r8*vbar(i,j,krhs)+ &
3129 & vbar_stokes(i,j-1)-2.0_r8*vbar_stokes(i,j)+ &
3130 & vbar_stokes(i,j+1)+ &
3133 dgrad(i,j)=dvom(i,j-1)-2.0_r8*dvom(i,j)+dvom(i,j+1)
3137 IF (
domain(ng)%Northern_Edge(tile))
THEN
3139 grad(i,jend+1)=grad(i,jend)
3140 dgrad(i,jend+1)=dgrad(i,jend)
3145 IF (
domain(ng)%Southern_Edge(tile))
THEN
3147 grad(i,jstr)=grad(i,jstr+1)
3148 dgrad(i,jstr)=dgrad(i,jstr+1)
3176 adfac=0.25_r8*ad_vfe(i,j)
3177 adfac1=adfac*(dvom(i,j)+dvom(i,j+1)- &
3178 & cff*(dgrad(i,j)+dgrad(i,j+1)))
3180 adfac3=adfac*(vbar(i,j ,krhs)+ &
3182 & vbar_stokes(i,j )+ &
3183 & vbar_stokes(i,j+1)+ &
3185 & vbar(i,j+1,krhs)- &
3186 & cff*(grad(i,j)+grad(i,j+1)))
3188 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+adfac1
3189 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+adfac1
3191 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac1
3192 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac1
3194 ad_grad(i,j )=ad_grad(i,j )-adfac2
3195 ad_grad(i,j+1)=ad_grad(i,j+1)-adfac2
3196 ad_dvom(i,j )=ad_dvom(i,j )+adfac3
3197 ad_dvom(i,j+1)=ad_dvom(i,j+1)+adfac3
3198 ad_dgrad(i,j )=ad_dgrad(i,j )-adfac4
3199 ad_dgrad(i,j+1)=ad_dgrad(i,j+1)-adfac4
3205 IF (
domain(ng)%Northern_Edge(tile))
THEN
3209 ad_dgrad(i,jend)=ad_dgrad(i,jend)+ad_dgrad(i,jend+1)
3210 ad_dgrad(i,jend+1)=0.0_r8
3213 ad_grad(i,jend)=ad_grad(i,jend)+ad_grad(i,jend+1)
3214 ad_grad(i,jend+1)=0.0_r8
3219 IF (
domain(ng)%Southern_Edge(tile))
THEN
3223 ad_dgrad(i,jstr+1)=ad_dgrad(i,jstr+1)+ad_dgrad(i,jstr)
3224 ad_dgrad(i,jstr)=0.0_r8
3227 ad_grad(i,jstr+1)=ad_grad(i,jstr+1)+ad_grad(i,jstr)
3228 ad_grad(i,jstr)=0.0_r8
3237 ad_dvom(i,j-1)=ad_dvom(i,j-1)+ad_dgrad(i,j)
3238 ad_dvom(i,j )=ad_dvom(i,j )-2.0_r8*ad_dgrad(i,j)
3239 ad_dvom(i,j+1)=ad_dvom(i,j+1)+ad_dgrad(i,j)
3240 ad_dgrad(i,j)=0.0_r8
3248 ad_vbar(i,j-1,krhs)=ad_vbar(i,j-1,krhs)+ad_grad(i,j)
3249 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)- &
3250 & 2.0_r8*ad_grad(i,j)
3251 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+ad_grad(i,j)
3253 ad_vbar_stokes(i,j-1)=ad_vbar_stokes(i,j-1)+ad_grad(i,j)
3254 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )- &
3255 & 2.0_r8*ad_grad(i,j)
3256 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+ad_grad(i,j)
3264 grad(i,j)=vbar(i-1,j,krhs)-2.0_r8*vbar(i,j,krhs)+ &
3266 & vbar_stokes(i-1,j)-2.0_r8*vbar_stokes(i,j)+ &
3267 & vbar_stokes(i+1,j)+ &
3273 IF (
domain(ng)%Western_Edge(tile))
THEN
3275 grad(istr-1,j)=grad(istr,j)
3280 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3282 grad(iend+1,j)=grad(iend,j)
3288 dgrad(i,j)=duon(i,j-1)-2.0_r8*duon(i,j)+duon(i,j+1)
3315 adfac=0.25_r8*ad_vfx(i,j)
3316 adfac1=adfac*(duon(i,j)+duon(i,j-1)- &
3317 & cff*(dgrad(i,j)+dgrad(i,j-1)))
3319 adfac3=adfac*(vbar(i ,j,krhs)+ &
3321 & vbar_stokes(i ,j)+ &
3322 & vbar_stokes(i-1,j)+ &
3324 & vbar(i-1,j,krhs)- &
3325 & cff*(grad(i,j)+grad(i-1,j)))
3327 ad_vbar(i-1,j,krhs)=ad_vbar(i-1,j,krhs)+adfac1
3328 ad_vbar(i ,j,krhs)=ad_vbar(i ,j,krhs)+adfac1
3330 ad_vbar_stokes(i-1,j)=ad_vbar_stokes(i-1,j)+adfac1
3331 ad_vbar_stokes(i ,j)=ad_vbar_stokes(i ,j)+adfac1
3333 ad_grad(i-1,j)=ad_grad(i-1,j)-adfac2
3334 ad_grad(i ,j)=ad_grad(i ,j)-adfac2
3335 ad_duon(i,j-1)=ad_duon(i,j-1)+adfac3
3336 ad_duon(i,j )=ad_duon(i,j )+adfac3
3337 ad_dgrad(i,j-1)=ad_dgrad(i,j-1)-adfac4
3338 ad_dgrad(i,j )=ad_dgrad(i,j )-adfac4
3348 ad_duon(i,j-1)=ad_duon(i,j-1)+ad_dgrad(i,j)
3349 ad_duon(i,j )=ad_duon(i,j )-2.0_r8*ad_dgrad(i,j)
3350 ad_duon(i,j+1)=ad_duon(i,j+1)+ad_dgrad(i,j)
3351 ad_dgrad(i,j)=0.0_r8
3355 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3359 ad_grad(iend,j)=ad_grad(iend,j)+ad_grad(iend+1,j)
3360 ad_grad(iend+1,j)=0.0_r8
3365 IF (
domain(ng)%Western_Edge(tile))
THEN
3369 ad_grad(istr,j)=ad_grad(istr,j)+ad_grad(istr-1,j)
3370 ad_grad(istr-1,j)=0.0_r8
3383 ad_vbar(i-1,j,krhs)=ad_vbar(i-1,j,krhs)+ad_grad(i,j)
3384 ad_vbar(i ,j,krhs)=ad_vbar(i ,j,krhs)- &
3385 & 2.0_r8*ad_grad(i,j)
3386 ad_vbar(i+1,j,krhs)=ad_vbar(i+1,j,krhs)+ad_grad(i,j)
3388 ad_vbar_stokes(i-1,j)=ad_vbar_stokes(i-1,j)+ad_grad(i,j)
3389 ad_vbar_stokes(i ,j)=ad_vbar_stokes(i ,j)- &
3390 & 2.0_r8*ad_grad(i,j)
3391 ad_vbar_stokes(i+1,j)=ad_vbar_stokes(i+1,j)+ad_grad(i,j)
3401 grad(i,j)=ubar(i,j-1,krhs)-2.0_r8*ubar(i,j,krhs)+ &
3403 & ubar_stokes(i,j-1)-2.0_r8*ubar_stokes(i,j)+ &
3404 & ubar_stokes(i,j+1)+ &
3410 IF (
domain(ng)%Southern_Edge(tile))
THEN
3412 grad(i,jstr-1)=grad(i,jstr)
3417 IF (
domain(ng)%Northern_Edge(tile))
THEN
3419 grad(i,jend+1)=grad(i,jend)
3425 dgrad(i,j)=dvom(i-1,j)-2.0_r8*dvom(i,j)+dvom(i+1,j)
3452 adfac=0.25_r8*ad_ufe(i,j)
3453 adfac1=adfac*(dvom(i,j)+dvom(i-1,j)- &
3454 & cff*(dgrad(i,j)+dgrad(i-1,j)))
3456 adfac3=adfac*(ubar(i,j ,krhs)+ &
3458 & ubar_stokes(i,j )+ &
3459 & ubar_stokes(i,j-1)+ &
3461 & ubar(i,j-1,krhs)- &
3462 & cff*(grad(i,j)+grad(i,j-1)))
3464 ad_ubar(i,j-1,krhs)=ad_ubar(i,j-1,krhs)+adfac1
3465 ad_ubar(i,j ,krhs)=ad_ubar(i,j ,krhs)+adfac1
3467 ad_ubar_stokes(i,j-1)=ad_ubar_stokes(i,j-1)+adfac1
3468 ad_ubar_stokes(i,j )=ad_ubar_stokes(i,j )+adfac1
3470 ad_grad(i,j-1)=ad_grad(i,j-1)-adfac2
3471 ad_grad(i,j )=ad_grad(i,j )-adfac2
3472 ad_dvom(i-1,j)=ad_dvom(i-1,j)+adfac3
3473 ad_dvom(i ,j)=ad_dvom(i ,j)+adfac3
3474 ad_dgrad(i-1,j)=ad_dgrad(i-1,j)-adfac4
3475 ad_dgrad(i ,j)=ad_dgrad(i ,j)-adfac4
3485 ad_dvom(i-1,j)=ad_dvom(i-1,j)+ad_dgrad(i,j)
3486 ad_dvom(i ,j)=ad_dvom(i ,j)-2.0_r8*ad_dgrad(i,j)
3487 ad_dvom(i+1,j)=ad_dvom(i+1,j)+ad_dgrad(i,j)
3488 ad_dgrad(i,j)=0.0_r8
3492 IF (
domain(ng)%Northern_Edge(tile))
THEN
3496 ad_grad(i,jend)=ad_grad(i,jend)+ad_grad(i,jend+1)
3497 ad_grad(i,jend+1)=0.0_r8
3502 IF (
domain(ng)%Southern_Edge(tile))
THEN
3506 ad_grad(i,jstr)=ad_grad(i,jstr)+ad_grad(i,jstr-1)
3507 ad_grad(i,jstr-1)=0.0_r8
3520 ad_ubar(i,j-1,krhs)=ad_ubar(i,j-1,krhs)+ad_grad(i,j)
3521 ad_ubar(i,j ,krhs)=ad_ubar(i,j ,krhs)- &
3522 & 2.0_r8*ad_grad(i,j)
3523 ad_ubar(i,j+1,krhs)=ad_ubar(i,j+1,krhs)+ad_grad(i,j)
3525 ad_ubar_stokes(i,j-1)=ad_ubar_stokes(i,j-1)+ad_grad(i,j)
3526 ad_ubar_stokes(i,j )=ad_ubar_stokes(i,j)- &
3527 & 2.0_r8*ad_grad(i,j)
3528 ad_ubar_stokes(i,j+1)=ad_ubar_stokes(i,j+1)+ad_grad(i,j)
3536 grad(i,j)=ubar(i-1,j,krhs)-2.0_r8*ubar(i,j,krhs)+ &
3538 & ubar_stokes(i-1,j)-2.0_r8*ubar_stokes(i,j)+ &
3539 & ubar_stokes(i+1,j)+ &
3542 dgrad(i,j)=duon(i-1,j)-2.0_r8*duon(i,j)+duon(i+1,j)
3546 IF (
domain(ng)%Western_Edge(tile))
THEN
3548 grad(istr,j)=grad(istr+1,j)
3549 dgrad(istr,j)=dgrad(istr+1,j)
3554 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3556 grad(iend+1,j)=grad(iend,j)
3557 dgrad(iend+1,j)=dgrad(iend,j)
3585 adfac=0.25_r8*ad_ufx(i,j)
3586 adfac1=adfac*(duon(i,j)+duon(i+1,j)- &
3587 & cff*(dgrad(i,j)+dgrad(i+1,j)))
3589 adfac3=adfac*(ubar(i ,j,krhs)+ &
3591 & ubar_stokes(i ,j)+ &
3592 & ubar_stokes(i+1,j)+ &
3594 & ubar(i+1,j,krhs)- &
3595 & cff*(grad(i,j)+grad(i+1,j)))
3597 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)+adfac1
3598 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+adfac1
3600 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac1
3601 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac1
3603 ad_grad(i ,j)=ad_grad(i ,j)-adfac2
3604 ad_grad(i+1,j)=ad_grad(i+1,j)-adfac2
3605 ad_duon(i ,j)=ad_duon(i ,j)+adfac3
3606 ad_duon(i+1,j)=ad_duon(i+1,j)+adfac3
3607 ad_dgrad(i ,j)=ad_dgrad(i ,j)-adfac4
3608 ad_dgrad(i+1,j)=ad_dgrad(i+1,j)-adfac4
3614 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3618 ad_dgrad(iend,j)=ad_dgrad(iend,j)+ad_dgrad(iend+1,j)
3619 ad_dgrad(iend+1,j)=0.0_r8
3622 ad_grad(iend,j)=ad_grad(iend,j)+ad_grad(iend+1,j)
3623 ad_grad(iend+1,j)=0.0_r8
3628 IF (
domain(ng)%Western_Edge(tile))
THEN
3632 ad_dgrad(istr+1,j)=ad_dgrad(istr+1,j)+ad_dgrad(istr,j)
3633 ad_dgrad(istr,j)=0.0_r8
3636 ad_grad(istr+1,j)=ad_grad(istr+1,j)+ad_grad(istr,j)
3637 ad_grad(istr,j)=0.0_r8
3646 ad_duon(i-1,j)=ad_duon(i-1,j)+ad_dgrad(i,j)
3647 ad_duon(i ,j)=ad_duon(i ,j)-2.0_r8*ad_dgrad(i,j)
3648 ad_duon(i+1,j)=ad_duon(i+1,j)+ad_dgrad(i,j)
3649 ad_dgrad(i,j)=0.0_r8
3657 ad_ubar(i-1,j,krhs)=ad_ubar(i-1,j,krhs)+ad_grad(i,j)
3658 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)- &
3659 & 2.0_r8*ad_grad(i,j)
3660 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+ad_grad(i,j)
3661# ifdef NEARHSORE_MELLOR
3662 ad_ubar_stokes(i-1,j)=ad_ubar_stokes(i-1,j)+ad_grad(i,j)
3663 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)- &
3664 & 2.0_r8*ad_grad(i,j)
3665 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+ad_grad(i,j)
3683 cff2=0.333333333333_r8
3684#if !defined SOLVE3D && defined ATM_PRESS
3685 fac=0.5_r8*100.0_r8/
rho0
3689 IF (j.ge.jstrv)
THEN
3690#ifdef DIAGNOSTICS_UV
3693#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
3703 adfac=cff1*om_v(i,j)*ad_rvbar(i,j)
3704 adfac1=adfac*(eq_tide(i,j)-eq_tide(i,j-1))
3705 adfac2=adfac*(h(i,j-1)+h(i,j)+ &
3706 & rzeta(i,j-1)+rzeta(i,j))
3707 ad_h(i,j-1)=ad_h(i,j-1)-adfac1
3708 ad_h(i,j )=ad_h(i,j )-adfac1
3709 ad_rzeta(i,j-1)=ad_rzeta(i,j-1)-adfac1
3710 ad_rzeta(i,j )=ad_rzeta(i,j )-adfac1
3711 ad_eq_tide(i,j-1)=ad_eq_tide(i,j-1)+adfac2
3712 ad_eq_tide(i,j )=ad_eq_tide(i,j )-adfac2
3714#if defined ATM_PRESS && !defined SOLVE3D
3721 adfac=-fac*om_v(i,j)*(pair(i,j)-pair(i,j-1)*ad_rvbar(i,j)
3722 ad_h(i,j-1)=ad_h(i,j-1)+adfac
3723 ad_h(i,j )=ad_h(i,j )+adfac
3724 ad_rzeta(i,j-1)=ad_rzeta(i,j-1)+adfac
3725 ad_rzeta(i,j )=ad_rzeta(i,j )+adfac
3736#if defined VAR_RHO_2D && defined SOLVE3D
3761 adfac=cff1*om_v(i,j)*ad_rvbar(i,j)
3762 adfac1=adfac*(rzeta(i,j-1)-rzeta(i,j ))
3763 adfac2=adfac*(h(i,j-1)+h(i,j ))
3764 ad_h(i,j-1)=ad_h(i,j-1)+adfac1
3765 ad_h(i,j )=ad_h(i,j )+adfac1
3766 ad_rzeta(i,j-1)=ad_rzeta(i,j-1)+adfac2
3767 ad_rzeta(i,j )=ad_rzeta(i,j )-adfac2
3768 ad_rzeta2(i,j-1)=ad_rzeta2(i,j-1)+adfac
3769 ad_rzeta2(i,j )=ad_rzeta2(i,j )-adfac
3770#if defined VAR_RHO_2D && defined SOLVE3D
3771 adfac3=adfac*(rzetasa(i,j-1)+ &
3773 & cff2*(rhoa(i,j-1)- &
3777 adfac4=adfac2*cff2*(zwrk(i,j-1)-zwrk(i,j))
3778 adfac5=adfac2*cff2*(rhoa(i,j-1)-rhoa(i,j))
3779 ad_h(i,j-1)=ad_h(i,j-1)+adfac3
3780 ad_h(i,j )=ad_h(i,j )-adfac3
3781 ad_rzetasa(i,j-1)=ad_rzetasa(i,j-1)+adfac2
3782 ad_rzetasa(i,j )=ad_rzetasa(i,j )+adfac2
3783 ad_rhoa(i,j-1)=ad_rhoa(i,j-1)+adfac4
3784 ad_rhoa(i,j )=ad_rhoa(i,j )-adfac4
3785 ad_zwrk(i,j-1)=ad_zwrk(i,j-1)+adfac5
3786 ad_zwrk(i,j )=ad_zwrk(i,j )-adfac5
3788 ad_rvbar(i,j)=0.0_r8
3791 IF (i.ge.istru)
THEN
3792#ifdef DIAGNOSTICS_UV
3795#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
3805 adfac=cff1*on_u(i,j)*ad_rubar(i,j)
3806 adfac1=adfac*(eq_tide(i,j)-eq_tide(i-1,j))
3807 adfac2=adfac*(h(i-1,j)+h(i,j)+ &
3808 & rzeta(i-1,j)+rzeta(i,j))
3809 ad_h(i-1,j)=ad_h(i-1,j)-adfac1
3810 ad_h(i ,j)=ad_h(i ,j)-adfac1
3811 ad_rzeta(i-1,j)=ad_rzeta(i-1,j)-adfac1
3812 ad_rzeta(i ,j)=ad_rzeta(i ,j)-adfac1
3813 ad_eq_tide(i-1,j)=ad_eq_tide(i-1,j)+adfac2
3814 ad_eq_tide(i ,j)=ad_eq_tide(i ,j)-adfac2
3816#if defined ATM_PRESS && !defined SOLVE3D
3823 adfac=-fac*on_u(i,j)*(pair(i,j)-pair(i-1,j))*ad_rubar(i,j)
3824 ad_h(i-1,j)=ad_h(i-1,j)+adfac
3825 ad_h(i ,j)=ad_h(i ,j)+adfac
3826 ad_rzeta(i-1,j)=ad_rzeta(i-1,j)+adfac
3827 ad_rzeta(i ,j)=ad_rzeta(i ,j)+adfac
3838#if defined VAR_RHO_2D && defined SOLVE3D
3863 adfac=cff1*on_u(i,j)*ad_rubar(i,j)
3864 adfac1=adfac*(rzeta(i-1,j)-rzeta(i ,j))
3865 adfac2=adfac*(h(i-1,j)+h(i ,j))
3866 ad_h(i-1,j)=ad_h(i-1,j)+adfac1
3867 ad_h(i ,j)=ad_h(i ,j)+adfac1
3868 ad_rzeta(i-1,j)=ad_rzeta(i-1,j)+adfac2
3869 ad_rzeta(i ,j)=ad_rzeta(i ,j)-adfac2
3870 ad_rzeta2(i-1,j)=ad_rzeta2(i-1,j)+adfac
3871 ad_rzeta2(i ,j)=ad_rzeta2(i ,j)-adfac
3872#if defined VAR_RHO_2D && defined SOLVE3D
3873 adfac3=adfac*(rzetasa(i-1,j)+ &
3875 & cff2*(rhoa(i-1,j)- &
3879 adfac4=adfac2*cff2*(zwrk(i-1,j)-zwrk(i,j))
3880 adfac5=adfac2*cff2*(rhoa(i-1,j)-rhoa(i,j))
3881 ad_h(i-1,j)=ad_h(i-1,j)+adfac3
3882 ad_h(i ,j)=ad_h(i ,j)-adfac3
3883 ad_rzetasa(i-1,j)=ad_rzetasa(i-1,j)+adfac2
3884 ad_rzetasa(i ,j)=ad_rzetasa(i ,j)+adfac2
3885 ad_rhoa(i-1,j)=ad_rhoa(i-1,j)+adfac4
3886 ad_rhoa(i ,j)=ad_rhoa(i ,j)-adfac4
3887 ad_zwrk(i-1,j)=ad_zwrk(i-1,j)+adfac5
3888 ad_zwrk(i ,j)=ad_zwrk(i ,j)-adfac5
3890 ad_rubar(i,j)=0.0_r8
3907 IF (first_2d_step)
THEN
3913 cff2=0.5_r8+2.0_r8*gamma
3922 ad_zeta_new(i,j)=ad_zeta_new(i,j)+cff1*ad_zeta(i,j,knew)
3923 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+cff2*ad_zeta(i,j,knew)
3924 ad_zeta(i,j,kbak)=ad_zeta(i,j,kbak)+cff3*ad_zeta(i,j,knew)
3925 ad_zeta(i,j,knew)=0.0_r8
3933 ad_zeta_new(i,j)=ad_zeta_new(i,j)+ad_zeta(i,j,knew)
3934 ad_zeta(i,j,knew)=0.0_r8
3951 CALL ad_zetabc_local (ng, tile, &
3952 & lbi, ubi, lbj, ubj, &
3953 & imins, imaxs, jmins, jmaxs, &
3956 & zeta_new, ad_zeta_new)
3964 IF (int(
sources(ng)%Dsrc(is)).eq.2)
THEN
3967 IF (((istrr.le.i).and.(i.le.iendr)).and. &
3968 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
3990 IF (first_2d_step)
THEN
3996 cff1=0.333333333333_r8
3997 cff2=0.666666666667_r8
4003 cff2=1.0_r8-2.0_r8*beta
4009 fac=cff*pm(i,j)*pn(i,j)
4010#if defined VAR_RHO_2D && defined SOLVE3D
4014 adfac=zwrk(i,j)*ad_rzetasa(i,j)
4015 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4016 & (rhos(i,j)-rhoa(i,j))*ad_rzetasa(i,j)
4017 ad_rhos(i,j)=ad_rhos(i,j)+adfac
4018 ad_rhoa(i,j)=ad_rhoa(i,j)-adfac
4019 ad_rzetasa(i,j)=0.0_r8
4023 ad_rzeta(i,j)=ad_rzeta(i,j)+zwrk(i,j)*ad_rzeta2(i,j)
4024 ad_zwrk(i,j)=ad_zwrk(i,j)+rzeta(i,j)*ad_rzeta2(i,j)
4025 ad_rzeta2(i,j)=0.0_r8
4029 ad_rhos(i,j)=ad_rhos(i,j)+zwrk(i,j)*ad_rzeta(i,j)
4030 ad_zwrk(i,j)=ad_zwrk(i,j)+(1.0_r8+rhos(i,j))*ad_rzeta(i,j)
4031 ad_rzeta(i,j)=0.0_r8
4036 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4037 & 2.0_r8*zwrk(i,j)*ad_rzeta2(i,j)+ &
4044 ad_zeta_new(i,j)=ad_zeta_new(i,j)+cff1*ad_zwrk(i,j)
4045 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+cff2*ad_zwrk(i,j)
4046 ad_zeta(i,j,kbak)=ad_zeta(i,j,kbak)+cff3*ad_zwrk(i,j)
4050 ad_h(i,j)=ad_h(i,j)+ad_dnew(i,j)
4053# ifdef WET_DRY_NOT_YET
4059 ad_zeta_new(i,j)=ad_zeta_new(i,j)*rmask(i,j)
4065 adfac=fac*ad_zeta_new(i,j)
4066 ad_zeta(i,j,kbak)=ad_zeta(i,j,kbak)+ad_zeta_new(i,j)
4067 ad_duon(i ,j)=ad_duon(i ,j)+adfac
4068 ad_duon(i+1,j)=ad_duon(i+1,j)-adfac
4069 ad_dvom(i,j )=ad_dvom(i,j )+adfac
4070 ad_dvom(i,j+1)=ad_dvom(i,j+1)-adfac
4071 ad_zeta_new(i,j)=0.0_r8
4075 IF (first_2d_step)
THEN
4076 cff =0.333333333333_r8
4077 cff1=0.333333333333_r8
4078 cff2=0.333333333333_r8
4082 cff1=(0.5_r8-gamma)*epsil
4083 cff2=(0.5_r8+2.0_r8*gamma)*epsil
4089 fac=
dtfast(ng)*pm(i,j)*pn(i,j)
4090#if defined VAR_RHO_2D && defined SOLVE3D
4094 adfac=zwrk(i,j)*ad_rzetasa(i,j)
4095 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4096 & (rhos(i,j)-rhoa(i,j))*ad_rzetasa(i,j)
4097 ad_rhos(i,j)=ad_rhos(i,j)+adfac
4098 ad_rhoa(i,j)=ad_rhoa(i,j)-adfac
4099 ad_rzetasa(i,j)=0.0_r8
4103 ad_rzeta(i,j)=ad_rzeta(i,j)+zwrk(i,j)*ad_rzeta2(i,j)
4104 ad_zwrk(i,j)=ad_zwrk(i,j)+rzeta(i,j)*ad_rzeta2(i,j)
4105 ad_rzeta2(i,j)=0.0_r8
4109 ad_rhos(i,j)=ad_rhos(i,j)+zwrk(i,j)*ad_rzeta(i,j)
4110 ad_zwrk(i,j)=ad_zwrk(i,j)+(1.0_r8+rhos(i,j))*ad_rzeta(i,j)
4111 ad_rzeta(i,j)=0.0_r8
4116 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4117 & 2.0_r8*zwrk(i,j)*ad_rzeta2(i,j)+ &
4125 ad_zeta_new(i,j)=ad_zeta_new(i,j)+cff1*ad_zwrk(i,j)
4126 ad_zeta(i,j,krhs)=ad_zeta(i,j,krhs)+cff *ad_zwrk(i,j)
4127 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+cff2*ad_zwrk(i,j)
4128 ad_zeta(i,j,kbak)=ad_zeta(i,j,kbak)+cff3*ad_zwrk(i,j)
4132 ad_h(i,j)=ad_h(i,j)+ad_dnew(i,j)
4133 ad_zeta_new(i,j)=ad_zeta_new(i,j)+ad_dnew(i,j)
4136# ifdef WET_DRY_NOT_YET
4142 ad_zeta_new(i,j)=ad_zeta_new(i,j)*rmask(i,j)
4148 adfac=fac*ad_zeta_new(i,j)
4149 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+ad_zeta_new(i,j)
4150 ad_duon(i ,j)=ad_duon(i ,j)+adfac
4151 ad_duon(i+1,j)=ad_duon(i+1,j)-adfac
4152 ad_dvom(i,j )=ad_dvom(i,j )+adfac
4153 ad_dvom(i,j+1)=ad_dvom(i,j+1)-adfac
4154 ad_zeta_new(i,j)=0.0_r8
4179 IF (first_2d_step)
THEN
4184 ad_dv_avg2(i,j)=0.0_r8
4187 ad_du_avg2(i,j)=0.0_r8
4190 ad_dv_avg1(i,j)=0.0_r8
4193 ad_du_avg1(i,j)=0.0_r8
4196 ad_zt_avg1(i,j)=0.0_r8
4206 ad_dvom(i,j)=ad_dvom(i,j)+cff*ad_dv_avg1(i,j)
4211 ad_duon(i,j)=ad_duon(i,j)+cff*ad_du_avg1(i,j)
4215 ad_zeta(i,j,krhs)=ad_zeta(i,j,krhs)+cff*ad_zt_avg1(i,j)
4226 ad_dvom(i,j)=ad_dvom(i,j)+cff*ad_dv_avg2(i,j)
4231 ad_duon(i,j)=ad_duon(i,j)+cff*ad_du_avg2(i,j)
4260 & lbi, ubi, lbj, ubj, &
4261 & imins, imaxs, jmins, jmaxs, &
4268 & ad_ubar, ad_vbar, &
4269 & drhs, duon, dvom, &
4270 & ad_drhs, ad_duon, ad_dvom)
4273#if defined DISTRIBUTE && \
4274 defined uv_adv && defined uv_c4advection &&
4291 & imins, imaxs, jmins, jmaxs, &
4302 & imins, imaxs, jmins, jmaxs, &
4309 & imins, imaxs, jmins, jmaxs, &
4320#if defined DISTRIBUTE && !defined NESTING
4321# define IR_RANGE IstrUm2-1,Iendp2
4322# define JR_RANGE JstrVm2-1,Jendp2
4323# define IU_RANGE IstrUm1-1,Iendp2
4324# define JU_RANGE Jstrm1-1,Jendp2
4325# define IV_RANGE Istrm1-1,Iendp2
4326# define JV_RANGE JstrVm1-1,Jendp2
4328# define IR_RANGE IstrUm2-1,Iendp2
4329# define JR_RANGE JstrVm2-1,Jendp2
4330# define IU_RANGE IstrUm2,Iendp2
4331# define JU_RANGE JstrVm2-1,Jendp2
4332# define IV_RANGE IstrUm2-1,Iendp2
4333# define JV_RANGE JstrVm2,Jendp2
4338 cff=0.5_r8*om_v(i,j)
4339 cff1=cff*(drhs(i,j)+drhs(i,j-1))
4343 ad_vbar(i,j,krhs)=ad_vbar(i,j,krhs)+cff1*ad_dvom(i,j)
4344 ad_cff1=ad_cff1+vbar(i,j,krhs)*ad_dvom(i,j)
4349 ad_drhs(i,j-1)=ad_drhs(i,j-1)+adfac
4350 ad_drhs(i,j )=ad_drhs(i,j )+adfac
4356 cff=0.5_r8*on_u(i,j)
4357 cff1=cff*(drhs(i,j)+drhs(i-1,j))
4361 ad_ubar(i,j,krhs)=ad_ubar(i,j,krhs)+cff1*ad_duon(i,j)
4362 ad_cff1=ad_cff1+ubar(i,j,krhs)*ad_duon(i,j)
4367 ad_drhs(i-1,j)=ad_drhs(i-1,j)+adfac
4368 ad_drhs(i ,j)=ad_drhs(i ,j)+adfac
4376 ad_h(i,j)=ad_h(i,j)+ad_drhs(i,j)
4377 ad_zeta(i,j,krhs)=ad_zeta(i,j,krhs)+ad_drhs(i,j)
4391 deallocate ( ad_zeta_new )