181 & LBi, UBi, LBj, UBj, UBk, &
182 & IminS, ImaxS, JminS, JmaxS, &
183 & krhs, kstp, knew, &
188 & pmask, rmask, umask, vmask, &
190#ifdef WET_DRY_NOT_YET
191 & pmask_wet, pmask_full, &
192 & rmask_wet, rmask_full, &
193 & umask_wet, umask_full, &
194 & vmask_wet, vmask_full, &
201 & om_u, om_v, on_u, on_v, omn, pm, pn, &
202#if defined CURVGRID && defined UV_ADV
205#if defined UV_VIS2 || defined UV_VIS4
206 & pmon_r, pnom_r, pmon_p, pnom_p, &
207 & om_r, on_r, om_p, on_p, &
209 & visc2_p, visc2_r, &
212 & visc4_p, visc4_r, &
215#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
219 & tl_rustr2d, tl_rvstr2d, &
220 & tl_rulag2d, tl_rvlag2d, &
221 & ubar_stokes, tl_ubar_stokes, &
222 & vbar_stokes, tl_vbar_stokes, &
224#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
225 & eq_tide, tl_eq_tide, &
228 & tl_bustr, tl_bvstr, &
233# ifdef VAR_RHO_2D_NOT_YET
237 & tl_DU_avg1, tl_DU_avg2, &
238 & tl_DV_avg1, tl_DV_avg2, &
239 & Zt_avg1, tl_Zt_avg1, &
240 & tl_rufrc, tl_rvfrc, &
244!! & DiaU2wrk, DiaV2wrk, &
245!! & DiaRUbar, DiaRVbar, &
247!! & DiaU2int, DiaV2int, &
248!! & DiaRUfrc, DiaRVfrc, &
261 integer,
intent(in ) :: ng, tile
262 integer,
intent(in ) :: LBi, UBi, LBj, UBj, UBk
263 integer,
intent(in ) :: IminS, ImaxS, JminS, JmaxS
264 integer,
intent(in ) :: krhs, kstp, knew
266 integer,
intent(in ) :: nstp, nnew
271 real(r8),
intent(in ) :: pmask(LBi:,LBj:)
272 real(r8),
intent(in ) :: rmask(LBi:,LBj:)
273 real(r8),
intent(in ) :: umask(LBi:,LBj:)
274 real(r8),
intent(in ) :: vmask(LBi:,LBj:)
276 real(r8),
intent(in ) :: fomn(LBi:,LBj:)
277 real(r8),
intent(in ) :: h(LBi:,LBj:)
278 real(r8),
intent(in ) :: om_u(LBi:,LBj:)
279 real(r8),
intent(in ) :: om_v(LBi:,LBj:)
280 real(r8),
intent(in ) :: on_u(LBi:,LBj:)
281 real(r8),
intent(in ) :: on_v(LBi:,LBj:)
282 real(r8),
intent(in ) :: omn(LBi:,LBj:)
283 real(r8),
intent(in ) :: pm(LBi:,LBj:)
284 real(r8),
intent(in ) :: pn(LBi:,LBj:)
285# if defined CURVGRID && defined UV_ADV
286 real(r8),
intent(in ) :: dndx(LBi:,LBj:)
287 real(r8),
intent(in ) :: dmde(LBi:,LBj:)
289# if defined UV_VIS2 || defined UV_VIS4
290 real(r8),
intent(in ) :: pmon_r(LBi:,LBj:)
291 real(r8),
intent(in ) :: pnom_r(LBi:,LBj:)
292 real(r8),
intent(in ) :: pmon_p(LBi:,LBj:)
293 real(r8),
intent(in ) :: pnom_p(LBi:,LBj:)
294 real(r8),
intent(in ) :: om_r(LBi:,LBj:)
295 real(r8),
intent(in ) :: on_r(LBi:,LBj:)
296 real(r8),
intent(in ) :: om_p(LBi:,LBj:)
297 real(r8),
intent(in ) :: on_p(LBi:,LBj:)
299 real(r8),
intent(in ) :: visc2_p(LBi:,LBj:)
300 real(r8),
intent(in ) :: visc2_r(LBi:,LBj:)
303 real(r8),
intent(in ) :: visc4_p(LBi:,LBj:)
304 real(r8),
intent(in ) :: visc4_r(LBi:,LBj:)
307# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
308 real(r8),
intent(in ) :: tl_bed_thick(LBi:,LBj:,:)
311 real(r8),
intent(in ) :: ubar_stokes(LBi:,LBj:)
312 real(r8),
intent(in ) :: vbar_stokes(LBi:,LBj:)
314# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
315 real(r8),
intent(in ) :: eq_tide(LBi:,LBj:)
316 real(r8),
intent(in ) :: tl_eq_tide(LBi:,LBj:)
318 real(r8),
intent(in ) :: rubar(LBi:,LBj:,:)
319 real(r8),
intent(in ) :: rvbar(LBi:,LBj:,:)
320 real(r8),
intent(in ) :: rzeta(LBi:,LBj:,:)
321 real(r8),
intent(in ) :: ubar(LBi:,LBj:,:)
322 real(r8),
intent(in ) :: vbar(LBi:,LBj:,:)
323 real(r8),
intent(in ) :: zeta(LBi:,LBj:,:)
324# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
325 real(r8),
intent(inout) :: tl_h(LBi:,LBj:)
327 real(r8),
intent(in ) :: tl_h(LBi:,LBj:)
330 real(r8),
intent(in ) :: tl_bustr(LBi:,LBj:)
331 real(r8),
intent(in ) :: tl_bvstr(LBi:,LBj:)
333 real(r8),
intent(in ) :: Pair(LBi:,LBj:)
336# ifdef VAR_RHO_2D_NOT_YET
337 real(r8),
intent(in ) :: rhoA(LBi:,LBj:)
338 real(r8),
intent(in ) :: rhoS(LBi:,LBj:)
339 real(r8),
intent(in ) :: tl_rhoA(LBi:,LBj:)
340 real(r8),
intent(in ) :: tl_rhoS(LBi:,LBj:)
342 real(r8),
intent(in ) :: Zt_avg1(LBi:,LBj:)
344 real(r8),
intent(inout) :: tl_DU_avg1(LBi:,LBj:)
345 real(r8),
intent(inout) :: tl_DU_avg2(LBi:,LBj:)
346 real(r8),
intent(inout) :: tl_DV_avg1(LBi:,LBj:)
347 real(r8),
intent(inout) :: tl_DV_avg2(LBi:,LBj:)
348 real(r8),
intent(inout) :: tl_Zt_avg1(LBi:,LBj:)
349 real(r8),
intent(inout) :: tl_rufrc(LBi:,LBj:)
350 real(r8),
intent(inout) :: tl_rvfrc(LBi:,LBj:)
351 real(r8),
intent(inout) :: tl_ru(LBi:,LBj:,0:,:)
352 real(r8),
intent(inout) :: tl_rv(LBi:,LBj:,0:,:)
355 real(r8),
intent(inout) :: tl_rustr2d(LBi:,LBj:)
356 real(r8),
intent(inout) :: tl_rvstr2d(LBi:,LBj:)
357 real(r8),
intent(inout) :: tl_rulag2d(LBi:,LBj:)
358 real(r8),
intent(inout) :: tl_rvlag2d(LBi:,LBj:)
359 real(r8),
intent(inout) :: tl_ubar_stokes(LBi:,LBj:)
360 real(r8),
intent(inout) :: tl_vbar_stokes(LBi:,LBj:)
362# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
363 real(r8),
intent(in ) :: eq_tide(LBi:UBi,LBj:UBj)
364 real(r8),
intent(in ) :: tl_eq_tide(LBi:UBi,LBj:UBj)
366# ifdef WET_DRY_NOT_YET
367 real(r8),
intent(inout) :: pmask_full(LBi:,LBj:)
368 real(r8),
intent(inout) :: rmask_full(LBi:,LBj:)
369 real(r8),
intent(inout) :: umask_full(LBi:,LBj:)
370 real(r8),
intent(inout) :: vmask_full(LBi:,LBj:)
372 real(r8),
intent(inout) :: pmask_wet(LBi:,LBj:)
373 real(r8),
intent(inout) :: rmask_wet(LBi:,LBj:)
374 real(r8),
intent(inout) :: umask_wet(LBi:,LBj:)
375 real(r8),
intent(inout) :: vmask_wet(LBi:,LBj:)
377 real(r8),
intent(inout) :: rmask_wet_avg(LBi:,LBj:)
380# ifdef DIAGNOSTICS_UV
392 real(r8),
intent(inout) :: tl_rubar(LBi:,LBj:,:)
393 real(r8),
intent(inout) :: tl_rvbar(LBi:,LBj:,:)
394 real(r8),
intent(inout) :: tl_rzeta(LBi:,LBj:,:)
395 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
396 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
397 real(r8),
intent(inout) :: tl_zeta(LBi:,LBj:,:)
402 real(r8),
intent(in ) :: pmask(LBi:UBi,LBj:UBj)
403 real(r8),
intent(in ) :: rmask(LBi:UBi,LBj:UBj)
404 real(r8),
intent(in ) :: umask(LBi:UBi,LBj:UBj)
405 real(r8),
intent(in ) :: vmask(LBi:UBi,LBj:UBj)
407 real(r8),
intent(in ) :: fomn(LBi:UBi,LBj:UBj)
408 real(r8),
intent(in ) :: h(LBi:UBi,LBj:UBj)
409 real(r8),
intent(in ) :: om_u(LBi:UBi,LBj:UBj)
410 real(r8),
intent(in ) :: om_v(LBi:UBi,LBj:UBj)
411 real(r8),
intent(in ) :: on_u(LBi:UBi,LBj:UBj)
412 real(r8),
intent(in ) :: on_v(LBi:UBi,LBj:UBj)
413 real(r8),
intent(in ) :: omn(LBi:UBi,LBj:UBj)
414 real(r8),
intent(in ) :: pm(LBi:UBi,LBj:UBj)
415 real(r8),
intent(in ) :: pn(LBi:UBi,LBj:UBj)
416# if defined CURVGRID && defined UV_ADV
417 real(r8),
intent(in ) :: dndx(LBi:UBi,LBj:UBj)
418 real(r8),
intent(in ) :: dmde(LBi:UBi,LBj:UBj)
420# if defined UV_VIS2 || defined UV_VIS4
421 real(r8),
intent(in ) :: pmon_r(LBi:UBi,LBj:UBj)
422 real(r8),
intent(in ) :: pnom_r(LBi:UBi,LBj:UBj)
423 real(r8),
intent(in ) :: pmon_p(LBi:UBi,LBj:UBj)
424 real(r8),
intent(in ) :: pnom_p(LBi:UBi,LBj:UBj)
425 real(r8),
intent(in ) :: om_r(LBi:UBi,LBj:UBj)
426 real(r8),
intent(in ) :: on_r(LBi:UBi,LBj:UBj)
427 real(r8),
intent(in ) :: om_p(LBi:UBi,LBj:UBj)
428 real(r8),
intent(in ) :: on_p(LBi:UBi,LBj:UBj)
430 real(r8),
intent(in ) :: visc2_p(LBi:UBi,LBj:UBj)
431 real(r8),
intent(in ) :: visc2_r(LBi:UBi,LBj:UBj)
434 real(r8),
intent(in ) :: visc4_p(LBi:UBi,LBj:UBj)
435 real(r8),
intent(in ) :: visc4_r(LBi:UBi,LBj:UBj)
438# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
439 real(r8),
intent(in ) :: tl_bed_thick(LBi:UBi,LBj:UBj,3)
442 real(r8),
intent(in ) :: ubar_stokes(LBi:UBi,LBj:UBj)
443 real(r8),
intent(in ) :: vbar_stokes(LBi:UBi,LBj:UBj)
445# if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
446 real(r8),
intent(in ) :: eq_tide(LBi:UBi,LBj:UBj)
447 real(r8),
intent(in ) :: tl_eq_tide(LBi:UBi,LBj:UBj)
449 real(r8),
intent(in ) :: rubar(LBi:UBi,LBj:UBj,2)
450 real(r8),
intent(in ) :: rvbar(LBi:UBi,LBj:UBj,2)
451 real(r8),
intent(in ) :: rzeta(LBi:UBi,LBj:UBj,2)
452 real(r8),
intent(in ) :: ubar(LBi:UBi,LBj:UBj,:)
453 real(r8),
intent(in ) :: vbar(LBi:UBi,LBj:UBj,:)
454 real(r8),
intent(in ) :: zeta(LBi:UBi,LBj:UBj,:)
455# if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
456 real(r8),
intent(inout) :: tl_h(LBi:UBi,LBj:UBj)
458 real(r8),
intent(in ) :: tl_h(LBi:UBi,LBj:UBj)
461 real(r8),
intent(in ) :: tl_bustr(LBi:UBi,LBj:UBj)
462 real(r8),
intent(in ) :: tl_bvstr(LBi:UBi,LBj:UBj)
464 real(r8),
intent(in ) :: Pair(LBi:UBi,LBj:UBj)
467# ifdef VAR_RHO_2D_NOT_YET
468 real(r8),
intent(in ) :: rhoA(LBi:UBi,LBj:UBj)
469 real(r8),
intent(in ) :: rhoS(LBi:UBi,LBj:UBj)
470 real(r8),
intent(in ) :: tl_rhoA(LBi:UBi,LBj:UBj)
471 real(r8),
intent(in ) :: tl_rhoS(LBi:UBi,LBj:UBj)
473 real(r8),
intent(in ) :: Zt_avg1(LBi:UBi,LBj:UBj)
475 real(r8),
intent(inout) :: tl_DU_avg1(LBi:UBi,LBj:UBj)
476 real(r8),
intent(inout) :: tl_DU_avg2(LBi:UBi,LBj:UBj)
477 real(r8),
intent(inout) :: tl_DV_avg1(LBi:UBi,LBj:UBj)
478 real(r8),
intent(inout) :: tl_DV_avg2(LBi:UBi,LBj:UBj)
479 real(r8),
intent(inout) :: tl_Zt_avg1(LBi:UBi,LBj:UBj)
480 real(r8),
intent(inout) :: tl_rufrc(LBi:UBi,LBj:UBj)
481 real(r8),
intent(inout) :: tl_rvfrc(LBi:UBi,LBj:UBj)
482 real(r8),
intent(inout) :: tl_ru(LBi:UBi,LBj:UBj,0:UBk,2)
483 real(r8),
intent(inout) :: tl_rv(LBi:UBi,LBj:UBj,0:UBk,2)
486 real(r8),
intent(inout) :: tl_rustr2d(LBi:UBi,LBj:UBj)
487 real(r8),
intent(inout) :: tl_rvstr2d(LBi:UBi,LBj:UBj)
488 real(r8),
intent(inout) :: tl_rulag2d(LBi:UBi,LBj:UBj)
489 real(r8),
intent(inout) :: tl_rvlag2d(LBi:UBi,LBj:UBj)
490 real(r8),
intent(inout) :: tl_ubar_stokes(LBi:UBi,LBj:UBj)
491 real(r8),
intent(inout) :: tl_vbar_stokes(LBi:UBi,LBj:UBj)
493# ifdef WET_DRY_NOT_YET
494 real(r8),
intent(inout) :: pmask_full(LBi:UBi,LBj:UBj)
495 real(r8),
intent(inout) :: rmask_full(LBi:UBi,LBj:UBj)
496 real(r8),
intent(inout) :: umask_full(LBi:UBi,LBj:UBj)
497 real(r8),
intent(inout) :: vmask_full(LBi:UBi,LBj:UBj)
499 real(r8),
intent(inout) :: pmask_wet(LBi:UBi,LBj:UBj)
500 real(r8),
intent(inout) :: rmask_wet(LBi:UBi,LBj:UBj)
501 real(r8),
intent(inout) :: umask_wet(LBi:UBi,LBj:UBj)
502 real(r8),
intent(inout) :: vmask_wet(LBi:UBi,LBj:UBj)
504 real(r8),
intent(inout) :: rmask_wet_avg(LBi:UBi,LBj:UBj)
507# ifdef DIAGNOSTICS_UV
519 real(r8),
intent(inout) :: tl_rubar(LBi:UBi,LBj:UBj,2)
520 real(r8),
intent(inout) :: tl_rvbar(LBi:UBi,LBj:UBj,2)
521 real(r8),
intent(inout) :: tl_rzeta(LBi:UBi,LBj:UBj,2)
522 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
523 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
524 real(r8),
intent(inout) :: tl_zeta(LBi:UBi,LBj:UBj,:)
529 logical :: CORRECTOR_2D_STEP
531 integer :: i, is, j, ptsk
536 real(r8) :: cff, cff1, cff2, cff3, cff4, cff5, cff6, cff7
537 real(r8) :: fac, fac1, fac2, fac3
538 real(r8) :: tl_cff, tl_cff1, tl_cff2, tl_cff3, tl_cff4
539 real(r8) :: tl_fac, tl_fac1
541 real(r8),
parameter :: IniVal = 0.0_r8
543 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dgrad
544 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dnew
545 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs
546 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Drhs_p
547 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Dstp
548 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUon
549 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVom
551 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DUSon
552 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: DVSom
555 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: LapU
556 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: LapV
558 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
559 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
560 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
561 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
562 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: grad
563 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: gzeta
564 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: gzeta2
565#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
566 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: gzetaSA
568 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_ubar
569 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_vbar
570 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: rhs_zeta
571 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zeta_new
572 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: zwrk
573#ifdef WET_DRY_NOT_YET
574 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: wetdry
583 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Dgrad
584 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Dnew
585 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Drhs
586 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Drhs_p
587 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Dstp
588 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DUon
589 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DVom
591 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DUSon
592 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_DVSom
595 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_LapU
596 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_LapV
598 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_UFe
599 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_UFx
600 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_VFe
601 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_VFx
602 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_grad
603 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_gzeta
604 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_gzeta2
605#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
606 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_gzetaSA
608 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rhs_ubar
609 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rhs_vbar
610 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_rhs_zeta
611 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_zeta_new
612 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_zwrk
613#ifdef WET_DRY_NOT_YET
614 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_wetdry
617#include "set_bounds.h"
624 & kstp, krhs, knew, ptsk
625 20
FORMAT (
' iic = ',i5.5,
' predictor = ',l1,
' kstp = ',i1, &
626 &
' krhs = ',i1,
' knew = ',i1,
' ptsk = ',i1)
629#ifdef INITIALIZE_AUTOMATIC
660# if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
672 tl_drhs_p(i,j)=inival
690 tl_gzeta2(i,j)=inival
691# if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
692 tl_gzetasa(i,j)=inival
694 tl_rhs_ubar(i,j)=inival
695 tl_rhs_vbar(i,j)=inival
696 tl_rhs_zeta(i,j)=inival
697 tl_zeta_new(i,j)=inival
707#if defined DISTRIBUTE && !defined NESTING
718 dnew(i,j)=zeta(i,j,knew)+h(i,j)
719 drhs(i,j)=zeta(i,j,krhs)+h(i,j)
720 tl_drhs(i,j)=tl_zeta(i,j,krhs)+tl_h(i,j)
726 cff1=cff*(drhs(i,j)+drhs(i-1,j))
727 tl_cff1=cff*(tl_drhs(i,j)+tl_drhs(i-1,j))
728 duon(i,j)=ubar(i,j,krhs)*cff1
729 tl_duon(i,j)=tl_ubar(i,j,krhs)*cff1+ &
730 & ubar(i,j,krhs)*tl_cff1
732 duson(i,j)=ubar_stokes(i,j)*cff1
733 tl_duson(i,j)=tl_ubar_stokes(i,j)*cff1+ &
734 & ubar_stokes(i,j)*tl_cff1
735 duon(i,j)=duon(i,j)+duson(i,j)
736 tl_duon(i,j)=tl_duon(i,j)+tl_duson(i,j)
743 cff1=cff*(drhs(i,j)+drhs(i,j-1))
744 tl_cff1=cff*(tl_drhs(i,j)+tl_drhs(i,j-1))
745 dvom(i,j)=vbar(i,j,krhs)*cff1
746 tl_dvom(i,j)=tl_vbar(i,j,krhs)*cff1+ &
747 & vbar(i,j,krhs)*tl_cff1
749 dvsom(i,j)=vbar_stokes(i,j)*cff1
750 tl_dvsom(i,j)=tl_vbar_stokes(i,j)*cff1+ &
751 & vbar_stokes(i,j)*tl_cff1
752 dvom(i,j)=dvom(i,j)+dvsom(i,j)
753 tl_dvom(i,j)=tl_dvom(i,j)+tl_dvsom(i,j)
760 DO j=jstrvm2-1,jendp2
761 DO i=istrum2-1,iendp2
762 dnew(i,j)=zeta(i,j,knew)+h(i,j)
763 drhs(i,j)=zeta(i,j,krhs)+h(i,j)
764 tl_drhs(i,j)=tl_zeta(i,j,krhs)+tl_h(i,j)
767 DO j=jstrvm2-1,jendp2
770 cff1=cff*(drhs(i,j)+drhs(i-1,j))
771 tl_cff1=cff*(tl_drhs(i,j)+tl_drhs(i-1,j))
772 duon(i,j)=ubar(i,j,krhs)*cff1
773 tl_duon(i,j)=tl_ubar(i,j,krhs)*cff1+ &
774 & ubar(i,j,krhs)*tl_cff1
776 duson(i,j)=ubar_stokes(i,j)*cff1
777 tl_duson(i,j)=tl_ubar_stokes(i,j)*cff1+ &
778 & ubar_stokes(i,j)*tl_cff1
779 duon(i,j)=duon(i,j)+duson(i,j)
780 tl_duon(i,j)=tl_duon(i,j)+tl_duson(i,j)
785 DO i=istrum2-1,iendp2
787 cff1=cff*(drhs(i,j)+drhs(i,j-1))
788 tl_cff1=cff*(tl_drhs(i,j)+tl_drhs(i,j-1))
789 dvom(i,j)=vbar(i,j,krhs)*cff1
790 tl_dvom(i,j)=tl_vbar(i,j,krhs)*cff1+ &
791 & vbar(i,j,krhs)*tl_cff1
793 dvsom(i,j)=vbar_stokes(i,j)*cff1
794 tl_dvsom(i,j)=tl_vbar_stokes(i,j)*cff1+ &
795 & vbar_stokes(i,j)*tl_cff1
796 dvom(i,j)=dvom(i,j)+dvsom(i,j)
797 tl_dvom(i,j)=tl_dvom(i,j)+tl_dvsom(i,j)
806 & imins, imaxs, jmins, jmaxs, &
809 & imins, imaxs, jmins, jmaxs, &
812 & imins, imaxs, jmins, jmaxs, &
815 & imins, imaxs, jmins, jmaxs, &
820 & imins, imaxs, jmins, jmaxs, &
825 & imins, imaxs, jmins, jmaxs, &
830#if !defined FORWARD_RHS
848 & lbi, ubi, lbj, ubj, &
849 & imins, imaxs, jmins, jmaxs, &
861 & lbi, ubi, lbj, ubj, &
862 & imins, imaxs, jmins, jmaxs, &
871 & lbi, ubi, lbj, ubj, &
872 & imins, imaxs, jmins, jmaxs, &
877 & om_v, on_u, ubar, vbar, &
878 & tl_ubar, tl_vbar, &
879 & drhs, duon, dvom, &
880 & tl_drhs, tl_duon, tl_dvom)
889 IF (first_2d_step)
THEN
893 cff2=(-1.0_r8/12.0_r8)*
weight(2,
iif(ng)+1,ng)
898 tl_zt_avg1(i,j)=0.0_r8
903 tl_du_avg1(i,j)=0.0_r8
906 tl_du_avg2(i,j)=cff2*tl_duon(i,j)
913 tl_dv_avg1(i,j)=0.0_r8
916 tl_dv_avg2(i,j)=cff2*tl_dvom(i,j)
926 cff2=(8.0_r8/12.0_r8)*
weight(2,
iif(ng) ,ng)- &
927 & (1.0_r8/12.0_r8)*
weight(2,
iif(ng)+1,ng)
932 tl_zt_avg1(i,j)=tl_zt_avg1(i,j)+cff1*tl_zeta(i,j,krhs)
937 tl_du_avg1(i,j)=tl_du_avg1(i,j)+cff1*tl_duon(i,j)
941 tl_du_avg1(i,j)=tl_du_avg1(i,j)-cff1*tl_duson(i,j)
945 tl_du_avg2(i,j)=tl_du_avg2(i,j)+cff2*tl_duon(i,j)
952 tl_dv_avg1(i,j)=tl_dv_avg1(i,j)+cff1*tl_dvom(i,j)
956 tl_dv_avg1(i,j)=tl_dv_avg1(i,j)-cff1*tl_dvsom(i,j)
960 tl_dv_avg2(i,j)=tl_dv_avg2(i,j)+cff2*tl_dvom(i,j)
965 IF (first_2d_step)
THEN
968 cff2=(5.0_r8/12.0_r8)*
weight(2,
iif(ng),ng)
974 tl_du_avg2(i,j)=tl_du_avg2(i,j)+cff2*tl_duon(i,j)
981 tl_dv_avg2(i,j)=tl_dv_avg2(i,j)+cff2*tl_dvom(i,j)
1002 & lbi, ubi, lbj, ubj, &
1009 & lbi, ubi, lbj, ubj, &
1016 & lbi, ubi, lbj, ubj, &
1024 & lbi, ubi, lbj, ubj, &
1031 & lbi, ubi, lbj, ubj, &
1044 & lbi, ubi, lbj, ubj, &
1047 & tl_zt_avg1, tl_du_avg1, tl_dv_avg1)
1056 & lbi, ubi, lbj, ubj, &
1059 & tl_du_avg2, tl_dv_avg2)
1064#ifdef WET_DRY_NOT_YET
1103#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
1106#if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE && \
1108 IF (first_2d_step.and.soinitial(ng))
THEN
1110 IF (first_2d_step)
THEN
1118 tl_rhs_zeta(i,j)=(tl_duon(i,j)-tl_duon(i+1,j))+ &
1119 & (tl_dvom(i,j)-tl_dvom(i,j+1))
1124 zeta_new(i,j)=zeta(i,j,knew)
1125 tl_zeta_new(i,j)=tl_zeta(i,j,kstp)+ &
1126 & pm(i,j)*pn(i,j)*cff1*tl_rhs_zeta(i,j)
1128 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
1129 tl_zeta_new(i,j)=tl_zeta_new(i,j)*rmask(i,j)
1133 tl_dnew(i,j)=tl_zeta_new(i,j)+tl_h(i,j)
1135 zwrk(i,j)=0.5_r8*(zeta(i,j,kstp)+zeta_new(i,j))
1136 tl_zwrk(i,j)=0.5_r8*(tl_zeta(i,j,kstp)+tl_zeta_new(i,j))
1137#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
1138 gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
1139 tl_gzeta(i,j)=(fac+rhos(i,j))*tl_zwrk(i,j)+ &
1140 & tl_rhos(i,j)*zwrk(i,j)
1141 gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
1142 tl_gzeta2(i,j)=tl_gzeta(i,j)*zwrk(i,j)+ &
1143 & gzeta(i,j)*tl_zwrk(i,j)
1144 gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
1145 tl_gzetasa(i,j)=tl_zwrk(i,j)*(rhos(i,j)-rhoa(i,j))+ &
1146 & zwrk(i,j)*(tl_rhos(i,j)-tl_rhoa(i,j))
1148 gzeta(i,j)=zwrk(i,j)
1149 tl_gzeta(i,j)=tl_zwrk(i,j)
1150 gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
1151 tl_gzeta2(i,j)=2.0_r8*tl_zwrk(i,j)*zwrk(i,j)
1158 cff5=1.0_r8-2.0_r8*cff4
1164 tl_rhs_zeta(i,j)=(tl_duon(i,j)-tl_duon(i+1,j))+ &
1165 & (tl_dvom(i,j)-tl_dvom(i,j+1))
1170 zeta_new(i,j)=zeta(i,j,knew)
1171 tl_zeta_new(i,j)=tl_zeta(i,j,kstp)+ &
1172 & pm(i,j)*pn(i,j)*cff1*tl_rhs_zeta(i,j)
1174 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
1175 tl_zeta_new(i,j)=tl_zeta_new(i,j)*rmask(i,j)
1179 tl_dnew(i,j)=tl_zeta_new(i,j)+tl_h(i,j)
1181 zwrk(i,j)=cff5*zeta(i,j,krhs)+ &
1182 & cff4*(zeta(i,j,kstp)+zeta_new(i,j))
1183 tl_zwrk(i,j)=cff5*tl_zeta(i,j,krhs)+ &
1184 & cff4*(tl_zeta(i,j,kstp)+tl_zeta_new(i,j))
1185#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
1186 gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
1187 tl_gzeta(i,j)=(fac+rhos(i,j))*tl_zwrk(i,j)+ &
1188 & tl_rhos(i,j)*zwrk(i,j)
1189 gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
1190 tl_gzeta2(i,j)=tl_gzeta(i,j)*zwrk(i,j)+ &
1191 & gzeta(i,j)*tl_zwrk(i,j)
1192 gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
1193 tl_gzetasa(i,j)=tl_zwrk(i,j)*(rhos(i,j)-rhoa(i,j))+ &
1194 & zwrk(i,j)*(tl_rhos(i,j)-tl_rhoa(i,j))
1196 gzeta(i,j)=zwrk(i,j)
1197 tl_gzeta(i,j)=tl_zwrk(i,j)
1198 gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
1199 tl_gzeta2(i,j)=2.0_r8*tl_zwrk(i,j)*zwrk(i,j)
1203 ELSE IF (corrector_2d_step)
THEN
1204 cff1=
dtfast(ng)*5.0_r8/12.0_r8
1205 cff2=
dtfast(ng)*8.0_r8/12.0_r8
1206 cff3=
dtfast(ng)*1.0_r8/12.0_r8
1214 tl_cff=cff1*((tl_duon(i,j)-tl_duon(i+1,j))+ &
1215 & (tl_dvom(i,j)-tl_dvom(i,j+1)))
1222 zeta_new(i,j)=zeta(i,j,knew)
1223 tl_zeta_new(i,j)=tl_zeta(i,j,kstp)+ &
1224 & pm(i,j)*pn(i,j)*(tl_cff+ &
1225 & cff2*tl_rzeta(i,j,kstp)- &
1226 & cff3*tl_rzeta(i,j,ptsk))
1228 zeta_new(i,j)=zeta_new(i,j)*rmask(i,j)
1229 tl_zeta_new(i,j)=tl_zeta_new(i,j)*rmask(i,j)
1233 tl_dnew(i,j)=tl_zeta_new(i,j)+tl_h(i,j)
1235 zwrk(i,j)=cff5*zeta_new(i,j)+cff4*zeta(i,j,krhs)
1236 tl_zwrk(i,j)=cff5*tl_zeta_new(i,j)+cff4*tl_zeta(i,j,krhs)
1237#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
1238 gzeta(i,j)=(fac+rhos(i,j))*zwrk(i,j)
1239 tl_gzeta(i,j)=(fac+rhos(i,j))*tl_zwrk(i,j)+ &
1240 & tl_rhos(i,j)*zwrk(i,j)
1241 gzeta2(i,j)=gzeta(i,j)*zwrk(i,j)
1242 tl_gzeta2(i,j)=tl_gzeta(i,j)*zwrk(i,j)+ &
1243 & gzeta(i,j)*tl_zwrk(i,j)
1244 gzetasa(i,j)=zwrk(i,j)*(rhos(i,j)-rhoa(i,j))
1245 tl_gzetasa(i,j)=tl_zwrk(i,j)*(rhos(i,j)-rhoa(i,j))+ &
1246 & zwrk(i,j)*(tl_rhos(i,j)-tl_rhoa(i,j))
1248 gzeta(i,j)=zwrk(i,j)
1249 tl_gzeta(i,j)=tl_zwrk(i,j)
1250 gzeta2(i,j)=zwrk(i,j)*zwrk(i,j)
1251 tl_gzeta2(i,j)=2.0_r8*tl_zwrk(i,j)*zwrk(i,j)
1259#ifdef WET_DRY_NOT_YET
1268 tl_zeta(i,j,knew)=tl_zeta_new(i,j)
1269#if defined WET_DRY_NOT_YET && defined MASKING
1273 tl_zeta(i,j,knew)=tl_zeta(i,j,knew)- &
1274 & tl_h(i,j)*(1.0_r8-rmask(i,j))
1286 tl_rzeta(i,j,krhs)=tl_rhs_zeta(i,j)
1296 & lbi, ubi, lbj, ubj, &
1297 & tl_rzeta(:,:,krhs))
1308 & lbi, ubi, lbj, ubj, &
1311 & tl_rzeta(:,:,krhs))
1321 IF (int(
sources(ng)%Dsrc(is)).eq.2)
THEN
1324 IF (((istrr.le.i).and.(i.le.iendr)).and. &
1325 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
1336#if defined SEDIMENT_NOT_YET && defined SED_MORPH_NOT_YET
1347 tl_cff=fac*(tl_bed_thick(i,j,nstp)-tl_bed_thick(i,j,nnew))
1350 tl_h(i,j)=tl_h(i,j)-tl_cff
1364 & lbi, ubi, lbj, ubj, &
1365 & imins, imaxs, jmins, jmaxs, &
1366 & krhs, kstp, knew, &
1375 & lbi, ubi, lbj, ubj, &
1376 & tl_zeta(:,:,knew))
1387 & lbi, ubi, lbj, ubj, &
1390 & tl_zeta(:,:,knew))
1403#if !defined SOLVE3D && defined ATM_PRESS
1404 fac3=0.5_r8*100.0_r8/
rho0
1413#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
1426 tl_rhs_ubar(i,j)=cff1*on_u(i,j)* &
1433 & (tl_gzeta(i-1,j)- &
1434 & tl_gzeta(i ,j))+ &
1435#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
1438 & (gzetasa(i-1,j)+ &
1440 & cff2*(rhoa(i-1,j)- &
1446 & (tl_gzetasa(i-1,j)+ &
1447 & tl_gzetasa(i ,j)+ &
1448 & cff2*((tl_rhoa(i-1,j)- &
1454 & (tl_zwrk(i-1,j)- &
1455 & tl_zwrk(i ,j))))+ &
1457 & (tl_gzeta2(i-1,j)- &
1459#if defined ATM_PRESS && !defined SOLVE3D
1466 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)- &
1468 & (tl_h(i-1,j)+tl_h(i,j)+ &
1469 & tl_gzeta(i-1,j)+tl_gzeta(i,j))* &
1470 & (pair(i,j)-pair(i-1,j))
1472#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
1479 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)- &
1481 & ((tl_h(i-1,j)+tl_h(i,j)+ &
1482 & tl_gzeta(i-1,j)+tl_gzeta(i,j))* &
1483 & (eq_tide(i,j)-eq_tide(i-1,j))+ &
1484 & (h(i-1,j)+h(i,j)+ &
1485 & gzeta(i-1,j)+gzeta(i,j))* &
1486 & (tl_eq_tide(i,j)-tl_eq_tide(i-1,j)))
1488#ifdef DIAGNOSTICS_UV
1492 IF (j.ge.jstrv)
THEN
1499#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
1512 tl_rhs_vbar(i,j)=cff1*om_v(i,j)* &
1519 & (tl_gzeta(i,j-1)- &
1520 & tl_gzeta(i,j ))+ &
1521#if defined VAR_RHO_2D_NOT_YET && defined SOLVE3D
1524 & (gzetasa(i,j-1)+ &
1526 & cff2*(rhoa(i,j-1)- &
1532 & (tl_gzetasa(i,j-1)+ &
1533 & tl_gzetasa(i,j )+ &
1534 & cff2*((tl_rhoa(i,j-1)- &
1540 & (tl_zwrk(i,j-1)- &
1541 & tl_zwrk(i,j ))))+ &
1543 & (tl_gzeta2(i,j-1)- &
1545#if defined ATM_PRESS && !defined SOLVE3D
1552 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)- &
1554 & (tl_h(i,j-1)+tl_h(i,j)+ &
1555 & tl_gzeta(i,j-1)+tl_gzeta(i,j))* &
1556 & (pair(i,j)-pair(i,j-1))
1558#if defined TIDE_GENERATING_FORCES && !defined SOLVE3D
1565 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)- &
1567 & ((tl_h(i,j-1)+tl_h(i,j)+ &
1568 & tl_gzeta(i,j-1)+tl_gzeta(i,j))* &
1569 & (eq_tide(i,j)-eq_tide(i,j-1))+ &
1570 & (h(i,j-1)+h(i,j)+ &
1571 & gzeta(i,j-1)+gzeta(i,j))* &
1572 & (tl_eq_tide(i,j)-tl_eq_tide(i,j-1)))
1574#ifdef DIAGNOSTICS_UV
1586# ifdef UV_C2ADVECTION
1600 tl_ufx(i,j)=0.25_r8* &
1601 & ((tl_duon(i,j)+tl_duon(i+1,j))* &
1602 & (ubar(i ,j,krhs)+ &
1604 & ubar_stokes(i ,j)+ &
1605 & ubar_stokes(i+1,j)+ &
1607 & ubar(i+1,j,krhs))+ &
1608 & (duon(i,j)+duon(i+1,j))* &
1609 & (tl_ubar(i ,j,krhs)+ &
1611 & tl_ubar_stokes(i ,j)+ &
1612 & tl_ubar_stokes(i+1,j)+ &
1614 & tl_ubar(i+1,j,krhs)))
1628 tl_ufe(i,j)=0.25_r8* &
1629 & ((tl_dvom(i,j)+tl_dvom(i-1,j))* &
1630 & (ubar(i,j ,krhs)+ &
1632 & ubar_stokes(i,j )+ &
1633 & ubar_stokes(i,j-1)+ &
1635 & ubar(i,j-1,krhs))+ &
1636 & (dvom(i,j)+dvom(i-1,j))* &
1637 & (tl_ubar(i,j ,krhs)+ &
1639 & tl_ubar_stokes(i,j )+ &
1640 & tl_ubar_stokes(i,j-1)+ &
1642 & tl_ubar(i,j-1,krhs)))
1656 tl_vfx(i,j)=0.25_r8* &
1657 & ((tl_duon(i,j)+tl_duon(i,j-1))* &
1658 & (vbar(i ,j,krhs)+ &
1660 & vbar_stokes(i ,j)+ &
1661 & vbar_stokes(i-1,j)+ &
1663 & vbar(i-1,j,krhs))+ &
1664 & (duon(i,j)+duon(i,j-1))* &
1665 & (tl_vbar(i ,j,krhs)+ &
1667 & tl_vbar_stokes(i ,j)+ &
1668 & tl_vbar_stokes(i-1,j)+ &
1670 & tl_vbar(i-1,j,krhs)))
1684 tl_vfe(i,j)=0.25_r8* &
1685 & ((tl_dvom(i,j)+tl_dvom(i,j+1))* &
1686 & (vbar(i,j ,krhs)+ &
1688 & vbar_stokes(i,j )+ &
1689 & vbar_stokes(i,j+1)+ &
1691 & vbar(i,j+1,krhs))+ &
1692 & (dvom(i,j)+dvom(i,j+1))* &
1693 & (tl_vbar(i,j ,krhs)+ &
1695 & tl_vbar_stokes(i,j )+ &
1696 & tl_vbar_stokes(i,j+1)+ &
1698 & tl_vbar(i,j+1,krhs)))
1707 grad(i,j)=ubar(i-1,j,krhs)-2.0_r8*ubar(i,j,krhs)+ &
1709 & ubar_stokes(i-1,j)-2.0_r8*ubar_stokes(i,j)+ &
1710 & ubar_stokes(i+1,j)+ &
1713 tl_grad(i,j)=tl_ubar(i-1,j,krhs)-2.0_r8*tl_ubar(i,j,krhs)+ &
1715 & tl_ubar_stokes(i-1,j)-2.0_r8*tl_ubar_stokes(i,j)+&
1716 & tl_ubar_stokes(i+1,j)+ &
1718 & tl_ubar(i+1,j,krhs)
1719 dgrad(i,j)=duon(i-1,j)-2.0_r8*duon(i,j)+duon(i+1,j)
1720 tl_dgrad(i,j)=tl_duon(i-1,j)-2.0_r8*tl_duon(i,j)+ &
1725 IF (
domain(ng)%Western_Edge(tile))
THEN
1727 grad(istr,j)=grad(istr+1,j)
1728 tl_grad(istr,j)=tl_grad(istr+1,j)
1729 dgrad(istr,j)=dgrad(istr+1,j)
1730 tl_dgrad(istr,j)=tl_dgrad(istr+1,j)
1735 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1737 grad(iend+1,j)=grad(iend,j)
1738 tl_grad(iend+1,j)=tl_grad(iend,j)
1739 dgrad(iend+1,j)=dgrad(iend,j)
1740 tl_dgrad(iend+1,j)=tl_dgrad(iend,j)
1758 tl_ufx(i,j)=0.25_r8* &
1759 & ((ubar(i ,j,krhs)+ &
1761 & ubar_stokes(i ,j)+ &
1762 & ubar_stokes(i+1,j)+ &
1764 & ubar(i+1,j,krhs)- &
1765 & cff*(grad(i,j)+grad(i+1,j)))* &
1766 & (tl_duon(i,j)+tl_duon(i+1,j)- &
1767 & cff*(tl_dgrad(i,j)+tl_dgrad(i+1,j)))+ &
1768 & (tl_ubar(i ,j,krhs)+ &
1770 & tl_ubar_stokes(i ,j)+ &
1771 & tl_ubar_stokes(i+1,j)+ &
1773 & tl_ubar(i+1,j,krhs)- &
1774 & cff*(tl_grad(i,j)+tl_grad(i+1,j)))* &
1775 & (duon(i,j)+duon(i+1,j)- &
1776 & cff*(dgrad(i,j)+dgrad(i+1,j))))
1782 grad(i,j)=ubar(i,j-1,krhs)-2.0_r8*ubar(i,j,krhs)+ &
1784 & ubar_stokes(i,j-1)-2.0_r8*ubar_stokes(i,j)+ &
1785 & ubar_stokes(i,j+1)+ &
1788 tl_grad(i,j)=tl_ubar(i,j-1,krhs)-2.0_r8*tl_ubar(i,j,krhs)+ &
1790 & tl_ubar_stokes(i,j-1)-2.0_r8*tl_ubar_stokes(i,j)+&
1791 & tl_ubar_stokes(i,j+1)+ &
1793 & tl_ubar(i,j+1,krhs)
1797 IF (
domain(ng)%Southern_Edge(tile))
THEN
1799 grad(i,jstr-1)=grad(i,jstr)
1800 tl_grad(i,jstr-1)=tl_grad(i,jstr)
1805 IF (
domain(ng)%Northern_Edge(tile))
THEN
1807 grad(i,jend+1)=grad(i,jend)
1808 tl_grad(i,jend+1)=tl_grad(i,jend)
1814 dgrad(i,j)=dvom(i-1,j)-2.0_r8*dvom(i,j)+dvom(i+1,j)
1815 tl_dgrad(i,j)=tl_dvom(i-1,j)-2.0_r8*tl_dvom(i,j)+ &
1833 tl_ufe(i,j)=0.25_r8* &
1834 & ((tl_ubar(i,j ,krhs)+ &
1836 & tl_ubar_stokes(i,j )+ &
1837 & tl_ubar_stokes(i,j-1)+ &
1839 & tl_ubar(i,j-1,krhs)- &
1840 & cff*(tl_grad(i,j)+tl_grad(i,j-1)))* &
1841 & (dvom(i,j)+dvom(i-1,j)- &
1842 & cff*(dgrad(i,j)+dgrad(i-1,j)))+ &
1843 & (ubar(i,j ,krhs)+ &
1845 & ubar_stokes(i,j )+ &
1846 & ubar_stokes(i,j-1)+ &
1848 & ubar(i,j-1,krhs)- &
1849 & cff*(grad(i,j)+grad(i,j-1)))* &
1850 & (tl_dvom(i,j)+tl_dvom(i-1,j)- &
1851 & cff*(tl_dgrad(i,j)+tl_dgrad(i-1,j))))
1857 grad(i,j)=vbar(i-1,j,krhs)-2.0_r8*vbar(i,j,krhs)+ &
1859 & vbar_stokes(i-1,j)-2.0_r8*vbar_stokes(i,j)+ &
1860 & vbar_stokes(i+1,j)+ &
1863 tl_grad(i,j)=tl_vbar(i-1,j,krhs)-2.0_r8*tl_vbar(i,j,krhs)+ &
1865 & tl_vbar_stokes(i-1,j)-2.0_r8*tl_vbar_stokes(i,j)+&
1866 & tl_vbar_stokes(i+1,j)+ &
1868 & tl_vbar(i+1,j,krhs)
1872 IF (
domain(ng)%Western_Edge(tile))
THEN
1874 grad(istr-1,j)=grad(istr,j)
1875 tl_grad(istr-1,j)=tl_grad(istr,j)
1880 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1882 grad(iend+1,j)=grad(iend,j)
1883 tl_grad(iend+1,j)=tl_grad(iend,j)
1889 dgrad(i,j)=duon(i,j-1)-2.0_r8*duon(i,j)+duon(i,j+1)
1890 tl_dgrad(i,j)=tl_duon(i,j-1)-2.0_r8*tl_duon(i,j)+ &
1908 tl_vfx(i,j)=0.25_r8* &
1909 & ((tl_vbar(i ,j,krhs)+ &
1911 & tl_vbar_stokes(i ,j)+ &
1912 & tl_vbar_stokes(i-1,j)+ &
1914 & tl_vbar(i-1,j,krhs)- &
1915 & cff*(tl_grad(i,j)+tl_grad(i-1,j)))* &
1916 & (duon(i,j)+duon(i,j-1)- &
1917 & cff*(dgrad(i,j)+dgrad(i,j-1)))+ &
1918 & (vbar(i ,j,krhs)+ &
1920 & vbar_stokes(i ,j)+ &
1921 & vbar_stokes(i-1,j)+ &
1923 & vbar(i-1,j,krhs)- &
1924 & cff*(grad(i,j)+grad(i-1,j)))* &
1925 & (tl_duon(i,j)+tl_duon(i,j-1)- &
1926 & cff*(tl_dgrad(i,j)+tl_dgrad(i,j-1))))
1932 grad(i,j)=vbar(i,j-1,krhs)-2.0_r8*vbar(i,j,krhs)+ &
1934 & vbar_stokes(i,j-1)-2.0_r8*vbar_stokes(i,j)+ &
1935 & vbar_stokes(i,j+1)+ &
1938 tl_grad(i,j)=tl_vbar(i,j-1,krhs)-2.0_r8*tl_vbar(i,j,krhs)+ &
1940 & tl_vbar_stokes(i,j-1)-2.0_r8*tl_vbar_stokes(i,j)+&
1941 & tl_vbar_stokes(i,j+1)+ &
1943 & tl_vbar(i,j+1,krhs)
1944 dgrad(i,j)=dvom(i,j-1)-2.0_r8*dvom(i,j)+dvom(i,j+1)
1945 tl_dgrad(i,j)=tl_dvom(i,j-1)-2.0_r8*tl_dvom(i,j)+ &
1950 IF (
domain(ng)%Southern_Edge(tile))
THEN
1952 grad(i,jstr)=grad(i,jstr+1)
1953 tl_grad(i,jstr)=tl_grad(i,jstr+1)
1954 dgrad(i,jstr)=dgrad(i,jstr+1)
1955 tl_dgrad(i,jstr)=tl_dgrad(i,jstr+1)
1960 IF (
domain(ng)%Northern_Edge(tile))
THEN
1962 grad(i,jend+1)=grad(i,jend)
1963 tl_grad(i,jend+1)=tl_grad(i,jend)
1964 dgrad(i,jend+1)=dgrad(i,jend)
1965 tl_dgrad(i,jend+1)=tl_dgrad(i,jend)
1983 tl_vfe(i,j)=0.25_r8* &
1984 & ((tl_vbar(i,j ,krhs)+ &
1986 & tl_vbar_stokes(i,j )+ &
1987 & tl_vbar_stokes(i,j+1)+ &
1989 & tl_vbar(i,j+1,krhs)- &
1990 & cff*(tl_grad(i,j)+tl_grad(i,j+1)))* &
1991 & (dvom(i,j)+dvom(i,j+1)- &
1992 & cff*(dgrad(i,j)+dgrad(i,j+1)))+ &
1993 & (vbar(i,j ,krhs)+ &
1995 & vbar_stokes(i,j )+ &
1996 & vbar_stokes(i,j+1)+ &
1998 & vbar(i,j+1,krhs)- &
1999 & cff*(grad(i,j)+grad(i,j+1)))* &
2000 & (tl_dvom(i,j)+tl_dvom(i,j+1)- &
2001 & cff*(tl_dgrad(i,j)+tl_dgrad(i,j+1))))
2010 tl_cff1=tl_ufx(i,j)-tl_ufx(i-1,j)
2013 tl_cff2=tl_ufe(i,j+1)-tl_ufe(i,j)
2016 tl_fac=tl_cff1+tl_cff2
2019 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)-tl_fac
2020# if defined DIAGNOSTICS_UV
2031 tl_cff1=tl_vfx(i+1,j)-tl_vfx(i,j)
2034 tl_cff2=tl_vfe(i,j)-tl_vfe(i,j-1)
2037 tl_fac=tl_cff1+tl_cff2
2040 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)-tl_fac
2041# if defined DIAGNOSTICS_UV
2057 cff=0.5_r8*drhs(i,j)*fomn(i,j)
2058 tl_cff=0.5_r8*tl_drhs(i,j)*fomn(i,j)
2066 tl_ufx(i,j)=tl_cff*(vbar(i,j ,krhs)+ &
2068 & vbar_stokes(i,j )+ &
2069 & vbar_stokes(i,j+1)+ &
2071 & vbar(i,j+1,krhs))+ &
2072 & cff*(tl_vbar(i,j ,krhs)+ &
2074 & tl_vbar_stokes(i,j )+ &
2075 & tl_vbar_stokes(i,j+1)+ &
2077 & tl_vbar(i,j+1,krhs))
2085 tl_vfe(i,j)=tl_cff*(ubar(i ,j,krhs)+ &
2087 & ubar_stokes(i ,j)+ &
2088 & ubar_stokes(i+1,j)+ &
2090 & ubar(i+1,j,krhs))+ &
2091 & cff*(tl_ubar(i ,j,krhs)+ &
2093 & tl_ubar_stokes(i ,j)+ &
2094 & tl_ubar_stokes(i+1,j)+ &
2096 & tl_ubar(i+1,j,krhs))
2103 tl_fac1=0.5_r8*(tl_ufx(i,j)+tl_ufx(i-1,j))
2106 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+tl_fac1
2107# if defined DIAGNOSTICS_UV
2116 tl_fac1=0.5_r8*(tl_vfe(i,j)+tl_vfe(i,j-1))
2119 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)-tl_fac1
2120# if defined DIAGNOSTICS_UV
2126#if defined CURVGRID && defined UV_ADV
2134 cff1=0.5_r8*(vbar(i,j ,krhs)+ &
2136 & vbar_stokes(i,j )+ &
2137 & vbar_stokes(i,j+1)+ &
2140 tl_cff1=0.5_r8*(tl_vbar(i,j ,krhs)+ &
2142 & tl_vbar_stokes(i,j )+ &
2143 & tl_vbar_stokes(i,j+1)+ &
2145 & tl_vbar(i,j+1,krhs))
2146 cff2=0.5_r8*(ubar(i ,j,krhs)+ &
2148 & ubar_stokes(i ,j)+ &
2149 & ubar_stokes(i+1,j)+ &
2152 tl_cff2=0.5_r8*(tl_ubar(i ,j,krhs)+ &
2154 & tl_ubar_stokes(i ,j)+ &
2155 & tl_ubar_stokes(i+1,j)+ &
2157 & tl_ubar(i+1,j,krhs))
2159 tl_cff3=tl_cff1*dndx(i,j)
2161 tl_cff4=tl_cff2*dmde(i,j)
2162 cff=drhs(i,j)*(cff3-cff4)
2163 tl_cff=tl_drhs(i,j)*(cff3-cff4)+ &
2164 & drhs(i,j)*(tl_cff3-tl_cff4)
2167 tl_ufx(i,j)=tl_cff*cff1+cff*tl_cff1
2170 tl_vfe(i,j)=tl_cff*cff2+cff*tl_cff2
2171# if defined DIAGNOSTICS_UV
2182 tl_fac1=0.5_r8*(tl_ufx(i,j)+tl_ufx(i-1,j))
2185 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+tl_fac1
2186# if defined DIAGNOSTICS_UV
2198 tl_fac1=0.5_r8*(tl_vfe(i,j)+tl_vfe(i,j-1))
2201 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)-tl_fac1
2202# if defined DIAGNOSTICS_UV
2211#if defined UV_VIS2 || defined UV_VIS4
2224 drhs_p(i,j)=0.25_r8*(drhs(i,j )+drhs(i-1,j )+ &
2225 & drhs(i,j-1)+drhs(i-1,j-1))
2226 tl_drhs_p(i,j)=0.25_r8*(tl_drhs(i,j )+tl_drhs(i-1,j )+ &
2227 & tl_drhs(i,j-1)+tl_drhs(i-1,j-1))
2250 tl_cff=visc2_r(i,j)*0.5_r8* &
2253 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,krhs)- &
2254 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,krhs))- &
2256 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,krhs)- &
2257 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,krhs)))+ &
2260 & ((pn(i ,j)+pn(i+1,j))*tl_ubar(i+1,j,krhs)- &
2261 & (pn(i-1,j)+pn(i ,j))*tl_ubar(i ,j,krhs))- &
2263 & ((pm(i,j )+pm(i,j+1))*tl_vbar(i,j+1,krhs)- &
2264 & (pm(i,j-1)+pm(i,j ))*tl_vbar(i,j ,krhs))))
2267 tl_ufx(i,j)=on_r(i,j)*on_r(i,j)*tl_cff
2270 tl_vfe(i,j)=om_r(i,j)*om_r(i,j)*tl_cff
2283 tl_cff=visc2_p(i,j)*0.5_r8* &
2284 & (tl_drhs_p(i,j)* &
2286 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,krhs)- &
2287 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,krhs))+ &
2289 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,krhs)- &
2290 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,krhs)))+ &
2293 & ((pn(i ,j-1)+pn(i ,j))*tl_vbar(i ,j,krhs)- &
2294 & (pn(i-1,j-1)+pn(i-1,j))*tl_vbar(i-1,j,krhs))+ &
2296 & ((pm(i-1,j )+pm(i,j ))*tl_ubar(i,j ,krhs)- &
2297 & (pm(i-1,j-1)+pm(i,j-1))*tl_ubar(i,j-1,krhs))))
2301 tl_cff=tl_cff*pmask(i,j)
2305 tl_ufe(i,j)=om_p(i,j)*om_p(i,j)*tl_cff
2308 tl_vfx(i,j)=on_p(i,j)*on_p(i,j)*tl_cff
2318 tl_cff1=0.5_r8*(pn(i-1,j)+pn(i,j))* &
2319 & (tl_ufx(i,j )-tl_ufx(i-1,j))
2322 tl_cff2=0.5_r8*(pm(i-1,j)+pm(i,j))* &
2323 & (tl_ufe(i,j+1)-tl_ufe(i ,j))
2326 tl_fac=tl_cff1+tl_cff2
2329 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+tl_fac
2330# if defined DIAGNOSTICS_UV
2341 tl_cff1=0.5_r8*(pn(i,j-1)+pn(i,j))* &
2342 & (tl_vfx(i+1,j)-tl_vfx(i,j ))
2345 tl_cff2=0.5_r8*(pm(i,j-1)+pm(i,j))* &
2346 & (tl_vfe(i ,j)-tl_vfe(i,j-1))
2349 tl_fac=tl_cff1-tl_cff2
2352 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+tl_fac
2353# if defined DIAGNOSTICS_UV
2377 cff=visc4_r(i,j)*0.5_r8* &
2379 & ((pn(i ,j)+pn(i+1,j))*ubar(i+1,j,krhs)- &
2380 & (pn(i-1,j)+pn(i ,j))*ubar(i ,j,krhs))- &
2382 & ((pm(i,j )+pm(i,j+1))*vbar(i,j+1,krhs)- &
2383 & (pm(i,j-1)+pm(i,j ))*vbar(i,j ,krhs)))
2384 tl_cff=visc4_r(i,j)*0.5_r8* &
2386 & ((pn(i ,j)+pn(i+1,j))*tl_ubar(i+1,j,krhs)- &
2387 & (pn(i-1,j)+pn(i ,j))*tl_ubar(i ,j,krhs))- &
2389 & ((pm(i,j )+pm(i,j+1))*tl_vbar(i,j+1,krhs)- &
2390 & (pm(i,j-1)+pm(i,j ))*tl_vbar(i,j ,krhs)))
2391 ufx(i,j)=on_r(i,j)*on_r(i,j)*cff
2392 tl_ufx(i,j)=on_r(i,j)*on_r(i,j)*tl_cff
2393 vfe(i,j)=om_r(i,j)*om_r(i,j)*cff
2394 tl_vfe(i,j)=om_r(i,j)*om_r(i,j)*tl_cff
2399 cff=visc4_p(i,j)*0.5_r8* &
2401 & ((pn(i ,j-1)+pn(i ,j))*vbar(i ,j,krhs)- &
2402 & (pn(i-1,j-1)+pn(i-1,j))*vbar(i-1,j,krhs))+ &
2404 & ((pm(i-1,j )+pm(i,j ))*ubar(i,j ,krhs)- &
2405 & (pm(i-1,j-1)+pm(i,j-1))*ubar(i,j-1,krhs)))
2406 tl_cff=visc4_p(i,j)*0.5_r8* &
2408 & ((pn(i ,j-1)+pn(i ,j))*tl_vbar(i ,j,krhs)- &
2409 & (pn(i-1,j-1)+pn(i-1,j))*tl_vbar(i-1,j,krhs))+ &
2411 & ((pm(i-1,j )+pm(i,j ))*tl_ubar(i,j ,krhs)- &
2412 & (pm(i-1,j-1)+pm(i,j-1))*tl_ubar(i,j-1,krhs)))
2415 tl_cff=tl_cff*pmask(i,j)
2417 ufe(i,j)=om_p(i,j)*om_p(i,j)*cff
2418 tl_ufe(i,j)=om_p(i,j)*om_p(i,j)*tl_cff
2419 vfx(i,j)=on_p(i,j)*on_p(i,j)*cff
2420 tl_vfx(i,j)=on_p(i,j)*on_p(i,j)*tl_cff
2428 lapu(i,j)=0.125_r8* &
2429 & (pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))* &
2430 & ((pn(i-1,j)+pn(i,j))* &
2431 & (ufx(i,j )-ufx(i-1,j))+ &
2432 & (pm(i-1,j)+pm(i,j))* &
2433 & (ufe(i,j+1)-ufe(i ,j)))
2434 tl_lapu(i,j)=0.125_r8* &
2435 & (pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))* &
2436 & ((pn(i-1,j)+pn(i,j))* &
2437 & (tl_ufx(i,j )-tl_ufx(i-1,j))+ &
2438 & (pm(i-1,j)+pm(i,j))* &
2439 & (tl_ufe(i,j+1)-tl_ufe(i ,j)))
2444 lapv(i,j)=0.125_r8* &
2445 & (pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))* &
2446 & ((pn(i,j-1)+pn(i,j))* &
2447 & (vfx(i+1,j)-vfx(i,j ))- &
2448 & (pm(i,j-1)+pm(i,j))* &
2449 & (vfe(i ,j)-vfe(i,j-1)))
2450 tl_lapv(i,j)=0.125_r8* &
2451 & (pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))* &
2452 & ((pn(i,j-1)+pn(i,j))* &
2453 & (tl_vfx(i+1,j)-tl_vfx(i,j ))- &
2454 & (pm(i,j-1)+pm(i,j))* &
2455 & (tl_vfe(i ,j)-tl_vfe(i,j-1)))
2464 IF (
domain(ng)%Western_Edge(tile))
THEN
2467 lapu(istru-1,j)=0.0_r8
2468 tl_lapu(istru-1,j)=0.0_r8
2472 lapu(istru-1,j)=lapu(istru,j)
2473 tl_lapu(istru-1,j)=tl_lapu(istru,j)
2478 lapv(istr-1,j)=
gamma2(ng)*lapv(istr,j)
2479 tl_lapv(istr-1,j)=
gamma2(ng)*tl_lapv(istr,j)
2483 lapv(istr-1,j)=0.0_r8
2484 tl_lapv(istr-1,j)=0.0_r8
2491 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2494 lapu(iend+1,j)=0.0_r8
2495 tl_lapu(iend+1,j)=0.0_r8
2499 lapu(iend+1,j)=lapu(iend,j)
2500 tl_lapu(iend+1,j)=tl_lapu(iend,j)
2505 lapv(iend+1,j)=
gamma2(ng)*lapv(iend,j)
2506 tl_lapv(iend+1,j)=
gamma2(ng)*tl_lapv(iend,j)
2510 lapv(iend+1,j)=0.0_r8
2511 tl_lapv(iend+1,j)=0.0_r8
2518 IF (
domain(ng)%Southern_Edge(tile))
THEN
2521 lapu(i,jstr-1)=
gamma2(ng)*lapu(i,jstr)
2522 tl_lapu(i,jstr-1)=
gamma2(ng)*tl_lapu(i,jstr)
2526 lapu(i,jstr-1)=0.0_r8
2527 tl_lapu(i,jstr-1)=0.0_r8
2532 lapv(i,jstrv-1)=0.0_r8
2533 tl_lapv(i,jstrv-1)=0.0_r8
2537 lapv(i,jstrv-1)=lapv(i,jstrv)
2538 tl_lapv(i,jstrv-1)=tl_lapv(i,jstrv)
2545 IF (
domain(ng)%Northern_Edge(tile))
THEN
2548 lapu(i,jend+1)=
gamma2(ng)*lapu(i,jend)
2549 tl_lapu(i,jend+1)=
gamma2(ng)*tl_lapu(i,jend)
2553 lapu(i,jend+1)=0.0_r8
2554 tl_lapu(i,jend+1)=0.0_r8
2559 lapv(i,jend+1)=0.0_r8
2560 tl_lapv(i,jend+1)=0.0_r8
2564 lapv(i,jend+1)=lapv(i,jend)
2565 tl_lapv(i,jend+1)=tl_lapv(i,jend)
2573 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
2574 lapu(istr ,jstr-1)=0.5_r8*(lapu(istr+1,jstr-1)+ &
2575 & lapu(istr ,jstr ))
2576 tl_lapu(istr ,jstr-1)=0.5_r8*(tl_lapu(istr+1,jstr-1)+ &
2577 & tl_lapu(istr ,jstr ))
2578 lapv(istr-1,jstr )=0.5_r8*(lapv(istr-1,jstr+1)+ &
2579 & lapv(istr ,jstr ))
2580 tl_lapv(istr-1,jstr )=0.5_r8*(tl_lapv(istr-1,jstr+1)+ &
2581 & tl_lapv(istr ,jstr ))
2587 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
2588 lapu(iend+1,jstr-1)=0.5_r8*(lapu(iend ,jstr-1)+ &
2589 & lapu(iend+1,jstr ))
2590 tl_lapu(iend+1,jstr-1)=0.5_r8*(tl_lapu(iend ,jstr-1)+ &
2591 & tl_lapu(iend+1,jstr ))
2592 lapv(iend+1,jstr )=0.5_r8*(lapv(iend ,jstr )+ &
2593 & lapv(iend+1,jstr+1))
2594 tl_lapv(iend+1,jstr )=0.5_r8*(tl_lapv(iend ,jstr )+ &
2595 & tl_lapv(iend+1,jstr+1))
2601 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
2602 lapu(istr ,jend+1)=0.5_r8*(lapu(istr+1,jend+1)+ &
2603 & lapu(istr ,jend ))
2604 tl_lapu(istr ,jend+1)=0.5_r8*(tl_lapu(istr+1,jend+1)+ &
2605 & tl_lapu(istr ,jend ))
2606 lapv(istr-1,jend+1)=0.5_r8*(lapv(istr ,jend+1)+ &
2607 & lapv(istr-1,jend ))
2608 tl_lapv(istr-1,jend+1)=0.5_r8*(tl_lapv(istr ,jend+1)+ &
2609 & tl_lapv(istr-1,jend ))
2615 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
2616 lapu(iend+1,jend+1)=0.5_r8*(lapu(iend ,jend+1)+ &
2617 & lapu(iend+1,jend ))
2618 tl_lapu(iend+1,jend+1)=0.5_r8*(tl_lapu(iend ,jend+1)+ &
2619 & tl_lapu(iend+1,jend ))
2620 lapv(iend+1,jend+1)=0.5_r8*(lapv(iend ,jend+1)+ &
2621 & lapv(iend+1,jend ))
2622 tl_lapv(iend+1,jend+1)=0.5_r8*(tl_lapv(iend ,jend+1)+ &
2623 & tl_lapv(iend+1,jend ))
2640 tl_cff=visc4_r(i,j)*0.5_r8* &
2643 & ((pn(i ,j)+pn(i+1,j))*lapu(i+1,j)- &
2644 & (pn(i-1,j)+pn(i ,j))*lapu(i ,j))- &
2646 & ((pm(i,j )+pm(i,j+1))*lapv(i,j+1)- &
2647 & (pm(i,j-1)+pm(i,j ))*lapv(i,j )))+ &
2650 & ((pn(i ,j)+pn(i+1,j))*tl_lapu(i+1,j)- &
2651 & (pn(i-1,j)+pn(i ,j))*tl_lapu(i ,j))- &
2653 & ((pm(i,j )+pm(i,j+1))*tl_lapv(i,j+1)- &
2654 & (pm(i,j-1)+pm(i,j ))*tl_lapv(i,j ))))
2657 tl_ufx(i,j)=on_r(i,j)*on_r(i,j)*tl_cff
2660 tl_vfe(i,j)=om_r(i,j)*om_r(i,j)*tl_cff
2673 tl_cff=visc4_p(i,j)*0.5_r8* &
2674 & (tl_drhs_p(i,j)* &
2676 & ((pn(i ,j-1)+pn(i ,j))*lapv(i ,j)- &
2677 & (pn(i-1,j-1)+pn(i-1,j))*lapv(i-1,j))+ &
2679 & ((pm(i-1,j )+pm(i,j ))*lapu(i,j )- &
2680 & (pm(i-1,j-1)+pm(i,j-1))*lapu(i,j-1)))+ &
2683 & ((pn(i ,j-1)+pn(i ,j))*tl_lapv(i ,j)- &
2684 & (pn(i-1,j-1)+pn(i-1,j))*tl_lapv(i-1,j))+ &
2686 & ((pm(i-1,j )+pm(i,j ))*tl_lapu(i,j )- &
2687 & (pm(i-1,j-1)+pm(i,j-1))*tl_lapu(i,j-1))))
2691 tl_cff=tl_cff*pmask(i,j)
2695 tl_ufe(i,j)=om_p(i,j)*om_p(i,j)*tl_cff
2698 tl_vfx(i,j)=on_p(i,j)*on_p(i,j)*tl_cff
2708 tl_cff1=0.5_r8*(pn(i-1,j)+pn(i,j))* &
2709 & (tl_ufx(i,j )-tl_ufx(i-1,j))
2712 tl_cff2=0.5_r8*(pm(i-1,j)+pm(i,j))* &
2713 & (ufe(i,j+1)-ufe(i ,j))
2716 tl_fac=tl_cff1+tl_cff2
2719 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+tl_fac
2720# if defined DIAGNOSTICS_UV
2731 tl_cff1=0.5_r8*(pn(i,j-1)+pn(i,j))* &
2732 & (tl_vfx(i+1,j)-tl_vfx(i,j ))
2735 tl_cff2=0.5_r8*(pm(i,j-1)+pm(i,j))* &
2736 & (tl_vfe(i ,j)-tl_vfe(i,j-1))
2739 tl_fac=tl_cff1-tl_cff2
2742 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+tl_fac
2743# if defined DIAGNOSTICS_UV
2751#if defined WEC_MELLOR && \
2762 tl_cff1=tl_rustr2d(i,j)*om_u(i,j)*on_u(i,j)
2765 tl_cff2=tl_rulag2d(i,j)
2769 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)-tl_cff1-tl_cff2
2771# ifdef DIAGNOSTICS_UV
2780 tl_cff1=tl_rvstr2d(i,j)*om_v(i,j)*on_v(i,j)
2783 tl_cff2=tl_rvlag2d(i,j)
2787 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)-tl_cff1-tl_cff2
2789# ifdef DIAGNOSTICS_UV
2805 tl_fac=tl_bustr(i,j)*om_u(i,j)*on_u(i,j)
2808 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)-tl_fac
2809# ifdef DIAGNOSTICS_UV
2818 tl_fac=tl_bvstr(i,j)*om_v(i,j)*on_v(i,j)
2821 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)-tl_fac
2822# ifdef DIAGNOSTICS_UV
2828# ifdef DIAGNOSTICS_UV
2852 cff=0.25_r8*(
clima(ng)%M2nudgcof(i-1,j)+ &
2853 &
clima(ng)%M2nudgcof(i ,j))* &
2854 & om_u(i,j)*on_u(i,j)
2860 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+ &
2861 & cff*((drhs(i-1,j)+drhs(i,j))* &
2862 & (-tl_ubar(i,j,krhs))+ &
2863 & (tl_drhs(i-1,j)+tl_drhs(i,j))* &
2864 & (
clima(ng)%ubarclm(i,j)- &
2870 cff=0.25_r8*(
clima(ng)%M2nudgcof(i,j-1)+ &
2871 &
clima(ng)%M2nudgcof(i,j ))* &
2872 & om_v(i,j)*on_v(i,j)
2878 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+ &
2879 & cff*((drhs(i,j-1)+drhs(i,j))* &
2880 & (-tl_vbar(i,j,krhs))+ &
2881 & (tl_drhs(i,j-1)+tl_drhs(i,j))* &
2882 & (
clima(ng)%vbarclm(i,j)- &
2908#if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE
2909 IF (
iic(ng).eq.
ntfirst(ng).and.soinitial(ng))
THEN
2917 tl_rufrc(i,j)=tl_rufrc(i,j)-tl_rhs_ubar(i,j)
2920 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+tl_rufrc(i,j)
2923 tl_ru(i,j,0,nstp)=tl_rufrc(i,j)
2924# ifdef DIAGNOSTICS_UV
2943 tl_rvfrc(i,j)=tl_rvfrc(i,j)-tl_rhs_vbar(i,j)
2946 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+tl_rvfrc(i,j)
2949 tl_rv(i,j,0,nstp)=tl_rvfrc(i,j)
2950# ifdef DIAGNOSTICS_UV
2965#if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE
2966 ELSE IF (
iic(ng).eq.(
ntfirst(ng)+1).and.soinitial(ng))
THEN
2974 tl_rufrc(i,j)=tl_rufrc(i,j)-tl_rhs_ubar(i,j)
2978 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+ &
2979 & 1.5_r8*tl_rufrc(i,j)- &
2980 & 0.5_r8*tl_ru(i,j,0,nnew)
2983 tl_ru(i,j,0,nstp)=tl_rufrc(i,j)
2984# ifdef DIAGNOSTICS_UV
3006 tl_rvfrc(i,j)=tl_rvfrc(i,j)-tl_rhs_vbar(i,j)
3010 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+ &
3011 & 1.5_r8*tl_rvfrc(i,j)- &
3012 & 0.5_r8*tl_rv(i,j,0,nnew)
3015 tl_rv(i,j,0,nstp)=tl_rvfrc(i,j)
3016# ifdef DIAGNOSTICS_UV
3035 cff1=23.0_r8/12.0_r8
3036 cff2=16.0_r8/12.0_r8
3037 cff3= 5.0_r8/12.0_r8
3042 tl_rufrc(i,j)=tl_rufrc(i,j)-tl_rhs_ubar(i,j)
3048 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+ &
3049 & cff1*tl_rufrc(i,j)- &
3050 & cff2*tl_ru(i,j,0,nnew)+ &
3051 & cff3*tl_ru(i,j,0,nstp)
3054 tl_ru(i,j,0,nstp)=tl_rufrc(i,j)
3055# ifdef DIAGNOSTICS_UV
3080 tl_rvfrc(i,j)=tl_rvfrc(i,j)-tl_rhs_vbar(i,j)
3086 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+ &
3087 & cff1*tl_rvfrc(i,j)- &
3088 & cff2*tl_rv(i,j,0,nnew)+ &
3089 & cff3*tl_rv(i,j,0,nstp)
3092 tl_rv(i,j,0,nstp)=tl_rvfrc(i,j)
3093# ifdef DIAGNOSTICS_UV
3120 tl_rhs_ubar(i,j)=tl_rhs_ubar(i,j)+tl_rufrc(i,j)
3121# ifdef DIAGNOSTICS_UV
3135 tl_rhs_vbar(i,j)=tl_rhs_vbar(i,j)+tl_rvfrc(i,j)
3136# ifdef DIAGNOSTICS_UV
3157# ifdef DIAGNOSTICS_UV
3166# ifdef DIAGNOSTICS_UV
3181 dstp(i,j)=zeta(i,j,kstp)+h(i,j)
3182 tl_dstp(i,j)=tl_zeta(i,j,kstp)+tl_h(i,j)
3189#ifdef WET_DRY_NOT_YET
3194#if defined STOCHASTIC_OPT && !defined STOCH_OPT_WHITE && \
3196 IF (first_2d_step.and.soinitial(ng))
THEN
3198 IF (first_2d_step)
THEN
3201#ifdef WET_DRY_NOT_YET
3206 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
3207 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
3208 tl_fac=-fac*fac*(tl_dnew(i,j)+tl_dnew(i-1,j))
3213 tl_ubar(i,j,knew)=(tl_ubar(i,j,kstp)* &
3214 & (dstp(i,j)+dstp(i-1,j))+ &
3216 & (tl_dstp(i,j)+tl_dstp(i-1,j))+ &
3217 & cff*cff1*tl_rhs_ubar(i,j))*fac+ &
3218 & (ubar(i,j,kstp)* &
3219 & (dstp(i,j)+dstp(i-1,j))+ &
3220 & cff*cff1*rhs_ubar(i,j))*tl_fac
3224 tl_ubar(i,j,knew)=tl_ubar(i,j,knew)*umask(i,j)
3226#ifdef WET_DRY_NOT_YET
3239 tl_rhs_ubar(i,j)=(tl_ubar(i,j,knew)* &
3240 & (dnew(i,j)+dnew(i-1,j))+ &
3242 & (tl_dnew(i,j)+tl_dnew(i-1,j))- &
3243 & tl_ubar(i,j,kstp)* &
3244 & (dstp(i,j)+dstp(i-1,j))- &
3246 & (tl_dstp(i,j)+tl_dstp(i-1,j)))*fac1
3252 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
3253 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
3254 tl_fac=-fac*fac*(tl_dnew(i,j)+tl_dnew(i,j-1))
3259 tl_vbar(i,j,knew)=(tl_vbar(i,j,kstp)* &
3260 & (dstp(i,j)+dstp(i,j-1))+ &
3262 & (tl_dstp(i,j)+tl_dstp(i,j-1))+ &
3263 & cff*cff1*tl_rhs_vbar(i,j))*fac+ &
3264 & (vbar(i,j,kstp)* &
3265 & (dstp(i,j)+dstp(i,j-1))+ &
3266 & cff*cff1*rhs_vbar(i,j))*tl_fac
3270 tl_vbar(i,j,knew)=tl_vbar(i,j,knew)*vmask(i,j)
3272#ifdef WET_DRY_NOT_YET
3285 tl_rhs_vbar(i,j)=(tl_vbar(i,j,knew)* &
3286 & (dnew(i,j)+dnew(i,j-1))+ &
3288 & (tl_dnew(i,j)+tl_dnew(i,j-1))- &
3289 & tl_vbar(i,j,kstp)* &
3290 & (dstp(i,j)+dstp(i,j-1))- &
3292 & (tl_dstp(i,j)+tl_dstp(i,j-1)))*fac1
3298#ifdef WET_DRY_NOT_YET
3303 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
3304 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
3305 tl_fac=-fac*fac*(tl_dnew(i,j)+tl_dnew(i-1,j))
3310 tl_ubar(i,j,knew)=(tl_ubar(i,j,kstp)* &
3311 & (dstp(i,j)+dstp(i-1,j))+ &
3313 & (tl_dstp(i,j)+tl_dstp(i-1,j))+ &
3314 & cff*cff1*tl_rhs_ubar(i,j))*fac+ &
3315 & (ubar(i,j,kstp)* &
3316 & (dstp(i,j)+dstp(i-1,j))+ &
3317 & cff*cff1*rhs_ubar(i,j))*tl_fac
3321 tl_ubar(i,j,knew)=tl_ubar(i,j,knew)*umask(i,j)
3323#ifdef WET_DRY_NOT_YET
3336 tl_rhs_ubar(i,j)=(tl_ubar(i,j,knew)* &
3337 & (dnew(i,j)+dnew(i-1,j))+ &
3339 & (tl_dnew(i,j)+tl_dnew(i-1,j))- &
3340 & tl_ubar(i,j,kstp)* &
3341 & (dstp(i,j)+dstp(i-1,j))- &
3343 & (tl_dstp(i,j)+tl_dstp(i-1,j)))*fac1
3349 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
3350 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
3351 tl_fac=-fac*fac*(tl_dnew(i,j)+tl_dnew(i,j-1))
3356 tl_vbar(i,j,knew)=(tl_vbar(i,j,kstp)* &
3357 & (dstp(i,j)+dstp(i,j-1))+ &
3359 & (tl_dstp(i,j)+tl_dstp(i,j-1))+ &
3360 & cff*cff1*tl_rhs_vbar(i,j))*fac+ &
3361 & (vbar(i,j,kstp)* &
3362 & (dstp(i,j)+dstp(i,j-1))+ &
3363 & cff*cff1*rhs_vbar(i,j))*tl_fac
3367 tl_vbar(i,j,knew)=tl_vbar(i,j,knew)*vmask(i,j)
3369#ifdef WET_DRY_NOT_YET
3382 tl_rhs_vbar(i,j)=(tl_vbar(i,j,knew)* &
3383 & (dnew(i,j)+dnew(i,j-1))+ &
3385 & (tl_dnew(i,j)+tl_dnew(i,j-1))- &
3386 & tl_vbar(i,j,kstp)* &
3387 & (dstp(i,j)+dstp(i,j-1))- &
3389 & (tl_dstp(i,j)+tl_dstp(i,j-1)))*fac1
3393 ELSE IF (corrector_2d_step)
THEN
3394 cff1=0.5_r8*
dtfast(ng)*5.0_r8/12.0_r8
3395 cff2=0.5_r8*
dtfast(ng)*8.0_r8/12.0_r8
3396 cff3=0.5_r8*
dtfast(ng)*1.0_r8/12.0_r8
3397#ifdef WET_DRY_NOT_YET
3402 cff=(pm(i,j)+pm(i-1,j))*(pn(i,j)+pn(i-1,j))
3403 fac=1.0_r8/(dnew(i,j)+dnew(i-1,j))
3404 tl_fac=-fac*fac*(tl_dnew(i,j)+tl_dnew(i-1,j))
3411 tl_ubar(i,j,knew)=(tl_ubar(i,j,kstp)* &
3412 & (dstp(i,j)+dstp(i-1,j))+ &
3414 & (tl_dstp(i,j)+tl_dstp(i-1,j))+ &
3415 & cff*(cff1*tl_rhs_ubar(i,j)+ &
3416 & cff2*tl_rubar(i,j,kstp)- &
3417 & cff3*tl_rubar(i,j,ptsk)))*fac+ &
3418 & (ubar(i,j,kstp)* &
3419 & (dstp(i,j)+dstp(i-1,j))+ &
3420 & cff*(cff1*rhs_ubar(i,j)+ &
3421 & cff2*rubar(i,j,kstp)- &
3422 & cff3*rubar(i,j,ptsk)))*tl_fac
3426 tl_ubar(i,j,knew)=tl_ubar(i,j,knew)*umask(i,j)
3428#ifdef WET_DRY_NOT_YET
3443 tl_rhs_ubar(i,j)=((tl_ubar(i,j,knew)* &
3444 & (dnew(i,j)+dnew(i-1,j))+ &
3446 & (tl_dnew(i,j)+tl_dnew(i-1,j))- &
3447 & tl_ubar(i,j,kstp)* &
3448 & (dstp(i,j)+dstp(i-1,j))- &
3450 & (tl_dstp(i,j)+tl_dstp(i-1,j)))*fac1- &
3451 & cff2*tl_rubar(i,j,kstp)+ &
3452 & cff3*tl_rubar(i,j,ptsk))*cff4
3458 cff=(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
3459 fac=1.0_r8/(dnew(i,j)+dnew(i,j-1))
3460 tl_fac=-fac*fac*(tl_dnew(i,j)+tl_dnew(i,j-1))
3467 tl_vbar(i,j,knew)=(tl_vbar(i,j,kstp)* &
3468 & (dstp(i,j)+dstp(i,j-1))+ &
3470 & (tl_dstp(i,j)+tl_dstp(i,j-1))+ &
3471 & cff*(cff1*tl_rhs_vbar(i,j)+ &
3472 & cff2*tl_rvbar(i,j,kstp)- &
3473 & cff3*tl_rvbar(i,j,ptsk)))*fac+ &
3474 & (vbar(i,j,kstp)* &
3475 & (dstp(i,j)+dstp(i,j-1))+ &
3476 & cff*(cff1*rhs_vbar(i,j)+ &
3477 & cff2*rvbar(i,j,kstp)- &
3478 & cff3*rvbar(i,j,ptsk)))*tl_fac
3482 tl_vbar(i,j,knew)=tl_vbar(i,j,knew)*vmask(i,j)
3484#ifdef WET_DRY_NOT_YET
3499 tl_rhs_vbar(i,j)=((tl_vbar(i,j,knew)* &
3500 & (dnew(i,j)+dnew(i,j-1))+ &
3502 & (tl_dnew(i,j)+tl_dnew(i,j-1))- &
3503 & tl_vbar(i,j,kstp)* &
3504 & (dstp(i,j)+dstp(i,j-1))- &
3506 & (tl_dstp(i,j)+tl_dstp(i,j-1)))*fac1- &
3507 & cff2*tl_rvbar(i,j,kstp)+ &
3508 & cff3*tl_rvbar(i,j,ptsk))*cff4
3513#ifdef DIAGNOSTICS_UV
3682 tl_rubar(i,j,krhs)=tl_rhs_ubar(i,j)
3689 tl_rvbar(i,j,krhs)=tl_rhs_vbar(i,j)
3692#ifdef DIAGNOSTICS_UV
3719 & lbi, ubi, lbj, ubj, &
3720 & imins, imaxs, jmins, jmaxs, &
3721 & krhs, kstp, knew, &
3722 & ubar, vbar, zeta, &
3723 & tl_ubar, tl_vbar, tl_zeta)
3731 & lbi, ubi, lbj, ubj, &
3732 & imins, imaxs, jmins, jmaxs, &
3733 & krhs, kstp, knew, &
3734 & ubar, vbar, zeta, &
3735 & tl_ubar, tl_vbar, tl_zeta)
3742 & lbi, ubi, lbj, ubj, &
3743 & imins, imaxs, jmins, jmaxs, &
3748 & h, tl_h, om_v, on_u, &
3749 & ubar, vbar, zeta, &
3750 & tl_ubar, tl_vbar, tl_zeta)
3764 IF (((istrr.le.i).and.(i.le.iendr)).and. &
3765 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
3766 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
3767 cff=1.0_r8/(on_u(i,j)* &
3768 & 0.5_r8*(zeta(i-1,j,knew)+h(i-1,j)+ &
3769 & zeta(i ,j,knew)+h(i ,j)))
3770 tl_cff=-cff*cff*on_u(i,j)* &
3771 & 0.5_r8*(tl_zeta(i-1,j,knew)+tl_h(i-1,j)+ &
3772 & tl_zeta(i ,j,knew)+tl_h(i ,j))
3775 tl_ubar(i,j,knew)=
sources(ng)%tl_Qbar(is)*cff+ &
3777 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
3778 cff=1.0_r8/(om_v(i,j)* &
3779 & 0.5_r8*(zeta(i,j-1,knew)+h(i,j-1)+ &
3780 & zeta(i,j ,knew)+h(i,j )))
3781 tl_cff=-cff*cff*om_v(i,j)* &
3782 & 0.5_r8*(tl_zeta(i,j-1,knew)+tl_h(i,j-1)+ &
3783 & tl_zeta(i,j ,knew)+tl_h(i,j ))
3786 tl_vbar(i,j,knew)=
sources(ng)%tl_Qbar(is)*cff+ &
3803 & lbi, ubi, lbj, ubj, &
3804 & tl_ubar(:,:,knew))
3810 & lbi, ubi, lbj, ubj, &
3811 & tl_vbar(:,:,knew))
3823 & lbi, ubi, lbj, ubj, &
3826 & tl_ubar(:,:,knew), &
3827 & tl_vbar(:,:,knew))