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 461 for trunk/NEMO/OPA_SRC/LDF/ldfdyn.F90 – NEMO

Ignore:
Timestamp:
2006-05-10T19:15:54+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_052:RB: update lateral diffusion computation following the reorganization of both dynamics and tracers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/LDF/ldfdyn.F90

    r247 r461  
    104104         WRITE(numout,*) '             horizontal eddy viscosity            ahm0   = ', ahm0 
    105105         WRITE(numout,*) '             background viscosity                 ahmb0  = ', ahmb0 
    106          WRITE(numout,*) 
    107       ENDIF 
    108  
    109       ! Parameter control 
    110  
    111       ! control the input 
    112       ioptio = 0 
    113       IF( ln_dynldf_lap   )   ioptio = ioptio + 1 
    114       IF( ln_dynldf_bilap )   ioptio = ioptio + 1 
    115       IF( ioptio /= 1 )   THEN 
    116           IF(lwp) WRITE(numout,cform_err) 
    117           IF(lwp) WRITE(numout,*) '          use ONE of the 2 lap/bilap operator type on momentum' 
    118           nstop = nstop + 1 
    119       ENDIF 
    120       ioptio = 0 
    121       IF( ln_dynldf_level )   ioptio = ioptio + 1 
    122       IF( ln_dynldf_hor   )   ioptio = ioptio + 1 
    123       IF( ln_dynldf_iso   )   ioptio = ioptio + 1 
    124       IF( ioptio /= 1 ) THEN 
    125          IF(lwp) WRITE(numout,cform_err) 
    126          IF(lwp) WRITE(numout,*) '          use only ONE direction (level/hor/iso)' 
    127          nstop = nstop + 1 
    128       ENDIF 
    129  
    130       IF( lk_sco ) THEN          ! s-coordinates: rotation required for horizontal or isopycnal direction 
    131          IF( ( ln_dynldf_iso .OR. ln_dynldf_hor ) .AND. .NOT.lk_ldfslp ) THEN 
    132             IF(lwp) WRITE(numout,cform_err) 
    133             IF(lwp) WRITE(numout,*) '          the rotation of the viscous tensor require key_ldfslp' 
    134             IF( .NOT.lk_esopa )   nstop = nstop + 1 
    135          ENDIF 
    136       ELSE                       ! z-coordinates with/without partial step: 
    137          ln_dynldf_level = ln_dynldf_level .OR. ln_dynldf_hor      ! level mixing = horizontal mixing 
    138          ln_dynldf_hor   = .FALSE. 
    139          IF(lwp) WRITE(numout,*) '          horizontal mixing in z-coord or partial steps: force ln_dynldf_level = T' 
    140          IF(lwp) WRITE(numout,*) '                                                  and    force ln_dynldf_hor   = F' 
    141          IF( ln_dynldf_iso .AND. .NOT.lk_ldfslp ) THEN             ! rotation required for isopycnal mixing 
    142             IF(lwp) WRITE(numout,cform_err) 
    143             IF(lwp) WRITE(numout,*) '          the rotation of the viscous tensor require key_ldfslp' 
    144             IF( .NOT.lk_esopa )   nstop = nstop + 1 
    145          ENDIF 
    146       ENDIF 
    147  
    148       l_dynldf_lap     =       ln_dynldf_lap   .AND. ln_dynldf_level     ! iso-level   laplacian operator 
    149       l_dynldf_bilap   =       ln_dynldf_bilap .AND. ln_dynldf_level     ! iso-level bilaplacian operator 
    150       l_dynldf_bilapg  =       ln_dynldf_bilap .AND. ln_dynldf_hor       ! geopotential bilap. (s-coord) 
    151       l_dynldf_iso     =       ln_dynldf_lap   .AND.                  &  ! laplacian operator 
    152          &                   ( ln_dynldf_iso   .OR.  ln_dynldf_hor )     ! iso-neutral (z-coord) or horizontal (s-coord) 
    153  
    154       l_dynzdf_iso    = .FALSE. 
    155       IF( l_dynldf_iso )   l_dynzdf_iso = .TRUE. 
    156  
    157       ioptio = 0 
    158       IF( l_dynldf_lap     )   ioptio = ioptio + 1 
    159       IF( l_dynldf_bilap   )   ioptio = ioptio + 1 
    160       IF( l_dynldf_bilapg  )   ioptio = ioptio + 1 
    161       IF( l_dynldf_iso     )   ioptio = ioptio + 1 
    162       IF( ioptio /= 1 ) THEN 
    163          IF(lwp) WRITE(numout,cform_err) 
    164          IF(lwp) WRITE(numout,*) '          this combination of operator and direction has not been implemented' 
    165          nstop = nstop + 1 
    166       ENDIF 
    167       IF( lk_esopa ) THEN 
    168          l_dynldf_lap = .TRUE.   ;   l_dynldf_bilap   = .TRUE.   ;   l_dynldf_bilapg  = .TRUE. 
    169          l_dynldf_iso = .TRUE.   ;   l_dynzdf_iso     = .TRUE. 
    170          IF(lwp ) WRITE(numout,*) '          esopa test: use all lateral physics options' 
    171       ENDIF 
    172  
    173       ! control print 
    174       IF( l_dynldf_lap    .AND. lwp ) WRITE(numout,*) '          iso-level laplacian momentum operator' 
    175       IF( l_dynldf_bilap  .AND. lwp ) WRITE(numout,*) '          iso-level bilaplacian momentum operator' 
    176       IF( l_dynldf_bilapg .AND. lwp ) WRITE(numout,*) '          geopotential bilaplacian momentum operator' 
    177       IF( l_dynldf_iso    .AND. lwp ) WRITE(numout,*) '          iso-neutral laplacian momentum operator' 
     106      ENDIF 
     107 
     108      ! ... check of lateral diffusive operator on tracers 
     109      !           ==> will be done in trazdf module 
    178110 
    179111      ! ... Space variation of eddy coefficients 
     
    190122      IF(lwp) WRITE(numout,*) '          momentum mixing coef. = F( depth )' 
    191123      ioptio = ioptio+1 
    192       IF( lk_sco ) THEN 
     124      IF( ln_sco ) THEN 
    193125         IF(lwp) WRITE(numout,cform_err) 
    194          IF(lwp) WRITE(numout,*) '          key_dynldf_c1d cannot be used in s-coordinate (key_s_coord)' 
     126         IF(lwp) WRITE(numout,*) '          key_dynldf_c1d cannot be used in s-coordinate (ln_sco)' 
    195127         nstop = nstop + 1 
    196128      ENDIF 
     
    206138 
    207139 
    208       IF( l_dynldf_bilap .OR. l_dynldf_bilapg ) THEN 
     140      IF( ln_dynldf_bilap ) THEN 
    209141         IF(lwp) WRITE(numout,*) '          biharmonic momentum diffusion' 
    210142         IF( ahm0 > 0 .AND. .NOT. lk_esopa ) THEN 
     
    276208      !!---------------------------------------------------------------------- 
    277209 
    278       zm00 = TANH( ( pdam - gdept(1    ) ) / pwam ) 
    279       zm01 = TANH( ( pdam - gdept(jpkm1) ) / pwam ) 
     210      zm00 = TANH( ( pdam - gdept_0(1    ) ) / pwam ) 
     211      zm01 = TANH( ( pdam - gdept_0(jpkm1) ) / pwam ) 
    280212      zmhs = zm00 / zm01 
    281213      zmhb = ( 1.e0 - pbot ) / ( 1.e0 - zmhs ) / zm01 
     
    324256      !!---------------------------------------------------------------------- 
    325257 
    326       zm00 = TANH( ( pdam - gdept(1    ) ) / pwam ) 
    327       zm01 = TANH( ( pdam - gdept(jpkm1) ) / pwam ) 
     258      zm00 = TANH( ( pdam - gdept_0(1    ) ) / pwam ) 
     259      zm01 = TANH( ( pdam - gdept_0(jpkm1) ) / pwam ) 
    328260      zmhs = zm00 / zm01 
    329261      zmhb = ( 1.e0 - pbot ) / ( 1.e0 - zmhs ) / zm01 
     
    373305      !!---------------------------------------------------------------------- 
    374306 
    375       zm00 = TANH( ( pdam - gdept(1    ) ) / pwam )    
    376       zm01 = TANH( ( pdam - gdept(jpkm1) ) / pwam ) 
     307      zm00 = TANH( ( pdam - gdept_0(1    ) ) / pwam )    
     308      zm01 = TANH( ( pdam - gdept_0(jpkm1) ) / pwam ) 
    377309      zmhs = zm00 / zm01 
    378310      zmhb = ( 1.e0 - pbot ) / ( 1.e0 - zmhs ) / zm01 
Note: See TracChangeset for help on using the changeset viewer.