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 7990 for branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90 – NEMO

Ignore:
Timestamp:
2017-04-29T17:24:54+02:00 (7 years ago)
Author:
gm
Message:

#1880 (HPC-09): OPA remove avmu, avmv from zdf modules + move CALL tke(gls)_rst & gls_rst in zdftke(gls) + rename zdftmx and zdfqiao

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90

    r7931 r7990  
    88   !!   NEMO     1.0  !  2002-06  (G. Madec)  F90: Free form and module 
    99   !!            3.2  !  2009-03  (M. Leclair, G. Madec, R. Benshila) test on both before & after 
     10   !!            4.0  !  2017-04  (G. Madec)  evd applied on avm (at t-point)  
    1011   !!---------------------------------------------------------------------- 
    1112 
     
    2324   USE iom             ! for iom_put 
    2425   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    25    USE wrk_nemo        ! work arrays 
    2626   USE timing          ! Timing 
    2727 
     
    4545      !!      sivity coefficients when a static instability is encountered. 
    4646      !! 
    47       !! ** Method  :   avt, avm, and the 4 neighbouring avmu, avmv coefficients 
    48       !!      are set to avevd (namelist parameter) if the water column is  
    49       !!      statically unstable (i.e. if rn2 < -1.e-12 ) 
     47      !! ** Method  :   tracer (and momentum if nn_evdm=1) vertical mixing  
     48      !!              coefficients are set to rn_evd (namelist parameter)  
     49      !!              if the water column is statically unstable. 
     50      !!                The test of static instability is performed using 
     51      !!              Brunt-Vaisala frequency (rn2 < -1.e-12) of to successive 
     52      !!              time-step (Leap-Frog environnement): before and 
     53      !!              now time-step. 
    5054      !! 
    51       !! ** Action  :   avt, avm, avmu, avmv updted in static instability cases 
    52       !! 
    53       !! References :   Lazar, A., these de l'universite Paris VI, France, 1997 
     55      !! ** Action  :   avt, avm   enhanced where static instability occurs 
    5456      !!---------------------------------------------------------------------- 
    55       INTEGER, INTENT( in ) ::   kt   ! ocean time-step indexocean time step 
     57      INTEGER, INTENT(in) ::   kt   ! ocean time-step indexocean time step 
    5658      ! 
    5759      INTEGER ::   ji, jj, jk   ! dummy loop indices 
    58       REAL(wp), POINTER, DIMENSION(:,:,:) ::   zavt_evd, zavm_evd 
     60      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zavt_evd, zavm_evd 
    5961      !!---------------------------------------------------------------------- 
    6062      ! 
     
    6870      ENDIF 
    6971      ! 
    70       CALL wrk_alloc( jpi,jpj,jpk,   zavt_evd, zavm_evd )  
    7172      ! 
    7273      zavt_evd(:,:,:) = avt(:,:,:)           ! set avt prior to evd application 
     
    7475      SELECT CASE ( nn_evdm ) 
    7576      ! 
    76       CASE ( 1 )           ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12) 
     77      CASE ( 1 )           !==  enhance tracer & momentum Kz  ==!  (if rn2<-1.e-12) 
    7778         ! 
    7879         zavm_evd(:,:,:) = avm(:,:,:)           ! set avm prior to evd application 
    7980         ! 
     81!! change last digits results 
     82!         WHERE( MAX( rn2(2:jpi,2:jpj,2:jpkm1), rn2b(2:jpi,2:jpj,2:jpkm1) )  <= -1.e-12 ) THEN 
     83!            avt(2:jpi,2:jpj,2:jpkm1) = rn_evd * wmask(2:jpi,2:jpj,2:jpkm1) 
     84!            avm(2:jpi,2:jpj,2:jpkm1) = rn_evd * wmask(2:jpi,2:jpj,2:jpkm1) 
     85!         END WHERE 
     86         ! 
    8087         DO jk = 1, jpkm1  
    81             DO jj = 2, jpj             ! no vector opt. 
    82                DO ji = 2, jpi 
     88            DO jj = 2, jpjm1 
     89               DO ji = 2, jpim1 
    8390                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN 
    84                      avt (ji  ,jj  ,jk) = rn_evd * tmask(ji  ,jj  ,jk) 
    85                      avm (ji  ,jj  ,jk) = rn_evd * tmask(ji  ,jj  ,jk) 
    86                      avmu(ji  ,jj  ,jk) = rn_evd * umask(ji  ,jj  ,jk) 
    87                      avmu(ji-1,jj  ,jk) = rn_evd * umask(ji-1,jj  ,jk) 
    88                      avmv(ji  ,jj  ,jk) = rn_evd * vmask(ji  ,jj  ,jk) 
    89                      avmv(ji  ,jj-1,jk) = rn_evd * vmask(ji  ,jj-1,jk) 
     91                     avt(ji,jj,jk) = rn_evd * wmask(ji,jj,jk) 
     92                     avm(ji,jj,jk) = rn_evd * wmask(ji,jj,jk) 
    9093                  ENDIF 
    9194               END DO 
    9295            END DO 
    9396         END DO  
    94          CALL lbc_lnk( avt , 'W', 1. )   ;   CALL lbc_lnk( avm , 'W', 1. )   ! Lateral boundary conditions 
    95          CALL lbc_lnk( avmu, 'U', 1. )   ;   CALL lbc_lnk( avmv, 'V', 1. ) 
    9697         ! 
    9798         zavm_evd(:,:,:) = avm(:,:,:) - zavm_evd(:,:,:)   ! change in avm due to evd 
    9899         CALL iom_put( "avm_evd", zavm_evd )              ! output this change 
    99100         ! 
    100       CASE DEFAULT         ! enhance vertical eddy diffusivity only (if rn2<-1.e-12)  
     101      CASE DEFAULT         !==  enhance tracer Kz  ==!   (if rn2<-1.e-12)  
     102!! change last digits results 
     103!         WHERE( MAX( rn2(2:jpi,2:jpj,2:jpkm1), rn2b(2:jpi,2:jpj,2:jpkm1) )  <= -1.e-12 ) 
     104!            avt(2:jpi,2:jpj,2:jpkm1) = rn_evd * wmask(2:jpi,2:jpj,2:jpkm1) 
     105!         END WHERE 
     106 
    101107         DO jk = 1, jpkm1 
    102 !!!         WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd   ! agissant sur T SEUL!  
    103             DO jj = 1, jpj             ! loop over the whole domain (no lbc_lnk call) 
    104                DO ji = 1, jpi 
     108            DO jj = 2, jpjm1 
     109               DO ji = 2, jpim1 
    105110                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 )   & 
    106                      avt(ji,jj,jk) = rn_evd * tmask(ji,jj,jk) 
     111                     avt(ji,jj,jk) = rn_evd * wmask(ji,jj,jk) 
    107112               END DO 
    108113            END DO 
     
    110115         ! 
    111116      END SELECT  
    112  
     117      ! 
    113118      zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:)   ! change in avt due to evd 
    114119      CALL iom_put( "avt_evd", zavt_evd )              ! output this change 
    115120      IF( l_trdtra ) CALL trd_tra( kt, 'TRA', jp_tem, jptra_evd, zavt_evd ) 
    116       ! 
    117       CALL wrk_dealloc( jpi,jpj,jpk,   zavt_evd, zavm_evd )  
    118121      ! 
    119122      IF( nn_timing == 1 )  CALL timing_stop('zdf_evd') 
Note: See TracChangeset for help on using the changeset viewer.