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

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

File:
1 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 
Note: See TracChangeset for help on using the changeset viewer.