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_vbar(lbi:,lbj:,:)
86 real(r8),
intent(in) :: tl_zeta(lbi:,lbj:,:)
88 real(r8),
intent(inout) :: tl_ubar(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_vbar(lbi:ubi,lbj:ubj,:)
94 real(r8),
intent(in) :: tl_zeta(lbi:ubi,lbj:ubj,:)
96 real(r8),
intent(inout) :: tl_ubar(lbi:ubi,lbj:ubj,:)
101 integer :: imin, imax
102 integer :: i, j, know
104 real(r8) :: ce, cx, zx
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_zx
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)%Western_Edge(tile))
THEN
148 IF (
iic(ng).ne.0)
THEN
153 tl_grad(istr,j)=0.0_r8
157# if defined CELERITY_READ && defined FORWARD_READ
161 & (
clima(ng)%M2nudgcof(istr-1,j)+ &
162 &
clima(ng)%M2nudgcof(istr ,j))
163 obc_in =
obcfac(ng)*obc_out
168 IF (
boundary(ng)%ubar_west_Cx(j).lt.0.0_r8)
THEN
189 tl_ubar(istr,j,kout)=(cff*tl_ubar(istr ,j,know)+ &
190 & cx *tl_ubar(istr+1,j,kout)- &
192 & tl_grad(istr,j )- &
194 & tl_grad(istr,j+1))/ &
202 tl_ubar(istr,j,kout)=tl_ubar(istr,j,kout)- &
203 & tau*tl_ubar(istr,j,know)
209 tl_ubar(istr,j,kout)=tl_ubar(istr,j,kout)* &
210 &
grid(ng)%umask(istr,j)
221# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
223 bry_pgr=-
g*(zeta(istr,j,know)- &
225 & 0.5_r8*
grid(ng)%pm(istr,j)
226 tl_bry_pgr=-
g*tl_zeta(istr,j,know)* &
227 & 0.5_r8*
grid(ng)%pm(istr,j)
228# ifdef ADJUST_BOUNDARY
230 tl_bry_pgr=tl_bry_pgr+ &
232 & 0.5_r8*
grid(ng)%pm(istr,j)
236 bry_pgr=-
g*(zeta(istr ,j,know)- &
237 & zeta(istr-1,j,know))* &
238 & 0.5_r8*(
grid(ng)%pm(istr-1,j)+ &
239 &
grid(ng)%pm(istr ,j))
240 tl_bry_pgr=-
g*(tl_zeta(istr ,j,know)- &
241 & tl_zeta(istr-1,j,know))* &
242 & 0.5_r8*(
grid(ng)%pm(istr-1,j)+ &
243 &
grid(ng)%pm(istr ,j))
246 bry_cor=0.125_r8*(vbar(istr-1,j ,know)+ &
247 & vbar(istr-1,j+1,know)+ &
248 & vbar(istr ,j ,know)+ &
249 & vbar(istr ,j+1,know))* &
250 & (
grid(ng)%f(istr-1,j)+ &
251 &
grid(ng)%f(istr ,j))
252 tl_bry_cor=0.125_r8*(tl_vbar(istr-1,j ,know)+ &
253 & tl_vbar(istr-1,j+1,know)+ &
254 & tl_vbar(istr ,j ,know)+ &
255 & tl_vbar(istr ,j+1,know))* &
256 & (
grid(ng)%f(istr-1,j)+ &
257 &
grid(ng)%f(istr ,j))
262 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(istr-1,j)+ &
263 & zeta(istr-1,j,know)+ &
264 &
grid(ng)%h(istr ,j)+ &
265 & zeta(istr ,j,know)))
266 tl_cff1=-cff1*cff1*0.5_r8*(
grid(ng)%tl_h(istr-1,j)+ &
267 & tl_zeta(istr-1,j,know)+ &
268 &
grid(ng)%tl_h(istr ,j)+ &
269 & tl_zeta(istr ,j,know))
270 bry_str=cff1*(
forces(ng)%sustr(istr,j)- &
271 &
forces(ng)%bustr(istr,j))
272 tl_bry_str=tl_cff1*(
forces(ng)%sustr(istr,j)- &
273 &
forces(ng)%bustr(istr,j))+ &
274 & cff1*(
forces(ng)%tl_sustr(istr,j)- &
275 &
forces(ng)%tl_bustr(istr,j))
276 cx=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(istr-1,j)+ &
277 & zeta(istr-1,j,know)+ &
278 &
grid(ng)%h(istr ,j)+ &
279 & zeta(istr ,j,know)))
280 tl_cx=-cx*cx*cx*0.25_r8*
g*(
grid(ng)%tl_h(istr-1,j)+ &
281 & tl_zeta(istr-1,j,know)+ &
282 &
grid(ng)%tl_h(istr ,j)+ &
283 & tl_zeta(istr ,j,know))
284 cff2=
grid(ng)%om_u(istr,j)*cx
285 tl_cff2=
grid(ng)%om_u(istr,j)*tl_cx
291 tl_bry_val=tl_ubar(istr+1,j,know)+ &
292 & tl_cff2*(bry_pgr+ &
295 & cff2*(tl_bry_pgr+ &
301# ifdef ADJUST_BOUNDARY
303 tl_bry_val=
boundary(ng)%tl_ubar_west(j)
311 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(istr-1,j)+ &
312 & zeta(istr-1,j,know)+ &
313 &
grid(ng)%h(istr ,j)+ &
314 & zeta(istr ,j,know)))
315 tl_cff=-cff*cff*(0.5_r8*(
grid(ng)%tl_h(istr-1,j)+ &
316 & tl_zeta(istr-1,j,know)+ &
317 &
grid(ng)%tl_h(istr ,j)+ &
318 & tl_zeta(istr ,j,know)))
320 tl_cx=0.5_r8*
g*tl_cff/cx
321# if defined ATM_PRESS && defined PRESS_COMPENSATE
331 tl_ubar(istr,j,kout)=tl_bry_val- &
334 & (zeta(istr-1,j,know)+ &
335 & zeta(istr ,j,know)+ &
336 & fac*(
forces(ng)%Pair(istr-1,j)+ &
337 &
forces(ng)%Pair(istr ,j)- &
342 & (tl_zeta(istr-1,j,know)+ &
343 & tl_zeta(istr ,j,know)))
350 tl_ubar(istr,j,kout)=tl_bry_val- &
352 & (0.5_r8*(zeta(istr-1,j,know)+ &
353 & zeta(istr ,j,know))- &
356 & (0.5_r8*(tl_zeta(istr-1,j,know)+ &
357 & tl_zeta(istr ,j,know)))
359# ifdef ADJUST_BOUNDARY
361 tl_ubar(istr,j,kout)=tl_ubar(istr,j,kout)+ &
369 tl_ubar(istr,j,kout)=tl_ubar(istr,j,kout)* &
370 &
grid(ng)%umask(istr,j)
380# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
382 bry_pgr=-
g*(zeta(istr,j,know)- &
384 & 0.5_r8*
grid(ng)%pm(istr,j)
385 tl_bry_pgr=-
g*tl_zeta(istr,j,know)* &
386 & 0.5_r8*
grid(ng)%pm(istr,j)
387# ifdef ADJUST_BOUNDARY
389 tl_bry_pgr=tl_bry_pgr+ &
391 & 0.5_r8*
grid(ng)%pm(istr,j)
395 bry_pgr=-
g*(zeta(istr ,j,know)- &
396 & zeta(istr-1,j,know))* &
397 & 0.5_r8*(
grid(ng)%pm(istr-1,j)+ &
398 &
grid(ng)%pm(istr ,j))
399 tl_bry_pgr=-
g*(tl_zeta(istr ,j,know)- &
400 & tl_zeta(istr-1,j,know))* &
401 & 0.5_r8*(
grid(ng)%pm(istr-1,j)+ &
402 &
grid(ng)%pm(istr ,j))
405 bry_cor=0.125_r8*(vbar(istr-1,j ,know)+ &
406 & vbar(istr-1,j+1,know)+ &
407 & vbar(istr ,j ,know)+ &
408 & vbar(istr ,j+1,know))* &
409 & (
grid(ng)%f(istr-1,j)+ &
410 &
grid(ng)%f(istr ,j))
411 tl_bry_cor=0.125_r8*(tl_vbar(istr-1,j ,know)+ &
412 & tl_vbar(istr-1,j+1,know)+ &
413 & tl_vbar(istr ,j ,know)+ &
414 & tl_vbar(istr ,j+1,know))* &
415 & (
grid(ng)%f(istr-1,j)+ &
416 &
grid(ng)%f(istr ,j))
421 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(istr-1,j)+ &
422 & zeta(istr-1,j,know)+ &
423 &
grid(ng)%h(istr ,j)+ &
424 & zeta(istr ,j,know)))
425 tl_cff1=-cff1*cff1*0.5_r8*(
grid(ng)%tl_h(istr-1,j)+ &
426 & tl_zeta(istr-1,j,know)+ &
427 &
grid(ng)%tl_h(istr ,j)+ &
428 & tl_zeta(istr ,j,know))
429 bry_str=cff1*(
forces(ng)%sustr(istr,j)- &
430 &
forces(ng)%bustr(istr,j))
431 tl_bry_str=tl_cff1*(
forces(ng)%sustr(istr,j)- &
432 &
forces(ng)%bustr(istr,j))+ &
433 & cff1*(
forces(ng)%tl_sustr(istr,j)- &
434 &
forces(ng)%tl_bustr(istr,j))
435 cx=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(istr-1,j)+ &
436 & zeta(istr-1,j,know)+ &
437 &
grid(ng)%h(istr ,j)+ &
438 & zeta(istr ,j,know)))
439 tl_cx=-cx*cx*cx*0.25_r8*
g*(
grid(ng)%tl_h(istr-1,j)+ &
440 & tl_zeta(istr-1,j,know)+ &
441 &
grid(ng)%tl_h(istr ,j)+ &
442 & tl_zeta(istr ,j,know))
443 cff2=
grid(ng)%om_u(istr,j)*cx
444 tl_cff2=
grid(ng)%om_u(istr,j)*tl_cx
450 tl_bry_val=tl_ubar(istr+1,j,know)+ &
451 & tl_cff2*(bry_pgr+ &
454 & cff2*(tl_bry_pgr+ &
460# ifdef ADJUST_BOUNDARY
462 tl_bry_val=
boundary(ng)%tl_ubar_west(j)
470# ifdef WET_DRY_NOT_YET
471 cff=0.5_r8*(
grid(ng)%h(istr-1,j)+ &
472 & zeta(istr-1,j,know)+ &
473 &
grid(ng)%h(istr ,j)+ &
474 & zeta(istr ,j,know))
475 tl_cff=0.5_r8*(
grid(ng)%tl_h(istr-1,j)+ &
476 & tl_zeta(istr-1,j,know)+ &
477 &
grid(ng)%tl_h(istr ,j)+ &
478 & tl_zeta(istr ,j,know))
480 cff=0.5_r8*(
grid(ng)%h(istr-1,j)+ &
481 &
grid(ng)%h(istr ,j))
482 tl_cff=0.5_r8*(
grid(ng)%tl_h(istr-1,j)+ &
483 &
grid(ng)%tl_h(istr ,j))
486 tl_cff1=-0.5_r8*cff1*tl_cff/cff
487 cx=dt2d*cff1*cff*0.5_r8*(
grid(ng)%pm(istr-1,j)+ &
488 &
grid(ng)%pm(istr ,j))
489 tl_cx=dt2d*0.5_r8*(
grid(ng)%pm(istr-1,j)+ &
490 &
grid(ng)%pm(istr ,j))* &
493 zx=(0.5_r8+cx)*zeta(istr ,j,know)+ &
494 & (0.5_r8-cx)*zeta(istr-1,j,know)
495 tl_zx=(0.5_r8+cx)*tl_zeta(istr ,j,know)+ &
496 & (0.5_r8-cx)*tl_zeta(istr-1,j,know)+ &
497 & tl_cx*(zeta(istr ,j,know)- &
498 & zeta(istr-1,j,know))
500 cff2=(1.0_r8-
co/cx)**2
501 tl_cff2=2.0_r8*cff2*
co*tl_cx/(cx*cx)
502 cff3=zeta(istr,j,kout)+ &
503 & cx*zeta(istr-1,j,know)- &
504 & (1.0_r8+cx)*zeta(istr,j,know)
505 tl_cff3=tl_zeta(istr,j,kout)+ &
506 & cx*tl_zeta(istr-1,j,know)+ &
507 & tl_cx*(zeta(istr-1,j,know)+ &
508 & zeta(istr ,j,know))- &
509 & (1.0_r8+cx)*tl_zeta(istr,j,know)
511 tl_zx=tl_zx+cff2*tl_cff3+ &
520 tl_ubar(istr,j,kout)=0.5_r8* &
522 & tl_ubar(istr,j,know)- &
523 & tl_cx*(ubar(istr ,j,know)- &
524 & ubar(istr+1,j,know))+ &
525 & cx*tl_ubar(istr+1,j,know)+ &
530# ifdef ADJUST_BOUNDARY
532 tl_ubar(istr,j,kout)=tl_ubar(istr,j,kout)+ &
541 tl_ubar(istr,j,kout)=tl_ubar(istr,j,kout)* &
542 &
grid(ng)%umask(istr,j)
554# ifdef ADJUST_BOUNDARY
556 tl_ubar(istr,j,kout)=
boundary(ng)%tl_ubar_west(j)
558 tl_ubar(istr,j,kout)=0.0_r8
561 tl_ubar(istr,j,kout)=0.0_r8
567 tl_ubar(istr,j,kout)=tl_ubar(istr,j,kout)* &
568 &
grid(ng)%umask(istr,j)
580 tl_ubar(istr,j,kout)=tl_ubar(istr+1,j,kout)
585 tl_ubar(istr,j,kout)=tl_ubar(istr,j,kout)* &
586 &
grid(ng)%umask(istr,j)
601 tl_bry_pgr=-
g*tl_zeta(istr,j,know)* &
602 & 0.5_r8*
grid(ng)%pm(istr,j)
603# ifdef ADJUST_BOUNDARY
605 tl_bry_pgr=tl_bry_pgr+ &
607 & 0.5_r8*
grid(ng)%pm(istr,j)
616 tl_bry_pgr=-
g*(tl_zeta(istr ,j,know)- &
617 & tl_zeta(istr-1,j,know))* &
618 & 0.5_r8*(
grid(ng)%pm(istr-1,j)+ &
619 &
grid(ng)%pm(istr ,j))
629 tl_bry_cor=0.125_r8*(tl_vbar(istr-1,j ,know)+ &
630 & tl_vbar(istr-1,j+1,know)+ &
631 & tl_vbar(istr ,j ,know)+ &
632 & tl_vbar(istr ,j+1,know))* &
633 & (
grid(ng)%f(istr-1,j)+ &
634 &
grid(ng)%f(istr ,j))
640 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(istr-1,j)+ &
641 & zeta(istr-1,j,know)+ &
642 &
grid(ng)%h(istr ,j)+ &
643 & zeta(istr ,j,know)))
644 tl_cff=-cff*cff*0.5_r8*(
grid(ng)%tl_h(istr-1,j)+ &
645 & tl_zeta(istr-1,j,know)+ &
646 &
grid(ng)%tl_h(istr ,j)+ &
647 & tl_zeta(istr ,j,know))
651 tl_bry_str=tl_cff*(
forces(ng)%sustr(istr,j)- &
652 &
forces(ng)%bustr(istr,j))+ &
653 & cff*(
forces(ng)%tl_sustr(istr,j)- &
654 &
forces(ng)%tl_bustr(istr,j))
660 tl_ubar(istr,j,kout)=tl_ubar(istr,j,know)+ &
661 & dt2d*(tl_bry_pgr+ &
668 tl_ubar(istr,j,kout)=tl_ubar(istr,j,kout)* &
669 &
grid(ng)%umask(istr,j)
681 tl_ubar(istr,j,kout)=0.0_r8
691 IF (
domain(ng)%Eastern_Edge(tile))
THEN
696 IF (
iic(ng).ne.0)
THEN
701 tl_grad(iend+1,j)=0.0_r8
705# if defined CELERITY_READ && defined FORWARD_READ
709 & (
clima(ng)%M2nudgcof(iend ,j)+ &
710 &
clima(ng)%M2nudgcof(iend+1,j))
711 obc_in =
obcfac(ng)*obc_out
716 IF (
boundary(ng)%ubar_east_Cx(j).lt.0.0_r8)
THEN
737 tl_ubar(iend+1,j,kout)=(cff*tl_ubar(iend+1,j,know)+ &
738 & cx *tl_ubar(iend ,j,kout)- &
740 & tl_grad(iend+1,j )- &
742 & tl_grad(iend+1,j+1))/ &
750 tl_ubar(iend+1,j,kout)=tl_ubar(iend+1,j,kout)- &
751 & tau*tl_ubar(iend+1,j,know)
757 tl_ubar(iend+1,j,kout)=tl_ubar(iend+1,j,kout)* &
758 &
grid(ng)%umask(iend+1,j)
769# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
772 & zeta(iend,j,know))* &
773 & 0.5_r8*
grid(ng)%pm(iend,j)
774 tl_bry_pgr=
g*tl_zeta(iend,j,know)* &
775 & 0.5_r8*
grid(ng)%pm(iend,j)
776# ifdef ADJUST_BOUNDARY
778 tl_bry_pgr=tl_bry_pgr- &
780 & 0.5_r8*
grid(ng)%pm(iend,j)
784 bry_pgr=-
g*(zeta(iend+1,j,know)- &
785 & zeta(iend ,j,know))* &
786 & 0.5_r8*(
grid(ng)%pm(iend ,j)+ &
787 &
grid(ng)%pm(iend+1,j))
788 tl_bry_pgr=-
g*(tl_zeta(iend+1,j,know)- &
789 & tl_zeta(iend ,j,know))* &
790 & 0.5_r8*(
grid(ng)%pm(iend ,j)+ &
791 &
grid(ng)%pm(iend+1,j))
794 bry_cor=0.125_r8*(vbar(iend ,j ,know)+ &
795 & vbar(iend ,j+1,know)+ &
796 & vbar(iend+1,j ,know)+ &
797 & vbar(iend+1,j+1,know))* &
798 & (
grid(ng)%f(iend ,j)+ &
799 &
grid(ng)%f(iend+1,j))
800 tl_bry_cor=0.125_r8*(tl_vbar(iend ,j ,know)+ &
801 & tl_vbar(iend ,j+1,know)+ &
802 & tl_vbar(iend+1,j ,know)+ &
803 & tl_vbar(iend+1,j+1,know))* &
804 & (
grid(ng)%f(iend ,j)+ &
805 &
grid(ng)%f(iend+1,j))
810 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(iend ,j)+ &
811 & zeta(iend ,j,know)+ &
812 &
grid(ng)%h(iend+1,j)+ &
813 & zeta(iend+1,j,know)))
814 tl_cff1=-cff1*cff1*0.5_r8*(
grid(ng)%tl_h(iend ,j)+ &
815 & tl_zeta(iend ,j,know)+ &
816 &
grid(ng)%tl_h(iend+1,j)+ &
817 & tl_zeta(iend+1,j,know))
818 bry_str=cff1*(
forces(ng)%sustr(iend+1,j)- &
819 &
forces(ng)%bustr(iend+1,j))
820 tl_bry_str=tl_cff1*(
forces(ng)%sustr(iend+1,j)- &
821 &
forces(ng)%bustr(iend+1,j))+ &
822 & cff1*(
forces(ng)%tl_sustr(iend+1,j)- &
823 &
forces(ng)%tl_bustr(iend+1,j))
824 cx=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(iend+1,j)+ &
825 & zeta(iend+1,j,know)+ &
826 &
grid(ng)%h(iend ,j)+ &
827 & zeta(iend ,j,know)))
828 tl_cx=-cx*cx*cx*0.25_r8*
g*(
grid(ng)%tl_h(iend+1,j)+ &
829 & tl_zeta(iend+1,j,know)+ &
830 &
grid(ng)%tl_h(iend ,j)+ &
831 & tl_zeta(iend ,j,know))
832 cff2=
grid(ng)%om_u(iend+1,j)*cx
833 tl_cff2=
grid(ng)%om_u(iend+1,j)*tl_cx
839 tl_bry_val=tl_ubar(iend,j,know)+ &
840 & tl_cff2*(bry_pgr+ &
843 & cff2*(tl_bry_pgr+ &
849# ifdef ADJUST_BOUNDARY
851 tl_bry_val=
boundary(ng)%tl_ubar_east(j)
859 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(iend ,j)+ &
860 & zeta(iend ,j,know)+ &
861 &
grid(ng)%h(iend+1,j)+ &
862 & zeta(iend+1,j,know)))
863 tl_cff=-cff*cff*(0.5_r8*(
grid(ng)%tl_h(iend ,j)+ &
864 & tl_zeta(iend ,j,know)+ &
865 &
grid(ng)%tl_h(iend+1,j)+ &
866 & tl_zeta(iend+1,j,know)))
868 tl_cx=0.5_r8*
g*tl_cff/cx
869# if defined ATM_PRESS && defined PRESS_COMPENSATE
879 tl_ubar(iend+1,j,kout)=tl_bry_val+ &
882 & (zeta(iend ,j,know)+ &
883 & zeta(iend+1,j,know)+ &
884 & fac*(
forces(ng)%Pair(iend ,j)+ &
885 &
forces(ng)%Pair(iend+1,j)- &
889 & (0.5_r8*(tl_zeta(iend ,j,know)+ &
890 & tl_zeta(iend+1,j,know)))
897 tl_ubar(iend+1,j,kout)=tl_bry_val+ &
899 & (0.5_r8*(zeta(iend ,j,know)+ &
900 & zeta(iend+1,j,know))- &
903 & (0.5_r8*(tl_zeta(iend ,j,know)+ &
904 & tl_zeta(iend+1,j,know)))
906# ifdef ADJUST_BOUNDARY
908 tl_ubar(iend+1,j,kout)=tl_ubar(iend+1,j,kout)- &
916 tl_ubar(iend+1,j,kout)=tl_ubar(iend+1,j,kout)* &
917 &
grid(ng)%umask(iend+1,j)
927# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
930 & zeta(iend,j,know))* &
931 & 0.5_r8*
grid(ng)%pm(iend,j)
932 tl_bry_pgr=
g*tl_zeta(iend,j,know)* &
933 & 0.5_r8*
grid(ng)%pm(iend,j)
934# ifdef ADJUST_BOUNDARY
936 tl_bry_pgr=tl_bry_pgr- &
938 & 0.5_r8*
grid(ng)%pm(iend,j)
942 bry_pgr=-
g*(zeta(iend+1,j,know)- &
943 & zeta(iend ,j,know))* &
944 & 0.5_r8*(
grid(ng)%pm(iend ,j)+ &
945 &
grid(ng)%pm(iend+1,j))
946 tl_bry_pgr=-
g*(tl_zeta(iend+1,j,know)- &
947 & tl_zeta(iend ,j,know))* &
948 & 0.5_r8*(
grid(ng)%pm(iend ,j)+ &
949 &
grid(ng)%pm(iend+1,j))
952 bry_cor=0.125_r8*(vbar(iend ,j ,know)+ &
953 & vbar(iend ,j+1,know)+ &
954 & vbar(iend+1,j ,know)+ &
955 & vbar(iend+1,j+1,know))* &
956 & (
grid(ng)%f(iend ,j)+ &
957 &
grid(ng)%f(iend+1,j))
958 tl_bry_cor=0.125_r8*(tl_vbar(iend ,j ,know)+ &
959 & tl_vbar(iend ,j+1,know)+ &
960 & tl_vbar(iend+1,j ,know)+ &
961 & tl_vbar(iend+1,j+1,know))* &
962 & (
grid(ng)%f(iend ,j)+ &
963 &
grid(ng)%f(iend+1,j))
968 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(iend ,j)+ &
969 & zeta(iend ,j,know)+ &
970 &
grid(ng)%h(iend+1,j)+ &
971 & zeta(iend+1,j,know)))
972 tl_cff1=-cff1*cff1*0.5_r8*(
grid(ng)%tl_h(iend ,j)+ &
973 & tl_zeta(iend ,j,know)+ &
974 &
grid(ng)%tl_h(iend+1,j)+ &
975 & tl_zeta(iend+1,j,know))
976 bry_str=cff1*(
forces(ng)%sustr(iend+1,j)- &
977 &
forces(ng)%bustr(iend+1,j))
978 tl_bry_str=tl_cff1*(
forces(ng)%sustr(iend+1,j)- &
979 &
forces(ng)%bustr(iend+1,j))+ &
980 & cff1*(
forces(ng)%tl_sustr(iend+1,j)- &
981 &
forces(ng)%tl_bustr(iend+1,j))
982 cx=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(iend+1,j)+ &
983 & zeta(iend+1,j,know)+ &
984 &
grid(ng)%h(iend ,j)+ &
985 & zeta(iend ,j,know)))
986 tl_cx=-cx*cx*cx*0.25_r8*
g*(
grid(ng)%tl_h(iend+1,j)+ &
987 & tl_zeta(iend+1,j,know)+ &
988 &
grid(ng)%tl_h(iend ,j)+ &
989 & tl_zeta(iend ,j,know))
990 cff2=
grid(ng)%om_u(iend+1,j)*cx
991 tl_cff2=
grid(ng)%om_u(iend+1,j)*tl_cx
997 tl_bry_val=tl_ubar(iend,j,know)+ &
998 & tl_cff2*(bry_pgr+ &
1001 & cff2*(tl_bry_pgr+ &
1007# ifdef ADJUST_BOUNDARY
1009 tl_bry_val=
boundary(ng)%tl_ubar_east(j)
1017# ifdef WET_DRY_NOT_YET
1018 cff=0.5_r8*(
grid(ng)%h(iend ,j)+ &
1019 & zeta(iend ,j,know)+ &
1020 &
grid(ng)%h(iend+1,j)+ &
1021 & zeta(iend+1,j,know))
1022 tl_cff=0.5_r8*(
grid(ng)%tl_h(iend ,j)+ &
1023 & tl_zeta(iend ,j,know)+ &
1024 &
grid(ng)%tl_h(iend+1,j)+ &
1025 & tl_zeta(iend+1,j,know))
1027 cff=0.5_r8*(
grid(ng)%h(iend ,j)+ &
1028 &
grid(ng)%h(iend+1,j))
1029 tl_cff=0.5_r8*(
grid(ng)%tl_h(iend ,j)+ &
1030 &
grid(ng)%tl_h(iend+1,j))
1033 tl_cff1=-0.5_r8*cff1*tl_cff/cff
1034 cx=dt2d*cff1*cff*0.5_r8*(
grid(ng)%pm(iend ,j)+ &
1035 &
grid(ng)%pm(iend+1,j))
1036 tl_cx=dt2d*0.5_r8*(
grid(ng)%pm(iend ,j)+ &
1037 &
grid(ng)%pm(iend+1,j))* &
1040 zx=(0.5_r8+cx)*zeta(iend ,j,know)+ &
1041 & (0.5_r8-cx)*zeta(iend+1,j,know)
1042 tl_zx=(0.5_r8+cx)*tl_zeta(iend ,j,know)+ &
1043 & (0.5_r8-cx)*tl_zeta(iend+1,j,know)+ &
1044 & tl_cx*(zeta(iend ,j,know)- &
1045 & zeta(iend+1,j,know))
1047 cff2=(1.0_r8-
co/cx)**2
1048 tl_cff2=2.0_r8*cff2*
co*tl_cx/(cx*cx)
1049 cff3=zeta(iend,j,kout)+ &
1050 & cx*zeta(iend+1,j,know)- &
1051 & (1.0_r8+cx)*zeta(iend,j,know)
1052 tl_cff3=tl_zeta(iend,j,kout)+ &
1053 & cx*tl_zeta(iend+1,j,know)+ &
1054 & tl_cx*(zeta(iend ,j,know)+ &
1055 & zeta(iend+1,j,know))- &
1056 & (1.0_r8+cx)*tl_zeta(iend,j,know)
1058 tl_zx=tl_zx+cff2*tl_cff3+ &
1067 tl_ubar(iend+1,j,kout)=0.5_r8* &
1069 & tl_ubar(iend+1,j,know)+ &
1070 & tl_cx*(ubar(iend ,j,know)- &
1071 & ubar(iend+1,j,know))+ &
1072 & cx*tl_ubar(iend,j,know)+ &
1075 & (zx-
boundary(ng)%zeta_east(j))- &
1077# ifdef ADJUST_BOUNDARY
1079 tl_ubar(iend+1,j,kout)=tl_ubar(iend+1,j,kout)- &
1088 tl_ubar(iend+1,j,kout)=tl_ubar(iend+1,j,kout)* &
1089 &
grid(ng)%umask(iend+1,j)
1101# ifdef ADJUST_BOUNDARY
1103 tl_ubar(iend+1,j,kout)=
boundary(ng)%tl_ubar_east(j)
1105 tl_ubar(iend+1,j,kout)=0.0_r8
1108 tl_ubar(iend+1,j,kout)=0.0_r8
1114 tl_ubar(iend+1,j,kout)=tl_ubar(iend+1,j,kout)* &
1115 &
grid(ng)%umask(iend+1,j)
1127 tl_ubar(iend+1,j,kout)=tl_ubar(iend,j,kout)
1132 tl_ubar(iend+1,j,kout)=tl_ubar(iend+1,j,kout)* &
1133 &
grid(ng)%umask(iend+1,j)
1148 tl_bry_pgr=
g*tl_zeta(iend,j,know)* &
1149 & 0.5_r8*
grid(ng)%pm(iend,j)
1150# ifdef ADJUST_BOUNDARY
1152 tl_bry_pgr=tl_bry_pgr- &
1154 & 0.5_r8*
grid(ng)%pm(iend,j)
1163 tl_bry_pgr=-
g*(tl_zeta(iend+1,j,know)- &
1164 & tl_zeta(iend ,j,know))* &
1165 & 0.5_r8*(
grid(ng)%pm(iend ,j)+ &
1166 &
grid(ng)%pm(iend+1,j))
1176 tl_bry_cor=0.125_r8*(tl_vbar(iend, j ,know)+ &
1177 & tl_vbar(iend ,j+1,know)+ &
1178 & tl_vbar(iend+1,j ,know)+ &
1179 & tl_vbar(iend+1,j+1,know))* &
1180 & (
grid(ng)%f(iend ,j)+ &
1181 &
grid(ng)%f(iend+1,j))
1187 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(iend ,j)+ &
1188 & zeta(iend ,j,know)+ &
1189 &
grid(ng)%h(iend+1,j)+ &
1190 & zeta(iend+1,j,know)))
1191 tl_cff=-cff*cff*0.5_r8*(
grid(ng)%tl_h(iend ,j)+ &
1192 & tl_zeta(iend ,j,know)+ &
1193 &
grid(ng)%tl_h(iend+1,j)+ &
1194 & tl_zeta(iend+1,j,know))
1198 tl_bry_str=tl_cff*(
forces(ng)%sustr(iend+1,j)- &
1199 &
forces(ng)%bustr(iend+1,j))+ &
1200 & cff*(
forces(ng)%tl_sustr(iend+1,j)- &
1201 &
forces(ng)%tl_bustr(iend+1,j))
1207 tl_ubar(iend+1,j,kout)=tl_ubar(iend+1,j,know)+ &
1208 & dt2d*(tl_bry_pgr+ &
1215 tl_ubar(iend+1,j,kout)=tl_ubar(iend+1,j,kout)* &
1216 &
grid(ng)%umask(iend+1,j)
1228 tl_ubar(iend+1,j,kout)=0.0_r8
1238 IF (
domain(ng)%Southern_Edge(tile))
THEN
1243 IF (
iic(ng).ne.0)
THEN
1248 tl_grad(i,jstr-1)=0.0_r8
1252# if defined CELERITY_READ && defined FORWARD_READ
1256 & (
clima(ng)%M2nudgcof(i-1,jstr-1)+ &
1257 &
clima(ng)%M2nudgcof(i ,jstr-1))
1258 obc_in =
obcfac(ng)*obc_out
1263 IF (
boundary(ng)%ubar_south_Ce(i).lt.0.0_r8)
THEN
1284 tl_ubar(i,jstr-1,kout)=(cff*tl_ubar(i,jstr-1,know)+ &
1285 & ce *tl_ubar(i,jstr ,kout)- &
1287 & tl_grad(i-1,jstr-1)- &
1289 & tl_grad(i ,jstr-1))/ &
1297 tl_ubar(i,jstr-1,kout)=tl_ubar(i,jstr-1,kout)- &
1298 & tau*tl_ubar(i,jstr-1,know)
1304 tl_ubar(i,jstr-1,kout)=tl_ubar(i,jstr-1,kout)* &
1305 &
grid(ng)%umask(i,jstr-1)
1318 cff=dt2d*0.5_r8*(
grid(ng)%pn(i-1,jstr)+ &
1319 &
grid(ng)%pn(i ,jstr))
1320 cff1=sqrt(
g*0.5_r8*(
grid(ng)%h(i-1,jstr)+ &
1321 & zeta(i-1,jstr,know)+ &
1322 &
grid(ng)%h(i ,jstr)+ &
1323 & zeta(i ,jstr,know)))
1324 tl_cff1=0.25_r8*
g*(
grid(ng)%tl_h(i-1,jstr)+ &
1325 & tl_zeta(i-1,jstr,know)+ &
1326 &
grid(ng)%tl_h(i ,jstr)+ &
1327 & tl_zeta(i ,jstr,know))/cff1
1330 cff2=1.0_r8/(1.0_r8+ce)
1331 tl_cff2=-cff2*cff2*tl_ce
1335 tl_ubar(i,jstr-1,kout)=tl_cff2*(ubar(i,jstr-1,know)+ &
1336 & ce*ubar(i,jstr,kout))+ &
1337 & cff2*(tl_ubar(i,jstr-1,know)+ &
1338 & tl_ce*ubar(i,jstr,kout)+ &
1339 & ce*tl_ubar(i,jstr,kout))
1344 tl_ubar(i,jstr-1,kout)=tl_ubar(i,jstr-1,kout)* &
1345 &
grid(ng)%umask(i,jstr-1)
1357# ifdef ADJUST_BOUNDARY
1359 tl_ubar(i,jstr-1,kout)=
boundary(ng)%tl_ubar_south(i)
1361 tl_ubar(i,jstr-1,kout)=0.0_r8
1364 tl_ubar(i,jstr-1,kout)=0.0_r8
1370 tl_ubar(i,jstr-1,kout)=tl_ubar(i,jstr-1,kout)* &
1371 &
grid(ng)%umask(i,jstr-1)
1383 tl_ubar(i,jstr-1,kout)=tl_ubar(i,jstr,kout)
1388 tl_ubar(i,jstr-1,kout)=tl_ubar(i,jstr-1,kout)* &
1389 &
grid(ng)%umask(i,jstr-1)
1409 tl_ubar(i,jstr-1,kout)=
gamma2(ng)*tl_ubar(i,jstr,kout)
1414 tl_ubar(i,jstr-1,kout)=tl_ubar(i,jstr-1,kout)* &
1415 &
grid(ng)%umask(i,jstr-1)
1426 IF (
domain(ng)%Northern_Edge(tile))
THEN
1431 IF (
iic(ng).ne.0)
THEN
1436 tl_grad(i,jend+1)=0.0_r8
1440# if defined CELERITY_READ && defined FORWARD_READ
1444 & (
clima(ng)%M2nudgcof(i-1,jend+1)+ &
1445 &
clima(ng)%M2nudgcof(i ,jend+1))
1446 obc_in =
obcfac(ng)*obc_out
1451 IF (
boundary(ng)%ubar_north_Ce(i).lt.0.0_r8)
THEN
1472 tl_ubar(i,jend+1,kout)=(cff*tl_ubar(i,jend+1,know)+ &
1473 & ce *tl_ubar(i,jend ,kout)- &
1475 & tl_grad(i-1,jend+1)- &
1477 & tl_grad(i ,jend+1))/ &
1485 tl_ubar(i,jend+1,kout)=tl_ubar(i,jend+1,kout)- &
1486 & tau*tl_ubar(i,jend+1,know)
1492 tl_ubar(i,jend+1,kout)=tl_ubar(i,jend+1,kout)* &
1493 &
grid(ng)%umask(i,jend+1)
1506 cff=dt2d*0.5_r8*(
grid(ng)%pn(i-1,jend)+ &
1507 &
grid(ng)%pn(i ,jend))
1508 cff1=sqrt(
g*0.5_r8*(
grid(ng)%h(i-1,jend)+ &
1509 & zeta(i-1,jend,know)+ &
1510 &
grid(ng)%h(i ,jend)+ &
1511 & zeta(i ,jend,know)))
1512 tl_cff1=0.25_r8*
g*(
grid(ng)%tl_h(i-1,jend)+ &
1513 & tl_zeta(i-1,jend,know)+ &
1514 &
grid(ng)%tl_h(i ,jend)+ &
1515 & tl_zeta(i ,jend,know))/cff1
1518 cff2=1.0_r8/(1.0_r8+ce)
1519 tl_cff2=-cff2*cff2*tl_ce
1523 tl_ubar(i,jend+1,kout)=tl_cff2*(ubar(i,jend+1,know)+ &
1524 & ce*ubar(i,jend,kout))+ &
1525 & cff2*(tl_ubar(i,jend+1,know)+ &
1526 & tl_ce*ubar(i,jend,kout)+ &
1527 & ce*tl_ubar(i,jend,kout))
1532 tl_ubar(i,jend+1,kout)=tl_ubar(i,jend+1,kout)* &
1533 &
grid(ng)%umask(i,jend+1)
1545# ifdef ADJUST_BOUNDARY
1547 tl_ubar(i,jend+1,kout)=
boundary(ng)%tl_ubar_north(i)
1549 tl_ubar(i,jend+1,kout)=0.0_r8
1552 tl_ubar(i,jend+1,kout)=0.0_r8
1558 tl_ubar(i,jend+1,kout)=tl_ubar(i,jend+1,kout)* &
1559 &
grid(ng)%umask(i,jend+1)
1571 tl_ubar(i,jend+1,kout)=tl_ubar(i,jend,kout)
1576 tl_ubar(i,jend+1,kout)=tl_ubar(i,jend+1,kout)* &
1577 &
grid(ng)%umask(i,jend+1)
1597 tl_ubar(i,jend+1,kout)=
gamma2(ng)*tl_ubar(i,jend,kout)
1603 tl_ubar(i,jend+1,kout)=tl_ubar(i,jend+1,kout)* &
1604 &
grid(ng)%umask(i,jend+1)
1616 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
1622 tl_ubar(istr,jstr-1,kout)=0.5_r8* &
1623 & (tl_ubar(istr+1,jstr-1,kout)+ &
1624 & tl_ubar(istr ,jstr ,kout))
1627 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
1633 tl_ubar(iend+1,jstr-1,kout)=0.5_r8* &
1634 & (tl_ubar(iend ,jstr-1,kout)+ &
1635 & tl_ubar(iend+1,jstr ,kout))
1638 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
1644 tl_ubar(istr,jend+1,kout)=0.5_r8* &
1645 & (tl_ubar(istr ,jend ,kout)+ &
1646 & tl_ubar(istr+1,jend+1,kout))
1649 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
1655 tl_ubar(iend+1,jend+1,kout)=0.5_r8* &
1656 & (tl_ubar(iend+1,jend ,kout)+ &
1657 & tl_ubar(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