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 4954 for branches/2014/dev_r4765_CNRS_agrif – NEMO

Ignore:
Timestamp:
2014-12-02T12:13:53+01:00 (9 years ago)
Author:
jchanut
Message:

AGRIF: Update sponge computation and move updates in stp

Location:
branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/NST_SRC/agrif_oce.F90

    r4789 r4954  
    2121   LOGICAL , PUBLIC ::   ln_spc_dyn    = .FALSE.   !: 
    2222   INTEGER , PUBLIC ::   nn_cln_update = 3         !: update frequency  
     23   INTEGER , PUBLIC, PARAMETER ::   nn_sponge_len = 2  !: Sponge width (in number of parent grid points) 
    2324   REAL(wp), PUBLIC ::   rn_sponge_tra = 2800.     !: sponge coeff. for tracers 
    2425   REAL(wp), PUBLIC ::   rn_sponge_dyn = 2800.     !: sponge coeff. for dynamics 
     
    4243   LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tabspongedone_u 
    4344   LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tabspongedone_v 
    44    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,  DIMENSION(:,:) ::   spe1ur , spe2vr , spbtr2   !: ??? 
    45    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,  DIMENSION(:,:) ::   spe1ur2, spe2vr2, spbtr3   !: ??? 
     45   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,  DIMENSION(:,:) :: fsaht_spu, fsaht_spv !: sponge diffusivities 
     46   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,  DIMENSION(:,:) :: fsahm_spt, fsahm_spf !: sponge viscosities 
     47 
    4648   ! Barotropic arrays used to store open boundary data during 
    4749   ! time-splitting loop: 
     
    7981      ierr(:) = 0 
    8082      ! 
    81       ALLOCATE( spe1ur (jpi,jpj), spe2vr (jpi,jpj),   & 
    82          &      spbtr2 (jpi,jpj), spe1ur2(jpi,jpj),   & 
    83          &      spe2vr2(jpi,jpj), spbtr3(jpi,jpj),    & 
     83      ALLOCATE( fsaht_spu(jpi,jpj), fsaht_spv(jpi,jpj),   & 
     84         &      fsahm_spt(jpi,jpj), fsahm_spf(jpi,jpj),   & 
    8485         &      tabspongedone_tsn(jpi,jpj),           & 
    8586# if defined key_top          
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/NST_SRC/agrif_opa_sponge.F90

    r4862 r4954  
    99   USE agrif_oce 
    1010   USE wrk_nemo   
     11   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    1112 
    1213   IMPLICIT NONE 
     
    9495         CALL wrk_alloc( jpi, jpj, ztabramp ) 
    9596 
    96          ispongearea  = 2 + 2 * Agrif_irhox() 
     97         ispongearea  = 2 + nn_sponge_len * Agrif_irhox() 
    9798         ilci = nlci - ispongearea 
    9899         ilcj = nlcj - ispongearea  
    99100         z1spongearea = 1._wp / REAL( ispongearea - 2 ) 
    100          spbtr2(:,:) = 1. / ( e1t(:,:) * e2t(:,:) ) 
    101  
    102          ztabramp(:,:) = 0. 
     101 
     102         ztabramp(:,:) = 0._wp 
    103103 
    104104         IF( (nbondi == -1) .OR. (nbondi == 2) ) THEN 
     
    149149      ! Tracers 
    150150      IF( .NOT. spongedoneT ) THEN 
    151          spe1ur(:,:) = 0. 
    152          spe2vr(:,:) = 0. 
    153  
    154          IF( (nbondi == -1) .OR. (nbondi == 2) ) THEN 
    155             spe1ur(2:ispongearea-1,:       ) = visc_tra                                        & 
    156                &                             *    0.5 * (  ztabramp(2:ispongearea-1,:      )   & 
    157                &                                         + ztabramp(3:ispongearea  ,:      ) ) & 
    158                &                             * e2u(2:ispongearea-1,:) / e1u(2:ispongearea-1,:) 
    159  
    160             spe2vr(2:ispongearea  ,1:jpjm1 ) = visc_tra                                        & 
    161                &                             *    0.5 * (  ztabramp(2:ispongearea  ,1:jpjm1)   & 
    162                &                                         + ztabramp(2:ispongearea,2  :jpj  ) ) & 
    163                &                             * e1v(2:ispongearea,1:jpjm1) / e2v(2:ispongearea,1:jpjm1) 
    164          ENDIF 
    165  
    166          IF( (nbondi == 1) .OR. (nbondi == 2) ) THEN 
    167             spe1ur(ilci+1:nlci-2,:        ) = visc_tra                                   & 
    168                &                            * 0.5 * (  ztabramp(ilci+1:nlci-2,:      )   &  
    169                &                                     + ztabramp(ilci+2:nlci-1,:      ) ) & 
    170                &                            * e2u(ilci+1:nlci-2,:) / e1u(ilci+1:nlci-2,:) 
    171  
    172             spe2vr(ilci+1:nlci-1,1:jpjm1  )  = visc_tra                                  & 
    173                &                            * 0.5 * (  ztabramp(ilci+1:nlci-1,1:jpjm1)   &  
    174                &                                     + ztabramp(ilci+1:nlci-1,2:jpj  ) ) &  
    175                &                            * e1v(ilci+1:nlci-1,1:jpjm1) / e2v(ilci+1:nlci-1,1:jpjm1) 
    176          ENDIF 
    177  
    178          IF( (nbondj == -1) .OR. (nbondj == 2) ) THEN 
    179             spe1ur(1:jpim1,2:ispongearea  ) = visc_tra                                     & 
    180                &                            * 0.5 * (  ztabramp(1:jpim1,2:ispongearea  )   &  
    181                &                                     + ztabramp(2:jpi  ,2:ispongearea  ) ) & 
    182                &                            * e2u(1:jpim1,2:ispongearea) / e1u(1:jpim1,2:ispongearea) 
    183     
    184             spe2vr(:      ,2:ispongearea-1) = visc_tra                                     & 
    185                &                            * 0.5 * (  ztabramp(:      ,2:ispongearea-1)   & 
    186                &                                     + ztabramp(:      ,3:ispongearea  ) ) & 
    187                &                            * e1v(:,2:ispongearea-1) / e2v(:,2:ispongearea-1) 
    188          ENDIF 
    189  
    190          IF( (nbondj == 1) .OR. (nbondj == 2) ) THEN 
    191             spe1ur(1:jpim1,ilcj+1:nlcj-1) = visc_tra                                   & 
    192                &                          * 0.5 * (  ztabramp(1:jpim1,ilcj+1:nlcj-1)   & 
    193                &                                   + ztabramp(2:jpi  ,ilcj+1:nlcj-1) ) & 
    194                &                                * e2u(1:jpim1,ilcj+1:nlcj-1) / e1u(1:jpim1,ilcj+1:nlcj-1) 
    195  
    196             spe2vr(:      ,ilcj+1:nlcj-2) = visc_tra                                   & 
    197                &                          * 0.5 * (  ztabramp(:      ,ilcj+1:nlcj-2)   & 
    198                &                                   + ztabramp(:      ,ilcj+2:nlcj-1) ) & 
    199                &                                * e1v(:,ilcj+1:nlcj-2) / e2v(:,ilcj+1:nlcj-2) 
    200          ENDIF 
     151         fsaht_spu(:,:) = 0._wp 
     152         fsaht_spv(:,:) = 0._wp 
     153         DO jj = 2, jpjm1 
     154            DO ji = 2, jpim1   ! vector opt. 
     155               fsaht_spu(ji,jj) = 0.5_wp * visc_tra * (ztabramp(ji,jj) + ztabramp(ji+1,jj  )) 
     156               fsaht_spv(ji,jj) = 0.5_wp * visc_tra * (ztabramp(ji,jj) + ztabramp(ji  ,jj+1)) 
     157            END DO 
     158         END DO 
     159 
     160         CALL lbc_lnk( fsaht_spu, 'U', 1. )   ! Lateral boundary conditions 
     161         CALL lbc_lnk( fsaht_spv, 'V', 1. ) 
    201162         spongedoneT = .TRUE. 
    202163      ENDIF 
     
    204165      ! Dynamics 
    205166      IF( .NOT. spongedoneU ) THEN 
    206          spe1ur2(:,:) = 0. 
    207          spe2vr2(:,:) = 0. 
    208  
    209          IF( (nbondi == -1) .OR. (nbondi == 2) ) THEN 
    210             spe1ur2(2:ispongearea-1,:      ) = visc_dyn                                   & 
    211                &                             * 0.5 * (  ztabramp(2:ispongearea-1,:      ) & 
    212                &                                      + ztabramp(3:ispongearea  ,:      ) ) 
    213             spe2vr2(2:ispongearea  ,1:jpjm1) = visc_dyn                                   & 
    214                &                             * 0.5 * (  ztabramp(2:ispongearea  ,1:jpjm1) & 
    215                &                                      + ztabramp(2:ispongearea  ,2:jpj  ) )  
    216          ENDIF 
    217  
    218          IF( (nbondi == 1) .OR. (nbondi == 2) ) THEN 
    219             spe1ur2(ilci+1:nlci-2  ,:      ) = visc_dyn                                   & 
    220                &                             * 0.5 * (  ztabramp(ilci+1:nlci-2, :       ) & 
    221                &                                      + ztabramp(ilci+2:nlci-1, :       ) )                       
    222             spe2vr2(ilci+1:nlci-1  ,1:jpjm1) = visc_dyn                                   & 
    223                &                             * 0.5 * (  ztabramp(ilci+1:nlci-1,1:jpjm1  ) & 
    224                &                                      + ztabramp(ilci+1:nlci-1,2:jpj    ) )  
    225          ENDIF 
    226  
    227          IF( (nbondj == -1) .OR. (nbondj == 2) ) THEN 
    228             spe1ur2(1:jpim1,2:ispongearea  ) = visc_dyn                                   &   
    229                &                             * 0.5 * (  ztabramp(1:jpim1,2:ispongearea  ) & 
    230                &                                      + ztabramp(2:jpi  ,2:ispongearea  ) )  
    231             spe2vr2(:      ,2:ispongearea-1) = visc_dyn                                   & 
    232                &                             * 0.5 * (  ztabramp(:      ,2:ispongearea-1) & 
    233                &                                      + ztabramp(:      ,3:ispongearea  ) ) 
    234          ENDIF 
    235  
    236          IF( (nbondj == 1) .OR. (nbondj == 2) ) THEN 
    237             spe1ur2(1:jpim1,ilcj+1:nlcj-1  ) = visc_dyn                                   & 
    238                &                             * 0.5 * (  ztabramp(1:jpim1,ilcj+1:nlcj-1  ) & 
    239                &                                      + ztabramp(2:jpi  ,ilcj+1:nlcj-1  ) )  
    240             spe2vr2(:      ,ilcj+1:nlcj-2  ) = visc_dyn                                   & 
    241                &                             * 0.5 * (  ztabramp(:      ,ilcj+1:nlcj-2  ) & 
    242                &                                      + ztabramp(:      ,ilcj+2:nlcj-1  ) ) 
    243          ENDIF 
     167         fsahm_spt(:,:) = 0._wp 
     168         fsahm_spf(:,:) = 0._wp 
     169         DO jj = 2, jpjm1 
     170            DO ji = 2, jpim1   ! vector opt. 
     171               fsahm_spt(ji,jj) = visc_dyn * ztabramp(ji,jj) 
     172               fsahm_spf(ji,jj) = 0.25_wp * visc_dyn * ( ztabramp(ji,jj) + ztabramp(ji  ,jj+1) & 
     173                                                     &  +ztabramp(ji,jj) + ztabramp(ji+1,jj  ) ) 
     174            END DO 
     175         END DO 
     176 
     177         CALL lbc_lnk( fsahm_spt, 'T', 1. )   ! Lateral boundary conditions 
     178         CALL lbc_lnk( fsahm_spf, 'F', 1. ) 
    244179         spongedoneU = .TRUE. 
    245          spbtr3(:,:) = 1. / ( e1f(:,:) * e2f(:,:) ) 
    246180      ENDIF 
    247181      ! 
     
    249183      ! 
    250184#endif 
     185 
    251186   END SUBROUTINE Agrif_Sponge 
    252187 
     
    261196 
    262197      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
    263  
     198      INTEGER  ::   iku, ikv 
    264199      REAL(wp) :: ztsa, zabe1, zabe2, zbtr 
    265       REAL(wp), DIMENSION(i1:i2,j1:j2) :: ztu, ztv 
     200      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2) :: ztu, ztv 
    266201      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2) ::tsbdiff 
    267202      ! 
    268  
    269  
    270203      IF (before) THEN 
    271204         tabres(i1:i2,j1:j2,k1:k2,n1:n2) = tsn(i1:i2,j1:j2,k1:k2,n1:n2) 
    272       ELSE       
    273  
    274          tsbdiff(:,:,:,:) = tsb(i1:i2,j1:j2,:,:) - tabres(:,:,:,:)       
    275          DO jn = 1, jpts 
     205      ELSE    
     206    
     207         tsbdiff(:,:,:,:) = tsb(i1:i2,j1:j2,:,:) - tabres(:,:,:,:)     
     208         DO jn = 1, jpts             
    276209            DO jk = 1, jpkm1 
    277  
    278210               DO jj = j1,j2-1 
    279211                  DO ji = i1,i2-1 
    280                      zabe1 = umask(ji,jj,jk) * spe1ur(ji,jj) * fse3u(ji,jj,jk) 
    281                      zabe2 = vmask(ji,jj,jk) * spe2vr(ji,jj) * fse3v(ji,jj,jk) 
    282                      ztu(ji,jj) = zabe1 * ( tsbdiff(ji+1,jj  ,jk,jn) - tsbdiff(ji,jj,jk,jn) ) 
    283                      ztv(ji,jj) = zabe2 * ( tsbdiff(ji  ,jj+1,jk,jn) - tsbdiff(ji,jj,jk,jn) ) 
     212                     zabe1 = fsaht_spu(ji,jj) * umask(ji,jj,jk) * re2u_e1u(ji,jj) * fse3u_n(ji,jj,jk) 
     213                     zabe2 = fsaht_spv(ji,jj) * vmask(ji,jj,jk) * re1v_e2v(ji,jj) * fse3v_n(ji,jj,jk) 
     214                     ztu(ji,jj,jk) = zabe1 * ( tsbdiff(ji+1,jj  ,jk,jn) - tsbdiff(ji,jj,jk,jn) )  
     215                     ztv(ji,jj,jk) = zabe2 * ( tsbdiff(ji  ,jj+1,jk,jn) - tsbdiff(ji,jj,jk,jn) ) 
    284216                  ENDDO 
    285217               ENDDO 
    286218 
     219               IF( ln_zps ) THEN      ! set gradient at partial step level 
     220                  DO jj = j1,j2-1 
     221                     DO ji = i1,i2-1 
     222                        ! last level 
     223                        iku = mbku(ji,jj) 
     224                        ikv = mbkv(ji,jj) 
     225                        IF( iku == jk ) THEN 
     226                           ztu(ji,jj,jk) = 0._wp 
     227                        ENDIF 
     228                        IF( ikv == jk ) THEN 
     229                           ztv(ji,jj,jk) = 0._wp 
     230                        ENDIF 
     231                     END DO 
     232                  END DO 
     233               ENDIF 
     234            ENDDO 
     235 
     236            DO jk = 1, jpkm1 
    287237               DO jj = j1+1,j2-1 
    288238                  DO ji = i1+1,i2-1 
    289239 
    290240                     IF (.NOT. tabspongedone_tsn(ji,jj)) THEN  
    291                         zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk) 
     241                        zbtr = r1_e12t(ji,jj) / fse3t_n(ji,jj,jk) 
    292242                        ! horizontal diffusive trends 
    293                         ztsa = zbtr * (  ztu(ji,jj) - ztu(ji-1,jj  ) + ztv(ji,jj) - ztv(ji  ,jj-1)  ) 
     243                        ztsa = zbtr * (  ztu(ji,jj,jk) - ztu(ji-1,jj,jk) + ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk)  ) 
    294244                        ! add it to the general tracer trends 
    295245                        tsa(ji,jj,jk,jn) = tsa(ji,jj,jk,jn) + ztsa 
     
    327277 
    328278      IF (before) THEN 
    329  
    330279         tabres = un(i1:i2,j1:j2,:) 
    331  
    332280      ELSE 
    333281 
    334282         ubdiff(i1:i2,j1:j2,:) = (ub(i1:i2,j1:j2,:) - tabres(:,:,:))*umask(i1:i2,j1:j2,:) 
    335  
    336          DO jk=1,jpkm1 
    337             ubdiff(i1:i2,j1:j2,jk) = ubdiff(i1:i2,j1:j2,jk) * spe1ur2(i1:i2,j1:j2) 
    338          ENDDO 
    339283 
    340284         DO jk = 1, jpkm1                                 ! Horizontal slab 
     
    346290            DO jj = j1,j2 
    347291               DO ji = i1+1,i2   ! vector opt. 
    348                   zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk) 
    349                   hdivdiff(ji,jj,jk) = (e2u(ji,jj)*fse3u(ji,jj,jk) * ubdiff(ji,jj,jk) - e2u(ji-1,jj)* fse3u(ji-1,jj  ,jk) & 
    350                         * ubdiff(ji-1,jj  ,jk) ) * zbtr 
     292                  zbtr = r1_e12t(ji,jj) / fse3t_n(ji,jj,jk) * fsahm_spt(ji,jj) 
     293                  hdivdiff(ji,jj,jk) = (  e2u(ji  ,jj)*fse3u_n(ji  ,jj,jk) * ubdiff(ji  ,jj,jk) & 
     294                                     &   -e2u(ji-1,jj)*fse3u_n(ji-1,jj,jk) * ubdiff(ji-1,jj,jk) ) * zbtr 
    351295               END DO 
    352296            END DO 
     
    354298            DO jj = j1,j2-1 
    355299               DO ji = i1,i2   ! vector opt. 
    356                   zbtr = spbtr3(ji,jj) * fse3f(ji,jj,jk) 
    357                   rotdiff(ji,jj,jk) = (- e1u(ji  ,jj+1) * ubdiff(ji  ,jj+1,jk) + e1u(ji,jj) * ubdiff(ji,jj,jk)  ) & 
    358                         * fmask(ji,jj,jk) * zbtr  
     300                  zbtr = r1_e12f(ji,jj) * fse3f_n(ji,jj,jk) * fsahm_spf(ji,jj) 
     301                  rotdiff(ji,jj,jk) = (-e1u(ji,jj+1) * ubdiff(ji,jj+1,jk) & 
     302                                       +e1u(ji,jj  ) * ubdiff(ji,jj  ,jk) &  
     303                                    & ) * fmask(ji,jj,jk) * zbtr  
    359304               END DO 
    360305            END DO 
     
    373318                     ze1v = hdivdiff(ji,jj,jk) 
    374319                     ! horizontal diffusive trends 
    375                      zua = - ( ze2u - rotdiff (ji,jj-1,jk)) / ( e2u(ji,jj) * fse3u(ji,jj,jk) )   & 
     320                     zua = - ( ze2u - rotdiff (ji,jj-1,jk)) / ( e2u(ji,jj) * fse3u_n(ji,jj,jk) )   & 
    376321                           + ( hdivdiff(ji+1,jj,jk) - ze1v  ) / e1u(ji,jj) 
    377322 
     
    399344 
    400345                     ! horizontal diffusive trends 
    401                      zva = + ( ze2u - rotdiff (ji-1,jj,jk)) / ( e1v(ji,jj) * fse3v(ji,jj,jk) )   & 
     346                     zva = + ( ze2u - rotdiff (ji-1,jj,jk)) / ( e1v(ji,jj) * fse3v_n(ji,jj,jk) )   & 
    402347                           + ( hdivdiff(ji,jj+1,jk) - ze1v  ) / e2v(ji,jj) 
    403348 
     
    443388         vbdiff(i1:i2,j1:j2,:) = (vb(i1:i2,j1:j2,:) - tabres(:,:,:))*vmask(i1:i2,j1:j2,:) 
    444389 
    445          DO jk=1,jpkm1 
    446             vbdiff(i1:i2,j1:j2,jk) = vbdiff(i1:i2,j1:j2,jk) * spe2vr2(i1:i2,j1:j2) 
    447          ENDDO 
    448  
    449390         DO jk = 1, jpkm1                                 ! Horizontal slab 
    450391            !                                             ! =============== 
     
    455396            DO jj = j1+1,j2 
    456397               DO ji = i1,i2   ! vector opt. 
    457                   zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk) 
    458                   hdivdiff(ji,jj,jk) = (e1v(ji,jj) * fse3v(ji,jj,jk) * vbdiff(ji,jj,jk) - e1v(ji  ,jj-1) & 
    459                         * fse3v(ji  ,jj-1,jk)  * vbdiff(ji  ,jj-1,jk)  ) * zbtr 
     398                  zbtr = r1_e12t(ji,jj) / fse3t_n(ji,jj,jk) * fsahm_spt(ji,jj) 
     399                  hdivdiff(ji,jj,jk) = ( e1v(ji,jj  ) * fse3v(ji,jj  ,jk) * vbdiff(ji,jj  ,jk) & 
     400                                     &  -e1v(ji,jj-1) * fse3v(ji,jj-1,jk) * vbdiff(ji,jj-1,jk)  ) * zbtr 
    460401               END DO 
    461402            END DO 
    462403            DO jj = j1,j2 
    463404               DO ji = i1,i2-1   ! vector opt. 
    464                   zbtr = spbtr3(ji,jj) * fse3f(ji,jj,jk) 
    465                   rotdiff(ji,jj,jk) = (e2v(ji+1,jj  ) * vbdiff(ji+1,jj  ,jk) - e2v(ji,jj) * vbdiff(ji,jj,jk)) & 
    466                         * fmask(ji,jj,jk) * zbtr 
     405                  zbtr = r1_e12f(ji,jj) * fse3f_n(ji,jj,jk) * fsahm_spf(ji,jj) 
     406                  rotdiff(ji,jj,jk) = ( e2v(ji+1,jj) * vbdiff(ji+1,jj,jk) &  
     407                                    &  -e2v(ji  ,jj) * vbdiff(ji  ,jj,jk) & 
     408                                    & ) * fmask(ji,jj,jk) * zbtr 
    467409               END DO 
    468410            END DO 
     
    482424                     ze1v = hdivdiff(ji,jj,jk) 
    483425                     ! horizontal diffusive trends 
    484                      zua = - ( ze2u - rotdiff (ji,jj-1,jk)) / ( e2u(ji,jj) * fse3u(ji,jj,jk) ) + ( hdivdiff(ji+1,jj,jk) - ze1v) & 
     426                     zua = - ( ze2u - rotdiff (ji,jj-1,jk)) / ( e2u(ji,jj) * fse3u_n(ji,jj,jk) ) + ( hdivdiff(ji+1,jj,jk) - ze1v) & 
    485427                           / e1u(ji,jj) 
    486428 
     
    504446                     ! horizontal diffusive trends 
    505447 
    506                      zva = + ( ze2u - rotdiff (ji-1,jj,jk)) / ( e1v(ji,jj) * fse3v(ji,jj,jk) ) + ( hdivdiff(ji,jj+1,jk) - ze1v) & 
     448                     zva = + ( ze2u - rotdiff (ji-1,jj,jk)) / ( e1v(ji,jj) * fse3v_n(ji,jj,jk) ) + ( hdivdiff(ji,jj+1,jk) - ze1v) & 
    507449                           / e2v(ji,jj) 
    508450 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/NST_SRC/agrif_top_sponge.F90

    r4793 r4954  
    7474               DO jj = j1,j2-1 
    7575                  DO ji = i1,i2-1 
    76                      zabe1 = umask(ji,jj,jk) * spe1ur(ji,jj) * fse3u(ji,jj,jk) 
    77                      zabe2 = vmask(ji,jj,jk) * spe2vr(ji,jj) * fse3v(ji,jj,jk) 
     76                     zabe1 = fsaht_spu(ji,jj) * umask(ji,jj,jk) * re2u_e1u(ji,jj) * fse3u_n(ji,jj,jk) 
     77                     zabe2 = fsaht_spv(ji,jj) * vmask(ji,jj,jk) * re1v_e2v(ji,jj) * fse3v_n(ji,jj,jk) 
    7878                     ztu(ji,jj) = zabe1 * ( trbdiff(ji+1,jj  ,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
    7979                     ztv(ji,jj) = zabe2 * ( trbdiff(ji  ,jj+1,jk,jn) - trbdiff(ji,jj,jk,jn) ) 
     
    8585 
    8686                     IF (.NOT. tabspongedone_trn(ji,jj)) THEN  
    87                         zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk) 
     87                        zbtr = r1_e12t(ji,jj) / fse3t(ji,jj,jk) 
    8888                        ! horizontal diffusive trends 
    8989                        ztra = zbtr * (  ztu(ji,jj) - ztu(ji-1,jj  ) + ztv(ji,jj) - ztv(ji  ,jj-1)  ) 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/NST_SRC/agrif_top_update.F90

    r4793 r4954  
    11#define TWO_WAY 
     2#undef DECAL_FEEDBACK 
    23 
    34MODULE agrif_top_update 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/NST_SRC/agrif_user.F90

    r4874 r4954  
    303303   USE par_oce       !   ONLY : jpts 
    304304   USE oce 
     305   USE agrif_oce 
    305306   IMPLICIT NONE 
    306307   !!---------------------------------------------------------------------- 
     
    373374   CALL Agrif_Set_bc(vn_interp_id,(/0,1/)) 
    374375 
    375    CALL Agrif_Set_bc(tsn_sponge_id,(/-3*Agrif_irhox(),0/)) 
    376    CALL Agrif_Set_bc(un_sponge_id,(/-2*Agrif_irhox()-1,0/)) 
    377    CALL Agrif_Set_bc(vn_sponge_id,(/-2*Agrif_irhox()-1,0/)) 
     376!   CALL Agrif_Set_bc(tsn_sponge_id,(/-3*Agrif_irhox(),0/)) 
     377!   CALL Agrif_Set_bc(un_sponge_id,(/-2*Agrif_irhox()-1,0/)) 
     378!   CALL Agrif_Set_bc(vn_sponge_id,(/-2*Agrif_irhox()-1,0/)) 
     379   CALL Agrif_Set_bc(tsn_sponge_id,(/-nn_sponge_len*Agrif_irhox(),0/)) 
     380   CALL Agrif_Set_bc(un_sponge_id ,(/-nn_sponge_len*Agrif_irhox(),0/)) 
     381   CALL Agrif_Set_bc(vn_sponge_id ,(/-nn_sponge_len*Agrif_irhox(),0/)) 
    378382 
    379383   CALL Agrif_Set_bc(sshn_id,(/0,0/)) 
     
    414418! High order updates 
    415419!   CALL Agrif_Set_Updatetype(tsn_id, update = Agrif_Update_Full_Weighting) 
    416 !   CALL Agrif_Set_Updatetype(un_update_id,update1 = Agrif_Update_Average, update2 =                           Agrif_Update_Full_Weighting) 
    417 !   CALL Agrif_Set_Updatetype(vn_update_id,update1 = Agrif_Update_Full_Weighting, update2 =                    Agrif_Update_Average) 
     420!   CALL Agrif_Set_Updatetype(un_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Full_Weighting) 
     421!   CALL Agrif_Set_Updatetype(vn_update_id,update1 = Agrif_Update_Full_Weighting, update2 = Agrif_Update_Average) 
    418422! 
    419 !   CALL Agrif_Set_Updatetype(ub2b_update_id,update1 = Agrif_Update_Average, update2 =                           Agrif_Update_Full_Weighting) 
    420 !   CALL Agrif_Set_Updatetype(vb2b_update_id,update1 = Agrif_Update_Full_Weighting, update2 =                    Agrif_Update_Average) 
     423!   CALL Agrif_Set_Updatetype(ub2b_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Full_Weighting) 
     424!   CALL Agrif_Set_Updatetype(vb2b_update_id,update1 = Agrif_Update_Full_Weighting, update2 = Agrif_Update_Average) 
    421425!   CALL Agrif_Set_Updatetype(sshn_id, update = Agrif_Update_Full_Weighting) 
    422426  
     
    636640   !!---------------------------------------------------------------------- 
    637641   USE agrif_util 
     642   USE agrif_oce 
    638643   USE dom_oce 
    639644   USE trc 
     
    654659   !----------------------------- 
    655660   CALL Agrif_Set_bc(trn_id,(/0,1/)) 
    656    CALL Agrif_Set_bc(trn_sponge_id,(/-3*Agrif_irhox(),0/)) 
     661!   CALL Agrif_Set_bc(trn_sponge_id,(/-3*Agrif_irhox(),0/)) 
     662   CALL Agrif_Set_bc(trn_sponge_id,(/-nn_sponge_len*Agrif_irhox(),0/)) 
    657663 
    658664   ! 5. Update type 
     
    692698   ! 
    693699   INTEGER  ::   ios                 ! Local integer output status for namelist read 
     700   INTEGER  ::   iminspon 
    694701   NAMELIST/namagrif/ nn_cln_update, rn_sponge_tra, rn_sponge_dyn, ln_spc_dyn, ln_chk_bathy,   & 
    695702                 &    ln_agrif_tke 
     
    724731   visc_dyn      = rn_sponge_dyn 
    725732   ! 
     733   ! Check sponge length: 
     734   iminspon = MIN(FLOOR(REAL(jpiglo-4)/REAL(2*Agrif_irhox())), FLOOR(REAL(jpjglo-4)/REAL(2*Agrif_irhox())) ) 
     735   IF (lk_mpp) iminspon = MIN(iminspon,FLOOR(REAL(jpi-2)/REAL(Agrif_irhox())), FLOOR(REAL(jpj-2)/REAL(Agrif_irhox())) ) 
     736   IF (nn_sponge_len > iminspon)  CALL ctl_stop('agrif sponge length is too large') 
     737   ! 
    726738   IF( agrif_oce_alloc()  > 0 )   CALL ctl_warn('agrif agrif_oce_alloc: allocation of arrays failed') 
    727739# if defined key_lim2 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r4757 r4954  
    443443      ENDIF 
    444444#endif 
    445       !                                   !* Fill boundary data arrays with AGRIF 
    446       !                                   ! ------------------------------------- 
     445      !                                   !* Fill boundary data arrays for AGRIF 
     446      !                                   ! ------------------------------------ 
    447447#if defined key_agrif 
    448448         IF( .NOT.Agrif_Root() ) CALL agrif_dta_ts( kt ) 
     
    879879#if defined key_agrif 
    880880      ! Save time integrated fluxes during child grid integration 
    881       ! (used to update coarse grid transports) 
    882       ! Useless with 2nd order momentum schemes 
     881      ! (used to update coarse grid transports at next time step) 
    883882      ! 
    884883      IF ( (.NOT.Agrif_Root()).AND.(ln_bt_fw) ) THEN 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90

    r4486 r4954  
    3434   USE iom 
    3535#if defined key_agrif 
    36    USE agrif_opa_update 
    3736   USE agrif_opa_interp 
    3837#endif 
     
    295294      ENDIF 
    296295      ! 
    297       ! Update velocity at AGRIF zoom boundaries 
    298 #if defined key_agrif 
    299       IF ( .NOT.Agrif_Root() ) CALL Agrif_Update_Dyn( kt ) 
    300 #endif 
    301       ! 
    302296      IF(ln_ctl)   CALL prt_ctl( tab2d_1=sshb, clinfo1=' sshb  - : ', mask1=tmask, ovlap=1 ) 
    303297      ! 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90

    r4785 r4954  
    4141   USE traqsr          ! penetrative solar radiation (needed for nksr) 
    4242#if defined key_agrif 
    43    USE agrif_opa_update 
    4443   USE agrif_opa_interp 
    4544#endif 
     
    141140         ELSE                 ;   CALL tra_nxt_fix( kt, nit000, 'TRA', tsb, tsn, tsa, jpts )  ! fixed    volume level  
    142141         ENDIF 
    143       ENDIF  
    144       ! 
    145 #if defined key_agrif 
    146       ! Update tracer at AGRIF zoom boundaries 
    147       IF( .NOT.Agrif_Root() )    CALL Agrif_Update_Tra( kt )      ! children only 
    148 #endif       
     142      ENDIF      
    149143      ! 
    150144      ! trends computation 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/step.F90

    r4785 r4954  
    299299      IF( lk_vvl           )   CALL dom_vvl_sf_swp( kstp )  ! swap of vertical scale factors 
    300300 
     301#if defined key_agrif 
     302      ! AGRIF update 
     303      IF (.NOT.Agrif_Root()) THEN 
     304                               CALL Agrif_Update_Tra( kstp )! Update active tracers 
     305                               CALL Agrif_Update_Dyn( kstp )! Update momentum 
     306      ENDIF 
     307#endif 
     308      ! 
    301309      IF( ln_diahsb        )   CALL dia_hsb( kstp )         ! - ML - global conservation diagnostics 
    302310      IF( lk_diaobs  )         CALL dia_obs( kstp )         ! obs-minus-model (assimilation) diagnostics (call after dynamics update) 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/OPA_SRC/step_oce.F90

    r4328 r4954  
    114114#if defined key_agrif 
    115115   USE agrif_opa_sponge ! Momemtum and tracers sponges 
     116   USE agrif_opa_update ! Update (2-way nesting) 
    116117#endif 
    117118#if defined key_top 
Note: See TracChangeset for help on using the changeset viewer.