107 & LBi, UBi, LBj, UBj, LBij, UBij, &
108 & IminS, ImaxS, JminS, JmaxS, &
110# ifdef ADJUST_BOUNDARY
112 & tl_t_obc, tl_u_obc, tl_v_obc, &
114 & tl_ubar_obc, tl_vbar_obc, &
117# ifdef ADJUST_WSTRESS
118 & tl_ustr, tl_vstr, &
124 & tl_t, tl_u, tl_v, &
126 & tl_ubar, tl_vbar, &
129# ifdef ADJUST_BOUNDARY
131 & ad_t_obc, ad_u_obc, ad_v_obc, &
133 & ad_ubar_obc, ad_vbar_obc, &
136# ifdef ADJUST_WSTRESS
137 & ad_ustr, ad_vstr, &
143 & ad_t, ad_u, ad_v, &
145 & ad_ubar, ad_vbar, &
152# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS || \
153 defined adjust_boundary
159 integer,
intent(in) :: ng, tile
160 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
161 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
162 integer,
intent(in) :: Linp, Lout
165# ifdef ADJUST_BOUNDARY
167 real(r8),
intent(in) :: tl_t_obc(LBij:,:,:,:,:,:)
168 real(r8),
intent(in) :: tl_u_obc(LBij:,:,:,:,:)
169 real(r8),
intent(in) :: tl_v_obc(LBij:,:,:,:,:)
171 real(r8),
intent(in) :: tl_ubar_obc(LBij:,:,:,:)
172 real(r8),
intent(in) :: tl_vbar_obc(LBij:,:,:,:)
173 real(r8),
intent(in) :: tl_zeta_obc(LBij:,:,:,:)
175# ifdef ADJUST_WSTRESS
176 real(r8),
intent(in) :: tl_ustr(LBi:,LBj:,:,:)
177 real(r8),
intent(in) :: tl_vstr(LBi:,LBj:,:,:)
181 real(r8),
intent(in) :: tl_tflux(LBi:,LBj:,:,:,:)
183 real(r8),
intent(in) :: tl_t(LBi:,LBj:,:,:,:)
184 real(r8),
intent(in) :: tl_u(LBi:,LBj:,:,:)
185 real(r8),
intent(in) :: tl_v(LBi:,LBj:,:,:)
187 real(r8),
intent(in) :: tl_ubar(LBi:,LBj:,:)
188 real(r8),
intent(in) :: tl_vbar(LBi:,LBj:,:)
190 real(r8),
intent(in) :: tl_zeta(LBi:,LBj:,:)
191# ifdef ADJUST_BOUNDARY
193 real(r8),
intent(inout) :: ad_t_obc(LBij:,:,:,:,:,:)
194 real(r8),
intent(inout) :: ad_u_obc(LBij:,:,:,:,:)
195 real(r8),
intent(inout) :: ad_v_obc(LBij:,:,:,:,:)
197 real(r8),
intent(inout) :: ad_ubar_obc(LBij:,:,:,:)
198 real(r8),
intent(inout) :: ad_vbar_obc(LBij:,:,:,:)
199 real(r8),
intent(inout) :: ad_zeta_obc(LBij:,:,:,:)
201# ifdef ADJUST_WSTRESS
202 real(r8),
intent(inout) :: ad_ustr(LBi:,LBj:,:,:)
203 real(r8),
intent(inout) :: ad_vstr(LBi:,LBj:,:,:)
207 real(r8),
intent(inout) :: ad_tflux(LBi:,LBj:,:,:,:)
209 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
210 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
211 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
213 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
214 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
216 real(r8),
intent(inout) :: ad_zeta(LBi:,LBj:,:)
218# ifdef ADJUST_WSTRESS
219 real(r8),
intent(in) :: tl_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
220 real(r8),
intent(in) :: tl_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
222# ifdef ADJUST_BOUNDARY
224 real(r8),
intent(in) :: tl_t_obc(LBij:UBij,N(ng),4, &
225 & Nbrec(ng),2,NT(ng))
226 real(r8),
intent(in) :: tl_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
227 real(r8),
intent(in) :: tl_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
229 real(r8),
intent(in) :: tl_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
230 real(r8),
intent(in) :: tl_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
231 real(r8),
intent(in) :: tl_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
235 real(r8),
intent(in) :: tl_tflux(LBi:UBi,LBj:UBj, &
236 & Nfrec(ng),2,NT(ng))
238 real(r8),
intent(in) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
239 real(r8),
intent(in) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
240 real(r8),
intent(in) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
242 real(r8),
intent(in) :: tl_ubar(LBi:UBi,LBj:UBj,:)
243 real(r8),
intent(in) :: tl_vbar(LBi:UBi,LBj:UBj,:)
245 real(r8),
intent(in) :: tl_zeta(LBi:UBi,LBj:UBj,:)
246# ifdef ADJUST_BOUNDARY
248 real(r8),
intent(inout) :: ad_t_obc(LBij:UBij,N(ng),4, &
249 & Nbrec(ng),2,NT(ng))
250 real(r8),
intent(inout) :: ad_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
251 real(r8),
intent(inout) :: ad_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
253 real(r8),
intent(inout) :: ad_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
254 real(r8),
intent(inout) :: ad_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
255 real(r8),
intent(inout) :: ad_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
257# ifdef ADJUST_WSTRESS
258 real(r8),
intent(inout) :: ad_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
259 real(r8),
intent(inout) :: ad_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
263 real(r8),
intent(inout) :: ad_tflux(LBi:UBi,LBj:UBj, &
264 & Nfrec(ng),2,NT(ng))
266 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
267 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
268 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
270 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
271 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
273 real(r8),
intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
278 integer :: i, ib, ir, j, k
283# include "set_bounds.h"
293 ad_zeta(i,j,lout)=-tl_zeta(i,j,linp)+ &
298# ifdef ADJUST_BOUNDARY
305 &
domain(ng)%Western_Edge(tile))
THEN
308 ad_zeta_obc(j,ib,ir,lout)=-tl_zeta_obc(j,ib,ir,linp)+ &
309 & ad_zeta_obc(j,ib,ir,lout )
313 &
domain(ng)%Eastern_Edge(tile))
THEN
316 ad_zeta_obc(j,ib,ir,lout)=-tl_zeta_obc(j,ib,ir,linp)+ &
317 & ad_zeta_obc(j,ib,ir,lout )
321 &
domain(ng)%Southern_Edge(tile))
THEN
324 ad_zeta_obc(i,ib,ir,lout)=-tl_zeta_obc(i,ib,ir,linp)+ &
325 & ad_zeta_obc(i,ib,ir,lout )
329 &
domain(ng)%Northern_Edge(tile))
THEN
332 ad_zeta_obc(i,ib,ir,lout)=-tl_zeta_obc(i,ib,ir,linp)+ &
333 & ad_zeta_obc(i,ib,ir,lout )
346 ad_ubar(i,j,lout)=-tl_ubar(i,j,linp)+ &
352# ifdef ADJUST_BOUNDARY
359 &
domain(ng)%Western_Edge(tile))
THEN
362 ad_ubar_obc(j,ib,ir,lout)=-tl_ubar_obc(j,ib,ir,linp)+ &
363 & ad_ubar_obc(j,ib,ir,lout )
367 &
domain(ng)%Eastern_Edge(tile))
THEN
370 ad_ubar_obc(j,ib,ir,lout)=-tl_ubar_obc(j,ib,ir,linp)+ &
371 & ad_ubar_obc(j,ib,ir,lout )
375 &
domain(ng)%Southern_Edge(tile))
THEN
378 ad_ubar_obc(i,ib,ir,lout)=-tl_ubar_obc(i,ib,ir,linp)+ &
379 & ad_ubar_obc(i,ib,ir,lout )
383 &
domain(ng)%Northern_Edge(tile))
THEN
386 ad_ubar_obc(i,ib,ir,lout)=-tl_ubar_obc(i,ib,ir,linp)+ &
387 & ad_ubar_obc(i,ib,ir,lout )
400 ad_vbar(i,j,lout)=-tl_vbar(i,j,linp)+ &
406# ifdef ADJUST_BOUNDARY
413 &
domain(ng)%Western_Edge(tile))
THEN
416 ad_vbar_obc(j,ib,ir,lout)=-tl_vbar_obc(j,ib,ir,linp)+ &
417 & ad_vbar_obc(j,ib,ir,lout )
421 &
domain(ng)%Eastern_Edge(tile))
THEN
424 ad_vbar_obc(j,ib,ir,lout)=-tl_vbar_obc(j,ib,ir,linp)+ &
425 & ad_vbar_obc(j,ib,ir,lout )
429 &
domain(ng)%Southern_Edge(tile))
THEN
432 ad_vbar_obc(i,ib,ir,lout)=-tl_vbar_obc(i,ib,ir,linp)+ &
433 & ad_vbar_obc(i,ib,ir,lout )
437 &
domain(ng)%Northern_Edge(tile))
THEN
440 ad_vbar_obc(i,ib,ir,lout)=-tl_vbar_obc(i,ib,ir,linp)+ &
441 & ad_vbar_obc(i,ib,ir,lout )
448# ifdef ADJUST_WSTRESS
455 ad_ustr(i,j,k,lout)=-tl_ustr(i,j,k,linp)+ &
456 & ad_ustr(i,j,k,lout )
461 ad_vstr(i,j,k,lout)=-tl_vstr(i,j,k,linp)+ &
462 & ad_vstr(i,j,k,lout )
475 ad_u(i,j,k,lout)=-tl_u(i,j,k,linp)+ &
481# ifdef ADJUST_BOUNDARY
488 &
domain(ng)%Western_Edge(tile))
THEN
492 ad_u_obc(j,k,ib,ir,lout)=-tl_u_obc(j,k,ib,ir,linp)+ &
493 & ad_u_obc(j,k,ib,ir,lout )
498 &
domain(ng)%Eastern_Edge(tile))
THEN
502 ad_u_obc(j,k,ib,ir,lout)=-tl_u_obc(j,k,ib,ir,linp)+ &
503 & ad_u_obc(j,k,ib,ir,lout )
508 &
domain(ng)%Southern_Edge(tile))
THEN
512 ad_u_obc(i,k,ib,ir,lout)=-tl_u_obc(i,k,ib,ir,linp)+ &
513 & ad_u_obc(i,k,ib,ir,lout )
518 &
domain(ng)%Northern_Edge(tile))
THEN
522 ad_u_obc(i,k,ib,ir,lout)=-tl_u_obc(i,k,ib,ir,linp)+ &
523 & ad_u_obc(i,k,ib,ir,lout )
536 ad_v(i,j,k,lout)=-tl_v(i,j,k,linp)+ &
542# ifdef ADJUST_BOUNDARY
549 &
domain(ng)%Western_Edge(tile))
THEN
553 ad_v_obc(j,k,ib,ir,lout)=-tl_v_obc(j,k,ib,ir,linp)+ &
554 & ad_v_obc(j,k,ib,ir,lout )
559 &
domain(ng)%Eastern_Edge(tile))
THEN
563 ad_v_obc(j,k,ib,ir,lout)=-tl_v_obc(j,k,ib,ir,linp)+ &
564 & ad_v_obc(j,k,ib,ir,lout )
569 &
domain(ng)%Southern_Edge(tile))
THEN
573 ad_v_obc(i,k,ib,ir,lout)=-tl_v_obc(i,k,ib,ir,linp)+ &
574 & ad_v_obc(i,k,ib,ir,lout )
579 &
domain(ng)%Northern_Edge(tile))
THEN
583 ad_v_obc(i,k,ib,ir,lout)=-tl_v_obc(i,k,ib,ir,linp)+ &
584 & ad_v_obc(i,k,ib,ir,lout )
598 ad_t(i,j,k,lout,itrc)=-tl_t(i,j,k,linp,itrc)+ &
599 & ad_t(i,j,k,lout ,itrc)
605# ifdef ADJUST_BOUNDARY
613 &
domain(ng)%Western_Edge(tile))
THEN
617 ad_t_obc(j,k,ib,ir,lout,itrc)= &
618 & -tl_t_obc(j,k,ib,ir,linp,itrc)+ &
619 & ad_t_obc(j,k,ib,ir,lout ,itrc)
624 &
domain(ng)%Eastern_Edge(tile))
THEN
628 ad_t_obc(j,k,ib,ir,lout,itrc)= &
629 & -tl_t_obc(j,k,ib,ir,linp,itrc)+ &
630 & ad_t_obc(j,k,ib,ir,lout ,itrc)
635 &
domain(ng)%Southern_Edge(tile))
THEN
639 ad_t_obc(i,k,ib,ir,lout,itrc)= &
640 & -tl_t_obc(i,k,ib,ir,linp,itrc)+ &
641 & ad_t_obc(i,k,ib,ir,lout ,itrc)
646 &
domain(ng)%Northern_Edge(tile))
THEN
650 ad_t_obc(i,k,ib,ir,lout,itrc)= &
651 & -tl_t_obc(i,k,ib,ir,linp,itrc)+ &
652 & ad_t_obc(i,k,ib,ir,lout ,itrc)
669 ad_tflux(i,j,k,lout,itrc)=-tl_tflux(i,j,k,linp,itrc)+ &
670 & ad_tflux(i,j,k,lout ,itrc)