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/ZDF/zdfbfr.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/ZDF/zdfbfr.F90

    • Property svn:eol-style deleted
    r2470 r2528  
    77   !!   NEMO     1.0  ! 2002-06  (G. Madec)  F90: Free form and module 
    88   !!            3.2  ! 2009-09  (A.C.Coward)  Correction to include barotropic contribution 
     9   !!            3.3  ! 2010-10  (C. Ethe, G. Madec) reorganisation of initialisation phase 
    910   !!---------------------------------------------------------------------- 
    1011 
     
    1213   !!   zdf_bfr      : update momentum Kz at the ocean bottom due to the type of bottom friction chosen 
    1314   !!   zdf_bfr_init : read in namelist and control the bottom friction parameters. 
    14    !!   zdf_bfr_2d   : read in namelist and control the bottom friction 
    15    !!                  parameters. 
     15   !!   zdf_bfr_2d   : read in namelist and control the bottom friction parameters. 
    1616   !!---------------------------------------------------------------------- 
    1717   USE oce             ! ocean dynamics and tracers variables 
     
    2626   PRIVATE 
    2727 
    28    PUBLIC   zdf_bfr    ! called by step.F90 
     28   PUBLIC   zdf_bfr         ! called by step.F90 
     29   PUBLIC   zdf_bfr_init    ! called by opa.F90 
    2930    
    30    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   bfrua , bfrva   !: Bottom friction coefficients set in zdfbfr 
    31  
    3231   !                                    !!* Namelist nambfr: bottom friction namelist * 
    3332   INTEGER  ::   nn_bfr    = 0           ! = 0/1/2/3 type of bottom friction  
     
    3534   REAL(wp) ::   rn_bfri2  = 1.0e-3_wp   ! bottom drag coefficient (non linear case) 
    3635   REAL(wp) ::   rn_bfeb2  = 2.5e-3_wp   ! background bottom turbulent kinetic energy  [m2/s2] 
    37    REAL(wp) ::   rn_bfrien = 30_wp       ! local factor to enhance coefficient bfri 
     36   REAL(wp) ::   rn_bfrien = 30._wp      ! local factor to enhance coefficient bfri 
    3837   LOGICAL  ::   ln_bfr2d  = .false.     ! logical switch for 2D enhancement 
    3938    
     
    4140 
    4241   !! * Substitutions 
     42#  include "vectopt_loop_substitute.h90" 
    4343#  include "domzgr_substitute.h90" 
    4444   !!---------------------------------------------------------------------- 
    45    !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009)  
    46    !! $Id$  
    47    !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    48    !!---------------------------------------------------------------------- 
    49  
     45   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     46   !! $Id$ 
     47   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     48   !!---------------------------------------------------------------------- 
    5049CONTAINS 
    5150 
     
    6867      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    6968      !! 
    70       INTEGER  ::   ji, jj         ! dummy loop indices 
    71       INTEGER  ::   ikbu, ikbum1   ! temporary integers 
    72       INTEGER  ::   ikbv, ikbvm1   !    -          - 
     69      INTEGER  ::   ji, jj       ! dummy loop indices 
     70      INTEGER  ::   ikbu, ikbv   ! local integers 
    7371      REAL(wp) ::   zvu, zuv, zecu, zecv   ! temporary scalars 
    7472      !!---------------------------------------------------------------------- 
    75  
    76  
    77       IF( kt == nit000 )   CALL zdf_bfr_init   ! initialisation 
    7873 
    7974      IF( nn_bfr == 2 ) THEN                 ! quadratic botton friction 
     
    9388            DO ji = 2, jpim1 
    9489# endif 
    95                ikbu   = MIN( mbathy(ji+1,jj  ), mbathy(ji,jj) ) 
    96                ikbv   = MIN( mbathy(ji  ,jj+1), mbathy(ji,jj) ) 
    97                ikbum1 = MAX( ikbu-1, 1 ) 
    98                ikbvm1 = MAX( ikbv-1, 1 ) 
     90               ikbu = mbku(ji,jj)         ! ocean bottom level at u- and v-points  
     91               ikbv = mbkv(ji,jj)         ! (deepest ocean u- and v-points) 
    9992               ! 
    100                zvu  = 0.25 * (  vn(ji,jj  ,ikbum1) + vn(ji+1,jj  ,ikbum1)     & 
    101                   &           + vn(ji,jj-1,ikbum1) + vn(ji+1,jj-1,ikbum1)  ) 
    102                zuv  = 0.25 * (  un(ji,jj  ,ikbvm1) + un(ji-1,jj  ,ikbvm1)     & 
    103                   &           + un(ji,jj+1,ikbvm1) + un(ji-1,jj+1,ikbvm1)  ) 
     93               zvu  = 0.25 * (  vn(ji,jj  ,ikbu) + vn(ji+1,jj  ,ikbu)     & 
     94                  &           + vn(ji,jj-1,ikbu) + vn(ji+1,jj-1,ikbu)  ) 
     95               zuv  = 0.25 * (  un(ji,jj  ,ikbv) + un(ji-1,jj  ,ikbv)     & 
     96                  &           + un(ji,jj+1,ikbv) + un(ji-1,jj+1,ikbv)  ) 
    10497               ! 
    105                zecu = SQRT(  un(ji,jj,ikbum1) * un(ji,jj,ikbum1) + zvu*zvu + rn_bfeb2  ) 
    106                zecv = SQRT(  vn(ji,jj,ikbvm1) * vn(ji,jj,ikbvm1) + zuv*zuv + rn_bfeb2  ) 
     98               zecu = SQRT(  un(ji,jj,ikbu) * un(ji,jj,ikbu) + zvu*zvu + rn_bfeb2  ) 
     99               zecv = SQRT(  vn(ji,jj,ikbv) * vn(ji,jj,ikbv) + zuv*zuv + rn_bfeb2  ) 
    107100               ! 
    108                bfrua(ji,jj) = - 0.5 * ( bfrcoef2d(ji,jj) + bfrcoef2d(ji+1,jj  ) ) * zecu  
    109                bfrva(ji,jj) = - 0.5 * ( bfrcoef2d(ji,jj) + bfrcoef2d(ji  ,jj+1) ) * zecv 
     101               bfrua(ji,jj) = - 0.5_wp * ( bfrcoef2d(ji,jj) + bfrcoef2d(ji+1,jj  ) ) * zecu  
     102               bfrva(ji,jj) = - 0.5_wp * ( bfrcoef2d(ji,jj) + bfrcoef2d(ji  ,jj+1) ) * zecv 
    110103            END DO 
    111104         END DO 
     
    131124      USE iom   ! I/O module for ehanced bottom friction file 
    132125      !! 
    133       INTEGER ::   inum                         ! logical unit for enhanced bottom friction file 
    134       INTEGER ::   ji, jj                       ! dummy loop indexes 
    135       INTEGER ::   ikbu, ikbv, ikbum1, ikbvm1   ! temporary integers 
    136       INTEGER ::   ictu, ictv                   !    -          - 
    137       REAL(wp) ::  zminbfr, zmaxbfr             ! temporary scalars 
    138       REAL(wp) ::  zfru, zfrv                   !    -         - 
     126      INTEGER ::   inum         ! logical unit for enhanced bottom friction file 
     127      INTEGER ::   ji, jj       ! dummy loop indexes 
     128      INTEGER ::   ikbu, ikbv   ! temporary integers 
     129      INTEGER ::   ictu, ictv   !    -          - 
     130      REAL(wp) ::  zminbfr, zmaxbfr   ! temporary scalars 
     131      REAL(wp) ::  zfru, zfrv         !    -         - 
    139132      !! 
    140133      NAMELIST/nambfr/ nn_bfr, rn_bfri1, rn_bfri2, rn_bfeb2, ln_bfr2d, rn_bfrien 
     
    218211         DO ji = 2, jpim1 
    219212#  endif 
    220              ikbu = MIN( mbathy(ji+1,jj  ), mbathy(ji,jj) ) 
    221              ikbv = MIN( mbathy(ji  ,jj+1), mbathy(ji,jj) ) 
    222              ikbum1 = MAX( ikbu-1, 1 ) 
    223              ikbvm1 = MAX( ikbv-1, 1 ) 
    224              zfru = 0.5 * fse3u(ji,jj,ikbum1) / rdt 
    225              zfrv = 0.5 * fse3v(ji,jj,ikbvm1) / rdt 
     213             ikbu = mbku(ji,jj)       ! deepest ocean level at u- and v-points 
     214             ikbv = mbkv(ji,jj) 
     215             zfru = 0.5 * fse3u(ji,jj,ikbu) / rdt 
     216             zfrv = 0.5 * fse3v(ji,jj,ikbv) / rdt 
    226217             IF( ABS( bfrcoef2d(ji,jj) ) > zfru ) THEN 
    227218                IF( ln_ctl ) THEN 
    228                    WRITE(numout,*) 'BFR ',narea,nimpp+ji,njmpp+jj,ikbu 
    229                    WRITE(numout,*) 'BFR ',ABS( bfrcoef2d(ji,jj) ), zfru 
     219                   WRITE(numout,*) 'BFR ', narea, nimpp+ji, njmpp+jj, ikbu 
     220                   WRITE(numout,*) 'BFR ', ABS( bfrcoef2d(ji,jj) ), zfru 
    230221                ENDIF 
    231222                ictu = ictu + 1 
     
    248239         CALL mpp_max( zmaxbfr ) 
    249240      ENDIF 
    250       IF( lwp .AND. ictu + ictv .GT. 0 ) THEN 
     241      IF( lwp .AND. ictu + ictv > 0 ) THEN 
    251242         WRITE(numout,*) ' Bottom friction stability check failed at ', ictu, ' U-points ' 
    252243         WRITE(numout,*) ' Bottom friction stability check failed at ', ictv, ' V-points ' 
Note: See TracChangeset for help on using the changeset viewer.