25 & LBi, UBi, LBj, UBj, LBij, UBij, &
28 & rmask, umask, vmask, &
35 & s_ubar_obc, s_vbar_obc, &
53#if defined ADJUST_BOUNDARY || defined ADJUST_STFLUX || \
54 defined adjust_wstress
61 integer,
intent(in) :: ng, tile
62 integer,
intent(in) :: lbi, ubi, lbj, ubj, lbij, ubij
63 integer,
intent(in) :: linp, lout
65 real(r8),
intent(in) :: fac
69 real(r8),
intent(in) :: rmask(lbi:,lbj:)
70 real(r8),
intent(in) :: umask(lbi:,lbj:)
71 real(r8),
intent(in) :: vmask(lbi:,lbj:)
73# ifdef ADJUST_BOUNDARY
75 real(r8),
intent(inout) :: s_t_obc(lbij:,:,:,:,:,:)
76 real(r8),
intent(inout) :: s_u_obc(lbij:,:,:,:,:)
77 real(r8),
intent(inout) :: s_v_obc(lbij:,:,:,:,:)
79 real(r8),
intent(inout) :: s_ubar_obc(lbij:,:,:,:)
80 real(r8),
intent(inout) :: s_vbar_obc(lbij:,:,:,:)
81 real(r8),
intent(inout) :: s_zeta_obc(lbij:,:,:,:)
84 real(r8),
intent(inout) :: s_sustr(lbi:,lbj:,:,:)
85 real(r8),
intent(inout) :: s_svstr(lbi:,lbj:,:,:)
89 real(r8),
intent(inout) :: s_tflux(lbi:,lbj:,:,:,:)
91 real(r8),
intent(inout) :: s_t(lbi:,lbj:,:,:,:)
92 real(r8),
intent(inout) :: s_u(lbi:,lbj:,:,:)
93 real(r8),
intent(inout) :: s_v(lbi:,lbj:,:,:)
95 real(r8),
intent(inout) :: s_ubar(lbi:,lbj:,:)
96 real(r8),
intent(inout) :: s_vbar(lbi:,lbj:,:)
98 real(r8),
intent(inout) :: s_zeta(lbi:,lbj:,:)
103 real(r8),
intent(in) :: rmask(lbi:ubi,lbj:ubj)
104 real(r8),
intent(in) :: umask(lbi:ubi,lbj:ubj)
105 real(r8),
intent(in) :: vmask(lbi:ubi,lbj:ubj)
107# ifdef ADJUST_BOUNDARY
109 real(r8),
intent(inout) :: s_t_obc(lbij:ubij,
n(ng),4, &
110 & Nbrec(ng),2,NT(ng))
111 real(r8),
intent(inout) :: s_u_obc(lbij:ubij,
n(ng),4,
nbrec(ng),2)
112 real(r8),
intent(inout) :: s_v_obc(lbij:ubij,
n(ng),4,
nbrec(ng),2)
114 real(r8),
intent(inout) :: s_ubar_obc(lbij:ubij,4,
nbrec(ng),2)
115 real(r8),
intent(inout) :: s_vbar_obc(lbij:ubij,4,
nbrec(ng),2)
116 real(r8),
intent(inout) :: s_zeta_obc(lbij:ubij,4,
nbrec(ng),2)
118# ifdef ADJUST_WSTRESS
119 real(r8),
intent(inout) :: s_sustr(lbi:ubi,lbj:ubj,
nfrec(ng),2)
120 real(r8),
intent(inout) :: s_svstr(lbi:ubi,lbj:ubj,
nfrec(ng),2)
124 real(r8),
intent(inout) :: s_tflux(lbi:ubi,lbj:ubj, &
125 & Nfrec(ng),2,NT(ng))
127 real(r8),
intent(inout) :: s_t(lbi:ubi,lbj:ubj,
n(ng),3,
nt(ng))
128 real(r8),
intent(inout) :: s_u(lbi:ubi,lbj:ubj,
n(ng),2)
129 real(r8),
intent(inout) :: s_v(lbi:ubi,lbj:ubj,
n(ng),2)
131 real(r8),
intent(inout) :: s_ubar(lbi:ubi,lbj:ubj,:)
132 real(r8),
intent(inout) :: s_vbar(lbi:ubi,lbj:ubj,:)
134 real(r8),
intent(inout) :: s_zeta(lbi:ubi,lbj:ubj,:)
140 integer :: ib, ir, it
142#include "set_bounds.h"
152 s_zeta(i,j,lout)=fac*s_zeta(i,j,linp)
154 s_zeta(i,j,lout)=s_zeta(i,j,lout)*rmask(i,j)
159#ifdef ADJUST_BOUNDARY
166 &
domain(ng)%Western_Edge(tile))
THEN
169 s_zeta_obc(j,ib,ir,lout)=fac*s_zeta_obc(j,ib,ir,linp)
171 s_zeta_obc(j,ib,ir,lout)=s_zeta_obc(j,ib,ir,lout)* &
177 &
domain(ng)%Eastern_Edge(tile))
THEN
180 s_zeta_obc(j,ib,ir,lout)=fac*s_zeta_obc(j,ib,ir,linp)
182 s_zeta_obc(j,ib,ir,lout)=s_zeta_obc(j,ib,ir,lout)* &
188 &
domain(ng)%Southern_Edge(tile))
THEN
191 s_zeta_obc(i,ib,ir,lout)=fac*s_zeta_obc(i,ib,ir,linp)
193 s_zeta_obc(i,ib,ir,lout)=s_zeta_obc(i,ib,ir,lout)* &
199 &
domain(ng)%Northern_Edge(tile))
THEN
202 s_zeta_obc(i,ib,ir,lout)=fac*s_zeta_obc(i,ib,ir,linp)
204 s_zeta_obc(i,ib,ir,lout)=s_zeta_obc(i,ib,ir,lout)* &
219 s_ubar(i,j,lout)=fac*s_ubar(i,j,linp)
221 s_ubar(i,j,lout)=s_ubar(i,j,lout)*umask(i,j)
227#ifdef ADJUST_BOUNDARY
234 &
domain(ng)%Western_Edge(tile))
THEN
237 s_ubar_obc(j,ib,ir,lout)=fac*s_ubar_obc(j,ib,ir,linp)
239 s_ubar_obc(j,ib,ir,lout)=s_ubar_obc(j,ib,ir,lout)* &
245 &
domain(ng)%Eastern_Edge(tile))
THEN
248 s_ubar_obc(j,ib,ir,lout)=fac*s_ubar_obc(j,ib,ir,linp)
250 s_ubar_obc(j,ib,ir,lout)=s_ubar_obc(j,ib,ir,lout)* &
256 &
domain(ng)%Southern_Edge(tile))
THEN
259 s_ubar_obc(i,ib,ir,lout)=fac*s_ubar_obc(i,ib,ir,linp)
261 s_ubar_obc(i,ib,ir,lout)=s_ubar_obc(i,ib,ir,lout)* &
267 &
domain(ng)%Northern_Edge(tile))
THEN
270 s_ubar_obc(i,ib,ir,lout)=fac*s_ubar_obc(i,ib,ir,linp)
272 s_ubar_obc(i,ib,ir,lout)=s_ubar_obc(i,ib,ir,lout)* &
287 s_vbar(i,j,lout)=fac*s_vbar(i,j,linp)
289 s_vbar(i,j,lout)=s_vbar(i,j,lout)*vmask(i,j)
295#ifdef ADJUST_BOUNDARY
302 &
domain(ng)%Western_Edge(tile))
THEN
305 s_vbar_obc(j,ib,ir,lout)=fac*s_vbar_obc(j,ib,ir,linp)
307 s_vbar_obc(j,ib,ir,lout)=s_vbar_obc(j,ib,ir,lout)* &
313 &
domain(ng)%Eastern_Edge(tile))
THEN
316 s_vbar_obc(j,ib,ir,lout)=fac*s_vbar_obc(j,ib,ir,linp)
318 s_vbar_obc(j,ib,ir,lout)=s_vbar_obc(j,ib,ir,lout)* &
324 &
domain(ng)%Southern_Edge(tile))
THEN
327 s_vbar_obc(i,ib,ir,lout)=fac*s_vbar_obc(i,ib,ir,linp)
329 s_vbar_obc(i,ib,ir,lout)=s_vbar_obc(i,ib,ir,lout)* &
335 &
domain(ng)%Northern_Edge(tile))
THEN
338 s_vbar_obc(i,ib,ir,lout)=fac*s_vbar_obc(i,ib,ir,linp)
340 s_vbar_obc(i,ib,ir,lout)=s_vbar_obc(i,ib,ir,lout)* &
356 s_sustr(i,j,ir,lout)=fac*s_sustr(i,j,ir,linp)
358 s_sustr(i,j,ir,lout)=s_sustr(i,j,ir,lout)*umask(i,j)
364 s_svstr(i,j,ir,lout)=fac*s_svstr(i,j,ir,linp)
366 s_svstr(i,j,ir,lout)=s_svstr(i,j,ir,lout)*vmask(i,j)
380 s_u(i,j,k,lout)=fac*s_u(i,j,k,linp)
382 s_u(i,j,k,lout)=s_u(i,j,k,lout)*umask(i,j)
388# ifdef ADJUST_BOUNDARY
395 &
domain(ng)%Western_Edge(tile))
THEN
399 s_u_obc(j,k,ib,ir,lout)=fac*s_u_obc(j,k,ib,ir,linp)
401 s_u_obc(j,k,ib,ir,lout)=s_u_obc(j,k,ib,ir,lout)* &
408 &
domain(ng)%Eastern_Edge(tile))
THEN
412 s_u_obc(j,k,ib,ir,lout)=fac*s_u_obc(j,k,ib,ir,linp)
414 s_u_obc(j,k,ib,ir,lout)=s_u_obc(j,k,ib,ir,lout)* &
421 &
domain(ng)%Southern_Edge(tile))
THEN
425 s_u_obc(i,k,ib,ir,lout)=fac*s_u_obc(i,k,ib,ir,linp)
427 s_u_obc(i,k,ib,ir,lout)=s_u_obc(i,k,ib,ir,lout)* &
434 &
domain(ng)%Northern_Edge(tile))
THEN
438 s_u_obc(i,k,ib,ir,lout)=fac*s_u_obc(i,k,ib,ir,linp)
440 s_u_obc(i,k,ib,ir,lout)=s_u_obc(i,k,ib,ir,lout)* &
455 s_v(i,j,k,lout)=fac*s_v(i,j,k,linp)
457 s_v(i,j,k,lout)=s_v(i,j,k,lout)*vmask(i,j)
463# ifdef ADJUST_BOUNDARY
470 &
domain(ng)%Western_Edge(tile))
THEN
474 s_v_obc(j,k,ib,ir,lout)=fac*s_v_obc(j,k,ib,ir,linp)
476 s_v_obc(j,k,ib,ir,lout)=s_v_obc(j,k,ib,ir,lout)* &
483 &
domain(ng)%Eastern_Edge(tile))
THEN
487 s_v_obc(j,k,ib,ir,lout)=fac*s_v_obc(j,k,ib,ir,linp)
489 s_v_obc(j,k,ib,ir,lout)=s_v_obc(j,k,ib,ir,lout)* &
496 &
domain(ng)%Southern_Edge(tile))
THEN
500 s_v_obc(i,k,ib,ir,lout)=fac*s_v_obc(i,k,ib,ir,linp)
502 s_v_obc(i,k,ib,ir,lout)=s_v_obc(i,k,ib,ir,lout)* &
509 &
domain(ng)%Northern_Edge(tile))
THEN
513 s_v_obc(i,k,ib,ir,lout)=fac*s_v_obc(i,k,ib,ir,linp)
515 s_v_obc(i,k,ib,ir,lout)=s_v_obc(i,k,ib,ir,lout)* &
531 s_t(i,j,k,lout,it)=fac*s_t(i,j,k,linp,it)
533 s_t(i,j,k,lout,it)=s_t(i,j,k,lout,it)*rmask(i,j)
540# ifdef ADJUST_BOUNDARY
548 &
domain(ng)%Western_Edge(tile))
THEN
552 s_t_obc(j,k,ib,ir,lout,it)=fac* &
553 & s_t_obc(j,k,ib,ir,linp,it)
555 s_t_obc(j,k,ib,ir,lout,it)=s_t_obc(j,k,ib,ir,lout,it)*&
562 &
domain(ng)%Eastern_Edge(tile))
THEN
566 s_t_obc(j,k,ib,ir,lout,it)=fac* &
567 & s_t_obc(j,k,ib,ir,linp,it)
569 s_t_obc(j,k,ib,ir,lout,it)=s_t_obc(j,k,ib,ir,lout,it)*&
576 &
domain(ng)%Southern_Edge(tile))
THEN
580 s_t_obc(i,k,ib,ir,lout,it)=fac* &
581 & s_t_obc(i,k,ib,ir,linp,it)
583 s_t_obc(i,k,ib,ir,lout,it)=s_t_obc(i,k,ib,ir,lout,it)*&
590 &
domain(ng)%Northern_Edge(tile))
THEN
594 s_t_obc(i,k,ib,ir,lout,it)=fac* &
595 & s_t_obc(i,k,ib,ir,linp,it)
597 s_t_obc(i,k,ib,ir,lout,it)=s_t_obc(i,k,ib,ir,lout,it)*&
617 s_tflux(i,j,ir,lout,it)=fac*s_tflux(i,j,ir,linp,it)
619 s_tflux(i,j,ir,lout,it)=s_tflux(i,j,ir,lout,it)* &