123 & LBi, UBi, LBj, UBj, LBij, UBij, &
124 & IminS, ImaxS, JminS, JmaxS, &
125 & Linp1, Linp2, Lout, &
126# ifdef ADJUST_BOUNDARY
128 & tl_t_obc, tl_u_obc, tl_v_obc, &
130 & tl_ubar_obc, tl_vbar_obc, &
133# ifdef ADJUST_WSTRESS
134 & tl_ustr, tl_vstr, &
140 & tl_t, tl_u, tl_v, &
142 & tl_ubar, tl_vbar, &
145# ifdef ADJUST_BOUNDARY
147 & ad_t_obc, ad_u_obc, ad_v_obc, &
149 & ad_ubar_obc, ad_vbar_obc, &
152# ifdef ADJUST_WSTRESS
153 & ad_ustr, ad_vstr, &
159 & ad_t, ad_u, ad_v, &
161 & ad_ubar, ad_vbar, &
168# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS || \
169 defined adjust_boundary
175 integer,
intent(in) :: ng, tile
176 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
177 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
178 integer,
intent(in) :: Linp1, Linp2, Lout
181# ifdef ADJUST_BOUNDARY
183 real(r8),
intent(in) :: tl_t_obc(LBij:,:,:,:,:,:)
184 real(r8),
intent(in) :: tl_u_obc(LBij:,:,:,:,:)
185 real(r8),
intent(in) :: tl_v_obc(LBij:,:,:,:,:)
187 real(r8),
intent(in) :: tl_ubar_obc(LBij:,:,:,:)
188 real(r8),
intent(in) :: tl_vbar_obc(LBij:,:,:,:)
189 real(r8),
intent(in) :: tl_zeta_obc(LBij:,:,:,:)
191# ifdef ADJUST_WSTRESS
192 real(r8),
intent(in) :: tl_ustr(LBi:,LBj:,:,:)
193 real(r8),
intent(in) :: tl_vstr(LBi:,LBj:,:,:)
197 real(r8),
intent(in) :: tl_tflux(LBi:,LBj:,:,:,:)
199 real(r8),
intent(in) :: tl_t(LBi:,LBj:,:,:,:)
200 real(r8),
intent(in) :: tl_u(LBi:,LBj:,:,:)
201 real(r8),
intent(in) :: tl_v(LBi:,LBj:,:,:)
203 real(r8),
intent(in) :: tl_ubar(LBi:,LBj:,:)
204 real(r8),
intent(in) :: tl_vbar(LBi:,LBj:,:)
206 real(r8),
intent(in) :: tl_zeta(LBi:,LBj:,:)
207# ifdef ADJUST_BOUNDARY
209 real(r8),
intent(inout) :: ad_t_obc(LBij:,:,:,:,:,:)
210 real(r8),
intent(inout) :: ad_u_obc(LBij:,:,:,:,:)
211 real(r8),
intent(inout) :: ad_v_obc(LBij:,:,:,:,:)
213 real(r8),
intent(inout) :: ad_ubar_obc(LBij:,:,:,:)
214 real(r8),
intent(inout) :: ad_vbar_obc(LBij:,:,:,:)
215 real(r8),
intent(inout) :: ad_zeta_obc(LBij:,:,:,:)
217# ifdef ADJUST_WSTRESS
218 real(r8),
intent(inout) :: ad_ustr(LBi:,LBj:,:,:)
219 real(r8),
intent(inout) :: ad_vstr(LBi:,LBj:,:,:)
223 real(r8),
intent(inout) :: ad_tflux(LBi:,LBj:,:,:,:)
225 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
226 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
227 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
229 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
230 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
232 real(r8),
intent(inout) :: ad_zeta(LBi:,LBj:,:)
234# ifdef ADJUST_WSTRESS
235 real(r8),
intent(in) :: tl_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
236 real(r8),
intent(in) :: tl_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
238# ifdef ADJUST_BOUNDARY
240 real(r8),
intent(in) :: tl_t_obc(LBij:UBij,N(ng),4, &
241 & Nbrec(ng),2,NT(ng))
242 real(r8),
intent(in) :: tl_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
243 real(r8),
intent(in) :: tl_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
245 real(r8),
intent(in) :: tl_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
246 real(r8),
intent(in) :: tl_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
247 real(r8),
intent(in) :: tl_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
251 real(r8),
intent(in) :: tl_tflux(LBi:UBi,LBj:UBj, &
252 & Nfrec(ng),2,NT(ng))
254 real(r8),
intent(in) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
255 real(r8),
intent(in) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
256 real(r8),
intent(in) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
258 real(r8),
intent(in) :: tl_ubar(LBi:UBi,LBj:UBj,:)
259 real(r8),
intent(in) :: tl_vbar(LBi:UBi,LBj:UBj,:)
261 real(r8),
intent(in) :: tl_zeta(LBi:UBi,LBj:UBj,:)
262# ifdef ADJUST_BOUNDARY
264 real(r8),
intent(inout) :: ad_t_obc(LBij:UBij,N(ng),4, &
265 & Nbrec(ng),2,NT(ng))
266 real(r8),
intent(inout) :: ad_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
267 real(r8),
intent(inout) :: ad_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
269 real(r8),
intent(inout) :: ad_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
270 real(r8),
intent(inout) :: ad_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
271 real(r8),
intent(inout) :: ad_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
273# ifdef ADJUST_WSTRESS
274 real(r8),
intent(inout) :: ad_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
275 real(r8),
intent(inout) :: ad_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
279 real(r8),
intent(inout) :: ad_tflux(LBi:UBi,LBj:UBj, &
280 & Nfrec(ng),2,NT(ng))
282 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
283 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
284 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
286 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
287 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
289 real(r8),
intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
294 integer :: i, ib, ir, j, k
299# include "set_bounds.h"
311 ad_zeta(i,j,lout)=tl_zeta(i,j,linp1)+ &
312 & tl_zeta(i,j,linp2)+ &
317# ifdef ADJUST_BOUNDARY
324 &
domain(ng)%Western_Edge(tile))
THEN
327 ad_zeta_obc(j,ib,ir,lout)=tl_zeta_obc(j,ib,ir,linp1)+ &
328 & tl_zeta_obc(j,ib,ir,linp2)+ &
329 & ad_zeta_obc(j,ib,ir,lout )
333 &
domain(ng)%Eastern_Edge(tile))
THEN
336 ad_zeta_obc(j,ib,ir,lout)=tl_zeta_obc(j,ib,ir,linp1)+ &
337 & tl_zeta_obc(j,ib,ir,linp2)+ &
338 & ad_zeta_obc(j,ib,ir,lout )
342 &
domain(ng)%Southern_Edge(tile))
THEN
345 ad_zeta_obc(i,ib,ir,lout)=tl_zeta_obc(i,ib,ir,linp1)+ &
346 & tl_zeta_obc(i,ib,ir,linp2)+ &
347 & ad_zeta_obc(i,ib,ir,lout )
351 &
domain(ng)%Northern_Edge(tile))
THEN
354 ad_zeta_obc(i,ib,ir,lout)=tl_zeta_obc(i,ib,ir,linp1)+ &
355 & tl_zeta_obc(i,ib,ir,linp2)+ &
356 & ad_zeta_obc(i,ib,ir,lout )
369 ad_ubar(i,j,lout)=tl_ubar(i,j,linp1)+ &
370 & tl_ubar(i,j,linp2)+ &
376# ifdef ADJUST_BOUNDARY
383 &
domain(ng)%Western_Edge(tile))
THEN
386 ad_ubar_obc(j,ib,ir,lout)=tl_ubar_obc(j,ib,ir,linp1)+ &
387 & tl_ubar_obc(j,ib,ir,linp2)+ &
388 & ad_ubar_obc(j,ib,ir,lout )
392 &
domain(ng)%Eastern_Edge(tile))
THEN
395 ad_ubar_obc(j,ib,ir,lout)=tl_ubar_obc(j,ib,ir,linp1)+ &
396 & tl_ubar_obc(j,ib,ir,linp2)+ &
397 & ad_ubar_obc(j,ib,ir,lout )
401 &
domain(ng)%Southern_Edge(tile))
THEN
404 ad_ubar_obc(i,ib,ir,lout)=tl_ubar_obc(i,ib,ir,linp1)+ &
405 & tl_ubar_obc(i,ib,ir,linp2)+ &
406 & ad_ubar_obc(i,ib,ir,lout )
410 &
domain(ng)%Northern_Edge(tile))
THEN
413 ad_ubar_obc(i,ib,ir,lout)=tl_ubar_obc(i,ib,ir,linp1)+ &
414 & tl_ubar_obc(i,ib,ir,linp2)+ &
415 & ad_ubar_obc(i,ib,ir,lout )
428 ad_vbar(i,j,lout)=tl_vbar(i,j,linp1)+ &
429 & tl_vbar(i,j,linp2)+ &
435# ifdef ADJUST_BOUNDARY
442 &
domain(ng)%Western_Edge(tile))
THEN
445 ad_vbar_obc(j,ib,ir,lout)=tl_vbar_obc(j,ib,ir,linp1)+ &
446 & tl_vbar_obc(j,ib,ir,linp2)+ &
447 & ad_vbar_obc(j,ib,ir,lout )
451 &
domain(ng)%Eastern_Edge(tile))
THEN
454 ad_vbar_obc(j,ib,ir,lout)=tl_vbar_obc(j,ib,ir,linp1)+ &
455 & tl_vbar_obc(j,ib,ir,linp2)+ &
456 & ad_vbar_obc(j,ib,ir,lout )
460 &
domain(ng)%Southern_Edge(tile))
THEN
463 ad_vbar_obc(i,ib,ir,lout)=tl_vbar_obc(i,ib,ir,linp1)+ &
464 & tl_vbar_obc(i,ib,ir,linp2)+ &
465 & ad_vbar_obc(i,ib,ir,lout )
469 &
domain(ng)%Northern_Edge(tile))
THEN
472 ad_vbar_obc(i,ib,ir,lout)=tl_vbar_obc(i,ib,ir,linp1)+ &
473 & tl_vbar_obc(i,ib,ir,linp2)+ &
474 & ad_vbar_obc(i,ib,ir,lout )
481# ifdef ADJUST_WSTRESS
488 ad_ustr(i,j,k,lout)=tl_ustr(i,j,k,linp1)+ &
489 & tl_ustr(i,j,k,linp2)+ &
490 & ad_ustr(i,j,k,lout )
495 ad_vstr(i,j,k,lout)=tl_vstr(i,j,k,linp1)+ &
496 & tl_vstr(i,j,k,linp2)+ &
497 & ad_vstr(i,j,k,lout )
510 ad_u(i,j,k,lout)=tl_u(i,j,k,linp1)+ &
511 & tl_u(i,j,k,linp2)+ &
517# ifdef ADJUST_BOUNDARY
524 &
domain(ng)%Western_Edge(tile))
THEN
528 ad_u_obc(j,k,ib,ir,lout)=tl_u_obc(j,k,ib,ir,linp1)+ &
529 & tl_u_obc(j,k,ib,ir,linp2)+ &
530 & ad_u_obc(j,k,ib,ir,lout )
535 &
domain(ng)%Eastern_Edge(tile))
THEN
539 ad_u_obc(j,k,ib,ir,lout)=tl_u_obc(j,k,ib,ir,linp1)+ &
540 & tl_u_obc(j,k,ib,ir,linp2)+ &
541 & ad_u_obc(j,k,ib,ir,lout )
546 &
domain(ng)%Southern_Edge(tile))
THEN
550 ad_u_obc(i,k,ib,ir,lout)=tl_u_obc(i,k,ib,ir,linp1)+ &
551 & tl_u_obc(i,k,ib,ir,linp2)+ &
552 & ad_u_obc(i,k,ib,ir,lout )
557 &
domain(ng)%Northern_Edge(tile))
THEN
561 ad_u_obc(i,k,ib,ir,lout)=tl_u_obc(i,k,ib,ir,linp1)+ &
562 & tl_u_obc(i,k,ib,ir,linp2)+ &
563 & ad_u_obc(i,k,ib,ir,lout )
576 ad_v(i,j,k,lout)=tl_v(i,j,k,linp1)+ &
577 & tl_v(i,j,k,linp2)+ &
583# ifdef ADJUST_BOUNDARY
590 &
domain(ng)%Western_Edge(tile))
THEN
594 ad_v_obc(j,k,ib,ir,lout)=tl_v_obc(j,k,ib,ir,linp1)+ &
595 & tl_v_obc(j,k,ib,ir,linp2)+ &
596 & ad_v_obc(j,k,ib,ir,lout )
601 &
domain(ng)%Eastern_Edge(tile))
THEN
605 ad_v_obc(j,k,ib,ir,lout)=tl_v_obc(j,k,ib,ir,linp1)+ &
606 & tl_v_obc(j,k,ib,ir,linp2)+ &
607 & ad_v_obc(j,k,ib,ir,lout )
612 &
domain(ng)%Southern_Edge(tile))
THEN
616 ad_v_obc(i,k,ib,ir,lout)=tl_v_obc(i,k,ib,ir,linp1)+ &
617 & tl_v_obc(i,k,ib,ir,linp2)+ &
618 & ad_v_obc(i,k,ib,ir,lout )
623 &
domain(ng)%Northern_Edge(tile))
THEN
627 ad_v_obc(i,k,ib,ir,lout)=tl_v_obc(i,k,ib,ir,linp1)+ &
628 & tl_v_obc(i,k,ib,ir,linp2)+ &
629 & ad_v_obc(i,k,ib,ir,lout )
643 ad_t(i,j,k,lout,itrc)=tl_t(i,j,k,linp1,itrc)+ &
644 & tl_t(i,j,k,linp2,itrc)+ &
645 & ad_t(i,j,k,lout ,itrc)
651# ifdef ADJUST_BOUNDARY
659 &
domain(ng)%Western_Edge(tile))
THEN
663 ad_t_obc(j,k,ib,ir,lout,itrc)= &
664 & tl_t_obc(j,k,ib,ir,linp1,itrc)+ &
665 & tl_t_obc(j,k,ib,ir,linp2,itrc)+ &
666 & ad_t_obc(j,k,ib,ir,lout ,itrc)
671 &
domain(ng)%Eastern_Edge(tile))
THEN
675 ad_t_obc(j,k,ib,ir,lout,itrc)= &
676 & tl_t_obc(j,k,ib,ir,linp1,itrc)+ &
677 & tl_t_obc(j,k,ib,ir,linp2,itrc)+ &
678 & ad_t_obc(j,k,ib,ir,lout ,itrc)
683 &
domain(ng)%Southern_Edge(tile))
THEN
687 ad_t_obc(i,k,ib,ir,lout,itrc)= &
688 & tl_t_obc(i,k,ib,ir,linp1,itrc)+ &
689 & tl_t_obc(i,k,ib,ir,linp2,itrc)+ &
690 & ad_t_obc(i,k,ib,ir,lout ,itrc)
695 &
domain(ng)%Northern_Edge(tile))
THEN
699 ad_t_obc(i,k,ib,ir,lout,itrc)= &
700 & tl_t_obc(i,k,ib,ir,linp1,itrc)+ &
701 & tl_t_obc(i,k,ib,ir,linp2,itrc)+ &
702 & ad_t_obc(i,k,ib,ir,lout ,itrc)
719 ad_tflux(i,j,k,lout,itrc)=tl_tflux(i,j,k,linp1,itrc)+ &
720 & tl_tflux(i,j,k,linp2,itrc)+ &
721 & ad_tflux(i,j,k,lout ,itrc)