24 SUBROUTINE v2dbc (ng, tile, kout)
33 integer,
intent(in) :: ng, tile, kout
40 & lbi, ubi, lbj, ubj, &
41 & imins, imaxs, jmins, jmaxs, &
52 & LBi, UBi, LBj, UBj, &
53 & IminS, ImaxS, JminS, JmaxS, &
68 integer,
intent(in) :: ng, tile
69 integer,
intent(in) :: LBi, UBi, LBj, UBj
70 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
71 integer,
intent(in) :: krhs, kstp, kout
74 real(r8),
intent(in) :: ubar(LBi:,LBj:,:)
75 real(r8),
intent(in) :: zeta(LBi:,LBj:,:)
77 real(r8),
intent(inout) :: vbar(LBi:,LBj:,:)
79 real(r8),
intent(in) :: ubar(LBi:UBi,LBj:UBj,:)
80 real(r8),
intent(in) :: zeta(LBi:UBi,LBj:UBj,:)
82 real(r8),
intent(inout) :: vbar(LBi:UBi,LBj:UBj,:)
90 real(r8),
parameter :: eps = 1.0e-20_r8
93 real(r8) :: bry_pgr, bry_cor, bry_str, bry_val
94 real(r8):: cff, cff1, cff2, dt2d, dVde, dVdt, dVdx
95 real(r8) :: obc_in, obc_out, tau
97 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: grad
99#include "set_bounds.h"
105 IF (first_2d_step)
THEN
120 IF (
domain(ng)%Southern_Edge(tile))
THEN
126 grad(i,jstr )=vbar(i ,jstr ,know)- &
127 & vbar(i-1,jstr ,know)
128 grad(i,jstr+1)=vbar(i ,jstr+1,know)- &
129 & vbar(i-1,jstr+1,know)
133 dvdt=vbar(i,jstr+1,know)-vbar(i,jstr+1,kout)
134 dvde=vbar(i,jstr+1,know)-vbar(i,jstr+2,know)
139 & (
clima(ng)%M2nudgcof(i,jstr-1)+ &
140 &
clima(ng)%M2nudgcof(i,jstr ))
141 obc_in =
obcfac(ng)*obc_out
146 IF ((dvdt*dvde).lt.0.0_r8)
THEN
154 IF ((dvdt*dvde).lt.0.0_r8) dvdt=0.0_r8
155 IF ((dvdt*(grad(i ,jstr+1)+ &
156 & grad(i+1,jstr+1))).gt.0.0_r8)
THEN
159 dvdx=grad(i+1,jstr+1)
161 cff=dvdt/max(dvdx*dvdx+dvde*dvde,eps)
163 cx=min(1.0_r8,max(-1.0_r8,cff*dvdx))
167 ce=min(1.0_r8,cff*dvde)
168#if defined CELERITY_WRITE && defined FORWARD_WRITE
173 vbar(i,jstr,kout)=(1.0_r8-ce)*vbar(i,jstr,know)+ &
174 & ce*vbar(i,jstr+1,know)- &
175 & max(cx,0.0_r8)*grad(i ,jstr)- &
176 & min(cx,0.0_r8)*grad(i+1,jstr)
179 vbar(i,jstr,kout)=vbar(i,jstr,kout)+ &
180 & tau*(
boundary(ng)%vbar_south(i)- &
184 vbar(i,jstr,kout)=vbar(i,jstr,kout)* &
185 &
grid(ng)%vmask(i,jstr)
195#if defined SSH_TIDES && !defined UV_TIDES
197 bry_pgr=-
g*(zeta(i,jstr,know)- &
199 & 0.5_r8*
grid(ng)%pn(i,jstr)
201 bry_pgr=-
g*(zeta(i,jstr ,know)- &
202 & zeta(i,jstr-1,know))* &
203 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
204 &
grid(ng)%pn(i,jstr ))
207 bry_cor=-0.125_r8*(ubar(i ,jstr-1,know)+ &
208 & ubar(i+1,jstr-1,know)+ &
209 & ubar(i ,jstr ,know)+ &
210 & ubar(i+1,jstr ,know))* &
211 & (
grid(ng)%f(i,jstr-1)+ &
212 &
grid(ng)%f(i,jstr ))
216 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
217 & zeta(i,jstr-1,know)+ &
218 &
grid(ng)%h(i,jstr )+ &
219 & zeta(i,jstr ,know)))
220 bry_str=cff1*(
forces(ng)%svstr(i,jstr)- &
221 &
forces(ng)%bvstr(i,jstr))
222 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
223 & zeta(i,jstr-1,know)+ &
224 &
grid(ng)%h(i,jstr )+ &
225 & zeta(i,jstr ,know)))
226 cff2=
grid(ng)%on_v(i,jstr)*ce
228 bry_val=vbar(i,jstr+1,know)+ &
235 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
236 & zeta(i,jstr-1,know)+ &
237 &
grid(ng)%h(i,jstr )+ &
238 & zeta(i,jstr ,know)))
240 vbar(i,jstr,kout)=bry_val- &
241 & ce*(0.5_r8*(zeta(i,jstr-1,know)+ &
242 & zeta(i,jstr ,know))- &
245 vbar(i,jstr,kout)=vbar(i,jstr,kout)* &
246 &
grid(ng)%vmask(i,jstr)
256 vbar(i,jstr,kout)=
boundary(ng)%vbar_south(i)
258 vbar(i,jstr,kout)=vbar(i,jstr,kout)* &
259 &
grid(ng)%vmask(i,jstr)
269 vbar(i,jstr,kout)=vbar(i,jstr+1,kout)
271 vbar(i,jstr,kout)=vbar(i,jstr,kout)* &
272 &
grid(ng)%vmask(i,jstr)
283 bry_pgr=-
g*(zeta(i,jstr,know)- &
285 & 0.5_r8*
grid(ng)%pn(i,jstr)
287 bry_pgr=-
g*(zeta(i,jstr ,know)- &
288 & zeta(i,jstr-1,know))* &
289 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
290 &
grid(ng)%pn(i,jstr ))
293 bry_cor=-0.125_r8*(ubar(i ,jstr-1,know)+ &
294 & ubar(i+1,jstr-1,know)+ &
295 & ubar(i ,jstr ,know)+ &
296 & ubar(i+1,jstr ,know))* &
297 & (
grid(ng)%f(i,jstr-1)+ &
298 &
grid(ng)%f(i,jstr ))
302 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
303 & zeta(i,jstr-1,know)+ &
304 &
grid(ng)%h(i,jstr )+ &
305 & zeta(i,jstr ,know)))
306 bry_str=cff*(
forces(ng)%svstr(i,jstr)- &
307 &
forces(ng)%bvstr(i,jstr))
308 vbar(i,jstr,kout)=vbar(i,jstr,know)+ &
313 vbar(i,jstr,kout)=vbar(i,jstr,kout)* &
314 &
grid(ng)%vmask(i,jstr)
324 vbar(i,jstr,kout)=0.0_r8
334 IF (
domain(ng)%Northern_Edge(tile))
THEN
340 grad(i,jend )=vbar(i ,jend ,know)- &
341 & vbar(i-1,jend ,know)
342 grad(i,jend+1)=vbar(i ,jend+1,know)- &
343 & vbar(i-1,jend+1,know)
347 dvdt=vbar(i,jend,know)-vbar(i,jend ,kout)
348 dvde=vbar(i,jend,know)-vbar(i,jend-1,know)
353 & (
clima(ng)%M2nudgcof(i,jend )+ &
354 &
clima(ng)%M2nudgcof(i,jend+1))
355 obc_in =
obcfac(ng)*obc_out
360 IF ((dvdt*dvde).lt.0.0_r8)
THEN
368 IF ((dvdt*dvde).lt.0.0_r8) dvdt=0.0_r8
369 IF ((dvdt*(grad(i ,jend)+ &
370 & grad(i+1,jend))).gt.0.0_r8)
THEN
375 cff=dvdt/max(dvdx*dvdx+dvde*dvde,eps)
377 cx=min(1.0_r8,max(-1.0_r8,cff*dvdx))
381 ce=min(1.0_r8,cff*dvde)
382#if defined CELERITY_WRITE && defined FORWARD_WRITE
387 vbar(i,jend+1,kout)=(1.0_r8-ce)*vbar(i,jend+1,know)+ &
388 & ce*vbar(i,jend,know)- &
389 & max(cx,0.0_r8)*grad(i ,jend+1)- &
390 & min(cx,0.0_r8)*grad(i+1,jend+1)
393 vbar(i,jend+1,kout)=vbar(i,jend+1,kout)+ &
394 & tau*(
boundary(ng)%vbar_north(i)- &
395 & vbar(i,jend+1,know))
398 vbar(i,jend+1,kout)=vbar(i,jend+1,kout)* &
399 &
grid(ng)%vmask(i,jend+1)
409#if defined SSH_TIDES && !defined UV_TIDES
411 bry_pgr=-
g*(
boundary(ng)%zeta_north(i)- &
412 & zeta(i,jend,know))* &
413 & 0.5_r8*
grid(ng)%pn(i,jend)
415 bry_pgr=-
g*(zeta(i,jend+1,know)- &
416 & zeta(i,jend ,know))* &
417 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
418 &
grid(ng)%pn(i,jend+1))
421 bry_cor=-0.125_r8*(ubar(i ,jend ,know)+ &
422 & ubar(i+1,jend ,know)+ &
423 & ubar(i ,jend+1,know)+ &
424 & ubar(i+1,jend+1,know))* &
425 & (
grid(ng)%f(i,jend )+ &
426 &
grid(ng)%f(i,jend+1))
430 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
431 & zeta(i,jend ,know)+ &
432 &
grid(ng)%h(i,jend+1)+ &
433 & zeta(i,jend+1,know)))
434 bry_str=cff1*(
forces(ng)%svstr(i,jend+1)- &
435 &
forces(ng)%bvstr(i,jend+1))
436 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jend+1)+ &
437 & zeta(i,jend+1,know)+ &
438 &
grid(ng)%h(i,jend )+ &
439 & zeta(i,jend ,know)))
440 cff2=
grid(ng)%on_v(i,jend+1)*ce
442 bry_val=vbar(i,jend,know)+ &
449 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
450 & zeta(i,jend ,know)+ &
451 &
grid(ng)%h(i,jend+1)+ &
452 & zeta(i,jend+1,know)))
454 vbar(i,jend+1,kout)=bry_val+ &
455 & ce*(0.5_r8*(zeta(i,jend ,know)+ &
456 & zeta(i,jend+1,know))- &
459 vbar(i,jend+1,kout)=vbar(i,jend+1,kout)* &
460 &
grid(ng)%vmask(i,jend+1)
470 vbar(i,jend+1,kout)=
boundary(ng)%vbar_north(i)
472 vbar(i,jend+1,kout)=vbar(i,jend+1,kout)* &
473 &
grid(ng)%vmask(i,jend+1)
483 vbar(i,jend+1,kout)=vbar(i,jend,kout)
485 vbar(i,jend+1,kout)=vbar(i,jend+1,kout)* &
486 &
grid(ng)%vmask(i,jend+1)
497 bry_pgr=-
g*(
boundary(ng)%zeta_north(i)- &
498 & zeta(i,jend,know))* &
499 & 0.5_r8*
grid(ng)%pn(i,jend)
501 bry_pgr=-
g*(zeta(i,jend+1,know)- &
502 & zeta(i,jend ,know))* &
503 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
504 &
grid(ng)%pn(i,jend+1))
507 bry_cor=-0.125_r8*(ubar(i ,jend ,know)+ &
508 & ubar(i+1,jend ,know)+ &
509 & ubar(i ,jend+1,know)+ &
510 & ubar(i+1,jend+1,know))* &
511 & (
grid(ng)%f(i,jend )+ &
512 &
grid(ng)%f(i,jend+1))
516 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
517 & zeta(i,jend ,know)+ &
518 &
grid(ng)%h(i,jend+1)+ &
519 & zeta(i,jend+1,know)))
520 bry_str=cff*(
forces(ng)%svstr(i,jend+1)- &
521 &
forces(ng)%bvstr(i,jend+1))
522 vbar(i,jend+1,kout)=vbar(i,jend+1,know)+ &
527 vbar(i,jend+1,kout)=vbar(i,jend+1,kout)* &
528 &
grid(ng)%vmask(i,jend+1)
538 vbar(i,jend+1,kout)=0.0_r8
548 IF (
domain(ng)%Western_Edge(tile))
THEN
554 grad(istr-1,j)=vbar(istr-1,j+1,know)- &
555 & vbar(istr-1,j ,know)
556 grad(istr ,j)=vbar(istr ,j+1,know)- &
557 & vbar(istr ,j ,know)
561 dvdt=vbar(istr,j,know)-vbar(istr ,j,kout)
562 dvdx=vbar(istr,j,know)-vbar(istr+1,j,know)
567 & (
clima(ng)%M2nudgcof(istr-1,j-1)+ &
568 &
clima(ng)%M2nudgcof(istr-1,j ))
569 obc_in =
obcfac(ng)*obc_out
574 IF ((dvdt*dvdx).lt.0.0_r8)
THEN
582 IF ((dvdt*dvdx).lt.0.0_r8) dvdt=0.0_r8
583 IF ((dvdt*(grad(istr,j-1)+ &
584 & grad(istr,j ))).gt.0.0_r8)
THEN
589 cff=dvdt/max(dvdx*dvdx+dvde*dvde,eps)
590 cx=min(1.0_r8,cff*dvdx)
592 ce=min(1.0_r8,max(-1.0_r8,cff*dvde))
596#if defined CELERITY_WRITE && defined FORWARD_WRITE
601 vbar(istr-1,j,kout)=(1.0_r8-cx)*vbar(istr-1,j,know)+ &
602 & cx*vbar(istr,j,know)- &
603 & max(ce,0.0_r8)*grad(istr-1,j-1)- &
604 & min(ce,0.0_r8)*grad(istr-1,j )
607 vbar(istr-1,j,kout)=vbar(istr-1,j,kout)+ &
609 & vbar(istr-1,j,know))
612 vbar(istr-1,j,kout)=vbar(istr-1,j,kout)* &
613 &
grid(ng)%vmask(istr-1,j)
624 cff=dt2d*0.5_r8*(
grid(ng)%pm(istr,j-1)+ &
625 &
grid(ng)%pm(istr,j ))
626 cff1=sqrt(
g*0.5_r8*(
grid(ng)%h(istr,j-1)+ &
627 & zeta(istr,j-1,know)+ &
628 &
grid(ng)%h(istr,j )+ &
629 & zeta(istr,j ,know)))
631 cff2=1.0_r8/(1.0_r8+cx)
632 vbar(istr-1,j,kout)=cff2*(vbar(istr-1,j,know)+ &
633 & cx*vbar(istr,j,kout))
635 vbar(istr-1,j,kout)=vbar(istr-1,j,kout)* &
636 &
grid(ng)%vmask(istr-1,j)
646 vbar(istr-1,j,kout)=
boundary(ng)%vbar_west(j)
648 vbar(istr-1,j,kout)=vbar(istr-1,j,kout)* &
649 &
grid(ng)%vmask(istr-1,j)
659 vbar(istr-1,j,kout)=vbar(istr,j,kout)
661 vbar(istr-1,j,kout)=vbar(istr-1,j,kout)* &
662 &
grid(ng)%vmask(istr-1,j)
680 vbar(istr-1,j,kout)=
gamma2(ng)*vbar(istr,j,kout)
682 vbar(istr-1,j,kout)=vbar(istr-1,j,kout)* &
683 &
grid(ng)%vmask(istr-1,j)
694 IF (
domain(ng)%Eastern_Edge(tile))
THEN
700 grad(iend ,j)=vbar(iend ,j+1,know)- &
701 & vbar(iend ,j ,know)
702 grad(iend+1,j)=vbar(iend+1,j+1,know)- &
703 & vbar(iend+1,j ,know)
707 dvdt=vbar(iend,j,know)-vbar(iend ,j,kout)
708 dvdx=vbar(iend,j,know)-vbar(iend-1,j,know)
713 & (
clima(ng)%M2nudgcof(iend+1,j-1)+ &
714 &
clima(ng)%M2nudgcof(iend+1,j ))
715 obc_in =
obcfac(ng)*obc_out
720 IF ((dvdt*dvdx).lt.0.0_r8)
THEN
728 IF ((dvdt*dvdx).lt.0.0_r8) dvdt=0.0_r8
729 IF ((dvdt*(grad(iend,j-1)+ &
730 & grad(iend,j ))).gt.0.0_r8)
THEN
735 cff=dvdt/max(dvdx*dvdx+dvde*dvde,eps)
736 cx=min(1.0_r8,cff*dvdx)
738 ce=min(1.0_r8,max(-1.0_r8,cff*dvde))
742#if defined CELERITY_WRITE && defined FORWARD_WRITE
747 vbar(iend+1,j,kout)=(1.0_r8-cx)*vbar(iend+1,j,know)+ &
748 & cx*vbar(iend,j,know)- &
749 & max(ce,0.0_r8)*grad(iend+1,j-1)- &
750 & min(ce,0.0_r8)*grad(iend+1,j )
753 vbar(iend+1,j,kout)=vbar(iend+1,j,kout)+ &
755 & vbar(iend+1,j,know))
758 vbar(iend+1,j,kout)=vbar(iend+1,j,kout)* &
759 &
grid(ng)%vmask(iend+1,j)
770 cff=dt2d*0.5_r8*(
grid(ng)%pm(iend,j-1)+ &
771 &
grid(ng)%pm(iend,j ))
772 cff1=sqrt(
g*0.5_r8*(
grid(ng)%h(iend,j-1)+ &
773 & zeta(iend,j-1,know)+ &
774 &
grid(ng)%h(iend,j )+ &
775 & zeta(iend,j ,know)))
777 cff2=1.0_r8/(1.0_r8+cx)
778 vbar(iend+1,j,kout)=cff2*(vbar(iend+1,j,know)+ &
779 & cx*vbar(iend,j,kout))
781 vbar(iend+1,j,kout)=vbar(iend+1,j,kout)* &
782 &
grid(ng)%vmask(iend+1,j)
792 vbar(iend+1,j,kout)=
boundary(ng)%vbar_east(j)
794 vbar(iend+1,j,kout)=vbar(iend+1,j,kout)* &
795 &
grid(ng)%vmask(iend+1,j)
805 vbar(iend+1,j,kout)=vbar(iend,j,kout)
807 vbar(iend+1,j,kout)=vbar(iend+1,j,kout)* &
808 &
grid(ng)%vmask(iend+1,j)
826 vbar(iend+1,j,kout)=
gamma2(ng)*vbar(iend,j,kout)
828 vbar(iend+1,j,kout)=vbar(iend+1,j,kout)* &
829 &
grid(ng)%vmask(iend+1,j)
841 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
844 vbar(istr-1,jstr,kout)=0.5_r8*(vbar(istr ,jstr ,kout)+ &
845 & vbar(istr-1,jstr+1,kout))
848 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
851 vbar(iend+1,jstr,kout)=0.5_r8*(vbar(iend ,jstr ,kout)+ &
852 & vbar(iend+1,jstr+1,kout))
855 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
858 vbar(istr-1,jend+1,kout)=0.5_r8*(vbar(istr-1,jend ,kout)+ &
859 & vbar(istr ,jend+1,kout))
862 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
865 vbar(iend+1,jend+1,kout)=0.5_r8*(vbar(iend+1,jend ,kout)+ &
866 & vbar(iend ,jend+1,kout))
878 IF (
domain(ng)%Western_Edge(tile))
THEN
881 cff1=abs(abs(
grid(ng)%vmask_wet(istr-1,j))-1.0_r8)
882 cff2=0.5_r8+dsign(0.5_r8,vbar(istr-1,j,kout))* &
883 &
grid(ng)%vmask_wet(istr-1,j)
884 cff=0.5_r8*
grid(ng)%vmask_wet(istr-1,j)*cff1+ &
886 vbar(istr,j,kout)=vbar(istr,j,kout)*cff
890 IF (
domain(ng)%Eastern_Edge(tile))
THEN
893 cff1=abs(abs(
grid(ng)%vmask_wet(iend+1,j))-1.0_r8)
894 cff2=0.5_r8+dsign(0.5_r8,vbar(iend+1,j,kout))* &
895 &
grid(ng)%vmask_wet(iend+1,j)
896 cff=0.5_r8*
grid(ng)%vmask_wet(iend+1,j)*cff1+ &
898 vbar(iend+1,j,kout)=vbar(iend+1,j,kout)*cff
905 IF (
domain(ng)%Southern_Edge(tile))
THEN
908 cff1=abs(abs(
grid(ng)%vmask_wet(i,jstr))-1.0_r8)
909 cff2=0.5_r8+dsign(0.5_r8,vbar(i,jstr,kout))* &
910 &
grid(ng)%vmask_wet(i,jstr)
911 cff=0.5_r8*
grid(ng)%vmask_wet(i,jstr)*cff1+ &
913 vbar(i,jstr,kout)=vbar(i,jstr,kout)*cff
917 IF (
domain(ng)%Northern_Edge(tile))
THEN
920 cff1=abs(abs(
grid(ng)%vmask_wet(i,jend+1))-1.0_r8)
921 cff2=0.5_r8+dsign(0.5_r8,vbar(i,jend+1,kout))* &
922 &
grid(ng)%vmask_wet(i,jend+1)
923 cff=0.5_r8*
grid(ng)%vmask_wet(i,jend+1)*cff1+ &
925 vbar(i,jend+1,kout)=vbar(i,jend+1,kout)*cff
932 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
935 cff1=abs(abs(
grid(ng)%vmask_wet(istr-1,jstr))-1.0_r8)
936 cff2=0.5_r8+dsign(0.5_r8,vbar(istr-1,jstr,kout))* &
937 &
grid(ng)%vmask_wet(istr-1,jstr)
938 cff=0.5_r8*
grid(ng)%vmask_wet(istr-1,jstr)*cff1+ &
940 vbar(istr-1,jstr,kout)=vbar(istr-1,jstr,kout)*cff
943 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
946 cff1=abs(abs(
grid(ng)%vmask_wet(iend+1,jstr))-1.0_r8)
947 cff2=0.5_r8+dsign(0.5_r8,vbar(iend+1,jstr,kout))* &
948 &
grid(ng)%vmask_wet(iend+1,jstr)
949 cff=0.5_r8*
grid(ng)%vmask_wet(iend+1,jstr)*cff1+ &
951 vbar(iend+1,jstr,kout)=vbar(iend+1,jstr,kout)*cff
954 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
957 cff1=abs(abs(
grid(ng)%vmask_wet(istr-1,jend+1))-1.0_r8)
958 cff2=0.5_r8+dsign(0.5_r8,vbar(istr-1,jend+1,kout))* &
959 &
grid(ng)%vmask_wet(istr-1,jend+1)
960 cff=0.5_r8*
grid(ng)%vmask_wet(istr-1,jend+1)*cff1+ &
962 vbar(istr-1,jend+1,kout)=vbar(istr-1,jend+1,kout)*cff
965 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
968 cff1=abs(abs(
grid(ng)%vmask_wet(iend+1,jend+1))-1.0_r8)
969 cff2=0.5_r8+dsign(0.5_r8,vbar(iend+1,jend+1,kout))* &
970 &
grid(ng)%vmask_wet(iend+1,jend+1)
971 cff=0.5_r8*
grid(ng)%vmask_wet(iend+1,jend+1)*cff1+ &
973 vbar(iend+1,jend+1,kout)=vbar(iend+1,jend+1,kout)*cff
type(t_boundary), dimension(:), allocatable boundary
type(t_apply), dimension(:), allocatable lbc_apply
type(t_clima), dimension(:), allocatable clima
type(t_forces), dimension(:), allocatable forces
type(t_grid), dimension(:), allocatable grid
type(t_ocean), dimension(:), allocatable ocean
type(t_lbc), dimension(:,:,:), allocatable lbc
type(t_domain), dimension(:), allocatable domain
logical, dimension(:), allocatable lnudgem2clm
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
logical, dimension(:), allocatable predictor_2d_step
real(dp), dimension(:), allocatable obcfac
real(r8), dimension(:), allocatable gamma2
integer, parameter isouth
real(dp), dimension(:), allocatable dtfast
real(dp), dimension(:,:), allocatable m2obc_out
integer, parameter inorth
real(dp), dimension(:,:), allocatable m2obc_in
integer, dimension(:), allocatable kstp
integer, dimension(:), allocatable krhs
subroutine, public v2dbc(ng, tile, kout)
subroutine, public v2dbc_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, krhs, kstp, kout, ubar, vbar, zeta)