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 1708 for trunk/NEMO/OPA_SRC/DYN/dynbfr.F90 – NEMO

Ignore:
Timestamp:
2009-11-04T14:24:34+01:00 (14 years ago)
Author:
rblod
Message:

Stability for explicit bottom friction, see ticket #588

File:
1 edited

Legend:

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

    r1671 r1708  
    44   !! Ocean dynamics :  bottom friction component of the momentum mixing trend 
    55   !!============================================================================== 
    6    !! History :  9.0  !  08-11  (A. C. Coward)  Original code 
     6   !! History :  9.0  !  2008-11  (A. C. Coward)  Original code 
    77   !!---------------------------------------------------------------------- 
    88 
     
    4545      !! ** Action  :   (ua,va)   momentum trend increased by bottom friction trend 
    4646      !!--------------------------------------------------------------------- 
     47      USE oce, ONLY :   ztrdu => ta   ! use ta as 3D workspace 
     48      USE oce, ONLY :   ztrdv => sa   ! use sa as 3D workspace 
     49      !! 
    4750      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    4851      !!  
    49       INTEGER ::   ji, jj       ! dummy loop indexes 
    50       INTEGER ::   ikbu, ikbv   ! temporary integers 
    51       INTEGER ::   ikbum1, ikbvm1 
    52 !! + Enforce stability 
    53 !     REAL(wp):: frdt           ! temporary real 
    54 !! - Enforce stability 
    55       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D workspace 
     52      INTEGER  ::   ji, jj          ! dummy loop indexes 
     53      INTEGER  ::   ikbu  , ikbv    ! temporary integers 
     54      INTEGER  ::   ikbum1, ikbvm1  !    -          - 
     55      REAL(wp) ::   zinv, zbfru, zbfrv   ! temporary scalar 
    5656      !!--------------------------------------------------------------------- 
    5757      ! 
    58 !! + Enforce stability 
    59 !     frdt = 0.125/rdt 
    60 !! - Enforce stability 
    61       IF( l_trddyn )   THEN                      ! temporary save of ta and sa trends 
     58      zinv = -1. / ( 2.*rdt ) 
     59 
     60      IF( l_trddyn )   THEN                      ! temporary save of ua and va trends 
    6261         ztrdu(:,:,:) = ua(:,:,:) 
    6362         ztrdv(:,:,:) = va(:,:,:) 
    6463      ENDIF 
     64 
    6565# if defined key_vectopt_loop 
    6666      DO jj = 1, 1 
     
    7575            ikbvm1 = MAX( ikbv-1, 1 ) 
    7676            ! 
    77 !! + Enforce stability 
    7877            ! Apply stability criteria 
    79 !            bfrua(ji,jj) = MIN(bfrua(ji,jj), fse3u(ji,jj,ikbu)*frdt) 
    80 !            bfrva(ji,jj) = MIN(bfrva(ji,jj), fse3v(ji,jj,ikbv)*frdt) 
     78            zbfru = MAX( bfrua(ji,jj), fse3u(ji,jj,ikbu)*zinv ) 
     79            zbfrv = MAX( bfrva(ji,jj), fse3v(ji,jj,ikbv)*zinv ) 
    8180            ! 
    82 !! - Enforce stability 
    83             ua(ji,jj,ikbum1) = ua(ji,jj,ikbum1) + bfrua(ji,jj) * ub(ji,jj,ikbum1) / fse3u(ji,jj,ikbu) 
    84             va(ji,jj,ikbvm1) = va(ji,jj,ikbvm1) + bfrva(ji,jj) * vb(ji,jj,ikbvm1) / fse3v(ji,jj,ikbu) 
     81            ua(ji,jj,ikbum1) = ua(ji,jj,ikbum1) + zbfru * ub(ji,jj,ikbum1) / fse3u(ji,jj,ikbu) 
     82            va(ji,jj,ikbvm1) = va(ji,jj,ikbvm1) + zbfrv * vb(ji,jj,ikbvm1) / fse3v(ji,jj,ikbv) 
     83            ! 
    8584         END DO 
    8685      END DO 
     86 
    8787      ! 
    8888      IF( l_trddyn )   THEN                      ! save the vertical diffusive trends for further diagnostics 
Note: See TracChangeset for help on using the changeset viewer.