Changeset 13268 for NEMO/releases/r4.0/r4.0-HEAD/src/OCE
- Timestamp:
- 2020-07-08T16:27:49+02:00 (4 years ago)
- Location:
- NEMO/releases/r4.0/r4.0-HEAD/src/OCE/ZDF
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/releases/r4.0/r4.0-HEAD/src/OCE/ZDF/zdfdrg.F90
r11536 r13268 41 41 42 42 ! !!* Namelist namdrg: nature of drag coefficient namelist * 43 LOGICAL :: ln_OFF! free-slip : Cd = 043 LOGICAL , PUBLIC :: ln_drg_OFF ! free-slip : Cd = 0 44 44 LOGICAL :: ln_lin ! linear drag: Cd = Cd0_lin 45 45 LOGICAL :: ln_non_lin ! non-linear drag: Cd = Cd0_nl |U| … … 231 231 INTEGER :: ios, ioptio ! local integers 232 232 !! 233 NAMELIST/namdrg/ ln_ OFF, ln_lin, ln_non_lin, ln_loglayer, ln_drgimp233 NAMELIST/namdrg/ ln_drg_OFF, ln_lin, ln_non_lin, ln_loglayer, ln_drgimp 234 234 !!---------------------------------------------------------------------- 235 235 ! … … 249 249 WRITE(numout,*) '~~~~~~~~~~~~' 250 250 WRITE(numout,*) ' Namelist namdrg : top/bottom friction choices' 251 WRITE(numout,*) ' free-slip : Cd = 0 ln_ OFF = ', ln_OFF251 WRITE(numout,*) ' free-slip : Cd = 0 ln_drg_OFF = ', ln_drg_OFF 252 252 WRITE(numout,*) ' linear drag : Cd = Cd0 ln_lin = ', ln_lin 253 253 WRITE(numout,*) ' non-linear drag: Cd = Cd0_nl |U| ln_non_lin = ', ln_non_lin … … 257 257 ! 258 258 ioptio = 0 ! set ndrg and control check 259 IF( ln_ OFF) THEN ; ndrg = np_OFF ; ioptio = ioptio + 1 ; ENDIF259 IF( ln_drg_OFF ) THEN ; ndrg = np_OFF ; ioptio = ioptio + 1 ; ENDIF 260 260 IF( ln_lin ) THEN ; ndrg = np_lin ; ioptio = ioptio + 1 ; ENDIF 261 261 IF( ln_non_lin ) THEN ; ndrg = np_non_lin ; ioptio = ioptio + 1 ; ENDIF -
NEMO/releases/r4.0/r4.0-HEAD/src/OCE/ZDF/zdfgls.F90
r13260 r13268 19 19 USE dom_oce ! ocean space and time domain 20 20 USE domvvl ! ocean space and time domain : variable volume layer 21 USE zdfdrg , ONLY : ln_drg_OFF ! top/bottom free-slip flag 21 22 USE zdfdrg , ONLY : r_z0_top , r_z0_bot ! top/bottom roughness 22 23 USE zdfdrg , ONLY : rCdU_top , rCdU_bot ! top/bottom friction … … 166 167 167 168 ! Compute surface, top and bottom friction at T-points 168 DO jj = 2, jpjm1 169 DO ji = fs_2, fs_jpim1 ! vector opt. 170 ! 171 ! surface friction 169 DO jj = 2, jpjm1 !== surface ocean friction 170 DO ji = fs_2, fs_jpim1 ! vector opt. 172 171 ustar2_surf(ji,jj) = r1_rau0 * taum(ji,jj) * tmask(ji,jj,1) 173 ! 172 END DO 173 END DO 174 ! 174 175 !!gm Rq we may add here r_ke0(_top/_bot) ? ==>> think about that... 175 ! bottom friction (explicit before friction) 176 zmsku = ( 2._wp - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 177 zmskv = ( 2._wp - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) ) ! (CAUTION: CdU<0) 178 ustar2_bot(ji,jj) = - rCdU_bot(ji,jj) * SQRT( ( zmsku*( ub(ji,jj,mbkt(ji,jj))+ub(ji-1,jj,mbkt(ji,jj)) ) )**2 & 179 & + ( zmskv*( vb(ji,jj,mbkt(ji,jj))+vb(ji,jj-1,mbkt(ji,jj)) ) )**2 ) 180 END DO 181 END DO 182 IF( ln_isfcav ) THEN !top friction 183 DO jj = 2, jpjm1 184 DO ji = fs_2, fs_jpim1 ! vector opt. 185 zmsku = ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 186 zmskv = ( 2. - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) ) ! (CAUTION: CdU<0) 187 ustar2_top(ji,jj) = - rCdU_top(ji,jj) * SQRT( ( zmsku*( ub(ji,jj,mikt(ji,jj))+ub(ji-1,jj,mikt(ji,jj)) ) )**2 & 188 & + ( zmskv*( vb(ji,jj,mikt(ji,jj))+vb(ji,jj-1,mikt(ji,jj)) ) )**2 ) 189 END DO 190 END DO 176 ! 177 IF( .NOT.ln_drg_OFF ) THEN !== top/bottom friction (explicit before friction) 178 DO jj = 2, jpjm1 ! bottom friction 179 DO ji = fs_2, fs_jpim1 ! vector opt. 180 zmsku = ( 2._wp - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 181 zmskv = ( 2._wp - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) ) ! (CAUTION: CdU<0) 182 ustar2_bot(ji,jj) = - rCdU_bot(ji,jj) * SQRT( ( zmsku*( ub(ji,jj,mbkt(ji,jj))+ub(ji-1,jj,mbkt(ji,jj)) ) )**2 & 183 & + ( zmskv*( vb(ji,jj,mbkt(ji,jj))+vb(ji,jj-1,mbkt(ji,jj)) ) )**2 ) 184 END DO 185 END DO 186 IF( ln_isfcav ) THEN !top friction 187 DO jj = 2, jpjm1 188 DO ji = fs_2, fs_jpim1 ! vector opt. 189 zmsku = ( 2._wp - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 190 zmskv = ( 2._wp - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) ) ! (CAUTION: CdU<0) 191 ustar2_top(ji,jj) = - rCdU_top(ji,jj) * SQRT( ( zmsku*( ub(ji,jj,mikt(ji,jj))+ub(ji-1,jj,mikt(ji,jj)) ) )**2 & 192 & + ( zmskv*( vb(ji,jj,mikt(ji,jj))+vb(ji,jj-1,mikt(ji,jj)) ) )**2 ) 193 END DO 194 END DO 195 ENDIF 191 196 ENDIF 192 197 -
NEMO/releases/r4.0/r4.0-HEAD/src/OCE/ZDF/zdftke.F90
r12703 r13268 28 28 !! 3.6 ! 2014-11 (P. Mathiot) add ice shelf capability 29 29 !! 4.0 ! 2017-04 (G. Madec) remove CPP ddm key & avm at t-point only 30 !! - ! 2017-05 (G. Madec) add top/bottom friction as boundary condition (ln_drg)30 !! - ! 2017-05 (G. Madec) add top/bottom friction as boundary condition 31 31 !!---------------------------------------------------------------------- 32 32 … … 71 71 REAL(wp) :: rn_emin0 ! surface minimum value of tke [m2/s2] 72 72 REAL(wp) :: rn_bshear ! background shear (>0) currently a numerical threshold (do not change it) 73 LOGICAL :: ln_drg ! top/bottom friction forcing flag74 73 INTEGER :: nn_etau ! type of depth penetration of surface tke (=0/1/2/3) 75 74 INTEGER :: nn_htau ! type of tke profile of penetration (=0/1) … … 229 228 ! Note that stress averaged is done using an wet-only calculation of u and v at t-point like in zdfsh2 230 229 ! 231 IF( ln_drg ) THEN!== friction used as top/bottom boundary condition on TKE232 ! 233 DO jj = 2, jpjm1 ! bottom friction230 IF( .NOT.ln_drg_OFF ) THEN !== friction used as top/bottom boundary condition on TKE 231 ! 232 DO jj = 2, jpjm1 ! bottom friction 234 233 DO ji = fs_2, fs_jpim1 ! vector opt. 235 234 zmsku = ( 2. - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) … … 644 643 INTEGER :: ios 645 644 !! 646 NAMELIST/namzdf_tke/ rn_ediff, rn_ediss , rn_ebb , rn_emin , 647 & rn_emin0, rn_bshear, nn_mxl , ln_mxl0 , 648 & rn_mxl0 , nn_pdl , ln_ drg , ln_lc , rn_lc,&645 NAMELIST/namzdf_tke/ rn_ediff, rn_ediss , rn_ebb , rn_emin , & 646 & rn_emin0, rn_bshear, nn_mxl , ln_mxl0 , & 647 & rn_mxl0 , nn_pdl , ln_lc , rn_lc, & 649 648 & nn_etau , nn_htau , rn_efr , rn_eice 650 649 !!---------------------------------------------------------------------- … … 676 675 WRITE(numout,*) ' surface mixing length = F(stress) or not ln_mxl0 = ', ln_mxl0 677 676 WRITE(numout,*) ' surface mixing length minimum value rn_mxl0 = ', rn_mxl0 678 WRITE(numout,*) ' top/bottom friction forcing flag ln_drg = ', ln_drg679 677 WRITE(numout,*) ' Langmuir cells parametrization ln_lc = ', ln_lc 680 678 WRITE(numout,*) ' coef to compute vertical velocity of LC rn_lc = ', rn_lc … … 684 682 WRITE(numout,*) ' below sea-ice: =0 ON rn_eice = ', rn_eice 685 683 WRITE(numout,*) ' =4 OFF when ice fraction > 1/4 ' 686 IF( ln_drg) THEN684 IF( .NOT.ln_drg_OFF ) THEN 687 685 WRITE(numout,*) 688 686 WRITE(numout,*) ' Namelist namdrg_top/_bot: used values:'
Note: See TracChangeset
for help on using the changeset viewer.