169 & LBi, UBi, LBj, UBj, UBk, &
170 & IminS, ImaxS, JminS, JmaxS, &
171 & krhs, kstp, knew, &
176 & pmask, rmask, umask, vmask, &
178#ifdef WET_DRY_NOT_YET
179 & pmask_wet, pmask_full, &
180 & rmask_wet, rmask_full, &
181 & umask_wet, umask_full, &
182 & vmask_wet, vmask_full, &
189 & om_u, om_v, on_u, on_v, omn, pm, pn, &
190#if defined CURVGRID && defined UV_ADV
193#if defined UV_VIS2 || defined UV_VIS4
194 & pmon_r, pnom_r, pmon_p, pnom_p, &
195 & om_r, on_r, om_p, on_p, &
197 & visc2_p, visc2_r, &
200 & visc4_p, visc4_r, &
203#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
207 & ad_rustr2d, ad_rvstr2d, &
208 & ad_rulag2d, ad_rvlag2d, &
209 & ubar_stokes, ad_ubar_stokes, &
210 & vbar_stokes, ad_vbar_stokes, &
212#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
213 & eq_tide, ad_eq_tide, &
216 & ad_sustr, ad_svstr, &
217 & ad_bustr, ad_bvstr, &
222# ifdef VAR_RHO_2D_NOT_YET
223 & rhoA, ad_rhoA, rhoS, ad_rhoS, &
225 & ad_DU_avg1, ad_DU_avg2, &
226 & ad_DV_avg1, ad_DV_avg2, &
227 & Zt_avg1, ad_Zt_avg1, &
228 & ad_rufrc, ad_rvfrc, &
232!! & DiaU2wrk, DiaV2wrk, &
233!! & DiaRUbar, DiaRVbar, &
235!! & DiaU2int, DiaV2int, &
236!! & DiaRUfrc, DiaRVfrc, &
240 & ad_ubar_sol, ad_vbar_sol, &
255#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
271#ifdef WET_DRY_NOT_YET
277 integer,
intent(in) :: ng, tile
278 integer,
intent(in) :: LBi, UBi, LBj, UBj, UBk
279 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
280 integer,
intent(in) :: krhs, kstp, knew
282 integer,
intent(in) :: nstp, nnew
287 real(r8),
intent(in) :: pmask(LBi:,LBj:)
288 real(r8),
intent(in) :: rmask(LBi:,LBj:)
289 real(r8),
intent(in) :: umask(LBi:,LBj:)
290 real(r8),
intent(in) :: vmask(LBi:,LBj:)
292 real(r8),
intent(in) :: fomn(LBi:,LBj:)
293 real(r8),
intent(in) :: h(LBi:,LBj:)
294 real(r8),
intent(in) :: om_u(LBi:,LBj:)
295 real(r8),
intent(in) :: om_v(LBi:,LBj:)
296 real(r8),
intent(in) :: on_u(LBi:,LBj:)
297 real(r8),
intent(in) :: on_v(LBi:,LBj:)
298 real(r8),
intent(in) :: omn(LBi:,LBj:)
299 real(r8),
intent(in) :: pm(LBi:,LBj:)
300 real(r8),
intent(in) :: pn(LBi:,LBj:)
301# if defined CURVGRID && defined UV_ADV
302 real(r8),
intent(in) :: dndx(LBi:,LBj:)
303 real(r8),
intent(in) :: dmde(LBi:,LBj:)
305# if defined UV_VIS2 || defined UV_VIS4
306 real(r8),
intent(in) :: pmon_r(LBi:,LBj:)
307 real(r8),
intent(in) :: pnom_r(LBi:,LBj:)
308 real(r8),
intent(in) :: pmon_p(LBi:,LBj:)
309 real(r8),
intent(in) :: pnom_p(LBi:,LBj:)
310 real(r8),
intent(in) :: om_r(LBi:,LBj:)
311 real(r8),
intent(in) :: on_r(LBi:,LBj:)
312 real(r8),
intent(in) :: om_p(LBi:,LBj:)
313 real(r8),
intent(in) :: on_p(LBi:,LBj:)
315 real(r8),
intent(in) :: visc2_p(LBi:,LBj:)
316 real(r8),
intent(in) :: visc2_r(LBi:,LBj:)
319 real(r8),
intent(in) :: visc4_p(LBi:,LBj:)
320 real(r8),
intent(in) :: visc4_r(LBi:,LBj:)
324 real(r8),
intent(in) :: ubar_stokes(LBi:,LBj:)
325 real(r8),
intent(in) :: vbar_stokes(LBi:,LBj:)
327 real(r8),
intent(in) :: rubar(LBi:,LBj:,:)
328 real(r8),
intent(in) :: rvbar(LBi:,LBj:,:)
329 real(r8),
intent(in) :: rzeta(LBi:,LBj:,:)
330 real(r8),
intent(in) :: ubar(LBi:,LBj:,:)
331 real(r8),
intent(in) :: vbar(LBi:,LBj:,:)
332 real(r8),
intent(in) :: zeta(LBi:,LBj:,:)
333# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
334 real(r8),
intent(in) :: eq_tide(LBi:,LBj:)
336# if !defined SOLVE3D && defined ATM_PRESS
337 real(r8),
intent(in) :: Pair(LBi:,LBj:)
340# if defined VAR_RHO_2D_NOT_YET
341 real(r8),
intent(in) :: rhoA(LBi:,LBj:)
342 real(r8),
intent(in) :: rhoS(LBi:,LBj:)
344 real(r8),
intent(in) :: Zt_avg1(LBi:,LBj:)
346 real(r8),
intent(inout) :: ad_DU_avg1(LBi:,LBj:)
347 real(r8),
intent(inout) :: ad_DU_avg2(LBi:,LBj:)
348 real(r8),
intent(inout) :: ad_DV_avg1(LBi:,LBj:)
349 real(r8),
intent(inout) :: ad_DV_avg2(LBi:,LBj:)
350 real(r8),
intent(inout) :: ad_Zt_avg1(LBi:,LBj:)
351# if defined VAR_RHO_2D_NOT_YET
352 real(r8),
intent(inout) :: ad_rhoA(LBi:,LBj:)
353 real(r8),
intent(inout) :: ad_rhoS(LBi:,LBj:)
355 real(r8),
intent(inout) :: ad_rufrc(LBi:,LBj:)
356 real(r8),
intent(inout) :: ad_rvfrc(LBi:,LBj:)
357 real(r8),
intent(inout) :: ad_ru(LBi:,LBj:,0:,:)
358 real(r8),
intent(inout) :: ad_rv(LBi:,LBj:,0:,:)
360 real(r8),
intent(inout) :: ad_sustr(LBi:,LBj:)
361 real(r8),
intent(inout) :: ad_svstr(LBi:,LBj:)
362 real(r8),
intent(inout) :: ad_bustr(LBi:,LBj:)
363 real(r8),
intent(inout) :: ad_bvstr(LBi:,LBj:)
365# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
366 real(r8),
intent(inout) :: ad_bed_thick(LBi:,LBj:,:)
368# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
369 real(r8),
intent(inout) :: ad_eq_tide(LBi:,LBj:)
372 real(r8),
intent(inout) :: ad_rustr2d(LBi:,LBj:)
373 real(r8),
intent(inout) :: ad_rvstr2d(LBi:,LBj:)
374 real(r8),
intent(inout) :: ad_rulag2d(LBi:,LBj:)
375 real(r8),
intent(inout) :: ad_rvlag2d(LBi:,LBj:)
376 real(r8),
intent(inout) :: ad_ubar_stokes(LBi:,LBj:)
377 real(r8),
intent(inout) :: ad_vbar_stokes(LBi:,LBj:)
379# ifdef WET_DRY_NOT_YET
380 real(r8),
intent(inout) :: pmask_full(LBi:,LBj:)
381 real(r8),
intent(inout) :: rmask_full(LBi:,LBj:)
382 real(r8),
intent(inout) :: umask_full(LBi:,LBj:)
383 real(r8),
intent(inout) :: vmask_full(LBi:,LBj:)
385 real(r8),
intent(inout) :: pmask_wet(LBi:,LBj:)
386 real(r8),
intent(inout) :: rmask_wet(LBi:,LBj:)
387 real(r8),
intent(inout) :: umask_wet(LBi:,LBj:)
388 real(r8),
intent(inout) :: vmask_wet(LBi:,LBj:)
390 real(r8),
intent(inout) :: rmask_wet_avg(LBi:,LBj:)
393# ifdef DIAGNOSTICS_UV
405 real(r8),
intent(inout) :: ad_h(LBi:,LBj:)
406 real(r8),
intent(inout) :: ad_rubar(LBi:,LBj:,:)
407 real(r8),
intent(inout) :: ad_rvbar(LBi:,LBj:,:)
408 real(r8),
intent(inout) :: ad_rzeta(LBi:,LBj:,:)
409 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
410 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
411 real(r8),
intent(inout) :: ad_zeta(LBi:,LBj:,:)
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:)
421 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
422 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
423 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
424 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
426 real(r8),
intent(in) :: fomn(LBi:UBi,LBj:UBj)
427 real(r8),
intent(in) :: h(LBi:UBi,LBj:UBj)
428 real(r8),
intent(in) :: om_u(LBi:UBi,LBj:UBj)
429 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
430 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
431 real(r8),
intent(in) :: on_v(LBi:UBi,LBj:UBj)
432 real(r8),
intent(in) :: omn(LBi:UBi,LBj:UBj)
433 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
434 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
435# if defined CURVGRID && defined UV_ADV
436 real(r8),
intent(in) :: dndx(LBi:UBi,LBj:UBj)
437 real(r8),
intent(in) :: dmde(LBi:UBi,LBj:UBj)
439# if defined UV_VIS2 || defined UV_VIS4
440 real(r8),
intent(in) :: pmon_r(LBi:UBi,LBj:UBj)
441 real(r8),
intent(in) :: pnom_r(LBi:UBi,LBj:UBj)
442 real(r8),
intent(in) :: pmon_p(LBi:UBi,LBj:UBj)
443 real(r8),
intent(in) :: pnom_p(LBi:UBi,LBj:UBj)
444 real(r8),
intent(in) :: om_r(LBi:UBi,LBj:UBj)
445 real(r8),
intent(in) :: on_r(LBi:UBi,LBj:UBj)
446 real(r8),
intent(in) :: om_p(LBi:UBi,LBj:UBj)
447 real(r8),
intent(in) :: on_p(LBi:UBi,LBj:UBj)
449 real(r8),
intent(in) :: visc2_p(LBi:UBi,LBj:UBj)
450 real(r8),
intent(in) :: visc2_r(LBi:UBi,LBj:UBj)
453 real(r8),
intent(in) :: visc4_p(LBi:UBi,LBj:UBj)
454 real(r8),
intent(in) :: visc4_r(LBi:UBi,LBj:UBj)
457# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
458 real(r8),
intent(inout) :: ad_bed_thick(LBi:UBi,LBj:UBj,3)
460# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
461 real(r8),
intent(in) :: eq_tide(LBi:UBi,LBj:UBj)
464 real(r8),
intent(in) :: ubar_stokes(LBi:UBi,LBj:UBj)
465 real(r8),
intent(in) :: vbar_stokes(LBi:UBi,LBj:UBj)
467 real(r8),
intent(in) :: rubar(LBi:UBi,LBj:UBj,2)
468 real(r8),
intent(in) :: rvbar(LBi:UBi,LBj:UBj,2)
469 real(r8),
intent(in) :: rzeta(LBi:UBi,LBj:UBj,2)
470 real(r8),
intent(in) :: ubar(LBi:UBi,LBj:UBj,:)
471 real(r8),
intent(in) :: vbar(LBi:UBi,LBj:UBj,:)
472 real(r8),
intent(in) :: zeta(LBi:UBi,LBj:UBj,:)
473# if !defined SOLVE3D && defined ATM_PRESS
474 real(r8),
intent(in) :: Pair(LBi:UBi,LBj:UBj)
477# ifdef VAR_RHO_2D_NOT_YET
478 real(r8),
intent(in) :: rhoA(LBi:UBi,LBj:UBj)
479 real(r8),
intent(in) :: rhoS(LBi:UBi,LBj:UBj)
481 real(r8),
intent(in) :: Zt_avg1(LBi:UBi,LBj:UBj)
483 real(r8),
intent(inout) :: ad_DU_avg1(LBi:UBi,LBj:UBj)
484 real(r8),
intent(inout) :: ad_DU_avg2(LBi:UBi,LBj:UBj)
485 real(r8),
intent(inout) :: ad_DV_avg1(LBi:UBi,LBj:UBj)
486 real(r8),
intent(inout) :: ad_DV_avg2(LBi:UBi,LBj:UBj)
487 real(r8),
intent(inout) :: ad_Zt_avg1(LBi:UBi,LBj:UBj)
488# if defined VAR_RHO_2D_NOT_YET
489 real(r8),
intent(inout) :: ad_rhoA(LBi:UBi,LBj:UBj)
490 real(r8),
intent(inout) :: ad_rhoS(LBi:UBi,LBj:UBj)
492 real(r8),
intent(inout) :: ad_rufrc(LBi:UBi,LBj:UBj)
493 real(r8),
intent(inout) :: ad_rvfrc(LBi:UBi,LBj:UBj)
494 real(r8),
intent(inout) :: ad_ru(LBi:UBi,LBj:UBj,0:UBk,2)
495 real(r8),
intent(inout) :: ad_rv(LBi:UBi,LBj:UBj,0:UBk,2)
497 real(r8),
intent(inout) :: ad_sustr(LBi:UBi,LBj:UBj)
498 real(r8),
intent(inout) :: ad_svstr(LBi:UBi,LBj:UBj)
499 real(r8),
intent(inout) :: ad_bustr(LBi:UBi,LBj:UBj)
500 real(r8),
intent(inout) :: ad_bvstr(LBi:UBi,LBj:UBj)
503 real(r8),
intent(inout) :: ad_rustr2d(LBi:UBi,LBj:UBj)
504 real(r8),
intent(inout) :: ad_rvstr2d(LBi:UBi,LBj:UBj)
505 real(r8),
intent(inout) :: ad_rulag2d(LBi:UBi,LBj:UBj)
506 real(r8),
intent(inout) :: ad_rvlag2d(LBi:UBi,LBj:UBj)
507 real(r8),
intent(inout) :: ad_ubar_stokes(LBi:UBi,LBj:UBj)
508 real(r8),
intent(inout) :: ad_vbar_stokes(LBi:UBi,LBj:UBj)
510# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
511 real(r8),
intent(inout) :: ad_eq_tide(LBi:UBi,LBj:UBj)
513# ifdef WET_DRY_NOT_YET
514 real(r8),
intent(inout) :: pmask_full(LBi:UBi,LBj:UBj)
515 real(r8),
intent(inout) :: rmask_full(LBi:UBi,LBj:UBj)
516 real(r8),
intent(inout) :: umask_full(LBi:UBi,LBj:UBj)
517 real(r8),
intent(inout) :: vmask_full(LBi:UBi,LBj:UBj)
519 real(r8),
intent(inout) :: pmask_wet(LBi:UBi,LBj:UBj)
520 real(r8),
intent(inout) :: rmask_wet(LBi:UBi,LBj:UBj)
521 real(r8),
intent(inout) :: umask_wet(LBi:UBi,LBj:UBj)
522 real(r8),
intent(inout) :: vmask_wet(LBi:UBi,LBj:UBj)
524 real(r8),
intent(inout) :: rmask_wet_avg(LBi:UBi,LBj:UBj)
527# ifdef DIAGNOSTICS_UV
539 real(r8),
intent(inout) :: ad_h(LBi:UBi,LBj:UBj)
540 real(r8),
intent(inout) :: ad_rubar(LBi:UBi,LBj:UBj,2)
541 real(r8),
intent(inout) :: ad_rvbar(LBi:UBi,LBj:UBj,2)
542 real(r8),
intent(inout) :: ad_rzeta(LBi:UBi,LBj:UBj,2)
543 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
544 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
545 real(r8),
intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
547 real(r8),
intent(out) :: ad_ubar_sol(LBi:UBi,LBj:UBj)
548 real(r8),
intent(out) :: ad_vbar_sol(LBi:UBi,LBj:UBj)
549 real(r8),
intent(out) :: ad_zeta_sol(LBi:UBi,LBj:UBj)
555 logical :: CORRECTOR_2D_STEP
557 integer :: i, is, j, ptsk
562 real(r8) :: cff, cff1, cff2, cff3, cff4, cff5, cff6, cff7
563 real(r8) :: fac, fac1, fac2, fac3
564 real(r8) :: ad_cff, ad_cff1, ad_cff2, ad_cff3, ad_cff4
565 real(r8) :: ad_fac, ad_fac1
566 real(r8) :: adfac, adfac1, adfac2, adfac3, adfac4
568 real(r8),
parameter :: IniVal = 0.0_r8
570 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dgrad
571 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dnew
572 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs
573 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs_p
574 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dstp
575 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUon
576 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVom
578 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUSon
579 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVSom
582 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: LapU
583 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: LapV
584 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
585 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
586 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
587 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
589 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: grad
590 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: gzeta
591 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: gzeta2
592#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
593 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: gzetaSA
595 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_ubar
596 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_vbar
597 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_zeta
598 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zeta_new
599 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zwrk
600#ifdef WET_DRY_NOT_YET
612 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Dgrad
613 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Dnew
614 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Drhs
615 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Drhs_p
616 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Dstp
617 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DUon
618 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DVom
620 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DUSon
621 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_DVSom
624 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_LapU
625 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_LapV
627 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFe
628 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFx
629 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFe
630 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFx
631 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_grad
632 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_gzeta
633 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_gzeta2
634#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
635 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_gzetaSA
637 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rhs_ubar
638 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rhs_vbar
639 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_rhs_zeta
640 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_zeta_new
641 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_zwrk
642#ifdef WET_DRY_NOT_YET
646#include "set_bounds.h"
651 WRITE (21,20)
iic(ng), corrector_2d_step, &
652 & kstp, krhs, knew, ptsk
653 20
FORMAT (
' iic = ',i5.5,
' corrector = ',l1,
' kstp = ',i1, &
654 &
' krhs = ',i1,
' knew = ',i1,
' ptsk = ',i1)
673 ad_drhs_p(i,j)=inival
691 ad_gzeta2(i,j)=inival
692#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
693 ad_gzetasa(i,j)=inival
695 ad_rhs_ubar(i,j)=inival
696 ad_rhs_vbar(i,j)=inival
697 ad_rhs_zeta(i,j)=inival
698 ad_zeta_new(i,j)=inival
703#ifdef INITIALIZE_AUTOMATIC
726# if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
754 dnew(i,j)=zeta(i,j,knew)+h(i,j)
755 drhs(i,j)=zeta(i,j,krhs)+h(i,j)
756 dstp(i,j)=zeta(i,j,kstp)+h(i,j)
762 cff1=cff*(drhs(i,j)+drhs(i-1,j))
763 duon(i,j)=ubar(i,j,krhs)*cff1
765 duson(i,j)=ubar_stokes(i,j)*cff1
766 duon(i,j)=duon(i,j)+duson(i,j)
773 cff1=cff*(drhs(i,j)+drhs(i,j-1))
774 dvom(i,j)=vbar(i,j,krhs)*cff1
776 dvsom(i,j)=vbar_stokes(i,j)*cff1
777 dvom(i,j)=dvom(i,j)+dvsom(i,j)
783 & imins, imaxs, jmins, jmaxs, &
786 & imins, imaxs, jmins, jmaxs, &
790 & imins, imaxs, jmins, jmaxs, &
797 DO j=jstrvm2-1,jendp2
798 DO i=istrum2-1,iendp2
799 dnew(i,j)=zeta(i,j,knew)+h(i,j)
800 drhs(i,j)=zeta(i,j,krhs)+h(i,j)
801 dstp(i,j)=zeta(i,j,kstp)+h(i,j)
804 DO j=jstrvm2-1,jendp2
807 cff1=cff*(drhs(i,j)+drhs(i-1,j))
808 duon(i,j)=ubar(i,j,krhs)*cff1
810 duson(i,j)=ubar_stokes(i,j)*cff1
811 duon(i,j)=duon(i,j)+duson(i,j)
816 DO i=istrum2-1,iendp2
818 cff1=cff*(drhs(i,j)+drhs(i,j-1))
819 dvom(i,j)=vbar(i,j,krhs)*cff1
821 dvsom(i,j)=vbar_stokes(i,j)*cff1
822 dvom(i,j)=dvom(i,j)+dvsom(i,j)
834 & lbi, ubi, lbj, ubj, &
835 & imins, imaxs, jmins, jmaxs, &
847 & lbi, ubi, lbj, ubj, &
848 & imins, imaxs, jmins, jmaxs, &
857#if defined UV_VIS2 || defined UV_VIS4
868 drhs_p(i,j)=0.25_r8*(drhs(i,j )+drhs(i-1,j )+ &
869 & drhs(i,j-1)+drhs(i-1,j-1))
900 step_loop :
IF (
iif(ng).le.
nfast(ng))
THEN
915 & lbi, ubi, lbj, ubj, &
918 & ad_ubar(:,:,knew), &
929 & lbi, ubi, lbj, ubj, &
936 & lbi, ubi, lbj, ubj, &
949 IF (((istrr.le.i).and.(i.le.iendr)).and. &
950 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
951 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
952 cff=1.0_r8/(on_u(i,j)* &
953 & 0.5_r8*(zeta(i-1,j,knew)+h(i-1,j)+ &
954 & zeta(i ,j,knew)+h(i ,j)))
959 & cff*ad_ubar(i,j,knew)
961 &
sources(ng)%Qbar(is)*ad_ubar(i,j,knew)
962 ad_ubar(i,j,knew)=0.0_r8
967 adfac=-cff*cff*on_u(i,j)*0.5_r8*ad_cff
968 ad_h(i-1,j)=ad_h(i-1,j)+adfac
969 ad_h(i ,j)=ad_h(i ,j)+adfac
970 ad_zeta(i-1,j,knew)=ad_zeta(i-1,j,knew)+adfac
971 ad_zeta(i ,j,knew)=ad_zeta(i ,j,knew)+adfac
973 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
974 cff=1.0_r8/(om_v(i,j)* &
975 & 0.5_r8*(zeta(i,j-1,knew)+h(i,j-1)+ &
976 & zeta(i,j ,knew)+h(i,j )))
981 & cff*ad_vbar(i,j,knew)
983 &
sources(ng)%Qbar(is)*ad_vbar(i,j,knew)
984 ad_vbar(i,j,knew)=0.0_r8
989 adfac=-cff*cff*om_v(i,j)*0.5_r8*ad_cff
990 ad_h(i,j-1)=ad_h(i,j-1)+adfac
991 ad_h(i,j )=ad_h(i,j )+adfac
992 ad_zeta(i,j-1,knew)=ad_zeta(i,j-1,knew)+adfac
993 ad_zeta(i,j ,knew)=ad_zeta(i,j ,knew)+adfac
1020 & lbi, ubi, lbj, ubj, &
1021 & imins, imaxs, jmins, jmaxs, &
1026 & h, ad_h, om_v, on_u, &
1027 & ubar, vbar, zeta, &
1028 & ad_ubar, ad_vbar, ad_zeta)
1041 & lbi, ubi, lbj, ubj, &
1042 & imins, imaxs, jmins, jmaxs, &
1043 & krhs, kstp, knew, &
1044 & ubar, vbar, zeta, &
1045 & ad_ubar, ad_vbar, ad_zeta)
1054 & lbi, ubi, lbj, ubj, &
1055 & imins, imaxs, jmins, jmaxs, &
1056 & krhs, kstp, knew, &
1057 & ubar, vbar, zeta, &
1058 & ad_ubar, ad_vbar, ad_zeta)
1064#ifdef DIAGNOSTICS_UV
1082 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)+ad_rvbar(i,j,krhs)
1083 ad_rvbar(i,j,krhs)=0.0_r8
1090 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)+ad_rubar(i,j,krhs)
1091 ad_rubar(i,j,krhs)=0.0_r8
1095#ifdef DIAGNOSTICS_UV
1249 ad_ubar_sol(i,j)=ad_ubar(i,j,knew)
1253 ad_vbar_sol(i,j)=ad_vbar(i,j,knew)
1262#ifdef WET_DRY_NOT_YET
1267 IF (first_2d_step)
THEN
1269#ifdef WET_DRY_NOT_YET
1274 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
1275 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
1276#ifdef WET_DRY_NOT_YET
1287 adfac=fac1*ad_rhs_vbar(i,j)
1288 adfac1=adfac*vbar(i,j,knew)
1289 adfac2=adfac*vbar(i,j,kstp)
1290 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)+ &
1291 & (dnew(i,j)+dnew(i,j-1))*adfac
1292 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)- &
1293 & (dstp(i,j)+dstp(i,j-1))*adfac
1294 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac1
1295 ad_dnew(i,j )=ad_dnew(i,j )+adfac1
1296 ad_dstp(i,j-1)=ad_dstp(i,j-1)-adfac2
1297 ad_dstp(i,j )=ad_dstp(i,j )-adfac2
1298 ad_rhs_vbar(i,j)=0.0_r8
1311 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)*vmask(i,j)
1322 adfac=fac*ad_vbar(i,j,knew)
1323 adfac1=adfac*(dstp(i,j)+dstp(i,j-1))
1324 adfac2=adfac*cff*cff1
1325 adfac3=adfac*vbar(i,j,kstp)
1326 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)+adfac1
1327 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)+adfac2
1328 ad_dstp(i,j-1)=ad_dstp(i,j-1)+adfac3
1329 ad_dstp(i,j )=ad_dstp(i,j )+adfac3
1331 & (vbar(i,j,kstp)*(dstp(i,j)+dstp(i,j-1))+ &
1332 & cff*cff1*rhs_vbar(i,j))*ad_vbar(i,j,knew)
1333 ad_vbar(i,j,knew)=0.0_r8
1336 adfac=-fac*fac*ad_fac
1337 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac
1338 ad_dnew(i,j )=ad_dnew(i,j )+adfac
1344 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
1345 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
1346#ifdef WET_DRY_NOT_YET
1357 adfac=fac1*ad_rhs_ubar(i,j)
1358 adfac1=adfac*ubar(i,j,knew)
1359 adfac2=adfac*ubar(i,j,kstp)
1360 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)+ &
1361 & (dnew(i,j)+dnew(i-1,j))*adfac
1362 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)- &
1363 & (dstp(i,j)+dstp(i-1,j))*adfac
1364 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac1
1365 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac1
1366 ad_dstp(i-1,j)=ad_dstp(i-1,j)-adfac2
1367 ad_dstp(i ,j)=ad_dstp(i ,j)-adfac2
1368 ad_rhs_ubar(i,j)=0.0_r8
1381 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)*umask(i,j)
1392 adfac=fac*ad_ubar(i,j,knew)
1393 adfac1=adfac*(dstp(i,j)+dstp(i-1,j))
1394 adfac2=adfac*cff*cff1
1395 adfac3=adfac*ubar(i,j,kstp)
1396 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)+adfac1
1397 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)+adfac2
1398 ad_dstp(i-1,j)=ad_dstp(i-1,j)+adfac3
1399 ad_dstp(i ,j)=ad_dstp(i ,j)+adfac3
1401 & (ubar(i,j,kstp)*(dstp(i,j)+dstp(i-1,j))+ &
1402 & cff*cff1*rhs_ubar(i,j))*ad_ubar(i,j,knew)
1403 ad_ubar(i,j,knew)=0.0_r8
1406 adfac=-fac*fac*ad_fac
1407 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac
1408 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac
1414#ifdef WET_DRY_NOT_YET
1419 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
1420 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
1421#ifdef WET_DRY_NOT_YET
1432 adfac=fac1*ad_rhs_vbar(i,j)
1433 adfac1=adfac*vbar(i,j,knew)
1434 adfac2=adfac*vbar(i,j,kstp)
1435 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)+ &
1436 & (dnew(i,j)+dnew(i,j-1))*adfac
1437 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)- &
1438 & (dstp(i,j)+dstp(i,j-1))*adfac
1439 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac1
1440 ad_dnew(i,j )=ad_dnew(i,j )+adfac1
1441 ad_dstp(i,j-1)=ad_dstp(i,j-1)-adfac2
1442 ad_dstp(i,j )=ad_dstp(i,j )-adfac2
1443 ad_rhs_vbar(i,j)=0.0_r8
1456 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)*vmask(i,j)
1467 adfac=fac*ad_vbar(i,j,knew)
1468 adfac1=adfac*(dstp(i,j)+dstp(i,j-1))
1469 adfac2=adfac*cff*cff1
1470 adfac3=adfac*vbar(i,j,kstp)
1471 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)+adfac1
1472 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)+adfac2
1473 ad_dstp(i,j-1)=ad_dstp(i,j-1)+adfac3
1474 ad_dstp(i,j )=ad_dstp(i,j )+adfac3
1476 & (vbar(i,j,kstp)*(dstp(i,j)+dstp(i,j-1))+ &
1477 & cff*cff1*rhs_vbar(i,j))*ad_vbar(i,j,knew)
1478 ad_vbar(i,j,knew)=0.0_r8
1481 adfac=-fac*fac*ad_fac
1482 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac
1483 ad_dnew(i,j )=ad_dnew(i,j )+adfac
1489 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
1490 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
1491#ifdef WET_DRY_NOT_YET
1502 adfac=fac1*ad_rhs_ubar(i,j)
1503 adfac1=adfac*ubar(i,j,knew)
1504 adfac2=adfac*ubar(i,j,kstp)
1505 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)+ &
1506 & (dnew(i,j)+dnew(i-1,j))*adfac
1507 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)- &
1508 (dstp(i,j)+dstp(i-1,j))*adfac
1509 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac1
1510 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac1
1511 ad_dstp(i-1,j)=ad_dstp(i-1,j)-adfac2
1512 ad_dstp(i ,j)=ad_dstp(i ,j)-adfac2
1513 ad_rhs_ubar(i,j)=0.0_r8
1526 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)*umask(i,j)
1537 adfac=fac*ad_ubar(i,j,knew)
1538 adfac1=adfac*(dstp(i,j)+dstp(i-1,j))
1539 adfac2=adfac*cff*cff1
1540 adfac3=adfac*ubar(i,j,kstp)
1541 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)+adfac1
1542 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)+adfac2
1543 ad_dstp(i-1,j)=ad_dstp(i-1,j)+adfac3
1544 ad_dstp(i ,j)=ad_dstp(i ,j)+adfac3
1546 & (ubar(i,j,kstp)*(dstp(i,j)+dstp(i-1,j))+ &
1547 & cff*cff1*rhs_ubar(i,j))*ad_ubar(i,j,knew)
1548 ad_ubar(i,j,knew)=0.0_r8
1551 adfac=-fac*fac*ad_fac
1552 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac
1553 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac
1557 ELSE IF (corrector_2d_step)
THEN
1558 cff1=0.5_r8*
dtfast(ng)*5.0_r8/12.0_r8
1559 cff2=0.5_r8*
dtfast(ng)*8.0_r8/12.0_r8
1560 cff3=0.5_r8*
dtfast(ng)*1.0_r8/12.0_r8
1561#ifdef WET_DRY_NOT_YET
1566 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
1567 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
1568#ifdef WET_DRY_NOT_YET
1581 adfac=cff4*ad_rhs_vbar(i,j)
1582 adfac1=adfac*fac1*vbar(i,j,knew)
1583 adfac2=adfac*fac1*vbar(i,j,kstp)
1584 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)+ &
1585 & (dnew(i,j)+dnew(i,j-1))*adfac
1586 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)- &
1587 & (dstp(i,j)+dstp(i,j-1))*adfac
1588 ad_rvbar(i,j,kstp)=ad_rvbar(i,j,kstp)-cff2*adfac
1589 ad_rvbar(i,j,ptsk)=ad_rvbar(i,j,ptsk)+cff3*adfac
1590 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac1
1591 ad_dnew(i,j )=ad_dnew(i,j )+adfac1
1592 ad_dstp(i,j-1)=ad_dstp(i,j-1)-adfac2
1593 ad_dstp(i,j )=ad_dstp(i,j )-adfac2
1594 ad_rhs_vbar(i,j)=0.0_r8
1607 ad_vbar(i,j,knew)=ad_vbar(i,j,knew)*vmask(i,j)
1622 adfac=fac*ad_vbar(i,j,knew)
1623 adfac1=adfac*(dstp(i,j)+dstp(i,j-1))
1625 adfac3=adfac*vbar(i,j,kstp)
1626 ad_vbar(i,j,kstp)=ad_vbar(i,j,kstp)+adfac1
1627 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)+cff1*adfac2
1628 ad_rvbar(i,j,kstp)=ad_rvbar(i,j,kstp)+cff2*adfac2
1629 ad_rvbar(i,j,ptsk)=-cff3*adfac2
1630 ad_dstp(i,j-1)=ad_dstp(i,j-1)+adfac3
1631 ad_dstp(i,j )=ad_dstp(i,j )+adfac3
1633 & (vbar(i,j,kstp)*(dstp(i,j)+dstp(i,j-1))+ &
1634 & cff*(cff1*rhs_vbar(i,j)+ &
1635 & cff2*rvbar(i,j,kstp)- &
1636 & cff3*rvbar(i,j,ptsk)))*ad_vbar(i,j,knew)
1637 ad_vbar(i,j,knew)=0.0_r8
1640 adfac=-fac*fac*ad_fac
1641 ad_dnew(i,j-1)=ad_dnew(i,j-1)+adfac
1642 ad_dnew(i,j )=ad_dnew(i,j )+adfac
1648 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
1649 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
1650#ifdef WET_DRY_NOT_YET
1663 adfac=cff4*ad_rhs_ubar(i,j)
1664 adfac1=adfac*fac1*ubar(i,j,knew)
1665 adfac2=adfac*fac1*ubar(i,j,kstp)
1666 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)+ &
1667 & (dnew(i,j)+dnew(i-1,j))*adfac
1668 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)- &
1669 & (dstp(i,j)+dstp(i-1,j))*adfac
1670 ad_rubar(i,j,kstp)=ad_rubar(i,j,kstp)-cff2*adfac
1671 ad_rubar(i,j,ptsk)=ad_rubar(i,j,ptsk)+cff3*adfac
1672 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac1
1673 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac1
1674 ad_dstp(i-1,j)=ad_dstp(i-1,j)-adfac2
1675 ad_dstp(i ,j)=ad_dstp(i ,j)-adfac2
1676 ad_rhs_ubar(i,j)=0.0_r8
1689 ad_ubar(i,j,knew)=ad_ubar(i,j,knew)*umask(i,j)
1704 adfac=fac*ad_ubar(i,j,knew)
1705 adfac1=adfac*(dstp(i,j)+dstp(i-1,j))
1707 adfac3=adfac*ubar(i,j,kstp)
1708 ad_ubar(i,j,kstp)=ad_ubar(i,j,kstp)+adfac1
1709 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)+cff1*adfac2
1710 ad_rubar(i,j,kstp)=ad_rubar(i,j,kstp)+cff2*adfac2
1711 ad_rubar(i,j,ptsk)=-cff3*adfac2
1712 ad_dstp(i-1,j)=ad_dstp(i-1,j)+adfac3
1713 ad_dstp(i ,j)=ad_dstp(i ,j)+adfac3
1715 & (ubar(i,j,kstp)*(dstp(i,j)+dstp(i-1,j))+ &
1716 & cff*(cff1*rhs_ubar(i,j)+ &
1717 & cff2*rubar(i,j,kstp)- &
1718 & cff3*rubar(i,j,ptsk)))*ad_ubar(i,j,knew)
1719 ad_ubar(i,j,knew)=0.0_r8
1722 adfac=-fac*fac*ad_fac
1723 ad_dnew(i-1,j)=ad_dnew(i-1,j)+adfac
1724 ad_dnew(i ,j)=ad_dnew(i ,j)+adfac
1736 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+ad_dstp(i,j)
1737 ad_h(i,j)=ad_h(i,j)+ad_dstp(i,j)
1769# ifdef DIAGNOSTICS_UV
1784 ad_rvfrc(i,j)=ad_rvfrc(i,j)+ad_rv(i,j,0,nstp)
1785 ad_rv(i,j,0,nstp)=0.0_r8
1788 ad_rvfrc(i,j)=ad_rvfrc(i,j)+ad_rhs_vbar(i,j)
1791 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)-ad_rvfrc(i,j)
1796# ifdef DIAGNOSTICS_UV
1811 ad_rufrc(i,j)=ad_rufrc(i,j)+ad_ru(i,j,0,nstp)
1812 ad_ru(i,j,0,nstp)=0.0_r8
1815 ad_rufrc(i,j)=ad_rufrc(i,j)+ad_rhs_ubar(i,j)
1818 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)-ad_rufrc(i,j)
1824# ifdef DIAGNOSTICS_UV
1842 ad_rvfrc(i,j)=ad_rvfrc(i,j)+ad_rv(i,j,0,nstp)
1843 ad_rv(i,j,0,nstp)=0.0_r8
1848 ad_rvfrc(i,j)=ad_rvfrc(i,j)+1.5_r8*ad_rhs_vbar(i,j)
1849 ad_rv(i,j,0,nnew)=ad_rv(i,j,0,nnew)- &
1850 & 0.5_r8*ad_rhs_vbar(i,j)
1853 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)-ad_rvfrc(i,j)
1858# ifdef DIAGNOSTICS_UV
1876 ad_rufrc(i,j)=ad_rufrc(i,j)+ad_ru(i,j,0,nstp)
1877 ad_ru(i,j,0,nstp)=0.0_r8
1882 ad_rufrc(i,j)=ad_rufrc(i,j)+1.5_r8*ad_rhs_ubar(i,j)
1883 ad_ru(i,j,0,nnew)=ad_ru(i,j,0,nnew)- &
1884 & 0.5_r8*ad_rhs_ubar(i,j)
1887 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)-ad_rufrc(i,j)
1891 cff1=23.0_r8/12.0_r8
1892 cff2=16.0_r8/12.0_r8
1893 cff3= 5.0_r8/12.0_r8
1896# ifdef DIAGNOSTICS_UV
1917 ad_rvfrc(i,j)=ad_rvfrc(i,j)+ad_rv(i,j,0,nstp)
1918 ad_rv(i,j,0,nstp)=0.0_r8
1924 ad_rvfrc(i,j)=ad_rvfrc(i,j)+cff1*ad_rhs_vbar(i,j)
1925 ad_rv(i,j,0,nnew)=ad_rv(i,j,0,nnew)- &
1926 & cff2*ad_rhs_vbar(i,j)
1927 ad_rv(i,j,0,nstp)=ad_rv(i,j,0,nstp)+ &
1928 & cff3*ad_rhs_vbar(i,j)
1931 ad_rhs_vbar(i,j)=ad_rhs_vbar(i,j)-ad_rvfrc(i,j)
1936# ifdef DIAGNOSTICS_UV
1957 ad_rufrc(i,j)=ad_rufrc(i,j)+ad_ru(i,j,0,nstp)
1958 ad_ru(i,j,0,nstp)=0.0_r8
1964 ad_rufrc(i,j)=ad_rufrc(i,j)+cff1*ad_rhs_ubar(i,j)
1965 ad_ru(i,j,0,nnew)=ad_ru(i,j,0,nnew)- &
1966 & cff2*ad_rhs_ubar(i,j)
1967 ad_ru(i,j,0,nstp)=ad_ru(i,j,0,nstp)+ &
1968 & cff3*ad_rhs_ubar(i,j)
1971 ad_rhs_ubar(i,j)=ad_rhs_ubar(i,j)-ad_rufrc(i,j)
1978# ifdef DIAGNOSTICS_UV
1988 ad_rvfrc(i,j)=ad_rvfrc(i,j)+ad_rhs_vbar(i,j)
1993# ifdef DIAGNOSTICS_UV
2003 ad_rufrc(i,j)=ad_rufrc(i,j)+ad_rhs_ubar(i,j)
2015# ifdef DIAGNOSTICS_UV
2020 ad_fac=ad_fac+ad_rhs_ubar(i,j)
2023 ad_sustr(i,j)=ad_sustr(i,j)+om_u(i,j)*on_u(i,j)*ad_fac
2029# ifdef DIAGNOSTICS_UV
2034 ad_fac=ad_fac+ad_rhs_vbar(i,j)
2037 ad_svstr(i,j)=ad_svstr(i,j)+om_v(i,j)*on_v(i,j)*ad_fac
2050 cff=0.25_r8*(
clima(ng)%M2nudgcof(i,j-1)+ &
2051 &
clima(ng)%M2nudgcof(i,j ))* &
2052 & om_v(i,j)*on_v(i,j)
2060 adfac=cff*ad_rhs_vbar(i,j)
2061 adfac1=adfac*(drhs(i,j-1)+drhs(i,j))
2062 adfac2=adfac*(
clima(ng)%vbarclm(i,j)-vbar(i,j,krhs))
2063 ad_vbar(i,j,krhs)=ad_vbar(i,j,krhs)-adfac1
2064 ad_drhs(i,j-1)=ad_drhs(i,j-1)+adfac2
2065 ad_drhs(i,j )=ad_drhs(i,j )+adfac2
2070 cff=0.25_r8*(
clima(ng)%M2nudgcof(i-1,j)+ &
2071 &
clima(ng)%M2nudgcof(i ,j))* &
2072 & om_u(i,j)*on_u(i,j)
2080 adfac=cff*ad_rhs_ubar(i,j)
2081 adfac1=adfac*(drhs(i-1,j)+drhs(i,j))
2082 adfac2=adfac*(
clima(ng)%ubarclm(i,j)-ubar(i,j,krhs))
2083 ad_ubar(i,j,krhs)=ad_ubar(i,j,krhs)-adfac1
2084 ad_drhs(i-1,j)=ad_drhs(i-1,j)+adfac2
2085 ad_drhs(i ,j)=ad_drhs(i ,j)+adfac2
2098# ifdef DIAGNOSTICS_UV
2103 ad_fac=ad_fac-ad_rhs_vbar(i,j)
2106 ad_bvstr(i,j)=ad_bvstr(i,j)+om_v(i,j)*on_v(i,j)*ad_fac
2112# ifdef DIAGNOSTICS_UV
2117 ad_fac=ad_fac-ad_rhs_ubar(i,j)
2120 ad_bustr(i,j)=ad_bustr(i,j)+om_u(i,j)*on_u(i,j)*ad_fac
2125# ifdef DIAGNOSTICS_UV
2141#if defined WEC_MELLOR && \
2150# ifdef DIAGNOSTICS_UV
2156 ad_cff2=ad_cff2-ad_rhs_vbar(i,j)
2157 ad_cff1=ad_cff1-ad_rhs_vbar(i,j)
2161 ad_rvlag2d(i,j)=ad_rvlag2d(i,j)+ad_cff2
2165 ad_rvstr2d(i,j)=ad_rvstr2d(i,j)+ &
2166 & om_v(i,j)*on_v(i,j)*ad_cff1
2172# ifdef DIAGNOSTICS_UV
2178 ad_cff2=ad_cff2-ad_rhs_ubar(i,j)
2179 ad_cff1=ad_cff1-ad_rhs_ubar(i,j)
2183 ad_rulag2d(i,j)=ad_rulag2d(i,j)+ad_cff2
2187 ad_rustr2d(i,j)=ad_rustr2d(i,j)+ &
2188 & om_u(i,j)*on_u(i,j)*ad_cff1
2193#if defined UV_VIS2 || defined UV_VIS4
2206 drhs_p(i,j)=0.25_r8*(drhs(i,j )+drhs(i-1,j )+ &
2207 & drhs(i,j-1)+drhs(i-1,j-1))
2223 cff=visc4_r(i,j)*0.5_r8* &
2225 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,krhs)- &
2226 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,krhs))- &
2228 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,krhs)- &
2229 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,krhs)))
2230 ufx(i,j)=on_r(i,j)*on_r(i,j)*cff
2231 vfe(i,j)=om_r(i,j)*om_r(i,j)*cff
2236 cff=visc4_p(i,j)*0.5_r8* &
2238 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,krhs)- &
2239 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,krhs))+ &
2241 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,krhs)- &
2242 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,krhs)))
2246 ufe(i,j)=om_p(i,j)*om_p(i,j)*cff
2247 vfx(i,j)=on_p(i,j)*on_p(i,j)*cff
2255 lapu(i,j)=0.125_r8* &
2256 & (pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))* &
2257 & ((pn(i-1,j)+pn(i,j))* &
2258 & (ufx(i,j )-ufx(i-1,j))+ &
2259 & (pm(i-1,j)+pm(i,j))* &
2260 & (ufe(i,j+1)-ufe(i ,j)))
2265 lapv(i,j)=0.125_r8* &
2266 & (pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))* &
2267 & ((pn(i,j-1)+pn(i,j))* &
2268 & (vfx(i+1,j)-vfx(i,j ))- &
2269 & (pm(i,j-1)+pm(i,j))* &
2270 & (vfe(i ,j)-vfe(i,j-1)))
2279 IF (
domain(ng)%Western_Edge(tile))
THEN
2282 lapu(istru-1,j)=0.0_r8
2286 lapu(istru-1,j)=lapu(istru,j)
2291 lapv(istr-1,j)=
gamma2(ng)*lapv(istr,j)
2295 lapv(istr-1,j)=0.0_r8
2302 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2305 lapu(iend+1,j)=0.0_r8
2309 lapu(iend+1,j)=lapu(iend,j)
2314 lapv(iend+1,j)=
gamma2(ng)*lapv(iend,j)
2318 lapv(iend+1,j)=0.0_r8
2325 IF (
domain(ng)%Southern_Edge(tile))
THEN
2328 lapu(i,jstr-1)=
gamma2(ng)*lapu(i,jstr)
2332 lapu(i,jstr-1)=0.0_r8
2337 lapv(i,jstrv-1)=0.0_r8
2341 lapv(i,jstrv-1)=lapv(i,jstrv)
2348 IF (
domain(ng)%Northern_Edge(tile))
THEN
2351 lapu(i,jend+1)=
gamma2(ng)*lapu(i,jend)
2355 lapu(i,jend+1)=0.0_r8
2360 lapv(i,jend+1)=0.0_r8
2364 lapv(i,jend+1)=lapv(i,jend)
2372 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
2373 lapu(istr ,jstr-1)=0.5_r8*(lapu(istr+1,jstr-1)+ &
2374 & lapu(istr ,jstr ))
2375 lapv(istr-1,jstr )=0.5_r8*(lapv(istr-1,jstr+1)+ &
2376 & lapv(istr ,jstr ))
2382 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
2383 lapu(iend+1,jstr-1)=0.5_r8*(lapu(iend ,jstr-1)+ &
2384 & lapu(iend+1,jstr ))
2385 lapv(iend+1,jstr )=0.5_r8*(lapv(iend ,jstr )+ &
2386 & lapv(iend+1,jstr+1))
2392 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
2393 lapu(istr ,jend+1)=0.5_r8*(lapu(istr+1,jend+1)+ &
2394 & lapu(istr ,jend ))
2395 lapv(istr-1,jend+1)=0.5_r8*(lapv(istr ,jend+1)+ &
2396 & lapv(istr-1,jend ))
2402 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
2403 lapu(iend+1,jend+1)=0.5_r8*(lapu(iend ,jend+1)+ &
2404 & lapu(iend+1,jend ))
2405 lapv(iend+1,jend+1)=0.5_r8*(lapv(iend ,jend+1)+ &
2406 & lapv(iend+1,jend ))
2414# if defined DIAGNOSTICS_UV
2421 ad_fac=ad_fac+ad_rhs_vbar(i,j)
2424 ad_cff1=ad_cff1+ad_fac
2425 ad_cff2=ad_cff2-ad_fac
2430 adfac=0.5_r8*(pm(i,j-1)+pm(i,j))*ad_cff2
2431 ad_vfe(i,j-1)=ad_vfe(i,j-1)-adfac
2432 ad_vfe(i,j )=ad_vfe(i,j )+adfac
2437 adfac=0.5_r8*(pn(i,j-1)+pn(i,j))*ad_cff1
2438 ad_vfx(i ,j)=ad_vfx(i ,j)-adfac
2439 ad_vfx(i+1,j)=ad_vfx(i+1,j)+adfac
2445# if defined DIAGNOSTICS_UV
2452 ad_fac=ad_fac+ad_rhs_ubar(i,j)
2455 ad_cff1=ad_cff1+ad_fac
2456 ad_cff2=ad_cff2+ad_fac
2461 adfac=0.5_r8*(pm(i-1,j)+pm(i,j))*ad_cff2
2462 ufe(i,j )=ufe(i,j )-adfac
2463 ufe(i,j+1)=ufe(i,j+1)+adfac
2468 adfac=0.5_r8*(pn(i-1,j)+pn(i,j))*ad_cff1
2469 ad_ufx(i-1,j)=ad_ufx(i-1,j)-adfac
2470 ad_ufx(i,j )=ad_ufx(i,j )+adfac
2484 & on_p(i,j)*on_p(i,j)*ad_vfx(i,j)+ &
2485 & om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
2491 ad_cff=ad_cff*pmask(i,j)
2509 adfac=visc4_p(i,j)*0.5_r8*ad_cff
2510 adfac1=adfac*drhs_p(i,j)*pmon_p(i,j)
2511 adfac2=adfac*drhs_p(i,j)*pnom_p(i,j)
2512 ad_drhs_p(i,j)=ad_drhs_p(i,j)+ &
2514 & ((pn(i ,j-1)+pn(i ,j))*lapv(i ,j)- &
2515 & (pn(i-1,j-1)+pn(i-1,j))*lapv(i-1,j))+ &
2517 & ((pm(i-1,j )+pm(i,j ))*lapu(i,j )- &
2518 & (pm(i-1,j-1)+pm(i,j-1))*lapu(i,j-1)))* &
2520 ad_lapv(i ,j)=ad_lapv(i ,j)+ &
2521 & (pn(i ,j-1)+pn(i ,j))*adfac1
2522 ad_lapv(i-1,j)=ad_lapv(i-1,j)- &
2523 & (pn(i-1,j-1)+pn(i-1,j))*adfac1
2524 ad_lapu(i,j )=ad_lapu(i,j )+ &
2525 & (pm(i-1,j )+pm(i,j ))*adfac2
2526 ad_lapu(i,j-1)=ad_lapu(i,j-1)- &
2527 & (pm(i-1,j-1)+pm(i,j-1))*adfac2
2537 & om_r(i,j)*om_r(i,j)*ad_vfe(i,j)+ &
2538 & on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
2557 adfac=visc4_r(i,j)*0.5_r8*ad_cff
2558 adfac1=adfac*drhs(i,j)*pmon_r(i,j)
2559 adfac2=adfac*drhs(i,j)*pnom_r(i,j)
2560 ad_drhs(i,j)=ad_drhs(i,j)+ &
2562 & ((pn(i ,j)+pn(i+1,j))*lapu(i+1,j)- &
2563 & (pn(i-1,j)+pn(i ,j))*lapu(i ,j))- &
2565 & ((pm(i,j )+pm(i,j+1))*lapv(i,j+1)- &
2566 & (pm(i,j-1)+pm(i,j ))*lapv(i,j )))*adfac
2567 ad_lapu(i+1,j)=ad_lapu(i+1,j)+ &
2568 & (pn(i ,j)+pn(i+1,j))*adfac1
2569 ad_lapu(i ,j)=ad_lapu(i ,j)- &
2570 & (pn(i-1,j)+pn(i ,j))*adfac1
2571 ad_lapv(i,j+1)=ad_lapv(i,j+1)- &
2572 & (pm(i,j )+pm(i,j+1))*adfac2
2573 ad_lapv(i,j )=ad_lapv(i,j )+ &
2574 & (pm(i,j-1)+pm(i,j ))*adfac2
2585 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
2589 adfac=0.5_r8*ad_lapv(iend+1,jend+1)
2590 ad_lapv(iend+1,jend )=ad_lapv(iend+1,jend )+adfac
2591 ad_lapv(iend ,jend+1)=ad_lapv(iend ,jend+1)+adfac
2592 ad_lapv(iend+1,jend+1)=0.0_r8
2596 adfac=0.5_r8*ad_lapu(iend+1,jend+1)
2597 ad_lapu(iend+1,jend )=ad_lapu(iend+1,jend )+adfac
2598 ad_lapu(iend ,jend+1)=ad_lapu(iend ,jend+1)+adfac
2599 ad_lapu(iend+1,jend+1)=0.0_r8
2605 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
2609 adfac=0.5_r8*ad_lapv(istr-1,jend+1)
2610 ad_lapv(istr-1,jend )=ad_lapv(istr-1,jend )+adfac
2611 ad_lapv(istr ,jend+1)=ad_lapv(istr ,jend+1)+adfac
2612 ad_lapv(istr-1,jend+1)=0.0_r8
2616 adfac=0.5_r8*ad_lapu(istr ,jend+1)
2617 ad_lapu(istr ,jend )=ad_lapu(istr ,jend )+adfac
2618 ad_lapu(istr+1,jend+1)=ad_lapu(istr+1,jend+1)+adfac
2619 ad_lapu(istr ,jend+1)=0.0_r8
2625 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
2629 adfac=0.5_r8*ad_lapv(iend+1,jstr )
2630 ad_lapv(iend ,jstr )=ad_lapv(iend ,jstr )+adfac
2631 ad_lapv(iend+1,jstr+1)=ad_lapv(iend+1,jstr+1)+adfac
2632 ad_lapv(iend+1,jstr )=0.0_r8
2636 adfac=0.5_r8*ad_lapu(iend+1,jstr-1)
2637 ad_lapu(iend ,jstr-1)=ad_lapu(iend ,jstr-1)+adfac
2638 ad_lapu(iend+1,jstr )=ad_lapu(iend+1,jstr )+adfac
2639 ad_lapu(iend+1,jstr-1)=0.0_r8
2645 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
2649 adfac=0.5_r8*ad_lapv(istr-1,jstr )
2650 ad_lapv(istr ,jstr )=ad_lapv(istr ,jstr )+adfac
2651 ad_lapv(istr-1,jstr+1)=ad_lapv(istr-1,jstr+1)+adfac
2652 ad_lapv(istr-1,jstr )=0.0_r8
2656 adfac=0.5_r8*ad_lapu(istr ,jstr-1)
2657 ad_lapu(istr+1,jstr-1)=ad_lapu(istr+1,jstr-1)+adfac
2658 ad_lapu(istr ,jstr )=ad_lapu(istr ,jstr )+adfac
2659 ad_lapu(istr ,jstr-1)=0.0_r8
2664 IF (
domain(ng)%Northern_Edge(tile))
THEN
2669 ad_lapv(i,jend+1)=0.0_r8
2675 ad_lapv(i,jend)=ad_lapv(i,jend)+ad_lapv(i,jend+1)
2676 ad_lapv(i,jend+1)=0.0_r8
2683 ad_lapu(i,jend)=ad_lapu(i,jend)+ &
2684 &
gamma2(ng)*ad_lapu(i,jend+1)
2685 ad_lapu(i,jend+1)=0.0_r8
2691 ad_lapu(i,jend+1)=0.0_r8
2698 IF (
domain(ng)%Southern_Edge(tile))
THEN
2703 ad_lapv(i,jstrv-1)=0.0_r8
2709 ad_lapv(i,jstrv)=ad_lapv(i,jstrv)+ad_lapv(i,jstrv-1)
2710 ad_lapv(i,jstrv-1)=0.0_r8
2717 ad_lapu(i,jstr)=ad_lapu(i,jstr)+ &
2718 &
gamma2(ng)*ad_lapu(i,jstr-1)
2719 ad_lapu(i,jstr-1)=0.0_r8
2725 ad_lapu(i,jstr-1)=0.0_r8
2732 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2737 ad_lapv(iend,j)=ad_lapv(iend,j)+ &
2738 &
gamma2(ng)*ad_lapv(iend+1,j)
2739 ad_lapv(iend+1,j)=0.0_r8
2745 ad_lapv(iend+1,j)=0.0_r8
2752 ad_lapu(iend+1,j)=0.0_r8
2758 ad_lapu(iend,j)=ad_lapu(iend,j)+ad_lapu(iend+1,j)
2759 ad_lapu(iend+1,j)=0.0_r8
2766 IF (
domain(ng)%Western_Edge(tile))
THEN
2771 ad_lapv(istr,j)=ad_lapv(istr,j)+ &
2772 &
gamma2(ng)*ad_lapv(istr-1,j)
2773 ad_lapv(istr-1,j)=0.0_r8
2779 ad_lapv(istr-1,j)=0.0_r8
2786 ad_lapu(istru-1,j)=0.0_r8
2792 ad_lapu(istru,j)=ad_lapu(istru,j)+ad_lapu(istru-1,j)
2793 ad_lapu(istru-1,j)=0.0_r8
2810 adfac=0.125_r8*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))* &
2812 adfac1=adfac*(pn(i,j-1)+pn(i,j))
2813 adfac2=adfac*(pm(i,j-1)+pm(i,j))
2814 ad_vfx(i ,j)=ad_vfx(i ,j)-adfac1
2815 ad_vfx(i+1,j)=ad_vfx(i+1,j)+adfac1
2816 ad_vfe(i,j )=ad_vfe(i,j )-adfac2
2817 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac2
2831 adfac=0.125_r8*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))* &
2833 adfac1=adfac*(pn(i-1,j)+pn(i,j))
2834 adfac2=adfac*(pm(i-1,j)+pm(i,j))
2835 ad_ufx(i-1,j)=ad_ufx(i-1,j)-adfac1
2836 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac1
2837 ad_ufe(i,j+1)=ad_ufe(i,j+1)+adfac2
2838 ad_ufe(i,j )=ad_ufe(i,j )-adfac2
2856 & on_p(i,j)*on_p(i,j)*ad_vfx(i,j)+ &
2857 & om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
2863 ad_cff=ad_cff*pmask(i,j)
2873 adfac=visc4_p(i,j)*0.5_r8*ad_cff
2874 adfac1=adfac*pmon_p(i,j)
2875 adfac2=adfac*pnom_p(i,j)
2876 ad_vbar(i-1,j,krhs)=ad_vbar(i-1,j,krhs)- &
2877 & (pn(i-1,j-1)+pn(i-1,j))*adfac1
2878 ad_vbar(i ,j,krhs)=ad_vbar(i ,j,krhs)+ &
2879 & (pn(i ,j-1)+pn(i ,j))*adfac1
2880 ad_ubar(i,j-1,krhs)=ad_ubar(i,j-1,krhs)- &
2881 & (pm(i-1,j-1)+pm(i,j-1))*adfac2
2882 ad_ubar(i,j ,krhs)=ad_ubar(i,j ,krhs)+ &
2883 & (pm(i-1,j )+pm(i,j ))*adfac2
2893 & om_r(i,j)*om_r(i,j)*ad_vfe(i,j)+ &
2894 & on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
2905 adfac=visc4_r(i,j)*0.5_r8*ad_cff
2906 adfac1=adfac*pmon_r(i,j)
2907 adfac2=adfac*pnom_r(i,j)
2908 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+ &
2909 & (pn(i ,j)+pn(i+1,j))*adfac1
2910 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)- &
2911 & (pn(i-1,j)+pn(i ,j))*adfac1
2912 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)- &
2913 & (pm(i,j )+pm(i,j+1))*adfac2
2914 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+ &
2915 & (pm(i,j-1)+pm(i,j ))*adfac2
2930# if defined DIAGNOSTICS_UV
2937 ad_fac=ad_fac+ad_rhs_vbar(i,j)
2940 ad_cff1=ad_cff1+ad_fac
2941 ad_cff2=ad_cff2-ad_fac
2946 adfac=0.5_r8*(pm(i,j-1)+pm(i,j))*ad_cff2
2947 ad_vfe(i,j-1)=ad_vfe(i,j-1)-adfac
2948 ad_vfe(i ,j)=ad_vfe(i ,j)+adfac
2953 adfac=0.5_r8*(pn(i,j-1)+pn(i,j))*ad_cff1
2954 ad_vfx(i ,j)=ad_vfx(i ,j)-adfac
2955 ad_vfx(i+1,j)=ad_vfx(i+1,j)+adfac
2961# if defined DIAGNOSTICS_UV
2968 ad_fac=ad_fac+ad_rhs_ubar(i,j)
2971 ad_cff1=ad_cff1+ad_fac
2972 ad_cff2=ad_cff2+ad_fac
2977 adfac=0.5_r8*(pm(i-1,j)+pm(i,j))*ad_cff2
2978 ad_ufe(i,j )=ad_ufe(i,j )-adfac
2979 ad_ufe(i,j+1)=ad_ufe(i,j+1)+adfac
2984 adfac=0.5_r8*(pn(i-1,j)+pn(i,j))*ad_cff1
2985 ad_ufx(i-1,j)=ad_ufx(i-1,j)-adfac
2986 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
3000 & on_p(i,j)*on_p(i,j)*ad_vfx(i,j)+ &
3001 & om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
3007 ad_cff=ad_cff*pmask(i,j)
3025 adfac=visc2_p(i,j)*0.5_r8*ad_cff
3026 adfac1=adfac*drhs_p(i,j)
3027 adfac2=adfac1*pmon_p(i,j)
3028 adfac3=adfac1*pnom_p(i,j)
3029 ad_drhs_p(i,j)=ad_drhs_p(i,j)+ &
3031 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,krhs)- &
3032 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,krhs))+ &
3034 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,krhs)- &
3035 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,krhs)))*&
3037 ad_vbar(i-1,j,krhs)=ad_vbar(i-1,j,krhs)- &
3038 & (pn(i-1,j-1)+pn(i-1,j))*adfac2
3039 ad_vbar(i ,j,krhs)=ad_vbar(i ,j,krhs)+ &
3040 & (pn(i ,j-1)+pn(i ,j))*adfac2
3041 ad_ubar(i,j-1,krhs)=ad_ubar(i,j-1,krhs)- &
3042 & (pm(i-1,j-1)+pm(i,j-1))*adfac3
3043 ad_ubar(i,j ,krhs)=ad_ubar(i,j ,krhs)+ &
3044 & (pm(i-1,j )+pm(i,j ))*adfac3
3054 & om_r(i,j)*om_r(i,j)*ad_vfe(i,j)+ &
3055 & on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
3074 adfac=visc2_r(i,j)*0.5_r8*ad_cff
3075 adfac1=adfac*drhs(i,j)
3076 adfac2=adfac1*pmon_r(i,j)
3077 adfac3=adfac1*pnom_r(i,j)
3078 ad_drhs(i,j)=ad_drhs(i,j)+ &
3080 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,krhs)- &
3081 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,krhs))- &
3083 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,krhs)- &
3084 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,krhs)))* &
3086 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)- &
3087 & (pn(i-1,j)+pn(i ,j))*adfac2
3088 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+ &
3089 & (pn(i ,j)+pn(i+1,j))*adfac2
3090 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+ &
3091 & (pm(i,j-1)+pm(i,j ))*adfac3
3092 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)- &
3093 & (pm(i,j )+pm(i,j+1))*adfac3
3098#if defined UV_VIS2 || defined UV_VIS4
3111 drhs_p(i,j)=0.25_r8*(drhs(i,j )+drhs(i-1,j )+ &
3112 & drhs(i,j-1)+drhs(i-1,j-1))
3116 adfac=0.25_r8*ad_drhs_p(i,j)
3117 ad_drhs(i-1,j )=ad_drhs(i-1,j )+adfac
3118 ad_drhs(i ,j )=ad_drhs(i ,j )+adfac
3119 ad_drhs(i-1,j-1)=ad_drhs(i-1,j-1)+adfac
3120 ad_drhs(i ,j-1)=ad_drhs(i ,j-1)+adfac
3121 ad_drhs_p(i,j)=0.0_r8
3125#if defined CURVGRID && defined UV_ADV
3133# if defined DIAGNOSTICS_UV
3141 ad_fac1=ad_fac1-ad_rhs_vbar(i,j)
3144 adfac=0.5_r8*ad_fac1
3145 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac
3146 ad_vfe(i,j )=ad_vfe(i,j )+adfac
3152# if defined DIAGNOSTICS_UV
3160 ad_fac1=ad_fac1+ad_rhs_ubar(i,j)
3163 adfac=0.5_r8*ad_fac1
3164 ad_ufx(i-1,j)=ad_ufx(i-1,j)+adfac
3165 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
3171 cff1=0.5_r8*(vbar(i,j ,krhs)+ &
3173 & vbar_stokes(i,j )+ &
3174 & vbar_stokes(i,j+1)+ &
3177 cff2=0.5_r8*(ubar(i ,j,krhs)+ &
3179 & ubar_stokes(i ,j)+ &
3180 & ubar_stokes(i+1,j)+ &
3185 cff=drhs(i,j)*(cff3-cff4)
3186# if defined DIAGNOSTICS_UV
3195 & cff1*ad_ufx(i,j)+ &
3197 ad_cff1=ad_cff1+cff*ad_ufx(i,j)
3198 ad_cff2=ad_cff2+cff*ad_vfe(i,j)
3204 adfac=drhs(i,j)*ad_cff
3205 ad_cff4=ad_cff4-adfac
3206 ad_cff3=ad_cff3+adfac
3207 ad_drhs(i,j)=ad_drhs(i,j)+(cff3-cff4)*ad_cff
3211 ad_cff2=ad_cff2+dmde(i,j)*ad_cff4
3215 ad_cff1=ad_cff1+dndx(i,j)*ad_cff3
3224 adfac=0.5_r8*ad_cff2
3225 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)+adfac
3226 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+adfac
3228 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac
3229 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac
3239 adfac=0.5_r8*ad_cff1
3240 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+adfac
3241 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+adfac
3243 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac
3244 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac
3258# if defined DIAGNOSTICS_UV
3263 ad_fac1=ad_fac1-ad_rhs_vbar(i,j)
3266 adfac=0.5_r8*ad_fac1
3267 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac
3268 ad_vfe(i,j )=ad_vfe(i,j )+adfac
3274# if defined DIAGNOSTICS_UV
3279 ad_fac1=ad_fac1+ad_rhs_ubar(i,j)
3282 adfac=0.5_r8*ad_fac1
3283 ad_ufx(i-1,j)=ad_ufx(i-1,j)+adfac
3284 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
3290 cff=0.5_r8*drhs(i,j)*fomn(i,j)
3304 adfac=cff*ad_vfe(i,j)
3305 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)+adfac
3306 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+adfac
3308 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac
3309 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac
3311 ad_cff=ad_cff+(ubar(i ,j,krhs)+ &
3313 & ubar_stokes(i ,j)+ &
3314 & ubar_stokes(i+1,j)+ &
3316 & ubar(i+1,j,krhs))*ad_vfe(i,j)
3331 adfac=cff*ad_ufx(i,j)
3332 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+adfac
3333 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+adfac
3335 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac
3336 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac
3338 ad_cff=ad_cff+(vbar(i,j ,krhs)+ &
3340 & vbar_stokes(i,j )+ &
3341 & vbar_stokes(i,j+1)+ &
3343 & vbar(i,j+1,krhs))*ad_ufx(i,j)
3347 ad_drhs(i,j)=ad_drhs(i,j)+0.5_r8*fomn(i,j)*ad_cff
3360# if defined DIAGNOSTICS_UV
3367 ad_fac=ad_fac-ad_rhs_vbar(i,j)
3370 ad_cff1=ad_cff1+ad_fac
3371 ad_cff2=ad_cff2+ad_fac
3375 ad_vfe(i,j-1)=ad_vfe(i,j-1)-ad_cff2
3376 ad_vfe(i,j )=ad_vfe(i,j )+ad_cff2
3380 ad_vfx(i ,j)=ad_vfx(i ,j)-ad_cff1
3381 ad_vfx(i+1,j)=ad_vfx(i+1,j)+ad_cff1
3387# if defined DIAGNOSTICS_UV
3394 ad_fac=ad_fac-ad_rhs_ubar(i,j)
3397 ad_cff1=ad_cff1+ad_fac
3398 ad_cff2=ad_cff2+ad_fac
3402 ad_ufe(i,j )=ad_ufe(i,j )-ad_cff2
3403 ad_ufe(i,j+1)=ad_ufe(i,j+1)+ad_cff2
3407 ad_ufx(i-1,j)=ad_ufx(i-1,j)-ad_cff1
3408 ad_ufx(i ,j)=ad_ufx(i ,j)+ad_cff1
3412# ifdef UV_C2ADVECTION
3434 adfac=0.25_r8*ad_vfe(i,j)
3435 adfac1=adfac*(vbar(i,j ,krhs)+ &
3437 & vbar_stokes(i,j )+ &
3438 & vbar_stokes(i,j+1)+ &
3441 adfac2=adfac*(dvom(i,j)+dvom(i,j+1))
3442 ad_dvom(i,j )=ad_dvom(i,j )+adfac1
3443 ad_dvom(i,j+1)=ad_dvom(i,j+1)+adfac1
3444 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+adfac2
3445 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+adfac2
3447 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac2
3448 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac2
3472 adfac=0.25_r8*ad_vfx(i,j)
3473 adfac1=adfac*(vbar(i ,j,krhs)+ &
3475 & vbar_stokes(i ,j)+ &
3476 & vbar_stokes(i-1,j)+ &
3479 adfac2=adfac*(duon(i,j)+duon(i,j-1))
3480 ad_duon(i,j )=ad_duon(i,j )+adfac1
3481 ad_duon(i,j-1)=ad_duon(i,j-1)+adfac1
3482 ad_vbar(i ,j,krhs)=ad_vbar(i ,j,krhs)+adfac2
3483 ad_vbar(i-1,j,krhs)=ad_vbar(i-1,j,krhs)+adfac2
3485 ad_vbar_stokes(i-1,j)=ad_vbar_stokes(i-1,j)+adfac2
3486 ad_vbar_stokes(i ,j)=ad_vbar_stokes(i ,j)+adfac2
3510 adfac=0.25_r8*ad_ufe(i,j)
3511 adfac1=adfac*(ubar(i,j ,krhs)+ &
3513 & ubar_stokes(i,j )+ &
3514 & ubar_stokes(i,j-1)+ &
3517 adfac2=adfac*(dvom(i,j)+dvom(i-1,j))
3518 ad_dvom(i ,j)=ad_dvom(i ,j)+adfac1
3519 ad_dvom(i-1,j)=ad_dvom(i-1,j)+adfac1
3520 ad_ubar(i,j ,krhs)=ad_ubar(i,j ,krhs)+adfac2
3521 ad_ubar(i,j-1,krhs)=ad_ubar(i,j-1,krhs)+adfac2
3523 ad_ubar_stokes(i,j-1)=ad_ubar_stokes(i,j-1)+adfac2
3524 ad_ubar_stokes(i,j )=ad_ubar_stokes(i,j )+adfac2
3548 adfac=0.25_r8*ad_ufx(i,j)
3549 adfac1=adfac*(ubar(i ,j,krhs)+ &
3551 & ubar_stokes(i ,j)+ &
3552 & ubar_stokes(i+1,j)+ &
3555 adfac2=adfac*(duon(i,j)+duon(i+1,j))
3556 ad_duon(i ,j)=ad_duon(i ,j)+adfac1
3557 ad_duon(i+1,j)=ad_duon(i+1,j)+adfac1
3558 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)+adfac2
3559 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+adfac2
3561 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac2
3562 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac2
3573 grad(i,j)=vbar(i,j-1,krhs)-2.0_r8*vbar(i,j,krhs)+ &
3575 & vbar_stokes(i,j-1)-2.0_r8*vbar_stokes(i,j)+ &
3576 & vbar_stokes(i,j+1)+ &
3579 dgrad(i,j)=dvom(i,j-1)-2.0_r8*dvom(i,j)+dvom(i,j+1)
3583 IF (
domain(ng)%Northern_Edge(tile))
THEN
3585 grad(i,jend+1)=grad(i,jend)
3586 dgrad(i,jend+1)=dgrad(i,jend)
3592 IF (
domain(ng)%Southern_Edge(tile))
THEN
3594 grad(i,jstr)=grad(i,jstr+1)
3595 dgrad(i,jstr)=dgrad(i,jstr+1)
3623 adfac=0.25_r8*ad_vfe(i,j)
3624 adfac1=adfac*(dvom(i,j)+dvom(i,j+1)- &
3625 & cff*(dgrad(i,j)+dgrad(i,j+1)))
3627 adfac3=adfac*(vbar(i,j ,krhs)+ &
3629 & vbar_stokes(i,j )+ &
3630 & vbar_stokes(i,j+1)+ &
3632 & vbar(i,j+1,krhs)- &
3633 & cff*(grad(i,j)+grad(i,j+1)))
3635 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)+adfac1
3636 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+adfac1
3638 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )+adfac1
3639 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+adfac1
3641 ad_grad(i,j )=ad_grad(i,j )-adfac2
3642 ad_grad(i,j+1)=ad_grad(i,j+1)-adfac2
3643 ad_dvom(i,j )=ad_dvom(i,j )+adfac3
3644 ad_dvom(i,j+1)=ad_dvom(i,j+1)+adfac3
3645 ad_dgrad(i,j )=ad_dgrad(i,j )-adfac4
3646 ad_dgrad(i,j+1)=ad_dgrad(i,j+1)-adfac4
3651 IF (
domain(ng)%Northern_Edge(tile))
THEN
3655 ad_dgrad(i,jend)=ad_dgrad(i,jend)+ad_dgrad(i,jend+1)
3656 ad_dgrad(i,jend+1)=0.0_r8
3659 ad_grad(i,jend)=ad_grad(i,jend)+ad_grad(i,jend+1)
3660 ad_grad(i,jend+1)=0.0_r8
3665 IF (
domain(ng)%Southern_Edge(tile))
THEN
3669 ad_dgrad(i,jstr+1)=ad_dgrad(i,jstr+1)+ad_dgrad(i,jstr)
3670 ad_dgrad(i,jstr)=0.0_r8
3673 ad_grad(i,jstr+1)=ad_grad(i,jstr+1)+ad_grad(i,jstr)
3674 ad_grad(i,jstr)=0.0_r8
3684 ad_dvom(i,j-1)=ad_dvom(i,j-1)+ad_dgrad(i,j)
3685 ad_dvom(i,j )=ad_dvom(i,j )-2.0_r8*ad_dgrad(i,j)
3686 ad_dvom(i,j+1)=ad_dvom(i,j+1)+ad_dgrad(i,j)
3687 ad_dgrad(i,j)=0.0_r8
3696 ad_vbar(i,j-1,krhs)=ad_vbar(i,j-1,krhs)+ad_grad(i,j)
3697 ad_vbar(i,j ,krhs)=ad_vbar(i,j ,krhs)- &
3698 & 2.0_r8*ad_grad(i,j)
3699 ad_vbar(i,j+1,krhs)=ad_vbar(i,j+1,krhs)+ad_grad(i,j)
3701 ad_vbar_stokes(i,j-1)=ad_vbar_stokes(i,j-1)+ad_grad(i,j)
3702 ad_vbar_stokes(i,j )=ad_vbar_stokes(i,j )- &
3703 & 2.0_r8*ad_grad(i,j)
3704 ad_vbar_stokes(i,j+1)=ad_vbar_stokes(i,j+1)+ad_grad(i,j)
3711 grad(i,j)=vbar(i-1,j,krhs)-2.0_r8*vbar(i,j,krhs)+ &
3713 & vbar_stokes(i-1,j)-2.0_r8*vbar_stokes(i,j)+ &
3714 & vbar_stokes(i+1,j)+ &
3720 IF (
domain(ng)%Western_Edge(tile))
THEN
3722 grad(istr-1,j)=grad(istr,j)
3727 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3729 grad(iend+1,j)=grad(iend,j)
3735 dgrad(i,j)=duon(i,j-1)-2.0_r8*duon(i,j)+duon(i,j+1)
3762 adfac=0.25_r8*ad_vfx(i,j)
3763 adfac1=adfac*(duon(i,j)+duon(i,j-1)- &
3764 & cff*(dgrad(i,j)+dgrad(i,j-1)))
3766 adfac3=adfac*(vbar(i ,j,krhs)+ &
3768 & vbar_stokes(i ,j)+ &
3769 & vbar_stokes(i-1,j)+ &
3771 & vbar(i-1,j,krhs)- &
3772 & cff*(grad(i,j)+grad(i-1,j)))
3774 ad_vbar(i-1,j,krhs)=ad_vbar(i-1,j,krhs)+adfac1
3775 ad_vbar(i ,j,krhs)=ad_vbar(i ,j,krhs)+adfac1
3777 ad_vbar_stokes(i-1,j)=ad_vbar_stokes(i-1,j)+adfac1
3778 ad_vbar_stokes(i ,j)=ad_vbar_stokes(i ,j)+adfac1
3780 ad_grad(i-1,j)=ad_grad(i-1,j)-adfac2
3781 ad_grad(i ,j)=ad_grad(i ,j)-adfac2
3782 ad_duon(i,j-1)=ad_duon(i,j-1)+adfac3
3783 ad_duon(i,j )=ad_duon(i,j )+adfac3
3784 ad_dgrad(i,j-1)=ad_dgrad(i,j-1)-adfac4
3785 ad_dgrad(i,j )=ad_dgrad(i,j )-adfac4
3794 ad_duon(i,j-1)=ad_duon(i,j-1)+ad_dgrad(i,j)
3795 ad_duon(i,j )=ad_duon(i,j )-2.0_r8*ad_dgrad(i,j)
3796 ad_duon(i,j+1)=ad_duon(i,j+1)+ad_dgrad(i,j)
3797 ad_dgrad(i,j)=0.0_r8
3801 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3805 ad_grad(iend,j)=ad_grad(iend,j)+ad_grad(iend+1,j)
3806 ad_grad(iend+1,j)=0.0_r8
3811 IF (
domain(ng)%Western_Edge(tile))
THEN
3815 ad_grad(istr,j)=ad_grad(istr,j)+ad_grad(istr-1,j)
3816 ad_grad(istr-1,j)=0.0_r8
3830 ad_vbar(i-1,j,krhs)=ad_vbar(i-1,j,krhs)+ad_grad(i,j)
3831 ad_vbar(i ,j,krhs)=ad_vbar(i ,j,krhs)- &
3832 & 2.0_r8*ad_grad(i,j)
3833 ad_vbar(i+1,j,krhs)=ad_vbar(i+1,j,krhs)+ad_grad(i,j)
3835 ad_vbar_stokes(i-1,j)=ad_vbar_stokes(i-1,j)+ad_grad(i,j)
3836 ad_vbar_stokes(i ,j)=ad_vbar_stokes(i ,j)- &
3837 & 2.0_r8*ad_grad(i,j)
3838 ad_vbar_stokes(i+1,j)=ad_vbar_stokes(i+1,j)+ad_grad(i,j)
3845 grad(i,j)=ubar(i,j-1,krhs)-2.0_r8*ubar(i,j,krhs)+ &
3847 & ubar_stokes(i,j-1)-2.0_r8*ubar_stokes(i,j)+ &
3848 & ubar_stokes(i,j+1)+ &
3854 IF (
domain(ng)%Southern_Edge(tile))
THEN
3856 grad(i,jstr-1)=grad(i,jstr)
3861 IF (
domain(ng)%Northern_Edge(tile))
THEN
3863 grad(i,jend+1)=grad(i,jend)
3869 dgrad(i,j)=dvom(i-1,j)-2.0_r8*dvom(i,j)+dvom(i+1,j)
3896 adfac=0.25_r8*ad_ufe(i,j)
3897 adfac1=adfac*(dvom(i,j)+dvom(i-1,j)- &
3898 & cff*(dgrad(i,j)+dgrad(i-1,j)))
3900 adfac3=adfac*(ubar(i,j ,krhs)+ &
3902 & ubar_stokes(i,j )+ &
3903 & ubar_stokes(i,j-1)+ &
3905 & ubar(i,j-1,krhs)- &
3906 & cff*(grad(i,j)+grad(i,j-1)))
3908 ad_ubar(i,j-1,krhs)=ad_ubar(i,j-1,krhs)+adfac1
3909 ad_ubar(i,j ,krhs)=ad_ubar(i,j ,krhs)+adfac1
3911 ad_ubar_stokes(i,j-1)=ad_ubar_stokes(i,j-1)+adfac1
3912 ad_ubar_stokes(i,j )=ad_ubar_stokes(i,j )+adfac1
3914 ad_grad(i,j-1)=ad_grad(i,j-1)-adfac2
3915 ad_grad(i,j )=ad_grad(i,j )-adfac2
3916 ad_dvom(i-1,j)=ad_dvom(i-1,j)+adfac3
3917 ad_dvom(i ,j)=ad_dvom(i ,j)+adfac3
3918 ad_dgrad(i-1,j)=ad_dgrad(i-1,j)-adfac4
3919 ad_dgrad(i ,j)=ad_dgrad(i ,j)-adfac4
3928 ad_dvom(i-1,j)=ad_dvom(i-1,j)+ad_dgrad(i,j)
3929 ad_dvom(i ,j)=ad_dvom(i ,j)-2.0_r8*ad_dgrad(i,j)
3930 ad_dvom(i+1,j)=ad_dvom(i+1,j)+ad_dgrad(i,j)
3931 ad_dgrad(i,j)=0.0_r8
3935 IF (
domain(ng)%Northern_Edge(tile))
THEN
3939 ad_grad(i,jend)=ad_grad(i,jend)+ad_grad(i,jend+1)
3940 ad_grad(i,jend+1)=0.0_r8
3945 IF (
domain(ng)%Southern_Edge(tile))
THEN
3949 ad_grad(i,jstr)=ad_grad(i,jstr)+ad_grad(i,jstr-1)
3950 ad_grad(i,jstr-1)=0.0_r8
3964 ad_ubar(i,j-1,krhs)=ad_ubar(i,j-1,krhs)+ad_grad(i,j)
3965 ad_ubar(i,j ,krhs)=ad_ubar(i,j ,krhs)- &
3966 & 2.0_r8*ad_grad(i,j)
3967 ad_ubar(i,j+1,krhs)=ad_ubar(i,j+1,krhs)+ad_grad(i,j)
3969 ad_ubar_stokes(i,j-1)=ad_ubar_stokes(i,j-1)+ad_grad(i,j)
3970 ad_ubar_stokes(i,j )=ad_ubar_stokes(i,j)- &
3971 & 2.0_r8*ad_grad(i,j)
3972 ad_ubar_stokes(i,j+1)=ad_ubar_stokes(i,j+1)+ad_grad(i,j)
3979 grad(i,j)=ubar(i-1,j,krhs)-2.0_r8*ubar(i,j,krhs)+ &
3981 & ubar_stokes(i-1,j)-2.0_r8*ubar_stokes(i,j)+ &
3982 & ubar_stokes(i+1,j)+ &
3985 dgrad(i,j)=duon(i-1,j)-2.0_r8*duon(i,j)+duon(i+1,j)
3989 IF (
domain(ng)%Western_Edge(tile))
THEN
3991 grad(istr,j)=grad(istr+1,j)
3992 dgrad(istr,j)=dgrad(istr+1,j)
3997 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3999 grad(iend+1,j)=grad(iend,j)
4000 dgrad(iend+1,j)=dgrad(iend,j)
4028 adfac=0.25_r8*ad_ufx(i,j)
4029 adfac1=adfac*(duon(i,j)+duon(i+1,j)- &
4030 & cff*(dgrad(i,j)+dgrad(i+1,j)))
4032 adfac3=adfac*(ubar(i ,j,krhs)+ &
4034 & ubar_stokes(i ,j)+ &
4035 & ubar_stokes(i+1,j)+ &
4037 & ubar(i+1,j,krhs)- &
4038 & cff*(grad(i,j)+grad(i+1,j)))
4040 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)+adfac1
4041 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+adfac1
4043 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)+adfac1
4044 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+adfac1
4046 ad_grad(i ,j)=ad_grad(i ,j)-adfac2
4047 ad_grad(i+1,j)=ad_grad(i+1,j)-adfac2
4048 ad_duon(i ,j)=ad_duon(i ,j)+adfac3
4049 ad_duon(i+1,j)=ad_duon(i+1,j)+adfac3
4050 ad_dgrad(i ,j)=ad_dgrad(i ,j)-adfac4
4051 ad_dgrad(i+1,j)=ad_dgrad(i+1,j)-adfac4
4056 IF (
domain(ng)%Eastern_Edge(tile))
THEN
4060 ad_dgrad(iend,j)=ad_dgrad(iend,j)+ad_dgrad(iend+1,j)
4061 ad_dgrad(iend+1,j)=0.0_r8
4064 ad_grad(iend,j)=ad_grad(iend,j)+ad_grad(iend+1,j)
4065 ad_grad(iend+1,j)=0.0_r8
4070 IF (
domain(ng)%Western_Edge(tile))
THEN
4074 ad_dgrad(istr+1,j)=ad_dgrad(istr+1,j)+ad_dgrad(istr,j)
4075 ad_dgrad(istr,j)=0.0_r8
4078 ad_grad(istr+1,j)=ad_grad(istr+1,j)+ad_grad(istr,j)
4079 ad_grad(istr,j)=0.0_r8
4088 ad_duon(i-1,j)=ad_duon(i-1,j)+ad_dgrad(i,j)
4089 ad_duon(i ,j)=ad_duon(i ,j)-2.0_r8*ad_dgrad(i,j)
4090 ad_duon(i+1,j)=ad_duon(i+1,j)+ad_dgrad(i,j)
4091 ad_dgrad(i,j)=0.0_r8
4093# ifdef NEARHSORE_MELLOR
4100 ad_ubar(i-1,j,krhs)=ad_ubar(i-1,j,krhs)+ad_grad(i,j)
4101 ad_ubar(i ,j,krhs)=ad_ubar(i ,j,krhs)- &
4102 & 2.0_r8*ad_grad(i,j)
4103 ad_ubar(i+1,j,krhs)=ad_ubar(i+1,j,krhs)+ad_grad(i,j)
4104# ifdef NEARHSORE_MELLOR
4105 ad_ubar_stokes(i-1,j)=ad_ubar_stokes(i-1,j)+ad_grad(i,j)
4106 ad_ubar_stokes(i ,j)=ad_ubar_stokes(i ,j)- &
4107 & 2.0_r8*ad_grad(i,j)
4108 ad_ubar_stokes(i+1,j)=ad_ubar_stokes(i+1,j)+ad_grad(i,j)
4124 IF (first_2d_step)
THEN
4134 zeta_new(i,j)=zeta(i,j,knew)
4136 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
4138 zwrk(i,j)=0.5_r8*(zeta(i,j,kstp)+zeta_new(i,j))
4139#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4140 gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
4141 gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
4142 gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
4144 gzeta(i,j)=zwrk(i,j)
4145 gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
4152 cff5=1.0_r8-2.0_r8*cff4
4161 zeta_new(i,j)=zeta(i,j,knew)
4163 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
4165 zwrk(i,j)=cff5*zeta(i,j,krhs)+ &
4166 & cff4*(zeta(i,j,kstp)+zeta_new(i,j))
4167#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4168 gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
4169 gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
4170 gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
4172 gzeta(i,j)=zwrk(i,j)
4173 gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
4177 ELSE IF (corrector_2d_step)
THEN
4178 cff1=
dtfast(ng)*5.0_r8/12.0_r8
4179 cff2=
dtfast(ng)*8.0_r8/12.0_r8
4180 cff3=
dtfast(ng)*1.0_r8/12.0_r8
4193 zeta_new(i,j)=zeta(i,j,knew)
4195 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
4197 zwrk(i,j)=cff5*zeta_new(i,j)+cff4*zeta(i,j,krhs)
4198#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4199 gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
4200 gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
4201 gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
4203 gzeta(i,j)=zwrk(i,j)
4204 gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
4214#if !defined SOLVE3D && defined ATM_PRESS
4215 fac3=0.5_r8*100.0_r8/
rho0
4218 IF (j.ge.jstrv)
THEN
4220#ifdef DIAGNOSTICS_UV
4223#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
4233 adfac=cff1*om_v(i,j)*ad_rhs_vbar(i,j)
4234 adfac1=adfac*(eq_tide(i,j)-eq_tide(i,j-1))
4235 adfac2=adfac*(h(i,j-1)+h(i,j)+ &
4236 & gzeta(i,j-1)+gzeta(i,j))
4237 ad_h(i,j-1)=ad_h(i,j-1)-adfac1
4238 ad_h(i,j )=ad_h(i,j )-adfac1
4239 ad_gzeta(i,j-1)=ad_gzeta(i,j-1)-adfac1
4240 ad_gzeta(i,j )=ad_gzeta(i,j )-adfac1
4241 ad_eq_tide(i,j-1)=ad_eq_tide(i,j-1)+adfac2
4242 ad_eq_tide(i,j )=ad_eq_tide(i,j )-adfac2
4244#if defined ATM_PRESS && !defined SOLVE3D
4251 adfac=-fac3*om_v(i,j)*(pair(i,j)-pair(i,j-1)* &
4253 ad_h(i,j-1)=ad_h(i,j-1)+adfac
4254 ad_h(i,j )=ad_h(i,j )+adfac
4255 ad_gzeta(i,j-1)=ad_gzeta(i,j-1)+adfac
4256 ad_gzeta(i,j )=ad_gzeta(i,j )+adfac
4267#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4292 adfac=cff1*om_v(i,j)*ad_rhs_vbar(i,j)
4293 adfac1=adfac*(gzeta(i,j-1)-gzeta(i,j ))
4294 adfac2=adfac*(h(i,j-1)+h(i,j ))
4295 ad_h(i,j-1)=ad_h(i,j-1)+adfac1
4296 ad_h(i,j )=ad_h(i,j )+adfac1
4297 ad_gzeta(i,j-1)=ad_gzeta(i,j-1)+adfac2
4298 ad_gzeta(i,j )=ad_gzeta(i,j )-adfac2
4299 ad_gzeta2(i,j-1)=ad_gzeta2(i,j-1)+adfac
4300 ad_gzeta2(i,j )=ad_gzeta2(i,j )-adfac
4301#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4302 adfac1=adfac*(gzetasa(i,j-1)+ &
4304 & cff2*(rhoa(i,j-1)- &
4308 adfac2=adfac*(h(i,j-1)-h(i,j))
4309 adfac3=adfac2*cff2*(zwrk(i,j-1)-zwrk(i,j))
4310 adfac4=adfac2*cff2*(rhoa(i,j-1)-rhoa(i,j))
4311 ad_h(i,j-1)=ad_h(i,j-1)+adfac1
4312 ad_h(i,j )=ad_h(i,j )-adfac1
4313 ad_gzetasa(i,j-1)=ad_gzetasa(i,j-1)+adfac2
4314 ad_gzetasa(i,j )=ad_gzetasa(i,j )+adfac2
4315 ad_rhoa(i,j-1)=ad_rhoa(i,j-1)+adfac3
4316 ad_rhoa(i,j )=ad_rhoa(i,j )-adfac3
4317 ad_zwrk(i,j-1)=ad_zwrk(i,j-1)+adfac4
4318 ad_zwrk(i,j )=ad_zwrk(i,j )-adfac4
4320 ad_rhs_vbar(i,j)=0.0_r8
4324#ifdef DIAGNOSTICS_UV
4327#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
4337 adfac=cff1*on_u(i,j)*ad_rhs_ubar(i,j)
4338 adfac1=adfac*(eq_tide(i,j)-eq_tide(i-1,j))
4339 adfac2=adfac*(h(i-1,j)+h(i,j)+ &
4340 & gzeta(i-1,j)+gzeta(i,j))
4341 ad_h(i-1,j)=ad_h(i-1,j)-adfac1
4342 ad_h(i ,j)=ad_h(i ,j)-adfac1
4343 ad_gzeta(i-1,j)=ad_gzeta(i-1,j)-adfac1
4344 ad_gzeta(i ,j)=ad_gzeta(i ,j)-adfac1
4345 ad_eq_tide(i-1,j)=ad_eq_tide(i-1,j)+adfac2
4346 ad_eq_tide(i ,j)=ad_eq_tide(i ,j)-adfac2
4348#if defined ATM_PRESS && !defined SOLVE3D
4355 adfac=-fac3*on_u(i,j)*(pair(i,j)-pair(i-1,j))* &
4357 ad_h(i-1,j)=ad_h(i-1,j)+adfac
4358 ad_h(i ,j)=ad_h(i ,j)+adfac
4359 ad_gzeta(i-1,j)=ad_gzeta(i-1,j)+adfac
4360 ad_gzeta(i ,j)=ad_gzeta(i ,j)+adfac
4371#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4396 adfac=cff1*on_u(i,j)*ad_rhs_ubar(i,j)
4397 adfac1=adfac*(gzeta(i-1,j)-gzeta(i ,j))
4398 adfac2=adfac*(h(i-1,j)+h(i ,j))
4399 ad_h(i-1,j)=ad_h(i-1,j)+adfac1
4400 ad_h(i ,j)=ad_h(i ,j)+adfac1
4401 ad_gzeta(i-1,j)=ad_gzeta(i-1,j)+adfac2
4402 ad_gzeta(i ,j)=ad_gzeta(i ,j)-adfac2
4403 ad_gzeta2(i-1,j)=ad_gzeta2(i-1,j)+adfac
4404 ad_gzeta2(i ,j)=ad_gzeta2(i ,j)-adfac
4405#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4406 adfac1=adfac*(gzetasa(i-1,j)+ &
4408 & cff2*(rhoa(i-1,j)- &
4412 adfac2=adfac*(h(i-1,j)-h(i ,j))
4413 adfac3=adfac2*cff2*(zwrk(i-1,j)-zwrk(i,j))
4414 adfac4=adfac2*cff2*(rhoa(i-1,j)-rhoa(i,j))
4415 ad_h(i-1,j)=ad_h(i-1,j)+adfac1
4416 ad_h(i ,j)=ad_h(i ,j)-adfac1
4417 ad_gzetasa(i-1,j)=ad_gzetasa(i-1,j)+adfac2
4418 ad_gzetasa(i ,j)=ad_gzetasa(i ,j)+adfac2
4419 ad_rhoa(i-1,j)=ad_rhoa(i-1,j)+adfac3
4420 ad_rhoa(i ,j)=ad_rhoa(i ,j)-adfac3
4421 ad_zwrk(i-1,j)=ad_zwrk(i-1,j)+adfac4
4422 ad_zwrk(i ,j)=ad_zwrk(i ,j)-adfac4
4424 ad_rhs_ubar(i,j)=0.0_r8
4438 & lbi, ubi, lbj, ubj, &
4441 & ad_zeta(:,:,knew))
4449 & lbi, ubi, lbj, ubj, &
4450 & ad_zeta(:,:,knew))
4459 & lbi, ubi, lbj, ubj, &
4460 & imins, imaxs, jmins, jmaxs, &
4461 & krhs, kstp, knew, &
4464#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
4475 ad_cff=ad_cff-ad_h(i,j)
4479 ad_bed_thick(i,j,nnew)=ad_bed_thick(i,j,nnew)-adfac
4480 ad_bed_thick(i,j,nstp)=ad_bed_thick(i,j,nstp)+adfac
4492 IF (int(
sources(ng)%Dsrc(is)).eq.2)
THEN
4495 IF (((istrr.le.i).and.(i.le.iendr)).and. &
4496 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
4515 & lbi, ubi, lbj, ubj, &
4518 & ad_rzeta(:,:,krhs))
4526 & lbi, ubi, lbj, ubj, &
4527 & ad_rzeta(:,:,krhs))
4533 ad_rhs_zeta(i,j)=ad_rhs_zeta(i,j)+ad_rzeta(i,j,krhs)
4534 ad_rzeta(i,j,krhs)=0.0
4545 ad_zeta_sol(i,j)=ad_zeta(i,j,knew)
4552#ifdef WET_DRY_NOT_YET
4559#if defined WET_DRY_NOT_YET && defined MASKING
4563 ad_h(i,j)=ad_h(i,j)+(1.0_r8-rmask(i,j))*ad_zeta(i,j,knew)
4567 ad_zeta_new(i,j)=ad_zeta_new(i,j)+ad_zeta(i,j,knew)
4568 ad_zeta(i,j,knew)=0.0_r8
4580#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4583 IF (first_2d_step)
THEN
4587#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4591 adfac=zwrk(i,j)*ad_gzetasa(i,j)
4592 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4593 & (rhos(i,j)-rhoa(i,j))*ad_gzetasa(i,j)
4594 ad_rhos(i,j)=ad_rhos(i,j)+adfac
4595 ad_rhoa(i,j)=ad_rhoa(i,j)-adfac
4596 ad_gzetasa(i,j)=0.0_r8
4600 ad_gzeta(i,j)=ad_gzeta(i,j)+zwrk(i,j)*ad_gzeta2(i,j)
4601 ad_zwrk(i,j)=ad_zwrk(i,j)+gzeta(i,j)*ad_gzeta2(i,j)
4602 ad_gzeta2(i,j)=0.0_r8
4606 ad_rhos(i,j)=ad_rhos(i,j)+zwrk(i,j)*ad_gzeta(i,j)
4607 ad_zwrk(i,j)=ad_zwrk(i,j)+(fac+rhos(i,j))*ad_gzeta(i,j)
4608 ad_gzeta(i,j)=0.0_r8
4613 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4614 & 2.0_r8*zwrk(i,j)*ad_gzeta2(i,j)+ &
4616 ad_gzeta2(i,j)=0.0_r8
4617 ad_gzeta(i,j)=0.0_r8
4621 adfac=0.5_r8*ad_zwrk(i,j)
4622 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+adfac
4623 ad_zeta_new(i,j)=ad_zeta_new(i,j)+adfac
4627 ad_zeta_new(i,j)=ad_zeta_new(i,j)+ad_dnew(i,j)
4628 ad_h(i,j)=ad_h(i,j)+ad_dnew(i,j)
4633 ad_zeta_new(i,j)=ad_zeta_new(i,j)*rmask(i,j)
4638 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+ad_zeta_new(i,j)
4639 ad_rhs_zeta(i,j)=ad_rhs_zeta(i,j)+ &
4640 & pm(i,j)*pn(i,j)*cff1*ad_zeta_new(i,j)
4641 ad_zeta_new(i,j)=0.0_r8
4645 ad_duon(i ,j )=ad_duon(i ,j )+ad_rhs_zeta(i,j)
4646 ad_duon(i+1,j )=ad_duon(i+1,j )-ad_rhs_zeta(i,j)
4647 ad_dvom(i ,j )=ad_dvom(i ,j )+ad_rhs_zeta(i,j)
4648 ad_dvom(i ,j+1)=ad_dvom(i ,j+1)-ad_rhs_zeta(i,j)
4649 ad_rhs_zeta(i,j)=0.0_r8
4655 cff5=1.0_r8-2.0_r8*cff4
4658#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4662 adfac=zwrk(i,j)*ad_gzetasa(i,j)
4663 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4664 & (rhos(i,j)-rhoa(i,j))*ad_gzetasa(i,j)
4665 ad_rhos(i,j)=ad_rhos(i,j)+adfac
4666 ad_rhoa(i,j)=ad_rhoa(i,j)-adfac
4667 ad_gzetasa(i,j)=0.0_r8
4671 ad_gzeta(i,j)=ad_gzeta(i,j)+zwrk(i,j)*ad_gzeta2(i,j)
4672 ad_zwrk(i,j)=ad_zwrk(i,j)+gzeta(i,j)*ad_gzeta2(i,j)
4673 ad_gzeta2(i,j)=0.0_r8
4677 ad_zwrk(i,j)=ad_zwrk(i,j)+(fac+rhos(i,j))*ad_gzeta(i,j)
4678 ad_rhos(i,j)=ad_rhos(i,j)+zwrk(i,j)*ad_gzeta(i,j)
4679 ad_gzeta(i,j)=0.0_r8
4684 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4685 & 2.0_r8*zwrk(i,j)*ad_gzeta2(i,j)+ &
4687 ad_gzeta2(i,j)=0.0_r8
4688 ad_gzeta(i,j)=0.0_r8
4693 adfac=cff4*ad_zwrk(i,j)
4694 ad_zeta(i,j,krhs)=ad_zeta(i,j,krhs)+cff5*ad_zwrk(i,j)
4695 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+adfac
4696 ad_zeta_new(i,j)=ad_zeta_new(i,j)+adfac
4700 ad_zeta_new(i,j)=ad_zeta_new(i,j)+ad_dnew(i,j)
4701 ad_h(i,j)=ad_h(i,j)+ad_dnew(i,j)
4706 ad_zeta_new(i,j)=ad_zeta_new(i,j)*rmask(i,j)
4711 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+ad_zeta_new(i,j)
4712 ad_rhs_zeta(i,j)=ad_rhs_zeta(i,j)+ &
4713 & pm(i,j)*pn(i,j)*cff1*ad_zeta_new(i,j)
4714 ad_zeta_new(i,j)=0.0_r8
4718 ad_duon(i ,j )=ad_duon(i ,j )+ad_rhs_zeta(i,j)
4719 ad_duon(i+1,j )=ad_duon(i+1,j )-ad_rhs_zeta(i,j)
4720 ad_dvom(i ,j )=ad_dvom(i ,j )+ad_rhs_zeta(i,j)
4721 ad_dvom(i ,j+1)=ad_dvom(i ,j+1)-ad_rhs_zeta(i,j)
4722 ad_rhs_zeta(i,j)=0.0_r8
4725 ELSE IF (corrector_2d_step)
THEN
4726 cff1=
dtfast(ng)*5.0_r8/12.0_r8
4727 cff2=
dtfast(ng)*8.0_r8/12.0_r8
4728 cff3=
dtfast(ng)*1.0_r8/12.0_r8
4733#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
4737 adfac=zwrk(i,j)*ad_gzetasa(i,j)
4738 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4739 & (rhos(i,j)-rhoa(i,j))*ad_gzetasa(i,j)
4740 ad_rhos(i,j)=ad_rhos(i,j)+adfac
4741 ad_rhoa(i,j)=ad_rhoa(i,j)-adfac
4742 ad_gzetasa(i,j)=0.0_r8
4746 ad_zwrk(i,j)=ad_zwrk(i,j)+gzeta(i,j)*ad_gzeta2(i,j)
4747 ad_gzeta(i,j)=ad_gzeta(i,j)+zwrk(i,j)*ad_gzeta2(i,j)
4748 ad_gzeta2(i,j)=0.0_r8
4752 ad_zwrk(i,j)=ad_zwrk(i,j)+(fac+rhos(i,j))*ad_gzeta(i,j)
4753 ad_rhos(i,j)=ad_rhos(i,j)+zwrk(i,j)*ad_gzeta(i,j)
4754 ad_gzeta(i,j)=0.0_r8
4759 ad_zwrk(i,j)=ad_zwrk(i,j)+ &
4760 & 2.0_r8*zwrk(i,j)*ad_gzeta2(i,j)+ &
4762 ad_gzeta2(i,j)=0.0_r8
4763 ad_gzeta(i,j)=0.0_r8
4767 ad_zeta_new(i,j)=ad_zeta_new(i,j)+cff5*ad_zwrk(i,j)
4768 ad_zeta(i,j,krhs)=ad_zeta(i,j,krhs)+cff4*ad_zwrk(i,j)
4772 ad_zeta_new(i,j)=ad_zeta_new(i,j)+ad_dnew(i,j)
4773 ad_h(i,j)=ad_h(i,j)+ad_dnew(i,j)
4778 ad_zeta_new(i,j)=ad_zeta_new(i,j)*rmask(i,j)
4785 adfac=pm(i,j)*pn(i,j)*ad_zeta_new(i,j)
4786 ad_zeta(i,j,kstp)=ad_zeta(i,j,kstp)+ad_zeta_new(i,j)
4788 ad_rzeta(i,j,kstp)=ad_rzeta(i,j,kstp)+adfac*cff2
4789 ad_rzeta(i,j,ptsk)=-adfac*cff3
4790 ad_zeta_new(i,j)=0.0_r8
4795 ad_duon(i ,j )=ad_duon(i ,j )+adfac
4796 ad_duon(i+1,j )=ad_duon(i+1,j )-adfac
4797 ad_dvom(i ,j )=ad_dvom(i ,j )+adfac
4798 ad_dvom(i ,j+1)=ad_dvom(i ,j+1)-adfac
4804#ifdef WET_DRY_NOT_YET
4858 & lbi, ubi, lbj, ubj, &
4861 & ad_du_avg2, ad_dv_avg2)
4870 & lbi, ubi, lbj, ubj, &
4873 & ad_zt_avg1, ad_du_avg1, ad_dv_avg1)
4882 & lbi, ubi, lbj, ubj, &
4888 & lbi, ubi, lbj, ubj, &
4896 & lbi, ubi, lbj, ubj, &
4903 & lbi, ubi, lbj, ubj, &
4910 & lbi, ubi, lbj, ubj, &
4918 IF (first_2d_step)
THEN
4922 cff2=(-1.0_r8/12.0_r8)*
weight(2,
iif(ng)+1,ng)
4927 ad_zt_avg1(i,j)=0.0_r8
4932 ad_duon(i,j)=ad_duon(i,j)+cff2*ad_du_avg2(i,j)
4933 ad_du_avg2(i,j)=0.0_r8
4936 ad_du_avg1(i,j)=0.0_r8
4943 ad_dvom(i,j)=ad_dvom(i,j)+cff2*ad_dv_avg2(i,j)
4944 ad_dv_avg2(i,j)=0.0_r8
4947 ad_dv_avg1(i,j)=0.0_r8
4957 cff2=(8.0_r8/12.0_r8)*
weight(2,
iif(ng) ,ng)- &
4958 & (1.0_r8/12.0_r8)*
weight(2,
iif(ng)+1,ng)
4963 ad_zeta(i,j,krhs)=ad_zeta(i,j,krhs)+cff1*ad_zt_avg1(i,j)
4968 ad_duon(i,j)=ad_duon(i,j)+ &
4969 & cff2*ad_du_avg2(i,j)
4973 ad_duson(i,j)=ad_duson(i,j)- &
4974 & cff1*ad_du_avg1(i,j)
4978 ad_duon(i,j)=ad_duon(i,j)+ &
4979 & cff1*ad_du_avg1(i,j)
4986 ad_dvom(i,j)=ad_dvom(i,j)+ &
4987 & cff2*ad_dv_avg2(i,j)
4991 ad_dvsom(i,j)=ad_dvsom(i,j)- &
4992 & cff1*ad_dv_avg1(i,j)
4996 ad_dvom(i,j)=ad_dvom(i,j)+ &
4997 & cff1*ad_dv_avg1(i,j)
5002 IF (first_2d_step)
THEN
5005 cff2=(5.0_r8/12.0_r8)*
weight(2,
iif(ng),ng)
5011 ad_dvom(i,j)=ad_dvom(i,j)+cff2*ad_dv_avg2(i,j)
5018 ad_duon(i,j)=ad_duon(i,j)+cff2*ad_du_avg2(i,j)
5045 & lbi, ubi, lbj, ubj, &
5046 & imins, imaxs, jmins, jmaxs, &
5051 & om_v, on_u, ubar, vbar, &
5052 & ad_ubar, ad_vbar, &
5053 & drhs, duon, dvom, &
5054 & ad_drhs, ad_duon, ad_dvom)
5073 & imins, imaxs, jmins, jmaxs, &
5083 & imins, imaxs, jmins, jmaxs, &
5090 & imins, imaxs, jmins, jmaxs, &
5094#if defined DISTRIBUTE && !defined NESTING
5100 cff=0.5_r8*om_v(i,j)
5101 cff1=cff*(drhs(i,j)+drhs(i,j-1))
5105 ad_dvsom(i,j)=ad_dvsom(i,j)+ad_dvom(i,j)
5109 ad_cff1=ad_cff1+vbar_stokes(i,j)*ad_dvsom(i,j)
5110 ad_vbar_stokes(i,j)=ad_vbar_stokes(i,j)+cff1*ad_dvsom(i,j)
5111 ad_dvsom(i,j)=0.0_r8
5116 ad_cff1=ad_cff1+vbar(i,j,krhs)*ad_dvom(i,j)
5117 ad_vbar(i,j,krhs)=ad_vbar(i,j,krhs)+cff1*ad_dvom(i,j)
5122 ad_drhs(i,j-1)=ad_drhs(i,j-1)+adfac
5123 ad_drhs(i,j )=ad_drhs(i,j )+adfac
5129 cff=0.5_r8*on_u(i,j)
5130 cff1=cff*(drhs(i,j)+drhs(i-1,j))
5134 ad_duson(i,j)=ad_duson(i,j)+ad_duon(i,j)
5138 ad_cff1=ad_cff1+ubar_stokes(i,j)*ad_duson(i,j)
5139 ad_ubar_stokes(i,j)=ad_ubar_stokes(i,j)+cff1*ad_duson(i,j)
5140 ad_duson(i,j)=0.0_r8
5145 ad_cff1=ad_cff1+ubar(i,j,krhs)*ad_duon(i,j)
5146 ad_ubar(i,j,krhs)=ad_ubar(i,j,krhs)+cff1*ad_duon(i,j)
5151 ad_drhs(i-1,j)=ad_drhs(i-1,j)+adfac
5152 ad_drhs(i ,j)=ad_drhs(i ,j)+adfac
5163 ad_zeta(i,j,krhs)=ad_zeta(i,j,krhs)+ad_drhs(i,j)
5164 ad_h(i,j)=ad_h(i,j)+ad_drhs(i,j)
5172 DO i=istrum2-1,iendp2
5173 cff=0.5_r8*om_v(i,j)
5174 cff1=cff*(drhs(i,j)+drhs(i,j-1))
5178 ad_dvsom(i,j)=ad_dvsom(i,j)+ad_dvom(i,j)
5182 ad_cff1=ad_cff1+vbar_stokes(i,j)*ad_dvsom(i,j)
5183 ad_vbar_stokes(i,j)=ad_vbar_stokes(i,j)+cff1*ad_dvsom(i,j)
5184 ad_dvsom(i,j)=0.0_r8
5189 ad_cff1=ad_cff1+vbar(i,j,krhs)*ad_dvom(i,j)
5190 ad_vbar(i,j,krhs)=ad_vbar(i,j,krhs)+cff1*ad_dvom(i,j)
5195 ad_drhs(i,j-1)=ad_drhs(i,j-1)+adfac
5196 ad_drhs(i,j )=ad_drhs(i,j )+adfac
5200 DO j=jstrvm2-1,jendp2
5202 cff=0.5_r8*on_u(i,j)
5203 cff1=cff*(drhs(i,j)+drhs(i-1,j))
5207 ad_duson(i,j)=ad_duson(i,j)+ad_duon(i,j)
5211 ad_cff1=ad_cff1+ubar_stokes(i,j)*ad_duson(i,j)
5212 ad_ubar_stokes(i,j)=ad_ubar_stokes(i,j)+cff1*ad_duson(i,j)
5213 ad_duson(i,j)=0.0_r8
5218 ad_cff1=ad_cff1+ubar(i,j,krhs)*ad_duon(i,j)
5219 ad_ubar(i,j,krhs)=ad_ubar(i,j,krhs)+cff1*ad_duon(i,j)
5224 ad_drhs(i-1,j)=ad_drhs(i-1,j)+adfac
5225 ad_drhs(i ,j)=ad_drhs(i ,j)+adfac
5232 DO j=jstrvm2-1,jendp2
5233 DO i=istrum2-1,iendp2
5236 ad_zeta(i,j,krhs)=ad_zeta(i,j,krhs)+ad_drhs(i,j)
5237 ad_h(i,j)=ad_h(i,j)+ad_drhs(i,j)