Changeset 15605
- Timestamp:
- 2021-12-16T14:58:14+01:00 (2 years ago)
- Location:
- NEMO/branches/CNRS/dev_r14723_tides_under_isf/src/OCE
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/CNRS/dev_r14723_tides_under_isf/src/OCE/ISF/isfcavgam.F90
r13237 r15605 17 17 USE phycst , ONLY: grav, vkarmn ! physical constant 18 18 USE eosbn2 , ONLY: eos_rab ! equation of state 19 USE zdfdrg , ONLY: rCd0_top, r_ke0_top ! vertical physics: top/bottom drag coef. 19 ! tipaccs 2d top tidal velocity 20 USE zdfdrg , ONLY: rCd0_top, rke0_top ! vertical physics: top/bottom drag coef. 21 ! end tipaccs 2d top tidal velocity 20 22 USE iom , ONLY: iom_put ! 21 23 USE lib_mpp , ONLY: ctl_stop … … 92 94 pgs(:,:) = rn_gammas0 93 95 CASE ( 'vel' ) ! gamma is proportional to u* 94 CALL gammats_vel ( zutbl, zvtbl, rCd0_top, r_ke0_top, pgt, pgs ) 96 ! tipaccs 2d top tidal velocity 97 CALL gammats_vel ( zutbl, zvtbl, rCd0_top, rke0_top, pgt, pgs ) 95 98 CASE ( 'vel_stab' ) ! gamma depends of stability of boundary layer and u* 96 CALL gammats_vel_stab (Kmm, pttbl, pstbl, zutbl, zvtbl, rCd0_top, r_ke0_top, pqoce, pqfwf, pgt, pgs ) 99 CALL gammats_vel_stab (Kmm, pttbl, pstbl, zutbl, zvtbl, rCd0_top, rke0_top, pqoce, pqfwf, pgt, pgs ) 100 ! end tipaccs 2d top tidal velocity 97 101 CASE DEFAULT 98 102 CALL ctl_stop('STOP','method to compute gamma (cn_gammablk) is unknown (should not see this)') … … 131 135 REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: putbl, pvtbl ! velocity in the losch top boundary layer 132 136 REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pCd ! drag coefficient 133 REAL(wp), INTENT(in ) :: pke2 ! background velocity 137 ! tipaccs (2d tidal velocity) 138 REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pke2 ! background velocity 139 ! end tipaccs (2d tidal velocity) 134 140 !!--------------------------------------------------------------------- 135 141 REAL(wp), DIMENSION(jpi,jpj) :: zustar … … 137 143 ! 138 144 ! compute ustar (AD15 eq. 27) 139 zustar(:,:) = SQRT( pCd(:,:) * ( putbl(:,:) * putbl(:,:) + pvtbl(:,:) * pvtbl(:,:) + pke2 ) ) * mskisf_cav(:,:) 145 ! tipaccs (2d tidal velocity) 146 zustar(:,:) = SQRT( pCd(:,:) * ( putbl(:,:) * putbl(:,:) + pvtbl(:,:) * pvtbl(:,:) + pke2(:,:) ) ) * mskisf_cav(:,:) 147 ! end tipaccs (2d tidal velocity) 140 148 ! 141 149 ! Compute gammats … … 161 169 !!-------------------------- IN ------------------------------------- 162 170 INTEGER :: Kmm ! ocean time level index 163 REAL(wp), INTENT(in ) :: pke2 ! background velocity squared 171 ! tipaccs (2d tidal velocity) 172 REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pke2 ! background velocity squared 173 ! end tipaccs (2d tidal velocity) 164 174 REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pqoce, pqfwf ! surface heat flux and fwf flux 165 175 REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pCd ! drag coeficient … … 186 196 ! 187 197 ! compute ustar 188 zustar(:,:) = SQRT( pCd * ( putbl(:,:) * putbl(:,:) + pvtbl(:,:) * pvtbl(:,:) + pke2 ) ) 198 ! tipaccs (2d tidal velocity) 199 zustar(:,:) = SQRT( pCd * ( putbl(:,:) * putbl(:,:) + pvtbl(:,:) * pvtbl(:,:) + pke2(:,:) ) ) 200 ! end tipaccs (2d tidal velocity) 189 201 ! 190 202 ! output ustar -
NEMO/branches/CNRS/dev_r14723_tides_under_isf/src/OCE/ISF/isfstp.F90
r14143 r15605 23 23 USE oce , ONLY: ssh ! sea surface height 24 24 USE domvvl, ONLY: ln_vvl_zstar ! zstar logical 25 USE zdfdrg, ONLY: r_Cdmin_top, r_ke0_top ! vertical physics: top/bottom drag coef. 25 ! tipaccs 2d top tidal velocity 26 USE zdfdrg, ONLY: r_Cdmin_top, rke0_top, ln_2d_ttv ! vertical physics: top/bottom drag coef. 27 ! end tipaccs 2d top tidal velocity 26 28 ! 27 29 USE lib_mpp, ONLY: ctl_stop, ctl_nam … … 205 207 WRITE(numout,*) ' gammat coefficient rn_gammat0 = ', rn_gammat0 206 208 WRITE(numout,*) ' gammas coefficient rn_gammas0 = ', rn_gammas0 207 WRITE(numout,*) ' top background ke used (from namdrg_top) rn_ke0 = ', r_ke0_top 209 ! tipaccs 2d top tidal velocity 210 IF (ln_2d_ttv) THEN 211 WRITE(numout,*) ' top background ke used (from namdrg_top_tippacs) read from 2d file (see zdfdrg bloc)' 212 ELSE 213 WRITE(numout,*) ' top background ke used (from namdrg_top) rn_ke0 = ', MAXVAL(rke0_top) 214 ENDIF 215 ! end tipaccs 2d top tidal velocity 208 216 WRITE(numout,*) ' top drag coef. used (from namdrg_top) rn_Cd0 = ', r_Cdmin_top 209 217 END IF -
NEMO/branches/CNRS/dev_r14723_tides_under_isf/src/OCE/ZDF/zdfdrg.F90
r13558 r15605 33 33 USE prtctl ! Print control 34 34 USE sbc_oce , ONLY : nn_ice 35 ! tipaccs 2d top tidal velocity 36 USE fldread, ONLY : FLD_N 37 ! end tipaccs 2d top tidal velocity 35 38 36 39 IMPLICIT NONE … … 48 51 LOGICAL , PUBLIC :: ln_drgimp ! implicit top/bottom friction flag 49 52 LOGICAL , PUBLIC :: ln_drgice_imp ! implicit ice-ocean drag 53 ! tipaccs 2d top tidal velocity 54 LOGICAL , PUBLIC :: ln_2d_ttv ! top tidal velocity 55 ! end tipaccs 2d top tidal velocity 50 56 ! !!* Namelist namdrg_top & _bot: TOP or BOTTOM coefficient namelist * 51 57 REAL(wp) :: rn_Cd0 !: drag coefficient [ - ] … … 57 63 REAL(wp) :: rn_boost !: local boost factor [ - ] 58 64 59 REAL(wp), PUBLIC :: r_Cdmin_top, r_Cdmax_top, r_z0_top, r_ke0_top ! set from namdrg_top namelist values 60 REAL(wp), PUBLIC :: r_Cdmin_bot, r_Cdmax_bot, r_z0_bot, r_ke0_bot ! - - namdrg_bot - - 65 ! tipaccs 2d top tidal velocity 66 REAL(wp), PUBLIC :: r_Cdmin_top, r_Cdmax_top, r_z0_top ! set from namdrg_top namelist values 67 REAL(wp), PUBLIC :: r_Cdmin_bot, r_Cdmax_bot, r_z0_bot ! - - namdrg_bot - - 68 ! end tipaccs 2d top tidal velocity 61 69 62 70 INTEGER :: ndrg ! choice of the type of drag coefficient … … 70 78 LOGICAL :: l_log_not_linssh !: flag to update at each time step the position ot the velocity point 71 79 ! 80 ! tipaccs 2d top tidal velocity 81 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC :: rke0_top, rke0_bot !: precomputed top/bottom tidal velocity 82 ! end tipaccs 2d top tidal velocity 72 83 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC :: rCd0_top, rCd0_bot !: precomputed top/bottom drag coeff. at t-point (>0) 73 84 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC :: rCdU_top, rCdU_bot !: top/bottom drag coeff. at t-point (<0) [m/s] … … 107 118 REAL(wp) , INTENT(in ) :: pCdmax ! max drag value 108 119 REAL(wp) , INTENT(in ) :: pz0 ! roughness 109 REAL(wp) , INTENT(in ) :: pke0 ! background tidal KE 120 ! tipaccs 2d top tidal velocity 121 REAL(wp), DIMENSION(:,:), INTENT(in ) :: pke0 ! background tidal KE 122 ! end tipaccs 2d top tidal velocity 110 123 REAL(wp), DIMENSION(:,:), INTENT(in ) :: pCd0 ! masked precomputed part of Cd0 111 124 REAL(wp), DIMENSION(:,:), INTENT( out) :: pCdU ! = - Cd*|U| (t-points) [m/s] … … 126 139 zcd = ( vkarmn / LOG( zzz / pz0 ) )**2 127 140 zcd = pCd0(ji,jj) * MIN( MAX( pCdmin , zcd ) , pCdmax ) ! here pCd0 = mask*boost 128 pCdU(ji,jj) = - zcd * SQRT( 0.25 * ( zut*zut + zvt*zvt ) + pke0 )141 pCdU(ji,jj) = - zcd * SQRT( 0.25 * ( zut*zut + zvt*zvt ) + pke0(ji,jj) ) 129 142 END_2D 130 143 ELSE !== standard Cd ==! … … 134 147 zvt = vv(ji,jj,imk,Kmm) + vv(ji,jj-1,imk,Kmm) 135 148 ! ! here pCd0 = mask*boost * drag 136 pCdU(ji,jj) = - pCd0(ji,jj) * SQRT( 0.25 * ( zut*zut + zvt*zvt ) + pke0 )149 pCdU(ji,jj) = - pCd0(ji,jj) * SQRT( 0.25 * ( zut*zut + zvt*zvt ) + pke0(ji,jj) ) 137 150 END_2D 138 151 ENDIF … … 266 279 ! !== BOTTOM drag setting ==! (applied at seafloor) 267 280 ! 268 ALLOCATE( rCd0_bot(jpi,jpj), rCdU_bot(jpi,jpj) ) 281 ALLOCATE( rCd0_bot(jpi,jpj), rCdU_bot(jpi,jpj), rke0_bot(jpi,jpj) ) 282 ! tipaccs 2d top tidal velocity 269 283 CALL drg_init( 'BOTTOM' , mbkt , & ! <== in 270 & r_Cdmin_bot, r_Cdmax_bot, r_z0_bot, r_ke0_bot, rCd0_bot, rCdU_bot ) ! ==> out 284 & r_Cdmin_bot, r_Cdmax_bot, r_z0_bot, rke0_bot, rCd0_bot, rCdU_bot ) ! ==> out 285 ! end tipaccs 2d top tidal velocity 286 271 287 ! 272 288 ! !== TOP drag setting ==! (applied at the top of ocean cavities) … … 277 293 ! 278 294 IF( ln_isfcav ) THEN 279 ALLOCATE( rCd0_top(jpi,jpj)) 295 ALLOCATE( rCd0_top(jpi,jpj), rke0_top(jpi,jpj)) 296 ! tipaccs 2d top tidal velocity 280 297 CALL drg_init( 'TOP ' , mikt , & ! <== in 281 & r_Cdmin_top, r_Cdmax_top, r_z0_top, r_ke0_top, rCd0_top, rCdU_top ) ! ==> out 298 & r_Cdmin_top, r_Cdmax_top, r_z0_top, rke0_top, rCd0_top, rCdU_top ) ! ==> out 299 ! end tipaccs 2d top tidal velocity 282 300 ENDIF 283 301 ! … … 297 315 REAL(wp) , INTENT( out) :: pCdmin, pCdmax ! min and max drag coef. [-] 298 316 REAL(wp) , INTENT( out) :: pz0 ! roughness [m] 299 REAL(wp) , INTENT( out) :: pke0 ! background KE [m2/s2] 317 ! tipaccs 2d top tidal velocity 318 REAL(wp), DIMENSION(:,:), INTENT( out) :: pke0 ! background KE [m2/s2] 319 ! end tipaccs 2d top tidal velocity 300 320 REAL(wp), DIMENSION(:,:), INTENT( out) :: pCd0 ! masked precomputed part of the non-linear drag coefficient 301 321 REAL(wp), DIMENSION(:,:), INTENT( out) :: pCdU ! minus linear drag*|U| at t-points [m/s] … … 310 330 NAMELIST/namdrg_top/ rn_Cd0, rn_Uc0, rn_Cdmax, rn_ke0, rn_z0, ln_boost, rn_boost 311 331 NAMELIST/namdrg_bot/ rn_Cd0, rn_Uc0, rn_Cdmax, rn_ke0, rn_z0, ln_boost, rn_boost 332 333 ! tipaccs 2d top tidal velocity 334 CHARACTER(len=255) :: cn_dirttv 335 TYPE(FLD_N) :: sn_ttv 336 REAL(wp) :: rn_ttv_sf, rn_ttv_os 337 NAMELIST/namdrg_top_tipaccs/ ln_2d_ttv, rn_ttv_sf, rn_ttv_os, cn_dirttv, sn_ttv 338 ! end tipaccs 2d top tidal velocity 312 339 !!---------------------------------------------------------------------- 313 340 ! … … 345 372 IF(lwm .AND. ll_top) WRITE ( numond, namdrg_top ) 346 373 IF(lwm .AND. ll_bot) WRITE ( numond, namdrg_bot ) 374 375 ! tipaccs 2d top tidal velocity 376 IF (ll_top) THEN 377 READ (numnam_ref, namdrg_top_tipaccs, IOSTAT = ios, ERR = 905) 378 905 IF( ios /= 0 ) CALL ctl_nam( ios , TRIM(cl_namref)//'_tipaccs' ) 379 READ (numnam_cfg, namdrg_top_tipaccs, IOSTAT = ios, ERR = 906) 380 906 IF( ios /= 0 ) CALL ctl_nam( ios , TRIM(cl_namcfg)//'_tipaccs' ) 381 ENDIF 382 ! end tipaccs 2d top tidal velocity 383 347 384 ! 348 385 IF(lwp) THEN … … 352 389 WRITE(numout,*) ' characteristic velocity (linear case) rn_Uc0 = ', rn_Uc0, ' m/s' 353 390 WRITE(numout,*) ' non-linear drag maximum rn_Cdmax = ', rn_Cdmax 354 WRITE(numout,*) ' background kinetic energy (n-l case) rn_ke0 = ', rn_ke0 391 392 ! tipaccs 2d top tidal velocity 393 IF (ll_top) WRITE(numout,*) ' use 2d top tidal velocity ln_2d_ttv= ', ln_2d_ttv 394 IF (ln_2d_ttv .AND. ll_top) THEN 395 WRITE(numout,*) ' 2d top tital velocity read from file sn_ttv = ',TRIM(sn_ttv%clname) 396 WRITE(numout,*) ' scale factor applied to ttv rn_ttv_sf= ', rn_ttv_sf 397 WRITE(numout,*) ' offset applied to ttv rn_ttv_os= ', rn_ttv_os 398 ELSE 399 WRITE(numout,*) ' background kinetic energy (n-l case) rn_ke0 = ', rn_ke0 400 ENDIF 401 ! end tipaccs 2d top tidal velocity 355 402 WRITE(numout,*) ' bottom roughness (n-l case) rn_z0 = ', rn_z0 356 403 WRITE(numout,*) ' set a regional boost of Cd0 ln_boost = ', ln_boost … … 364 411 pke0 = rn_ke0 365 412 ! 413 ! tipaccs 2d top tidal velocity 414 IF (ln_2d_ttv) THEN 415 IF(lwp) WRITE(numout,*) 416 IF(lwp) WRITE(numout,*) ' ==>>> use a 2d top tidal velocity read in ',TRIM(sn_ttv%clname), ' file' 417 ! 2d top tidal velocity 418 CALL iom_open ( TRIM(sn_ttv%clname), inum ) 419 CALL iom_get ( inum, jpdom_global, TRIM(sn_ttv%clvar), pke0, 1 ) 420 CALL iom_close( inum) 421 ! 422 ! Eq 9c Jourdain et al. (2019) 423 ! input file is a velocity, NEMO need a square velocity 424 pke0 = pke0 * rn_ttv_sf + rn_ttv_os 425 pke0 = pke0 * pke0 426 ! 427 ENDIF 428 ! end tipaccs 2d top tidal velocity 366 429 ! !== mask * boost factor ==! 367 430 ! … … 409 472 IF(lwp) WRITE(numout,*) ' ==>>> quadratic ',TRIM(cd_topbot),' friction (propotional to module of the velocity)' 410 473 IF(lwp) WRITE(numout,*) ' with a drag coefficient Cd0 = ', rn_Cd0, ', and' 411 IF(lwp) WRITE(numout,*) ' a background velocity module of (rn_ke0)^1/2 = ', SQRT(rn_ke0), 'm/s)' 474 ! tipaccs 2d top tidal velocity 475 IF (ln_2d_ttv) THEN 476 IF(lwp) WRITE(numout,*) ' a 2d top tidal velocity from',TRIM(sn_ttv%clname) 477 ELSE 478 IF(lwp) WRITE(numout,*) ' a background velocity module of (rn_ke0)^1/2 = ', SQRT(rn_ke0), 'm/s)' 479 END IF 480 ! end tipaccs 2d top tidal velocity 412 481 ! 413 482 l_zdfdrg = .TRUE. !* Cd*|U| updated at each time-step (it depends on ocean velocity) … … 420 489 IF(lwp) WRITE(numout,*) ' ==>>> quadratic ',TRIM(cd_topbot),' drag (propotional to module of the velocity)' 421 490 IF(lwp) WRITE(numout,*) ' with a logarithmic Cd0 formulation Cd0 = ( vkarman log(z/z0) )^2 ,' 422 IF(lwp) WRITE(numout,*) ' a background velocity module of (rn_ke0)^1/2 = ', SQRT(pke0), 'm/s), ' 491 ! tipaccs 2d top tidal velocity 492 IF (ln_2d_ttv) THEN 493 IF(lwp) WRITE(numout,*) ' a 2d top tidal velocity from',TRIM(sn_ttv%clname) 494 ELSE 495 IF(lwp) WRITE(numout,*) ' a background velocity module of (rn_ke0)^1/2 = ', SQRT(rn_ke0), 'm/s)' 496 END IF 497 ! tipaccs 2d top tidal velocity 423 498 IF(lwp) WRITE(numout,*) ' a logarithmic formulation: a roughness of ', pz0, ' meters, and ' 424 499 IF(lwp) WRITE(numout,*) ' a proportionality factor bounded by min/max values of ', pCdmin, pCdmax -
NEMO/branches/CNRS/dev_r14723_tides_under_isf/src/OCE/ZDF/zdfphy.F90
r14433 r15605 255 255 ! !* bottom drag 256 256 CALL zdf_drg( kt, Kmm, mbkt , r_Cdmin_bot, r_Cdmax_bot, & ! <<== in 257 & r_z0_bot, r _ke0_bot, rCd0_bot, &257 & r_z0_bot, rke0_bot, rCd0_bot, & 258 258 & rCdU_bot ) ! ==>> out : bottom drag [m/s] 259 259 IF( ln_isfcav ) THEN !* top drag (ocean cavities) 260 260 CALL zdf_drg( kt, Kmm, mikt , r_Cdmin_top, r_Cdmax_top, & ! <<== in 261 & r_z0_top, r _ke0_top, rCd0_top, &261 & r_z0_top, rke0_top, rCd0_top, & 262 262 & rCdU_top ) ! ==>> out : bottom drag [m/s] 263 263 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.