126 & LBi, UBi, LBj, UBj, LBij, UBij, &
127 & IminS, ImaxS, JminS, JmaxS, &
128 & outLoop, LTLM, LADJ, &
130 & rmask, umask, vmask, &
132# ifdef ADJUST_BOUNDARY
134 & tl_t_obc, tl_u_obc, tl_v_obc, &
136 & tl_ubar_obc, tl_vbar_obc, &
139# ifdef ADJUST_WSTRESS
140 & tl_ustr, tl_vstr, &
146 & tl_t, tl_u, tl_v, &
148 & tl_ubar, tl_vbar, &
151# ifdef ADJUST_BOUNDARY
153 & ad_t_obc, ad_u_obc, ad_v_obc, &
155 & ad_ubar_obc, ad_vbar_obc, &
158# ifdef ADJUST_WSTRESS
159 & ad_ustr, ad_vstr, &
165 & ad_t, ad_u, ad_v, &
167 & ad_ubar, ad_vbar, &
174 integer,
intent(in) :: ng, tile, model
175 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
176 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
177 integer,
intent(in) :: LTLM, LADJ, outLoop
181 real(r8),
intent(in) :: rmask(LBi:,LBj:)
182 real(r8),
intent(in) :: umask(LBi:,LBj:)
183 real(r8),
intent(in) :: vmask(LBi:,LBj:)
185# ifdef ADJUST_BOUNDARY
187 real(r8),
intent(inout) :: tl_t_obc(LBij:,:,:,:,:,:)
188 real(r8),
intent(inout) :: tl_u_obc(LBij:,:,:,:,:)
189 real(r8),
intent(inout) :: tl_v_obc(LBij:,:,:,:,:)
190 real(r8),
intent(inout) :: ad_t_obc(LBij:,:,:,:,:,:)
191 real(r8),
intent(inout) :: ad_u_obc(LBij:,:,:,:,:)
192 real(r8),
intent(inout) :: ad_v_obc(LBij:,:,:,:,:)
194 real(r8),
intent(inout) :: tl_ubar_obc(LBij:,:,:,:)
195 real(r8),
intent(inout) :: tl_vbar_obc(LBij:,:,:,:)
196 real(r8),
intent(inout) :: tl_zeta_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) :: tl_ustr(LBi:,LBj:,:,:)
203 real(r8),
intent(inout) :: tl_vstr(LBi:,LBj:,:,:)
204 real(r8),
intent(inout) :: ad_ustr(LBi:,LBj:,:,:)
205 real(r8),
intent(inout) :: ad_vstr(LBi:,LBj:,:,:)
209 real(r8),
intent(inout) :: tl_tflux(LBi:,LBj:,:,:,:)
210 real(r8),
intent(inout) :: ad_tflux(LBi:,LBj:,:,:,:)
212 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
213 real(r8),
intent(inout) :: tl_u(LBi:,LBj:,:,:)
214 real(r8),
intent(inout) :: tl_v(LBi:,LBj:,:,:)
215 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
216 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
217 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
219 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
220 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
221 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
222 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
224 real(r8),
intent(inout) :: tl_zeta(LBi:,LBj:,:)
225 real(r8),
intent(inout) :: ad_zeta(LBi:,LBj:,:)
228 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
229 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
230 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
232# ifdef ADJUST_BOUNDARY
234 real(r8),
intent(inout) :: tl_t_obc(LBij:UBij,N(ng),4, &
235 & Nbrec(ng),2,NT(ng))
236 real(r8),
intent(inout) :: tl_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
237 real(r8),
intent(inout) :: tl_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
238 real(r8),
intent(inout) :: ad_t_obc(LBij:UBij,N(ng),4, &
239 & Nbrec(ng),2,NT(ng))
240 real(r8),
intent(inout) :: ad_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
241 real(r8),
intent(inout) :: ad_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
243 real(r8),
intent(inout) :: tl_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
244 real(r8),
intent(inout) :: tl_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
245 real(r8),
intent(inout) :: tl_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
246 real(r8),
intent(inout) :: ad_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
247 real(r8),
intent(inout) :: ad_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
248 real(r8),
intent(inout) :: ad_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
250# ifdef ADJUST_WSTRESS
251 real(r8),
intent(inout) :: tl_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
252 real(r8),
intent(inout) :: tl_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
253 real(r8),
intent(inout) :: ad_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
254 real(r8),
intent(inout) :: ad_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
258 real(r8),
intent(inout) :: tl_tflux(LBi:UBi,LBj:UBj, &
259 & Nfrec(ng),2,NT(ng))
260 real(r8),
intent(inout) :: ad_tflux(LBi:UBi,LBj:UBj, &
261 & Nfrec(ng),2,NT(ng))
263 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
264 real(r8),
intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
265 real(r8),
intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
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) :: tl_ubar(LBi:UBi,LBj:UBj,:)
271 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
272 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
273 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
275 real(r8),
intent(inout) :: tl_zeta(LBi:UBi,LBj:UBj,:)
276 real(r8),
intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
281 real(r8),
dimension(0:NstateVar(ng)) :: dot
283 character (len=*),
parameter :: MyFile = &
284 & __FILE__//
", comp_Jb0_tile"
286# include "set_bounds.h"
292 & lbi, ubi, lbj, ubj, lbij, ubij, &
295 & rmask, umask, vmask, &
297# ifdef ADJUST_BOUNDARY
299 & ad_t_obc(:,:,:,:,ladj,:), &
300 & tl_t_obc(:,:,:,:,ltlm,:), &
301 & ad_u_obc(:,:,:,:,ladj), &
302 & tl_u_obc(:,:,:,:,ltlm), &
303 & ad_v_obc(:,:,:,:,ladj), &
304 & tl_v_obc(:,:,:,:,ltlm), &
306 & ad_ubar_obc(:,:,:,ladj), &
307 & tl_ubar_obc(:,:,:,ltlm), &
308 & ad_vbar_obc(:,:,:,ladj), &
309 & tl_vbar_obc(:,:,:,ltlm), &
310 & ad_zeta_obc(:,:,:,ladj), &
311 & tl_zeta_obc(:,:,:,ltlm), &
313# ifdef ADJUST_WSTRESS
314 & ad_ustr(:,:,:,ladj), tl_ustr(:,:,:,ltlm), &
315 & ad_vstr(:,:,:,ladj), tl_vstr(:,:,:,ltlm), &
319 & ad_tflux(:,:,:,ladj,:), &
320 & tl_tflux(:,:,:,ltlm,:), &
322 & ad_t(:,:,:,ladj,:), tl_t(:,:,:,ltlm,:), &
323 & ad_u(:,:,:,ladj), tl_u(:,:,:,ltlm), &
324 & ad_v(:,:,:,ladj), tl_v(:,:,:,ltlm), &
326 & ad_ubar(:,:,ladj), tl_ubar(:,:,ltlm), &
327 & ad_vbar(:,:,ladj), tl_vbar(:,:,ltlm), &
329 & ad_zeta(:,:,ladj), tl_zeta(:,:,ltlm))
333 jb0(outloop)=
jb0(outloop)+dot(0)
338 SELECT CASE (
dav(ng)%IOtype)
343 & ncid =
dav(ng)%ncid)
344# if defined PIO_LIB && defined DISTRIBUTE
349 & piofile =
dav(ng)%pioFile)
415 & LBi, UBi, LBj, UBj, LBij, UBij, &
416 & IminS, ImaxS, JminS, JmaxS, &
418# ifdef ADJUST_BOUNDARY
420 & tl_t_obc, tl_u_obc, tl_v_obc, &
422 & tl_ubar_obc, tl_vbar_obc, &
425# ifdef ADJUST_WSTRESS
426 & tl_ustr, tl_vstr, &
432 & tl_t, tl_u, tl_v, &
434 & tl_ubar, tl_vbar, &
441 integer,
intent(in) :: ng, tile
442 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
443 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
444 integer,
intent(in) :: Linp, Lout
447# ifdef ADJUST_BOUNDARY
449 real(r8),
intent(inout) :: tl_t_obc(LBij:,:,:,:,:,:)
450 real(r8),
intent(inout) :: tl_u_obc(LBij:,:,:,:,:)
451 real(r8),
intent(inout) :: tl_v_obc(LBij:,:,:,:,:)
453 real(r8),
intent(inout) :: tl_ubar_obc(LBij:,:,:,:)
454 real(r8),
intent(inout) :: tl_vbar_obc(LBij:,:,:,:)
455 real(r8),
intent(inout) :: tl_zeta_obc(LBij:,:,:,:)
457# ifdef ADJUST_WSTRESS
458 real(r8),
intent(inout) :: tl_ustr(LBi:,LBj:,:,:)
459 real(r8),
intent(inout) :: tl_vstr(LBi:,LBj:,:,:)
463 real(r8),
intent(inout) :: tl_tflux(LBi:,LBj:,:,:,:)
465 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
466 real(r8),
intent(inout) :: tl_u(LBi:,LBj:,:,:)
467 real(r8),
intent(inout) :: tl_v(LBi:,LBj:,:,:)
469 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
470 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
472 real(r8),
intent(inout) :: tl_zeta(LBi:,LBj:,:)
474# ifdef ADJUST_BOUNDARY
476 real(r8),
intent(inout) :: tl_t_obc(LBij:UBij,N(ng),4, &
477 & Nbrec(ng),2,NT(ng))
478 real(r8),
intent(inout) :: tl_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
479 real(r8),
intent(inout) :: tl_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
481 real(r8),
intent(inout) :: tl_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
482 real(r8),
intent(inout) :: tl_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
483 real(r8),
intent(inout) :: tl_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
485# ifdef ADJUST_WSTRESS
486 real(r8),
intent(inout) :: tl_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
487 real(r8),
intent(inout) :: tl_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
491 real(r8),
intent(inout) :: tl_tflux(LBi:UBi,LBj:UBj, &
492 & Nfrec(ng),2,NT(ng))
494 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
495 real(r8),
intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
496 real(r8),
intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
498 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
499 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
501 real(r8),
intent(inout) :: tl_zeta(LBi:UBi,LBj:UBj,:)
506 integer :: i, ib, ir, j, k
512# include "set_bounds.h"
518 fact=-fourdvar(ng)%cg_pxsave(ndatum(ng)+1)
524 tl_zeta(i,j,lout)=fact*tl_zeta(i,j,linp)
528# ifdef ADJUST_BOUNDARY
535 & domain(ng)%Western_Edge(tile))
THEN
538 tl_zeta_obc(j,ib,ir,lout)=fact*tl_zeta_obc(j,ib,ir,linp)
542 & domain(ng)%Eastern_Edge(tile))
THEN
545 tl_zeta_obc(j,ib,ir,lout)=fact*tl_zeta_obc(j,ib,ir,linp)
549 & domain(ng)%Southern_Edge(tile))
THEN
552 tl_zeta_obc(i,ib,ir,lout)=fact*tl_zeta_obc(i,ib,ir,linp)
556 & domain(ng)%Northern_Edge(tile))
THEN
559 tl_zeta_obc(i,ib,ir,lout)=fact*tl_zeta_obc(i,ib,ir,linp)
572 tl_ubar(i,j,lout)=fact*tl_ubar(i,j,linp)
577# ifdef ADJUST_BOUNDARY
584 & domain(ng)%Western_Edge(tile))
THEN
587 tl_ubar_obc(j,ib,ir,lout)=fact*tl_ubar_obc(j,ib,ir,linp)
591 & domain(ng)%Eastern_Edge(tile))
THEN
594 tl_ubar_obc(j,ib,ir,lout)=fact*tl_ubar_obc(j,ib,ir,linp)
598 & domain(ng)%Southern_Edge(tile))
THEN
601 tl_ubar_obc(i,ib,ir,lout)=fact*tl_ubar_obc(i,ib,ir,linp)
605 & domain(ng)%Northern_Edge(tile))
THEN
608 tl_ubar_obc(i,ib,ir,lout)=fact*tl_ubar_obc(i,ib,ir,linp)
621 tl_vbar(i,j,lout)=fact*tl_vbar(i,j,linp)
626# ifdef ADJUST_BOUNDARY
633 & domain(ng)%Western_Edge(tile))
THEN
636 tl_vbar_obc(j,ib,ir,lout)=fact*tl_vbar_obc(j,ib,ir,linp)
640 & domain(ng)%Eastern_Edge(tile))
THEN
643 tl_vbar_obc(j,ib,ir,lout)=fact*tl_vbar_obc(j,ib,ir,linp)
647 & domain(ng)%Southern_Edge(tile))
THEN
650 tl_vbar_obc(i,ib,ir,lout)=fact*tl_vbar_obc(i,ib,ir,linp)
654 & domain(ng)%Northern_Edge(tile))
THEN
657 tl_vbar_obc(i,ib,ir,lout)=fact*tl_vbar_obc(i,ib,ir,linp)
664# ifdef ADJUST_WSTRESS
671 tl_ustr(i,j,k,lout)=fact*tl_ustr(i,j,k,linp)
676 tl_vstr(i,j,k,lout)=fact*tl_vstr(i,j,k,linp)
689 tl_u(i,j,k,lout)=fact*tl_u(i,j,k,linp)
694# ifdef ADJUST_BOUNDARY
701 & domain(ng)%Western_Edge(tile))
THEN
705 tl_u_obc(j,k,ib,ir,lout)=fact*tl_u_obc(j,k,ib,ir,linp)
710 & domain(ng)%Eastern_Edge(tile))
THEN
714 tl_u_obc(j,k,ib,ir,lout)=fact*tl_u_obc(j,k,ib,ir,linp)
719 & domain(ng)%Southern_Edge(tile))
THEN
723 tl_u_obc(i,k,ib,ir,lout)=fact*tl_u_obc(i,k,ib,ir,linp)
728 & domain(ng)%Northern_Edge(tile))
THEN
732 tl_u_obc(i,k,ib,ir,lout)=fact*tl_u_obc(i,k,ib,ir,linp)
745 tl_v(i,j,k,lout)=fact*tl_v(i,j,k,linp)
750# ifdef ADJUST_BOUNDARY
757 & domain(ng)%Western_Edge(tile))
THEN
761 tl_v_obc(j,k,ib,ir,lout)=fact*tl_v_obc(j,k,ib,ir,linp)
766 & domain(ng)%Eastern_Edge(tile))
THEN
770 tl_v_obc(j,k,ib,ir,lout)=fact*tl_v_obc(j,k,ib,ir,linp)
775 & domain(ng)%Southern_Edge(tile))
THEN
779 tl_v_obc(i,k,ib,ir,lout)=fact*tl_v_obc(i,k,ib,ir,linp)
784 & domain(ng)%Northern_Edge(tile))
THEN
788 tl_v_obc(i,k,ib,ir,lout)=fact*tl_v_obc(i,k,ib,ir,linp)
802 tl_t(i,j,k,lout,itrc)=fact*tl_t(i,j,k,linp,itrc)
808# ifdef ADJUST_BOUNDARY
816 & domain(ng)%Western_Edge(tile))
THEN
820 tl_t_obc(j,k,ib,ir,lout,itrc)= &
821 & fact*tl_t_obc(j,k,ib,ir,linp,itrc)
826 & domain(ng)%Eastern_Edge(tile))
THEN
830 tl_t_obc(j,k,ib,ir,lout,itrc)= &
831 & fact*tl_t_obc(j,k,ib,ir,linp,itrc)
836 & domain(ng)%Southern_Edge(tile))
THEN
840 tl_t_obc(i,k,ib,ir,lout,itrc)= &
841 & fact*tl_t_obc(i,k,ib,ir,linp,itrc)
846 & domain(ng)%Northern_Edge(tile))
THEN
850 tl_t_obc(i,k,ib,ir,lout,itrc)= &
851 & fact*tl_t_obc(i,k,ib,ir,linp,itrc)
868 tl_tflux(i,j,k,lout,itrc)=fact*tl_tflux(i,j,k,linp,itrc)