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 10116 for NEMO/branches/2018/dev_r10057_ENHANCE03_ZTILDE/src/OCE/DYN/dynnxt.F90 – NEMO

Ignore:
Timestamp:
2018-09-12T17:39:01+02:00 (6 years ago)
Author:
jchanut
Message:

ztilde update (3): #2126
Rewrite thickness advection, add regriding, biharmonic interface diffusion

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r10057_ENHANCE03_ZTILDE/src/OCE/DYN/dynnxt.F90

    r9598 r10116  
    9595      ! 
    9696      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    97       INTEGER  ::   ikt          ! local integers 
     97      INTEGER  ::   ikt, jkbot   ! local integers 
    9898      REAL(wp) ::   zue3a, zue3n, zue3b, zuf, zcoef    ! local scalars 
    9999      REAL(wp) ::   zve3a, zve3n, zve3b, zvf, z1_2dt   !   -      - 
     100      REAL(wp) ::   zhcri, zmsku, zwgtu, zmskv, zwgtv  !   -      - 
    100101      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zue, zve 
    101102      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ze3u_f, ze3v_f, zua, zva  
     
    136137            END DO   
    137138         ENDIF 
     139      ENDIF 
     140 
     141      IF( ln_vvl_ztilde .OR. ln_vvl_layer) THEN  
     142!         ! Duplicate baroclinic velocities from above in massless layers 
     143!         ! Correction to handle correct barotropic velocities right after 
     144         zhcri = 0.1_wp 
     145         DO ji = 2, jpim1 
     146            DO jj= 2, jpjm1 
     147               jkbot=jpkm1 
     148               DO jk=jpkm1,2,-1 
     149                  IF (e3u_a(ji,jj,jk)>zhcri) jkbot = jk+1 
     150               END DO 
     151               DO jk=jkbot,jpkm1 
     152                  zwgtu = MIN(zhcri, e3u_a(ji,jj,jk)) 
     153                  zmsku = 0.5_wp * ( 1._wp + SIGN(1._wp, e3u_a(ji,jj,jk) - 0.01_wp) ) 
     154                  ua(ji,jj,jk) = zmsku * (zwgtu * ua(ji,jj,jk) + (zhcri - zwgtu) * ua(ji,jj,jk-1)*zwgtu/(zwgtu+0.01_wp)) / zhcri 
     155               END DO 
     156               jkbot=jpkm1 
     157               DO jk=jpkm1,2,-1 
     158                  IF (e3v_a(ji,jj,jk)>zhcri) jkbot = jk+1 
     159               END DO 
     160               DO jk=jkbot,jpkm1 
     161                  zwgtv = MIN(zhcri, e3v_a(ji,jj,jk)) 
     162                  zmskv = 0.5_wp * ( 1._wp + SIGN(1._wp, e3v_a(ji,jj,jk) - 0.01_wp) ) 
     163                  va(ji,jj,jk) = zmskv * (zwgtv * va(ji,jj,jk) + (zhcri - zwgtv) * va(ji,jj,jk-1)*zwgtv/(zwgtv+0.01_wp)) / zhcri 
     164               END DO 
     165            END DO 
     166         END DO 
    138167      ENDIF 
    139168 
     
    291320                        zuf = ( zue3n + atfp * ( zue3b - 2._wp * zue3n  + zue3a ) ) / ze3u_f(ji,jj,jk) 
    292321                        zvf = ( zve3n + atfp * ( zve3b - 2._wp * zve3n  + zve3a ) ) / ze3v_f(ji,jj,jk) 
     322                        zmsku = 0.5_wp * ( 1._wp + SIGN(1._wp, ze3u_f(ji,jj,jk) - 0.01_wp) ) 
     323                        zmskv = 0.5_wp * ( 1._wp + SIGN(1._wp, ze3v_f(ji,jj,jk) - 0.01_wp) ) 
    293324                        ! 
    294                         ub(ji,jj,jk) = zuf                     ! ub <-- filtered velocity 
    295                         vb(ji,jj,jk) = zvf 
     325                        ub(ji,jj,jk) = zmsku * zuf             ! ub <-- filtered velocity 
     326                        vb(ji,jj,jk) = zmskv * zvf 
    296327                        un(ji,jj,jk) = ua(ji,jj,jk)            ! un <-- ua 
    297328                        vn(ji,jj,jk) = va(ji,jj,jk) 
Note: See TracChangeset for help on using the changeset viewer.