Changeset 78 for trunk


Ignore:
Timestamp:
07/20/13 01:12:30 (11 years ago)
Author:
smasson
Message:

bugfix in agrif sponge coeficients, see ticket 1128 of NEMO

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/NST_SRC/agrif_opa_sponge.F90

    r7 r78  
    1515   PUBLIC Agrif_Sponge_Tra, Agrif_Sponge_Dyn, interptsn, interpun, interpvn 
    1616 
     17  !! * Substitutions 
     18#  include "domzgr_substitute.h90" 
    1719   !!---------------------------------------------------------------------- 
    1820   !! NEMO/NST 3.3 , NEMO Consortium (2010) 
    19    !! $Id: agrif_opa_sponge.F90 3294 2012-01-28 16:44:18Z rblod $ 
     21   !! $Id: agrif_opa_sponge.F90 3918 2013-06-13 10:50:37Z smasson $ 
    2022   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    2123   !!---------------------------------------------------------------------- 
     
    2729      !!   *** ROUTINE Agrif_Sponge_Tra *** 
    2830      !!--------------------------------------------- 
    29 #include "domzgr_substitute.h90" 
    3031      !! 
    3132      INTEGER :: ji,jj,jk,jn 
    32       INTEGER :: spongearea 
    3333      REAL(wp) :: timecoeff 
    3434      REAL(wp) :: ztsa, zabe1, zabe2, zbtr 
    35       REAL(wp), POINTER, DIMENSION(:,:    ) :: localviscsponge 
    3635      REAL(wp), POINTER, DIMENSION(:,:    ) :: ztu, ztv 
    3736      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztab 
     
    3938 
    4039#if defined SPONGE 
    41       CALL wrk_alloc( jpi, jpj, localviscsponge, ztu, ztv ) 
     40      CALL wrk_alloc( jpi, jpj, ztu, ztv ) 
    4241      CALL wrk_alloc( jpi, jpj, jpk, jpts, ztab, tsbdiff  ) 
    4342 
     
    5251      tsbdiff(:,:,:,:) = tsb(:,:,:,:) - ztab(:,:,:,:) 
    5352 
    54       spongearea = 2 + 2 * Agrif_irhox() 
    55  
    56       localviscsponge = 0. 
    57        
    58       IF (.NOT. spongedoneT) THEN 
    59          spe1ur(:,:) = 0. 
    60          spe2vr(:,:) = 0. 
    61  
    62       IF ((nbondi == -1).OR.(nbondi == 2)) THEN 
    63          DO ji = 2, spongearea 
    64             localviscsponge(ji,:) = visc_tra * (spongearea-ji)/real(spongearea-2) 
    65          ENDDO 
    66           
    67          spe1ur(2:spongearea-1,:)=0.5 * (localviscsponge(2:spongearea-1,:) + localviscsponge(3:spongearea,:)) & 
    68                * e2u(2:spongearea-1,:) / e1u(2:spongearea-1,:) 
    69  
    70          spe2vr(2:spongearea,1:jpjm1) = 0.5 * (localviscsponge(2:spongearea,1:jpjm1) + & 
    71                   localviscsponge(2:spongearea,2:jpj)) & 
    72                 * e1v(2:spongearea,1:jpjm1) / e2v(2:spongearea,1:jpjm1) 
    73       ENDIF 
    74  
    75       IF ((nbondi == 1).OR.(nbondi == 2)) THEN 
    76          DO ji = nlci-spongearea + 1,nlci-1 
    77             localviscsponge(ji,:) = visc_tra * (ji - (nlci-spongearea+1))/real(spongearea-2) 
    78          ENDDO 
    79           
    80          spe1ur(nlci-spongearea + 1:nlci-2,:)=0.5 * (localviscsponge(nlci-spongearea + 1:nlci-2,:) + & 
    81                 localviscsponge(nlci-spongearea + 2:nlci-1,:)) & 
    82                * e2u(nlci-spongearea + 1:nlci-2,:) / e1u(nlci-spongearea + 1:nlci-2,:) 
    83  
    84          spe2vr(nlci-spongearea + 1:nlci-1,1:jpjm1) = 0.5 * (localviscsponge(nlci-spongearea + 1:nlci-1,1:jpjm1) & 
    85                    + localviscsponge(nlci-spongearea + 1:nlci-1,2:jpj)) & 
    86                 * e1v(nlci-spongearea + 1:nlci-1,1:jpjm1) / e2v(nlci-spongearea + 1:nlci-1,1:jpjm1) 
    87       ENDIF 
    88  
    89  
    90       IF ((nbondj == -1).OR.(nbondj == 2)) THEN 
    91          DO jj = 2, spongearea 
    92             localviscsponge(:,jj) = visc_tra * (spongearea-jj)/real(spongearea-2) 
    93          ENDDO 
    94           
    95          spe1ur(1:jpim1,2:spongearea)=0.5 * (localviscsponge(1:jpim1,2:spongearea) + & 
    96                 localviscsponge(2:jpi,2:spongearea)) & 
    97                * e2u(1:jpim1,2:spongearea) / e1u(1:jpim1,2:spongearea) 
    98  
    99          spe2vr(:,2:spongearea-1) = 0.5 * (localviscsponge(:,2:spongearea-1) + & 
    100                   localviscsponge(:,3:spongearea)) & 
    101                 * e1v(:,2:spongearea-1) / e2v(:,2:spongearea-1) 
    102       ENDIF 
    103  
    104       IF ((nbondj == 1).OR.(nbondj == 2)) THEN 
    105          DO jj = nlcj-spongearea + 1,nlcj-1 
    106             localviscsponge(:,jj) = visc_tra * (jj - (nlcj-spongearea+1))/real(spongearea-2) 
    107          ENDDO 
    108           
    109          spe1ur(1:jpim1,nlcj-spongearea + 1:nlcj-1)=0.5 * (localviscsponge(1:jpim1,nlcj-spongearea + 1:nlcj-1) + & 
    110                  localviscsponge(2:jpi,nlcj-spongearea + 1:nlcj-1)) & 
    111                * e2u(1:jpim1,nlcj-spongearea + 1:nlcj-1) / e1u(1:jpim1,nlcj-spongearea + 1:nlcj-1) 
    112  
    113          spe2vr(:,nlcj-spongearea + 1:nlcj-2) = 0.5 * (localviscsponge(:,nlcj-spongearea + 1:nlcj-2) + & 
    114                  localviscsponge(:,nlcj-spongearea + 2:nlcj-1)) & 
    115                 * e1v(:,nlcj-spongearea + 1:nlcj-2) / e2v(:,nlcj-spongearea + 1:nlcj-2) 
    116       ENDIF 
    117        
    118          spbtr2(:,:) = 1. / ( e1t(:,:) * e2t(:,:)) 
    119  
    120          spongedoneT = .TRUE. 
    121       ENDIF 
     53      CALL Agrif_Sponge 
    12254 
    12355      DO jn = 1, jpts 
     
    14779      ENDDO 
    14880 
    149       CALL wrk_dealloc( jpi, jpj, localviscsponge, ztu, ztv ) 
     81      CALL wrk_dealloc( jpi, jpj, ztu, ztv ) 
    15082      CALL wrk_dealloc( jpi, jpj, jpk, jpts, ztab, tsbdiff  ) 
    15183#endif 
     
    15789      !!   *** ROUTINE Agrif_Sponge_dyn *** 
    15890      !!--------------------------------------------- 
    159 #include "domzgr_substitute.h90" 
    16091      !! 
    16192      INTEGER :: ji,jj,jk 
    162       INTEGER :: spongearea 
    16393      REAL(wp) :: timecoeff 
    16494      REAL(wp) :: ze2u, ze1v, zua, zva, zbtr 
    165       REAL(wp), POINTER, DIMENSION(:,:) :: localviscsponge 
    16695      REAL(wp), POINTER, DIMENSION(:,:,:) :: ubdiff, vbdiff 
    16796      REAL(wp), POINTER, DIMENSION(:,:,:) :: rotdiff, hdivdiff 
     
    16998 
    17099#if defined SPONGE 
    171       CALL wrk_alloc( jpi, jpj, localviscsponge ) 
    172100      CALL wrk_alloc( jpi, jpj, jpk, ztab, ubdiff, vbdiff, rotdiff, hdivdiff ) 
    173101 
     
    180108      Agrif_UseSpecialValue = .FALSE. 
    181109 
    182       ubdiff(:,:,:) = (ub(:,:,:) - ztab(:,:,:))*umask(:,:,:) 
     110      ubdiff(:,:,:) = ( ub(:,:,:) - ztab(:,:,:) ) * umask(:,:,:) 
    183111 
    184112      ztab = 0.e0 
     
    188116      Agrif_UseSpecialValue = .FALSE. 
    189117 
    190       vbdiff(:,:,:) = (vb(:,:,:) - ztab(:,:,:))*vmask(:,:,:) 
    191  
    192       spongearea = 2 + 2 * Agrif_irhox() 
    193  
    194       localviscsponge = 0. 
    195  
    196       IF (.NOT. spongedoneU) THEN 
    197          spe1ur2(:,:) = 0. 
    198          spe2vr2(:,:) = 0. 
    199  
    200       IF ((nbondi == -1).OR.(nbondi == 2)) THEN 
    201          DO ji = 2, spongearea 
    202             localviscsponge(ji,:) = visc_dyn * (spongearea-ji)/real(spongearea-2) 
    203          ENDDO 
    204           
    205          spe1ur2(2:spongearea-1,:)=0.5 * (localviscsponge(2:spongearea-1,:) + localviscsponge(3:spongearea,:)) 
    206  
    207          spe2vr2(2:spongearea,1:jpjm1) = 0.5 * (localviscsponge(2:spongearea,1:jpjm1) + & 
    208                   localviscsponge(2:spongearea,2:jpj)) 
    209       ENDIF 
    210  
    211       IF ((nbondi == 1).OR.(nbondi == 2)) THEN 
    212          DO ji = nlci-spongearea + 1,nlci-1 
    213             localviscsponge(ji,:) = visc_dyn * (ji - (nlci-spongearea+1))/real(spongearea-2) 
    214          ENDDO 
    215           
    216          spe1ur2(nlci-spongearea + 1:nlci-2,:)=0.5 * (localviscsponge(nlci-spongearea + 1:nlci-2,:) + & 
    217                 localviscsponge(nlci-spongearea + 2:nlci-1,:)) 
    218  
    219          spe2vr2(nlci-spongearea + 1:nlci-1,1:jpjm1) = 0.5 * (localviscsponge(nlci-spongearea + 1:nlci-1,1:jpjm1) & 
    220                    + localviscsponge(nlci-spongearea + 1:nlci-1,2:jpj)) 
    221       ENDIF 
    222  
    223  
    224       IF ((nbondj == -1).OR.(nbondj == 2)) THEN 
    225          DO jj = 2, spongearea 
    226             localviscsponge(:,jj) = visc_dyn * (spongearea-jj)/real(spongearea-2) 
    227          ENDDO 
    228           
    229          spe1ur2(1:jpim1,2:spongearea)=0.5 * (localviscsponge(1:jpim1,2:spongearea) + & 
    230                 localviscsponge(2:jpi,2:spongearea)) 
    231  
    232          spe2vr2(:,2:spongearea-1) = 0.5 * (localviscsponge(:,2:spongearea-1) + & 
    233                   localviscsponge(:,3:spongearea)) 
    234       ENDIF 
    235  
    236       IF ((nbondj == 1).OR.(nbondj == 2)) THEN 
    237          DO jj = nlcj-spongearea + 1,nlcj-1 
    238             localviscsponge(:,jj) = visc_dyn * (jj - (nlcj-spongearea+1))/real(spongearea-2) 
    239          ENDDO 
    240           
    241          spe1ur2(1:jpim1,nlcj-spongearea + 1:nlcj-1)=0.5 * (localviscsponge(1:jpim1,nlcj-spongearea + 1:nlcj-1) + & 
    242                  localviscsponge(2:jpi,nlcj-spongearea + 1:nlcj-1)) 
    243  
    244          spe2vr2(:,nlcj-spongearea + 1:nlcj-2) = 0.5 * (localviscsponge(:,nlcj-spongearea + 1:nlcj-2) + & 
    245                  localviscsponge(:,nlcj-spongearea + 2:nlcj-1)) 
    246       ENDIF 
    247  
    248          spongedoneU = .TRUE. 
    249           
    250           spbtr3(:,:) = 1./( e1f(:,:) * e2f(:,:)) 
    251       ENDIF 
    252        
    253       IF (.NOT. spongedoneT) THEN 
    254         spbtr2(:,:) = 1. / ( e1t(:,:) * e2t(:,:))       
    255       ENDIF 
    256        
    257       DO jk=1,jpkm1 
    258       ubdiff(:,:,jk) = ubdiff(:,:,jk) * spe1ur2(:,:) 
    259       vbdiff(:,:,jk) = vbdiff(:,:,jk) * spe2vr2(:,:) 
     118      vbdiff(:,:,:) = ( vb(:,:,:) - ztab(:,:,:) ) * vmask(:,:,:) 
     119 
     120      CALL Agrif_Sponge 
     121 
     122      DO jk = 1,jpkm1 
     123         ubdiff(:,:,jk) = ubdiff(:,:,jk) * spe1ur2(:,:) 
     124         vbdiff(:,:,jk) = vbdiff(:,:,jk) * spe2vr2(:,:) 
    260125      ENDDO 
    261126       
     
    272137            DO ji = 2, jpim1   ! vector opt. 
    273138               zbtr = spbtr2(ji,jj) / fse3t(ji,jj,jk) 
    274                hdivdiff(ji,jj,jk) =   & 
    275                   (  e2u(ji,jj)*fse3u(ji,jj,jk) * &  
    276                   ubdiff(ji,jj,jk) - e2u(ji-1,jj  )* & 
    277                   fse3u(ji-1,jj  ,jk)  * ubdiff(ji-1,jj  ,jk)       & 
    278                   + e1v(ji,jj)*fse3v(ji,jj,jk) * & 
    279                   vbdiff(ji,jj,jk) - e1v(ji  ,jj-1)* & 
    280                   fse3v(ji  ,jj-1,jk)  * vbdiff(ji  ,jj-1,jk)  ) * zbtr 
     139               hdivdiff(ji,jj,jk) =  (  e2u(ji  ,jj  ) * fse3u(ji  ,jj  ,jk) * ubdiff(ji  ,jj  ,jk)     & 
     140                  &                   - e2u(ji-1,jj  ) * fse3u(ji-1,jj  ,jk) * ubdiff(ji-1,jj  ,jk)     & 
     141                  &                   + e1v(ji  ,jj  ) * fse3v(ji  ,jj  ,jk) * vbdiff(ji  ,jj  ,jk)     & 
     142                  &                   - e1v(ji  ,jj-1) * fse3v(ji  ,jj-1,jk) * vbdiff(ji  ,jj-1,jk)  ) * zbtr 
    281143            END DO 
    282144         END DO 
     
    286148               zbtr = spbtr3(ji,jj) * fse3f(ji,jj,jk) 
    287149               rotdiff(ji,jj,jk) = (  e2v(ji+1,jj  ) * vbdiff(ji+1,jj  ,jk) - e2v(ji,jj) * vbdiff(ji,jj,jk)    & 
    288                   &              - e1u(ji  ,jj+1) * ubdiff(ji  ,jj+1,jk) + e1u(ji,jj) * ubdiff(ji,jj,jk)  ) & 
    289                   &           * fmask(ji,jj,jk) * zbtr 
     150                  &                 - e1u(ji  ,jj+1) * ubdiff(ji  ,jj+1,jk) + e1u(ji,jj) * ubdiff(ji,jj,jk)  ) & 
     151                  &               * fmask(ji,jj,jk) * zbtr 
    290152            END DO 
    291153         END DO 
     
    298160         DO jj = 2, jpjm1 
    299161            DO ji = 2, jpim1   ! vector opt. 
    300                ze2u = rotdiff (ji,jj,jk) 
    301                ze1v = hdivdiff(ji,jj,jk) 
    302162               ! horizontal diffusive trends 
    303                zua = - ( ze2u - rotdiff (ji,jj-1,jk)) / ( e2u(ji,jj) * fse3u(ji,jj,jk) )   & 
    304                   + ( hdivdiff(ji+1,jj,jk) - ze1v      & 
    305                   ) / e1u(ji,jj) 
    306  
    307                zva = + ( ze2u - rotdiff (ji-1,jj,jk)) / ( e1v(ji,jj) * fse3v(ji,jj,jk) )   & 
    308                   + ( hdivdiff(ji,jj+1,jk) - ze1v    & 
    309                   ) / e2v(ji,jj) 
    310  
     163               zua = - ( rotdiff (ji  ,jj,jk) - rotdiff (ji,jj-1,jk) ) / ( e2u(ji,jj) * fse3u(ji,jj,jk) )   & 
     164                     + ( hdivdiff(ji+1,jj,jk) - hdivdiff(ji,jj  ,jk) ) / e1u(ji,jj) 
     165 
     166               zva = + ( rotdiff (ji,jj  ,jk) - rotdiff (ji-1,jj,jk) ) / ( e1v(ji,jj) * fse3v(ji,jj,jk) )   & 
     167                     + ( hdivdiff(ji,jj+1,jk) - hdivdiff(ji  ,jj,jk) ) / e2v(ji,jj) 
    311168               ! add it to the general momentum trends 
    312169               ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
     
    317174      END DO                                           !   End of slab 
    318175      !                                                ! =============== 
    319       CALL wrk_dealloc( jpi, jpj, localviscsponge ) 
    320176      CALL wrk_dealloc( jpi, jpj, jpk, ztab, ubdiff, vbdiff, rotdiff, hdivdiff ) 
    321  
    322177#endif 
    323178 
    324179   END SUBROUTINE Agrif_Sponge_dyn 
    325180 
     181   SUBROUTINE Agrif_Sponge 
     182      !!--------------------------------------------- 
     183      !!   *** ROUTINE  Agrif_Sponge *** 
     184      !!--------------------------------------------- 
     185      INTEGER  :: ji,jj,jk 
     186      INTEGER  :: ispongearea, ilci, ilcj 
     187      REAL(wp) :: z1spongearea, zsponge, zcoef 
     188      REAL(wp), POINTER, DIMENSION(:,:) :: zlocalviscsponge 
     189 
     190#if defined SPONGE || defined SPONGE_TOP 
     191      CALL wrk_alloc( jpi, jpj, zlocalviscsponge ) 
     192 
     193      IF (( .NOT. spongedoneT ).OR.( .NOT. spongedoneU )) THEN 
     194         ! Define sponge at T-points everywhere first 
     195 
     196         ispongearea  = 2 + 2 * Agrif_irhox() 
     197         ilci = nlci - ispongearea 
     198         ilcj = nlcj - ispongearea  
     199         z1spongearea = 1._wp / REAL( ispongearea - 2 ) 
     200         spbtr2(:,:) = 1. / ( e1t(:,:) * e2t(:,:) ) 
     201 
     202         zlocalviscsponge(:,:) = 0. 
     203 
     204         IF( (nbondi == -1) .OR. (nbondi == 2) ) THEN 
     205            DO jj = 1, jpj 
     206               IF ( umask(2,jj,1) == 1._wp ) THEN 
     207                 DO ji = 2, ispongearea                   
     208                    zlocalviscsponge(ji,jj) = ( ispongearea-ji ) * z1spongearea 
     209                 END DO 
     210               ENDIF 
     211            ENDDO 
     212         ENDIF 
     213 
     214         IF( (nbondi == 1) .OR. (nbondi == 2) ) THEN 
     215            DO jj = 1, jpj 
     216               IF ( umask(nlci-2,jj,1) == 1._wp ) THEN 
     217                  DO ji = ilci+1,nlci-1 
     218                     zsponge = (ji - (ilci+1) ) * z1spongearea 
     219                     zlocalviscsponge(ji,jj) = MAX( zlocalviscsponge(ji,jj), zsponge ) 
     220                  ENDDO 
     221               ENDIF 
     222            ENDDO 
     223         ENDIF 
     224 
     225         IF( (nbondj == -1) .OR. (nbondj == 2) ) THEN 
     226            DO ji = 1, jpi 
     227               IF ( vmask(ji,2,1) == 1._wp ) THEN 
     228                  DO jj = 2, ispongearea 
     229                     zsponge = ( ispongearea-jj ) * z1spongearea 
     230                     zlocalviscsponge(ji,jj) = MAX( zlocalviscsponge(ji,jj), zsponge ) 
     231                  END DO 
     232               ENDIF 
     233            ENDDO 
     234         ENDIF 
     235 
     236         IF( (nbondj == 1) .OR. (nbondj == 2) ) THEN 
     237            DO ji = 1, jpi 
     238               IF ( vmask(ji,nlcj-2,1) == 1._wp ) THEN 
     239                  DO jj = ilcj+1,nlcj-1 
     240                     zsponge = (jj - (ilcj+1) ) * z1spongearea 
     241                     zlocalviscsponge(ji,jj) = MAX( zlocalviscsponge(ji,jj), zsponge ) 
     242                  END DO 
     243               ENDIF 
     244            ENDDO 
     245         ENDIF 
     246 
     247      ENDIF 
     248 
     249      ! Tracers 
     250      IF( .NOT. spongedoneT ) THEN 
     251         zcoef = 0.5 * visc_tra 
     252         spe1ur(:,:) = 0. 
     253         spe2vr(:,:) = 0. 
     254 
     255         IF( (nbondi == -1) .OR. (nbondi == 2) ) THEN 
     256            spe1ur(2:ispongearea-1,:      ) = zcoef * ( zlocalviscsponge(2:ispongearea-1,:      )   & 
     257               &                         +              zlocalviscsponge(3:ispongearea  ,:      ) ) & 
     258               &                         * e2u(2:ispongearea-1,:      ) / e1u(2:ispongearea-1,:      ) 
     259            spe2vr(2:ispongearea  ,1:jpjm1) = zcoef * ( zlocalviscsponge(2:ispongearea  ,1:jpjm1)   & 
     260               &                         +              zlocalviscsponge(2:ispongearea,2  :jpj  ) ) & 
     261               &                         * e1v(2:ispongearea  ,1:jpjm1) / e2v(2:ispongearea  ,1:jpjm1) 
     262         ENDIF 
     263 
     264         IF( (nbondi == 1) .OR. (nbondi == 2) ) THEN 
     265            spe1ur(ilci+1:nlci-2,:      ) = zcoef * (  zlocalviscsponge(ilci+1:nlci-2,:)    &  
     266               &                          +            zlocalviscsponge(ilci+2:nlci-1,:) )  & 
     267               &                          * e2u(ilci+1:nlci-2,:) / e1u(ilci+1:nlci-2,:) 
     268 
     269            spe2vr(ilci+1:nlci-1,1:jpjm1) = zcoef * (  zlocalviscsponge(ilci+1:nlci-1,1:jpjm1)    &  
     270               &                            +          zlocalviscsponge(ilci+1:nlci-1,2:jpj  )  ) &  
     271               &                                   * e1v(ilci+1:nlci-1,1:jpjm1) / e2v(ilci+1:nlci-1,1:jpjm1) 
     272         ENDIF 
     273 
     274         IF( (nbondj == -1) .OR. (nbondj == 2) ) THEN 
     275            spe1ur(1:jpim1,2:ispongearea  ) = zcoef * ( zlocalviscsponge(1:jpim1,2:ispongearea  ) &  
     276               &                            +           zlocalviscsponge(2:jpi  ,2:ispongearea) ) & 
     277               &                            * e2u(1:jpim1,2:ispongearea) / e1u(1:jpim1,2:ispongearea) 
     278    
     279            spe2vr(:      ,2:ispongearea-1) = zcoef * ( zlocalviscsponge(:,2:ispongearea-1)       & 
     280               &                            +           zlocalviscsponge(:,3:ispongearea  )     ) & 
     281               &                            * e1v(:,2:ispongearea-1) / e2v(:,2:ispongearea-1) 
     282         ENDIF 
     283 
     284         IF( (nbondj == 1) .OR. (nbondj == 2) ) THEN 
     285            spe1ur(1:jpim1,ilcj+1:nlcj-1) = zcoef * ( zlocalviscsponge(1:jpim1,ilcj+1:nlcj-1)   & 
     286               &                          +           zlocalviscsponge(2:jpi  ,ilcj+1:nlcj-1) ) & 
     287               &                                * e2u(1:jpim1,ilcj+1:nlcj-1) / e1u(1:jpim1,ilcj+1:nlcj-1) 
     288            spe2vr(:      ,ilcj+1:nlcj-2) = zcoef * ( zlocalviscsponge(:,ilcj+1:nlcj-2      )   & 
     289               &                          +           zlocalviscsponge(:,ilcj+2:nlcj-1)     )   & 
     290               &                                * e1v(:,ilcj+1:nlcj-2) / e2v(:,ilcj+1:nlcj-2) 
     291         ENDIF 
     292         spongedoneT = .TRUE. 
     293      ENDIF 
     294 
     295      ! Dynamics 
     296      IF( .NOT. spongedoneU ) THEN 
     297         zcoef = 0.5 * visc_dyn 
     298         spe1ur2(:,:) = 0. 
     299         spe2vr2(:,:) = 0. 
     300 
     301         IF( (nbondi == -1) .OR. (nbondi == 2) ) THEN 
     302            spe1ur2(2:ispongearea-1,:      ) = zcoef * ( zlocalviscsponge(2:ispongearea-1,:      ) & 
     303                                             &     +     zlocalviscsponge(3:ispongearea,:    ) ) 
     304            spe2vr2(2:ispongearea  ,1:jpjm1) = zcoef * ( zlocalviscsponge(2:ispongearea  ,1:jpjm1) & 
     305                                             &     +     zlocalviscsponge(2:ispongearea,2:jpj) )  
     306         ENDIF 
     307 
     308         IF( (nbondi == 1) .OR. (nbondi == 2) ) THEN 
     309            spe1ur2(ilci+1:nlci-2,:      ) = zcoef * (  zlocalviscsponge(ilci+1:nlci-2,:) & 
     310                                           &        +   zlocalviscsponge(ilci+2:nlci-1,:) )   
     311            spe2vr2(ilci+1:nlci-1,1:jpjm1) = zcoef * (  zlocalviscsponge(ilci+1:nlci-1,1:jpjm1) & 
     312                                           &        +   zlocalviscsponge(ilci+1:nlci-1,2:jpj  )  )  
     313         ENDIF 
     314 
     315         IF( (nbondj == -1) .OR. (nbondj == 2) ) THEN 
     316            spe1ur2(1:jpim1,2:ispongearea  ) = zcoef * ( zlocalviscsponge(1:jpim1,2:ispongearea) & 
     317                                             &      +    zlocalviscsponge(2:jpi,2:ispongearea) )  
     318            spe2vr2(:      ,2:ispongearea-1) = zcoef * ( zlocalviscsponge(:,2:ispongearea-1)     & 
     319                                             &      +    zlocalviscsponge(:,3:ispongearea)     ) 
     320         ENDIF 
     321 
     322         IF( (nbondj == 1) .OR. (nbondj == 2) ) THEN 
     323            spe1ur2(1:jpim1,ilcj+1:nlcj-1) = zcoef * ( zlocalviscsponge(1:jpim1,ilcj+1:nlcj-1) & 
     324                                           &         + zlocalviscsponge(2:jpi,ilcj+1:nlcj-1) )  
     325            spe2vr2(:      ,ilcj+1:nlcj-2) = zcoef * ( zlocalviscsponge(:,ilcj+1:nlcj-2      ) & 
     326                                           &         + zlocalviscsponge(:,ilcj+2:nlcj-1)     ) 
     327         ENDIF 
     328         spongedoneU = .TRUE. 
     329         spbtr3(:,:) = 1. / ( e1f(:,:) * e2f(:,:) ) 
     330      ENDIF 
     331      ! 
     332      CALL wrk_dealloc( jpi, jpj, zlocalviscsponge ) 
     333      ! 
     334#endif 
     335 
     336   END SUBROUTINE Agrif_Sponge 
     337 
    326338   SUBROUTINE interptsn(tabres,i1,i2,j1,j2,k1,k2,n1,n2) 
    327339      !!--------------------------------------------- 
    328340      !!   *** ROUTINE interptsn *** 
    329341      !!--------------------------------------------- 
    330 #  include "domzgr_substitute.h90"        
    331        
    332342      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2 
    333343      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 
     
    341351      !!   *** ROUTINE interpun *** 
    342352      !!--------------------------------------------- 
    343 #  include "domzgr_substitute.h90"        
    344        
    345353      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 
    346354      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres 
     
    354362      !!   *** ROUTINE interpvn *** 
    355363      !!--------------------------------------------- 
    356 #  include "domzgr_substitute.h90"        
    357        
    358364      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 
    359365      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres 
Note: See TracChangeset for help on using the changeset viewer.