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)* &
227 & 0.5_r8*
grid(ng)%pn(i,jstr)
228# ifdef ADJUST_BOUNDARY
230 tl_bry_pgr=tl_bry_pgr+ &
232 & 0.5_r8*
grid(ng)%pn(i,jstr)
236 bry_pgr=-
g*(zeta(i,jstr ,know)- &
237 & zeta(i,jstr-1,know))* &
238 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
239 &
grid(ng)%pn(i,jstr ))
240 tl_bry_pgr=-
g*(tl_zeta(i,jstr ,know)- &
241 & tl_zeta(i,jstr-1,know))* &
242 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
243 &
grid(ng)%pn(i,jstr ))
246 bry_cor=-0.125_r8*(ubar(i ,jstr-1,know)+ &
247 & ubar(i+1,jstr-1,know)+ &
248 & ubar(i ,jstr ,know)+ &
249 & ubar(i+1,jstr ,know))* &
250 & (
grid(ng)%f(i,jstr-1)+ &
251 &
grid(ng)%f(i,jstr ))
252 tl_bry_cor=-0.125_r8*(tl_ubar(i ,jstr-1,know)+ &
253 & tl_ubar(i+1,jstr-1,know)+ &
254 & tl_ubar(i ,jstr ,know)+ &
255 & tl_ubar(i+1,jstr ,know))* &
256 & (
grid(ng)%f(i,jstr-1)+ &
257 &
grid(ng)%f(i,jstr ))
262 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
263 & zeta(i,jstr-1,know)+ &
264 &
grid(ng)%h(i,jstr )+ &
265 & zeta(i,jstr ,know)))
266 tl_cff1=-cff1*cff1*(0.5_r8*(
grid(ng)%tl_h(i,jstr-1)+ &
267 & tl_zeta(i,jstr-1,know)+ &
268 &
grid(ng)%tl_h(i,jstr )+ &
269 & tl_zeta(i,jstr ,know)))
270 bry_str=cff1*(
forces(ng)%svstr(i,jstr)- &
271 &
forces(ng)%bvstr(i,jstr))
272 tl_bry_str=tl_cff1*(
forces(ng)%svstr(i,jstr)- &
273 &
forces(ng)%bvstr(i,jstr))+ &
274 & cff1*(
forces(ng)%tl_svstr(i,jstr)- &
275 &
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))
284 cff2=
grid(ng)%on_v(i,jstr)*ce
285 tl_cff2=
grid(ng)%on_v(i,jstr)*tl_ce
291 tl_bry_val=tl_vbar(i,jstr+1,know)+ &
292 & tl_cff2*(bry_pgr+ &
295 & cff2*(tl_bry_pgr+ &
301# ifdef ADJUST_BOUNDARY
303 tl_bry_val=
boundary(ng)%tl_vbar_south(i)
311 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
312 & zeta(i,jstr-1,know)+ &
313 &
grid(ng)%h(i,jstr )+ &
314 & zeta(i,jstr ,know)))
315 tl_cff=-cff*cff*(0.5_r8*(
grid(ng)%tl_h(i,jstr-1)+ &
316 & tl_zeta(i,jstr-1,know)+ &
317 &
grid(ng)%tl_h(i,jstr )+ &
318 & tl_zeta(i,jstr ,know)))
320 tl_ce=0.5_r8*
g*tl_cff/ce
321# if defined ATM_PRESS && defined PRESS_COMPENSATE
331 tl_vbar(i,jstr,kout)=tl_bry_val- &
334 & (zeta(i,jstr-1,know)+ &
335 & zeta(i,jstr ,know)+ &
336 & fac*(
forces(ng)%Pair(i,jstr-1)+ &
337 &
forces(ng)%Pair(i,jstr )- &
341 & (0.5_r8*(tl_zeta(i,jstr-1,know)+ &
342 & tl_zeta(i,jstr ,know)))
349 tl_vbar(i,jstr,kout)=tl_bry_val- &
351 & (0.5_r8*(zeta(i,jstr-1,know)+ &
352 & zeta(i,jstr ,know))- &
355 & (0.5_r8*(tl_zeta(i,jstr-1,know)+ &
356 & tl_zeta(i,jstr ,know)))
358# ifdef ADJUST_BOUNDARY
360 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)+ &
368 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)* &
369 &
grid(ng)%vmask(i,jstr)
379# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
381 bry_pgr=-
g*(zeta(i,jstr,know)- &
383 & 0.5_r8*
grid(ng)%pn(i,jstr)
384 tl_bry_pgr=-
g*tl_zeta(i,jstr,know)* &
385 & 0.5_r8*
grid(ng)%pn(i,jstr)
386# ifdef ADJUST_BOUNDARY
388 tl_bry_pgr=tl_bry_pgr+ &
390 & 0.5_r8*
grid(ng)%pn(i,jstr)
394 bry_pgr=-
g*(zeta(i,jstr ,know)- &
395 & zeta(i,jstr-1,know))* &
396 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
397 &
grid(ng)%pn(i,jstr ))
398 tl_bry_pgr=-
g*(tl_zeta(i,jstr ,know)- &
399 & tl_zeta(i,jstr-1,know))* &
400 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
401 &
grid(ng)%pn(i,jstr ))
404 bry_cor=-0.125_r8*(ubar(i ,jstr-1,know)+ &
405 & ubar(i+1,jstr-1,know)+ &
406 & ubar(i ,jstr ,know)+ &
407 & ubar(i+1,jstr ,know))* &
408 & (
grid(ng)%f(i,jstr-1)+ &
409 &
grid(ng)%f(i,jstr ))
410 tl_bry_cor=-0.125_r8*(tl_ubar(i ,jstr-1,know)+ &
411 & tl_ubar(i+1,jstr-1,know)+ &
412 & tl_ubar(i ,jstr ,know)+ &
413 & tl_ubar(i+1,jstr ,know))* &
414 & (
grid(ng)%f(i,jstr-1)+ &
415 &
grid(ng)%f(i,jstr ))
420 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
421 & zeta(i,jstr-1,know)+ &
422 &
grid(ng)%h(i,jstr )+ &
423 & zeta(i,jstr ,know)))
424 tl_cff1=-cff1*cff1*(0.5_r8*(
grid(ng)%tl_h(i,jstr-1)+ &
425 & tl_zeta(i,jstr-1,know)+ &
426 &
grid(ng)%tl_h(i,jstr )+ &
427 & tl_zeta(i,jstr ,know)))
428 bry_str=cff1*(
forces(ng)%svstr(i,jstr)- &
429 &
forces(ng)%bvstr(i,jstr))
430 tl_bry_str=tl_cff1*(
forces(ng)%svstr(i,jstr)- &
431 &
forces(ng)%bvstr(i,jstr))+ &
432 & cff1*(
forces(ng)%tl_svstr(i,jstr)- &
433 &
forces(ng)%tl_bvstr(i,jstr))
434 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
435 & zeta(i,jstr-1,know)+ &
436 &
grid(ng)%h(i,jstr )+ &
437 & zeta(i,jstr ,know)))
438 tl_ce=-ce*ce*ce*0.25_r8*
g*(
grid(ng)%tl_h(i,jstr-1)+ &
439 & tl_zeta(i,jstr-1,know)+ &
440 &
grid(ng)%tl_h(i,jstr )+ &
441 & tl_zeta(i,jstr ,know))
442 cff2=
grid(ng)%on_v(i,jstr)*ce
443 tl_cff2=
grid(ng)%on_v(i,jstr)*tl_ce
449 tl_bry_val=tl_vbar(i,jstr+1,know)+ &
450 & tl_cff2*(bry_pgr+ &
453 & cff2*(tl_bry_pgr+ &
459# ifdef ADJUST_BOUNDARY
461 tl_bry_val=
boundary(ng)%tl_vbar_south(i)
469# ifdef WET_DRY_NOT_YET
470 cff=0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
471 & zeta(i,jstr-1,know)+ &
472 &
grid(ng)%h(i,jstr )+ &
473 & zeta(i,jstr ,know))
474 tl_cff=0.5_r8*(
grid(ng)%tl_h(i,jstr-1)+ &
475 & tl_zeta(i,jstr-1,know)+ &
476 &
grid(ng)%tl_h(i,jstr )+ &
477 & tl_zeta(i,jstr ,know))
479 cff=0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
480 &
grid(ng)%h(i,jstr ))
481 tl_cff=0.5_r8*(
grid(ng)%tl_h(i,jstr-1)+ &
482 &
grid(ng)%tl_h(i,jstr ))
485 tl_cff1=-0.5_r8*cff1*tl_cff/cff
486 ce=dt2d*cff1*cff*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
487 &
grid(ng)%pn(i,jstr ))
488 tl_ce=dt2d*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
489 &
grid(ng)%pn(i,jstr ))* &
492 ze=(0.5_r8+ce)*zeta(i,jstr ,know)+ &
493 & (0.5_r8-ce)*zeta(i,jstr-1,know)
494 tl_ze=(0.5_r8+ce)*tl_zeta(i,jstr ,know)+ &
495 & (0.5_r8-ce)*tl_zeta(i,jstr-1,know)+ &
496 & tl_ce*(zeta(i,jstr ,know)- &
497 & zeta(i,jstr-1,know))
499 cff2=(1.0_r8-
co/ce)**2
500 tl_cff2=2.0_r8*cff2*
co*tl_ce/(ce*ce)
501 cff3=zeta(i,jstr,kout)+ &
502 & ce*zeta(i,jstr-1,know)- &
503 & (1.0_r8+ce)*zeta(i,jstr,know)
504 tl_cff3=tl_zeta(i,jstr,kout)+ &
505 & ce*tl_zeta(i,jstr-1,know)+ &
506 & tl_ce*(zeta(i,jstr-1,know)+ &
507 & zeta(i,jstr ,know))- &
508 & (1.0_r8+ce)*tl_zeta(i,jstr,know)
510 tl_ze=tl_ze+cff2*tl_cff3+ &
519 tl_vbar(i,jstr,kout)=0.5_r8* &
521 & tl_vbar(i,jstr,know)- &
522 & tl_ce*(vbar(i,jstr ,know)- &
523 & vbar(i,jstr+1,know))+ &
524 & ce*tl_vbar(i,jstr+1,know)+ &
527 & (ze-
boundary(ng)%zeta_south(i))- &
529# ifdef ADJUST_BOUNDARY
531 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)+ &
540 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)* &
541 &
grid(ng)%vmask(i,jstr)
553# ifdef ADJUST_BOUNDARY
555 tl_vbar(i,jstr,kout)=
boundary(ng)%tl_vbar_south(i)
557 tl_vbar(i,jstr,kout)=0.0_r8
560 tl_vbar(i,jstr,kout)=0.0_r8
566 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)* &
567 &
grid(ng)%vmask(i,jstr)
579 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr+1,kout)
584 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)* &
585 &
grid(ng)%vmask(i,jstr)
600 tl_bry_pgr=-
g*tl_zeta(i,jstr,know)* &
601 & 0.5_r8*
grid(ng)%pn(i,jstr)
602# ifdef ADJUST_BOUNDARY
604 tl_bry_pgr=tl_bry_pgr+ &
606 & 0.5_r8*
grid(ng)%pn(i,jstr)
615 tl_bry_pgr=-
g*(tl_zeta(i,jstr ,know)- &
616 & tl_zeta(i,jstr-1,know))* &
617 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
618 &
grid(ng)%pn(i,jstr ))
628 tl_bry_cor=-0.125_r8*(tl_ubar(i ,jstr-1,know)+ &
629 & tl_ubar(i+1,jstr-1,know)+ &
630 & tl_ubar(i ,jstr ,know)+ &
631 & tl_ubar(i+1,jstr ,know))* &
632 & (
grid(ng)%f(i,jstr-1)+ &
633 &
grid(ng)%f(i,jstr ))
639 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
640 & zeta(i,jstr-1,know)+ &
641 &
grid(ng)%h(i,jstr )+ &
642 & zeta(i,jstr ,know)))
643 tl_cff=-cff*cff*0.5_r8*(
grid(ng)%tl_h(i,jstr-1)+ &
644 & tl_zeta(i,jstr-1,know)+ &
645 &
grid(ng)%tl_h(i,jstr )+ &
646 & tl_zeta(i,jstr ,know))
650 tl_bry_str=tl_cff*(
forces(ng)%svstr(i,jstr)- &
651 &
forces(ng)%bvstr(i,jstr))+ &
652 & cff*(
forces(ng)%tl_svstr(i,jstr)- &
653 &
forces(ng)%tl_bvstr(i,jstr))
660 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,know)+ &
661 & dt2d*(tl_bry_pgr+ &
668 tl_vbar(i,jstr,kout)=tl_vbar(i,jstr,kout)* &
669 &
grid(ng)%vmask(i,jstr)
681 tl_vbar(i,jstr,kout)=0.0_r8
691 IF (
domain(ng)%Northern_Edge(tile))
THEN
696 IF (
iic(ng).ne.0)
THEN
701 tl_grad(i,jend+1)=0.0_r8
705# if defined CELERITY_READ && defined FORWARD_READ
709 & (
clima(ng)%M2nudgcof(i,jend )+ &
710 &
clima(ng)%M2nudgcof(i,jend+1))
711 obc_in =
obcfac(ng)*obc_out
716 IF (
boundary(ng)%vbar_north_Ce(i).lt.0.0_r8)
THEN
737 tl_vbar(i,jend+1,kout)=(cff*tl_vbar(i,jend+1,know)+ &
738 & ce *tl_vbar(i,jend ,kout)- &
740 & tl_grad(i ,jend+1)- &
742 & tl_grad(i+1,jend+1))/ &
750 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)- &
751 & tau*tl_vbar(i,jend+1,know)
757 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)* &
758 &
grid(ng)%vmask(i,jend+1)
769# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
771 bry_pgr=-
g*(
boundary(ng)%zeta_north(i)- &
772 & zeta(i,jend,know))* &
773 & 0.5_r8*
grid(ng)%pn(i,jend)
774 tl_bry_pgr=
g*tl_zeta(i,jend,know)* &
775 & 0.5_r8*
grid(ng)%pn(i,jend)
776# ifdef ADJUST_BOUNDARY
778 tl_bry_pgr=tl_bry_pgr- &
780 & 0.5_r8*
grid(ng)%pn(i,jend)
784 bry_pgr=-
g*(zeta(i,jend+1,know)- &
785 & zeta(i,jend ,know))* &
786 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
787 &
grid(ng)%pn(i,jend+1))
788 tl_bry_pgr=-
g*(tl_zeta(i,jend+1,know)- &
789 & tl_zeta(i,jend ,know))* &
790 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
791 &
grid(ng)%pn(i,jend+1))
794 bry_cor=-0.125_r8*(ubar(i ,jend ,know)+ &
795 & ubar(i+1,jend ,know)+ &
796 & ubar(i ,jend+1,know)+ &
797 & ubar(i+1,jend+1,know))* &
798 & (
grid(ng)%f(i,jend )+ &
799 &
grid(ng)%f(i,jend+1))
800 tl_bry_cor=-0.125_r8*(tl_ubar(i ,jend ,know)+ &
801 & tl_ubar(i+1,jend ,know)+ &
802 & tl_ubar(i ,jend+1,know)+ &
803 & tl_ubar(i+1,jend+1,know))* &
804 & (
grid(ng)%f(i,jend )+ &
805 &
grid(ng)%f(i,jend+1))
810 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
811 & zeta(i,jend ,know)+ &
812 &
grid(ng)%h(i,jend+1)+ &
813 & zeta(i,jend+1,know)))
814 tl_cff1=-cff1*cff1*0.5_r8*(
grid(ng)%tl_h(i,jend )+ &
815 & tl_zeta(i,jend ,know)+ &
816 &
grid(ng)%tl_h(i,jend+1)+ &
817 & tl_zeta(i,jend+1,know))
818 bry_str=cff1*(
forces(ng)%svstr(i,jend+1)- &
819 &
forces(ng)%bvstr(i,jend+1))
820 tl_bry_str=tl_cff1*(
forces(ng)%svstr(i,jend+1)- &
821 &
forces(ng)%bvstr(i,jend+1))+ &
822 & cff1*(
forces(ng)%tl_svstr(i,jend+1)- &
823 &
forces(ng)%tl_bvstr(i,jend+1))
824 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jend+1)+ &
825 & zeta(i,jend+1,know)+ &
826 &
grid(ng)%h(i,jend )+ &
827 & zeta(i,jend ,know)))
828 tl_ce=-ce*ce*ce*0.25_r8*
g*(
grid(ng)%tl_h(i,jend+1)+ &
829 & tl_zeta(i,jend+1,know)+ &
830 &
grid(ng)%tl_h(i,jend )+ &
831 & tl_zeta(i,jend ,know))
832 cff2=
grid(ng)%on_v(i,jend+1)*ce
833 tl_cff2=
grid(ng)%on_v(i,jend+1)*tl_ce
839 tl_bry_val=tl_vbar(i,jend,know)+ &
840 & tl_cff2*(bry_pgr+ &
843 & cff2*(tl_bry_pgr+ &
849# ifdef ADJUST_BOUNDARY
851 tl_bry_val=
boundary(ng)%tl_vbar_north(i)
859 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
860 & zeta(i,jend ,know)+ &
861 &
grid(ng)%h(i,jend+1)+ &
862 & zeta(i,jend+1,know)))
863 tl_cff=-cff*cff*(0.5_r8*(
grid(ng)%tl_h(i,jend )+ &
864 & tl_zeta(i,jend ,know)+ &
865 &
grid(ng)%tl_h(i,jend+1)+ &
866 & tl_zeta(i,jend+1,know)))
868 tl_ce=0.5_r8*
g*tl_cff/ce
869# if defined ATM_PRESS && defined PRESS_COMPENSATE
879 tl_vbar(i,jend+1,kout)=tl_bry_val+ &
882 & (zeta(i,jend ,know)+ &
883 & zeta(i,jend+1,know)+ &
884 & fac*(
forces(ng)%Pair(i,jend )+ &
885 &
forces(ng)%Pair(i,jend+1)- &
889 & (0.5_r8*(tl_zeta(i,jend ,know)+ &
890 & tl_zeta(i,jend+1,know)))
897 tl_vbar(i,jend+1,kout)=tl_bry_val+ &
899 & (0.5_r8*(zeta(i,jend ,know)+ &
900 & zeta(i,jend+1,know))- &
903 & (0.5_r8*(tl_zeta(i,jend ,know)+ &
904 & tl_zeta(i,jend+1,know)))
906# ifdef ADJUST_BOUNDARY
908 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)- &
916 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)* &
917 &
grid(ng)%vmask(i,jend+1)
927# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
929 bry_pgr=-
g*(
boundary(ng)%zeta_north(i)- &
930 & zeta(i,jend,know))* &
931 & 0.5_r8*
grid(ng)%pn(i,jend)
932 tl_bry_pgr=
g*tl_zeta(i,jend,know)* &
933 & 0.5_r8*
grid(ng)%pn(i,jend)
934# ifdef ADJUST_BOUNDARY
936 tl_bry_pgr=tl_bry_pgr- &
938 & 0.5_r8*
grid(ng)%pn(i,jend)
942 bry_pgr=-
g*(zeta(i,jend+1,know)- &
943 & zeta(i,jend ,know))* &
944 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
945 &
grid(ng)%pn(i,jend+1))
946 tl_bry_pgr=-
g*(tl_zeta(i,jend+1,know)- &
947 & tl_zeta(i,jend ,know))* &
948 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
949 &
grid(ng)%pn(i,jend+1))
952 bry_cor=-0.125_r8*(ubar(i ,jend ,know)+ &
953 & ubar(i+1,jend ,know)+ &
954 & ubar(i ,jend+1,know)+ &
955 & ubar(i+1,jend+1,know))* &
956 & (
grid(ng)%f(i,jend )+ &
957 &
grid(ng)%f(i,jend+1))
958 tl_bry_cor=-0.125_r8*(tl_ubar(i ,jend ,know)+ &
959 & tl_ubar(i+1,jend ,know)+ &
960 & tl_ubar(i ,jend+1,know)+ &
961 & tl_ubar(i+1,jend+1,know))* &
962 & (
grid(ng)%f(i,jend )+ &
963 &
grid(ng)%f(i,jend+1))
968 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
969 & zeta(i,jend ,know)+ &
970 &
grid(ng)%h(i,jend+1)+ &
971 & zeta(i,jend+1,know)))
972 tl_cff1=-cff1*cff1*0.5_r8*(
grid(ng)%tl_h(i,jend )+ &
973 & tl_zeta(i,jend ,know)+ &
974 &
grid(ng)%tl_h(i,jend+1)+ &
975 & tl_zeta(i,jend+1,know))
976 bry_str=cff1*(
forces(ng)%svstr(i,jend+1)- &
977 &
forces(ng)%bvstr(i,jend+1))
978 tl_bry_str=tl_cff1*(
forces(ng)%svstr(i,jend+1)- &
979 &
forces(ng)%bvstr(i,jend+1))+ &
980 & cff1*(
forces(ng)%tl_svstr(i,jend+1)- &
981 &
forces(ng)%tl_bvstr(i,jend+1))
982 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jend+1)+ &
983 & zeta(i,jend+1,know)+ &
984 &
grid(ng)%h(i,jend )+ &
985 & zeta(i,jend ,know)))
986 tl_ce=-ce*ce*ce*0.25_r8*
g*(
grid(ng)%tl_h(i,jend+1)+ &
987 & tl_zeta(i,jend+1,know)+ &
988 &
grid(ng)%tl_h(i,jend )+ &
989 & tl_zeta(i,jend ,know))
990 cff2=
grid(ng)%on_v(i,jend+1)*ce
991 tl_cff2=
grid(ng)%on_v(i,jend+1)*tl_ce
997 tl_bry_val=tl_vbar(i,jend,know)+ &
998 & tl_cff2*(bry_pgr+ &
1001 & cff2*(tl_bry_pgr+ &
1007# ifdef ADJUST_BOUNDARY
1009 tl_bry_val=
boundary(ng)%tl_vbar_north(i)
1017# ifdef WET_DRY_NOT_YET
1018 cff=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_cff=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))
1028 cff=0.5_r8*(
grid(ng)%h(i,jend )+ &
1029 &
grid(ng)%h(i,jend+1))
1030 tl_cff=0.5_r8*(
grid(ng)%tl_h(i,jend )+ &
1031 &
grid(ng)%tl_h(i,jend+1))
1034 tl_cff1=-0.5_r8*cff1*tl_cff/cff
1035 ce=dt2d*cff1*cff*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1036 &
grid(ng)%pn(i,jend+1))
1037 tl_ce=dt2d*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1038 &
grid(ng)%pn(i,jend+1))* &
1041 ze=(0.5_r8+ce)*zeta(i,jend ,know)+ &
1042 & (0.5_r8-ce)*zeta(i,jend+1,know)
1043 tl_ze=(0.5_r8+ce)*tl_zeta(i,jend ,know)+ &
1044 & (0.5_r8-ce)*tl_zeta(i,jend+1,know)+ &
1045 & tl_ce*(zeta(i,jend ,know)- &
1046 & zeta(i,jend+1,know))
1048 cff2=(1.0_r8-
co/ce)**2
1049 tl_cff2=2.0_r8*cff2*
co*tl_ce/(ce*ce)
1050 cff3=zeta(i,jend,kout)+ &
1051 & ce*zeta(i,jend+1,know)- &
1052 & (1.0_r8+ce)*zeta(i,jend,know)
1053 tl_cff3=tl_zeta(i,jend,kout)+ &
1054 & ce*tl_zeta(i,jend+1,know)+ &
1055 & tl_ce*(zeta(i,jend ,know)+ &
1056 & zeta(i,jend+1,know))- &
1057 & (1.0_r8+ce)*tl_zeta(i,jend,know)
1059 tl_ze=tl_ze+cff2*tl_cff3+ &
1068 tl_vbar(i,jend+1,kout)=0.5_r8* &
1070 & tl_vbar(i,jend+1,know)+ &
1071 & tl_ce*(vbar(i,jend ,know)- &
1072 & vbar(i,jend+1,know))+ &
1073 & ce*tl_vbar(i,jend,know)+ &
1076 & (ze-
boundary(ng)%zeta_north(i))- &
1078# ifdef ADJUST_BOUNDARY
1080 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)- &
1089 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)* &
1090 &
grid(ng)%vmask(i,jend+1)
1102# ifdef ADJUST_BOUNDARY
1104 tl_vbar(i,jend+1,kout)=
boundary(ng)%tl_vbar_north(i)
1106 tl_vbar(i,jend+1,kout)=0.0_r8
1109 tl_vbar(i,jend+1,kout)=0.0_r8
1115 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)* &
1116 &
grid(ng)%vmask(i,jend+1)
1128 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend,kout)
1133 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)* &
1134 &
grid(ng)%vmask(i,jend+1)
1149 tl_bry_pgr=
g*tl_zeta(i,jend,know)* &
1150 & 0.5_r8*
grid(ng)%pn(i,jend)
1151# ifdef ADJUST_BOUNDARY
1153 tl_bry_pgr=tl_bry_pgr- &
1155 & 0.5_r8*
grid(ng)%pn(i,jend)
1164 tl_bry_pgr=-
g*(tl_zeta(i,jend+1,know)- &
1165 & tl_zeta(i,jend ,know))* &
1166 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
1167 &
grid(ng)%pn(i,jend+1))
1177 tl_bry_cor=-0.125_r8*(tl_ubar(i ,jend ,know)+ &
1178 & tl_ubar(i+1,jend ,know)+ &
1179 & tl_ubar(i ,jend+1,know)+ &
1180 & tl_ubar(i+1,jend+1,know))* &
1181 & (
grid(ng)%f(i,jend )+ &
1182 &
grid(ng)%f(i,jend+1))
1188 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
1189 & zeta(i,jend ,know)+ &
1190 &
grid(ng)%h(i,jend+1)+ &
1191 & zeta(i,jend+1,know)))
1192 tl_cff=-cff*cff*0.5_r8*(
grid(ng)%tl_h(i,jend )+ &
1193 & tl_zeta(i,jend ,know)+ &
1194 &
grid(ng)%tl_h(i,jend+1)+ &
1195 & tl_zeta(i,jend+1,know))
1199 tl_bry_str=tl_cff*(
forces(ng)%svstr(i,jend+1)- &
1200 &
forces(ng)%bvstr(i,jend+1))+ &
1201 & cff*(
forces(ng)%tl_svstr(i,jend+1)- &
1202 &
forces(ng)%tl_bvstr(i,jend+1))
1208 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,know)+ &
1209 & dt2d*(tl_bry_pgr+ &
1216 tl_vbar(i,jend+1,kout)=tl_vbar(i,jend+1,kout)* &
1217 &
grid(ng)%vmask(i,jend+1)
1229 tl_vbar(i,jend+1,kout)=0.0_r8
1239 IF (
domain(ng)%Western_Edge(tile))
THEN
1244 IF (
iic(ng).ne.0)
THEN
1249 tl_grad(istr-1,j)=0.0_r8
1253# if defined CELERITY_READ && defined FORWARD_READ
1257 & (
clima(ng)%M2nudgcof(istr-1,j-1)+ &
1258 &
clima(ng)%M2nudgcof(istr-1,j ))
1259 obc_in =
obcfac(ng)*obc_out
1264 IF (
boundary(ng)%vbar_west_Cx(j).lt.0.0_r8)
THEN
1285 tl_vbar(istr-1,j,kout)=(cff*tl_vbar(istr-1,j,know)+ &
1286 & cx *tl_vbar(1,j,kout)- &
1288 & tl_grad(istr-1,j-1)- &
1290 & tl_grad(istr-1,j ))/ &
1298 tl_vbar(istr-1,j,kout)=tl_vbar(istr-1,j,kout)- &
1299 & tau*tl_vbar(1,j,know)
1305 tl_vbar(istr-1,j,kout)=tl_vbar(istr-1,j,kout)* &
1306 &
grid(ng)%vmask(istr-1,j)
1319 cff=dt2d*0.5_r8*(
grid(ng)%pm(istr,j-1)+ &
1320 &
grid(ng)%pm(istr,j ))
1321 cff1=sqrt(
g*0.5_r8*(
grid(ng)%h(istr,j-1)+ &
1322 & zeta(istr,j-1,know)+ &
1323 &
grid(ng)%h(istr,j )+ &
1324 & zeta(istr,j ,know)))
1325 tl_cff1=0.25_r8*
g*(
grid(ng)%tl_h(istr,j-1)+ &
1326 & tl_zeta(istr,j-1,know)+ &
1327 &
grid(ng)%tl_h(istr,j )+ &
1328 & tl_zeta(istr,j ,know))/cff1
1331 cff2=1.0_r8/(1.0_r8+cx)
1332 tl_cff2=-cff2*cff2*tl_cx
1336 tl_vbar(istr-1,j,kout)=tl_cff2*(vbar(istr-1,j,know)+ &
1337 & cx*vbar(istr,j,kout))+ &
1338 & cff2*(tl_vbar(istr-1,j,know)+ &
1339 & tl_cx*vbar(istr,j,kout)+ &
1340 & cx*tl_vbar(istr,j,kout))
1345 tl_vbar(istr-1,j,kout)=tl_vbar(istr-1,j,kout)* &
1346 &
grid(ng)%vmask(istr-1,j)
1358# ifdef ADJUST_BOUNDARY
1360 tl_vbar(istr-1,j,kout)=
boundary(ng)%tl_vbar_west(j)
1362 tl_vbar(istr-1,j,kout)=0.0_r8
1365 tl_vbar(istr-1,j,kout)=0.0_r8
1371 tl_vbar(istr-1,j,kout)=tl_vbar(istr-1,j,kout)* &
1372 &
grid(ng)%vmask(istr-1,j)
1384 tl_vbar(istr-1,j,kout)=tl_vbar(istr,j,kout)
1389 tl_vbar(istr-1,j,kout)=tl_vbar(istr-1,j,kout)* &
1390 &
grid(ng)%vmask(istr-1,j)
1410 tl_vbar(istr-1,j,kout)=
gamma2(ng)*tl_vbar(istr,j,kout)
1415 tl_vbar(istr-1,j,kout)=tl_vbar(istr-1,j,kout)* &
1416 &
grid(ng)%vmask(istr-1,j)
1427 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1432 IF (
iic(ng).ne.0)
THEN
1437 tl_grad(iend+1,j)=0.0_r8
1441# if defined CELERITY_READ && defined FORWARD_READ
1445 & (
clima(ng)%M2nudgcof(iend+1,j-1)+ &
1446 &
clima(ng)%M2nudgcof(iend+1,j ))
1447 obc_in =
obcfac(ng)*obc_out
1452 IF (
boundary(ng)%vbar_east_Cx(j).lt.0.0_r8)
THEN
1473 tl_vbar(iend+1,j,kout)=(cff*tl_vbar(iend+1,j,know)+ &
1474 & cx *tl_vbar(iend ,j,kout)- &
1476 & tl_grad(iend+1,j-1)- &
1478 & tl_grad(iend+1,j ))/ &
1486 tl_vbar(iend+1,j,kout)=tl_vbar(iend+1,j,kout)- &
1487 & tau*tl_vbar(iend+1,j,know)
1493 tl_vbar(iend+1,j,kout)=tl_vbar(iend+1,j,kout)* &
1494 &
grid(ng)%vmask(iend+1,j)
1507 cff=dt2d*0.5_r8*(
grid(ng)%pm(iend,j-1)+ &
1508 &
grid(ng)%pm(iend,j ))
1509 cff1=sqrt(
g*0.5_r8*(
grid(ng)%h(iend,j-1)+ &
1510 & zeta(iend,j-1,know)+ &
1511 &
grid(ng)%h(iend,j )+ &
1512 & zeta(iend,j ,know)))
1513 tl_cff1=0.25_r8*
g*(
grid(ng)%tl_h(iend,j-1)+ &
1514 & tl_zeta(iend,j-1,know)+ &
1515 &
grid(ng)%tl_h(iend,j )+ &
1516 & tl_zeta(iend,j ,know))/cff1
1519 cff2=1.0_r8/(1.0_r8+cx)
1520 tl_cff2=-cff2*cff2*tl_cx
1524 tl_vbar(iend+1,j,kout)=tl_cff2*(vbar(iend+1,j,know)+ &
1525 & cx*vbar(iend,j,kout))+ &
1526 & cff2*(tl_vbar(iend+1,j,know)+ &
1527 & tl_cx*vbar(iend,j,kout)+ &
1528 & cx*tl_vbar(iend,j,kout))
1533 tl_vbar(iend+1,j,kout)=tl_vbar(iend+1,j,kout)* &
1534 &
grid(ng)%vmask(iend+1,j)
1546# ifdef ADJUST_BOUNDARY
1548 tl_vbar(iend+1,j,kout)=
boundary(ng)%tl_vbar_east(j)
1550 tl_vbar(iend+1,j,kout)=0.0_r8
1553 tl_vbar(iend+1,j,kout)=0.0_r8
1559 tl_vbar(iend+1,j,kout)=tl_vbar(iend+1,j,kout)* &
1560 &
grid(ng)%vmask(iend+1,j)
1572 tl_vbar(iend+1,j,kout)=tl_vbar(iend,j,kout)
1577 tl_vbar(iend+1,j,kout)=tl_vbar(iend+1,j,kout)* &
1578 &
grid(ng)%vmask(iend+1,j)
1598 tl_vbar(iend+1,j,kout)=
gamma2(ng)*tl_vbar(iend,j,kout)
1603 tl_vbar(iend+1,j,kout)=tl_vbar(iend+1,j,kout)* &
1604 &
grid(ng)%vmask(iend+1,j)
1616 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
1622 tl_vbar(istr-1,jstr,kout)=0.5_r8* &
1623 & (tl_vbar(istr ,jstr ,kout)+ &
1624 & tl_vbar(istr-1,jstr+1,kout))
1627 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
1633 tl_vbar(iend+1,jstr,kout)=0.5_r8* &
1634 & (tl_vbar(iend ,jstr ,kout)+ &
1635 & tl_vbar(iend+1,jstr+1,kout))
1638 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
1644 tl_vbar(istr-1,jend+1,kout)=0.5_r8* &
1645 & (tl_vbar(istr-1,jend ,kout)+ &
1646 & tl_vbar(istr ,jend+1,kout))
1649 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
1655 tl_vbar(iend+1,jend+1,kout)=0.5_r8* &
1656 & (tl_vbar(iend+1,jend ,kout)+ &
1657 & tl_vbar(iend ,jend+1,kout))
1662# if defined WET_DRY_NOT_YET
1671 IF (
domain(ng)%Western_Edge(tile))
THEN
1684 IF (
domain(ng)%Eastern_Edge(tile))
THEN
1700 IF (
domain(ng)%Southern_Edge(tile))
THEN
1713 IF (
domain(ng)%Northern_Edge(tile))
THEN
1729 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
1742 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
1755 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
1768 IF (
domain(ng)%NorthEast_Corner(tile))
THEN