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 9976 for NEMO/branches/2018/dev_r9956_ENHANCE05_ZAD_AIMP/src/OCE/DYN/dynzdf.F90 – NEMO

Ignore:
Timestamp:
2018-07-19T17:58:12+02:00 (6 years ago)
Author:
acc
Message:

Branch: dev_r9956_ENHANCE05_ZAD_AIMP. First set of changes to implement an adaptive-implicit vertical advection option (see ticket #2042). This code compiles and runs but has issues when the new option is activated.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r9956_ENHANCE05_ZAD_AIMP/src/OCE/DYN/dynzdf.F90

    r9957 r9976  
    7171      REAL(wp) ::   zzwi, ze3ua, zdt   ! local scalars 
    7272      REAL(wp) ::   zzws, ze3va        !   -      - 
     73      REAL(wp) ::   z1_e3un, z1_e3vn   !   -      - 
     74      REAL(wp) ::   zWu , zWv          !   -      - 
     75      REAL(wp) ::   zWui, zWvi         !   -      - 
     76      REAL(wp) ::   zWus, zWvs         !   -      - 
    7377      REAL(wp), DIMENSION(jpi,jpj,jpk)        ::  zwi, zwd, zws   ! 3D workspace  
    7478      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrdu, ztrdv   !  -      - 
     
    155159      !                    !* Matrix construction 
    156160      zdt = r2dt * 0.5 
    157       SELECT CASE( nldf_dyn ) 
    158       CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzu) 
    159          DO jk = 1, jpkm1 
    160             DO jj = 2, jpjm1  
    161                DO ji = fs_2, fs_jpim1   ! vector opt. 
    162                   ze3ua =  ( 1._wp - r_vvl ) * e3u_n(ji,jj,jk) + r_vvl * e3u_a(ji,jj,jk)   ! after scale factor at T-point 
    163                   zzwi = - zdt * ( avm(ji+1,jj,jk  ) + avm(ji,jj,jk  ) + akzu(ji,jj,jk  ) )   & 
    164                      &         / ( ze3ua * e3uw_n(ji,jj,jk  ) ) * wumask(ji,jj,jk  ) 
    165                   zzws = - zdt * ( avm(ji+1,jj,jk+1) + avm(ji,jj,jk+1) + akzu(ji,jj,jk+1) )   & 
    166                      &         / ( ze3ua * e3uw_n(ji,jj,jk+1) ) * wumask(ji,jj,jk+1) 
    167                   zwi(ji,jj,jk) = zzwi 
    168                   zws(ji,jj,jk) = zzws 
    169                   zwd(ji,jj,jk) = 1._wp - zzwi - zzws 
    170                END DO 
    171             END DO 
    172          END DO 
    173       CASE DEFAULT               ! iso-level lateral mixing 
    174          DO jk = 1, jpkm1 
    175             DO jj = 2, jpjm1  
    176                DO ji = fs_2, fs_jpim1   ! vector opt. 
    177                   ze3ua =  ( 1._wp - r_vvl ) * e3u_n(ji,jj,jk) + r_vvl * e3u_a(ji,jj,jk)   ! after scale factor at T-point 
    178                   zzwi = - zdt * ( avm(ji+1,jj,jk  ) + avm(ji,jj,jk  ) ) / ( ze3ua * e3uw_n(ji,jj,jk  ) ) * wumask(ji,jj,jk  ) 
    179                   zzws = - zdt * ( avm(ji+1,jj,jk+1) + avm(ji,jj,jk+1) ) / ( ze3ua * e3uw_n(ji,jj,jk+1) ) * wumask(ji,jj,jk+1) 
    180                   zwi(ji,jj,jk) = zzwi 
    181                   zws(ji,jj,jk) = zzws 
    182                   zwd(ji,jj,jk) = 1._wp - zzwi - zzws 
    183                END DO 
    184             END DO 
    185          END DO 
    186       END SELECT 
     161      IF( ln_zad_Aimp ) THEN   !! 
     162         IF( ln_dynadv_vec ) THEN      !==  Vector invariant advection  ==! 
     163            SELECT CASE( nldf_dyn ) 
     164            CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzu) 
     165               DO jk = 1, jpkm1 
     166                  DO jj = 2, jpjm1  
     167                     DO ji = fs_2, fs_jpim1   ! vector opt. 
     168                        z1_e3un = 1._wp / e3u_n(ji,jj,jk) 
     169                        zzwi = ( ( avm   (ji+1,jj,jk  ) + avm   (ji,jj,jk  ) + akzu(ji,jj,jk  ) )   & 
     170                           &     / e3uw_a(ji  ,jj,jk  ) ) * z1_e3un * wumask(ji,jj,jk  ) 
     171                        zzws = ( ( avm   (ji+1,jj,jk+1) + avm   (ji,jj,jk+1) + akzu(ji,jj,jk+1) )   & 
     172                           &     / e3uw_a(ji  ,jj,jk+1) ) * z1_e3un * wumask(ji,jj,jk+1) 
     173                        zWu  = 0.25_wp * (   wi(ji,jj,jk  ) + wi(ji+1,jj,jk  )   & 
     174                           &               + wi(ji,jj,jk+1) + wi(ji+1,jj,jk+1)   ) 
     175                        zwi(ji,jj,jk) = - zdt * ( zzwi + MIN( zWu, 0._wp ) * z1_e3un ) 
     176                        zws(ji,jj,jk) = - zdt * ( zzws - MAX( zWu, 0._wp ) * z1_e3un ) 
     177                        zwd(ji,jj,jk) = 1._wp + zdt * ( zzwi + zzws + ( - MAX( zWu, 0._wp ) + MIN( zWu, 0._wp ) ) * z1_e3un ) 
     178                     END DO 
     179                  END DO 
     180               END DO 
     181            CASE DEFAULT               ! iso-level lateral mixing 
     182               DO jk = 1, jpkm1 
     183                  DO jj = 2, jpjm1  
     184                     DO ji = fs_2, fs_jpim1   ! vector opt. 
     185                        z1_e3un = 1._wp / e3u_n(ji,jj,jk) 
     186                        zzwi = ( ( avm   (ji+1,jj,jk  ) + avm(ji,jj,jk  ) )   & 
     187                           &     / e3uw_a(ji  ,jj,jk  ) ) * z1_e3un * wumask(ji,jj,jk  ) 
     188                        zzws = ( ( avm   (ji+1,jj,jk+1) + avm(ji,jj,jk+1) )   & 
     189                           &     / e3uw_a(ji  ,jj,jk+1) ) * z1_e3un * wumask(ji,jj,jk+1) 
     190                        zWu  = 0.25_wp * (   wi(ji,jj,jk  ) + wi(ji+1,jj,jk  )   & 
     191                           &               + wi(ji,jj,jk+1) + wi(ji+1,jj,jk+1)   ) 
     192                        zwi(ji,jj,jk) = - zdt * ( zzwi + MIN( zWu, 0._wp ) * z1_e3un ) 
     193                        zws(ji,jj,jk) = - zdt * ( zzws - MAX( zWu, 0._wp ) * z1_e3un ) 
     194                        zwd(ji,jj,jk) = 1._wp + zdt * ( zzwi + zzws + ( - MAX( zWu, 0._wp ) + MIN( zWu, 0._wp ) ) * z1_e3un ) 
     195                     END DO 
     196                  END DO 
     197               END DO 
     198            END SELECT 
     199         ELSE                          !==  Flux form advection  ==! 
     200            SELECT CASE( nldf_dyn ) 
     201            CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzu) 
     202               DO jk = 1, jpkm1 
     203                  DO jj = 2, jpjm1  
     204                     DO ji = fs_2, fs_jpim1   ! vector opt. 
     205                        ze3ua =  ( 1._wp - r_vvl ) * e3u_n(ji,jj,jk) + r_vvl * e3u_a(ji,jj,jk)   ! after scale factor at U-point 
     206                        zzwi = ( avm(ji+1,jj,jk  ) + avm(ji,jj,jk  ) + akzu(ji,jj,jk  ) )   & 
     207                           &         / ( ze3ua * e3uw_a(ji,jj,jk  ) ) * wumask(ji,jj,jk  ) 
     208                        zzws = ( avm(ji+1,jj,jk+1) + avm(ji,jj,jk+1) + akzu(ji,jj,jk+1) )   & 
     209                           &         / ( ze3ua * e3uw_a(ji,jj,jk+1) ) * wumask(ji,jj,jk+1) 
     210                        zWui = 0.5_wp * ( wi(ji,jj,jk  ) + wi(ji+1,jj,jk  ) ) 
     211                        zWus = 0.5_wp * ( wi(ji,jj,jk+1) + wi(ji+1,jj,jk+1) ) 
     212                        zwi(ji,jj,jk) = - zdt * ( zzwi +  MIN( zWui, 0._wp ) )  
     213                        zws(ji,jj,jk) = - zdt * ( zzws -  MAX( zWus, 0._wp ) ) 
     214                        zwd(ji,jj,jk) = 1._wp + zdt * ( zzwi + zzws - MAX( zWui, 0._wp ) + MIN( zWus, 0._wp ) ) 
     215                     END DO 
     216                  END DO 
     217               END DO 
     218            CASE DEFAULT               ! iso-level lateral mixing 
     219               DO jk = 1, jpkm1 
     220                  DO jj = 2, jpjm1  
     221                     DO ji = fs_2, fs_jpim1   ! vector opt. 
     222                        ze3ua =  ( 1._wp - r_vvl ) * e3u_n(ji,jj,jk) + r_vvl * e3u_a(ji,jj,jk)   ! after scale factor at U-point 
     223                        zzwi = ( avm(ji+1,jj,jk  ) + avm(ji,jj,jk  ) ) / ( ze3ua * e3uw_a(ji,jj,jk  ) ) * wumask(ji,jj,jk  ) 
     224                        zzws = ( avm(ji+1,jj,jk+1) + avm(ji,jj,jk+1) ) / ( ze3ua * e3uw_a(ji,jj,jk+1) ) * wumask(ji,jj,jk+1) 
     225                        zWui = 0.5_wp * ( wi(ji,jj,jk  ) + wi(ji+1,jj,jk  ) ) 
     226                        zWus = 0.5_wp * ( wi(ji,jj,jk+1) + wi(ji+1,jj,jk+1) ) 
     227                        zwi(ji,jj,jk) = - zdt * ( zzwi +  MIN( zWui, 0._wp ) )  
     228                        zws(ji,jj,jk) = - zdt * ( zzws -  MAX( zWus, 0._wp ) ) 
     229                        zwd(ji,jj,jk) = 1._wp + zdt * ( zzwi + zzws - MAX( zWui, 0._wp ) + MIN( zWus, 0._wp ) ) 
     230                     END DO 
     231                  END DO 
     232               END DO 
     233            END SELECT 
     234         ENDIF 
     235      ELSE 
     236         SELECT CASE( nldf_dyn ) 
     237         CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzu) 
     238            DO jk = 1, jpkm1 
     239               DO jj = 2, jpjm1  
     240                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     241                     ze3ua =  ( 1._wp - r_vvl ) * e3u_n(ji,jj,jk) + r_vvl * e3u_a(ji,jj,jk)   ! after scale factor at U-point 
     242                     zzwi = - zdt * ( avm(ji+1,jj,jk  ) + avm(ji,jj,jk  ) + akzu(ji,jj,jk  ) )   & 
     243                        &         / ( ze3ua * e3uw_a(ji,jj,jk  ) ) * wumask(ji,jj,jk  ) 
     244                     zzws = - zdt * ( avm(ji+1,jj,jk+1) + avm(ji,jj,jk+1) + akzu(ji,jj,jk+1) )   & 
     245                        &         / ( ze3ua * e3uw_a(ji,jj,jk+1) ) * wumask(ji,jj,jk+1) 
     246                     zwi(ji,jj,jk) = zzwi 
     247                     zws(ji,jj,jk) = zzws 
     248                     zwd(ji,jj,jk) = 1._wp - zzwi - zzws 
     249                  END DO 
     250               END DO 
     251            END DO 
     252         CASE DEFAULT               ! iso-level lateral mixing 
     253            DO jk = 1, jpkm1 
     254               DO jj = 2, jpjm1  
     255                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     256                     ze3ua =  ( 1._wp - r_vvl ) * e3u_n(ji,jj,jk) + r_vvl * e3u_a(ji,jj,jk)   ! after scale factor at U-point 
     257                     zzwi = - zdt * ( avm(ji+1,jj,jk  ) + avm(ji,jj,jk  ) ) / ( ze3ua * e3uw_a(ji,jj,jk  ) ) * wumask(ji,jj,jk  ) 
     258                     zzws = - zdt * ( avm(ji+1,jj,jk+1) + avm(ji,jj,jk+1) ) / ( ze3ua * e3uw_a(ji,jj,jk+1) ) * wumask(ji,jj,jk+1) 
     259                     zwi(ji,jj,jk) = zzwi 
     260                     zws(ji,jj,jk) = zzws 
     261                     zwd(ji,jj,jk) = 1._wp - zzwi - zzws 
     262                  END DO 
     263               END DO 
     264            END DO 
     265         END SELECT 
     266      ENDIF 
    187267      ! 
    188268      DO jj = 2, jpjm1     !* Surface boundary conditions 
     
    274354      !                       !* Matrix construction 
    275355      zdt = r2dt * 0.5 
    276       SELECT CASE( nldf_dyn ) 
    277       CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzu) 
    278          DO jk = 1, jpkm1 
    279             DO jj = 2, jpjm1    
    280                DO ji = fs_2, fs_jpim1   ! vector opt. 
    281                   ze3va =  ( 1._wp - r_vvl ) * e3v_n(ji,jj,jk) + r_vvl * e3v_a(ji,jj,jk)   ! after scale factor at T-point 
    282                   zzwi = - zdt * ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) + akzv(ji,jj,jk  ) )   & 
    283                      &         / ( ze3va * e3vw_n(ji,jj,jk  ) ) * wvmask(ji,jj,jk  ) 
    284                   zzws = - zdt * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) + akzv(ji,jj,jk+1) )   & 
    285                      &         / ( ze3va * e3vw_n(ji,jj,jk+1) ) * wvmask(ji,jj,jk+1) 
    286                   zwi(ji,jj,jk) = zzwi * wvmask(ji,jj,jk  ) 
    287                   zws(ji,jj,jk) = zzws * wvmask(ji,jj,jk+1) 
    288                   zwd(ji,jj,jk) = 1._wp - zzwi - zzws 
    289                END DO 
    290             END DO 
    291          END DO 
    292       CASE DEFAULT               ! iso-level lateral mixing 
    293          DO jk = 1, jpkm1 
    294             DO jj = 2, jpjm1    
    295                DO ji = fs_2, fs_jpim1   ! vector opt. 
    296                   ze3va =  ( 1._wp - r_vvl ) * e3v_n(ji,jj,jk) + r_vvl * e3v_a(ji,jj,jk)   ! after scale factor at T-point 
    297                   zzwi = - zdt * ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) ) / ( ze3va * e3vw_n(ji,jj,jk  ) ) * wvmask(ji,jj,jk  ) 
    298                   zzws = - zdt * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) ) / ( ze3va * e3vw_n(ji,jj,jk+1) ) * wvmask(ji,jj,jk+1) 
    299                   zwi(ji,jj,jk) = zzwi * wvmask(ji,jj,jk  ) 
    300                   zws(ji,jj,jk) = zzws * wvmask(ji,jj,jk+1) 
    301                   zwd(ji,jj,jk) = 1._wp - zzwi - zzws 
    302                END DO 
    303             END DO 
    304          END DO 
    305       END SELECT 
     356      IF( ln_zad_Aimp ) THEN   !! 
     357         IF( ln_dynadv_vec ) THEN      !==  Vector invariant advection  ==! 
     358            SELECT CASE( nldf_dyn ) 
     359            CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzv) 
     360               DO jk = 1, jpkm1 
     361                  DO jj = 2, jpjm1  
     362                     DO ji = fs_2, fs_jpim1   ! vector opt. 
     363                        z1_e3vn = 1._wp / e3v_n(ji,jj,jk) 
     364                        zzwi = ( ( avm   (ji,jj+1,jk  ) + avm   (ji,jj,jk  ) + akzv(ji,jj,jk  ) )   & 
     365                           &     / e3vw_a(ji,jj  ,jk  ) ) * z1_e3vn * wvmask(ji,jj,jk  ) 
     366                        zzws = ( ( avm   (ji,jj+1,jk+1) + avm   (ji,jj,jk+1) + akzv(ji,jj,jk+1) )   & 
     367                           &     / e3vw_a(ji,jj  ,jk+1) ) * z1_e3vn * wvmask(ji,jj,jk+1) 
     368                        zWv  = 0.25_wp * (   wi(ji,jj,jk  ) + wi(ji,jj+1,jk  )   & 
     369                           &               + wi(ji,jj,jk+1) + wi(ji,jj+1,jk+1)   ) 
     370                        zwi(ji,jj,jk) = - zdt * ( zzwi + MIN( zWv, 0._wp ) * z1_e3vn ) 
     371                        zws(ji,jj,jk) = - zdt * ( zzws - MAX( zWv, 0._wp ) * z1_e3vn ) 
     372                        zwd(ji,jj,jk) = 1._wp + zdt * ( zzwi + zzws + ( - MAX( zWv, 0._wp ) + MIN( zWv, 0._wp ) ) * z1_e3vn ) 
     373                     END DO 
     374                  END DO 
     375               END DO 
     376            CASE DEFAULT               ! iso-level lateral mixing 
     377               DO jk = 1, jpkm1 
     378                  DO jj = 2, jpjm1  
     379                     DO ji = fs_2, fs_jpim1   ! vector opt. 
     380                        z1_e3vn = 1._wp / e3v_n(ji,jj,jk) 
     381                        zzwi = ( ( avm   (ji,jj+1,jk  ) + avm(ji,jj,jk  ) )   & 
     382                           &     / e3vw_a(ji,jj  ,jk  ) ) * z1_e3vn * wvmask(ji,jj,jk  ) 
     383                        zzws = ( ( avm   (ji,jj+1,jk+1) + avm(ji,jj,jk+1) )   & 
     384                           &     / e3vw_a(ji  ,jj,jk+1) ) * z1_e3vn * wvmask(ji,jj,jk+1) 
     385                        zWv  = 0.25_wp * (   wi(ji,jj,jk  ) + wi(ji,jj+1,jk  )   & 
     386                           &               + wi(ji,jj,jk+1) + wi(ji,jj+1,jk+1)   ) 
     387                        zwi(ji,jj,jk) = - zdt * ( zzwi + MIN( zWv, 0._wp ) * z1_e3vn ) 
     388                        zws(ji,jj,jk) = - zdt * ( zzws - MAX( zWv, 0._wp ) * z1_e3vn ) 
     389                        zwd(ji,jj,jk) = 1._wp + zdt * ( zzwi + zzws + ( - MAX( zWv, 0._wp ) + MIN( zWv, 0._wp ) ) * z1_e3vn ) 
     390                     END DO 
     391                  END DO 
     392               END DO 
     393            END SELECT 
     394         ELSE                          !==  Flux form advection  ==! 
     395            SELECT CASE( nldf_dyn ) 
     396            CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzv) 
     397               DO jk = 1, jpkm1 
     398                  DO jj = 2, jpjm1  
     399                     DO ji = fs_2, fs_jpim1   ! vector opt. 
     400                        ze3va =  ( 1._wp - r_vvl ) * e3v_n(ji,jj,jk) + r_vvl * e3v_a(ji,jj,jk)   ! after scale factor at U-point 
     401                        zzwi = ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) + akzv(ji,jj,jk  ) )   & 
     402                           &         / ( ze3va * e3vw_a(ji,jj,jk  ) ) * wvmask(ji,jj,jk  ) 
     403                        zzws = ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) + akzv(ji,jj,jk+1) )   & 
     404                           &         / ( ze3va * e3vw_a(ji,jj,jk+1) ) * wvmask(ji,jj,jk+1) 
     405                        zWvi = 0.5_wp * ( wi(ji,jj,jk  ) + wi(ji,jj+1,jk  ) ) 
     406                        zWvs = 0.5_wp * ( wi(ji,jj,jk+1) + wi(ji,jj+1,jk+1) ) 
     407                        zwi(ji,jj,jk) = - zdt * ( zzwi +  MIN( zWvi, 0._wp ) )  
     408                        zws(ji,jj,jk) = - zdt * ( zzws -  MAX( zWvs, 0._wp ) ) 
     409                        zwd(ji,jj,jk) = 1._wp + zdt * ( zzwi + zzws - MAX( zWvi, 0._wp ) + MIN( zWvs, 0._wp ) ) 
     410                     END DO 
     411                  END DO 
     412               END DO 
     413            CASE DEFAULT               ! iso-level lateral mixing 
     414               DO jk = 1, jpkm1 
     415                  DO jj = 2, jpjm1  
     416                     DO ji = fs_2, fs_jpim1   ! vector opt. 
     417                        ze3va =  ( 1._wp - r_vvl ) * e3v_n(ji,jj,jk) + r_vvl * e3v_a(ji,jj,jk)   ! after scale factor at U-point 
     418                        zzwi = ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) ) / ( ze3va * e3vw_a(ji,jj,jk  ) ) * wvmask(ji,jj,jk  ) 
     419                        zzws = ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) ) / ( ze3va * e3vw_a(ji,jj,jk+1) ) * wvmask(ji,jj,jk+1) 
     420                        zWvi = 0.5_wp * ( wi(ji,jj,jk  ) + wi(ji,jj+1,jk  ) ) 
     421                        zWvs = 0.5_wp * ( wi(ji,jj,jk+1) + wi(ji,jj+1,jk+1) ) 
     422                        zwi(ji,jj,jk) = - zdt * ( zzwi +  MIN( zWvi, 0._wp ) )  
     423                        zws(ji,jj,jk) = - zdt * ( zzws -  MAX( zWvs, 0._wp ) ) 
     424                        zwd(ji,jj,jk) = 1._wp + zdt * ( zzwi + zzws - MAX( zWvi, 0._wp ) + MIN( zWvs, 0._wp ) ) 
     425                     END DO 
     426                  END DO 
     427               END DO 
     428            END SELECT 
     429         ENDIF 
     430      ELSE 
     431         SELECT CASE( nldf_dyn ) 
     432         CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzu) 
     433            DO jk = 1, jpkm1 
     434               DO jj = 2, jpjm1    
     435                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     436                     ze3va =  ( 1._wp - r_vvl ) * e3v_n(ji,jj,jk) + r_vvl * e3v_a(ji,jj,jk)   ! after scale factor at T-point 
     437                     zzwi = - zdt * ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) + akzv(ji,jj,jk  ) )   & 
     438                        &         / ( ze3va * e3vw_n(ji,jj,jk  ) ) * wvmask(ji,jj,jk  ) 
     439                     zzws = - zdt * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) + akzv(ji,jj,jk+1) )   & 
     440                        &         / ( ze3va * e3vw_n(ji,jj,jk+1) ) * wvmask(ji,jj,jk+1) 
     441                     zwi(ji,jj,jk) = zzwi * wvmask(ji,jj,jk  ) 
     442                     zws(ji,jj,jk) = zzws * wvmask(ji,jj,jk+1) 
     443                     zwd(ji,jj,jk) = 1._wp - zzwi - zzws 
     444                  END DO 
     445               END DO 
     446            END DO 
     447         CASE DEFAULT               ! iso-level lateral mixing 
     448            DO jk = 1, jpkm1 
     449               DO jj = 2, jpjm1    
     450                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     451                     ze3va =  ( 1._wp - r_vvl ) * e3v_n(ji,jj,jk) + r_vvl * e3v_a(ji,jj,jk)   ! after scale factor at T-point 
     452                     zzwi = - zdt * ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) ) / ( ze3va * e3vw_n(ji,jj,jk  ) ) * wvmask(ji,jj,jk  ) 
     453                     zzws = - zdt * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) ) / ( ze3va * e3vw_n(ji,jj,jk+1) ) * wvmask(ji,jj,jk+1) 
     454                     zwi(ji,jj,jk) = zzwi * wvmask(ji,jj,jk  ) 
     455                     zws(ji,jj,jk) = zzws * wvmask(ji,jj,jk+1) 
     456                     zwd(ji,jj,jk) = 1._wp - zzwi - zzws 
     457                  END DO 
     458               END DO 
     459            END DO 
     460         END SELECT 
     461      ENDIF 
    306462      ! 
    307463      DO jj = 2, jpjm1        !* Surface boundary conditions 
Note: See TracChangeset for help on using the changeset viewer.