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 2450 for branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/LDF/ldfeiv.F90 – NEMO

Ignore:
Timestamp:
2010-12-04T16:20:50+01:00 (13 years ago)
Author:
gm
Message:

v3.3beta: #766 share the deepest ocean level indices continuaton

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/LDF/ldfeiv.F90

    r2371 r2450  
    44   !! Ocean physics:  variable eddy induced velocity coefficients 
    55   !!====================================================================== 
     6   !! History :  OPA  ! 1999-03  (G. Madec, A. Jouzeau)  Original code 
     7   !!   NEMO     1.0  ! 2002-06  (G. Madec)  Free form, F90 
     8   !!---------------------------------------------------------------------- 
    69#if   defined key_traldf_eiv   &&   defined key_traldf_c2d 
    710   !!---------------------------------------------------------------------- 
     
    1114   !!   ldf_eiv      : compute the eddy induced velocity coefficients 
    1215   !!---------------------------------------------------------------------- 
    13    !! * Modules used 
    1416   USE oce             ! ocean dynamics and tracers 
    1517   USE dom_oce         ! ocean space and time domain 
     
    2224   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    2325   USE prtctl          ! Print control 
    24    USE iom 
     26   USE iom             ! I/O library 
    2527 
    2628   IMPLICIT NONE 
    2729   PRIVATE 
    2830    
    29    !! * Routine accessibility 
    30    PUBLIC ldf_eiv               ! routine called by step.F90 
    31    !!---------------------------------------------------------------------- 
    32    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    33    !! $Id$ 
    34    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    35    !!---------------------------------------------------------------------- 
     31   PUBLIC   ldf_eiv    ! routine called by step.F90 
     32    
    3633   !! * Substitutions 
    3734#  include "domzgr_substitute.h90" 
    3835#  include "vectopt_loop_substitute.h90" 
    3936   !!---------------------------------------------------------------------- 
    40  
     37   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     38   !! $Id$ 
     39   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     40   !!---------------------------------------------------------------------- 
    4141CONTAINS 
    4242 
     
    4646      !! 
    4747      !! ** Purpose :   Compute the eddy induced velocity coefficient from the 
    48       !!      growth rate of baroclinic instability. 
     48      !!              growth rate of baroclinic instability. 
    4949      !! 
    5050      !! ** Method : 
    5151      !! 
    52       !! ** Action : - uslp(),  : i- and j-slopes of neutral surfaces 
    53       !!             - vslp()      at u- and v-points, resp. 
    54       !!             - wslpi(),  : i- and j-slopes of neutral surfaces 
    55       !!             - wslpj()     at w-points.  
    56       !! 
    57       !! History : 
    58       !!   8.1  !  99-03  (G. Madec, A. Jouzeau)  Original code 
    59       !!   8.5  !  02-06  (G. Madec)  Free form, F90 
     52      !! ** Action : - uslp , vslp  : i- and j-slopes of neutral surfaces at u- & v-points 
     53      !!             - wslpi, wslpj : i- and j-slopes of neutral surfaces at w-points.  
    6054      !!---------------------------------------------------------------------- 
    61       !! * Arguments 
    62       INTEGER, INTENT( in ) ::   kt     ! ocean time-step inedx 
    63        
    64       !! * Local declarations 
    65       INTEGER ::   ji, jj, jk           ! dummy loop indices 
    66       REAL(wp) ::   & 
    67          zfw, ze3w, zn2, zf20,       &  ! temporary scalars 
    68          zaht, zaht_min 
    69       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    70          zn, zah, zhw, zross            ! workspace 
     55      INTEGER, INTENT(in) ::   kt   ! ocean time-step inedx 
     56      !! 
     57      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     58      REAL(wp) ::   zfw, ze3w, zn2, zf20, zaht, zaht_min      ! temporary scalars 
     59      REAL(wp), DIMENSION(jpi,jpj) ::   zn, zah, zhw, zross   ! 2D workspace 
    7160      !!---------------------------------------------------------------------- 
    7261       
     
    7968      ! 0. Local initialization 
    8069      ! ----------------------- 
    81       zn   (:,:) = 0.e0 
    82       zhw  (:,:) = 5.e0 
    83       zah  (:,:) = 0.e0 
    84       zross(:,:) = 0.e0 
     70      zn   (:,:) = 0._wp 
     71      zhw  (:,:) = 5._wp 
     72      zah  (:,:) = 0._wp 
     73      zross(:,:) = 0._wp 
    8574 
    8675 
    8776      ! 1. Compute lateral diffusive coefficient  
    8877      ! ---------------------------------------- 
    89       IF (ln_traldf_grif) THEN 
     78      IF( ln_traldf_grif ) THEN 
    9079         DO jk = 1, jpk 
    9180#  if defined key_vectopt_loop   
    92             !CDIR NOVERRCHK  
     81!CDIR NOVERRCHK  
    9382            DO ji = 1, jpij   ! vector opt. 
    9483               ! Take the max of N^2 and zero then take the vertical sum 
    9584               ! of the square root of the resulting N^2 ( required to compute 
    9685               ! internal Rossby radius Ro = .5 * sum_jpk(N) / f 
    97                zn2 = MAX( rn2b(ji,1,jk), 0.e0 ) 
     86               zn2 = MAX( rn2b(ji,1,jk), 0._wp ) 
    9887               zn(ji,1) = zn(ji,1) + SQRT( zn2 ) * fse3w(ji,1,jk) 
    9988               ! Compute elements required for the inverse time scale of baroclinic 
     
    10695#  else 
    10796            DO jj = 2, jpjm1 
    108                !CDIR NOVERRCHK  
     97!CDIR NOVERRCHK  
    10998               DO ji = 2, jpim1 
    11099                  ! Take the max of N^2 and zero then take the vertical sum  
    111100                  ! of the square root of the resulting N^2 ( required to compute  
    112101                  ! internal Rossby radius Ro = .5 * sum_jpk(N) / f  
    113                   zn2 = MAX( rn2b(ji,jj,jk), 0.e0 ) 
     102                  zn2 = MAX( rn2b(ji,jj,jk), 0._wp ) 
    114103                  zn(ji,jj) = zn(ji,jj) + SQRT( zn2 ) * fse3w(ji,jj,jk) 
    115104                  ! Compute elements required for the inverse time scale of baroclinic 
     
    126115         DO jk = 1, jpk 
    127116#  if defined key_vectopt_loop   
    128             !CDIR NOVERRCHK  
     117!CDIR NOVERRCHK  
    129118            DO ji = 1, jpij   ! vector opt. 
    130119               ! Take the max of N^2 and zero then take the vertical sum 
    131120               ! of the square root of the resulting N^2 ( required to compute 
    132121               ! internal Rossby radius Ro = .5 * sum_jpk(N) / f 
    133                zn2 = MAX( rn2b(ji,1,jk), 0.e0 ) 
     122               zn2 = MAX( rn2b(ji,1,jk), 0._wp ) 
    134123               zn(ji,1) = zn(ji,1) + SQRT( zn2 ) * fse3w(ji,1,jk) 
    135124               ! Compute elements required for the inverse time scale of baroclinic 
     
    137126               ! T^-1 = sqrt(m_jpk(N^2*(r1^2+r2^2)*e3w)) 
    138127               ze3w = fse3w(ji,1,jk) * tmask(ji,1,jk) 
    139                zah(ji,1) = zah(ji,1) + zn2   & 
    140                     * ( wslpi(ji,1,jk) * wslpi(ji,1,jk)    & 
    141                     + wslpj(ji,1,jk) * wslpj(ji,1,jk) )   & 
    142                     * ze3w 
     128               zah(ji,1) = zah(ji,1) + zn2 * ( wslpi(ji,1,jk) * wslpi(ji,1,jk)   & 
     129                  &                          + wslpj(ji,1,jk) * wslpj(ji,1,jk) ) * ze3w 
    143130               zhw(ji,1) = zhw(ji,1) + ze3w 
    144131            END DO 
    145132#  else 
    146133            DO jj = 2, jpjm1 
    147                !CDIR NOVERRCHK  
     134!CDIR NOVERRCHK  
    148135               DO ji = 2, jpim1 
    149136                  ! Take the max of N^2 and zero then take the vertical sum  
    150137                  ! of the square root of the resulting N^2 ( required to compute  
    151138                  ! internal Rossby radius Ro = .5 * sum_jpk(N) / f  
    152                   zn2 = MAX( rn2b(ji,jj,jk), 0.e0 ) 
     139                  zn2 = MAX( rn2b(ji,jj,jk), 0._wp ) 
    153140                  zn(ji,jj) = zn(ji,jj) + SQRT( zn2 ) * fse3w(ji,jj,jk) 
    154141                  ! Compute elements required for the inverse time scale of baroclinic 
     
    156143                  ! T^-1 = sqrt(m_jpk(N^2*(r1^2+r2^2)*e3w)) 
    157144                  ze3w = fse3w(ji,jj,jk) * tmask(ji,jj,jk) 
    158                   zah(ji,jj) = zah(ji,jj) + zn2   & 
    159                        * ( wslpi(ji,jj,jk) * wslpi(ji,jj,jk)    & 
    160                        + wslpj(ji,jj,jk) * wslpj(ji,jj,jk) )  & 
    161                        * ze3w 
     145                  zah(ji,jj) = zah(ji,jj) + zn2 * ( wslpi(ji,jj,jk) * wslpi(ji,jj,jk)   & 
     146                     &                            + wslpj(ji,jj,jk) * wslpj(ji,jj,jk) ) * ze3w 
    162147                  zhw(ji,jj) = zhw(ji,jj) + ze3w 
    163148               END DO 
     
    178163      END DO 
    179164 
    180       IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN   ! ORCA R02 
     165      IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN   ! ORCA R2 
    181166         DO jj = 2, jpjm1 
    182167!CDIR NOVERRCHK  
    183168            DO ji = fs_2, fs_jpim1   ! vector opt. 
    184                ! Take the minimum between aeiw and aeiv0 for depth levels 
    185                ! lower than 20 (21 in w- point) 
    186                IF( mbathy(ji,jj) <= 21. ) aeiw(ji,jj) = MIN( aeiw(ji,jj), 1000. ) 
     169               ! Take the minimum between aeiw and 1000 m2/s over shelves (depth shallower than 650 m) 
     170               IF( mbkt(ji,jj) <= 20 )   aeiw(ji,jj) = MIN( aeiw(ji,jj), 1000. ) 
    187171            END DO 
    188172         END DO 
     
    190174 
    191175      ! Decrease the coefficient in the tropics (20N-20S)  
    192       zf20 = 2. * omega * sin( rad * 20. ) 
     176      zf20 = 2._wp * omega * sin( rad * 20._wp ) 
    193177      DO jj = 2, jpjm1 
    194178         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    205189         END DO 
    206190      ENDIF 
    207  
    208       ! lateral boundary condition on aeiw  
    209       CALL lbc_lnk( aeiw, 'W', 1. ) 
     191      CALL lbc_lnk( aeiw, 'W', 1. )      ! lateral boundary condition on aeiw  
     192 
    210193 
    211194      ! Average the diffusive coefficient at u- v- points  
    212195      DO jj = 2, jpjm1 
    213196         DO ji = fs_2, fs_jpim1   ! vector opt. 
    214             aeiu(ji,jj) = .5 * ( aeiw(ji,jj) + aeiw(ji+1,jj  ) ) 
    215             aeiv(ji,jj) = .5 * ( aeiw(ji,jj) + aeiw(ji  ,jj+1) ) 
     197            aeiu(ji,jj) = 0.5_wp * ( aeiw(ji,jj) + aeiw(ji+1,jj  ) ) 
     198            aeiv(ji,jj) = 0.5_wp * ( aeiw(ji,jj) + aeiw(ji  ,jj+1) ) 
    216199         END DO  
    217200      END DO  
    218  
    219       ! lateral boundary condition on aeiu, aeiv 
    220       CALL lbc_lnk( aeiu, 'U', 1. ) 
    221       CALL lbc_lnk( aeiv, 'V', 1. ) 
    222  
    223       IF(ln_ctl)   THEN 
     201      CALL lbc_lnk( aeiu, 'U', 1. )   ;   CALL lbc_lnk( aeiv, 'V', 1. )      ! lateral boundary condition 
     202 
     203 
     204      IF(ln_ctl) THEN 
    224205         CALL prt_ctl(tab2d_1=aeiu, clinfo1=' eiv  - u: ', ovlap=1) 
    225206         CALL prt_ctl(tab2d_1=aeiv, clinfo1=' eiv  - v: ', ovlap=1) 
     
    228209      ! ORCA R05: add a space variation on aht (=aeiv except at the equator and river mouth) 
    229210      IF( cp_cfg == "orca" .AND. jp_cfg == 05 ) THEN 
    230          zf20     = 2. * omega * SIN( rad * 20. ) 
    231          zaht_min = 100.                              ! minimum value for aht 
     211         zf20     = 2._wp * omega * SIN( rad * 20._wp ) 
     212         zaht_min = 100._wp                           ! minimum value for aht 
    232213         DO jj = 1, jpj 
    233214            DO ji = 1, jpi 
    234                zaht      = ( 1. -  MIN( 1., ABS( ff(ji,jj) / zf20 ) ) ) * ( aht0 - zaht_min )  & 
     215               zaht      = ( 1._wp -  MIN( 1._wp , ABS( ff(ji,jj) / zf20 ) ) ) * ( aht0 - zaht_min )  & 
    235216                  &      + aht0 * rnfmsk(ji,jj)                          ! enhanced near river mouths 
    236217               ahtu(ji,jj) = MAX( MAX( zaht_min, aeiu(ji,jj) ) + zaht, aht0 ) 
     
    246227      ENDIF 
    247228 
    248       IF( aeiv0 == 0.e0 ) THEN 
    249          aeiu(:,:) = 0.e0 
    250          aeiv(:,:) = 0.e0 
    251          aeiw(:,:) = 0.e0 
     229      IF( aeiv0 == 0._wp ) THEN 
     230         aeiu(:,:) = 0._wp 
     231         aeiv(:,:) = 0._wp 
     232         aeiw(:,:) = 0._wp 
    252233      ENDIF 
    253234 
    254235      CALL iom_put( "aht2d"    , ahtw )   ! lateral eddy diffusivity 
    255236      CALL iom_put( "aht2d_eiv", aeiw )   ! EIV lateral eddy diffusivity 
    256  
     237      ! 
    257238   END SUBROUTINE ldf_eiv 
    258239 
Note: See TracChangeset for help on using the changeset viewer.