66 & LBi, UBi, LBj, UBj, &
67 & IminS, ImaxS, JminS, JmaxS, &
75 & tl_ubar, tl_vbar, tl_zeta)
89 integer,
intent(in) :: ng, tile
90 integer,
intent(in) :: lbi, ubi, lbj, ubj
91 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
92 integer,
intent(in) :: kinp
96 real(r8),
intent(in) :: umask(lbi:,lbj:)
97 real(r8),
intent(in) :: vmask(lbi:,lbj:)
99 real(r8),
intent(in) :: h(lbi:,lbj:)
100 real(r8),
intent(in) :: tl_h(lbi:,lbj:)
101 real(r8),
intent(in) :: om_v(lbi:,lbj:)
102 real(r8),
intent(in) :: on_u(lbi:,lbj:)
104 real(r8),
intent(in) :: ubar(lbi:,lbj:,:)
105 real(r8),
intent(in) :: vbar(lbi:,lbj:,:)
106 real(r8),
intent(in) :: zeta(lbi:,lbj:,:)
107 real(r8),
intent(in) :: tl_ubar(lbi:,lbj:,:)
108 real(r8),
intent(in) :: tl_vbar(lbi:,lbj:,:)
109 real(r8),
intent(in) :: tl_zeta(lbi:,lbj:,:)
112 real(r8),
intent(in) :: umask(lbi:ubi,lbj:ubj)
113 real(r8),
intent(in) :: vmask(lbi:ubi,lbj:ubj)
115 real(r8),
intent(in) :: h(lbi:ubi,lbj:ubj)
116 real(r8),
intent(in) :: tl_h(lbi:ubi,lbj:ubj)
117 real(r8),
intent(in) :: om_v(lbi:ubi,lbj:ubj)
118 real(r8),
intent(in) :: on_u(lbi:ubi,lbj:ubj)
120 real(r8),
intent(in) :: ubar(lbi:ubi,lbj:ubj,:)
121 real(r8),
intent(in) :: vbar(lbi:ubi,lbj:ubj,:)
122 real(r8),
intent(in) :: zeta(lbi:ubi,lbj:ubj,:)
123 real(r8),
intent(in) :: tl_ubar(lbi:ubi,lbj:ubj,:)
124 real(r8),
intent(in) :: tl_vbar(lbi:ubi,lbj:ubj,:)
125 real(r8),
intent(in) :: tl_zeta(lbi:ubi,lbj:ubj,:)
130 integer :: nsub, i, j
132 real(r8) :: cff, my_area, my_flux
133 real(r8) :: tl_cff, tl_my_area, tl_my_flux
136 real(r8),
dimension(2) :: rbuffer
137 character (len=3),
dimension(2) :: op_handle
140# include "set_bounds.h"
153 IF (
domain(ng)%Western_Edge(tile))
THEN
155 cff=0.5_r8*on_u(istr,j)* &
156 & (zeta(istr-1,j,kinp)+h(istr-1,j)+ &
157 & zeta(istr ,j,kinp)+h(istr ,j))
158 tl_cff=0.5_r8*on_u(istr,j)* &
159 & (tl_zeta(istr-1,j,kinp)+tl_h(istr-1,j)+ &
160 & tl_zeta(istr ,j,kinp)+tl_h(istr-1,j))
162 cff=cff*umask(istr,j)
163 tl_cff=tl_cff*umask(istr,j)
167 tl_my_area=tl_my_area+tl_cff
170 tl_my_flux=tl_my_flux+ &
171 & tl_cff*ubar(istr,j,kinp)+ &
172 & cff*tl_ubar(istr,j,kinp)
178 IF (
domain(ng)%Eastern_Edge(tile))
THEN
180 cff=0.5_r8*on_u(iend+1,j)* &
181 & (zeta(iend ,j,kinp)+h(iend ,j)+ &
182 & zeta(iend+1,j,kinp)+h(iend+1,j))
183 tl_cff=0.5_r8*on_u(iend+1,j)* &
184 & (tl_zeta(iend ,j,kinp)+tl_h(iend ,j)+ &
185 & tl_zeta(iend+1,j,kinp)+tl_h(iend+1,j))
187 cff=cff*umask(iend+1,j)
188 tl_cff=tl_cff*umask(iend+1,j)
192 tl_my_area=tl_my_area+tl_cff
195 tl_my_flux=tl_my_flux- &
196 & tl_cff*ubar(iend+1,j,kinp)- &
197 & cff*tl_ubar(iend+1,j,kinp)
203 IF (
domain(ng)%Southern_Edge(tile))
THEN
205 cff=0.5_r8*om_v(i,jstr)* &
206 & (zeta(i,jstr-1,kinp)+h(i,jstr-1)+ &
207 & zeta(i,jstr ,kinp)+h(i,jstr ))
208 tl_cff=0.5_r8*om_v(i,jstr)* &
209 & (tl_zeta(i,jstr-1,kinp)+tl_h(i,jstr-1)+ &
210 & tl_zeta(i,jstr ,kinp)+tl_h(i,jstr ))
212 cff=cff*vmask(i,jstr)
213 tl_cff=tl_cff*vmask(i,jstr)
217 tl_my_area=tl_my_area+tl_cff
220 tl_my_flux=tl_my_flux+ &
221 & tl_cff*vbar(i,jstrv-1,kinp)+ &
222 & cff*tl_vbar(i,jstrv-1,kinp)
228 IF (
domain(ng)%Northern_Edge(tile))
THEN
230 cff=0.5_r8*om_v(i,jend+1)* &
231 & (zeta(i,jend ,kinp)+h(i,jend )+ &
232 & zeta(i,jend+1,kinp)+h(i,jend+1))
233 tl_cff=0.5_r8*om_v(i,jend+1)* &
234 & (tl_zeta(i,jend ,kinp)+tl_h(i,jend )+ &
235 & tl_zeta(i,jend+1,kinp)+tl_h(i,jend+1))
237 cff=cff*vmask(i,jend+1)
238 tl_cff=tl_cff*vmask(i,jend+1)
242 tl_my_area=tl_my_area+tl_cff
245 tl_my_flux=tl_my_flux- &
246 & tl_cff*vbar(i,jend+1,kinp)- &
247 & cff*tl_vbar(i,jend+1,kinp)
260 IF (
domain(ng)%SouthWest_Corner(tile).and. &
261 &
domain(ng)%NorthEast_Corner(tile))
THEN
311 & LBi, UBi, LBj, UBj, &
312 & IminS, ImaxS, JminS, JmaxS, &
319 & tl_ubar, tl_vbar, &
320 & Drhs, Duon, Dvom, &
321 & tl_Drhs, tl_Duon, tl_Dvom)
333 integer,
intent(in) :: ng, tile
334 integer,
intent(in) :: lbi, ubi, lbj, ubj
335 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
336 integer,
intent(in) :: kinp
340 real(r8),
intent(in) :: umask(lbi:,lbj:)
341 real(r8),
intent(in) :: vmask(lbi:,lbj:)
343 real(r8),
intent(in) :: om_v(lbi:,lbj:)
344 real(r8),
intent(in) :: on_u(lbi:,lbj:)
345 real(r8),
intent(in) :: ubar(lbi:,lbj:,:)
346 real(r8),
intent(in) :: vbar(lbi:,lbj:,:)
347 real(r8),
intent(in) :: drhs(imins:,jmins:)
348 real(r8),
intent(in) :: duon(imins:,jmins:)
349 real(r8),
intent(in) :: dvom(imins:,jmins:)
350 real(r8),
intent(in) :: tl_ubar(lbi:,lbj:,:)
351 real(r8),
intent(in) :: tl_vbar(lbi:,lbj:,:)
352 real(r8),
intent(in) :: tl_drhs(imins:,jmins:)
354 real(r8),
intent(inout) :: tl_duon(imins:,jmins:)
355 real(r8),
intent(inout) :: tl_dvom(imins:,jmins:)
358 real(r8),
intent(in) :: umask(lbi:ubi,lbj:ubj)
359 real(r8),
intent(in) :: vmask(lbi:ubi,lbj:ubj)
361 real(r8),
intent(in) :: om_v(lbi:ubi,lbj:ubj)
362 real(r8),
intent(in) :: on_u(lbi:ubi,lbj:ubj)
363 real(r8),
intent(in) :: ubar(lbi:ubi,lbj:ubj,:)
364 real(r8),
intent(in) :: vbar(lbi:ubi,lbj:ubj,:)
365 real(r8),
intent(in) :: drhs(imins:imaxs,jmins:jmaxs)
366 real(r8),
intent(in) :: duon(imins:imaxs,jmins:jmaxs)
367 real(r8),
intent(in) :: dvom(imins:imaxs,jmins:jmaxs)
368 real(r8),
intent(in) :: tl_ubar(lbi:ubi,lbj:ubj,:)
369 real(r8),
intent(in) :: tl_vbar(lbi:ubi,lbj:ubj,:)
370 real(r8),
intent(in) :: tl_drhs(imins:,jmins:)
372 real(r8),
intent(inout) :: tl_duon(imins:imaxs,jmins:jmaxs)
373 real(r8),
intent(inout) :: tl_dvom(imins:imaxs,jmins:jmaxs)
380# include "set_bounds.h"
390# define I_RANGE IstrU,MIN(Iend+1,Lm(ng))
391# define J_RANGE JstrV,MIN(Jend+1,Mm(ng))
393# define I_RANGE MAX(2,IstrU-1),MIN(Iend+1,Lm(ng))
394# define J_RANGE MAX(2,JstrV-1),MIN(Jend+1,Mm(ng))
398 IF (
domain(ng)%Western_Edge(tile))
THEN
404 tl_duon(istr,j)=0.5_r8* &
405 & ((tl_drhs(istr,j)+tl_drhs(istr-1,j))* &
406 & (ubar(istr,j,kinp)-
ubar_xs)+ &
407 & (drhs(istr,j)+drhs(istr-1,j))* &
413 tl_duon(istr,j)=tl_duon(istr,j)*umask(istr,j)
420 IF (
domain(ng)%Eastern_Edge(tile))
THEN
426 tl_duon(iend+1,j)=0.5_r8* &
427 & ((tl_drhs(iend+1,j)+tl_drhs(iend,j))* &
428 & (ubar(iend+1,j,kinp)+
ubar_xs)+ &
429 & (drhs(iend+1,j)+drhs(iend,j))* &
435 tl_duon(iend+1,j)=tl_duon(iend+1,j)*umask(iend+1,j)
442 IF (
domain(ng)%Southern_Edge(tile))
THEN
448 tl_dvom(i,jstr)=0.5_r8* &
449 & ((tl_drhs(i,jstr)+tl_drhs(i,jstr-1))* &
450 & (vbar(i,jstr,kinp)-
ubar_xs)+ &
451 & (drhs(i,jstr)+drhs(i,jstr-1))* &
457 tl_dvom(i,jstr)=tl_dvom(i,jstr)*vmask(i,jstr)
464 IF (
domain(ng)%Northern_Edge(tile))
THEN
470 tl_dvom(i,jend+1)=0.5_r8* &
471 & ((tl_drhs(i,jend+1)+tl_drhs(i,jend))* &
472 & (vbar(i,jend+1,kinp)+
ubar_xs)+ &
473 & (drhs(i,jend+1)+drhs(i,jend))* &
479 tl_dvom(i,jend+1)=tl_dvom(i,jend+1)*vmask(i,jend+1)
498 & imins, imaxs, jmins, jmaxs, &
512 & imins, imaxs, jmins, jmaxs, &
527 & LBi, UBi, LBj, UBj, &
528 & IminS, ImaxS, JminS, JmaxS, &
541 integer,
intent(in) :: ng, tile
542 integer,
intent(in) :: LBi, UBi, LBj, UBj
543 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
544 integer,
intent(in) :: kinp
548 real(r8),
intent(in) :: umask(LBi:,LBj:)
549 real(r8),
intent(in) :: vmask(LBi:,LBj:)
551 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
552 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
555 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
556 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
558 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
559 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
566# include "set_bounds.h"
574 IF (
domain(ng)%Western_Edge(tile))
THEN
578 tl_ubar(istr,j,kinp)=tl_ubar(istr,j,kinp)-
tl_ubar_xs
582 tl_ubar(istr,j,kinp)=tl_ubar(istr,j,kinp)* &
590 IF (
domain(ng)%Eastern_Edge(tile))
THEN
594 tl_ubar(iend+1,j,kinp)=tl_ubar(iend+1,j,kinp)+
tl_ubar_xs
598 tl_ubar(iend+1,j,kinp)=tl_ubar(iend+1,j,kinp)* &
606 IF (
domain(ng)%Southern_Edge(tile))
THEN
610 tl_vbar(i,jstr,kinp)=(tl_vbar(i,jstr,kinp)-
tl_ubar_xs)
614 tl_vbar(i,jstr,kinp)=tl_vbar(i,jstr,kinp)* &
622 IF (
domain(ng)%Northern_Edge(tile))
THEN
626 tl_vbar(i,jend+1,kinp)=(tl_vbar(i,jend+1,kinp)+
tl_ubar_xs)
630 tl_vbar(i,jend+1,kinp)=tl_vbar(i,jend+1,kinp)* &
subroutine, public tl_obc_flux_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, kinp, umask, vmask, h, tl_h, om_v, on_u, ubar, vbar, zeta, tl_ubar, tl_vbar, tl_zeta)
subroutine, public tl_set_duv_bc_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, kinp, umask, vmask, om_v, on_u, ubar, vbar, tl_ubar, tl_vbar, drhs, duon, dvom, tl_drhs, tl_duon, tl_dvom)