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 1683 – NEMO

Changeset 1683


Ignore:
Timestamp:
2009-10-28T11:24:41+01:00 (14 years ago)
Author:
rblod
Message:

Correct time stepping for volume variable and filtered free surface, see #568

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/DYN/dynspg_flt.F90

    r1601 r1683  
    2929   USE phycst          ! physical constants 
    3030   USE domvvl          ! variable volume 
     31   USE dynadv          ! advection  
    3132   USE solmat          ! matrix construction for elliptic solvers 
    3233   USE solver          ! solver initialization 
     
    136137      zraur  = 1. / rauw 
    137138 
    138       !! Explicit physics with thickness weighted updates 
    139       IF( lk_vvl ) THEN          ! variable volume  
    140  
    141          ! Evaluate the masked next velocity (effect of the additional force not included) 
    142          ! -------------------   (thickness weighted velocity, surface pressure gradient already included in dyn_hpg) 
    143          DO jk = 1, jpkm1 
    144             DO jj = 2, jpjm1 
    145                DO ji = fs_2, fs_jpim1   ! vector opt. 
    146                   ua(ji,jj,jk) = (        ub(ji,jj,jk) * fse3u_b(ji,jj,jk)      & 
    147                      &           + z2dt * ua(ji,jj,jk) * fse3u_n(ji,jj,jk)  )   & 
    148                      &         / fse3u_a(ji,jj,jk) * umask(ji,jj,jk) 
    149                   va(ji,jj,jk) = (        vb(ji,jj,jk) * fse3v_b(ji,jj,jk)      & 
    150                      &           + z2dt * va(ji,jj,jk) * fse3v_n(ji,jj,jk)  )   & 
    151                      &         / fse3v_a(ji,jj,jk) * vmask(ji,jj,jk) 
     139      ! Evaluate the masked next velocity (effect of the additional force not included) 
     140      ! ---------------------------------   
     141      IF( lk_vvl ) THEN          ! variable volume  (surface pressure gradient already included in dyn_hpg) 
     142         ! 
     143         IF( ln_dynadv_vec ) THEN      ! vector form : applied on velocity 
     144            DO jk = 1, jpkm1 
     145               DO jj = 2, jpjm1 
     146                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     147                     ua(ji,jj,jk) = (  ub(ji,jj,jk) + z2dt * ua(ji,jj,jk)  ) * umask(ji,jj,jk) 
     148                     va(ji,jj,jk) = (  vb(ji,jj,jk) + z2dt * va(ji,jj,jk)  ) * vmask(ji,jj,jk) 
     149                  END DO 
    152150               END DO 
    153151            END DO 
    154          END DO 
    155  
    156       ELSE                       ! fixed volume  
    157  
    158          ! Surface pressure gradient (now) 
    159          DO jj = 2, jpjm1 
     152            ! 
     153         ELSE                          ! flux form : applied on thickness weighted velocity 
     154            DO jk = 1, jpkm1 
     155               DO jj = 2, jpjm1 
     156                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     157                     ua(ji,jj,jk) = (        ub(ji,jj,jk) * fse3u_b(ji,jj,jk)      & 
     158                        &           + z2dt * ua(ji,jj,jk) * fse3u_n(ji,jj,jk)  )   & 
     159                        &         / fse3u_a(ji,jj,jk) * umask(ji,jj,jk) 
     160                     va(ji,jj,jk) = (        vb(ji,jj,jk) * fse3v_b(ji,jj,jk)      & 
     161                        &           + z2dt * va(ji,jj,jk) * fse3v_n(ji,jj,jk)  )   & 
     162                        &         / fse3v_a(ji,jj,jk) * vmask(ji,jj,jk) 
     163                 END DO 
     164               END DO 
     165            END DO 
     166            ! 
     167         ENDIF 
     168         ! 
     169      ELSE                       ! fixed volume  (add the surface pressure gradient + unweighted time stepping) 
     170         ! 
     171         DO jj = 2, jpjm1              ! Surface pressure gradient (now) 
    160172            DO ji = fs_2, fs_jpim1   ! vector opt. 
    161173               spgu(ji,jj) = - grav * ( sshn(ji+1,jj) - sshn(ji,jj) ) / e1u(ji,jj) 
     
    163175            END DO  
    164176         END DO  
    165          ! 
    166          ! add the surface pressure trend to the general trend and 
    167          ! evaluate the masked next velocity (effect of the additional force not included) 
    168          DO jk = 1, jpkm1 
     177         DO jk = 1, jpkm1              ! unweighted time stepping  
    169178            DO jj = 2, jpjm1 
    170179               DO ji = fs_2, fs_jpim1   ! vector opt. 
Note: See TracChangeset for help on using the changeset viewer.