- Timestamp:
- 2009-07-24T16:22:23+02:00 (15 years ago)
- Location:
- trunk/NEMO/OPA_SRC
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/DYN/dynzdf_exp.F90
r1146 r1537 73 73 ! ----------------------------- 74 74 zrau0r = 1. / rau0 ! inverse of the reference density 75 zlavmr = 1. / float( n _zdfexp ) ! inverse of the number of sub time step75 zlavmr = 1. / float( nn_zdfexp ) ! inverse of the number of sub time step 76 76 77 77 ! ! =============== … … 94 94 95 95 ! Time splitting loop 96 DO jl = 1, n _zdfexp96 DO jl = 1, nn_zdfexp 97 97 98 98 ! First vertical derivative … … 104 104 END DO 105 105 106 ! Second vertical derivative and trend estimation at kt+l*rdt/n _zdfexp106 ! Second vertical derivative and trend estimation at kt+l*rdt/nn_zdfexp 107 107 DO jk = 1, jpkm1 108 108 DO ji = 2, jpim1 -
trunk/NEMO/OPA_SRC/TRA/traadv_cen2.F90
r1528 r1537 30 30 USE sbcrnf ! river runoffs 31 31 USE in_out_manager ! I/O manager 32 USE iom ! IOM library 32 33 USE lib_mpp 33 34 USE lbclnk ! ocean lateral boundary condition (or mpp link) … … 35 36 USE prtctl ! Print control 36 37 USE zdf_oce ! ocean vertical physics 38 USE restart ! ocean restart 37 39 38 40 IMPLICIT NONE … … 156 158 ! 157 159 btr2(:,:) = 1. / ( e1t(:,:) * e2t(:,:) ) ! inverse of T-point surface 158 IF ( jp_cfg == 2 ) THEN159 !Increase the background in the surface layers160 161 162 163 164 160 ! 161 IF( jp_cfg == 2 .AND. .NOT. ln_rstart ) THEN ! Increase the background in the surface layers 162 avmb(1) = 10. * avmb(1) ; avtb(1) = 10. * avtb(1) 163 avmb(2) = 10. * avmb(2) ; avtb(2) = 10. * avtb(2) 164 avmb(3) = 5. * avmb(3) ; avtb(3) = 5. * avtb(3) 165 avmb(4) = 2.5 * avmb(4) ; avtb(4) = 2.5 * avtb(4) 166 ENDIF 165 167 ENDIF 166 168 … … 412 414 ENDIF 413 415 416 ! write avmb, avtb in restart (traadv_cen2 requires a modified avmb, avtb that are 417 ! --------------------------- required in restart file to ensure restartability) 418 ! avmb, avtb will be read in zdfini in restart case as they are used in zdftke, kpp etc... 419 IF( lrst_oce ) THEN 420 CALL iom_rstput( kt, nitrst, numrow, 'avmb', avmb ) 421 CALL iom_rstput( kt, nitrst, numrow, 'avtb', avtb ) 422 ENDIF 423 414 424 IF(ln_ctl) CALL prt_ctl( tab3d_1=ta, clinfo1=' cen2 zad - Ta: ', mask1=tmask, & 415 425 & tab3d_2=sa, clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) -
trunk/NEMO/OPA_SRC/TRA/tranpc.F90
r1146 r1537 4 4 !! Ocean active tracers: non penetrative convection scheme 5 5 !!============================================================================== 6 !! History : 1.0 ! 90-09 (G. Madec) Original code 7 !! ! 91-11 (G. Madec) 8 !! ! 92-06 (M. Imbard) periodic conditions on t and s 9 !! ! 93-03 (M. Guyon) symetrical conditions 10 !! ! 96-01 (G. Madec) statement function for e3 11 !! suppression of common work arrays 12 !! 8.5 ! 02-06 (G. Madec) free form F90 13 !! 9.0 ! 08-06 (G. Madec) applied on ta, sa and called before tranxt in step.F90 14 !!---------------------------------------------------------------------- 15 16 !!---------------------------------------------------------------------- 17 !! tra_npc : apply the non penetrative convection scheme 18 !! tra_npc_init : initialization and control of the scheme 6 !! History : 1.0 ! 1990-09 (G. Madec) Original code 7 !! ! 1996-01 (G. Madec) statement function for e3 8 !! NEMO 1.0 ! 2002-06 (G. Madec) free form F90 9 !! 3.0 ! 2008-06 (G. Madec) applied on ta, sa and called before tranxt in step.F90 10 !!---------------------------------------------------------------------- 11 12 !!---------------------------------------------------------------------- 13 !! tra_npc : apply the non penetrative convection scheme 19 14 !!---------------------------------------------------------------------- 20 15 USE oce ! ocean dynamics and active tracers 21 16 USE dom_oce ! ocean space and time domain 17 USE zdf_oce ! ocean vertical physics 22 18 USE trdmod ! ocean active tracer trends 23 19 USE trdmod_oce ! ocean variables trends … … 31 27 PUBLIC tra_npc ! routine called by step.F90 32 28 33 !!* Namelist namnpc: non penetrative convection algorithm34 INTEGER :: nnpc1 = 1 ! nnpc1 non penetrative convective scheme frequency35 INTEGER :: nnpc2 = 15 ! nnpc2 non penetrative convective scheme print frequency36 37 29 !! * Substitutions 38 30 # include "domzgr_substitute.h90" 39 31 !!---------------------------------------------------------------------- 40 !! OPA 9.0 , LOCEAN-IPSL (2005)32 !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009) 41 33 !! $Id$ 42 34 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) … … 78 70 !!---------------------------------------------------------------------- 79 71 80 IF( kt == nit000 ) CALL tra_npc_init ! Initialisation 81 82 IF( MOD( kt, nnpc1 ) == 0 ) THEN 72 IF( MOD( kt, nn_npc ) == 0 ) THEN 83 73 84 74 inpcc = 0 … … 214 204 ! 2. non penetrative convective scheme statistics 215 205 ! ----------------------------------------------- 216 IF( nn pc2 /= 0 .AND. MOD( kt, nnpc2) == 0 ) THEN206 IF( nn_npcp /= 0 .AND. MOD( kt, nn_npcp ) == 0 ) THEN 217 207 IF(lwp) WRITE(numout,*)' kt=',kt, ' number of statically instable', & 218 208 & ' water column : ',inpcc, ' number of iteration : ',inpci … … 223 213 END SUBROUTINE tra_npc 224 214 225 226 SUBROUTINE tra_npc_init227 !!----------------------------------------------------------------------228 !! *** ROUTINE tra_npc_init ***229 !!230 !! ** Purpose : initializations of the non-penetrative adjustment scheme231 !!----------------------------------------------------------------------232 NAMELIST/namnpc/ nnpc1, nnpc2233 !234 REWIND( numnam ) ! Namelist namzdf : vertical diffusion235 READ ( numnam, namnpc )236 !237 IF(lwp) THEN ! Namelist print238 WRITE(numout,*)239 WRITE(numout,*) 'tra_npc_init : Non Penetrative Convection (npc) scheme'240 WRITE(numout,*) '~~~~~~~~~~~~'241 WRITE(numout,*) ' Namelist namnpc : set npc scheme parameters'242 WRITE(numout,*) ' npc scheme frequency nnpc1 = ', nnpc1243 WRITE(numout,*) ' npc scheme print frequency nnpc2 = ', nnpc2244 ENDIF245 !246 IF ( nnpc1 == 0 ) THEN ! Parameter controls247 IF(lwp) WRITE(numout,cform_war)248 IF(lwp) WRITE(numout,*) ' nnpc1 = ', nnpc1, ' is forced to 1'249 nnpc1 = 1250 nwarn = nwarn + 1251 ENDIF252 !253 END SUBROUTINE tra_npc_init254 255 215 !!====================================================================== 256 216 END MODULE tranpc -
trunk/NEMO/OPA_SRC/TRA/trazdf_exp.F90
r1438 r1537 90 90 ! Initializations 91 91 ! --------------- 92 zlavmr = 1. / float( n _zdfexp ) ! Local constant92 zlavmr = 1. / float( nn_zdfexp ) ! Local constant 93 93 ! 94 94 zwy(:,:, 1 ) = 0.e0 ; zww(:,:, 1 ) = 0.e0 ! surface boundary conditions: no flux … … 100 100 ! ------------------- 101 101 ! 102 DO jl = 1, n _zdfexp102 DO jl = 1, nn_zdfexp 103 103 ! ! first vertical derivative 104 104 DO jk = 2, jpk … … 112 112 END DO 113 113 ! 114 DO jk = 1, jpkm1 ! second vertical derivative ==> tracer at kt+l*2*rdt/n _zdfexp114 DO jk = 1, jpkm1 ! second vertical derivative ==> tracer at kt+l*2*rdt/nn_zdfexp 115 115 DO jj = 2, jpjm1 116 116 DO ji = fs_2, fs_jpim1 ! vector opt. -
trunk/NEMO/OPA_SRC/ZDF/zdf_oce.F90
r1498 r1537 6 6 !! history : 1.0 ! 2002-06 (G. Madec) Original code 7 7 !! 3.2 ! 2009-07 (G.Madec) addition of avm 8 !!----------------------------------------------------------------------9 10 8 !!---------------------------------------------------------------------- 11 9 USE par_oce ! ocean parameters … … 20 18 #endif 21 19 22 ! !!* namelist namzdf: vertical diffusion 23 LOGICAL , PUBLIC :: ln_zdfexp = .FALSE. !: explicit vertical diffusion scheme flag 24 LOGICAL , PUBLIC :: ln_zdfevd = .TRUE. !: convection: enhanced vertical diffusion flag 25 LOGICAL , PUBLIC :: ln_zdfnpc = .FALSE. !: convection: non-penetrative convection flag 26 INTEGER , PUBLIC :: n_zdfexp = 3 !: number of sub-time step (explicit time stepping) 27 INTEGER , PUBLIC :: n_evdm = 1 !: =0/1 flag to apply enhanced avm or not 28 REAL(wp), PUBLIC :: avm0 = 1.e-4_wp !: vertical eddy viscosity (m2/s) 29 REAL(wp), PUBLIC :: avt0 = 1.e-5_wp !: vertical eddy diffusivity (m2/s) 30 REAL(wp), PUBLIC :: avevd = 1._wp !: vertical eddy coeff. for enhanced vert. diff. (m2/s) 20 ! !!* namelist nam_zdf: vertical diffusion * 21 REAL(wp), PUBLIC :: rn_avm0 = 1.e-4_wp !: vertical eddy viscosity (m2/s) 22 REAL(wp), PUBLIC :: rn_avt0 = 1.e-5_wp !: vertical eddy diffusivity (m2/s) 23 INTEGER , PUBLIC :: nn_avb = 0 !: constant or profile background on avt (=0/1) 24 INTEGER , PUBLIC :: nn_havtb = 1 !: horizontal shape or not for avtb (=0/1) 25 LOGICAL , PUBLIC :: ln_zdfexp = .FALSE. !: explicit vertical diffusion scheme flag 26 INTEGER , PUBLIC :: nn_zdfexp = 3 !: number of sub-time step (explicit time stepping) 27 LOGICAL , PUBLIC :: ln_zdfevd = .TRUE. !: convection: enhanced vertical diffusion flag 28 INTEGER , PUBLIC :: nn_evdm = 1 !: =0/1 flag to apply enhanced avm or not 29 REAL(wp), PUBLIC :: rn_avevd = 1._wp !: vertical eddy coeff. for enhanced vert. diff. (m2/s) 30 LOGICAL , PUBLIC :: ln_zdfnpc = .FALSE. !: convection: non-penetrative convection flag 31 INTEGER , PUBLIC :: nn_npc = 1 !: non penetrative convective scheme call frequency 32 INTEGER , PUBLIC :: nn_npcp = 15 !: non penetrative convective scheme print frequency 33 31 34 32 35 REAL(wp), PUBLIC, DIMENSION (jpk) :: avmb, avtb !: background profile of avm and avt 36 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: avtb_2d !: set in tke_init, for other modif than ice 33 37 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: avmu, avmv !: vertical viscosity coeff. at uw- & vw-points [m2/s] 34 38 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: avm , avt !: vertical viscosity & diffusivity coeff. at w-point [m2/s] -
trunk/NEMO/OPA_SRC/ZDF/zdfddm.F90
r1527 r1537 11 11 !! zdf_ddm_init : read namelist and control the parameters 12 12 !!---------------------------------------------------------------------- 13 !! * Modules used14 13 USE oce ! ocean dynamics and tracers variables 15 14 USE dom_oce ! ocean space and time domain variables … … 22 21 PRIVATE 23 22 24 !! * Routine accessibility 25 PUBLIC zdf_ddm ! called by step.F90 26 27 !! * Shared module variables 28 LOGICAL, PUBLIC, PARAMETER :: lk_zdfddm = .TRUE. !: double diffusive mixing flag 29 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: 30 avs , & !: salinity vertical diffusivity coeff. at w-point 31 rrau !: heat/salt buoyancy flux ratio 32 33 !! * Module variables 34 REAL(wp) :: & !!! * double diffusive mixing namelist * 35 avts = 1.e-4_wp , & ! maximum value of avs for salt fingering 36 hsbfr = 1.6_wp ! heat/salt buoyancy flux ratio 23 PUBLIC zdf_ddm ! called by step.F90 24 25 LOGICAL , PUBLIC, PARAMETER :: lk_zdfddm = .TRUE. !: double diffusive mixing flag 26 27 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: avs !: salinity vertical diffusivity coeff. at w-point 28 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: rrau !: heat/salt buoyancy flux ratio 29 30 ! !!* Namelist nam_ddm : double diffusive mixing * 31 REAL(wp) :: rn_avts = 1.e-4_wp ! maximum value of avs for salt fingering 32 REAL(wp) :: rn_hsbfr = 1.6_wp ! heat/salt buoyancy flux ratio 37 33 38 34 !! * Substitutions 39 35 # include "vectopt_loop_substitute.h90" 40 36 !!---------------------------------------------------------------------- 41 !! OPA 9.0 , LOCEAN-IPSL (2005)37 !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009) 42 38 !! $Id$ 43 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt39 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 44 40 !!---------------------------------------------------------------------- 45 41 … … 59 55 !! which is computed in rn2.F 60 56 !! * salt fingering (Schmitt 1981): 61 !! for Rrau > 1 and rn2 > 0 : zavfs = avts / ( 1 + (Rrau/hsbfr)^6 )57 !! for Rrau > 1 and rn2 > 0 : zavfs = rn_avts / ( 1 + (Rrau/rn_hsbfr)^6 ) 62 58 !! for Rrau > 1 and rn2 > 0 : zavfs = O 63 59 !! otherwise : zavft = 0.7 zavs / Rrau … … 160 156 zinr = 1./rrau(ji,jj,jk) 161 157 ! salt fingering 162 zrr = rrau(ji,jj,jk)/ hsbfr158 zrr = rrau(ji,jj,jk)/rn_hsbfr 163 159 zrr = zrr * zrr 164 zavfs = avts / ( 1 + zrr*zrr*zrr ) * zmsks(ji,jj) *zmskf(ji,jj)160 zavfs = rn_avts / ( 1 + zrr*zrr*zrr ) * zmsks(ji,jj) *zmskf(ji,jj) 165 161 zavft = 0.7 * zavfs * zinr 166 162 ! diffusive layering … … 220 216 !! ** Purpose : Initialization of double diffusion mixing scheme 221 217 !! 222 !! ** Method : Read the nammbf namelist and check the parameter values 223 !! called by zdf_ddm at the first timestep (nit000) 224 !! 225 !! History : 226 !! 8.5 ! 02-08 (G. Madec) Original code 227 !!---------------------------------------------------------------------- 228 NAMELIST/namddm/ avts, hsbfr 229 !!---------------------------------------------------------------------- 230 231 ! Read Namelist namddm : double diffusion mixing scheme 232 ! -------------------- 233 REWIND ( numnam ) 234 READ ( numnam, namddm ) 235 236 237 ! Parameter control and print 238 ! --------------------------- 239 IF(lwp) THEN 218 !! ** Method : Read the nam_ddm namelist and check the parameter values 219 !! called by zdf_ddm at the first timestep (nit000) 220 !! 221 !! History : 8.5 ! 02-08 (G. Madec) Original code 222 !!---------------------------------------------------------------------- 223 NAMELIST/nam_ddm/ rn_avts, rn_hsbfr 224 !!---------------------------------------------------------------------- 225 ! 226 REWIND ( numnam ) ! Read Namelist nam_ddm : double diffusion mixing scheme 227 READ ( numnam, nam_ddm ) 228 ! 229 IF(lwp) THEN ! Parameter print 240 230 WRITE(numout,*) 241 231 WRITE(numout,*) 'zdf_ddm : double diffusive mixing' 242 232 WRITE(numout,*) '~~~~~~~' 243 WRITE(numout,*) ' Namelist namddm : set dd mixing parameter'244 WRITE(numout,*) ' maximum avs for dd mixing avts = ',avts245 WRITE(numout,*) ' heat/salt buoyancy flux ratio hsbfr = ',hsbfr233 WRITE(numout,*) ' Namelist nam_ddm : set dd mixing parameter' 234 WRITE(numout,*) ' maximum avs for dd mixing rn_avts = ', rn_avts 235 WRITE(numout,*) ' heat/salt buoyancy flux ratio rn_hsbfr = ', rn_hsbfr 246 236 WRITE(numout,*) 247 237 ENDIF 248 238 ! 249 239 END SUBROUTINE zdf_ddm_init 250 240 -
trunk/NEMO/OPA_SRC/ZDF/zdfevd.F90
r1527 r1537 69 69 avmu_evd (:,:,:) = avmu(:,:,:) 70 70 71 SELECT CASE ( n _evdm )71 SELECT CASE ( nn_evdm ) 72 72 73 73 CASE ( 1 ) ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12) … … 88 88 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN 89 89 #endif 90 avt (ji ,jj ,jk) = avevd * tmask(ji ,jj ,jk)91 avm (ji ,jj ,jk) = avevd * tmask(ji ,jj ,jk)92 avmu(ji ,jj ,jk) = avevd * umask(ji ,jj ,jk)93 avmu(ji-1,jj ,jk) = avevd * umask(ji-1,jj ,jk)94 avmv(ji ,jj ,jk) = avevd * vmask(ji ,jj ,jk)95 avmv(ji ,jj-1,jk) = avevd * vmask(ji ,jj-1,jk)90 avt (ji ,jj ,jk) = rn_avevd * tmask(ji ,jj ,jk) 91 avm (ji ,jj ,jk) = rn_avevd * tmask(ji ,jj ,jk) 92 avmu(ji ,jj ,jk) = rn_avevd * umask(ji ,jj ,jk) 93 avmu(ji-1,jj ,jk) = rn_avevd * umask(ji-1,jj ,jk) 94 avmv(ji ,jj ,jk) = rn_avevd * vmask(ji ,jj ,jk) 95 avmv(ji ,jj-1,jk) = rn_avevd * vmask(ji ,jj-1,jk) 96 96 ENDIF 97 97 END DO … … 112 112 DO jk = 1, jpkm1 ! Horizontal slab 113 113 ! ! =============== 114 !!! WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd ! agissant sur T SEUL!114 !!! WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * rn_avevd ! agissant sur T SEUL! 115 115 #if defined key_vectopt_loop 116 116 DO jj = 1, 1 ! big loop forced … … 126 126 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) & 127 127 #endif 128 avt(ji,jj,jk) = avevd * tmask(ji,jj,jk)128 avt(ji,jj,jk) = rn_avevd * tmask(ji,jj,jk) 129 129 END DO 130 130 END DO -
trunk/NEMO/OPA_SRC/ZDF/zdfini.F90
r1533 r1537 22 22 USE tranpc ! convection: non penetrative adjustment 23 23 USE ldfslp ! iso-neutral slopes 24 USE restart ! ocean restart 24 25 25 26 USE in_out_manager ! I/O manager 27 USE iom ! IOM library 26 28 27 29 IMPLICIT NONE … … 51 53 !! 9.0 ! 05-06 (C. Ethe) KPP parameterization 52 54 !!---------------------------------------------------------------------- 53 !! * Local declarations54 55 INTEGER :: ioptio ! temporary scalar 55 56 !! * Namelist 57 NAMELIST/namzdf/ ln_zdfexp, n_zdfexp, ln_zdfevd, ln_zdfnpc, & 58 & avm0 , avt0 , avevd , n_evdm 59 !!---------------------------------------------------------------------- 60 !! OPA 9.0, LODYC-IPSL (2003) 61 !! 56 !! 57 NAMELIST/nam_zdf/ rn_avm0, rn_avt0, nn_avb, nn_havtb, ln_zdfexp, nn_zdfexp, & 58 & ln_zdfevd, nn_evdm, rn_avevd, ln_zdfnpc, nn_npc, nn_npcp 62 59 !!---------------------------------------------------------------------- 63 60 64 ! Read namzdf namelist : vertical mixing parameters 65 ! -------------------- 66 REWIND( numnam ) 67 READ ( numnam, namzdf ) 61 REWIND( numnam ) ! Read nam_zdf namelist : vertical mixing parameters 62 READ ( numnam, nam_zdf ) 68 63 69 ! Parameter print 70 ! --------------- 71 IF(lwp) THEN 64 IF(lwp) THEN ! Parameter print 72 65 WRITE(numout,*) 73 66 WRITE(numout,*) 'zdf_init: vertical physics' 74 67 WRITE(numout,*) '~~~~~~~~' 75 WRITE(numout,*) ' Namelist namzdf : set vertical mixing mixing parameters' 68 WRITE(numout,*) ' Namelist nam_zdf : set vertical mixing mixing parameters' 69 WRITE(numout,*) ' vertical eddy viscosity rn_avm0 = ', rn_avm0 70 WRITE(numout,*) ' vertical eddy diffusivity rn_avt0 = ', rn_avt0 71 WRITE(numout,*) ' constant background or profile nn_avb = ', nn_avb 72 WRITE(numout,*) ' horizontal variation for avtb nn_havtb = ', nn_havtb 76 73 WRITE(numout,*) ' time splitting / backward scheme ln_zdfexp = ', ln_zdfexp 77 WRITE(numout,*) ' number of time step n_zdfexp = ',n_zdfexp74 WRITE(numout,*) ' number of time step nn_zdfexp = ', nn_zdfexp 78 75 WRITE(numout,*) ' enhanced vertical diffusion ln_zdfevd = ', ln_zdfevd 79 WRITE(numout,*) ' non-penetrative convection ln_zdfnpc = ', ln_zdfnpc80 WRITE(numout,*) ' vertical eddy viscosity avm0 = ', avm081 WRITE(numout,*) ' vertical eddy diffusivity avt0 = ', avt082 WRITE(numout,*) ' vertical coefficient for evd avevd = ', avevd83 WRITE(numout,*) ' applied on momentum (=1/0) n_evdm = ', n_evdm76 WRITE(numout,*) ' applied on momentum (=1/0) nn_evdm = ', nn_evdm 77 WRITE(numout,*) ' vertical coefficient for evd rn_avevd = ', rn_avevd 78 WRITE(numout,*) ' non-penetrative convection (npc) ln_zdfnpc = ', ln_zdfnpc 79 WRITE(numout,*) ' npc call frequency nn_npc = ', nn_npc 80 WRITE(numout,*) ' npc print frequency nn_npcp = ', nn_npcp 84 81 ENDIF 85 82 … … 144 141 & ' required: ln_zdfevd or ln_zdfnpc logicals' ) 145 142 143 144 ! !* Background eddy viscosity and diffusivity profil 145 IF( nn_avb == 0 ) THEN ! Define avmb, avtb from namelist parameter 146 avmb(:) = rn_avm0 147 avtb(:) = rn_avt0 148 ELSE ! Background profile of avt (fit a theoretical/observational profile (Krauss 1990) 149 avmb(:) = rn_avm0 150 avtb(:) = rn_avt0 + ( 3.0e-4 - 2 * rn_avt0 ) * 1.0e-4 * gdepw_0(:) ! m2/s 151 IF(ln_sco .AND. lwp) CALL ctl_warn( ' avtb profile not valid in sco' ) 152 ENDIF 153 ! 154 IF( ln_rstart ) THEN ! Read avmb, avtb in restart (if exist) 155 ! if ln_traadv_cen, avmb, avtb have been modified in traadv_cen2 module. 156 ! To ensure the restartability, avmb & avtb are written in the restart 157 ! file in traadv_cen2 end read here. 158 IF( iom_varid( numror, 'avmb', ldstop = .FALSE. ) > 0 ) THEN 159 CALL iom_get( numror, jpdom_unknown, 'avmb', avmb ) 160 CALL iom_get( numror, jpdom_unknown, 'avtb', avtb ) 161 ENDIF 162 ENDIF 163 ! ! 2D shape of the avtb 164 avtb_2d(:,:) = 1.e0 ! uniform 165 ! 166 IF( nn_havtb == 1 ) THEN ! decrease avtb in the equatorial band 167 ! -15S -5S : linear decrease from avt0 to avt0/10. 168 ! -5S +5N : cst value avt0/10. 169 ! 5N 15N : linear increase from avt0/10, to avt0 170 WHERE(-15. <= gphit .AND. gphit < -5 ) avtb_2d = (1. - 0.09 * (gphit + 15.)) 171 WHERE( -5. <= gphit .AND. gphit < 5 ) avtb_2d = 0.1 172 WHERE( 5. <= gphit .AND. gphit < 15 ) avtb_2d = (0.1 + 0.09 * (gphit - 5.)) 173 ENDIF 174 ! 146 175 END SUBROUTINE zdf_init 147 176 -
trunk/NEMO/OPA_SRC/ZDF/zdfkpp.F90
r1146 r1537 36 36 PUBLIC tra_kpp ! routine called by step.F90 37 37 38 LOGICAL, PUBLIC, PARAMETER :: lk_zdfkpp = .TRUE. !: KPP vertical mixing flag 38 LOGICAL , PUBLIC, PARAMETER :: lk_zdfkpp = .TRUE. !: KPP vertical mixing flag 39 39 40 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: ghats !: non-local scalar mixing term (gamma/<ws>o) 40 41 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & … … 43 44 hkpp !: boundary layer depht 44 45 45 INTEGER :: & !!! ** kpp namelist (namkpp) ** 46 nave = 1 , & ! = 0/1 flag for horizontal average on avt, avmu, avmv 47 navb = 0 ! = 0/1 flag for constant or profile background avt 48 49 REAL(wp) :: & !!! ** Interior Mixing 50 difmiw = 1.2e-04_wp , & ! constant internal wave viscosity (m2/s) 51 difsiw = 1.2e-05_wp , & ! constant internal wave diffusivity (m2/s) 52 Riinfty = 0.8_wp , & ! local Richardson Number limit for shear instability 53 difri = 5.e-03_wp , & ! maximum shear mixing at Rig = 0 (m2/s) 54 bvsqcon = -1.e-09_wp , & ! Brunt-Vaisala squared (1/s**2) for maximum convection 55 difcon = 1._wp ! maximum mixing in interior convection (m2/s) 46 ! !!* Namelist nam_zdfkpp * 47 REAL(wp) :: rn_difmiw = 1.2e-04_wp ! constant internal wave viscosity (m2/s) 48 REAL(wp) :: rn_difsiw = 1.2e-05_wp ! constant internal wave diffusivity (m2/s) 49 REAL(wp) :: rn_riinfty = 0.8_wp ! local Richardson Number limit for shear instability 50 REAL(wp) :: rn_difri = 5.e-03_wp ! maximum shear mixing at Rig = 0 (m2/s) 51 REAL(wp) :: rn_bvsqcon = -1.e-09_wp ! Brunt-Vaisala squared (1/s**2) for maximum convection 52 REAL(wp) :: rn_difcon = 1._wp ! maximum mixing in interior convection (m2/s) 53 INTEGER :: nn_ave = 1 ! = 0/1 flag for horizontal average on avt, avmu, avmv 54 56 55 #if defined key_zdfddm 57 56 REAL(wp) :: & !!! ** Double diffusion Mixing … … 331 330 ! Mixing due to internal waves breaking 332 331 ! ------------------------------------- 333 avmu(ji,jj,jk) = difmiw334 avt (ji,jj,jk) = difsiw332 avmu(ji,jj,jk) = rn_difmiw 333 avt (ji,jj,jk) = rn_difsiw 335 334 ! Mixing due to vertical shear instability 336 335 ! ------------------------------------- … … 359 358 ! LMD94, eq. 28a,b,c, figure 3 ; Rem: p1 is 3, hard coded 360 359 zfri = MAX( zri , 0. ) 361 zfri = MIN( zfri / Riinfty , 1.0 )360 zfri = MIN( zfri / rn_riinfty , 1.0 ) 362 361 zfri = ( 1.0 - zfri * zfri ) 363 362 zfri = zfri * zfri * zfri 364 363 ! add shear contribution to mixing coef. 365 avmu(ji,jj,jk) = avmu(ji,jj,jk) + difri * zfri366 avt (ji,jj,jk) = avt (ji,jj,jk) + difri * zfri364 avmu(ji,jj,jk) = avmu(ji,jj,jk) + rn_difri * zfri 365 avt (ji,jj,jk) = avt (ji,jj,jk) + rn_difri * zfri 367 366 ENDIF 368 367 #if defined key_zdfddm … … 1137 1136 #endif 1138 1137 1139 SELECT CASE ( n ave )1138 SELECT CASE ( nn_ave ) 1140 1139 ! 1141 1140 CASE ( 0 ) ! no viscosity and diffusivity smoothing … … 1345 1344 ll_kppcustom, & ! 1st ocean level taken as surface layer 1346 1345 ll_kpplktb ! Lookup table for turbul. velocity scales 1347 1348 NAMELIST/namkpp/ ln_kpprimix, difmiw, difsiw, Riinfty, difri, bvsqcon, difcon, nave, navb 1349 1346 !! 1347 NAMELIST/nam_kpp/ ln_kpprimix, rn_difmiw, rn_difsiw, rn_riinfty, rn_difri, rn_bvsqcon, rn_difcon, nn_ave 1350 1348 !!---------------------------------------------------------------------- 1351 1349 1352 ! Read Namelist namtke : Turbulente Kinetic Energy 1353 ! -------------------- 1354 REWIND ( numnam ) 1355 READ ( numnam, namkpp ) 1356 1357 ! Parameter control and print 1358 ! --------------------------- 1359 REWIND( numnam ) 1360 READ ( numnam, namkpp ) 1361 1362 ! Control print 1363 IF(lwp) THEN 1350 REWIND ( numnam ) ! Read Namelist namkpp : K-Profile Parameterisation 1351 READ ( numnam, nam_kpp ) 1352 1353 IF(lwp) THEN ! Control print 1364 1354 WRITE(numout,*) 1365 WRITE(numout,*) 'zdf_kpp_init : kpp turbulent closure scheme'1355 WRITE(numout,*) 'zdf_kpp_init : K-Profile Parameterisation' 1366 1356 WRITE(numout,*) '~~~~~~~~~~~~' 1367 WRITE(numout,*) ' Namelist namkpp : set tke mixing parameters' 1368 WRITE(numout,*) ' Shear instability mixing ln_kpprimix = ', ln_kpprimix 1369 WRITE(numout,*) ' max. internal wave viscosity difmiw = ', difmiw 1370 WRITE(numout,*) ' max. internal wave diffusivity difsiw = ', difsiw 1371 WRITE(numout,*) ' Richardson Number limit for shear instability Riinfty = ', Riinfty 1372 WRITE(numout,*) ' max. shear mixing at Rig = 0 difri = ', difri 1373 WRITE(numout,*) ' Brunt-Vaisala squared for max. convection bvsqcon = ', bvsqcon 1374 WRITE(numout,*) ' max. mix. in interior convec. difcon = ', difcon 1375 WRITE(numout,*) ' horizontal average flag nave = ', nave 1376 WRITE(numout,*) ' constant background or profile navb = ', navb 1357 WRITE(numout,*) ' Namelist nam_kpp : set tke mixing parameters' 1358 WRITE(numout,*) ' Shear instability mixing ln_kpprimix = ', ln_kpprimix 1359 WRITE(numout,*) ' max. internal wave viscosity rn_difmiw = ', rn_difmiw 1360 WRITE(numout,*) ' max. internal wave diffusivity rn_difsiw = ', rn_difsiw 1361 WRITE(numout,*) ' Richardson Number limit for shear instability rn_riinfty = ', rn_riinfty 1362 WRITE(numout,*) ' max. shear mixing at Rig = 0 rn_difri = ', rn_difri 1363 WRITE(numout,*) ' Brunt-Vaisala squared for max. convection rn_bvsqcon = ', rn_bvsqcon 1364 WRITE(numout,*) ' max. mix. in interior convec. rn_difcon = ', rn_difcon 1365 WRITE(numout,*) ' horizontal average flag nn_ave = ', nn_ave 1377 1366 ENDIF 1378 1367 … … 1389 1378 WRITE(numout,*) ' Lookup table for turbul. velocity scales ll_kpplktb = ', ll_kpplktb 1390 1379 WRITE(numout,*) ' 1st ocean level taken as surface layer ll_kppcustom = ', ll_kppcustom 1391 WRITE(numout,*) ' '1392 1380 ENDIF 1393 1381 … … 1397 1385 WRITE(numout,*) ' Double diffusion mixing on temperature and salinity ' 1398 1386 WRITE(numout,*) ' CAUTION : done in routine zdfkpp, not in routine zdfddm ' 1399 WRITE(numout,*) ' '1400 1387 ENDIF 1401 1388 ENDIF … … 1409 1396 1410 1397 IF(lwp) THEN 1398 WRITE(numout,*) 1411 1399 WRITE(numout,*) ' Constant value for unreso. turbul. velocity shear Vtc = ', Vtc 1412 1400 WRITE(numout,*) ' Non-dimensional coef. for nonlocal transport rcg = ', rcg 1413 WRITE(numout,*) ' '1414 1401 ENDIF 1415 1402 … … 1424 1411 ! ------------------- 1425 1412 1426 SELECT CASE ( n ave )1413 SELECT CASE ( nn_ave ) 1427 1414 1428 1415 CASE ( 0 ) ! no horizontal average … … 1487 1474 1488 1475 CASE DEFAULT 1489 WRITE(ctmp1,*) ' bad flag value for n ave = ', nave1476 WRITE(ctmp1,*) ' bad flag value for nn_ave = ', nn_ave 1490 1477 CALL ctl_stop( ctmp1 ) 1491 1478 1492 1479 END SELECT 1493 1494 1495 1480 1496 ! Background eddy viscosity and diffusivity profil1497 ! ------------------------------------------------1498 IF( navb == 0 ) THEN1499 ! Define avmb, avtb from namelist parameter1500 avmb(:) = avm01501 avtb(:) = avt01502 ELSE1503 ! Background profile of avt (fit a theoretical/observational profile (Krauss 1990)1504 avmb(:) = avm01505 avtb(:) = 1.e-5 + 2.8e-8 * gdepw_0(:) ! m2/s1506 ENDIF1507 1508 ! Increase the background in the surface layers1509 !! avmb(1) = 1. * avmb(1) ; avtb(1) = 1. * avtb(1)1510 !! avmb(2) = 1. * avmb(2) ; avtb(2) = 1. * avtb(2)1511 !! avmb(3) = 1. * avmb(3) ; avtb(3) = 1. * avtb(3)1512 !! avmb(4) = 1. * avmb(4) ; avtb(4) = 1. * avtb(4)1513 1514 1515 1481 ! Initialization of vertical eddy coef. to the background value 1516 1482 ! ------------------------------------------------------------- -
trunk/NEMO/OPA_SRC/ZDF/zdfric.F90
r1152 r1537 13 13 !! zdf_ric_init : initialization, namelist read, & parameters control 14 14 !!---------------------------------------------------------------------- 15 !! * Modules used16 15 USE oce ! ocean dynamics and tracers variables 17 16 USE dom_oce ! ocean space and time domain variables 18 17 USE zdf_oce ! ocean vertical physics 19 ! USE phycst ! physical constants20 18 USE in_out_manager ! I/O manager 21 19 USE lbclnk ! ocean lateral boundary condition (or mpp link) … … 24 22 PRIVATE 25 23 26 !! * Routine accessibility 27 PUBLIC zdf_ric ! called by step.F90 28 29 !! * Shared module variables 30 LOGICAL, PUBLIC, PARAMETER :: lk_zdfric = .TRUE. !: Richardson vertical mixing flag 31 32 !! * Module variables 33 INTEGER :: & !!! namric richardson number dependent Kz 34 nric = 2 ! coefficient of the parameterization 35 REAL(wp) :: & !!! namric richardson number dependent Kz 36 avmri = 100.e-4_wp , & ! maximum value of the vertical eddy viscosity 37 alp = 5._wp ! coefficient of the parameterization 38 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 39 tmric ! coef. for the horizontal mean at t-point 24 PUBLIC zdf_ric ! called by step.F90 25 26 LOGICAL, PUBLIC, PARAMETER :: lk_zdfric = .TRUE. !: Richardson vertical mixing flag 27 28 ! !!* Namelist nam_ric : Richardson number dependent Kz * 29 INTEGER :: nn_ric = 2 ! coefficient of the parameterization 30 REAL(wp) :: rn_avmri = 100.e-4_wp ! maximum value of the vertical eddy viscosity 31 REAL(wp) :: rn_alp = 5._wp ! coefficient of the parameterization 32 33 REAL(wp), DIMENSION(jpi,jpj,jpk) :: tmric ! coef. for the horizontal mean at t-point 40 34 41 35 !! * Substitutions 42 36 # include "domzgr_substitute.h90" 43 37 !!---------------------------------------------------------------------- 44 !!---------------------------------------------------------------------- 45 !! OPA 9.0 , LOCEAN-IPSL (2005) 38 !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009) 46 39 !! $Id$ 47 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt40 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 48 41 !!---------------------------------------------------------------------- 49 42 CONTAINS … … 60 53 !! coefficients are given by: 61 54 !! avm = avm0 + avmb 62 !! avt = avm0 / (1 + alp*ri)55 !! avt = avm0 / (1 + rn_alp*ri) 63 56 !! with ri = N^2 / dz(u)**2 64 57 !! = e3w**2 * rn2/[ mi( dk(ub) )+mj( dk(vb) ) ] 65 !! avm0= avmri / (1 + alp*ri)**nric66 !! Where ri is the before local Richardson number, avmri the maximum58 !! avm0= rn_avmri / (1 + rn_alp*ri)**nn_ric 59 !! Where ri is the before local Richardson number, rn_avmri the maximum 67 60 !! value reaches by the vertical eddy coefficients, avmb and avtb 68 61 !! the background (or minimum) values of these coefficients for 69 !! momemtum and tracers, and alp, nric are adjustable parameters.62 !! momemtum and tracers, and rn_alp, nn_ric are adjustable parameters. 70 63 !! typical values used are : avm0=1.e-2 m2/s, avmb=1.e-6 m2/s 71 !! avtb=1.e-7 m2/s, alp=5. and nric=2.64 !! avtb=1.e-7 m2/s, rn_alp=5. and nn_ric=2. 72 65 !! this formulation needs ri>=0 : ri is set to zero if dz(rau)<0. 73 66 !! a numerical threshold is impose on the vertical shear (1.e-20) … … 86 79 !! 8.5 ! 02-06 (G. Madec) F90: Free form and module 87 80 !!---------------------------------------------------------------------- 88 !! * Arguments89 81 INTEGER, INTENT( in ) :: kt ! ocean time-step indexocean time step 90 91 !! * Local declarations 92 INTEGER :: ji, jj, jk ! dummy loop indices 93 REAL(wp) :: & 94 zcoef, zdku, zdkv, zri, z05alp ! temporary scalars 82 !! 83 INTEGER :: ji, jj, jk ! dummy loop indices 84 REAL(wp) :: zcoef, zdku, zdkv, zri, z05alp ! temporary scalars 95 85 REAL(wp), DIMENSION(jpi,jpj) :: zwx ! temporary workspace 86 !!---------------------------------------------------------------------- 96 87 97 88 IF( kt == nit000 ) CALL zdf_ric_init ! Initialization (first time-step only) … … 108 99 ! shear of horizontal velocity 109 100 zdku = zcoef * ( ub(ji-1,jj,jk-1) + ub(ji,jj,jk-1) & 110 101 & -ub(ji-1,jj,jk ) - ub(ji,jj,jk ) ) 111 102 zdkv = zcoef * ( vb(ji,jj-1,jk-1) + vb(ji,jj,jk-1) & 112 103 & -vb(ji,jj-1,jk ) - vb(ji,jj,jk ) ) 113 104 ! richardson number (minimum value set to zero) 114 105 zri = rn2(ji,jj,jk) / ( zdku*zdku + zdkv*zdkv + 1.e-20 ) … … 124 115 ! ------------------------------------------------------- 125 116 ! Eddy viscosity coefficients 126 z05alp = 0.5 * alp117 z05alp = 0.5 * rn_alp 127 118 DO jj = 1, jpjm1 128 119 DO ji = 1, jpim1 129 120 avmu(ji,jj,jk) = umask(ji,jj,jk) & 130 * avmri / ( 1. + z05alp*( zwx(ji+1,jj)+zwx(ji,jj) ) )**nric121 & * rn_avmri / ( 1. + z05alp*( zwx(ji+1,jj)+zwx(ji,jj) ) )**nn_ric 131 122 avmv(ji,jj,jk) = vmask(ji,jj,jk) & 132 * avmri / ( 1. + z05alp*( zwx(ji,jj+1)+zwx(ji,jj) ) )**nric123 & * rn_avmri / ( 1. + z05alp*( zwx(ji,jj+1)+zwx(ji,jj) ) )**nn_ric 133 124 END DO 134 125 END DO … … 137 128 DO jj = 2, jpjm1 138 129 DO ji = 2, jpim1 139 avt(ji,jj,jk) = tmric(ji,jj,jk) / ( 1. + alp * zwx(ji,jj) ) &140 141 142 130 avt(ji,jj,jk) = tmric(ji,jj,jk) / ( 1. + rn_alp * zwx(ji,jj) ) & 131 & * ( avmu(ji,jj,jk) + avmu(ji-1, jj ,jk) & 132 & + avmv(ji,jj,jk) + avmv( ji ,jj-1,jk) ) & 133 & + avtb(jk) * tmask(ji,jj,jk) 143 134 END DO 144 135 END DO … … 180 171 !! 8.5 ! 02-06 (G. Madec) original code 181 172 !!---------------------------------------------------------------------- 182 !! * local declarations183 173 INTEGER :: ji, jj, jk ! dummy loop indices 184 185 NAMELIST/namric/ avmri, alp, nric 186 !!---------------------------------------------------------------------- 187 !! OPA 8.5, LODYC-IPSL (2002) 188 !!---------------------------------------------------------------------- 189 190 ! Read Namelist namric : richardson number dependent Kz 191 ! -------------------- 192 REWIND ( numnam ) 193 READ ( numnam, namric ) 194 195 196 ! Parameter control and print 197 ! --------------------------- 198 ! Control print 199 IF(lwp) WRITE(numout,*) 200 IF(lwp) WRITE(numout,*) 'zdf_ric : Ri depend vertical mixing scheme' 201 IF(lwp) WRITE(numout,*) '=======' 202 IF(lwp) WRITE(numout,*) ' Namelist namric : set Kz(Ri) parameters' 203 204 IF(lwp) THEN 174 !! 175 NAMELIST/nam_ric/ rn_avmri, rn_alp, nn_ric 176 !!---------------------------------------------------------------------- 177 178 REWIND ( numnam ) ! Read Namelist nam_ric : richardson number dependent Kz 179 READ ( numnam, nam_ric ) 180 181 IF(lwp) THEN ! Control print 205 182 WRITE(numout,*) 206 WRITE(numout,*) ' maximum vertical viscosity avmri = ', avmri 207 WRITE(numout,*) ' coefficient alp = ', alp 208 WRITE(numout,*) ' coefficient nric = ', nric 209 WRITE(numout,*) 183 WRITE(numout,*) 'zdf_ric : Ri depend vertical mixing scheme' 184 WRITE(numout,*) '~~~~~~~' 185 WRITE(numout,*) ' Namelist namric : set Kz(Ri) parameters' 186 WRITE(numout,*) ' maximum vertical viscosity rn_avmri = ', rn_avmri 187 WRITE(numout,*) ' coefficient rn_alp = ', rn_alp 188 WRITE(numout,*) ' coefficient nn_ric = ', nn_ric 210 189 ENDIF 211 212 213 ! Work arrays for Ri number formulation214 ! -------------------------------------215 216 ! background eddy viscosity and diffusivity profiles217 avmb(:) = avm0218 avtb(:) = avt0219 220 ! background profile of avm (fit the theoretical/observational221 ! profile shown by Krauss (1990) and avt222 !!! avtb(:) = 1.e-5 + 2.8e-8 * gdepw(:) ! m2/s223 224 ! Increase the background in the surface layers225 avmb(1) = 10. * avmb(1) ; avtb(1) = 10. * avtb(1)226 avmb(2) = 10. * avmb(2) ; avtb(2) = 10. * avtb(2)227 avmb(3) = 5. * avmb(3) ; avtb(3) = 5. * avtb(3)228 avmb(4) = 2.5 * avmb(4) ; avtb(4) = 2.5 * avtb(4)229 190 230 191 ! weighting mean array tmric for 4 T-points which accounts for coastal boundary conditions. … … 238 199 END DO 239 200 END DO 240 241 201 tmric(:,1,:) = 0.e0 242 202 -
trunk/NEMO/OPA_SRC/ZDF/zdftke.F90
r1533 r1537 14 14 !! 8.1 ! 1999-01 (E. Stretta) new option for the mixing length 15 15 !! NEMO 1.0 ! 2002-06 (G. Madec) add tke_init routine 16 !! - ! 2002-08 (G. Madec) rn_cri and Free form, F9017 16 !! - ! 2004-10 (C. Ethe ) 1D configuration 18 17 !! 2.0 ! 2006-07 (S. Masson) distributed restart using iom … … 64 63 #endif 65 64 66 !!gm - variables to be suppressed from the namelist: 67 LOGICAL :: ln_rstke = .FALSE. ! =T restart with tke from a run without tke 68 INTEGER :: nn_itke = 50 ! number of restart iterative loops 69 INTEGER :: nn_ave = 1 ! horizontal average or not on avt, avmu, avmv (=0/1) 70 REAL(wp) :: rn_cri = 2._wp / 9._wp ! critic Richardson number 71 REAL(wp) :: rn_efave = 1._wp ! coefficient for ave : ave=rn_efave*avm 72 !!gm end 73 74 !!gm - variables to be added in the namelist (with a larger default value) 75 REAL(wp) :: rn_bshear = 1.e-20 ! backgrounf shear (>0) 76 !!gm 77 78 ! !!! ** Namelist namtke ** 65 ! !!! ** Namelist nam_tke ** 79 66 LOGICAL :: ln_mxl0 = .FALSE. ! mixing length scale surface value as function of wind stress or not 80 67 INTEGER :: nn_mxl = 2 ! type of mixing length (=0/1/2/3) 81 !!gm to be change: the ref value of lmin0 and lmin82 68 REAL(wp) :: rn_lmin0 = 0.4_wp ! surface min value of mixing length [m] 83 69 REAL(wp) :: rn_lmin = 0.1_wp ! interior min value of mixing length [m] 84 70 INTEGER :: nn_pdl = 1 ! Prandtl number or not (ratio avt/avm) (=0/1) 85 INTEGER :: nn_avb = 0 ! constant or profile background on avt (=0/1)86 71 REAL(wp) :: rn_ediff = 0.1_wp ! coefficient for avt: avt=rn_ediff*mxl*sqrt(e) 87 72 REAL(wp) :: rn_ediss = 0.7_wp ! coefficient of the Kolmogoroff dissipation … … 89 74 REAL(wp) :: rn_emin = 0.7071e-6_wp ! minimum value of tke [m2/s2] 90 75 REAL(wp) :: rn_emin0 = 1.e-4_wp ! surface minimum value of tke [m2/s2] 91 INTEGER :: nn_havtb = 1 ! horizontal shape or not for avtb (=0/1)76 REAL(wp) :: rn_bshear= 1.e-20 ! background shear (>0) 92 77 INTEGER :: nn_etau = 0 ! type of depth penetration of surface tke (=0/1/2) 93 78 INTEGER :: nn_htau = 0 ! type of tke profile of penetration (=0/1/2) … … 99 84 100 85 REAL(wp), DIMENSION(jpi,jpj) :: htau ! depth of tke penetration (nn_htau) 101 REAL(wp), DIMENSION(jpi,jpj) :: avtb_2d ! set in tke_init, for other modif than ice102 86 REAL(wp), DIMENSION(jpi,jpj,jpk) :: en ! now turbulent kinetic energy [m2/s2] 103 87 REAL(wp), DIMENSION(jpi,jpj,jpk) :: dissl ! now mixing lenght of dissipation … … 108 92 !!---------------------------------------------------------------------- 109 93 !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009) 110 !! $Id: $94 !! $Id: zdftke2.F90 1201 2008-09-24 13:24:21Z rblod $ 111 95 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 112 96 !!---------------------------------------------------------------------- … … 632 616 !! viscosity when using a tke turbulent closure scheme 633 617 !! 634 !! ** Method : Read the nam tke namelist and check the parameters618 !! ** Method : Read the nam_tke namelist and check the parameters 635 619 !! called at the first timestep (nit000) 636 620 !! 637 !! ** input : Namlist nam tke621 !! ** input : Namlist nam_tke 638 622 !! 639 623 !! ** Action : Increase by 1 the nstop flag is setting problem encounter … … 641 625 INTEGER :: ji, jj, jk ! dummy loop indices 642 626 !! 643 NAMELIST/nam tke/ ln_rstke, rn_ediff, rn_ediss, rn_ebb , rn_efave, rn_emin, &644 & rn_emin0, rn_cri , nn_itke , nn_mxl , nn_pdl , nn_ave, &645 & nn_avb , ln_mxl0 , rn_lmin , rn_lmin0, nn_havtb, nn_etau, &646 & nn_htau , rn_efr , ln_lc, rn_lc647 !!---------------------------------------------------------------------- 648 649 REWIND ( numnam ) !* Read Namelist nam tke : Turbulente Kinetic Energy650 READ ( numnam, nam tke )627 NAMELIST/nam_tke/ rn_ediff, rn_ediss , rn_ebb, rn_emin, & 628 & rn_emin0, rn_bshear, nn_mxl, ln_mxl0, & 629 & rn_lmin , rn_lmin0 , nn_pdl, nn_etau, & 630 & nn_htau , rn_efr , ln_lc , rn_lc 631 !!---------------------------------------------------------------------- 632 633 REWIND ( numnam ) !* Read Namelist nam_tke : Turbulente Kinetic Energy 634 READ ( numnam, nam_tke ) 651 635 652 636 ri_cri = 2. / ( 2. + rn_ediss / rn_ediff ) ! resulting critical Richardson number … … 656 640 WRITE(numout,*) 'zdf_tke : tke turbulent closure scheme - initialisation' 657 641 WRITE(numout,*) '~~~~~~~~' 658 WRITE(numout,*) ' Namelist namtke : set tke mixing parameters' 659 WRITE(numout,*) ' restart with tke from no tke ln_rstke = ', ln_rstke 642 WRITE(numout,*) ' Namelist nam_tke : set tke mixing parameters' 660 643 WRITE(numout,*) ' coef. to compute avt rn_ediff = ', rn_ediff 661 644 WRITE(numout,*) ' Kolmogoroff dissipation coef. rn_ediss = ', rn_ediss … … 663 646 WRITE(numout,*) ' minimum value of tke rn_emin = ', rn_emin 664 647 WRITE(numout,*) ' surface minimum value of tke rn_emin0 = ', rn_emin0 648 WRITE(numout,*) ' background shear (>0) rn_bshear= ', rn_bshear 665 649 WRITE(numout,*) ' mixing length type nn_mxl = ', nn_mxl 666 650 WRITE(numout,*) ' prandl number flag nn_pdl = ', nn_pdl 667 WRITE(numout,*) ' constant background or profile nn_avb = ', nn_avb668 651 WRITE(numout,*) ' surface mixing length = F(stress) or not ln_mxl0 = ', ln_mxl0 669 652 WRITE(numout,*) ' surface mixing length minimum value rn_lmin0 = ', rn_lmin0 670 653 WRITE(numout,*) ' interior mixing length minimum value rn_lmin0 = ', rn_lmin0 671 WRITE(numout,*) ' horizontal variation for avtb nn_havtb = ', nn_havtb672 654 WRITE(numout,*) ' test param. to add tke induced by wind nn_etau = ', nn_etau 673 655 WRITE(numout,*) ' flag for computation of exp. tke profile nn_htau = ', nn_htau … … 686 668 687 669 IF( nn_etau == 2 ) CALL zdf_mxl( nit000 ) ! Initialization of nmln 688 689 ! !* Background eddy viscosity and diffusivity profil690 IF( nn_avb == 0 ) THEN ! Define avmb, avtb from namelist parameter691 avmb(:) = avm0692 avtb(:) = avt0693 ELSE ! Background profile of avt (fit a theoretical/observational profile (Krauss 1990)694 avmb(:) = avm0695 avtb(:) = avt0 + ( 3.0e-4 - 2 * avt0 ) * 1.0e-4 * gdepw_0(:) ! m2/s696 IF(ln_sco .AND. lwp) CALL ctl_warn( ' avtb profile not valid in sco' )697 ENDIF698 !699 ! ! 2D shape of the avtb700 avtb_2d(:,:) = 1.e0 ! uniform701 !702 IF( nn_havtb == 1 ) THEN ! decrease avtb in the equatorial band703 ! -15S -5S : linear decrease from avt0 to avt0/10.704 ! -5S +5N : cst value avt0/10.705 ! 5N 15N : linear increase from avt0/10, to avt0706 WHERE(-15. <= gphit .AND. gphit < -5 ) avtb_2d = (1. - 0.09 * (gphit + 15.))707 WHERE( -5. <= gphit .AND. gphit < 5 ) avtb_2d = 0.1708 WHERE( 5. <= gphit .AND. gphit < 15 ) avtb_2d = (0.1 + 0.09 * (gphit - 5.))709 ENDIF710 670 711 671 ! !* depth of penetration of surface tke … … 751 711 !! ** Method : use of IOM library 752 712 !! if the restart does not contain TKE, en is either 753 !! set to rn_emin or recomputed (nn_itke/=0)713 !! set to rn_emin or recomputed 754 714 !!---------------------------------------------------------------------- 755 715 INTEGER , INTENT(in) :: kt ! ocean time-step -
trunk/NEMO/OPA_SRC/ZDF/zdftke_old.F90
r1532 r1537 65 65 #endif 66 66 67 ! !!! ** Namelist nam tke **67 ! !!! ** Namelist nam_tke ** 68 68 LOGICAL :: ln_rstke = .FALSE. ! =T restart with tke from a run without tke 69 69 LOGICAL :: ln_mxl0 = .FALSE. ! mixing length scale surface value as function of wind stress or not … … 73 73 INTEGER :: nn_pdl = 1 ! Prandtl number or not (ratio avt/avm) (=0/1) 74 74 INTEGER :: nn_ave = 1 ! horizontal average or not on avt, avmu, avmv (=0/1) 75 INTEGER :: nn_avb = 0 ! constant or profile background on avt (=0/1)76 75 REAL(wp) :: rn_ediff = 0.1_wp ! coefficient for avt: avt=rn_ediff*mxl*sqrt(e) 77 76 REAL(wp) :: rn_ediss = 0.7_wp ! coefficient of the Kolmogoroff dissipation … … 81 80 REAL(wp) :: rn_emin0 = 1.e-4_wp ! surface minimum value of tke (m2/s2) 82 81 REAL(wp) :: rn_cri = 2._wp / 9._wp ! critic Richardson number 83 INTEGER :: nn_havtb = 1 ! horizontal shape or not for avtb (=0/1)84 82 INTEGER :: nn_etau = 0 ! type of depth penetration of surface tke (=0/1/2) 85 83 INTEGER :: nn_htau = 0 ! type of tke profile of penetration (=0/1/2) … … 88 86 REAL(wp) :: rn_efr = 1.0_wp ! fraction of TKE surface value which penetrates in the ocean 89 87 REAL(wp) :: rn_lc = 0.15_wp ! coef to compute vertical velocity of Langmuir cells 90 91 REAL(wp), DIMENSION (jpi,jpj) :: avtb_2d ! set in tke_init, for other modif than ice92 88 93 89 !! * Substitutions … … 714 710 !! viscosity when using a tke turbulent closure scheme 715 711 !! 716 !! ** Method : Read the nam tke namelist and check the parameters712 !! ** Method : Read the nam_tke namelist and check the parameters 717 713 !! called at the first timestep (nit000) 718 714 !! 719 !! ** input : Namlist nam tke715 !! ** input : Namlist nam_tke 720 716 !! 721 717 !! ** Action : Increase by 1 the nstop flag is setting problem encounter … … 731 727 # endif 732 728 !! 733 NAMELIST/nam tke/ ln_rstke, rn_ediff, rn_ediss, rn_ebb , rn_efave, rn_emin, &734 & rn_emin0, rn_cri , nn_itke , nn_mxl , nn_pdl , nn_ave , &735 & nn_avb , ln_mxl0 , rn_lmin , rn_lmin0, nn_havtb, nn_etau, &736 & nn_htau , rn_efr , ln_lc , rn_lc729 NAMELIST/nam_tke/ ln_rstke, rn_ediff, rn_ediss, rn_ebb , rn_efave, rn_emin, & 730 & rn_emin0, rn_cri , nn_itke , nn_mxl , nn_pdl , nn_ave , & 731 & ln_mxl0 , rn_lmin , rn_lmin0, nn_etau, & 732 & nn_htau , rn_efr , ln_lc , rn_lc 737 733 !!---------------------------------------------------------------------- 738 734 739 ! Read Namelist nam tke : Turbulente Kinetic Energy735 ! Read Namelist nam_tke : Turbulente Kinetic Energy 740 736 ! -------------------- 741 737 REWIND ( numnam ) 742 READ ( numnam, nam tke )738 READ ( numnam, nam_tke ) 743 739 744 740 ! Compute boost associated with the Richardson critic … … 756 752 WRITE(numout,*) 'zdf_tke_init : tke turbulent closure scheme (old scheme)' 757 753 WRITE(numout,*) '~~~~~~~~~~~~' 758 WRITE(numout,*) ' Namelist nam tke : set tke mixing parameters'754 WRITE(numout,*) ' Namelist nam_tke : set tke mixing parameters' 759 755 WRITE(numout,*) ' restart with tke from no tke ln_rstke = ', ln_rstke 760 756 WRITE(numout,*) ' coef. to compute avt rn_ediff = ', rn_ediff … … 770 766 WRITE(numout,*) ' critic Richardson nb rn_cri = ', rn_cri 771 767 WRITE(numout,*) ' and its associated coeff. eboost = ', eboost 772 WRITE(numout,*) ' constant background or profile nn_avb = ', nn_avb773 768 WRITE(numout,*) ' surface mixing length = F(stress) or not ln_mxl0 = ', ln_mxl0 774 769 WRITE(numout,*) ' surface mixing length minimum value rn_lmin0 = ', rn_lmin0 775 770 WRITE(numout,*) ' interior mixing length minimum value rn_lmin0 = ', rn_lmin0 776 WRITE(numout,*) ' horizontal variation for avtb nn_havtb = ', nn_havtb777 771 WRITE(numout,*) ' test param. to add tke induced by wind nn_etau = ', nn_etau 778 772 WRITE(numout,*) ' flag for computation of exp. tke profile nn_htau = ', nn_htau … … 852 846 ! 853 847 END SELECT 854 855 856 ! Background eddy viscosity and diffusivity profil857 ! ------------------------------------------------858 IF( nn_avb == 0 ) THEN ! Define avmb, avtb from namelist parameter859 avmb(:) = avm0860 avtb(:) = avt0861 ELSE ! Background profile of avt (fit a theoretical/observational profile (Krauss 1990)862 avmb(:) = avm0863 avtb(:) = avt0 + ( 3.0e-4 - 2 * avt0 ) * 1.0e-4 * gdepw_0(:) ! m2/s864 IF(ln_sco .AND. lwp) CALL ctl_warn( ' avtb profile not valid in sco' )865 ENDIF866 !867 ! ! 2D shape of the avtb868 avtb_2d(:,:) = 1.e0 ! uniform869 !870 IF( nn_havtb == 1 ) THEN ! decrease avtb in the equatorial band871 ! -15S -5S : linear decrease from avt0 to avt0/10.872 ! -5S +5N : cst value avt0/10.873 ! 5N 15N : linear increase from avt0/10, to avt0874 WHERE(-15. <= gphit .AND. gphit < -5 ) avtb_2d = (1. - 0.09 * (gphit + 15.))875 WHERE( -5. <= gphit .AND. gphit < 5 ) avtb_2d = 0.1876 WHERE( 5. <= gphit .AND. gphit < 15 ) avtb_2d = (0.1 + 0.09 * (gphit - 5.))877 ENDIF878 848 879 849 ! Initialization of vertical eddy coef. to the background value -
trunk/NEMO/OPA_SRC/ZDF/zdftmx.F90
r1527 r1537 320 320 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpc ! power consumption 321 321 !! 322 NAMELIST/namtmx/ rn_htmx, rn_n2min, rn_tfe, rn_me, ln_tmx_itf, rn_tfe_itf 323 !!---------------------------------------------------------------------- 324 325 IF(lwp) THEN 322 NAMELIST/nam_tmx/ rn_htmx, rn_n2min, rn_tfe, rn_me, ln_tmx_itf, rn_tfe_itf 323 !!---------------------------------------------------------------------- 324 325 REWIND ( numnam ) ! Read Namelist namtmx : Tidal Mixing 326 READ ( numnam, nam_tmx ) 327 328 IF(lwp) THEN ! Control print 326 329 WRITE(numout,*) 327 330 WRITE(numout,*) 'zdf_tmx_init : tidal mixing' 328 331 WRITE(numout,*) '~~~~~~~~~~~~' 332 WRITE(numout,*) ' Namelist namtmx : set tidal mixing parameters' 333 WRITE(numout,*) ' Vertical decay scale for turbulence = ', rn_htmx 334 WRITE(numout,*) ' Brunt-Vaisala frequency threshold = ', rn_n2min 335 WRITE(numout,*) ' Tidal dissipation efficiency = ', rn_tfe 336 WRITE(numout,*) ' Mixing efficiency = ', rn_me 337 WRITE(numout,*) ' ITF specific parameterisation = ', ln_tmx_itf 338 WRITE(numout,*) ' ITF tidal dissipation efficiency = ', rn_tfe_itf 329 339 ENDIF 330 340 331 ! Read Namelist namtmx : Tidal Mixing 332 ! -------------------- 333 REWIND ( numnam ) 334 READ ( numnam, namtmx ) 335 336 ! Control print 337 IF(lwp) THEN 338 WRITE(numout,*) ' Namelist namtmx : set tidal mixing parameters' 339 WRITE(numout,*) ' Vertical decay scale for turbulence = ', rn_htmx 340 WRITE(numout,*) ' Brunt-Vaisala frequency threshold = ', rn_n2min 341 WRITE(numout,*) ' Tidal dissipation efficiency = ', rn_tfe 342 WRITE(numout,*) ' Mixing efficiency = ', rn_me 343 WRITE(numout,*) ' ITF specific parameterisation = ', ln_tmx_itf 344 WRITE(numout,*) ' ITF tidal dissipation efficiency = ', rn_tfe_itf 345 WRITE(numout,*) 346 ENDIF 347 348 IF( ln_tmx_itf ) THEN ! read the Indonesian Through Flow mask 341 IF( ln_tmx_itf ) THEN ! read the Indonesian Through Flow mask 349 342 CALL iom_open('mask_itf',inum) 350 343 CALL iom_get (inum, jpdom_data, 'tmaskitf',mask_itf,1) ! -
trunk/NEMO/OPA_SRC/step.F90
r1533 r1537 205 205 IF( lk_zdfkpp ) CALL zdf_kpp ( kstp ) ! KPP closure scheme for Kz 206 206 IF( lk_zdfcst ) THEN ! Constant Kz (reset avt, avm[uv] to the background value) 207 avt (:,:,:) = avt0 * tmask(:,:,:)208 avmu(:,:,:) = avm0 * umask(:,:,:)209 avmv(:,:,:) = avm0 * vmask(:,:,:)207 avt (:,:,:) = rn_avt0 * tmask(:,:,:) 208 avmu(:,:,:) = rn_avm0 * umask(:,:,:) 209 avmv(:,:,:) = rn_avm0 * vmask(:,:,:) 210 210 ENDIF 211 211 IF( ln_rnf_mouth ) THEN ! increase diffusivity at rivers mouths
Note: See TracChangeset
for help on using the changeset viewer.