214 & LBi, UBi, LBj, UBj, UBk, &
215 & IminS, ImaxS, JminS, JmaxS, &
216 & krhs, kstp, knew, &
221 & pmask, rmask, umask, vmask, &
223#ifdef WET_DRY_NOT_YET
224 & pmask_wet, pmask_full, &
225 & rmask_wet, rmask_full, &
226 & umask_wet, umask_full, &
227 & vmask_wet, vmask_full, &
232#if (defined UV_COR && !defined SOLVE3D) || defined step2d_coriolis
236 & om_u, om_v, on_u, on_v, pm, pn, &
237#if defined CURVGRID && defined UV_ADV && !defined SOLVE3D
241#if defined UV_QDRAG && !defined SOLVE3D
244#if (defined UV_VIS2 || defined UV_VIS4) && !defined SOLVE3D
245 & pmon_r, pnom_r, pmon_p, pnom_p, &
246 & om_r, on_r, om_p, on_p, &
248 & visc2_p, visc2_r, &
251 & visc4_p, visc4_r, &
254#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
258 & ad_rustr2d, ad_rvstr2d, &
259 & ad_rulag2d, ad_rvlag2d, &
260 & ubar_stokes, ad_ubar_stokes, &
261 & vbar_stokes, ad_vbar_stokes, &
263#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
264 & eq_tide, ad_eq_tide, &
277 & ad_du_avg1, ad_du_avg2, &
278 & ad_dv_avg1, ad_dv_avg2, &
282 & ad_rufrc_bak, ad_rvfrc_bak, &
284#if defined NESTING && !defined SOLVE3D
285 & ad_du_flux, ad_dv_flux, &
305 integer,
intent(in ) :: ng, tile
306 integer,
intent(in ) :: LBi, UBi, LBj, UBj, UBk
307 integer,
intent(in ) :: IminS, ImaxS, JminS, JmaxS
308 integer,
intent(in ) :: krhs, kstp, knew
310 integer,
intent(in ) :: nstp, nnew
315 real(r8),
intent(in ) :: pmask(LBi:,LBj:)
316 real(r8),
intent(in ) :: rmask(LBi:,LBj:)
317 real(r8),
intent(in ) :: umask(LBi:,LBj:)
318 real(r8),
intent(in ) :: vmask(LBi:,LBj:)
320# if (defined UV_COR && !defined SOLVE3D) || defined STEP2D_CORIOLIS
321 real(r8),
intent(in ) :: fomn(LBi:,LBj:)
323 real(r8),
intent(in ) :: h(LBi:,LBj:)
324 real(r8),
intent(in ) :: om_u(LBi:,LBj:)
325 real(r8),
intent(in ) :: om_v(LBi:,LBj:)
326 real(r8),
intent(in ) :: on_u(LBi:,LBj:)
327 real(r8),
intent(in ) :: on_v(LBi:,LBj:)
328 real(r8),
intent(in ) :: pm(LBi:,LBj:)
329 real(r8),
intent(in ) :: pn(LBi:,LBj:)
330# if defined CURVGRID && defined UV_ADV && !defined SOLVE3D
331 real(r8),
intent(in ) :: dndx(LBi:,LBj:)
332 real(r8),
intent(in ) :: dmde(LBi:,LBj:)
334 real(r8),
intent(in ) :: rdrag(LBi:,LBj:)
335# if defined UV_QDRAG && !defined SOLVE3D
336 real(r8),
intent(in ) :: rdrag2(LBi:,LBj:)
338 real(r8),
intent(in ) :: rufrc(LBi:,LBj:)
339 real(r8),
intent(in ) :: rvfrc(LBi:,LBj:)
340# if (defined UV_VIS2 || defined UV_VIS4) && !defined SOLVE3D
341 real(r8),
intent(in ) :: pmon_r(LBi:,LBj:)
342 real(r8),
intent(in ) :: pnom_r(LBi:,LBj:)
343 real(r8),
intent(in ) :: pmon_p(LBi:,LBj:)
344 real(r8),
intent(in ) :: pnom_p(LBi:,LBj:)
345 real(r8),
intent(in ) :: om_r(LBi:,LBj:)
346 real(r8),
intent(in ) :: on_r(LBi:,LBj:)
347 real(r8),
intent(in ) :: om_p(LBi:,LBj:)
348 real(r8),
intent(in ) :: on_p(LBi:,LBj:)
350 real(r8),
intent(in ) :: visc2_p(LBi:,LBj:)
351 real(r8),
intent(in ) :: visc2_r(LBi:,LBj:)
354 real(r8),
intent(in ) :: visc4_p(LBi:,LBj:)
355 real(r8),
intent(in ) :: visc4_r(LBi:,LBj:)
358# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
359 real(r8),
intent(inout) :: ad_bed_thick(LBi:,LBj:,:)
362 real(r8),
intent(in ) :: ubar_stokes(LBi:,LBj:)
363 real(r8),
intent(in ) :: vbar_stokes(LBi:,LBj:)
365# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
366 real(r8),
intent(in ) :: eq_tide(LBi:,LBj:)
367 real(r8),
intent(inout) :: ad_eq_tide(LBi:,LBj:)
369 real(r8),
intent(in ) :: ubar(LBi:,LBj:,:)
370 real(r8),
intent(in ) :: vbar(LBi:,LBj:,:)
371 real(r8),
intent(in ) :: zeta(LBi:,LBj:,:)
372 real(r8),
intent(inout) :: ad_h(LBi:,LBj:)
374 real(r8),
intent(inout) :: ad_sustr(LBi:,LBj:)
375 real(r8),
intent(inout) :: ad_svstr(LBi:,LBj:)
377 real(r8),
intent(in ) :: Pair(LBi:,LBj:)
381 real(r8),
intent(in ) :: rhoA(LBi:,LBj:)
382 real(r8),
intent(in ) :: rhoS(LBi:,LBj:)
383 real(r8),
intent(inout) :: ad_rhoA(LBi:,LBj:)
384 real(r8),
intent(inout) :: ad_rhoS(LBi:,LBj:)
386 real(r8),
intent(inout) :: ad_DU_avg1(LBi:,LBj:)
387 real(r8),
intent(inout) :: ad_DU_avg2(LBi:,LBj:)
388 real(r8),
intent(inout) :: ad_DV_avg1(LBi:,LBj:)
389 real(r8),
intent(inout) :: ad_DV_avg2(LBi:,LBj:)
390 real(r8),
intent(inout) :: ad_Zt_avg1(LBi:,LBj:)
391 real(r8),
intent(inout) :: ad_rufrc(LBi:,LBj:)
392 real(r8),
intent(inout) :: ad_rvfrc(LBi:,LBj:)
393 real(r8),
intent(inout) :: ad_rufrc_bak(LBi:,LBj:,:)
394 real(r8),
intent(inout) :: ad_rvfrc_bak(LBi:,LBj:,:)
397 real(r8),
intent(inout) :: ad_rustr2d(LBi:,LBj:)
398 real(r8),
intent(inout) :: ad_rvstr2d(LBi:,LBj:)
399 real(r8),
intent(inout) :: ad_rulag2d(LBi:,LBj:)
400 real(r8),
intent(inout) :: ad_rvlag2d(LBi:,LBj:)
401 real(r8),
intent(inout) :: ad_ubar_stokes(LBi:,LBj:)
402 real(r8),
intent(inout) :: ad_vbar_stokes(LBi:,LBj:)
404# ifdef WET_DRY_NOT_YET
405 real(r8),
intent(inout) :: pmask_full(LBi:,LBj:)
406 real(r8),
intent(inout) :: rmask_full(LBi:,LBj:)
407 real(r8),
intent(inout) :: umask_full(LBi:,LBj:)
408 real(r8),
intent(inout) :: vmask_full(LBi:,LBj:)
410 real(r8),
intent(inout) :: pmask_wet(LBi:,LBj:)
411 real(r8),
intent(inout) :: rmask_wet(LBi:,LBj:)
412 real(r8),
intent(inout) :: umask_wet(LBi:,LBj:)
413 real(r8),
intent(inout) :: vmask_wet(LBi:,LBj:)
415 real(r8),
intent(inout) :: rmask_wet_avg(LBi:,LBj:)
418# ifdef DIAGNOSTICS_UV
430 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
431 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
432 real(r8),
intent(inout) :: ad_zeta(LBi:,LBj:,:)
433# if defined NESTING && !defined SOLVE3D
434 real(r8),
intent(inout) :: ad_DU_flux(LBi:,LBj:)
435 real(r8),
intent(inout) :: ad_DV_flux(LBi:,LBj:)
437 real(r8),
intent(out ) :: ad_ubar_sol(LBi:,LBj:)
438 real(r8),
intent(out ) :: ad_vbar_sol(LBi:,LBj:)
439 real(r8),
intent(out ) :: ad_zeta_sol(LBi:,LBj:)
444 real(r8),
intent(in ) :: pmask(LBi:UBi,LBj:UBj)
445 real(r8),
intent(in ) :: rmask(LBi:UBi,LBj:UBj)
446 real(r8),
intent(in ) :: umask(LBi:UBi,LBj:UBj)
447 real(r8),
intent(in ) :: vmask(LBi:UBi,LBj:UBj)
449# if (defined UV_COR && !defined SOLVE3D) || defined STEP2D_CORIOLIS
450 real(r8),
intent(in ) :: fomn(LBi:UBi,LBj:UBj)
452 real(r8),
intent(in ) :: h(LBi:UBi,LBj:UBj)
453 real(r8),
intent(in ) :: om_u(LBi:UBi,LBj:UBj)
454 real(r8),
intent(in ) :: om_v(LBi:UBi,LBj:UBj)
455 real(r8),
intent(in ) :: on_u(LBi:UBi,LBj:UBj)
456 real(r8),
intent(in ) :: on_v(LBi:UBi,LBj:UBj)
457 real(r8),
intent(in ) :: pm(LBi:UBi,LBj:UBj)
458 real(r8),
intent(in ) :: pn(LBi:UBi,LBj:UBj)
459# if defined CURVGRID && defined UV_ADV && !defined SOLVE3D
460 real(r8),
intent(in ) :: dndx(LBi:UBi,LBj:UBj)
461 real(r8),
intent(in ) :: dmde(LBi:UBi,LBj:UBj)
463 real(r8),
intent(in ) :: rdrag(LBi:UBi,LBj:UBj)
464# if defined UV_QDRAG && !defined SOLVE3D
465 real(r8),
intent(in ) :: rdrag2(LBi:UBi,LBj:UBj)
467 real(r8),
intent(in ) :: rufrc(LBi:UBi,LBj:UBj)
468 real(r8),
intent(in ) :: rvfrc(LBi:UBi,LBj:UBj)
469# if (defined UV_VIS2 || defined UV_VIS4) && !defined SOLVE3D
470 real(r8),
intent(in ) :: pmon_r(LBi:UBi,LBj:UBj)
471 real(r8),
intent(in ) :: pnom_r(LBi:UBi,LBj:UBj)
472 real(r8),
intent(in ) :: pmon_p(LBi:UBi,LBj:UBj)
473 real(r8),
intent(in ) :: pnom_p(LBi:UBi,LBj:UBj)
474 real(r8),
intent(in ) :: om_r(LBi:UBi,LBj:UBj)
475 real(r8),
intent(in ) :: on_r(LBi:UBi,LBj:UBj)
476 real(r8),
intent(in ) :: om_p(LBi:UBi,LBj:UBj)
477 real(r8),
intent(in ) :: on_p(LBi:UBi,LBj:UBj)
479 real(r8),
intent(in ) :: visc2_p(LBi:UBi,LBj:UBj)
480 real(r8),
intent(in ) :: visc2_r(LBi:UBi,LBj:UBj)
483 real(r8),
intent(in ) :: visc4_p(LBi:UBi,LBj:UBj)
484 real(r8),
intent(in ) :: visc4_r(LBi:UBi,LBj:UBj)
487# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
488 real(r8),
intent(in ) :: ad_bed_thick(LBi:UBi,LBj:UBj,3)
491 real(r8),
intent(in ) :: ubar_stokes(LBi:UBi,LBj:UBj)
492 real(r8),
intent(in ) :: vbar_stokes(LBi:UBi,LBj:UBj)
494# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
495 real(r8),
intent(in ) :: eq_tide(LBi:UBi,LBj:UBj)
496 real(r8),
intent(inout) :: ad_eq_tide(LBi:UBi,LBj:UBj)
498 real(r8),
intent(in ) :: ubar(LBi:UBi,LBj:UBj,:)
499 real(r8),
intent(in ) :: vbar(LBi:UBi,LBj:UBj,:)
500 real(r8),
intent(in ) :: zeta(LBi:UBi,LBj:UBj,:)
501 real(r8),
intent(inout) :: ad_h(LBi:UBi,LBj:UBj)
503 real(r8),
intent(inout) :: ad_sustr(LBi:UBi,LBj:UBj)
504 real(r8),
intent(inout) :: ad_svstr(LBi:UBi,LBj:UBj)
506 real(r8),
intent(in ) :: Pair(LBi:UBi,LBj:UBj)
510 real(r8),
intent(in ) :: rhoA(LBi:UBi,LBj:UBj)
511 real(r8),
intent(in ) :: rhoS(LBi:UBi,LBj:UBj)
512 real(r8),
intent(inout) :: ad_rhoA(LBi:UBi,LBj:UBj)
513 real(r8),
intent(inout) :: ad_rhoS(LBi:UBi,LBj:UBj)
515 real(r8),
intent(inout) :: ad_DU_avg1(LBi:UBi,LBj:UBj)
516 real(r8),
intent(inout) :: ad_DU_avg2(LBi:UBi,LBj:UBj)
517 real(r8),
intent(inout) :: ad_DV_avg1(LBi:UBi,LBj:UBj)
518 real(r8),
intent(inout) :: ad_DV_avg2(LBi:UBi,LBj:UBj)
519 real(r8),
intent(inout) :: ad_Zt_avg1(LBi:UBi,LBj:UBj)
520 real(r8),
intent(inout) :: ad_rufrc(LBi:UBi,LBj:UBj)
521 real(r8),
intent(inout) :: ad_rvfrc(LBi:UBi,LBj:UBj)
522 real(r8),
intent(inout) :: ad_rufrc_bak(LBi:UBi,LBj:UBj,2)
523 real(r8),
intent(inout) :: ad_rvfrc_bak(LBi:UBi,LBj:UBj,2)
526 real(r8),
intent(inout) :: ad_rustr2d(LBi:UBi,LBj:UBj)
527 real(r8),
intent(inout) :: ad_rvstr2d(LBi:UBi,LBj:UBj)
528 real(r8),
intent(inout) :: ad_rulag2d(LBi:UBi,LBj:UBj)
529 real(r8),
intent(inout) :: ad_rvlag2d(LBi:UBi,LBj:UBj)
530 real(r8),
intent(inout) :: ad_ubar_stokes(LBi:UBi,LBj:UBj)
531 real(r8),
intent(inout) :: ad_vbar_stokes(LBi:UBi,LBj:UBj)
533# ifdef WET_DRY_NOT_YET
534 real(r8),
intent(inout) :: pmask_full(LBi:UBi,LBj:UBj)
535 real(r8),
intent(inout) :: rmask_full(LBi:UBi,LBj:UBj)
536 real(r8),
intent(inout) :: umask_full(LBi:UBi,LBj:UBj)
537 real(r8),
intent(inout) :: vmask_full(LBi:UBi,LBj:UBj)
539 real(r8),
intent(inout) :: pmask_wet(LBi:UBi,LBj:UBj)
540 real(r8),
intent(inout) :: rmask_wet(LBi:UBi,LBj:UBj)
541 real(r8),
intent(inout) :: umask_wet(LBi:UBi,LBj:UBj)
542 real(r8),
intent(inout) :: vmask_wet(LBi:UBi,LBj:UBj)
544 real(r8),
intent(inout) :: rmask_wet_avg(LBi:UBi,LBj:UBj)
547# ifdef DIAGNOSTICS_UV
559 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
560 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
561 real(r8),
intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
562# if defined NESTING && !defined SOLVE3D
563 real(r8),
intent(inout) :: ad_DU_flux(LBi:UBi,LBj:UBj)
564 real(r8),
intent(inout) :: ad_DV_flux(LBi:UBi,LBj:UBj)
566 real(r8),
intent(out ) :: ad_ubar_sol(LBi:UBi,LBj:UBj)
567 real(r8),
intent(out ) :: ad_vbar_sol(LBi:UBi,LBj:UBj)
568 real(r8),
intent(out ) :: ad_zeta_sol(LBi:UBi,LBj:UBj)
574 integer :: kbak, kold
579 real(r8) :: bkw0, bkw1, bkw2, bkw_new
580 real(r8) :: fwd0, fwd1, fwd2
582 real(r8) :: cfwd0, cfwd1, cfwd2
584 real(r8) :: cff, cff1, cff2, cff3, cff4
585#ifdef WET_DRY_NOT_YET
586 real(r8) :: cff5, cff6, cff7
588 real(r8) :: fac, fac1, fac2
589 real(r8) :: ad_cff, ad_cff1, ad_cff2, ad_cff3, ad_cff4
590#ifdef WET_DRY_NOT_YET
591 real(r8) :: ad_cff5, ad_cff6, ad_cff7
593 real(r8) :: ad_fac, ad_fac1, ad_fac2
594 real(r8) :: adfac, adfac1, adfac2, adfac3, adfac4, adfac5
596 real(r8),
parameter :: IniVal = 0.0_r8
598#if defined UV_C4ADVECTION && !defined SOLVE3D
599 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dgrad
601 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dnew
602 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dnew_rd
603 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs
604#if (defined UV_VIS2 || defined UV_VIS4) && !defined SOLVE3D
605 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs_p
607 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dstp
608 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUon
609 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVom
611 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUSon
612 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVSom
614#if defined UV_C4ADVECTION && !defined SOLVE3D
615 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: grad
617 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rzeta2
618#if defined VAR_RHO_2D && defined SOLVE3D
619 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rzetaSA
621 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rubar
622 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rvbar
623 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rzeta
624 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: urhs
625 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: vrhs
626 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zeta_new
627 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zwrk
628#ifdef WET_DRY_NOT_YET
629 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: wetdry
638#if defined UV_C4ADVECTION && !defined SOLVE3D
639 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Dgrad
641 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Dnew
642 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Dnew_rd
643 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Drhs
644#if (defined UV_VIS2 || defined UV_VIS4) && !defined SOLVE3D
645 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Drhs_p
647 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Dstp
648 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DUon
649 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DVom
651 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DUSon
652 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DVSom
654#if defined STEP2D_CORIOLIS || !defined SOLVE3D
655 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFx
656 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFe
659 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFe
660 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFx
662#if defined UV_C4ADVECTION && !defined SOLVE3D
663 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_grad
665 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rzeta2
666#if defined VAR_RHO_2D && defined SOLVE3D
667 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rzetaSA
669 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rzeta
670 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rubar
671 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rvbar
672 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_urhs
673 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_vrhs
674 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_zwrk
676 real(r8),
allocatable :: ad_zeta_new(:,:)
678#include "set_bounds.h"
693#if defined UV_C4ADVECTION && !defined SOLVE3D
699#if (defined UV_VIS2 || defined UV_VIS4) && !defined SOLVE3D
709#if defined STEP2D_CORIOLIS || !defined SOLVE3D
717#if defined UV_C4ADVECTION && !defined SOLVE3D
721#if defined VAR_RHO_2D && defined SOLVE3D
753 IF (first_2d_step)
THEN
768 ELSE IF (first_2d_step+1)
THEN
770 IF (kbak.lt.1) kbak=4
775 bkw_new=1.0833333333333_r8
776 bkw0=-0.1666666666666_r8
777 bkw1= 0.0833333333333_r8
781 IF (kbak.lt.1) kbak=4
783 IF (kold.lt.1) kold=4
796 WRITE (20,10)
iic(ng),
iif(ng), kold, kbak, kstp, knew
797 10
FORMAT (
' iic = ',i5.5,
' iif = ',i3.3, &
798 &
' kold = ',i1,
' kbak = ',i1,
' kstp = ',i1,
' knew = ',i1)
807#if defined DISTRIBUTE && !defined NESTING
808# define IR_RANGE IstrUm2-1,Iendp2
809# define JR_RANGE JstrVm2-1,Jendp2
810# define IU_RANGE IstrUm1-1,Iendp2
811# define JU_RANGE Jstrm1-1,Jendp2
812# define IV_RANGE Istrm1-1,Iendp2
813# define JV_RANGE JstrVm1-1,Jendp2
815# define IR_RANGE IstrUm2-1,Iendp2
816# define JR_RANGE JstrVm2-1,Jendp2
817# define IU_RANGE IstrUm2,Iendp2
818# define JU_RANGE JstrVm2-1,Jendp2
819# define IV_RANGE IstrUm2-1,Iendp2
820# define JV_RANGE JstrVm2,Jendp2
829 drhs(i,j)=h(i,j)+zeta(i,j,kstp)
836 cff1=cff*(drhs(i,j)+drhs(i-1,j))
841 urhs(i,j)=ubar(i,j,kstp)
842 duon(i,j)=urhs(i,j)*cff1
849 cff1=cff*(drhs(i,j)+drhs(i,j-1))
854 vrhs(i,j)=vbar(i,j,kstp)
855 dvom(i,j)=vrhs(i,j)*cff1
864#if defined DISTRIBUTE && \
865 defined uv_adv && defined uv_c4advection &&
876 & imins, imaxs, jmins, jmaxs, &
879 & imins, imaxs, jmins, jmaxs, &
883 & imins, imaxs, jmins, jmaxs, &
895 & lbi, ubi, lbj, ubj, &
896 & imins, imaxs, jmins, jmaxs, &
908 & lbi, ubi, lbj, ubj, &
909 & imins, imaxs, jmins, jmaxs, &
928 allocate ( ad_zeta_new(imins:imaxs,jmins:jmaxs) )
943 zeta_new(i,j)=zeta(i,j,knew)
945 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
946# ifdef WET_DRY_NOT_YET
951 dnew(i,j)=h(i,j)+zeta_new(i,j)
952 dnew_rd(i,j)=dnew(i,j)
953 dstp(i,j)=h(i,j)+zeta(i,j,kstp)
968# ifdef WET_DRY_NOT_YET
975 zwrk(i,j)=bkw_new*zeta_new(i,j)+ &
976 & bkw0*zeta(i,j,kstp)+ &
977 & bkw1*zeta(i,j,kbak)+ &
978 & bkw2*zeta(i,j,kold)
979#if defined VAR_RHO_2D && defined SOLVE3D
980 rzeta(i,j)=(1.0_r8+rhos(i,j))*zwrk(i,j)
981 rzeta2(i,j)=rzeta(i,j)*zwrk(i,j)
982 rzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
985 rzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
998 ad_zeta_sol(i,j)=ad_zeta(i,j,knew)
1001 ad_ubar_sol(i,j)=ad_ubar(i,j,knew)
1005 ad_vbar_sol(i,j)=ad_vbar(i,j,knew)
1013 ad_zeta_sol(i,j)=ad_zeta(i,j,knew)
1016 ad_ubar_sol(i,j)=ad_ubar(i,j,knew)
1020 ad_vbar_sol(i,j)=ad_vbar(i,j,knew)
1040 & lbi, ubi, lbj, ubj, &
1043 & ad_zeta(:,:,knew), &
1044 & ad_ubar(:,:,knew), &
1045 & ad_vbar(:,:,knew))
1054 & lbi, ubi, lbj, ubj, &
1055 & ad_vbar(:,:,knew))
1061 & lbi, ubi, lbj, ubj, &
1062 & ad_ubar(:,:,knew))
1068 & lbi, ubi, lbj, ubj, &
1069 & ad_zeta(:,:,knew))
1095 & lbi, ubi, lbj, ubj, &
1098 & ad_du_avg2, ad_dv_avg2)
1106 & lbi, ubi, lbj, ubj, &
1109 & ad_zt_avg1, ad_du_avg1, ad_dv_avg1)
1118 & lbi, ubi, lbj, ubj, &
1125 & lbi, ubi, lbj, ubj, &
1132 & lbi, ubi, lbj, ubj, &
1139 & lbi, ubi, lbj, ubj, &
1146 & lbi, ubi, lbj, ubj, &
1166 & lbi, ubi, lbj, ubj, &
1169 & ad_du_flux, ad_dv_flux)
1178 & lbi, ubi, lbj, ubj, &
1185 & lbi, ubi, lbj, ubj, &
1209 ad_zt_avg1(i,j)=ad_zt_avg1(i,j)+ad_zeta(i,j,knew)
1210 ad_zeta(i,j,knew)=0.0_r8
1216#ifdef WET_DRY_NOT_YET
1254 IF (((istrr.le.i).and.(i.le.iendr)).and. &
1255 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
1256 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
1257#if defined NESTING && !defined SOLVE3D
1262 ad_du_flux(i,j)=0.0_r8
1269 ad_du_avg1(i,j)=0.0_r8
1271 cff=1.0_r8/(on_u(i,j)* &
1272 & 0.5_r8*(dnew(i-1,j)+dnew(i,j)))
1277 & cff*ad_ubar(i,j,knew)
1279 &
sources(ng)%Qbar(is)*ad_ubar(i,j,knew)
1281 ad_ubar(i,j,knew)=0.0_r8
1285 adfac=-cff*cff*on_u(i,j)*0.5_r8*ad_cff
1286 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac
1287 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac
1289 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
1290#if defined NESTING && !defined SOLVE3D
1295 ad_dv_flux(i,j)=0.0_r8
1302 ad_dv_avg1(i,j)=0.0_r8
1304 cff=1.0_r8/(om_v(i,j)* &
1305 & 0.5_r8*(dnew(i,j-1)+dnew(i,j)))
1310 & cff*ad_vbar(i,j,knew)
1312 &
sources(ng)%Qbar(is)*ad_vbar(i,j,knew)
1313 ad_vbar(i,j,knew)=0.0_r8
1317 adfac=-cff*cff*om_v(i,j)*0.5_r8*ad_cff
1318 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac
1319 ad_dnew(i,j )=ad_dnew(i,j )+adfac
1326#if defined SOLVE3D || (defined NESTING && !defined SOLVE3D)
1335 IF (
domain(ng)%Northern_Edge(tile))
THEN
1337# if defined NESTING && !defined SOLVE3D
1346 adfac=0.5_r8*om_v(i,jend+1)*ad_dv_flux(i,jend+1)
1347 adfac1=adfac1*vbar(i,jend+1,knew)
1348 ad_vbar(i,jend+1,knew)=ad_vbar(i,jend+1,knew)+ &
1349 & (dnew(i,jend+1)+ &
1350 & dnew(i,jend ))*adfac
1351 ad_dnew(i,jend )=ad_dnew(i,jend )+adfac1
1352 ad_dnew(i,jend+1)=ad_dnew(i,jend+1)+adfac1
1353 ad_dv_flux(i,jend+1)=0.0_r8
1364 adfac=cff1*om_v(i,jend+1)*ad_dv_avg1(i,jend+1)
1365 adfac1=adfac*vbar(i,jend+1,knew)
1366 ad_vbar(i,jend+1,knew)=ad_vbar(i,jend+1,knew)+ &
1367 & (dnew(i,jend+1)+ &
1368 & dnew(i,jend ))*adfac
1369 ad_dnew(i,jend )=ad_dnew(i,jend )+adfac1
1370 ad_dnew(i,jend+1)=ad_dnew(i,jend+1)+adfac1
1374# if defined NESTING && !defined SOLVE3D
1383 adfac=0.5_r8*on_u(i,jend+1)*ad_du_flux(i,jend+1)
1384 adfac1=adfac*ubar(i,jend+1,knew)
1385 ad_ubar(i,jend+1,knew)=ad_ubar(i,jend+1,knew)+ &
1386 & (dnew(i ,jend+1)+ &
1387 & dnew(i-1,jend+1))*adfac
1388 ad_dnew(i-1,jend+1)=ad_dnew(i-1,jend+1)+adfac1
1389 ad_dnew(i ,jend+1)=ad_dnew(i ,jend+1)+adfac1
1390 ad_du_flux(i,jend+1)=0.0_r8
1401 adfac=cff1*on_u(i,jend+1)*ad_du_avg1(i,jend+1)
1402 adfac1=adfac*ubar(i,jend+1,knew)
1403 ad_ubar(i,jend+1,knew)=ad_ubar(i,jend+1,knew)+ &
1404 & (dnew(i ,jend+1)+ &
1405 & dnew(i-1,jend+1))*adfac
1406 ad_dnew(i-1,jend+1)=ad_dnew(i-1,jend+1)+adfac1
1407 ad_dnew(i ,jend+1)=ad_dnew(i ,jend+1)+adfac1
1414 IF (
domain(ng)%Southern_Edge(tile))
THEN
1416# if defined NESTING && !defined SOLVE3D
1425 adfac=0.5_r8*om_v(i,jstrv-1)*ad_dv_flux(i,jstrv-1)
1426 adfac1=adfac*vbar(i,jstrv-1,knew)
1427 ad_vbar(i,jstrv-1,knew)=ad_vbar(i,jstrv-1,knew)+ &
1428 & (dnew(i,jstrv-1)+ &
1429 & dnew(i,jstrv-2))*adfac
1430 ad_dnew(i,jstrv-2)=ad_dnew(i,jstrv-2)+adfac1
1431 ad_dnew(i,jstrv-1)=ad_dnew(i,jstrv-1)+adfac1
1432 ad_dv_flux(i,jstrv-1)=0.0_r8
1443 adfac=cff1*om_v(i,jstrv-1)*ad_dv_avg1(i,jstrv-1)
1444 adfac1=adfac*vbar(i,jstrv-1,knew)
1445 ad_vbar(i,jstrv-1,knew)=ad_vbar(i,jstrv-1,knew)+ &
1446 & (dnew(i,jstrv-1)+ &
1447 & dnew(i,jstrv-2))*adfac
1448 ad_dnew(i,jstrv-2)=ad_dnew(i,jstrv-2)+adfac1
1449 ad_dnew(i,jstrv-1)=ad_dnew(i,jstrv-1)+adfac1
1453# if defined NESTING && !defined SOLVE3D
1462 adfac=0.5_r8*on_u(i,jstr-1)*ad_du_flux(i,jstr-1)
1463 adfac1=adfac*ubar(i,jstr-1,knew)
1464 ad_ubar(i,jstr-1,knew)=ad_ubar(i,jstr-1,knew)+ &
1465 & (dnew(i ,jstr-1)+ &
1466 & dnew(i-1,jstr-1))*adfac
1467 ad_dnew(i-1,jstr-1)=ad_dnew(i-1,jstr-1)+adfac1
1468 ad_dnew(i ,jstr-1)=ad_dnew(i ,jstr-1)+adfac1
1469 ad_du_flux(i,jstr-1)=0.0_r8
1481 adfac=cff1*on_u(i,jstr-1)*ad_du_avg1(i,jstr-1)
1482 adfac1=adfac*ubar(i,jstr-1,knew)
1483 ad_ubar(i,jstr-1,knew)=ad_ubar(i,jstr-1,knew)+ &
1484 & (dnew(i ,jstr-1)+ &
1485 & dnew(i-1,jstr-1))*adfac
1486 ad_dnew(i-1,jstr-1)=ad_dnew(i-1,jstr-1)+adfac1
1487 ad_dnew(i ,jstr-1)=ad_dnew(i ,jstr-1)+adfac1
1493 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1495# if defined NESTING && !defined SOLVE3D
1504 adfac=0.5_r8*om_v(iend+1,j)*ad_dv_flux(iend+1,j)
1505 adfac1=adfac*vbar(iend+1,j,knew)
1506 ad_vbar(iend+1,j,knew)=ad_vbar(iend+1,j,knew)+ &
1507 & (dnew(iend+1,j )+ &
1508 & dnew(iend+1,j-1))*adfac
1509 ad_dnew(iend+1,j-1)=ad_dnew(iend+1,j-1)+adfac1
1510 ad_dnew(iend+1,j )=ad_dnew(iend+1,j )+adfac1
1511 ad_dv_flux(iend+1,j)=0.0_r8
1522 adfac=cff1*om_v(iend+1,j)*ad_dv_avg1(iend+1,j)
1523 adfac1=adfac*vbar(iend+1,j,knew)
1524 ad_vbar(iend+1,j,knew)=ad_vbar(iend+1,j,knew)+ &
1525 & (dnew(iend+1,j )+ &
1526 & dnew(iend+1,j-1))*adfac
1527 ad_dnew(iend+1,j-1)=ad_dnew(iend+1,j-1)+adfac1
1528 ad_dnew(iend+1,j )=ad_dnew(iend+1,j )+adfac1
1532# if defined NESTING && !defined SOLVE3D
1541 adfac=0.5_r8*on_u(iend+1,j)*ad_du_flux(iend+1,j)
1542 adfac1=adfac*ubar(iend+1,j,knew)
1543 ad_ubar(iend+1,j,knew)=ad_ubar(iend+1,j,knew)+ &
1544 & (dnew(iend+1,j)+ &
1545 & dnew(iend ,j))*adfac
1546 ad_dnew(iend ,j)=ad_dnew(iend ,j)+adfac1
1547 ad_dnew(iend+1,j)=ad_dnew(iend+1,j)+adfac1
1548 ad_du_flux(iend+1,j)=0.0_r8
1559 adfac=cff1*on_u(iend+1,j)*ad_du_avg1(iend+1,j)
1560 adfac1=adfac*ubar(iend+1,j,knew)
1561 ad_ubar(iend+1,j,knew)=ad_ubar(iend+1,j,knew)+ &
1562 & (dnew(iend+1,j)+ &
1563 & dnew(iend ,j))*adfac
1564 ad_dnew(iend ,j)=ad_dnew(iend ,j)+adfac1
1565 ad_dnew(iend+1,j)=ad_dnew(iend+1,j)+adfac1
1572 IF (
domain(ng)%Western_Edge(tile))
THEN
1574# if defined NESTING && !defined SOLVE3D
1583 adfac=0.5_r8*om_v(istr-1,j)*ad_dv_flux(istr-1,j)
1584 adfac1=adfac*vbar(istr-1,j,knew)
1585 ad_vbar(istr-1,j,knew)=ad_vbar(istr-1,j,knew)+ &
1586 & (dnew(istr-1,j )+ &
1587 & dnew(istr-1,j-1))*adfac
1588 ad_dnew(istr-1,j-1)=ad_dnew(istr-1,j-1)+adfac1
1589 ad_dnew(istr-1,j )=ad_dnew(istr-1,j )+adfac1
1590 ad_dv_flux(istr-1,j)=0.0_r8
1601 adfac=cff1*om_v(istr-1,j)*ad_dv_avg1(istr-1,j)
1602 adfac1=adfac*vbar(istr-1,j,knew)
1603 ad_vbar(istr-1,j,knew)=ad_vbar(istr-1,j,knew)+ &
1604 & (dnew(istr-1,j )+ &
1605 & dnew(istr-1,j-1))*adfac
1606 ad_dnew(istr-1,j-1)=ad_dnew(istr-1,j-1)+adfac1
1607 ad_dnew(istr-1,j )=ad_dnew(istr-1,j )+adfac1
1611# if defined NESTING && !defined SOLVE3D
1620 adfac=0.5_r8*on_u(istru-1,j)*ad_du_flux(istru-1,j)
1621 adfac1=adfac*ubar(istru-1,j,knew)
1622 ad_ubar(istru-1,j,knew)=ad_ubar(istru-1,j,knew)+ &
1623 & (dnew(istru-1,j)+ &
1624 & dnew(istru-2,j))*adfac
1625 ad_dnew(istru-2,j)=ad_dnew(istru-2,j)+adfac1
1626 ad_dnew(istru-1,j)=ad_dnew(istru-1,j)+adfac1
1627 ad_du_flux(istru-1,j)=0.0_r8
1638 adfac=cff1*on_u(istru-1,j)*ad_du_avg1(istru-1,j)
1639 adfac1=adfac*ubar(istru-1,j,knew)
1640 ad_ubar(istru-1,j,knew)=ad_ubar(istru-1,j,knew)+ &
1641 & (dnew(istru-1,j)+ &
1642 & dnew(istru-2,j))*adfac
1643 ad_dnew(istru-2,j)=ad_dnew(istru-2,j)+adfac1
1644 ad_dnew(istru-1,j)=ad_dnew(istru-1,j)+adfac1
1651 IF (
domain(ng)%Northern_Edge(tile))
THEN
1655 ad_h(i,jend+1)=ad_h(i,jend+1)+ &
1657 ad_zeta_new(i,jend+1)=ad_zeta_new(i,jend+1)+ &
1659 ad_dnew(i,jend+1)=0.0_r8
1664 IF (
domain(ng)%Southern_Edge(tile))
THEN
1668 ad_h(i,jstr-1)=ad_h(i,jstr-1)+ &
1670 ad_zeta_new(i,jstr-1)=ad_zeta_new(i,jstr-1)+ &
1672 ad_dnew(i,jstr-1)=0.0_r8
1677 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1681 ad_h(iend+1,j)=ad_h(iend+1,j)+ &
1683 ad_zeta_new(iend+1,j)=ad_zeta_new(iend+1,j)+ &
1685 ad_dnew(iend+1,j)=0.0_r8
1690 IF (
domain(ng)%Western_Edge(tile))
THEN
1694 ad_h(istr-1,j)=ad_h(istr-1,j)+ &
1696 ad_zeta_new(istr-1,j)=ad_zeta_new(istr-1,j)+ &
1698 ad_dnew(istr-1,j)=0.0_r8
1724 & lbi, ubi, lbj, ubj, &
1725 & imins, imaxs, jmins, jmaxs, &
1730 & h, ad_h, om_v, on_u, &
1731 & ubar, vbar, zeta, &
1732 & ad_ubar, ad_vbar, ad_zeta)
1746 & lbi, ubi, lbj, ubj, &
1747 & imins, imaxs, jmins, jmaxs, &
1748 & krhs, kstp, knew, &
1749 & ubar, vbar, zeta, &
1750 & ad_ubar, ad_vbar, ad_zeta)
1759 & lbi, ubi, lbj, ubj, &
1760 & imins, imaxs, jmins, jmaxs, &
1761 & krhs, kstp, knew, &
1762 & ubar, vbar, zeta, &
1763 & ad_ubar, ad_vbar, ad_zeta)
1795#if defined NESTING && !defined SOLVE3D
1802 adfac=0.5_r8*om_v(i,j)*ad_dv_flux(i,j)
1803 adfac1=adfac*vbar(i,j,knew)
1804 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)+ &
1805 & (dnew(i,j)+dnew(i,j-1))*adfac
1806 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac1
1807 ad_dnew(i,j )=ad_dnew(i,j )+adfac1
1808 ad_dv_flux(i,j)=0.0_r8
1818 adfac=cff1*om_v(i,j)*ad_dv_avg1(i,j)
1819 adfac1=adfac*vbar(i,j,knew)
1820 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)+ &
1821 & (dnew(i,j)+dnew(i,j-1))*adfac
1822 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac1
1823 ad_dnew(i,j )=ad_dnew(i,j )+adfac1
1825#ifdef WET_DRY_NOT_YET
1837 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)*vmask(i,j)
1839 cff3=cff*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
1840 fac2=1.0_r8/(dnew_rd(i,j)+dnew_rd(i,j-1))
1859 adfac=fac2*ad_vbar(i,j,knew)
1860 adfac1=adfac*(dstp(i,j)+dstp(i,j-1))
1862 adfac3=adfac*vbar(i,j,kstp)
1863 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)+adfac1
1865 ad_rvbar(i,j)=ad_rvbar(i,j)+adfac2
1866 ad_rvfrc(i,j)=ad_rvfrc(i,j)+adfac2
1868 ad_rvbar(i,j)=ad_rvbar(i,j)+adfac2
1869 ad_svstr(i,j)=ad_svstr(i,j)+cff2*adfac
1871 ad_dstp(i,j-1)=ad_dstp(i,j-1)+adfac3
1872 ad_dstp(i,j )=ad_dstp(i,j )+adfac3
1874 & ad_vbar(i,j,knew)* &
1875 & ((dstp(i,j)+dstp(i,j-1))*vbar(i,j,kstp)+ &
1877 & cff3*(rvbar(i,j)+rvfrc(i,j)))
1879 & cff3*rvbar(i,j)+cff2*svstr(i,j))
1881 ad_vbar(i,j,knew)=0.0_r8
1884 adfac=-fac2*fac2*ad_fac2
1885 ad_dnew_rd(i,j-1)=ad_dnew_rd(i,j-1)+adfac
1886 ad_dnew_rd(i,j )=ad_dnew_rd(i,j )+adfac
1893#if defined NESTING && !defined SOLVE3D
1900 adfac=0.5_r8*on_u(i,j)*ad_du_flux(i,j)
1901 adfac1=adfac*ubar(i,j,knew)
1902 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)+ &
1903 & (dnew(i,j)+dnew(i-1,j))*adfac
1904 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac1
1905 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac1
1906 ad_du_flux(i,j)=0.0_r8
1916 adfac=cff1*on_u(i,j)*ad_du_avg1(i,j)
1917 adfac1=adfac*ubar(i,j,knew)
1918 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)+ &
1919 & (dnew(i,j)+dnew(i-1,j))*adfac
1920 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac1
1921 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac1
1923#ifdef WET_DRY_NOT_YET
1935 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)*umask(i,j)
1937 cff3=cff*(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
1938 fac1=1.0_r8/(dnew_rd(i,j)+dnew_rd(i-1,j))
1957 adfac=fac1*ad_ubar(i,j,knew)
1958 adfac1=adfac*(dstp(i,j)+dstp(i-1,j))
1960 adfac3=adfac*ubar(i,j,kstp)
1961 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)+adfac1
1963 ad_rubar(i,j)=ad_rubar(i,j)+adfac2
1964 ad_rufrc(i,j)=ad_rufrc(i,j)+adfac2
1966 ad_rubar(i,j)=ad_rubar(i,j)+adfac2
1967 ad_sustr(i,j)=ad_sustr(i,j)+cff2*adfac
1969 ad_dstp(i-1,j)=ad_dstp(i-1,j)+adfac3
1970 ad_dstp(i ,j)=ad_dstp(i ,j)+adfac3
1972 & ad_ubar(i,j,knew)* &
1973 & ((dstp(i,j)+dstp(i-1,j))*ubar(i,j,kstp)+ &
1975 & cff3*(rubar(i,j)+rufrc(i,j)))
1977 & cff3*rubar(i,j)+cff2*sustr(i,j))
1979 ad_ubar(i,j,knew)=0.0_r8
1982 adfac=-fac1*fac1*ad_fac1
1983 ad_dnew_rd(i-1,j)=ad_dnew_rd(i-1,j)+adfac
1984 ad_dnew_rd(i ,j)=ad_dnew_rd(i ,j)+adfac
1989#if defined UV_QDRAG && !defined SOLVE3D
2002 cff=
dtfast(ng)/sqrt(3.0_r8)
2005 cff1=ubar(i ,j,kstp)**2+ &
2006 & ubar(i+1,j,kstp)**2+ &
2007 & ubar(i ,j,kstp)*ubar(i+1,j,kstp)+ &
2008 & vbar(i,j ,kstp)**2+ &
2009 & vbar(i,j+1,kstp)**2+ &
2010 & vbar(i,j ,kstp)*vbar(i,j+1,kstp)
2016 & cff*rdrag2(i,j)*ad_dnew_rd(i,j)
2019 ad_cff1=ad_cff1+0.5_r8*ad_cff2/cff2
2030 adfac=2.0_r8*ad_cff1
2031 ad_ubar(i ,j,kstp)=ad_ubar(i ,j,kstp)+ &
2032 & ubar(i ,j,kstp)*adfac+ &
2033 & ubar(i+1,j,kstp)*ad_cff1
2034 ad_ubar(i+1,j,kstp)=ad_ubar(i+1,j,kstp)+ &
2035 & ubar(i+1,j,kstp)*adfac+ &
2036 & ubar(i ,j,kstp)*ad_cff1
2037 ad_vbar(i,j ,kstp)=ad_vbar(i,j ,kstp)+ &
2038 & vbar(i,j ,kstp)*adfac+ &
2039 & vbar(i,j+1,kstp)*ad_cff1
2040 ad_vbar(i,j+1,kstp)=ad_vbar(i,j+1,kstp)+ &
2041 & vbar(i,j+1,kstp)*adfac+ &
2042 & vbar(i,j ,kstp)*ad_cff1
2054 ad_h(i,j)=ad_h(i,j)+ad_dstp(i,j)
2055 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+ad_dstp(i,j)
2059 ad_dnew(i,j)=ad_dnew(i,j)+ad_dnew_rd(i,j)
2060 ad_dnew_rd(i,j)=0.0_r8
2063 ad_h(i,j)=ad_h(i,j)+ad_dnew(i,j)
2064 ad_zeta_new(i,j)=ad_zeta_new(i,j)+ad_dnew(i,j)
2093 coupled_step :
IF (first_2d_step)
THEN
2109 cfwd1=-0.5_r8-2.0_r8*cfwd2
2114# if defined VAR_RHO_2D && defined SOLVE3D
2115 cff2=0.333333333333_r8
2120 IF (j.ge.jstrv)
THEN
2121# ifdef DIAGNOSTICS_UV
2135# if defined VAR_RHO_2D && defined SOLVE3D
2160 adfac=cff1*om_v(i,j)*ad_rvbar(i,j)
2161 adfac1=adfac*(rzeta(i,j-1)-rzeta(i,j ))
2162 adfac2=adfac*(h(i,j-1)-h(i,j ))
2163 ad_h(i,j-1)=ad_h(i,j-1)+adfac1
2164 ad_h(i,j )=ad_h(i,j )+adfac1
2165 ad_rzeta(i,j-1)=ad_rzeta(i,j-1)+adfac2
2166 ad_rzeta(i,j )=ad_rzeta(i,j )-adfac2
2167 ad_rzeta2(i,j-1)=ad_rzeta2(i,j-1)+adfac
2168 ad_rzeta2(i,j )=ad_rzeta2(i,j )-adfac
2169# if defined VAR_RHO_2D && defined SOLVE3D
2170 adfac3=adfac*(rzetasa(i,j-1)+ &
2172 & cff2*(rhoa(i,j-1)- &
2176 adfac4=adfac2*cff2*(zwrk(i,j-1)-zwrk(i,j))
2177 adfac5=adfac2*cff2*(rhoa(i,j-1)-rhoa(i,j))
2178 ad_h(i,j-1)=ad_h(i,j-1)+adfac3
2179 ad_h(i,j )=ad_h(i,j )-adfac3
2180 ad_rzetasa(i,j-1)=ad_rzetasa(i,j-1)+adfac2
2181 ad_rzetasa(i,j )=ad_rzetasa(i,j )+adfac2
2182 ad_rhoa(i,j-1)=ad_rhoa(i,j-1)+adfac4
2183 ad_rhoa(i,j )=ad_rhoa(i,j )-adfac4
2184 ad_zwrk(i,j-1)=ad_zwrk(i,j-1)+adfac5
2185 ad_zwrk(i,j )=ad_zwrk(i,j )-adfac5
2189 IF (i.ge.istru)
THEN
2190# ifdef DIAGNOSTICS_UV
2204# if defined VAR_RHO_2D && defined SOLVE3D
2229 adfac=cff1*on_u(i,j)*ad_rubar(i,j)
2230 adfac1=adfac*(rzeta(i-1,j)-rzeta(i ,j))
2231 adfac2=adfac*(h(i-1,j)+h(i ,j))
2232 ad_h(i-1,j)=ad_h(i-1,j)+adfac1
2233 ad_h(i ,j)=ad_h(i ,j)+adfac1
2234 ad_rzeta(i-1,j)=ad_rzeta(i-1,j)+adfac2
2235 ad_rzeta(i ,j)=ad_rzeta(i ,j)-adfac2
2236 ad_rzeta2(i-1,j)=ad_rzeta2(i-1,j)+adfac
2237 ad_rzeta2(i ,j)=ad_rzeta2(i ,j)-adfac
2238# if defined VAR_RHO_2D && defined SOLVE3D
2239 adfac3=adfac*(rzetasa(i-1,j)+ &
2241 & cff2*(rhoa(i-1,j)- &
2245 adfac4=adfac2*cff2*(zwrk(i-1,j)-zwrk(i,j))
2246 adfac5=adfac2*cff2*(rhoa(i-1,j)-rhoa(i,j))
2247 ad_h(i-1,j)=ad_h(i-1,j)+adfac3
2248 ad_h(i ,j)=ad_h(i ,j)-adfac3
2249 ad_rzetasa(i-1,j)=ad_rzetasa(i-1,j)+adfac2
2250 ad_rzetasa(i ,j)=ad_rzetasa(i ,j)+adfac2
2251 ad_rhoa(i-1,j)=ad_rhoa(i-1,j)+adfac4
2252 ad_rhoa(i ,j)=ad_rhoa(i ,j)-adfac4
2253 ad_zwrk(i-1,j)=ad_zwrk(i-1,j)+adfac5
2254 ad_zwrk(i ,j)=ad_zwrk(i ,j)-adfac5
2266# if defined VAR_RHO_2D && defined SOLVE3D
2272 adfac=zwrk(i,j)*ad_rzetasa(i,j)
2273 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
2274 & (rhos(i,j)-rhoa(i,j))*ad_rzetasa(i,j)
2275 ad_rhos(i,j)=ad_rhos(i,j)+adfac
2276 ad_rhoa(i,j)=ad_rhoa(i,j)-adfac
2277 ad_rzetasa(i,j)=0.0_r8
2283 adfac=rzeta(i,j)*ad_rzeta2(i,j)
2284 ad_rzeta(i,j)=ad_rzeta(i,j)+ &
2285 & (zeta_new(i,j)+zeta(i,j,kstp))*ad_rzeta2(i,j)
2286 ad_zeta_new(i,j)=ad_zeta_new(i,j)+adfac
2287 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+adfac
2288 ad_rzeta2(i,j)=0.0_r8
2292 ad_zwrk(i,j)=ad_zwrk(i,j)+(1.0_r8+rhos(i,j))*ad_rzeta(i,j)
2293 ad_rhos(i,j)=ad_rhos(i,j)+zwrk(i,j)*ad_rzeta(i,j)
2294 ad_rzeta(i,j)=0.0_r8
2301 adfac=zwrk(i,j)*ad_rzeta2(i,j)
2302 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
2303 & (zeta_new(i,j)+zeta(i,j,kstp))*ad_rzeta2(i,j)
2304 ad_zeta_new(i,j)=ad_zeta_new(i,j)+adfac
2305 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+adfac
2306 ad_rzeta2(i,j)=0.0_r8
2309 ad_zwrk(i,j)=ad_zwrk(i,j)+ad_rzeta(i,j)
2310 ad_rzeta(i,j)=0.0_r8
2314 ad_zeta_new(i,j)=ad_zeta_new(i,j)+ad_zwrk(i,j)
2315 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)-ad_zwrk(i,j)
2324 IF (j.ge.jstrv)
THEN
2327 ad_cff2=ad_cff2+ad_rvfrc_bak(i,j,3-nstp)
2328 ad_rvfrc_bak(i,j,3-nstp)=0.0_r8
2333 ad_cff2=ad_cff2+cfwd0*ad_rvfrc(i,j)
2334 ad_rvfrc_bak(i,j, nstp)=ad_rvfrc_bak(i,j, nstp)+ &
2335 & cfwd1*ad_rvfrc(i,j)
2336 ad_rvfrc_bak(i,j,3-nstp)=ad_rvfrc_bak(i,j,3-nstp)+ &
2337 & cfwd2*ad_rvfrc(i,j)
2338 ad_rvfrc(i,j)=0.0_r8
2341 ad_rvfrc(i,j)=ad_rvfrc(i,j)+ad_cff2
2342 ad_rvbar(i,j)=ad_rvbar(i,j)-ad_cff2
2346 IF (i.ge.istru)
THEN
2349 ad_cff1=ad_cff1+ad_rufrc_bak(i,j,3-nstp)
2350 ad_rufrc_bak(i,j,3-nstp)=0.0_r8
2355 ad_cff1=ad_cff1+cfwd0*ad_rufrc(i,j)
2356 ad_rufrc_bak(i,j, nstp)=ad_rufrc_bak(i,j, nstp)+ &
2357 & cfwd1*ad_rufrc(i,j)
2358 ad_rufrc_bak(i,j,3-nstp)=ad_rufrc_bak(i,j,3-nstp)+ &
2359 & cfwd2*ad_rufrc(i,j)
2360 ad_rufrc(i,j)=0.0_r8
2363 ad_rufrc(i,j)=ad_rufrc(i,j)+ad_cff1
2364 ad_rubar(i,j)=ad_rubar(i,j)-ad_cff1
2377 IF (j.ge.jstrv)
THEN
2382 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)+ &
2383 & 0.5_r8*(rdrag(i,j)+rdrag(i,j-1))* &
2384 & om_v(i,j)*on_v(i,j)*ad_rvfrc(i,j)
2387 IF (i.ge.istru)
THEN
2392 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)+ &
2393 & 0.5_r8*(rdrag(i,j)+rdrag(i-1,j))* &
2394 & om_u(i,j)*on_u(i,j)*ad_rufrc(i,j)
2414# ifdef STEP2D_CORIOLIS
2422#if defined UV_VIS2 && !defined SOLVE3D
2432 drhs_p(i,j)=0.25_r8*(drhs(i,j )+drhs(i-1,j )+ &
2433 & drhs(i,j-1)+drhs(i-1,j-1))
2441 IF (j.ge.jstrv)
THEN
2442# if defined DIAGNOSTICS_UV
2449 ad_fac1=ad_fac1+ad_rvbar(i,j)
2452 ad_cff1=ad_cff1+ad_fac1
2453 ad_cff2=ad_cff2-ad_fac1
2458 adfac=0.5_r8*(pm(i,j-1)+pm(i,j))*ad_cff2
2459 ad_vfe(i,j-1)=ad_vfe(i,j-1)-adfac
2460 ad_vfe(i,j )=ad_vfe(i,j )+adfac
2465 adfac=0.5_r8*(pn(i,j-1)+pn(i,j))*ad_cff1
2466 ad_vfx(i ,j)=ad_vfx(i ,j)-adfac
2467 ad_vfx(i+1,j)=ad_vfx(i+1,j)+adfac
2471 IF (i.ge.istru)
THEN
2472# if defined DIAGNOSTICS_UV
2479 ad_fac1=ad_fac1+ad_rubar(i,j)
2482 ad_cff1=ad_cff1+ad_fac1
2483 ad_cff2=ad_cff2+ad_fac1
2488 adfac=0.5_r8*(pm(i-1,j)+pm(i,j))*ad_cff2
2489 ad_ufe(i,j )=ad_ufe(i,j )-adfac
2490 ad_ufe(i,j+1)=ad_ufe(i,j+1)+adfac
2495 adfac=0.5_r8*(pn(i-1,j)+pn(i,j))*ad_cff1
2496 ad_ufx(i-1,j)=ad_ufx(i-1,j)-adfac
2497 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
2512 & on_p(i,j)*on_p(i,j)*ad_vfx(i,j)+ &
2513 & om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
2516# ifdef WET_DRY_NOT_YET
2519 ad_cff=ad_cff*pmask_wet(i,j)
2524 ad_cff=ad_cff*pmask(i,j)
2542 adfac=visc2_p(i,j)*0.5_r8*ad_cff
2543 adfac1=adfac*drhs_p(i,j)
2544 adfac2=adfac1*pmon_p(i,j)
2545 adfac3=adfac1*pnom_p(i,j)
2546 ad_drhs_p(i,j)=ad_drhs_p(i,j)+ &
2548 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,kstp)- &
2549 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,kstp))+ &
2551 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,kstp)- &
2552 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,kstp)))* &
2554 ad_vbar(i-1,j,kstp)=ad_vbar(i-1,j,kstp)- &
2555 & (pn(i-1,j-1)+pn(i-1,j))*adfac2
2556 ad_vbar(i ,j,kstp)=ad_vbar(i ,j,kstp)+ &
2557 & (pn(i ,j-1)+pn(i ,j))*adfac2
2558 ad_ubar(i,j-1,kstp)=ad_ubar(i,j-1,kstp)- &
2559 & (pm(i-1,j-1)+pm(i,j-1))*adfac3
2560 ad_ubar(i,j ,kstp)=ad_ubar(i,j ,kstp)+ &
2561 & (pm(i-1,j )+pm(i,j ))*adfac3
2572 & om_r(i,j)*om_r(i,j)*ad_vfe(i,j)+ &
2573 & on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
2592 adfac=visc2_r(i,j)*0.5_r8*ad_cff
2593 adfac1=adfac*drhs(i,j)
2594 adfac2=adfac1*pmon_r(i,j)
2595 adfac3=adfac1*pnom_r(i,j)
2596 ad_drhs(i,j)=ad_drhs(i,j)+ &
2598 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,kstp)- &
2599 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,kstp))- &
2601 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,kstp)- &
2602 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,kstp)))* &
2604 ad_ubar(i ,j,kstp)=ad_ubar(i ,j,kstp)- &
2605 & (pn(i-1,j)+pn(i ,j))*adfac2
2606 ad_ubar(i+1,j,kstp)=ad_ubar(i+1,j,kstp)+ &
2607 & (pn(i ,j)+pn(i+1,j))*adfac2
2608 ad_vbar(i,j ,kstp)=ad_vbar(i,j ,kstp)+ &
2609 & (pm(i,j-1)+pm(i,j ))*adfac3
2610 ad_vbar(i,j+1,kstp)=ad_vbar(i,j+1,kstp)- &
2611 & (pm(i,j )+pm(i,j+1))*adfac3
2623 adfac=0.25_r8*ad_drhs_p(i,j)
2624 ad_drhs(i-1,j-1)=ad_drhs(i-1,j-1)+adfac
2625 ad_drhs(i-1,j )=ad_drhs(i-1,j )+adfac
2626 ad_drhs(i, j-1)=ad_drhs(i ,j-1)+adfac
2627 ad_drhs(i ,j )=ad_drhs(i ,j )+adfac
2628 ad_drhs_p(i,j)=0.0_r8
2633#if (defined CURVGRID && defined UV_ADV) && !defined SOLVE3D
2641 IF (j.ge.jstrv)
THEN
2642# if defined DIAGNOSTICS_UV
2650 ad_fac1=ad_fac1-ad_rvbar(i,j)
2653 adfac=0.5_r8*ad_fac1
2654 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac
2655 ad_vfe(i,j )=ad_vfe(i,j )+adfac
2659 IF (i.ge.istru)
THEN
2660# if defined DIAGNOSTICS_UV
2668 ad_fac1=ad_fac1+ad_rubar(i,j)
2671 adfac=0.5_r8*ad_fac1
2672 ad_ufx(i-1,j)=ad_ufx(i-1,j)+adfac
2673 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
2681 cff1=0.5_r8*(vrhs(i,j )+ &
2683 & vbar_stokes(i,j )+ &
2684 & vbar_stokes(i,j+1)+ &
2687 cff2=0.5_r8*(urhs(i ,j)+
2689 & ubar_stokes(i ,j)+ &
2690 & ubar_stokes(i+1,j)+ &
2695 cff=drhs(i,j)*(cff3-cff4)
2696# if defined DIAGNOSTICS_UV
2705 & cff1*ad_ufx(i,j)+ &
2707 ad_cff1=ad_cff1+cff*ad_ufx(i,j)
2708 ad_cff2=ad_cff2+cff*ad_vfe(i,j)
2714 adfac=drhs(i,j)*ad_cff
2715 ad_cff4=ad_cff4-adfac
2716 ad_cff3=ad_cff3+adfac
2717 ad_drhs(i,j)=ad_drhs(i,j)+(cff3-cff4)*ad_cff
2721 ad_cff2=ad_cff2+dmde(i,j)*ad_cff4
2725 ad_cff1=ad_cff1+dndx(i,j)*ad_cff3
2734 adfac=0.5_r8*ad_cff2
2735 ad_urhs(i ,j)=ad_urhs(i ,j)+adfac
2736 ad_urhs(i+1,j)=ad_urhs(i+1,j)+adfac
2738 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac
2739 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac
2749 adfac=0.5_r8*ad_cff1
2750 ad_vrhs(i,j )=ad_vrhs(i,j )+adfac
2751 ad_vrhs(i,j+1)=ad_vrhs(i,j+1)+adfac
2753 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac
2754 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac
2761#if (defined UV_COR && !defined SOLVE3D) || defined STEP2D_CORIOLIS
2769 IF (j.ge.jstrv)
THEN
2770# if defined DIAGNOSTICS_UV
2775 ad_fac2=ad_fac2-ad_rvbar(i,j)
2778 adfac=0.5_r8*ad_fac2
2779 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac
2780 ad_vfe(i,j )=ad_vfe(i,j )+adfac
2784 IF (i.ge.istru)
THEN
2785# if defined DIAGNOSTICS_UV
2790 ad_fac1=ad_fac1+ad_rubar(i,j)
2793 adfac=0.5_r8*ad_fac1
2794 ad_ufx(i-1,j)=ad_ufx(i-1,j)+adfac
2795 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
2803 cff=0.5_r8*drhs(i,j)*fomn(i,j)
2817 adfac=cff*ad_vfe(i,j)
2818 ad_urhs(i ,j)=ad_urhs(i ,j)+adfac
2819 ad_urhs(i+1,j)=ad_urhs(i+1,j)+adfac
2821 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac
2822 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac
2827 & ubar_stokes(i ,j)+ &
2828 & ubar_stokes(i+1,j)+ &
2830 & urhs(i+1,j))*ad_vfe(i,j)
2846 adfac=cff*ad_ufx(i,j)
2847 ad_vrhs(i,j )=ad_vrhs(i,j )+adfac
2848 ad_vrhs(i,j+1)=ad_vrhs(i,j+1)+adfac
2850 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac
2851 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac
2856 & vbar_stokes(i,j )+ &
2857 & vbar_stokes(i,j+1)+ &
2859 & vrhs(i,j+1))*ad_ufx(i,j)
2863 ad_drhs(i,j)=ad_drhs(i,j)+0.5_r8*fomn(i,j)*ad_cff
2869#if defined UV_ADV && !defined SOLVE3D
2879 IF (j.ge.jstrv)
THEN
2880# if defined DIAGNOSTICS_UV
2887 ad_fac2=ad_fac2-ad_rvbar(i,j)
2890 ad_cff3=ad_cff3+ad_fac2
2891 ad_cff4=ad_cff4+ad_fac2
2895 ad_vfe(i,j-1)=ad_vfe(i,j-1)-ad_cff4
2896 ad_vfe(i,j )=ad_vfe(i,j )+ad_cff4
2900 ad_vfx(i ,j)=ad_vfx(i ,j)-ad_cff3
2901 ad_vfx(i+1,j)=ad_vfx(i+1,j)+ad_cff3
2905 IF (i.ge.istru)
THEN
2906# if defined DIAGNOSTICS_UV
2913 ad_fac1=ad_fac1-ad_rubar(i,j)
2916 ad_cff1=ad_cff1+ad_fac1
2917 ad_cff2=ad_cff2+ad_fac1
2921 ad_ufe(i,j )=ad_ufe(i,j )-ad_cff2
2922 ad_ufe(i,j+1)=ad_ufe(i,j+1)+ad_cff2
2926 ad_ufx(i-1,j)=ad_ufx(i-1,j)-ad_cff1
2927 ad_ufx(i ,j)=ad_ufx(i ,j)+ad_cff1
2933# ifdef UV_C2ADVECTION
2958 adfac=0.25_r8*ad_ufe(i,j+1)
2959 adfac1=adfac*(urhs(i,j+1)+ &
2961 & ubar_stokes(i,j+1)+ &
2962 & ubar_stokes(i,j )+ &
2965 adfac2=adfac*(dvom(i,j+1)+dvom(i-1,j+1))
2966 ad_dvom(i-1,j+1)=ad_dvom(i-1,j+1)+adfac1
2967 ad_dvom(i ,j+1)=ad_dvom(i,j+1)+adfac1
2968 ad_urhs(i,j )=ad_urhs(i,j )+adfac2
2969 ad_urhs(i,j+1)=ad_urhs(i,j+1)+adfac2
2971 ad_ubar_stokes(i,j )=ad_ubar_stokes(i,j )+adfac2
2972 ad_ubar_stokes(i,j+1)=ad_ubar_stokes(i,j+1)+adfac2
2974 ad_ufe(i,j+1)=0.0_r8
2976 IF (j.ge.jstrv-1)
THEN
2993 adfac=0.25_r8*ad_vfe(i,j)
2994 adfac1=adfac*(vrhs(i,j )+ &
2996 & vbar_stokes(i,j )+ &
2997 & vbar_stokes(i,j+1)+ &
3000 adfac2=adfac*(dvom(i,j)+dvom(i,j+1))
3001 ad_dvom(i,j )=ad_dvom(i,j )+adfac1
3002 ad_dvom(i,j+1)=ad_dvom(i,j+1)+adfac1
3003 ad_vrhs(i,j )=ad_vrhs(i,j )+adfac2
3004 ad_vrhs(i,j+1)=ad_vrhs(i,j+1)+adfac2
3006 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac2
3007 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac2
3040 adfac1=adfac*(vrhs(i+1,j)+ &
3042 & vbar_stokes(i ,j)+ &
3043 & vbar_stokes(i-1,j)+ &
3046 adfac2=adfac*(duon(i+1,j)+duon(i+1,j-1))
3047 ad_duon(i+1,j-1)=ad_duon(i+1,j-1)+adfac1
3048 ad_duon(i+1,j )=ad_duon(i+1,j )+adfac1
3049 ad_vrhs(i ,j)=ad_vrhs(i ,j)+adfac2
3050 ad_vrhs(i+1,j)=ad_vrhs(i+1,j)+adfac2
3052 ad_vbar_stokes(i-1,j)=ad_vbar_stokes(i-1,j)+adfac2
3053 ad_vbar_stokes(i ,j)=ad_vbar_stokes(i ,j)+adfac2
3055 ad_vfx(i+1,j)=0.0_r8
3057 IF (i.ge.istru-1)
THEN
3074 adfac=0.25_r8*ad_ufx(i,j
3075 adfac1=adfac*(urhs(i ,j)+ &
3077 & ubar_stokes(i ,j)+ &
3078 & ubar_stokes(i+1,j)+ &
3081 adfac2=adfac*(duon(i,j)+duon(i+1,j))
3082 ad_duon(i ,j)=ad_duon(i ,j)+adfac1
3083 ad_duon(i+1,j)=ad_duon(i+1,j)+adfac1
3084 ad_urhs(i ,j)=ad_urhs(i ,j)+adfac2
3085 ad_urhs(i+1,j)=ad_urhs(i+1,j)+adfac2
3087 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac2
3088 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac2
3096# elif defined UV_C4ADVECTION
3102 grad(i,j)=vrhs(i,j-1)-2.0_r8*vrhs(i,j)+ &
3104 & vbar_stokes(i,j-1)-2.0_r8*vbar_stokes(i,j)+ &
3105 & vbar_stokes(i,j+1)+ &
3108 dgrad(i,j)=dvom(i,j-1)-2.0_r8*dvom(i,j)+dvom(i,j+1)
3112 IF (
domain(ng)%Northern_Edge(tile))
THEN
3114 grad(i,jend+1)=grad(i,jend)
3115 dgrad(i,jend+1)=dgrad(i,jend)
3120 IF (
domain(ng)%Southern_Edge(tile))
THEN
3122 grad(i,jstr)=grad(i,jstr+1)
3123 dgrad(i,jstr)=dgrad(i,jstr+1)
3151 adfac=0.25_r8*ad_vfe(i,j)
3152 adfac1=adfac*(dvom(i,j)+dvom(i,j+1)- &
3153 & cff*(dgrad(i,j)+dgrad(i,j+1)))
3155 adfac3=adfac*(vrhs(i,j )+ &
3157 & vbar_stokes(i,j )+ &
3158 & vbar_stokes(i,j+1)+ &
3160 & vrhs(i,j+1,krhs)- &
3161 & cff*(grad(i,j)+grad(i,j+1)))
3163 ad_vrhs(i,j )=ad_vrhs(i,j )+adfac1
3164 ad_vrhs(i,j+1)=ad_vrhs(i,j+1)+adfac1
3166 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac1
3167 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac1
3169 ad_grad(i,j )=ad_grad(i,j )-adfac2
3170 ad_grad(i,j+1)=ad_grad(i,j+1)-adfac2
3171 ad_dvom(i,j )=ad_dvom(i,j )+adfac3
3172 ad_dvom(i,j+1)=ad_dvom(i,j+1)+adfac3
3173 ad_dgrad(i,j )=ad_dgrad(i,j )-adfac4
3174 ad_dgrad(i,j+1)=ad_dgrad(i,j+1)-adfac4
3180 IF (
domain(ng)%Northern_Edge(tile))
THEN
3184 ad_dgrad(i,jend)=ad_dgrad(i,jend)+ad_dgrad(i,jend+1)
3185 ad_dgrad(i,jend+1)=0.0_r8
3188 ad_grad(i,jend)=ad_grad(i,jend)+ad_grad(i,jend+1)
3189 ad_grad(i,jend+1)=0.0_r8
3194 IF (
domain(ng)%Southern_Edge(tile))
THEN
3198 ad_dgrad(i,jstr+1)=ad_dgrad(i,jstr+1)+ad_dgrad(i,jstr)
3199 ad_dgrad(i,jstr)=0.0_r8
3202 ad_grad(i,jstr+1)=ad_grad(i,jstr+1)+ad_grad(i,jstr)
3203 ad_grad(i,jstr)=0.0_r8
3212 ad_dvom(i,j-1)=ad_dvom(i,j-1)+ad_dgrad(i,j)
3213 ad_dvom(i,j )=ad_dvom(i,j )-2.0_r8*ad_dgrad(i,j)
3214 ad_dvom(i,j+1)=ad_dvom(i,j+1)+ad_dgrad(i,j)
3215 ad_dgrad(i,j)=0.0_r8
3224 ad_vrhs(i,j-1)=ad_vrhs(i,j-1)+ad_grad(i,j)
3225 ad_vrhs(i,j )=ad_vrhs(i,j )-2.0_r8*ad_grad(i,j)
3226 ad_vrhs(i,j+1)=ad_vrhs(i,j+1)+ad_grad(i,j)
3228 ad_vbar_stokes(i,j-1)=ad_vbar_stokes(i,j-1)+ad_grad(i,j)
3229 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )- &
3230 & 2.0_r8*ad_grad(i,j)
3231 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+ad_grad(i,j)
3239 grad(i,j)=vrhs(i-1,j)-2.0_r8*vrhs(i,j,krhs)+ &
3241 & vbar_stokes(i-1,j)-2.0_r8*vbar_stokes(i,j)+ &
3242 & vbar_stokes(i+1,j)+ &
3248 IF (
domain(ng)%Western_Edge(tile))
THEN
3250 grad(istr-1,j)=grad(istr,j)
3255 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3257 grad(iend+1,j)=grad(iend,j)
3263 dgrad(i,j)=duon(i,j-1)-2.0_r8*duon(i,j)+duon(i,j+1)
3290 adfac=0.25_r8*ad_vfx(i,j)
3291 adfac1=adfac*(duon(i,j)+duon(i,j-1)- &
3292 & cff*(dgrad(i,j)+dgrad(i,j-1)))
3294 adfac3=adfac*(vrhs(i ,j)+ &
3296 & vbar_stokes(i ,j)+ &
3297 & vbar_stokes(i-1,j)+ &
3300 & cff*(grad(i,j)+grad(i-1,j)))
3302 ad_vrhs(i-1,j)=ad_vrhs(i-1,j)+adfac1
3303 ad_vrhs(i ,j)=ad_vrhs(i ,j)+adfac1
3305 ad_vbar_stokes(i-1,j)=ad_vbar_stokes(i-1,j)+adfac1
3306 ad_vbar_stokes(i ,j)=ad_vbar_stokes(i ,j)+adfac1
3308 ad_grad(i-1,j)=ad_grad(i-1,j)-adfac2
3309 ad_grad(i ,j)=ad_grad(i ,j)-adfac2
3310 ad_duon(i,j-1)=ad_duon(i,j-1)+adfac3
3311 ad_duon(i,j )=ad_duon(i,j )+adfac3
3312 ad_dgrad(i,j-1)=ad_dgrad(i,j-1)-adfac4
3313 ad_dgrad(i,j )=ad_dgrad(i,j )-adfac4
3323 ad_duon(i,j-1)=ad_duon(i,j-1)+ad_dgrad(i,j)
3324 ad_duon(i,j )=ad_duon(i,j )-2.0_r8*ad_dgrad(i,j)
3325 ad_duon(i,j+1)=ad_duon(i,j+1)+ad_dgrad(i,j)
3326 ad_dgrad(i,j)=0.0_r8
3330 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3334 ad_grad(iend,j)=ad_grad(iend,j)+ad_grad(iend+1,j)
3335 ad_grad(iend+1,j)=0.0_r8
3340 IF (
domain(ng)%Western_Edge(tile))
THEN
3344 ad_grad(istr,j)=ad_grad(istr,j)+ad_grad(istr-1,j)
3345 ad_grad(istr-1,j)=0.0_r8
3358 ad_vrhs(i-1,j)=ad_vrhs(i-1,j)+ad_grad(i,j)
3359 ad_vrhs(i ,j)=ad_vrhs(i ,j)-2.0_r8*ad_grad(i,j)
3360 ad_vrhs(i+1,j)=ad_vrhs(i+1,j)+ad_grad(i,j)
3362 ad_vbar_stokes(i-1,j)=ad_vbar_stokes(i-1,j)+ad_grad(i,j)
3363 ad_vbar_stokes(i ,j)=ad_vbar_stokes(i ,j)- &
3364 & 2.0_r8*ad_grad(i,j)
3365 ad_vbar_stokes(i+1,j)=ad_vbar_stokes(i+1,j)+ad_grad(i,j)
3375 grad(i,j)=urhs(i,j-1)-2.0_r8*urhs(i,j)+ &
3377 & ubar_stokes(i,j-1)-2.0_r8*ubar_stokes(i,j)+ &
3378 & ubar_stokes(i,j+1)+ &
3384 IF (
domain(ng)%Southern_Edge(tile))
THEN
3386 grad(i,jstr-1)=grad(i,jstr)
3391 IF (
domain(ng)%Northern_Edge(tile))
THEN
3393 grad(i,jend+1)=grad(i,jend)
3399 dgrad(i,j)=dvom(i-1,j)-2.0_r8*dvom(i,j)+dvom(i+1,j)
3426 adfac=0.25_r8*ad_ufe(i,j)
3427 adfac1=adfac*(dvom(i,j)+dvom(i-1,j)- &
3428 & cff*(dgrad(i,j)+dgrad(i-1,j)))
3430 adfac3=adfac*(urhs(i,j )+ &
3432 & ubar_stokes(i,j )+ &
3433 & ubar_stokes(i,j-1)+ &
3435 & urhs(i,j-1,krhs)- &
3436 & cff*(grad(i,j)+grad(i,j-1)))
3438 ad_urhs(i,j-1)=ad_urhs(i,j-1)+adfac1
3439 ad_urhs(i,j )=ad_urhs(i,j )+adfac1
3441 ad_ubar_stokes(i,j-1)=ad_ubar_stokes(i,j-1)+adfac1
3442 ad_ubar_stokes(i,j )=ad_ubar_stokes(i,j )+adfac1
3444 ad_grad(i,j-1)=ad_grad(i,j-1)-adfac2
3445 ad_grad(i,j )=ad_grad(i,j )-adfac2
3446 ad_dvom(i-1,j)=ad_dvom(i-1,j)+adfac3
3447 ad_dvom(i ,j)=ad_dvom(i ,j)+adfac3
3448 ad_dgrad(i-1,j)=ad_dgrad(i-1,j)-adfac4
3449 ad_dgrad(i ,j)=ad_dgrad(i ,j)-adfac4
3459 ad_dvom(i-1,j)=ad_dvom(i-1,j)+ad_dgrad(i,j)
3460 ad_dvom(i ,j)=ad_dvom(i ,j)-2.0_r8*ad_dgrad(i,j)
3461 ad_dvom(i+1,j)=ad_dvom(i+1,j)+ad_dgrad(i,j)
3462 ad_dgrad(i,j)=0.0_r8
3466 IF (
domain(ng)%Northern_Edge(tile))
THEN
3470 ad_grad(i,jend)=ad_grad(i,jend)+ad_grad(i,jend+1)
3471 ad_grad(i,jend+1)=0.0_r8
3476 IF (
domain(ng)%Southern_Edge(tile))
THEN
3480 ad_grad(i,jstr)=ad_grad(i,jstr)+ad_grad(i,jstr-1)
3481 ad_grad(i,jstr-1)=0.0_r8
3494 ad_urhs(i,j-1)=ad_urhs(i,j-1)+ad_grad(i,j)
3495 ad_urhs(i,j )=ad_urhs(i,j )-2.0_r8*ad_grad(i,j)
3496 ad_urhs(i,j+1)=ad_urhs(i,j+1)+ad_grad(i,j)
3498 ad_ubar_stokes(i,j-1)=ad_ubar_stokes(i,j-1)+ad_grad(i,j)
3499 ad_ubar_stokes(i,j )=ad_ubar_stokes(i,j)- &
3500 & 2.0_r8*ad_grad(i,j)
3501 ad_ubar_stokes(i,j+1)=ad_ubar_stokes(i,j+1)+ad_grad(i,j)
3509 grad(i,j)=urhs(i-1,j)-2.0_r8*urhs(i,j)+ &
3511 & ubar_stokes(i-1,j)-2.0_r8*ubar_stokes(i,j)+ &
3512 & ubar_stokes(i+1,j)+ &
3515 dgrad(i,j)=duon(i-1,j)-2.0_r8*duon(i,j)+duon(i+1,j)
3519 IF (
domain(ng)%Western_Edge(tile))
THEN
3521 grad(istr,j)=grad(istr+1,j)
3522 dgrad(istr,j)=dgrad(istr+1,j)
3527 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3529 grad(iend+1,j)=grad(iend,j)
3530 dgrad(iend+1,j)=dgrad(iend,j)
3558 adfac=0.25_r8*ad_ufx(i,j)
3559 adfac1=adfac*(duon(i,j)+duon(i+1,j)- &
3560 & cff*(dgrad(i,j)+dgrad(i+1,j)))
3562 adfac3=adfac*(urhs(i ,j)+ &
3564 & ubar_stokes(i ,j)+ &
3565 & ubar_stokes(i+1,j)+ &
3568 & cff*(grad(i,j)+grad(i+1,j)))
3570 ad_urhs(i ,j)=ad_urhs(i ,j)+adfac1
3571 ad_urhs(i+1,j)=ad_urhs(i+1,j)+adfac1
3573 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac1
3574 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac1
3576 ad_grad(i ,j)=ad_grad(i ,j)-adfac2
3577 ad_grad(i+1,j)=ad_grad(i+1,j)-adfac2
3578 ad_duon(i ,j)=ad_duon(i ,j)+adfac3
3579 ad_duon(i+1,j)=ad_duon(i+1,j)+adfac3
3580 ad_dgrad(i ,j)=ad_dgrad(i ,j)-adfac4
3581 ad_dgrad(i+1,j)=ad_dgrad(i+1,j)-adfac4
3587 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3591 ad_dgrad(iend,j)=ad_dgrad(iend,j)+ad_dgrad(iend+1,j)
3592 ad_dgrad(iend+1,j)=0.0_r8
3595 ad_grad(iend,j)=ad_grad(iend,j)+ad_grad(iend+1,j)
3596 ad_grad(iend+1,j)=0.0_r8
3601 IF (
domain(ng)%Western_Edge(tile))
THEN
3605 ad_dgrad(istr+1,j)=ad_dgrad(istr+1,j)+ad_dgrad(istr,j)
3606 ad_dgrad(istr,j)=0.0_r8
3609 ad_grad(istr+1,j)=ad_grad(istr+1,j)+ad_grad(istr,j)
3610 ad_grad(istr,j)=0.0_r8
3619 ad_duon(i-1,j)=ad_duon(i-1,j)+ad_dgrad(i,j)
3620 ad_duon(i ,j)=ad_duon(i ,j)-2.0_r8*ad_dgrad(i,j)
3621 ad_duon(i+1,j)=ad_duon(i+1,j)+ad_dgrad(i,j)
3622 ad_dgrad(i,j)=0.0_r8
3630 ad_urhs(i-1,j)=ad_urhs(i-1,j)+ad_grad(i,j)
3631 ad_urhs(i ,j)=ad_urhs(i ,j)-2.0_r8*ad_grad(i,j)
3632 ad_urhs(i+1,j)=ad_urhs(i+1,j)+ad_grad(i,j)
3633# ifdef NEARHSORE_MELLOR
3634 ad_ubar_stokes(i-1,j)=ad_ubar_stokes(i-1,j)+ad_grad(i,j)
3635 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)- &
3636 & 2.0_r8*ad_grad(i,j)
3637 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+ad_grad(i,j)
3650#if defined VAR_RHO_2D && defined SOLVE3D
3651 cff2=0.333333333333_r8
3653#if defined ATM_PRESS && !defined SOLVE3D
3654 cff3=0.5_r8*100.0_r8/
rho0
3658 IF (j.ge.jstrv)
THEN
3659#ifdef DIAGNOSTICS_UV
3662#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
3672 adfac=cff1*om_v(i,j)*ad_rvbar(i,j)
3673 adfac1=adfac*(eq_tide(i,j)-eq_tide(i,j-1))
3674 adfac2=adfac*(h(i,j-1)+h(i,j)+ &
3675 & rzeta(i,j-1)+rzeta(i,j))
3676 ad_h(i,j-1)=ad_h(i,j-1)-adfac1
3677 ad_h(i,j )=ad_h(i,j )-adfac1
3678 ad_rzeta(i,j-1)=ad_rzeta(i,j-1)-adfac1
3679 ad_rzeta(i,j )=ad_rzeta(i,j )-adfac1
3680 ad_eq_tide(i,j-1)=ad_eq_tide(i,j-1)+adfac2
3681 ad_eq_tide(i,j )=ad_eq_tide(i,j )-adfac2
3683#if defined ATM_PRESS && !defined SOLVE3D
3690 adfac=-cff3*om_v(i,j)*(pair(i,j)-pair(i,j-1)*ad_rvbar(i,j)
3691 ad_h(i,j-1)=ad_h(i,j-1)+adfac
3692 ad_h(i,j )=ad_h(i,j )+adfac
3693 ad_rzeta(i,j-1)=ad_rzeta(i,j-1)+adfac
3694 ad_rzeta(i,j )=ad_rzeta(i,j )+adfac
3705#if defined VAR_RHO_2D && defined SOLVE3D
3730 adfac=cff1*om_v(i,j)*ad_rvbar(i,j)
3731 adfac1=adfac*(rzeta(i,j-1)-rzeta(i,j ))
3732 adfac2=adfac*(h(i,j-1)+h(i,j ))
3733 ad_h(i,j-1)=ad_h(i,j-1)+adfac1
3734 ad_h(i,j )=ad_h(i,j )+adfac1
3735 ad_rzeta(i,j-1)=ad_rzeta(i,j-1)+adfac2
3736 ad_rzeta(i,j )=ad_rzeta(i,j )-adfac2
3737 ad_rzeta2(i,j-1)=ad_rzeta2(i,j-1)+adfac
3738 ad_rzeta2(i,j )=ad_rzeta2(i,j )-adfac
3739#if defined VAR_RHO_2D && defined SOLVE3D
3740 adfac3=adfac*(rzetasa(i,j-1)+ &
3742 & cff2*(rhoa(i,j-1)- &
3746 adfac4=adfac2*cff2*(zwrk(i,j-1)-zwrk(i,j))
3747 adfac5=adfac2*cff2*(rhoa(i,j-1)-rhoa(i,j))
3748 ad_h(i,j-1)=ad_h(i,j-1)+adfac3
3749 ad_h(i,j )=ad_h(i,j )-adfac3
3750 ad_rzetasa(i,j-1)=ad_rzetasa(i,j-1)+adfac2
3751 ad_rzetasa(i,j )=ad_rzetasa(i,j )+adfac2
3752 ad_rhoa(i,j-1)=ad_rhoa(i,j-1)+adfac4
3753 ad_rhoa(i,j )=ad_rhoa(i,j )-adfac4
3754 ad_zwrk(i,j-1)=ad_zwrk(i,j-1)+adfac5
3755 ad_zwrk(i,j )=ad_zwrk(i,j )-adfac5
3757 ad_rvbar(i,j)=0.0_r8
3760 IF (i.ge.istru)
THEN
3761#ifdef DIAGNOSTICS_UV
3764#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
3774 adfac=cff1*on_u(i,j)*ad_rubar(i,j)
3775 adfac1=adfac*(eq_tide(i,j)-eq_tide(i-1,j))
3776 adfac2=adfac*(h(i-1,j)+h(i,j)+ &
3777 & rzeta(i-1,j)+rzeta(i,j))
3778 ad_h(i-1,j)=ad_h(i-1,j)-adfac1
3779 ad_h(i ,j)=ad_h(i ,j)-adfac1
3780 ad_rzeta(i-1,j)=ad_rzeta(i-1,j)-adfac1
3781 ad_rzeta(i ,j)=ad_rzeta(i ,j)-adfac1
3782 ad_eq_tide(i-1,j)=ad_eq_tide(i-1,j)+adfac2
3783 ad_eq_tide(i ,j)=ad_eq_tide(i ,j)-adfac2
3785#if defined ATM_PRESS && !defined SOLVE3D
3792 adfac=-cff3*on_u(i,j)*(pair(i,j)-pair(i-1,j))*ad_rubar(i,j)
3793 ad_h(i-1,j)=ad_h(i-1,j)+adfac
3794 ad_h(i ,j)=ad_h(i ,j)+adfac
3795 ad_rzeta(i-1,j)=ad_rzeta(i-1,j)+adfac
3796 ad_rzeta(i ,j)=ad_rzeta(i ,j)+adfac
3807#if defined VAR_RHO_2D && defined SOLVE3D
3832 adfac=cff1*on_u(i,j)*ad_rubar(i,j)
3833 adfac1=adfac*(rzeta(i-1,j)-rzeta(i ,j))
3834 adfac2=adfac*(h(i-1,j)+h(i ,j))
3835 ad_h(i-1,j)=ad_h(i-1,j)+adfac1
3836 ad_h(i ,j)=ad_h(i ,j)+adfac1
3837 ad_rzeta(i-1,j)=ad_rzeta(i-1,j)+adfac2
3838 ad_rzeta(i ,j)=ad_rzeta(i ,j)-adfac2
3839 ad_rzeta2(i-1,j)=ad_rzeta2(i-1,j)+adfac
3840 ad_rzeta2(i ,j)=ad_rzeta2(i ,j)-adfac
3841#if defined VAR_RHO_2D && defined SOLVE3D
3842 adfac3=adfac*(rzetasa(i-1,j)+ &
3844 & cff2*(rhoa(i-1,j)- &
3848 adfac4=adfac2*cff2*(zwrk(i-1,j)-zwrk(i,j))
3849 adfac5=adfac2*cff2*(rhoa(i-1,j)-rhoa(i,j))
3850 ad_h(i-1,j)=ad_h(i-1,j)+adfac3
3851 ad_h(i ,j)=ad_h(i ,j)-adfac3
3852 ad_rzetasa(i-1,j)=ad_rzetasa(i-1,j)+adfac2
3853 ad_rzetasa(i ,j)=ad_rzetasa(i ,j)+adfac2
3854 ad_rhoa(i-1,j)=ad_rhoa(i-1,j)+adfac4
3855 ad_rhoa(i ,j)=ad_rhoa(i ,j)-adfac4
3856 ad_zwrk(i-1,j)=ad_zwrk(i-1,j)+adfac5
3857 ad_zwrk(i ,j)=ad_zwrk(i ,j)-adfac5
3859 ad_rubar(i,j)=0.0_r8
3878 IF (first_2d_step)
THEN
3884 ad_dvom(i,j)=ad_dvom(i,j)+cff2*ad_dv_avg2(i,j)
3885 ad_dv_avg2(i,j)=0.0_r8
3888 ad_dv_avg1(i,j)=0.0_r8
3893 ad_duon(i,j)=ad_duon(i,j)+cff2*ad_du_avg2(i,j)
3894 ad_du_avg2(i,j)=0.0_r8
3897 ad_du_avg1(i,j)=0.0_r8
3901 ad_zeta(i,j,knew)=ad_zeta(i,j,knew)+cff1*ad_zt_avg1(i,j)
3902 ad_zt_avg1(i,j)=0.0_r8
3911 ad_dvom(i,j)=ad_dvom(i,j)+cff2*ad_dv_avg2(i,j)
3916 ad_duon(i,j)=ad_duon(i,j)+cff2*ad_du_avg2(i,j)
3920 ad_zeta(i,j,knew)=ad_zeta(i,j,knew)+cff1*ad_zt_avg1(i,j)
3936 ad_zeta_sol(i,j)=ad_zeta(i,j,knew)
3947 ad_zeta_new(i,j)=ad_zeta_new(i,j)+ad_zeta(i,j,knew)
3948 ad_zeta(i,j,knew)=0.0_r8
3968 CALL ad_zetabc_local (ng, tile, &
3969 & lbi, ubi, lbj, ubj, &
3970 & imins, imaxs, jmins, jmaxs, &
3973 & zeta_new, ad_zeta_new)
3981 IF (int(
sources(ng)%Dsrc(is)).eq.2)
THEN
3984 IF (((istrr.le.i).and.(i.le.iendr)).and. &
3985 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
4000 fac=
dtfast(ng)*pm(i,j)*pn(i,j)
4001#if defined VAR_RHO_2D && defined SOLVE3D
4005 adfac=zwrk(i,j)*ad_rzetasa(i,j)
4006 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4007 & (rhos(i,j)-rhoa(i,j))*ad_rzetasa(i,j)
4008 ad_rhos(i,j)=ad_rhos(i,j)+adfac
4009 ad_rhoa(i,j)=ad_rhoa(i,j)-adfac
4010 ad_rzetasa(i,j)=0.0_r8
4014 ad_rzeta(i,j)=ad_rzeta(i,j)+zwrk(i,j)*ad_rzeta2(i,j)
4015 ad_zwrk(i,j)=ad_zwrk(i,j)+rzeta(i,j)*ad_rzeta2(i,j)
4016 ad_rzeta2(i,j)=0.0_r8
4020 ad_rhos(i,j)=ad_rhos(i,j)+zwrk(i,j)*ad_rzeta(i,j)
4021 ad_zwrk(i,j)=ad_zwrk(i,j)+(1.0_r8+rhos(i,j))*ad_rzeta(i,j)
4022 ad_rzeta(i,j)=0.0_r8
4027 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4028 & 2.0_r8*zwrk(i,j)*ad_rzeta2(i,j)+ &
4030 ad_rzeta2(i,j)=0.0_r8
4031 ad_rzeta(i,j)=0.0_r8
4038 ad_zeta_new(i,j)=ad_zeta_new(i,j)+bkw_new*ad_zwrk(i,j)
4039 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+bkw0*ad_zwrk(i,j)
4040 ad_zeta(i,j,kbak)=ad_zeta(i,j,kbak)+bkw1*ad_zwrk(i,j)
4041 ad_zeta(i,j,kold)=ad_zeta(i,j,kold)+bkw2*ad_zwrk(i,j)
4044# ifdef WET_DRY_NOT_YET
4051 ad_zeta_new(i,j)=ad_zeta_new(i,j)*rmask(i,j)
4057 adfac=fac*ad_zeta_new(i,j)
4058 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+ad_zeta_new(i,j)
4059 ad_duon(i ,j)=ad_duon(i ,j)+adfac
4060 ad_duon(i+1,j)=ad_duon(i+1,j)-adfac
4061 ad_dvom(i,j )=ad_dvom(i,j )+adfac
4062 ad_dvom(i,j+1)=ad_dvom(i,j+1)-adfac
4063 ad_zeta_new(i,j)=0.0_r8
4089 & lbi, ubi, lbj, ubj, &
4090 & imins, imaxs, jmins, jmaxs, &
4097 & ad_ubar, ad_vbar, &
4098 & drhs, duon, dvom, &
4099 & ad_drhs, ad_duon, ad_dvom)
4117 & lbi, ubi, lbj, ubj, &
4118 & imins, imaxs, jmins, jmaxs, &
4123 & h, ad_h, om_v, on_u, &
4124 & ubar, vbar, zeta, &
4125 & ad_ubar, ad_vbar, ad_zeta)
4128#if defined DISTRIBUTE && \
4129 defined uv_adv && defined uv_c4advection &&
4144 & imins, imaxs, jmins, jmaxs, &
4151 & imins, imaxs, jmins, jmaxs, &
4161 & imins, imaxs, jmins, jmaxs, &
4172#if defined DISTRIBUTE && !defined NESTING
4173# define IR_RANGE IstrUm2-1,Iendp2
4174# define JR_RANGE JstrVm2-1,Jendp2
4175# define IU_RANGE IstrUm1-1,Iendp2
4176# define JU_RANGE Jstrm1-1,Jendp2
4177# define IV_RANGE Istrm1-1,Iendp2
4178# define JV_RANGE JstrVm1-1,Jendp2
4180# define IR_RANGE IstrUm2-1,Iendp2
4181# define JR_RANGE JstrVm2-1,Jendp2
4182# define IU_RANGE IstrUm2,Iendp2
4183# define JU_RANGE JstrVm2-1,Jendp2
4184# define IV_RANGE IstrUm2-1,Iendp2
4185# define JV_RANGE JstrVm2,Jendp2
4190 cff=0.5_r8*om_v(i,j)
4191 cff1=cff*(drhs(i,j)+drhs(i,j-1))
4195 ad_vrhs(i,j)=ad_vrhs(i,j)+cff1*ad_dvom(i,j)
4196 ad_cff1=ad_cff1+vrhs(i,j)*ad_dvom(i,j)
4202 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)+fwd0*ad_vrhs(i,j)
4203 ad_vbar(i,j,kbak)=ad_vbar(i,j,kbak)+fwd1*ad_vrhs(i,j)
4204 ad_vbar(i,j,kold)=ad_vbar(i,j,kold)+fwd2*ad_vrhs(i,j)
4209 ad_drhs(i,j-1)=ad_drhs(i,j-1)+adfac
4210 ad_drhs(i,j )=ad_drhs(i,j )+adfac
4217 cff=0.5_r8*on_u(i,j)
4218 cff1=cff*(drhs(i,j)+drhs(i-1,j))
4222 ad_urhs(i,j)=ad_urhs(i,j)+cff1*ad_duon(i,j)
4223 ad_cff1=ad_cff1+urhs(i,j)*ad_duon(i,j)
4229 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)+fwd0*ad_urhs(i,j)
4230 ad_ubar(i,j,kbak)=ad_ubar(i,j,kbak)+fwd1*ad_urhs(i,j)
4231 ad_ubar(i,j,kold)=ad_ubar(i,j,kold)+fwd2*ad_urhs(i,j)
4236 ad_drhs(i-1,j)=ad_drhs(i-1,j)+adfac
4237 ad_drhs(i ,j)=ad_drhs(i ,j)+adfac
4248 ad_h(i,j)=ad_h(i,j)+ad_drhs(i,j)
4249 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+fwd0*ad_drhs(i,j)
4250 ad_zeta(i,j,kbak)=ad_zeta(i,j,kbak)+fwd1*ad_drhs(i,j)
4251 ad_zeta(i,j,kold)=ad_zeta(i,j,kold)+fwd2*ad_drhs(i,j)
4265 deallocate ( ad_zeta_new )