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

Ignore:
Timestamp:
2010-12-27T18:33:53+01:00 (13 years ago)
Author:
rblod
Message:

Update NEMOGCM from branch nemo_v3_3_beta

File:
1 edited

Legend:

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

    • Property svn:keywords set to Id
    r2470 r2528  
    44   !! Ocean dynamics :  bottom friction component of the momentum mixing trend 
    55   !!============================================================================== 
    6    !! History :  9.0  ! 2008-11  (A. C. Coward)  Original code 
     6   !! History :  3.2  ! 2008-11  (A. C. Coward)  Original code 
    77   !!---------------------------------------------------------------------- 
    88 
     
    1313   USE dom_oce         ! ocean space and time domain variables  
    1414   USE zdf_oce         ! ocean vertical physics variables 
    15    USE zdfbfr          ! bottom friction 
    1615 
    1716   USE trdmod          ! ocean active dynamics and tracers trends  
     
    3029#  include "vectopt_loop_substitute.h90" 
    3130   !!---------------------------------------------------------------------- 
    32    !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009)  
    33    !! $Id: dynzdf.F90 1152 2008-06-26 14:11:13Z rblod $ 
    34    !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     31   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     32   !! $Id$ 
     33   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    3534   !!---------------------------------------------------------------------- 
    36  
    3735CONTAINS 
    3836    
     
    4543      !! ** Action  :   (ua,va)   momentum trend increased by bottom friction trend 
    4644      !!--------------------------------------------------------------------- 
    47       USE oce, ONLY :   ztrdu => ta   ! use ta as 3D workspace 
    48       USE oce, ONLY :   ztrdv => sa   ! use sa as 3D workspace 
     45      USE oce, ONLY :   ztrduv => tsa   ! use tsa as 4D workspace 
    4946      !! 
    5047      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    5148      !!  
    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 
     49      INTEGER  ::   ji, jj       ! dummy loop indexes 
     50      INTEGER  ::   ikbu, ikbv   ! local integers 
     51      REAL(wp) ::   zm1_2dt      ! local scalar 
    5652      !!--------------------------------------------------------------------- 
    5753      ! 
    58       zinv = -1. / ( 2.*rdt ) 
     54      zm1_2dt = - 1._wp / ( 2._wp * rdt ) 
    5955 
    6056      IF( l_trddyn )   THEN                      ! temporary save of ua and va trends 
    61          ztrdu(:,:,:) = ua(:,:,:) 
    62          ztrdv(:,:,:) = va(:,:,:) 
     57         ztrduv(:,:,:,1) = ua(:,:,:) 
     58         ztrduv(:,:,:,2) = va(:,:,:) 
    6359      ENDIF 
    6460 
     
    7066         DO ji = 2, jpim1 
    7167# endif 
    72             ikbu = MIN( mbathy(ji+1,jj), mbathy(ji,jj) ) 
    73             ikbv = MIN( mbathy(ji,jj+1), mbathy(ji,jj) ) 
    74             ikbum1 = MAX( ikbu-1, 1 ) 
    75             ikbvm1 = MAX( ikbv-1, 1 ) 
     68            ikbu = mbku(ji,jj)          ! deepest ocean u- & v-levels 
     69            ikbv = mbkv(ji,jj) 
    7670            ! 
    77             ! Apply stability criteria on absolute value  : Min abs(bfr) => Max (bfr) 
    78             zbfru = MAX( bfrua(ji,jj), fse3u(ji,jj,ikbum1)*zinv ) 
    79             zbfrv = MAX( bfrva(ji,jj), fse3v(ji,jj,ikbvm1)*zinv ) 
    80             ! 
    81             ua(ji,jj,ikbum1) = ua(ji,jj,ikbum1) + zbfru * ub(ji,jj,ikbum1) / fse3u(ji,jj,ikbum1) 
    82             va(ji,jj,ikbvm1) = va(ji,jj,ikbvm1) + zbfrv * vb(ji,jj,ikbvm1) / fse3v(ji,jj,ikbvm1) 
    83             ! 
     71            ! Apply stability criteria on absolute value  : abs(bfr/e3) < 1/(2dt) => bfr/e3 > -1/(2dt) 
     72            ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + MAX(  bfrua(ji,jj) / fse3u(ji,jj,ikbu) , zm1_2dt  ) * ub(ji,jj,ikbu) 
     73            va(ji,jj,ikbv) = va(ji,jj,ikbv) + MAX(  bfrua(ji,jj) / fse3v(ji,jj,ikbu) , zm1_2dt  ) * vb(ji,jj,ikbv) 
    8474         END DO 
    8575      END DO 
     
    8777      ! 
    8878      IF( l_trddyn )   THEN                      ! save the vertical diffusive trends for further diagnostics 
    89          ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    90          ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    91          CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_bfr, 'DYN', kt ) 
     79         ztrduv(:,:,:,1) = ua(:,:,:) - ztrduv(:,:,:,1) 
     80         ztrduv(:,:,:,2) = va(:,:,:) - ztrduv(:,:,:,2) 
     81         CALL trd_mod( ztrduv(:,:,:,1), ztrduv(:,:,:,2), jpdyn_trd_bfr, 'DYN', kt ) 
    9282      ENDIF 
    9383      !                                          ! print mean trends (used for debugging) 
Note: See TracChangeset for help on using the changeset viewer.