59 & LBi, UBi, LBj, UBj, &
60 & IminS, ImaxS, JminS, JmaxS, &
63 & tl_ubar, tl_vbar, tl_zeta)
76 integer,
intent(in) :: ng, tile
77 integer,
intent(in) :: lbi, ubi, lbj, ubj
78 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
79 integer,
intent(in) :: krhs, kstp, kout
82 real(r8),
intent(in) :: ubar(lbi:,lbj:,:)
83 real(r8),
intent(in) :: vbar(lbi:,lbj:,:)
84 real(r8),
intent(in) :: zeta(lbi:,lbj:,:)
85 real(r8),
intent(in) :: tl_ubar(lbi:,lbj:,:)
86 real(r8),
intent(in) :: tl_zeta(lbi:,lbj:,:)
88 real(r8),
intent(inout) :: tl_vbar(lbi:,lbj:,:)
90 real(r8),
intent(in) :: ubar(lbi:ubi,lbj:ubj,:)
91 real(r8),
intent(in) :: vbar(lbi:ubi,lbj:ubj,:)
92 real(r8),
intent(in) :: zeta(lbi:ubi,lbj:ubj,:)
93 real(r8),
intent(in) :: tl_ubar(lbi:ubi,lbj:ubj,:)
94 real(r8),
intent(in) :: tl_zeta(lbi:ubi,lbj:ubj,:)
96 real(r8),
intent(inout) :: tl_vbar(lbi:ubi,lbj:ubj,:)
101 integer :: jmin, jmax
102 integer :: i, j, know
104 real(r8) :: ce, cx, ze
105 real(r8) :: bry_pgr, bry_cor, bry_str
106 real(r8) :: cff, cff1, cff2, cff3, dt2d
107 real(r8) :: obc_in, obc_out, tau
108# if defined ATM_PRESS && defined PRESS_COMPENSATE
109 real(r8) :: oneatm, fac
112 real(r8) :: tl_ce, tl_cx, tl_ze
113 real(r8) :: tl_bry_pgr, tl_bry_cor, tl_bry_str, tl_bry_val
114 real(r8) :: tl_cff, tl_cff1, tl_cff2, tl_cff3
116 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_grad
118# include "set_bounds.h"
124 IF (first_2d_step)
THEN
134# if defined ATM_PRESS && defined PRESS_COMPENSATE
136 fac=100.0_r8/(
g*
rho0)
143 IF (
domain(ng)%Southern_Edge(tile))
THEN
148 IF (
iic(ng).ne.0)
THEN
153 tl_grad(i,jstr)=0.0_r8
157# if defined CELERITY_READ && defined FORWARD_READ
161 & (
clima(ng)%M2nudgcof(i,jstr-1)+ &
162 &
clima(ng)%M2nudgcof(i,jstr ))
163 obc_in =
obcfac(ng)*obc_out
168 IF (
boundary(ng)%vbar_south_Ce(i).lt.0.0_r8)
THEN
189 tl_vbar(i,jstr,kout)=(cff*tl_vbar(i,jstr ,know)+ &
190 & ce *tl_vbar(i,jstr+1,kout)- &
192 & tl_grad(i ,jstr)- &
194 & tl_grad(i+1,jstr))/ &
202 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)- &
203 & tau*tl_vbar(i,jstr,know)
209 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)* &
210 &
grid(ng)%vmask(i,jstr)
221# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
223 bry_pgr=-
g*(zeta(i,jstr,know)- &
225 & 0.5_r8*
grid(ng)%pn(i,jstr)
226 tl_bry_pgr=-
g*(tl_zeta(i,jstr,know)- &
228 & 0.5_r8*
grid(ng)%pn(i,jstr)
230 bry_pgr=-
g*(zeta(i,jstr ,know)- &
231 & zeta(i,jstr-1,know))* &
232 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
233 &
grid(ng)%pn(i,jstr ))
234 tl_bry_pgr=-
g*(tl_zeta(i,jstr ,know)- &
235 & tl_zeta(i,jstr-1,know))* &
236 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
237 &
grid(ng)%pn(i,jstr ))
240 bry_cor=-0.125_r8*(ubar(i ,jstr-1,know)+ &
241 & ubar(i+1,jstr-1,know)+ &
242 & ubar(i ,jstr ,know)+ &
243 & ubar(i+1,jstr ,know))* &
244 & (
grid(ng)%f(i,jstr-1)+ &
245 &
grid(ng)%f(i,jstr ))
246 tl_bry_cor=-0.125_r8*(tl_ubar(i ,jstr-1,know)+ &
247 & tl_ubar(i+1,jstr-1,know)+ &
248 & tl_ubar(i ,jstr ,know)+ &
249 & tl_ubar(i+1,jstr ,know))* &
250 & (
grid(ng)%f(i,jstr-1)+ &
251 &
grid(ng)%f(i,jstr ))
256 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
257 & zeta(i,jstr-1,know)+ &
258 &
grid(ng)%h(i,jstr )+ &
259 & zeta(i,jstr ,know)))
260 tl_cff1=-cff1*cff1*(0.5_r8*(
grid(ng)%tl_h(i,jstr-1)+ &
261 & tl_zeta(i,jstr-1,know)+ &
262 &
grid(ng)%tl_h(i,jstr )+ &
263 & tl_zeta(i,jstr ,know)))+ &
267 bry_str=cff1*(
forces(ng)%svstr(i,jstr)- &
268 &
forces(ng)%bvstr(i,jstr))
269 tl_bry_str=tl_cff1*(
forces(ng)%svstr(i,jstr)- &
270 &
forces(ng)%bvstr(i,jstr))+ &
271 & cff1*(
forces(ng)%tl_svstr(i,jstr)- &
272 &
forces(ng)%tl_bvstr(i,jstr))- &
276 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
277 & zeta(i,jstr-1,know)+ &
278 &
grid(ng)%h(i,jstr )+ &
279 & zeta(i,jstr ,know)))
280 tl_ce=-ce*ce*ce*0.25_r8*
g*(
grid(ng)%tl_h(i,jstr-1)+ &
281 & tl_zeta(i,jstr-1,know)+ &
282 &
grid(ng)%tl_h(i,jstr )+ &
283 & tl_zeta(i,jstr ,know))+ &
285 &
g*0.5_r8*ce*ce*ce*(
grid(ng)%h(i,jstr-1)+ &
286 & zeta(i,jstr-1,know)+ &
287 &
grid(ng)%h(i,jstr )+ &
288 & zeta(i,jstr ,know))
290 cff2=
grid(ng)%on_v(i,jstr)*ce
291 tl_cff2=
grid(ng)%on_v(i,jstr)*tl_ce
297 tl_bry_val=tl_vbar(i,jstr+1,know)+ &
298 & tl_cff2*(bry_pgr+ &
301 & cff2*(tl_bry_pgr+ &
305 & cff2*(bry_pgr+bry_cor+bry_str)
310 tl_bry_val=
boundary(ng)%tl_vbar_south(i)
312 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
313 & zeta(i,jstr-1,know)+ &
314 &
grid(ng)%h(i,jstr )+ &
315 & zeta(i,jstr ,know)))
316 tl_cff=-cff*cff*(0.5_r8*(
grid(ng)%tl_h(i,jstr-1)+ &
317 & tl_zeta(i,jstr-1,know)+ &
318 &
grid(ng)%tl_h(i,jstr )+ &
319 & tl_zeta(i,jstr ,know)))+ &
324 tl_ce=0.5_r8*
g*tl_cff/ce+ &
328# if defined ATM_PRESS && defined PRESS_COMPENSATE
338 tl_vbar(i,jstr,kout)=tl_bry_val- &
341 & (zeta(i,jstr-1,know)+ &
342 & zeta(i,jstr ,know)+ &
343 & fac*(
forces(ng)%Pair(i,jstr-1)+ &
344 &
forces(ng)%Pair(i,jstr )- &
348 & (0.5_r8*(tl_zeta(i,jstr-1,know)+ &
349 & tl_zeta(i,jstr ,know)))+ &
353 & (zeta(i,jstr-1,know)+ &
354 & zeta(i,jstr ,know)+ &
355 & fac*(
forces(ng)%Pair(i,jstr-1)+ &
356 &
forces(ng)%Pair(i,jstr )- &
366 tl_vbar(i,jstr,kout)=tl_bry_val- &
368 & (0.5_r8*(zeta(i,jstr-1,know)+ &
369 & zeta(i,jstr ,know))- &
372 & (0.5_r8*(tl_zeta(i,jstr-1,know)+ &
373 & tl_zeta(i,jstr ,know))- &
377 & (0.5_r8*(zeta(i,jstr-1,know)+ &
378 & zeta(i,jstr ,know))- &
386 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)* &
387 &
grid(ng)%vmask(i,jstr)
397# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
399 bry_pgr=-
g*(zeta(i,jstr,know)- &
401 & 0.5_r8*
grid(ng)%pn(i,jstr)
402 tl_bry_pgr=-
g*(tl_zeta(i,jstr,know)- &
404 & 0.5_r8*
grid(ng)%pn(i,jstr)
406 bry_pgr=-
g*(zeta(i,jstr ,know)- &
407 & zeta(i,jstr-1,know))* &
408 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
409 &
grid(ng)%pn(i,jstr ))
410 tl_bry_pgr=-
g*(tl_zeta(i,jstr ,know)- &
411 & tl_zeta(i,jstr-1,know))* &
412 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
413 &
grid(ng)%pn(i,jstr ))
416 bry_cor=-0.125_r8*(ubar(i ,jstr-1,know)+ &
417 & ubar(i+1,jstr-1,know)+ &
418 & ubar(i ,jstr ,know)+ &
419 & ubar(i+1,jstr ,know))* &
420 & (
grid(ng)%f(i,jstr-1)+ &
421 &
grid(ng)%f(i,jstr ))
422 tl_bry_cor=-0.125_r8*(tl_ubar(i ,jstr-1,know)+ &
423 & tl_ubar(i+1,jstr-1,know)+ &
424 & tl_ubar(i ,jstr ,know)+ &
425 & tl_ubar(i+1,jstr ,know))* &
426 & (
grid(ng)%f(i,jstr-1)+ &
427 &
grid(ng)%f(i,jstr ))
432 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
433 & zeta(i,jstr-1,know)+ &
434 &
grid(ng)%h(i,jstr )+ &
435 & zeta(i,jstr ,know)))
436 tl_cff1=-cff1*cff1*(0.5_r8*(
grid(ng)%tl_h(i,jstr-1)+ &
437 & tl_zeta(i,jstr-1,know)+ &
438 &
grid(ng)%tl_h(i,jstr )+ &
439 & tl_zeta(i,jstr ,know)))+ &
443 bry_str=cff1*(
forces(ng)%svstr(i,jstr)- &
444 &
forces(ng)%bvstr(i,jstr))
445 tl_bry_str=tl_cff1*(
forces(ng)%svstr(i,jstr)- &
446 &
forces(ng)%bvstr(i,jstr))+ &
447 & cff1*(
forces(ng)%tl_svstr(i,jstr)- &
448 &
forces(ng)%tl_bvstr(i,jstr))- &
452 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
453 & zeta(i,jstr-1,know)+ &
454 &
grid(ng)%h(i,jstr )+ &
455 & zeta(i,jstr ,know)))
456 tl_ce=-ce*ce*ce*0.25_r8*
g*(
grid(ng)%tl_h(i,jstr-1)+ &
457 & tl_zeta(i,jstr-1,know)+ &
458 &
grid(ng)%tl_h(i,jstr )+ &
459 & tl_zeta(i,jstr ,know))+ &
461 &
g*0.5_r8*ce*ce*ce*(
grid(ng)%h(i,jstr-1)+ &
462 & zeta(i,jstr-1,know)+ &
463 &
grid(ng)%h(i,jstr )+ &
464 & zeta(i,jstr ,know))
466 cff2=
grid(ng)%on_v(i,jstr)*ce
467 tl_cff2=
grid(ng)%on_v(i,jstr)*tl_ce
473 tl_bry_val=tl_vbar(i,jstr+1,know)+ &
474 & tl_cff2*(bry_pgr+ &
477 & cff2*(tl_bry_pgr+ &
481 & cff2*(bry_pgr+bry_cor+bry_str)
486 tl_bry_val=
boundary(ng)%tl_vbar_south(i)
488# ifdef WET_DRY_NOT_YET
489 cff=0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
490 & zeta(i,jstr-1,know)+ &
491 &
grid(ng)%h(i,jstr )+ &
492 & zeta(i,jstr ,know))
493 tl_cff=0.5_r8*(
grid(ng)%tl_h(i,jstr-1)+ &
494 & tl_zeta(i,jstr-1,know)+ &
495 &
grid(ng)%tl_h(i,jstr )+ &
496 & tl_zeta(i,jstr ,know))
498 cff=0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
499 &
grid(ng)%h(i,jstr ))
500 tl_cff=0.5_r8*(
grid(ng)%tl_h(i,jstr-1)+ &
501 &
grid(ng)%tl_h(i,jstr ))
504 tl_cff1=-0.5_r8*cff1*tl_cff/cff+ &
508 ce=dt2d*cff1*cff*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
509 &
grid(ng)%pn(i,jstr ))
510 tl_ce=dt2d*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
511 &
grid(ng)%pn(i,jstr ))* &
517 ze=(0.5_r8+ce)*zeta(i,jstr ,know)+ &
518 & (0.5_r8-ce)*zeta(i,jstr-1,know)
519 tl_ze=(0.5_r8+ce)*tl_zeta(i,jstr ,know)+ &
520 & (0.5_r8-ce)*tl_zeta(i,jstr-1,know)+ &
521 & tl_ce*(zeta(i,jstr ,know)- &
522 & zeta(i,jstr-1,know))- &
527 cff2=(1.0_r8-
co/ce)**2
528 tl_cff2=2.0_r8*cff2*
co*tl_ce/(ce*ce)- &
532 cff3=zeta(i,jstr,kout)+ &
533 & ce*zeta(i,jstr-1,know)- &
534 & (1.0_r8+ce)*zeta(i,jstr,know)
535 tl_cff3=tl_zeta(i,jstr,kout)+ &
536 & ce*tl_zeta(i,jstr-1,know)+ &
537 & tl_ce*(zeta(i,jstr-1,know)+ &
538 & zeta(i,jstr ,know))- &
539 & (1.0_r8+ce)*tl_zeta(i,jstr,know)- &
541 & ce*zeta(i,jstr-1,know)+ &
542 & (1.0_r8+ce)*zeta(i,jstr,know)
545 tl_ze=tl_ze+cff2*tl_cff3+ &
557 tl_vbar(i,jstr,kout)=0.5_r8* &
559 & tl_vbar(i,jstr,know)- &
560 & tl_ce*(vbar(i,jstr ,know)- &
561 & vbar(i,jstr+1,know))+ &
562 & ce*tl_vbar(i,jstr+1,know)+ &
565 & (ze-
boundary(ng)%zeta_south(i))- &
569 & ((1.0_r8-ce)*vbar(i,jstr,know)+ &
570 & ce*vbar(i,jstr+1,know)- &
575# ifdef ADJUST_BOUNDARY
577 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)+ &
586 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)* &
587 &
grid(ng)%vmask(i,jstr)
599 tl_vbar(i,jstr,kout)=
boundary(ng)%tl_vbar_south(i)
604 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)* &
605 &
grid(ng)%vmask(i,jstr)
617 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr+1,kout)
622 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)* &
623 &
grid(ng)%vmask(i,jstr)
638 tl_bry_pgr=-
g*(tl_zeta(i,jstr,know)- &
640 & 0.5_r8*
grid(ng)%pn(i,jstr)
647 tl_bry_pgr=-
g*(tl_zeta(i,jstr ,know)- &
648 & tl_zeta(i,jstr-1,know))* &
649 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
650 &
grid(ng)%pn(i,jstr ))
660 tl_bry_cor=-0.125_r8*(tl_ubar(i ,jstr-1,know)+ &
661 & tl_ubar(i+1,jstr-1,know)+ &
662 & tl_ubar(i ,jstr ,know)+ &
663 & tl_ubar(i+1,jstr ,know))* &
664 & (
grid(ng)%f(i,jstr-1)+ &
665 &
grid(ng)%f(i,jstr ))
671 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
672 & zeta(i,jstr-1,know)+ &
673 &
grid(ng)%h(i,jstr )+ &
674 & zeta(i,jstr ,know)))
675 tl_cff=-cff*cff*0.5_r8*(
grid(ng)%tl_h(i,jstr-1)+ &
676 & tl_zeta(i,jstr-1,know)+ &
677 &
grid(ng)%tl_h(i,jstr )+ &
678 & tl_zeta(i,jstr ,know))+ &
685 tl_bry_str=tl_cff*(
forces(ng)%svstr(i,jstr)- &
686 &
forces(ng)%bvstr(i,jstr))+ &
687 & cff*(
forces(ng)%tl_svstr(i,jstr)- &
688 &
forces(ng)%tl_bvstr(i,jstr))- &
690 & cff*(
forces(ng)%svstr(i,jstr)- &
691 &
forces(ng)%bvstr(i,jstr))
698 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,know)+ &
699 & dt2d*(tl_bry_pgr+ &
706 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)* &
707 &
grid(ng)%vmask(i,jstr)
719 tl_vbar(i,jstr,kout)=0.0_r8
729 IF (
domain(ng)%Northern_Edge(tile))
THEN
734 IF (
iic(ng).ne.0)
THEN
739 tl_grad(i,jend+1)=0.0_r8
743# if defined CELERITY_READ && defined FORWARD_READ
747 & (
clima(ng)%M2nudgcof(i,jend )+ &
748 &
clima(ng)%M2nudgcof(i,jend+1))
749 obc_in =
obcfac(ng)*obc_out
754 IF (
boundary(ng)%vbar_north_Ce(i).lt.0.0_r8)
THEN
775 tl_vbar(i,jend+1,kout)=(cff*tl_vbar(i,jend+1,know)+ &
776 & ce *tl_vbar(i,jend ,kout)- &
778 & tl_grad(i ,jend+1)- &
780 & tl_grad(i+1,jend+1))/ &
788 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)- &
789 & tau*tl_vbar(i,jend+1,know)
795 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)* &
796 &
grid(ng)%vmask(i,jend+1)
807# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
809 bry_pgr=-
g*(
boundary(ng)%zeta_north(i)- &
810 & zeta(i,jend,know))* &
811 & 0.5_r8*
grid(ng)%pn(i,jend)
812 tl_bry_pgr=-
g*(
boundary(ng)%tl_zeta_north(i)- &
813 & tl_zeta(i,jend,know))* &
814 & 0.5_r8*
grid(ng)%pn(i,jend)
816 bry_pgr=-
g*(zeta(i,jend+1,know)- &
817 & zeta(i,jend ,know))* &
818 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
819 &
grid(ng)%pn(i,jend+1))
820 tl_bry_pgr=-
g*(tl_zeta(i,jend+1,know)- &
821 & tl_zeta(i,jend ,know))* &
822 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
823 &
grid(ng)%pn(i,jend+1))
826 bry_cor=-0.125_r8*(ubar(i ,jend ,know)+ &
827 & ubar(i+1,jend ,know)+ &
828 & ubar(i ,jend+1,know)+ &
829 & ubar(i+1,jend+1,know))* &
830 & (
grid(ng)%f(i,jend )+ &
831 &
grid(ng)%f(i,jend+1))
832 tl_bry_cor=-0.125_r8*(tl_ubar(i ,jend ,know)+ &
833 & tl_ubar(i+1,jend ,know)+ &
834 & tl_ubar(i ,jend+1,know)+ &
835 & tl_ubar(i+1,jend+1,know))* &
836 & (
grid(ng)%f(i,jend )+ &
837 &
grid(ng)%f(i,jend+1))
842 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
843 & zeta(i,jend ,know)+ &
844 &
grid(ng)%h(i,jend+1)+ &
845 & zeta(i,jend+1,know)))
846 tl_cff1=-cff1*cff1*0.5_r8*(
grid(ng)%tl_h(i,jend )+ &
847 & tl_zeta(i,jend ,know)+ &
848 &
grid(ng)%tl_h(i,jend+1)+ &
849 & tl_zeta(i,jend+1,know))+ &
853 bry_str=cff1*(
forces(ng)%svstr(i,jend+1)- &
854 &
forces(ng)%bvstr(i,jend+1))
855 tl_bry_str=tl_cff1*(
forces(ng)%svstr(i,jend+1)- &
856 &
forces(ng)%bvstr(i,jend+1))+ &
857 & cff1*(
forces(ng)%tl_svstr(i,jend+1)- &
858 &
forces(ng)%tl_bvstr(i,jend+1))- &
862 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jend+1)+ &
863 & zeta(i,jend+1,know)+ &
864 &
grid(ng)%h(i,jend )+ &
865 & zeta(i,jend ,know)))
866 tl_ce=-ce*ce*ce*0.25_r8*
g*(
grid(ng)%tl_h(i,jend+1)+ &
867 & tl_zeta(i,jend+1,know)+ &
868 &
grid(ng)%tl_h(i,jend )+ &
869 & tl_zeta(i,jend ,know))+ &
871 &
g*0.5_r8*ce*ce*ce*(
grid(ng)%h(i,jend+1)+ &
872 & zeta(i,jend+1,know)+ &
873 &
grid(ng)%h(i,jend )+ &
874 & zeta(i,jend ,know))
876 cff2=
grid(ng)%on_v(i,jend+1)*ce
877 tl_cff2=
grid(ng)%on_v(i,jend+1)*tl_ce
883 tl_bry_val=tl_vbar(i,jend,know)+ &
884 & tl_cff2*(bry_pgr+ &
887 & cff2*(tl_bry_pgr+ &
891 & cff2*(bry_pgr+bry_cor+bry_str)
896 tl_bry_val=
boundary(ng)%tl_vbar_north(i)
898 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
899 & zeta(i,jend ,know)+ &
900 &
grid(ng)%h(i,jend+1)+ &
901 & zeta(i,jend+1,know)))
902 tl_cff=-cff*cff*(0.5_r8*(
grid(ng)%tl_h(i,jend )+ &
903 & tl_zeta(i,jend ,know)+ &
904 &
grid(ng)%tl_h(i,jend+1)+ &
905 & tl_zeta(i,jend+1,know)))+ &
910 tl_ce=0.5_r8*
g*tl_cff/ce+ &
914# if defined ATM_PRESS && defined PRESS_COMPENSATE
924 tl_vbar(i,jend+1,kout)=tl_bry_val+ &
927 & (zeta(i,jend ,know)+ &
928 & zeta(i,jend+1,know)+ &
929 & fac*(
forces(ng)%Pair(i,jend )+ &
930 &
forces(ng)%Pair(i,jend+1)- &
934 & (0.5_r8*(tl_zeta(i,jend ,know)+ &
935 & tl_zeta(i,jend+1,know)))- &
939 & (zeta(i,jend ,know)+ &
940 & zeta(i,jend+1,know)+ &
941 & fac*(
forces(ng)%Pair(i,jend )+ &
942 &
forces(ng)%Pair(i,jend+1)- &
952 tl_vbar(i,jend+1,kout)=tl_bry_val+ &
954 & (0.5_r8*(zeta(i,jend ,know)+ &
955 & zeta(i,jend+1,know))- &
958 & (0.5_r8*(tl_zeta(i,jend ,know)+ &
959 & tl_zeta(i,jend+1,know))- &
963 & (0.5_r8*(zeta(i,jend ,know)+ &
964 & zeta(i,jend+1,know))- &
972 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)* &
973 &
grid(ng)%vmask(i,jend+1)
983# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
985 bry_pgr=-
g*(
boundary(ng)%zeta_north(i)- &
986 & zeta(i,jend,know))* &
987 & 0.5_r8*
grid(ng)%pn(i,jend)
988 tl_bry_pgr=-
g*(
boundary(ng)%tl_zeta_north(i)- &
989 & tl_zeta(i,jend,know))* &
990 & 0.5_r8*
grid(ng)%pn(i,jend)
992 bry_pgr=-
g*(zeta(i,jend+1,know)- &
993 & zeta(i,jend ,know))* &
994 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
995 &
grid(ng)%pn(i,jend+1))
996 tl_bry_pgr=-
g*(tl_zeta(i,jend+1,know)- &
997 & tl_zeta(i,jend ,know))* &
998 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
999 &
grid(ng)%pn(i,jend+1))
1002 bry_cor=-0.125_r8*(ubar(i ,jend ,know)+ &
1003 & ubar(i+1,jend ,know)+ &
1004 & ubar(i ,jend+1,know)+ &
1005 & ubar(i+1,jend+1,know))* &
1006 & (
grid(ng)%f(i,jend )+ &
1007 &
grid(ng)%f(i,jend+1))
1008 tl_bry_cor=-0.125_r8*(tl_ubar(i ,jend ,know)+ &
1009 & tl_ubar(i+1,jend ,know)+ &
1010 & tl_ubar(i ,jend+1,know)+ &
1011 & tl_ubar(i+1,jend+1,know))* &
1012 & (
grid(ng)%f(i,jend )+ &
1013 &
grid(ng)%f(i,jend+1))
1018 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
1019 & zeta(i,jend ,know)+ &
1020 &
grid(ng)%h(i,jend+1)+ &
1021 & zeta(i,jend+1,know)))
1022 tl_cff1=-cff1*cff1*0.5_r8*(
grid(ng)%tl_h(i,jend )+ &
1023 & tl_zeta(i,jend ,know)+ &
1024 &
grid(ng)%tl_h(i,jend+1)+ &
1025 & tl_zeta(i,jend+1,know))+ &
1029 bry_str=cff1*(
forces(ng)%svstr(i,jend+1)- &
1030 &
forces(ng)%bvstr(i,jend+1))
1031 tl_bry_str=tl_cff1*(
forces(ng)%svstr(i,jend+1)- &
1032 &
forces(ng)%bvstr(i,jend+1))+ &
1033 & cff1*(
forces(ng)%tl_svstr(i,jend+1)- &
1034 &
forces(ng)%tl_bvstr(i,jend+1))- &
1038 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jend+1)+ &
1039 & zeta(i,jend+1,know)+ &
1040 &
grid(ng)%h(i,jend )+ &
1041 & zeta(i,jend ,know)))
1042 tl_ce=-ce*ce*ce*0.25_r8*
g*(
grid(ng)%tl_h(i,jend+1)+ &
1043 & tl_zeta(i,jend+1,know)+ &
1044 &
grid(ng)%tl_h(i,jend )+ &
1045 & tl_zeta(i,jend ,know))+ &
1047 &
g*0.5_r8*ce*ce*ce*(
grid(ng)%h(i,jend+1)+ &
1048 & zeta(i,jend+1,know)+ &
1049 &
grid(ng)%h(i,jend )+ &
1050 & zeta(i,jend ,know))
1052 cff2=
grid(ng)%on_v(i,jend+1)*ce
1053 tl_cff2=
grid(ng)%on_v(i,jend+1)*tl_ce
1059 tl_bry_val=tl_vbar(i,jend,know)+ &
1060 & tl_cff2*(bry_pgr+ &
1063 & cff2*(tl_bry_pgr+ &
1067 & cff2*(bry_pgr+bry_cor+bry_str)
1072 tl_bry_val=
boundary(ng)%tl_vbar_north(i)
1074# ifdef WET_DRY_NOT_YET
1075 cff=0.5_r8*(
grid(ng)%h(i,jend )+ &
1076 & zeta(i,jend ,know)+ &
1077 &
grid(ng)%h(i,jend+1)+ &
1078 & zeta(i,jend+1,know))
1079 tl_cff=0.5_r8*(
grid(ng)%tl_h(i,jend )+ &
1080 & tl_zeta(i,jend ,know)+ &
1081 &
grid(ng)%tl_h(i,jend+1)+ &
1082 & tl_zeta(i,jend+1,know))
1085 cff=0.5_r8*(
grid(ng)%h(i,jend )+ &
1086 &
grid(ng)%h(i,jend+1))
1087 tl_cff=0.5_r8*(
grid(ng)%tl_h(i,jend )+ &
1088 &
grid(ng)%tl_h(i,jend+1))
1091 tl_cff1=-0.5_r8*cff1*tl_cff/cff+ &
1095 ce=dt2d*cff1*cff*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1096 &
grid(ng)%pn(i,jend+1))
1097 tl_ce=dt2d*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1098 &
grid(ng)%pn(i,jend+1))* &
1104 ze=(0.5_r8+ce)*zeta(i,jend ,know)+ &
1105 & (0.5_r8-ce)*zeta(i,jend+1,know)
1106 tl_ze=(0.5_r8+ce)*tl_zeta(i,jend ,know)+ &
1107 & (0.5_r8-ce)*tl_zeta(i,jend+1,know)+ &
1108 & tl_ce*(zeta(i,jend ,know)- &
1109 & zeta(i,jend+1,know))- &
1114 cff2=(1.0_r8-
co/ce)**2
1115 tl_cff2=2.0_r8*cff2*
co*tl_ce/(ce*ce)- &
1119 cff3=zeta(i,jend,kout)+ &
1120 & ce*zeta(i,jend+1,know)- &
1121 & (1.0_r8+ce)*zeta(i,jend,know)
1122 tl_cff3=tl_zeta(i,jend,kout)+ &
1123 & ce*tl_zeta(i,jend+1,know)+ &
1124 & tl_ce*(zeta(i,jend ,know)+ &
1125 & zeta(i,jend+1,know))- &
1126 & (1.0_r8+ce)*tl_zeta(i,jend,know)- &
1128 & ce*zeta(i,jend+1,know)+ &
1129 & (1.0_r8+ce)*zeta(i,jend,know)
1132 tl_ze=tl_ze+cff2*tl_cff3+ &
1144 tl_vbar(i,jend+1,kout)=0.5_r8* &
1146 & tl_vbar(i,jend+1,know)+ &
1147 & tl_ce*(vbar(i,jend ,know)- &
1148 & vbar(i,jend+1,know))+ &
1149 & ce*tl_vbar(i,jend,know)+ &
1152 & (ze-
boundary(ng)%zeta_north(i))- &
1156 & ((1.0_r8-ce)*vbar(i,jend+1,know)+ &
1157 & ce*vbar(i,jend,know)+ &
1162# ifdef ADJUST_BOUNDARY
1164 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)- &
1173 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)* &
1174 &
grid(ng)%vmask(i,jend+1)
1190 tl_vbar(i,jend+1,kout)=
boundary(ng)%tl_vbar_north(i)
1192 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)* &
1193 &
grid(ng)%vmask(i,jend+1)
1205 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend,kout)
1210 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)* &
1211 &
grid(ng)%vmask(i,jend+1)
1226 tl_bry_pgr=-
g*(
boundary(ng)%tl_zeta_north(i)- &
1227 & tl_zeta(i,jend,know))* &
1228 & 0.5_r8*
grid(ng)%pn(i,jend)
1235 tl_bry_pgr=-
g*(tl_zeta(i,jend+1,know)- &
1236 & tl_zeta(i,jend ,know))* &
1237 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
1238 &
grid(ng)%pn(i,jend+1))
1248 tl_bry_cor=-0.125_r8*(tl_ubar(i ,jend ,know)+ &
1249 & tl_ubar(i+1,jend ,know)+ &
1250 & tl_ubar(i ,jend+1,know)+ &
1251 & tl_ubar(i+1,jend+1,know))* &
1252 & (
grid(ng)%f(i,jend )+ &
1253 &
grid(ng)%f(i,jend+1))
1259 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
1260 & zeta(i,jend ,know)+ &
1261 &
grid(ng)%h(i,jend+1)+ &
1262 & zeta(i,jend+1,know)))
1263 tl_cff=-cff*cff*0.5_r8*(
grid(ng)%tl_h(i,jend )+ &
1264 & tl_zeta(i,jend ,know)+ &
1265 &
grid(ng)%tl_h(i,jend+1)+ &
1266 & tl_zeta(i,jend+1,know))+ &
1273 tl_bry_str=tl_cff*(
forces(ng)%svstr(i,jend+1)- &
1274 &
forces(ng)%bvstr(i,jend+1))+ &
1275 & cff*(
forces(ng)%tl_svstr(i,jend+1)- &
1276 &
forces(ng)%tl_bvstr(i,jend+1))- &
1278 & cff*(
forces(ng)%svstr(i,jend+1)- &
1279 &
forces(ng)%bvstr(i,jend+1))
1286 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,know)+ &
1287 & dt2d*(tl_bry_pgr+ &
1294 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)* &
1295 &
grid(ng)%vmask(i,jend+1)
1307 tl_vbar(i,jend+1,kout)=0.0_r8
1317 IF (
domain(ng)%Western_Edge(tile))
THEN
1322 IF (
iic(ng).ne.0)
THEN
1327 tl_grad(istr-1,j)=0.0_r8
1331# if defined CELERITY_READ && defined FORWARD_READ
1335 & (
clima(ng)%M2nudgcof(istr-1,j-1)+ &
1336 &
clima(ng)%M2nudgcof(istr-1,j ))
1337 obc_in =
obcfac(ng)*obc_out
1342 IF (
boundary(ng)%vbar_west_Cx(j).lt.0.0_r8)
THEN
1363 tl_vbar(istr-1,j,kout)=(cff*tl_vbar(istr-1,j,know)+ &
1364 & cx *tl_vbar(1,j,kout)- &
1366 & tl_grad(istr-1,j-1)- &
1368 & tl_grad(istr-1,j ))/ &
1376 tl_vbar(istr-1,j,kout)=tl_vbar(istr-1,j,kout)- &
1377 & tau*tl_vbar(1,j,know)
1383 tl_vbar(istr-1,j,kout)=tl_vbar(istr-1,j,kout)* &
1384 &
grid(ng)%vmask(istr-1,j)
1397 cff=dt2d*0.5_r8*(
grid(ng)%pm(istr,j-1)+ &
1398 &
grid(ng)%pm(istr,j ))
1399 cff1=sqrt(
g*0.5_r8*(
grid(ng)%h(istr,j-1)+ &
1400 & zeta(istr,j-1,know)+ &
1401 &
grid(ng)%h(istr,j )+ &
1402 & zeta(istr,j ,know)))
1403 tl_cff1=0.25_r8*
g*(
grid(ng)%tl_h(istr,j-1)+ &
1404 & tl_zeta(istr,j-1,know)+ &
1405 &
grid(ng)%tl_h(istr,j )+ &
1406 & tl_zeta(istr,j ,know))/cff1+ &
1412 cff2=1.0_r8/(1.0_r8+cx)
1413 tl_cff2=-cff2*cff2*tl_cx+ &
1415 & cff2*cff2*(1.0_r8+2.0_r8*cx)
1420 tl_vbar(istr-1,j,kout)=tl_cff2*(vbar(istr-1,j,know)+ &
1421 & cx*vbar(istr,j,kout))+ &
1422 & cff2*(tl_vbar(istr-1,j,know)+ &
1423 & tl_cx*vbar(istr,j,kout)+ &
1424 & cx*tl_vbar(istr,j,kout))- &
1426 & cff2*(vbar(istr-1,j,know)+ &
1427 & 2.0_r8*cx*vbar(istr,j,kout))
1433 tl_vbar(istr-1,j,kout)=tl_vbar(istr-1,j,kout)* &
1434 &
grid(ng)%vmask(istr-1,j)
1446 tl_vbar(istr-1,j,kout)=
boundary(ng)%tl_vbar_west(j)
1451 tl_vbar(istr-1,j,kout)=tl_vbar(istr-1,j,kout)* &
1452 &
grid(ng)%vmask(istr-1,j)
1464 tl_vbar(istr-1,j,kout)=tl_vbar(istr,j,kout)
1469 tl_vbar(istr-1,j,kout)=tl_vbar(istr-1,j,kout)* &
1470 &
grid(ng)%vmask(istr-1,j)
1490 tl_vbar(istr-1,j,kout)=
gamma2(ng)*tl_vbar(istr,j,kout)
1495 tl_vbar(istr-1,j,kout)=tl_vbar(istr-1,j,kout)* &
1496 &
grid(ng)%vmask(istr-1,j)
1507 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1512 IF (
iic(ng).ne.0)
THEN
1517 tl_grad(iend+1,j)=0.0_r8
1521# if defined CELERITY_READ && defined FORWARD_READ
1525 & (
clima(ng)%M2nudgcof(iend+1,j-1)+ &
1526 &
clima(ng)%M2nudgcof(iend+1,j ))
1527 obc_in =
obcfac(ng)*obc_out
1532 IF (
boundary(ng)%vbar_east_Cx(j).lt.0.0_r8)
THEN
1553 tl_vbar(iend+1,j,kout)=(cff*tl_vbar(iend+1,j,know)+ &
1554 & cx *tl_vbar(iend ,j,kout)- &
1556 & tl_grad(iend+1,j-1)- &
1558 & tl_grad(iend+1,j ))/ &
1566 tl_vbar(iend+1,j,kout)=tl_vbar(iend+1,j,kout)- &
1567 & tau*tl_vbar(iend+1,j,know)
1573 tl_vbar(iend+1,j,kout)=tl_vbar(iend+1,j,kout)* &
1574 &
grid(ng)%vmask(iend+1,j)
1587 cff=dt2d*0.5_r8*(
grid(ng)%pm(iend,j-1)+ &
1588 &
grid(ng)%pm(iend,j ))
1589 cff1=sqrt(
g*0.5_r8*(
grid(ng)%h(iend,j-1)+ &
1590 & zeta(iend,j-1,know)+ &
1591 &
grid(ng)%h(iend,j )+ &
1592 & zeta(iend,j ,know)))
1593 tl_cff1=0.25_r8*
g*(
grid(ng)%tl_h(iend,j-1)+ &
1594 & tl_zeta(iend,j-1,know)+ &
1595 &
grid(ng)%tl_h(iend,j )+ &
1596 & tl_zeta(iend,j ,know))/cff1+ &
1602 cff2=1.0_r8/(1.0_r8+cx)
1603 tl_cff2=-cff2*cff2*tl_cx+ &
1605 & cff2*cff2*(1.0_r8+2.0_r8*cx)
1610 tl_vbar(iend+1,j,kout)=tl_cff2*(vbar(iend+1,j,know)+ &
1611 & cx*vbar(iend,j,kout))+ &
1612 & cff2*(tl_vbar(iend+1,j,know)+ &
1613 & tl_cx*vbar(iend,j,kout)+ &
1614 & cx*tl_vbar(iend,j,kout))- &
1616 & cff2*(vbar(iend+1,j,know)+ &
1617 & 2.0_r8*cx*vbar(iend,j,kout))
1623 tl_vbar(iend+1,j,kout)=tl_vbar(iend+1,j,kout)* &
1624 &
grid(ng)%vmask(iend+1,j)
1636 tl_vbar(iend+1,j,kout)=
boundary(ng)%tl_vbar_east(j)
1641 tl_vbar(iend+1,j,kout)=tl_vbar(iend+1,j,kout)* &
1642 &
grid(ng)%vmask(iend+1,j)
1654 tl_vbar(iend+1,j,kout)=tl_vbar(iend,j,kout)
1659 tl_vbar(iend+1,j,kout)=tl_vbar(iend+1,j,kout)* &
1660 &
grid(ng)%vmask(iend+1,j)
1680 tl_vbar(iend+1,j,kout)=
gamma2(ng)*tl_vbar(iend,j,kout)
1685 tl_vbar(iend+1,j,kout)=tl_vbar(iend+1,j,kout)* &
1686 &
grid(ng)%vmask(iend+1,j)
1698 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
1704 tl_vbar(istr-1,jstr,kout)=0.5_r8* &
1705 & (tl_vbar(istr ,jstr ,kout)+ &
1706 & tl_vbar(istr-1,jstr+1,kout))
1709 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
1715 tl_vbar(iend+1,jstr,kout)=0.5_r8* &
1716 & (tl_vbar(iend ,jstr ,kout)+ &
1717 & tl_vbar(iend+1,jstr+1,kout))
1720 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
1726 tl_vbar(istr-1,jend+1,kout)=0.5_r8* &
1727 & (tl_vbar(istr-1,jend ,kout)+ &
1728 & tl_vbar(istr ,jend+1,kout))
1731 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
1737 tl_vbar(iend+1,jend+1,kout)=0.5_r8* &
1738 & (tl_vbar(iend+1,jend ,kout)+ &
1739 & tl_vbar(iend ,jend+1,kout))
1744# if defined WET_DRY_NOT_YET
1753 IF (
domain(ng)%Western_Edge(tile))
THEN
1766 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1782 IF (
domain(ng)%Southern_Edge(tile))
THEN
1795 IF (
domain(ng)%Northern_Edge(tile))
THEN
1811 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
1824 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
1837 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
1850 IF (
domain(ng)%NorthEast_Corner(tile))
THEN