New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 9806 for NEMO/trunk – NEMO

Changeset 9806 for NEMO/trunk


Ignore:
Timestamp:
2018-06-15T17:57:53+02:00 (6 years ago)
Author:
jchanut
Message:

Differentiates x and y refinement in tracer bc ; correct sponge #2102 ; Passes x and y symmetry tests

Location:
NEMO/trunk/src/NST
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/NST/agrif_oce_interp.F90

    r9759 r9806  
    9494      ! 
    9595      ! prevent smoothing in ghost cells 
    96       i1 =  1   ;   i2 = jpi 
    97       j1 =  1   ;   j2 = jpj 
     96      i1 =  1   ;   i2 = nlci 
     97      j1 =  1   ;   j2 = nlcj 
    9898      IF( nbondj == -1 .OR. nbondj == 2 )   j1 = 2 + nbghostcells 
    9999      IF( nbondj == +1 .OR. nbondj == 2 )   j2 = nlcj - nbghostcells - 1 
     
    645645      INTEGER  ::   ji, jj, jk, jn, iref, jref, ibdy, jbdy   ! dummy loop indices 
    646646      INTEGER  ::   imin, imax, jmin, jmax, N_in, N_out 
    647       REAL(wp) ::   zrhox, z1, z2, z3, z4, z5, z6, z7 
     647      REAL(wp) ::   zrho, z1, z2, z3, z4, z5, z6, z7 
    648648      LOGICAL :: western_side, eastern_side,northern_side,southern_side 
    649649      ! vertical interpolation: 
     
    718718         IF ( .NOT.lk_agrif_clp ) THEN  
    719719            ! 
    720             zrhox = Agrif_Rhox() 
    721             z1 = ( zrhox - 1. ) * 0.5 
    722             z3 = ( zrhox - 1. ) / ( zrhox + 1. ) 
    723             z6 = 2. * ( zrhox - 1. ) / ( zrhox + 1. ) 
    724             z7 =    - ( zrhox - 1. ) / ( zrhox + 3. ) 
    725             ! 
    726             z2 = 1. - z1 
    727             z4 = 1. - z3 
    728             z5 = 1. - z6 - z7 
    729             ! 
    730720            imin = i1 ; imax = i2 
    731721            jmin = j1 ; jmax = j2 
     
    734724            IF((nbondj == -1).OR.(nbondj == 2)) jmin = 2 + nbghostcells 
    735725            IF((nbondj == +1).OR.(nbondj == 2)) jmax = nlcj - nbghostcells - 1 
    736             IF((nbondi == -1).OR.(nbondi == 2)) imin = 1 + nbghostcells 
     726            IF((nbondi == -1).OR.(nbondi == 2)) imin = 2 + nbghostcells 
    737727            IF((nbondi == +1).OR.(nbondi == 2)) imax = nlci - nbghostcells - 1       
    738728            ! 
    739729            IF( eastern_side ) THEN 
     730               zrho = Agrif_Rhox() 
     731               z1 = ( zrho - 1._wp ) * 0.5_wp                     
     732               z3 = ( zrho - 1._wp ) / ( zrho + 1._wp )          
     733               z6 = 2._wp * ( zrho - 1._wp ) / ( zrho + 1._wp ) 
     734               z7 =       - ( zrho - 1._wp ) / ( zrho + 3._wp ) 
     735               z2 = 1._wp - z1 ; z4 = 1._wp - z3 ; z5 = 1._wp - z6 - z7 
     736               ! 
    740737               ibdy = nlci-nbghostcells 
    741738               DO jn = 1, jpts 
    742                   tsa(ibdy+1,jmin:jmax,k1:k2,jn) = z1 * ptab_child(ibdy+1,jmin:jmax,k1:k2,jn) + z2 * ptab_child(ibdy,jmin:jmax,k1:k2,jn) 
     739                  tsa(ibdy+1,jmin:jmax,1:jpkm1,jn) = z1 * ptab_child(ibdy+1,jmin:jmax,1:jpkm1,jn) + z2 * ptab_child(ibdy,jmin:jmax,1:jpkm1,jn) 
    743740                  DO jk = 1, jpkm1 
    744741                     DO jj = jmin,jmax 
     
    755752                  END DO 
    756753                  ! Restore ghost points: 
    757                   tsa(ibdy+1,jmin:jmax,k1:k2,jn) = ptab_child(ibdy+1,jmin:jmax,k1:k2,jn) * tmask(ibdy+1,jmin:jmax,k1:k2) 
     754                  tsa(ibdy+1,jmin:jmax,1:jpkm1,jn) = ptab_child(ibdy+1,jmin:jmax,1:jpkm1,jn) * tmask(ibdy+1,jmin:jmax,1:jpkm1) 
    758755               END DO 
    759756            ENDIF 
    760757            !  
    761758            IF( northern_side ) THEN 
     759               zrho = Agrif_Rhoy() 
     760               z1 = ( zrho - 1._wp ) * 0.5_wp                     
     761               z3 = ( zrho - 1._wp ) / ( zrho + 1._wp )          
     762               z6 = 2._wp * ( zrho - 1._wp ) / ( zrho + 1._wp ) 
     763               z7 =       - ( zrho - 1._wp ) / ( zrho + 3._wp ) 
     764               z2 = 1._wp - z1 ; z4 = 1._wp - z3 ; z5 = 1._wp - z6 - z7 
     765               ! 
    762766               jbdy = nlcj-nbghostcells          
    763767               DO jn = 1, jpts 
    764                   tsa(imin:imax,jbdy+1,k1:k2,jn) = z1 * ptab_child(imin:imax,jbdy+1,k1:k2,jn) + z2 * ptab_child(imin:imax,jbdy,k1:k2,jn) 
     768                  tsa(imin:imax,jbdy+1,1:jpkm1,jn) = z1 * ptab_child(imin:imax,jbdy+1,1:jpkm1,jn) + z2 * ptab_child(imin:imax,jbdy,1:jpkm1,jn) 
    765769                  DO jk = 1, jpkm1 
    766770                     DO ji = imin,imax 
     
    777781                  END DO 
    778782                  ! Restore ghost points: 
    779                   tsa(imin:imax,jbdy+1,k1:k2,jn) = ptab_child(imin:imax,jbdy+1,k1:k2,jn) * tmask(imin:imax,jbdy+1,k1:k2) 
     783                  tsa(imin:imax,jbdy+1,1:jpkm1,jn) = ptab_child(imin:imax,jbdy+1,1:jpkm1,jn) * tmask(imin:imax,jbdy+1,1:jpkm1) 
    780784               END DO 
    781785            ENDIF 
    782786            ! 
    783             IF( western_side ) THEN     
     787            IF( western_side ) THEN 
     788               zrho = Agrif_Rhox() 
     789               z1 = ( zrho - 1._wp ) * 0.5_wp                     
     790               z3 = ( zrho - 1._wp ) / ( zrho + 1._wp )          
     791               z6 = 2._wp * ( zrho - 1._wp ) / ( zrho + 1._wp ) 
     792               z7 =       - ( zrho - 1._wp ) / ( zrho + 3._wp ) 
     793               z2 = 1._wp - z1 ; z4 = 1._wp - z3 ; z5 = 1._wp - z6 - z7 
     794               !     
    784795               ibdy = 1+nbghostcells        
    785796               DO jn = 1, jpts 
    786                   tsa(ibdy-1,jmin:jmax,k1:k2,jn) = z1 * ptab_child(ibdy-1,jmin:jmax,k1:k2,jn) + z2 * ptab_child(ibdy,jmin:jmax,k1:k2,jn) 
     797                  tsa(ibdy-1,jmin:jmax,1:jpkm1,jn) = z1 * ptab_child(ibdy-1,jmin:jmax,1:jpkm1,jn) + z2 * ptab_child(ibdy,jmin:jmax,1:jpkm1,jn) 
    787798                  DO jk = 1, jpkm1 
    788799                     DO jj = jmin,jmax 
     
    792803                           tsa(ibdy,jj,jk,jn)=(z4*tsa(ibdy-1,jj,jk,jn)+z3*tsa(ibdy+1,jj,jk,jn))*tmask(ibdy,jj,jk)         
    793804                           IF( un(ibdy,jj,jk) < 0._wp ) THEN 
    794                               tsa(ibdy,jj,jk,jn)=(z6*tsa(ibdy+1,jj,jk,jn)+z5*tsa(ibdy-1,jj,jk,jn)+z7*tsa(ibdy+2,jj,jk,jn))*tmask(ibdy,jj,jk) 
     805                              tsa(ibdy,jj,jk,jn)=( z6*tsa(ibdy+1,jj,jk,jn)+z5*tsa(ibdy-1,jj,jk,jn) & 
     806                                                 + z7*tsa(ibdy+2,jj,jk,jn) ) * tmask(ibdy,jj,jk) 
    795807                           ENDIF 
    796808                        ENDIF 
     
    798810                  END DO 
    799811                  ! Restore ghost points: 
    800                   tsa(ibdy-1,jmin:jmax,k1:k2,jn) = ptab_child(ibdy-1,jmin:jmax,k1:k2,jn) * tmask(ibdy-1,jmin:jmax,k1:k2) 
     812                  tsa(ibdy-1,jmin:jmax,1:jpkm1,jn) = ptab_child(ibdy-1,jmin:jmax,1:jpkm1,jn) * tmask(ibdy-1,jmin:jmax,1:jpkm1) 
    801813               END DO 
    802814            ENDIF 
    803815            ! 
    804             IF( southern_side ) THEN   
     816            IF( southern_side ) THEN 
     817               zrho = Agrif_Rhoy() 
     818               z1 = ( zrho - 1._wp ) * 0.5_wp                     
     819               z3 = ( zrho - 1._wp ) / ( zrho + 1._wp )          
     820               z6 = 2._wp * ( zrho - 1._wp ) / ( zrho + 1._wp ) 
     821               z7 =       - ( zrho - 1._wp ) / ( zrho + 3._wp ) 
     822               z2 = 1._wp - z1 ; z4 = 1._wp - z3 ; z5 = 1._wp - z6 - z7 
     823               !   
    805824               jbdy=1+nbghostcells         
    806825               DO jn = 1, jpts 
    807                   tsa(imin:imax,jbdy-1,k1:k2,jn) = z1 * ptab_child(imin:imax,jbdy-1,k1:k2,jn) + z2 * ptab_child(imin:imax,jbdy,k1:k2,jn) 
    808                   DO jk = 1, jpk       
    809                      DO ji=imin,imax 
     826                  tsa(imin:imax,jbdy-1,1:jpkm1,jn) = z1 * ptab_child(imin:imax,jbdy-1,1:jpkm1,jn) + z2 * ptab_child(imin:imax,jbdy,1:jpkm1,jn) 
     827                  DO jk = 1, jpkm1       
     828                     DO ji = imin,imax 
    810829                        IF( vmask(ji,jbdy,jk) == 0._wp ) THEN 
    811830                           tsa(ji,jbdy,jk,jn)=tsa(ji,jbdy-1,jk,jn) * tmask(ji,jbdy,jk) 
     
    813832                           tsa(ji,jbdy,jk,jn)=(z4*tsa(ji,jbdy-1,jk,jn)+z3*tsa(ji,jbdy+1,jk,jn))*tmask(ji,jbdy,jk) 
    814833                           IF( vn(ji,jbdy,jk) < 0._wp ) THEN 
    815                               tsa(ji,jbdy,jk,jn)=(z6*tsa(ji,jbdy+1,jk,jn)+z5*tsa(ji,jbdy-1,jk,jn)+z7*tsa(ji,jbdy+2,jk,jn))*tmask(ji,jbdy,jk) 
     834                              tsa(ji,jbdy,jk,jn)=( z6*tsa(ji,jbdy+1,jk,jn)+z5*tsa(ji,jbdy-1,jk,jn) &  
     835                                                 + z7*tsa(ji,jbdy+2,jk,jn) ) * tmask(ji,jbdy,jk) 
    816836                           ENDIF 
    817837                        ENDIF 
     
    819839                  END DO 
    820840                  ! Restore ghost points: 
    821                   tsa(imin:imax,jbdy-1,k1:k2,jn) = tsa(imin:imax,jbdy-1,k1:k2,jn) * tmask(imin:imax,jbdy-1,k1:k2) 
     841                  tsa(imin:imax,jbdy-1,1:jpkm1,jn) = ptab_child(imin:imax,jbdy-1,1:jpkm1,jn) * tmask(imin:imax,jbdy-1,1:jpkm1) 
    822842               END DO 
    823843            ENDIF 
  • NEMO/trunk/src/NST/agrif_oce_sponge.F90

    r9786 r9806  
    103103         ! Store it in ztabramp 
    104104 
    105          ispongearea  = 2 + nn_sponge_len * Agrif_irhox() 
    106          z1_spongearea = 1._wp / REAL( ispongearea - 1 ) 
     105         ispongearea  = 1 + nn_sponge_len * Agrif_irhox() 
     106         z1_spongearea = 1._wp / REAL( ispongearea ) 
    107107          
    108108         ztabramp(:,:) = 0._wp 
     
    111111         IF( (nbondi == -1) .OR. (nbondi == 2) ) THEN 
    112112            ind1 = 1+nbghostcells 
    113             ind2 = 1+nbghostcells + (ispongearea-1) 
     113            ind2 = 1+nbghostcells + ispongearea  
    114114            DO jj = 1, jpj 
    115                DO ji = ind1, ind2                   
     115               DO ji = ind1, ind2                 
    116116                  ztabramp(ji,jj) = REAL( ind2 - ji ) * z1_spongearea * umask(ind1,jj,1) 
    117117               END DO 
     
    121121         ! --- East --- ! 
    122122         IF( (nbondi == 1) .OR. (nbondi == 2) ) THEN 
    123             ind1 = nlci - (1+nbghostcells) - (ispongearea-1) 
    124             ind2 = nlci - (1+nbghostcells) 
     123            ind1 = nlci - nbghostcells - ispongearea 
     124            ind2 = nlci - nbghostcells 
    125125            DO jj = 1, jpj 
    126126               DO ji = ind1, ind2 
     
    133133         IF( (nbondj == -1) .OR. (nbondj == 2) ) THEN 
    134134            ind1 = 1+nbghostcells 
    135             ind2 = 1+nbghostcells + (ispongearea-1) 
    136             DO jj = ind1, ind2 
     135            ind2 = 1+nbghostcells + ispongearea 
     136            DO jj = ind1, ind2  
    137137               DO ji = 1, jpi 
    138138                  ztabramp(ji,jj) = MAX( ztabramp(ji,jj), REAL( ind2 - jj ) * z1_spongearea * vmask(ji,ind1,1) ) 
     
    143143         ! --- North --- ! 
    144144         IF( (nbondj == 1) .OR. (nbondj == 2) ) THEN 
    145             ind1 = nlcj - (1+nbghostcells) - (ispongearea-1) 
    146             ind2 = nlcj - (1+nbghostcells) 
     145            ind1 = nlcj - nbghostcells - ispongearea 
     146            ind2 = nlcj - nbghostcells 
    147147            DO jj = ind1, ind2 
    148148               DO ji = 1, jpi 
     
    177177            DO ji = 2, jpim1   ! vector opt. 
    178178               fsahm_spt(ji,jj) = visc_dyn * ztabramp(ji,jj) 
    179                fsahm_spf(ji,jj) = 0.25_wp * visc_dyn * ( ztabramp(ji,jj) + ztabramp(ji  ,jj+1) & 
    180                                                      &  +ztabramp(ji,jj) + ztabramp(ji+1,jj  ) ) 
     179               fsahm_spf(ji,jj) = 0.25_wp * visc_dyn * ( ztabramp(ji  ,jj  ) + ztabramp(ji  ,jj+1) & 
     180                                                     &  +ztabramp(ji+1,jj+1) + ztabramp(ji+1,jj  ) ) 
    181181            END DO 
    182182         END DO 
     
    278278         DO jn = 1, jpts             
    279279            DO jk = 1, jpkm1 
    280                DO jj = j1,j2-1 
     280               ztu(i1:i2,j1:j2,jk) = 0._wp 
     281               DO jj = j1,j2 
    281282                  DO ji = i1,i2-1 
    282283                     zabe1 = fsaht_spu(ji,jj) * umask(ji,jj,jk) * e2_e1u(ji,jj) * e3u_n(ji,jj,jk) 
     284                     ztu(ji,jj,jk) = zabe1 * ( tsbdiff(ji+1,jj  ,jk,jn) - tsbdiff(ji,jj,jk,jn) )  
     285                  END DO 
     286               END DO 
     287               ztv(i1:i2,j1:j2,jk) = 0._wp 
     288               DO ji = i1,i2 
     289                  DO jj = j1,j2-1 
    283290                     zabe2 = fsaht_spv(ji,jj) * vmask(ji,jj,jk) * e1_e2v(ji,jj) * e3v_n(ji,jj,jk) 
    284                      ztu(ji,jj,jk) = zabe1 * ( tsbdiff(ji+1,jj  ,jk,jn) - tsbdiff(ji,jj,jk,jn) )  
    285291                     ztv(ji,jj,jk) = zabe2 * ( tsbdiff(ji  ,jj+1,jk,jn) - tsbdiff(ji,jj,jk,jn) ) 
    286292                  END DO 
     
    288294               ! 
    289295               IF( ln_zps ) THEN      ! set gradient at partial step level 
    290                   DO jj = j1,j2-1 
    291                      DO ji = i1,i2-1 
     296                  DO jj = j1,j2 
     297                     DO ji = i1,i2 
    292298                        ! last level 
    293299                        iku = mbku(ji,jj) 
  • NEMO/trunk/src/NST/agrif_top_interp.F90

    r9788 r9806  
    5959      INTEGER  ::   ji, jj, jk, jn, iref, jref, ibdy, jbdy   ! dummy loop indices 
    6060      INTEGER  ::   imin, imax, jmin, jmax, N_in, N_out 
    61       REAL(wp) ::   zrhox, z1, z2, z3, z4, z5, z6, z7 
     61      REAL(wp) ::   zrho, z1, z2, z3, z4, z5, z6, z7 
    6262      LOGICAL :: western_side, eastern_side,northern_side,southern_side 
    6363      ! vertical interpolation: 
     
    132132         IF ( .NOT.lk_agrif_clp ) THEN  
    133133            ! 
    134             zrhox = Agrif_Rhox() 
    135             z1 = ( zrhox - 1. ) * 0.5 
    136             z3 = ( zrhox - 1. ) / ( zrhox + 1. ) 
    137             z6 = 2. * ( zrhox - 1. ) / ( zrhox + 1. ) 
    138             z7 =    - ( zrhox - 1. ) / ( zrhox + 3. ) 
    139             ! 
    140             z2 = 1. - z1 
    141             z4 = 1. - z3 
    142             z5 = 1. - z6 - z7 
    143             ! 
    144134            imin = i1 ; imax = i2 
    145135            jmin = j1 ; jmax = j2 
     
    148138            IF((nbondj == -1).OR.(nbondj == 2)) jmin = 2 + nbghostcells 
    149139            IF((nbondj == +1).OR.(nbondj == 2)) jmax = nlcj - nbghostcells - 1 
    150             IF((nbondi == -1).OR.(nbondi == 2)) imin = 1 + nbghostcells 
     140            IF((nbondi == -1).OR.(nbondi == 2)) imin = 2 + nbghostcells 
    151141            IF((nbondi == +1).OR.(nbondi == 2)) imax = nlci - nbghostcells - 1       
    152142            ! 
    153143            IF( eastern_side ) THEN 
     144               zrho = Agrif_Rhox() 
     145               z1 = ( zrho - 1._wp ) * 0.5_wp                     
     146               z3 = ( zrho - 1._wp ) / ( zrho + 1._wp )          
     147               z6 = 2._wp * ( zrho - 1._wp ) / ( zrho + 1._wp ) 
     148               z7 =       - ( zrho - 1._wp ) / ( zrho + 3._wp ) 
     149               z2 = 1._wp - z1 ; z4 = 1._wp - z3 ; z5 = 1._wp - z6 - z7 
     150               ! 
    154151               ibdy = nlci-nbghostcells 
    155152               DO jn = 1, jptra 
    156                   tra(ibdy+1,jmin:jmax,k1:k2,jn) = z1 * ptab_child(ibdy+1,jmin:jmax,k1:k2,jn) + z2 * ptab_child(ibdy,jmin:jmax,k1:k2,jn) 
     153                  tra(ibdy+1,jmin:jmax,1:jpkm1,jn) = z1 * ptab_child(ibdy+1,jmin:jmax,1:jpkm1,jn) + z2 * ptab_child(ibdy,jmin:jmax,1:jpkm1,jn) 
    157154                  DO jk = 1, jpkm1 
    158155                     DO jj = jmin,jmax 
     
    169166                  END DO 
    170167                  ! Restore ghost points: 
    171                   tra(ibdy+1,jmin:jmax,k1:k2,jn) = ptab_child(ibdy+1,jmin:jmax,k1:k2,jn) * tmask(ibdy+1,jmin:jmax,k1:k2) 
     168                  tra(ibdy+1,jmin:jmax,1:jpkm1,jn) = ptab_child(ibdy+1,jmin:jmax,1:jpkm1,jn) * tmask(ibdy+1,jmin:jmax,1:jpkm1) 
    172169               END DO 
    173170            ENDIF 
    174171            !  
    175172            IF( northern_side ) THEN 
     173               zrho = Agrif_Rhoy() 
     174               z1 = ( zrho - 1._wp ) * 0.5_wp                     
     175               z3 = ( zrho - 1._wp ) / ( zrho + 1._wp )          
     176               z6 = 2._wp * ( zrho - 1._wp ) / ( zrho + 1._wp ) 
     177               z7 =       - ( zrho - 1._wp ) / ( zrho + 3._wp ) 
     178               z2 = 1._wp - z1 ; z4 = 1._wp - z3 ; z5 = 1._wp - z6 - z7 
     179               ! 
    176180               jbdy = nlcj-nbghostcells          
    177181               DO jn = 1, jptra 
    178                   tra(imin:imax,jbdy+1,k1:k2,jn) = z1 * ptab_child(imin:imax,jbdy+1,k1:k2,jn) + z2 * ptab_child(imin:imax,jbdy,k1:k2,jn) 
     182                  tra(imin:imax,jbdy+1,1:jpkm1,jn) = z1 * ptab_child(imin:imax,jbdy+1,1:jpkm1,jn) + z2 * ptab_child(imin:imax,jbdy,1:jpkm1,jn) 
    179183                  DO jk = 1, jpkm1 
    180184                     DO ji = imin,imax 
     
    191195                  END DO 
    192196                  ! Restore ghost points: 
    193                   tra(imin:imax,jbdy+1,k1:k2,jn) = ptab_child(imin:imax,jbdy+1,k1:k2,jn) * tmask(imin:imax,jbdy+1,k1:k2) 
    194                END DO 
    195             ENDIF 
    196             ! 
    197             IF( western_side ) THEN     
     197                  tra(imin:imax,jbdy+1,1:jpkm1,jn) = ptab_child(imin:imax,jbdy+1,1:jpkm1,jn) * tmask(imin:imax,jbdy+1,1:jpkm1) 
     198               END DO 
     199            ENDIF 
     200            ! 
     201            IF( western_side ) THEN 
     202               zrho = Agrif_Rhox() 
     203               z1 = ( zrho - 1._wp ) * 0.5_wp                     
     204               z3 = ( zrho - 1._wp ) / ( zrho + 1._wp )          
     205               z6 = 2._wp * ( zrho - 1._wp ) / ( zrho + 1._wp ) 
     206               z7 =       - ( zrho - 1._wp ) / ( zrho + 3._wp ) 
     207               z2 = 1._wp - z1 ; z4 = 1._wp - z3 ; z5 = 1._wp - z6 - z7 
     208               !     
    198209               ibdy = 1+nbghostcells        
    199210               DO jn = 1, jptra 
    200                   tra(ibdy-1,jmin:jmax,k1:k2,jn) = z1 * ptab_child(ibdy-1,jmin:jmax,k1:k2,jn) + z2 * ptab_child(ibdy,jmin:jmax,k1:k2,jn) 
     211                  tra(ibdy-1,jmin:jmax,1:jpkm1,jn) = z1 * ptab_child(ibdy-1,jmin:jmax,1:jpkm1,jn) + z2 * ptab_child(ibdy,jmin:jmax,1:jpkm1,jn) 
    201212                  DO jk = 1, jpkm1 
    202213                     DO jj = jmin,jmax 
     
    206217                           tra(ibdy,jj,jk,jn)=(z4*tra(ibdy-1,jj,jk,jn)+z3*tra(ibdy+1,jj,jk,jn))*tmask(ibdy,jj,jk)         
    207218                           IF( un(ibdy,jj,jk) < 0._wp ) THEN 
    208                               tra(ibdy,jj,jk,jn)=(z6*tra(ibdy+1,jj,jk,jn)+z5*tra(ibdy-1,jj,jk,jn)+z7*tra(ibdy+2,jj,jk,jn))*tmask(ibdy,jj,jk) 
    209                            ENDIF 
    210                         ENDIF 
    211                      END DO 
    212                   END DO 
    213                   ! Restore ghost points: 
    214                   tra(ibdy-1,jmin:jmax,k1:k2,jn) = ptab_child(ibdy-1,jmin:jmax,k1:k2,jn) * tmask(ibdy-1,jmin:jmax,k1:k2) 
    215                END DO 
    216             ENDIF 
    217             ! 
    218             IF( southern_side ) THEN   
     219                              tra(ibdy,jj,jk,jn)=( z6*tra(ibdy+1,jj,jk,jn)+z5*tra(ibdy-1,jj,jk,jn) & 
     220                                                 + z7*tra(ibdy+2,jj,jk,jn) ) * tmask(ibdy,jj,jk) 
     221                           ENDIF 
     222                        ENDIF 
     223                     END DO 
     224                  END DO 
     225                  ! Restore ghost points: 
     226                  tra(ibdy-1,jmin:jmax,1:jpkm1,jn) = ptab_child(ibdy-1,jmin:jmax,1:jpkm1,jn) * tmask(ibdy-1,jmin:jmax,1:jpkm1) 
     227               END DO 
     228            ENDIF 
     229            ! 
     230            IF( southern_side ) THEN 
     231               zrho = Agrif_Rhoy() 
     232               z1 = ( zrho - 1._wp ) * 0.5_wp                     
     233               z3 = ( zrho - 1._wp ) / ( zrho + 1._wp )          
     234               z6 = 2._wp * ( zrho - 1._wp ) / ( zrho + 1._wp ) 
     235               z7 =       - ( zrho - 1._wp ) / ( zrho + 3._wp ) 
     236               z2 = 1._wp - z1 ; z4 = 1._wp - z3 ; z5 = 1._wp - z6 - z7 
     237               !   
    219238               jbdy=1+nbghostcells         
    220239               DO jn = 1, jptra 
    221                   tra(imin:imax,jbdy-1,k1:k2,jn) = z1 * ptab_child(imin:imax,jbdy-1,k1:k2,jn) + z2 * ptab_child(imin:imax,jbdy,k1:k2,jn) 
    222                   DO jk = 1, jpk       
    223                      DO ji=imin,imax 
     240                  tra(imin:imax,jbdy-1,1:jpkm1,jn) = z1 * ptab_child(imin:imax,jbdy-1,1:jpkm1,jn) + z2 * ptab_child(imin:imax,jbdy,1:jpkm1,jn) 
     241                  DO jk = 1, jpkm1       
     242                     DO ji = imin,imax 
    224243                        IF( vmask(ji,jbdy,jk) == 0._wp ) THEN 
    225244                           tra(ji,jbdy,jk,jn)=tra(ji,jbdy-1,jk,jn) * tmask(ji,jbdy,jk) 
     
    227246                           tra(ji,jbdy,jk,jn)=(z4*tra(ji,jbdy-1,jk,jn)+z3*tra(ji,jbdy+1,jk,jn))*tmask(ji,jbdy,jk) 
    228247                           IF( vn(ji,jbdy,jk) < 0._wp ) THEN 
    229                               tra(ji,jbdy,jk,jn)=(z6*tra(ji,jbdy+1,jk,jn)+z5*tra(ji,jbdy-1,jk,jn)+z7*tra(ji,jbdy+2,jk,jn))*tmask(ji,jbdy,jk) 
    230                            ENDIF 
    231                         ENDIF 
    232                      END DO 
    233                   END DO 
    234                   ! Restore ghost points: 
    235                   tra(imin:imax,jbdy-1,k1:k2,jn) = tra(imin:imax,jbdy-1,k1:k2,jn) * tmask(imin:imax,jbdy-1,k1:k2) 
     248                              tra(ji,jbdy,jk,jn)=( z6*tra(ji,jbdy+1,jk,jn)+z5*tra(ji,jbdy-1,jk,jn) &  
     249                                                 + z7*tra(ji,jbdy+2,jk,jn) ) * tmask(ji,jbdy,jk) 
     250                           ENDIF 
     251                        ENDIF 
     252                     END DO 
     253                  END DO 
     254                  ! Restore ghost points: 
     255                  tra(imin:imax,jbdy-1,1:jpkm1,jn) = ptab_child(imin:imax,jbdy-1,1:jpkm1,jn) * tmask(imin:imax,jbdy-1,1:jpkm1) 
    236256               END DO 
    237257            ENDIF 
    238258            ! 
    239259         ENDIF 
     260 
    240261      ENDIF 
    241262      ! 
Note: See TracChangeset for help on using the changeset viewer.