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)