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 7931 for branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC – NEMO

Ignore:
Timestamp:
2017-04-19T12:15:07+02:00 (7 years ago)
Author:
gm
Message:

#1880 (HPC-09): remove key_zdfddm + phasing with last changes of HPC08 branch

Location:
branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/C1D/step_c1d.F90

    r6140 r7931  
    2727   PUBLIC stp_c1d      ! called by opa.F90 
    2828 
    29    !! * Substitutions 
    30 #  include "zdfddm_substitute.h90" 
    3129   !!---------------------------------------------------------------------- 
    3230   !! NEMO/C1D 3.7 , NEMO Consortium (2015) 
     
    9391      IF( ln_zdfevd  )   CALL zdf_evd( kstp )         ! enhanced vertical eddy diffusivity 
    9492      IF( lk_zdftmx  )   CALL zdf_tmx( kstp )         ! tidal vertical mixing 
    95       IF( lk_zdfddm  )   CALL zdf_ddm( kstp )         ! double diffusive mixing 
     93      IF( ln_zdfddm  )   CALL zdf_ddm( kstp )         ! double diffusive mixing 
    9694                         CALL zdf_mxl( kstp )         ! mixed layer depth 
    9795 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/DIA/diaar5.F90

    r7753 r7931  
    3939       
    4040   !! * Substitutions 
    41 #  include "zdfddm_substitute.h90" 
    4241#  include "vectopt_loop_substitute.h90" 
    4342   !!---------------------------------------------------------------------- 
     
    212211      ! Exclude points where rn2 is negative as convection kicks in here and 
    213212      ! work is not being done against stratification 
    214           CALL wrk_alloc( jpi, jpj, zpe ) 
    215           zpe(:,:) = 0._wp 
    216           IF( lk_zdfddm ) THEN 
    217              DO ji=1,jpi 
    218                 DO jj=1,jpj 
    219                    DO jk=1,jpk 
    220                       zrw =   ( gdepw_n(ji,jj,jk  ) - gdept_n(ji,jj,jk) )   & 
    221                          &  / ( gdept_n(ji,jj,jk-1) - gdept_n(ji,jj,jk) ) 
    222                       ! 
    223                       zaw = rab_n(ji,jj,jk,jp_tem) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_tem)* zrw 
    224                       zbw = rab_n(ji,jj,jk,jp_sal) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_sal)* zrw 
    225                       ! 
    226                       zpe(ji, jj) = zpe(ji, jj) - MIN(0._wp, rn2(ji,jj,jk)) * & 
    227                            &       grav * (avt(ji,jj,jk) * zaw * (tsn(ji,jj,jk-1,jp_tem) - tsn(ji,jj,jk,jp_tem) )  & 
    228                            &       - fsavs(ji,jj,jk) * zbw * (tsn(ji,jj,jk-1,jp_sal) - tsn(ji,jj,jk,jp_sal) ) ) 
    229  
    230                    ENDDO 
    231                 ENDDO 
    232              ENDDO 
     213         CALL wrk_alloc( jpi, jpj, zpe ) 
     214         zpe(:,:) = 0._wp 
     215         IF( ln_zdfddm ) THEN 
     216            DO jk = 2, jpk 
     217               DO jj = 1, jpj 
     218                  DO ji = 1, jpi 
     219                     IF( rn2(ji,jj,jk) > 0._wp ) THEN 
     220                        zrw =   ( gdepw_n(ji,jj,jk  ) - gdept_n(ji,jj,jk) )   & 
     221                           &  / ( gdept_n(ji,jj,jk-1) - gdept_n(ji,jj,jk) ) 
     222!!gm  this can be reduced to :  (depw-dept) / e3w   (NB idem dans bn2 !) 
     223!                        zrw =   ( gdept_n(ji,jj,jk) - gdepw_n(ji,jj,jk) ) / e3w_n(ji,jj,jk) 
     224!!gm end 
     225                        ! 
     226                        zaw = rab_n(ji,jj,jk,jp_tem) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_tem)* zrw 
     227                        zbw = rab_n(ji,jj,jk,jp_sal) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_sal)* zrw 
     228                        ! 
     229                        zpe(ji, jj) = zpe(ji, jj)            & 
     230                           &        -  grav * (  avt(ji,jj,jk) * zaw * (tsn(ji,jj,jk-1,jp_tem) - tsn(ji,jj,jk,jp_tem) )  & 
     231                           &                   - avs(ji,jj,jk) * zbw * (tsn(ji,jj,jk-1,jp_sal) - tsn(ji,jj,jk,jp_sal) ) ) 
     232                     ENDIF 
     233                  END DO 
     234               END DO 
     235             END DO 
    233236          ELSE 
    234              DO ji = 1, jpi 
    235                 DO jj = 1, jpj 
    236                    DO jk = 1, jpk 
    237                        zpe(ji,jj) = zpe(ji,jj) + avt(ji, jj, jk) * MIN(0._wp,rn2(ji, jj, jk)) * rau0 * e3w_n(ji, jj, jk) 
    238                    ENDDO 
    239                 ENDDO 
    240              ENDDO 
    241           ENDIF 
    242           CALL lbc_lnk( zpe, 'T', 1._wp)          
     237            DO jk = 1, jpk 
     238               DO ji = 1, jpi 
     239                  DO jj = 1, jpj 
     240                     zpe(ji,jj) = zpe(ji,jj) + avt(ji, jj, jk) * MIN(0._wp,rn2(ji, jj, jk)) * rau0 * e3w_n(ji, jj, jk) 
     241                  END DO 
     242               END DO 
     243            END DO 
     244         ENDIF 
     245!!gm useless lbc_lnk since the computation above is performed over 1:jpi & 1:jpj 
     246!!gm           CALL lbc_lnk( zpe, 'T', 1._wp)          
    243247          CALL iom_put( 'tnpeo', zpe ) 
    244248          CALL wrk_dealloc( jpi, jpj, zpe ) 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90

    r7753 r7931  
    8080 
    8181   !! * Substitutions 
    82 #  include "zdfddm_substitute.h90" 
    8382#  include "vectopt_loop_substitute.h90" 
    8483   !!---------------------------------------------------------------------- 
     
    234233 
    235234      CALL iom_put( "avt" , avt                        )    ! T vert. eddy diff. coef. 
     235      CALL iom_put( "avs" , avs                        )    ! S vert. eddy diff. coef. (useful only with key_zdfddm) 
    236236      CALL iom_put( "avm" , avmu                       )    ! T vert. eddy visc. coef. 
    237       CALL iom_put( "avs" , fsavs(:,:,:)               )    ! S vert. eddy diff. coef. (useful only with key_zdfddm) 
    238  
    239       IF( iom_use('logavt') )   CALL iom_put( "logavt", LOG( MAX( 1.e-20_wp, avt  (:,:,:) ) ) ) 
    240       IF( iom_use('logavs') )   CALL iom_put( "logavs", LOG( MAX( 1.e-20_wp, fsavs(:,:,:) ) ) ) 
     237 
     238      IF( iom_use('logavt') )   CALL iom_put( "logavt", LOG( MAX( 1.e-20_wp, avt(:,:,:) ) ) ) 
     239      IF( iom_use('logavs') )   CALL iom_put( "logavs", LOG( MAX( 1.e-20_wp, avs(:,:,:) ) ) ) 
    241240 
    242241      IF ( iom_use("sstgrad") .OR. iom_use("sstgrad2") ) THEN 
     
    750749            &          jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout ) 
    751750 
    752          IF( lk_zdfddm ) THEN 
     751         IF( ln_zdfddm ) THEN 
    753752            CALL histdef( nid_W,"voddmavs","Salt Vertical Eddy Diffusivity"    , "m2/s"   ,   &  ! avs 
    754753               &          jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout ) 
     
    875874      CALL histwrite( nid_W, "votkeavt", it, avt            , ndim_T, ndex_T )    ! T vert. eddy diff. coef. 
    876875      CALL histwrite( nid_W, "votkeavm", it, avmu           , ndim_T, ndex_T )    ! T vert. eddy visc. coef. 
    877       IF( lk_zdfddm ) THEN 
    878          CALL histwrite( nid_W, "voddmavs", it, fsavs(:,:,:), ndim_T, ndex_T )    ! S vert. eddy diff. coef. 
     876      IF( ln_zdfddm ) THEN 
     877         CALL histwrite( nid_W, "voddmavs", it, avs         , ndim_T, ndex_T )    ! S vert. eddy diff. coef. 
    879878      ENDIF 
    880879 
    881880      IF( ln_wave .AND. ln_sdw ) THEN 
    882          CALL histwrite( nid_U, "sdzocrtx", it, usd           , ndim_U , ndex_U )    ! i-StokesDrift-current 
    883          CALL histwrite( nid_V, "sdmecrty", it, vsd           , ndim_V , ndex_V )    ! j-StokesDrift-current 
    884          CALL histwrite( nid_W, "sdvecrtz", it, wsd           , ndim_T , ndex_T )    ! StokesDrift vert. current 
     881         CALL histwrite( nid_U, "sdzocrtx", it, usd         , ndim_U , ndex_U )    ! i-StokesDrift-current 
     882         CALL histwrite( nid_V, "sdmecrty", it, vsd         , ndim_V , ndex_V )    ! j-StokesDrift-current 
     883         CALL histwrite( nid_W, "sdvecrtz", it, wsd         , ndim_T , ndex_T )    ! StokesDrift vert. current 
    885884      ENDIF 
    886885 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf.F90

    r7753 r7931  
    4141 
    4242   !! * Substitutions 
    43 #  include "zdfddm_substitute.h90" 
    4443#  include "vectopt_loop_substitute.h90" 
    4544   !!---------------------------------------------------------------------- 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_exp.F90

    r6140 r7931  
    4141 
    4242   !! * Substitutions 
    43 #  include "zdfddm_substitute.h90" 
    4443#  include "vectopt_loop_substitute.h90" 
    4544   !!---------------------------------------------------------------------- 
     
    6261      !!                ztb = ptb + p2dt difft 
    6362      !!      where difft = dz( avt dz(ptb) ) = 1/e3t dk+1( avt/e3w dk(ptb) ) 
    64       !!           (if lk_zdfddm=T use avs on salinity and passive tracers instead of avt) 
     63      !!           (if ln_zdfddm=T use avs on salinity and passive tracers instead of avt) 
    6564      !!      difft is evaluated with an Euler split-explit scheme using a 
    6665      !!      no flux boundary condition at both surface and bottomi boundaries. 
     
    116115                        zwf(ji,jj,jk) =   avt(ji,jj,jk) * ( ztb(ji,jj,jk-1) - ztb(ji,jj,jk) ) / e3w_b(ji,jj,jk) 
    117116                     ELSE                                           ! salinity or pass. tracer : use of avs 
    118                         zwf(ji,jj,jk) = fsavs(ji,jj,jk) * ( ztb(ji,jj,jk-1) - ztb(ji,jj,jk) ) / e3w_b(ji,jj,jk) 
     117                        zwf(ji,jj,jk) = avs(ji,jj,jk) * ( ztb(ji,jj,jk-1) - ztb(ji,jj,jk) ) / e3w_b(ji,jj,jk) 
    119118                     END IF 
    120119                  END DO 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90

    r7753 r7931  
    4444 
    4545   !! * Substitutions 
    46 #  include "zdfddm_substitute.h90" 
    4746#  include "vectopt_loop_substitute.h90" 
    4847   !!---------------------------------------------------------------------- 
     
    6665      !!      It is computed using a backward time scheme (t=after field) 
    6766      !!      which provide directly the after tracer field. 
    68       !!      If lk_zdfddm=T, use avs for salinity or for passive tracers 
     67      !!      If ln_zdfddm=T, use avs for salinity or for passive tracers 
    6968      !!      Surface and bottom boundary conditions: no diffusive flux on 
    7069      !!      both tracers (bottom, applied through the masked field avt). 
     
    102101         ! Build matrix if temperature or salinity (only in double diffusion case) or first passive tracer 
    103102         ! 
    104          IF(  ( cdtype == 'TRA' .AND. ( jn == jp_tem .OR. ( jn == jp_sal .AND. lk_zdfddm ) ) ) .OR.   & 
     103         IF(  ( cdtype == 'TRA' .AND. ( jn == jp_tem .OR. ( jn == jp_sal .AND. ln_zdfddm ) ) ) .OR.   & 
    105104            & ( cdtype == 'TRC' .AND. jn == 1 )  )  THEN 
    106105            ! 
    107106            ! vertical mixing coef.: avt for temperature, avs for salinity and passive tracers 
    108             IF( cdtype == 'TRA' .AND. jn == jp_tem ) THEN   ;   zwt(:,:,2:jpk) = avt  (:,:,2:jpk) 
    109             ELSE                                            ;   zwt(:,:,2:jpk) = fsavs(:,:,2:jpk) 
     107            IF( cdtype == 'TRA' .AND. jn == jp_tem ) THEN   ;   zwt(:,:,2:jpk) = avt(:,:,2:jpk) 
     108            ELSE                                            ;   zwt(:,:,2:jpk) = avs(:,:,2:jpk) 
    110109            ENDIF 
    111110            zwt(:,:,1) = 0._wp 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/TRD/trdglo.F90

    r6140 r7931  
    5353   !! * Substitutions 
    5454#  include "vectopt_loop_substitute.h90" 
    55 #  include "zdfddm_substitute.h90" 
    5655   !!---------------------------------------------------------------------- 
    5756   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/TRD/trdmxl.F90

    r6140 r7931  
    6969   INTEGER ::   ionce, icount                    
    7070 
    71    !! * Substitutions 
    72 #  include "zdfddm_substitute.h90" 
    7371   !!---------------------------------------------------------------------- 
    7472   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/TRD/trdpen.F90

    r6140 r7931  
    3737 
    3838   !! * Substitutions 
    39 #  include "zdfddm_substitute.h90" 
    4039#  include "vectopt_loop_substitute.h90" 
    4140   !!---------------------------------------------------------------------- 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90

    r7646 r7931  
    4242 
    4343   !! * Substitutions 
    44 #  include "zdfddm_substitute.h90" 
    4544#  include "vectopt_loop_substitute.h90" 
    4645   !!---------------------------------------------------------------------- 
     
    129128            DO jk = 2, jpk 
    130129               zwt(:,:,jk) = avt(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / e3w_n(:,:,jk) * tmask(:,:,jk) 
    131                zws(:,:,jk) = fsavs(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / e3w_n(:,:,jk) * tmask(:,:,jk) 
     130               zws(:,:,jk) = avs(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / e3w_n(:,:,jk) * tmask(:,:,jk) 
    132131            END DO 
    133132            ! 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdf_oce.F90

    r7646 r7931  
    2323 
    2424   !                                 !!* namelist namzdf: vertical diffusion * 
     25!!gm 
     26   !                             ! vertical closure scheme flags 
     27   LOGICAL , PUBLIC ::   ln_zdfcst   !: constant coefficients 
     28   LOGICAL , PUBLIC ::   ln_zdfric   !: Richardson depend coefficients 
     29   LOGICAL , PUBLIC ::   ln_zdftke   !: Turbulent Kinetic Energy closure 
     30   LOGICAL , PUBLIC ::   ln_zdfgls   !: Generic Length Sclare closure 
     31   !                             ! tidal induced mixing    
     32   LOGICAL , PUBLIC ::   ln_zdftmx   !: tidal mixing parameterization flag 
     33   !                             ! double diffusion 
     34   LOGICAL , PUBLIC ::   ln_zdfddm   !: double diffusive mixing flag 
     35   REAL(wp), PUBLIC ::      rn_avts     !: maximum value of avs for salt fingering 
     36   REAL(wp), PUBLIC ::      rn_hsbfr    !: heat/salt buoyancy flux ratio 
     37!!gm 
     38   LOGICAL , PUBLIC ::   ln_zdfexp   !: explicit vertical diffusion scheme flag 
     39   INTEGER , PUBLIC ::   nn_zdfexp   !: number of sub-time step (explicit time stepping) 
     40   LOGICAL , PUBLIC ::   ln_zdfevd   !: convection: enhanced vertical diffusion flag 
     41   INTEGER , PUBLIC ::      nn_evdm     !: =0/1 flag to apply enhanced avm or not 
     42   REAL(wp), PUBLIC ::      rn_evd      !: vertical eddy coeff. for enhanced vert. diff. (m2/s) 
     43   LOGICAL , PUBLIC ::   ln_zdfnpc   !: convection: non-penetrative convection flag 
     44   INTEGER , PUBLIC ::      nn_npc      !: non penetrative convective scheme call  frequency 
     45   INTEGER , PUBLIC ::      nn_npcp     !: non penetrative convective scheme print frequency 
     46   !                             ! Surface wave-induced mixing 
     47   LOGICAL , PUBLIC ::   ln_zdfqiao  !: Enhanced wave vertical mixing Qiao(2010) formulation flag 
     48   !                             ! coefficients  
    2549   REAL(wp), PUBLIC ::   rn_avm0     !: vertical eddy viscosity (m2/s) 
    2650   REAL(wp), PUBLIC ::   rn_avt0     !: vertical eddy diffusivity (m2/s) 
    2751   INTEGER , PUBLIC ::   nn_avb      !: constant or profile background on avt (=0/1) 
    28    INTEGER , PUBLIC ::   nn_havtb    !: horizontal shape or not for avtb (=0/1) 
    29    LOGICAL , PUBLIC ::   ln_zdfexp   !: explicit vertical diffusion scheme flag 
    30    INTEGER , PUBLIC ::   nn_zdfexp   !: number of sub-time step (explicit time stepping) 
    31    LOGICAL , PUBLIC ::   ln_zdfevd   !: convection: enhanced vertical diffusion flag 
    32    INTEGER , PUBLIC ::   nn_evdm     !: =0/1 flag to apply enhanced avm or not 
    33    REAL(wp), PUBLIC ::   rn_avevd    !: vertical eddy coeff. for enhanced vert. diff. (m2/s) 
    34    LOGICAL , PUBLIC ::   ln_zdfnpc   !: convection: non-penetrative convection flag 
    35    INTEGER , PUBLIC ::   nn_npc      !: non penetrative convective scheme call  frequency 
    36    INTEGER , PUBLIC ::   nn_npcp     !: non penetrative convective scheme print frequency 
    37    LOGICAL , PUBLIC ::   ln_zdfqiao  !: Enhanced wave vertical mixing Qiao(2010) formulation flag 
     52   INTEGER , PUBLIC ::   nn_havtb    !: horizontal shape or not for avtb (=0/1)   !                             ! convection 
    3853 
     54 
     55   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avt  , avs     !: vertical eddy diffusivity coef at w-pt [m2/s] 
    3956 
    4057   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:)     ::   avmb , avtb    !: background profile of avm and avt 
     
    4360   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   tfrua, tfrva   !: top friction coefficients set in zdfbfr 
    4461   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avmu , avmv    !: vertical viscosity coef at uw- & vw-pts       [m2/s] 
    45    REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avm  , avt     !: vertical viscosity & diffusivity coef at w-pt [m2/s] 
     62   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avm            !: vertical viscosity & diffusivity coef at w-pt [m2/s] 
    4663   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   avt_k , avm_k  ! not enhanced Kz 
    4764   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   avmu_k, avmv_k ! not enhanced Kz 
     
    6481         &     tfrua(jpi, jpj), tfrva(jpi, jpj)              ,      & 
    6582         &     avmu  (jpi,jpj,jpk), avm   (jpi,jpj,jpk)      ,      & 
    66          &     avmv  (jpi,jpj,jpk), avt   (jpi,jpj,jpk)      ,      & 
     83         &     avmv  (jpi,jpj,jpk), avt   (jpi,jpj,jpk)      , avs   (jpi,jpj,jpk),          & 
    6784         &     avt_k (jpi,jpj,jpk), avm_k (jpi,jpj,jpk)      ,      &  
    6885         &     avmu_k(jpi,jpj,jpk), avmv_k(jpi,jpj,jpk)      ,      & 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfddm.F90

    r7753 r7931  
    99   !!            3.6  ! 2013-04  (G. Madec, F. Roquet) zrau compute locally using interpolation of alpha & beta 
    1010   !!---------------------------------------------------------------------- 
    11 #if defined key_zdfddm 
     11 
    1212   !!---------------------------------------------------------------------- 
    13    !!   'key_zdfddm' :                                     double diffusion 
     13   !!   zdf_ddm       : compute the Kz for salinity 
    1414   !!---------------------------------------------------------------------- 
    15    !!   zdf_ddm       : compute the Ks for salinity 
    16    !!   zdf_ddm_init  : read namelist and control the parameters 
    17    !!---------------------------------------------------------------------- 
    18    USE oce             ! ocean dynamics and tracers variables 
    19    USE dom_oce         ! ocean space and time domain variables  
    20    USE zdf_oce         ! ocean vertical physics variables 
     15   USE oce            ! ocean dynamics and tracers variables 
     16   USE dom_oce        ! ocean space and time domain variables 
     17   USE zdf_oce        ! ocean vertical physics variables 
    2118   USE eosbn2         ! equation of state 
    2219   ! 
    23    USE in_out_manager  ! I/O manager 
    24    USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    25    USE prtctl          ! Print control 
    26    USE lib_mpp         ! MPP library 
    27    USE wrk_nemo        ! work arrays 
    28    USE timing          ! Timing 
     20   USE in_out_manager ! I/O manager 
     21   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     22   USE prtctl         ! Print control 
     23   USE lib_mpp        ! MPP library 
     24   USE wrk_nemo       ! work arrays 
     25   USE timing         ! Timing 
    2926 
    3027   IMPLICIT NONE 
     
    3229 
    3330   PUBLIC   zdf_ddm       ! called by step.F90 
    34    PUBLIC   zdf_ddm_init  ! called by opa.F90 
    35    PUBLIC   zdf_ddm_alloc ! called by nemogcm.F90 
    36  
    37    LOGICAL , PUBLIC, PARAMETER ::   lk_zdfddm = .TRUE.  !: double diffusive mixing flag 
    38  
    39    REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avs   !: salinity vertical diffusivity coeff. at w-point 
    40  
    41    !                       !!* Namelist namzdf_ddm : double diffusive mixing * 
    42    REAL(wp) ::   rn_avts    ! maximum value of avs for salt fingering 
    43    REAL(wp) ::   rn_hsbfr   ! heat/salt buoyancy flux ratio 
    4431 
    4532   !! * Substitutions 
     
    5138   !!---------------------------------------------------------------------- 
    5239CONTAINS 
    53  
    54    INTEGER FUNCTION zdf_ddm_alloc() 
    55       !!---------------------------------------------------------------------- 
    56       !!                ***  ROUTINE zdf_ddm_alloc  *** 
    57       !!---------------------------------------------------------------------- 
    58       ALLOCATE( avs(jpi,jpj,jpk) , STAT= zdf_ddm_alloc ) 
    59       IF( lk_mpp             )   CALL mpp_sum ( zdf_ddm_alloc ) 
    60       IF( zdf_ddm_alloc /= 0 )   CALL ctl_warn('zdf_ddm_alloc: failed to allocate arrays') 
    61    END FUNCTION zdf_ddm_alloc 
    62  
    6340 
    6441   SUBROUTINE zdf_ddm( kt ) 
     
    174151                  &                             +  0.15 * zrau(ji,jj)          * zmskd2(ji,jj)  ) 
    175152               ! add to the eddy viscosity coef. previously computed 
    176 # if defined key_zdftmx_new 
    177                ! key_zdftmx_new: New internal wave-driven param: use avs value computed by zdftmx 
    178                avs (ji,jj,jk) = avs(ji,jj,jk) + zavfs + zavds 
    179 # else 
    180                avs (ji,jj,jk) = avt(ji,jj,jk) + zavfs + zavds 
    181 # endif 
    182                avt (ji,jj,jk) = avt(ji,jj,jk) + zavft + zavdt 
    183                avm (ji,jj,jk) = avm(ji,jj,jk) + MAX( zavft + zavdt, zavfs + zavds ) 
     153               avs(ji,jj,jk) = avt(ji,jj,jk) + zavfs + zavds 
     154               avt(ji,jj,jk) = avt(ji,jj,jk) + zavft + zavdt 
     155               avm(ji,jj,jk) = avm(ji,jj,jk) + MAX( zavft + zavdt, zavfs + zavds ) 
    184156            END DO 
    185157         END DO 
     
    221193   END SUBROUTINE zdf_ddm 
    222194    
    223     
    224    SUBROUTINE zdf_ddm_init 
    225       !!---------------------------------------------------------------------- 
    226       !!                  ***  ROUTINE zdf_ddm_init  *** 
    227       !! 
    228       !! ** Purpose :   Initialization of double diffusion mixing scheme 
    229       !! 
    230       !! ** Method  :   Read the namzdf_ddm namelist and check the parameter values 
    231       !!              called by zdf_ddm at the first timestep (nit000) 
    232       !!---------------------------------------------------------------------- 
    233       INTEGER ::   ios   ! local integer 
    234       !! 
    235       NAMELIST/namzdf_ddm/ rn_avts, rn_hsbfr 
    236       !!---------------------------------------------------------------------- 
    237       ! 
    238       REWIND( numnam_ref )              ! Namelist namzdf_ddm in reference namelist : Double diffusion mixing scheme 
    239       READ  ( numnam_ref, namzdf_ddm, IOSTAT = ios, ERR = 901) 
    240 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf_ddm in reference namelist', lwp ) 
    241  
    242       REWIND( numnam_cfg )              ! Namelist namzdf_ddm in configuration namelist : Double diffusion mixing scheme 
    243       READ  ( numnam_cfg, namzdf_ddm, IOSTAT = ios, ERR = 902 ) 
    244 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf_ddm in configuration namelist', lwp ) 
    245       IF(lwm) WRITE ( numond, namzdf_ddm ) 
    246       ! 
    247       IF(lwp) THEN                    ! Parameter print 
    248          WRITE(numout,*) 
    249          WRITE(numout,*) 'zdf_ddm : double diffusive mixing' 
    250          WRITE(numout,*) '~~~~~~~' 
    251          WRITE(numout,*) '   Namelist namzdf_ddm : set dd mixing parameter' 
    252          WRITE(numout,*) '      maximum avs for dd mixing      rn_avts   = ', rn_avts 
    253          WRITE(numout,*) '      heat/salt buoyancy flux ratio  rn_hsbfr  = ', rn_hsbfr 
    254       ENDIF 
    255       ! 
    256       !                               ! allocate zdfddm arrays 
    257       IF( zdf_ddm_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_ddm_init : unable to allocate arrays' ) 
    258       !                               ! initialization to masked Kz 
    259       avs(:,:,:) = rn_avt0 * wmask(:,:,:)  
    260       ! 
    261    END SUBROUTINE zdf_ddm_init 
    262  
    263 #else 
    264    !!---------------------------------------------------------------------- 
    265    !!   Default option :          Dummy module          No double diffusion 
    266    !!---------------------------------------------------------------------- 
    267    LOGICAL, PUBLIC, PARAMETER ::   lk_zdfddm = .FALSE.   !: double diffusion flag 
    268 CONTAINS 
    269    SUBROUTINE zdf_ddm( kt )           ! Dummy routine 
    270       WRITE(*,*) 'zdf_ddm: You should not have seen this print! error?', kt 
    271    END SUBROUTINE zdf_ddm 
    272    SUBROUTINE zdf_ddm_init            ! Dummy routine 
    273    END SUBROUTINE zdf_ddm_init 
    274 #endif 
    275  
    276195   !!====================================================================== 
    277196END MODULE zdfddm 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90

    r7753 r7931  
    8282               DO ji = 2, jpi 
    8383                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN 
    84                      avt (ji  ,jj  ,jk) = rn_avevd * tmask(ji  ,jj  ,jk) 
    85                      avm (ji  ,jj  ,jk) = rn_avevd * tmask(ji  ,jj  ,jk) 
    86                      avmu(ji  ,jj  ,jk) = rn_avevd * umask(ji  ,jj  ,jk) 
    87                      avmu(ji-1,jj  ,jk) = rn_avevd * umask(ji-1,jj  ,jk) 
    88                      avmv(ji  ,jj  ,jk) = rn_avevd * vmask(ji  ,jj  ,jk) 
    89                      avmv(ji  ,jj-1,jk) = rn_avevd * vmask(ji  ,jj-1,jk) 
     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) 
    9090                  ENDIF 
    9191               END DO 
     
    104104               DO ji = 1, jpi 
    105105                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 )   & 
    106                      avt(ji,jj,jk) = rn_avevd * tmask(ji,jj,jk) 
     106                     avt(ji,jj,jk) = rn_evd * tmask(ji,jj,jk) 
    107107               END DO 
    108108            END DO 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfini.F90

    r7646 r7931  
    5151      INTEGER ::   ioptio, ios       ! local integers 
    5252      !! 
    53       NAMELIST/namzdf/ rn_avm0, rn_avt0, nn_avb, nn_havtb, ln_zdfexp, nn_zdfexp,  & 
    54          &        ln_zdfevd, nn_evdm, rn_avevd, ln_zdfnpc, nn_npc, nn_npcp,       & 
    55          &        ln_zdfqiao 
     53      NAMELIST/namzdf/ ln_zdfcst, ln_zdfric, ln_zdftke, ln_zdfgls,   &     ! type of closure scheme 
     54         &             ln_zdfevd, nn_evdm, rn_evd ,                  &     ! convection : evd 
     55         &             ln_zdfnpc, nn_npc , nn_npcp,                  &     ! convection : npc 
     56         &             ln_zdfddm, rn_avts, rn_hsbfr,                 &     ! double diffusion 
     57         &             ln_zdftmx,                                    &     ! tidal mixing 
     58         &             ln_zdfqiao,                                   &     ! surface wave-induced mixing 
     59         &             ln_zdfexp, nn_zdfexp,                         &     ! time-stepping 
     60         &             rn_avm0, rn_avt0, nn_avb, nn_havtb                  ! coefficients 
     61 
     62 
     63!!org      NAMELIST/namzdf/ rn_avm0, rn_avt0, nn_avb, nn_havtb, ln_zdfexp, nn_zdfexp,  & 
     64!!org         &        ln_zdfevd, nn_evdm, rn_avevd, ln_zdfnpc, nn_npc, nn_npcp,       & 
     65!!org         &        ln_zdfqiao 
    5666      !!---------------------------------------------------------------------- 
    5767 
     
    7080         WRITE(numout,*) '~~~~~~~~' 
    7181         WRITE(numout,*) '   Namelist namzdf : set vertical mixing mixing parameters' 
     82         WRITE(numout,*) '      vertical closure scheme' 
     83         WRITE(numout,*) '         constant vertical mixing coefficient    ln_zdfcst = ', ln_zdfcst 
     84         WRITE(numout,*) '         constant vertical mixing coefficient    ln_zdfric = ', ln_zdfric 
     85         WRITE(numout,*) '         constant vertical mixing coefficient    ln_zdftke = ', ln_zdftke 
     86         WRITE(numout,*) '         constant vertical mixing coefficient    ln_zdfgls = ', ln_zdfgls 
     87         WRITE(numout,*) '      convection: ' 
     88         WRITE(numout,*) '         enhanced vertical diffusion             ln_zdfevd = ', ln_zdfevd 
     89         WRITE(numout,*) '            applied on momentum (=1/0)             nn_evdm = ', nn_evdm 
     90         WRITE(numout,*) '            vertical coefficient for evd           rn_evd  = ', rn_evd 
     91         WRITE(numout,*) '         non-penetrative convection (npc)        ln_zdfnpc = ', ln_zdfnpc 
     92         WRITE(numout,*) '            npc call  frequency                    nn_npc  = ', nn_npc 
     93         WRITE(numout,*) '            npc print frequency                    nn_npcp = ', nn_npcp 
     94         WRITE(numout,*) '      double diffusive mixing                    ln_zdfddm = ', ln_zdfddm 
     95         WRITE(numout,*) '         maximum avs for dd mixing                 rn_avts = ', rn_avts 
     96         WRITE(numout,*) '         heat/salt buoyancy flux ratio             rn_hsbfr= ', rn_hsbfr 
     97         WRITE(numout,*) '      surface wave-induced mixing                ln_zdfqiao= ', ln_zdfqiao                                          ! surface wave induced mixing 
     98         WRITE(numout,*) '      tidal mixing                               ln_zdftmx = ', ln_zdftmx 
     99         WRITE(numout,*) '      time splitting / backward scheme           ln_zdfexp = ', ln_zdfexp 
     100         WRITE(numout,*) '         number of sub-time step (ln_zdfexp=T)   nn_zdfexp = ', nn_zdfexp 
     101         WRITE(numout,*) '      coefficients : ' 
    72102         WRITE(numout,*) '      vertical eddy viscosity             rn_avm0   = ', rn_avm0 
    73103         WRITE(numout,*) '      vertical eddy diffusivity           rn_avt0   = ', rn_avt0 
    74104         WRITE(numout,*) '      constant background or profile      nn_avb    = ', nn_avb 
    75105         WRITE(numout,*) '      horizontal variation for avtb       nn_havtb  = ', nn_havtb 
    76          WRITE(numout,*) '      time splitting / backward scheme    ln_zdfexp = ', ln_zdfexp 
    77          WRITE(numout,*) '      number of time step                 nn_zdfexp = ', nn_zdfexp 
    78          WRITE(numout,*) '      enhanced vertical diffusion         ln_zdfevd = ', ln_zdfevd 
    79          WRITE(numout,*) '         applied on momentum (=1/0)       nn_evdm   = ', nn_evdm 
    80          WRITE(numout,*) '      vertical coefficient for evd        rn_avevd  = ', rn_avevd 
    81          WRITE(numout,*) '      non-penetrative convection (npc)    ln_zdfnpc = ', ln_zdfnpc 
    82          WRITE(numout,*) '      npc call  frequency                 nn_npc    = ', nn_npc 
    83          WRITE(numout,*) '      npc print frequency                 nn_npcp   = ', nn_npcp 
    84          WRITE(numout,*) '      Qiao formulation flag               ln_zdfqiao=', ln_zdfqiao 
    85       ENDIF 
     106      ENDIF 
     107 
     108      IF(ln_zdfddm) THEN                    ! double diffusive mixing' 
     109         ALLOCATE( avs(jpi,jpj,jpk) ) 
     110         avs(:,:,:) = rn_avt0 * wmask(:,:,:)  
     111      ENDIF 
     112 
    86113 
    87114      !                          !* Parameter & logical controls 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftmx.F90

    r7779 r7931  
    163163      !                          ! ----------------------- ! 
    164164      DO jk = 2, jpkm1              !* update momentum & tracer diffusivity with tidal mixing 
    165          avt(:,:,jk) = avt(:,:,jk) + zav_tide(:,:,jk) * wmask(:,:,jk) 
     165         avt(:,:,jk) = avs(:,:,jk) + zav_tide(:,:,jk) * wmask(:,:,jk) 
    166166         avm(:,:,jk) = avm(:,:,jk) + zav_tide(:,:,jk) * wmask(:,:,jk) 
    167167         DO jj = 2, jpjm1 
     
    591591 
    592592   !! * Substitutions 
    593 #  include "zdfddm_substitute.h90" 
    594593#  include "vectopt_loop_substitute.h90" 
    595594   !!---------------------------------------------------------------------- 
     
    700699         emix_tmx(:,:,jk) = zfact(:,:) * (  EXP( ( gde3w_n(:,:,jk  ) - zhdep(:,:) ) / hcri_tmx(:,:) )                      & 
    701700            &                             - EXP( ( gde3w_n(:,:,jk-1) - zhdep(:,:) ) / hcri_tmx(:,:) )  ) * wmask(:,:,jk)   & 
     701!!gm delta(gde3w_n) = e3t_n  !!  Please verify the grid-point position w versus t-point 
    702702            &                          / ( gde3w_n(:,:,jk) - gde3w_n(:,:,jk-1) ) 
    703703      END DO 
     
    824824      IF( kt == nit000 ) THEN        !* Control print at first time-step: diagnose the energy consumed by zav_wave 
    825825         ztpc = 0._wp 
     826!!gm used of glosum 3D.... 
    826827         DO jk = 2, jpkm1 
    827828            DO jj = 1, jpj 
     
    860861         CALL iom_put( "av_ratio", zav_ratio ) 
    861862         DO jk = 2, jpkm1           !* update momentum & tracer diffusivity with wave-driven mixing 
    862             fsavs(:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) * zav_ratio(:,:,jk) 
    863             avt  (:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) 
    864             avm  (:,:,jk) = avm(:,:,jk) + zav_wave(:,:,jk) 
     863            avs(:,:,jk) = avs(:,:,jk) + zav_wave(:,:,jk) * zav_ratio(:,:,jk) 
     864            avt(:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) 
     865            avm(:,:,jk) = avm(:,:,jk) + zav_wave(:,:,jk) 
    865866         END DO 
    866867         ! 
    867868      ELSE                          !* update momentum & tracer diffusivity with wave-driven mixing 
    868869         DO jk = 2, jpkm1 
    869             fsavs(:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) 
    870             avt  (:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) 
    871             avm  (:,:,jk) = avm(:,:,jk) + zav_wave(:,:,jk) 
     870            avs(:,:,jk) = avs(:,:,jk) + zav_wave(:,:,jk) 
     871            avt(:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) 
     872            avm(:,:,jk) = avm(:,:,jk) + zav_wave(:,:,jk) 
    872873         END DO 
    873874      ENDIF 
     
    976977            &               'the viscous molecular value & a very small diffusive value, resp.' 
    977978      ENDIF 
    978        
    979       IF( .NOT.lk_zdfddm )   CALL ctl_stop( 'STOP', 'zdf_tmx_init_new : key_zdftmx_new requires key_zdfddm' ) 
    980        
     979             
    981980      !                             ! allocate tmx arrays 
    982981      IF( zdf_tmx_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_tmx_init : unable to allocate tmx arrays' ) 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r7904 r7931  
    463463      IF( lk_zdfgls     )   CALL zdf_gls_init      ! GLS closure scheme 
    464464      IF( lk_zdftmx     )   CALL zdf_tmx_init      ! tidal vertical mixing 
    465       IF( lk_zdfddm     )   CALL zdf_ddm_init      ! double diffusive mixing 
     465!!gm      IF( ln_zdfddm     )   CALL zdf_ddm_init      ! double diffusive mixing 
    466466          
    467467      !                                         ! Lateral physics 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/step.F90

    r7753 r7931  
    136136      IF( lk_zdfcst  ) THEN                                ! Constant Kz (reset avt, avm[uv] to the background value) 
    137137         avt (:,:,:) = rn_avt0 * wmask (:,:,:) 
     138         avm (:,:,:) = rn_avm0 * wmask (:,:,:) 
    138139         avmu(:,:,:) = rn_avm0 * wumask(:,:,:) 
    139140         avmv(:,:,:) = rn_avm0 * wvmask(:,:,:) 
    140141      ENDIF 
    141  
     142      ! 
    142143      IF( ln_rnf_mouth ) THEN                         ! increase diffusivity at rivers mouths 
    143144         DO jk = 2, nkrnf   ;   avt(:,:,jk) = avt(:,:,jk) + 2._wp * rn_avt_rnf * rnfmsk(:,:) * tmask(:,:,jk)   ;   END DO 
    144145      ENDIF 
     146      ! 
    145147      IF( ln_zdfevd  )   CALL zdf_evd( kstp )         ! enhanced vertical eddy diffusivity 
    146  
     148      ! 
     149      IF( ln_zdfddm  ) THEN                           ! double diffusive mixing 
     150                         CALL zdf_ddm( kstp ) 
     151      ELSE                                            ! avs=avt 
     152         DO jk = 2, jpkm1   ;   avs(:,:,jk) = avt(:,:,jk)   ;   END DO 
     153      ENDIF 
     154      ! 
    147155      IF( lk_zdftmx  )   CALL zdf_tmx( kstp )         ! tidal vertical mixing 
    148  
    149       IF( lk_zdfddm  )   CALL zdf_ddm( kstp )         ! double diffusive mixing 
    150156 
    151157                         CALL zdf_mxl( kstp )         ! mixed layer depth 
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/stpctl.F90

    r7904 r7931  
    8787      ! 
    8888      IF( MOD( kt, nwrite ) == 1 .AND. lwp ) THEN 
    89          WRITE(numout,*) ' ==>> time-step= ',kt,' |U| max: ', zmax(1), ' SSS min:', - zmax(2) 
     89         WRITE(numout,*) ' ==>> time-step= ', kt, ' |ssh| max: ',   zmax(1), ' |U| max: ', zmax(2),   & 
     90            &                                     ' SSS min: '  , - zmax(3) 
    9091      ENDIF 
    9192      ! 
Note: See TracChangeset for help on using the changeset viewer.