- Timestamp:
- 2020-04-08T21:37:59+02:00 (4 years ago)
- Location:
- NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev _r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF5 ^/vendors/AGRIF/dev@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@HEAD sette
-
- Property svn:externals
-
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ZDF/zdfiwm.F90
r12622 r12724 23 23 USE phycst ! physical constants 24 24 ! 25 USE fldread ! field read 25 26 USE prtctl ! Print control 26 27 USE in_out_manager ! I/O manager … … 88 89 !! This is divided into three components: 89 90 !! 1. Bottom-intensified low-mode dissipation at critical slopes 90 !! zemx_iwm(z) = ( ecri_iwm / r au0 ) * EXP( -(H-z)/hcri_iwm )91 !! zemx_iwm(z) = ( ecri_iwm / rho0 ) * EXP( -(H-z)/hcri_iwm ) 91 92 !! / ( 1. - EXP( - H/hcri_iwm ) ) * hcri_iwm 92 93 !! where hcri_iwm is the characteristic length scale of the bottom 93 94 !! intensification, ecri_iwm a map of available power, and H the ocean depth. 94 95 !! 2. Pycnocline-intensified low-mode dissipation 95 !! zemx_iwm(z) = ( epyc_iwm / r au0 ) * ( sqrt(rn2(z))^nn_zpyc )96 !! zemx_iwm(z) = ( epyc_iwm / rho0 ) * ( sqrt(rn2(z))^nn_zpyc ) 96 97 !! / SUM( sqrt(rn2(z))^nn_zpyc * e3w[z) ) 97 98 !! where epyc_iwm is a map of available power, and nn_zpyc … … 99 100 !! energy dissipation. 100 101 !! 3. WKB-height dependent high mode dissipation 101 !! zemx_iwm(z) = ( ebot_iwm / r au0 ) * rn2(z) * EXP(-z_wkb(z)/hbot_iwm)102 !! zemx_iwm(z) = ( ebot_iwm / rho0 ) * rn2(z) * EXP(-z_wkb(z)/hbot_iwm) 102 103 !! / SUM( rn2(z) * EXP(-z_wkb(z)/hbot_iwm) * e3w[z) ) 103 104 !! where hbot_iwm is the characteristic length scale of the WKB bottom … … 152 153 DO_2D_11_11 153 154 zhdep(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1) ! depth of the ocean 154 zfact(ji,jj) = r au0 * ( 1._wp - EXP( -zhdep(ji,jj) / hcri_iwm(ji,jj) ) )155 zfact(ji,jj) = rho0 * ( 1._wp - EXP( -zhdep(ji,jj) / hcri_iwm(ji,jj) ) ) 155 156 IF( zfact(ji,jj) /= 0._wp ) zfact(ji,jj) = ecri_iwm(ji,jj) / zfact(ji,jj) 156 157 END_2D … … 184 185 ! 185 186 DO_2D_11_11 186 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( r au0 * zfact(ji,jj) )187 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 187 188 END_2D 188 189 ! … … 199 200 ! 200 201 DO_2D_11_11 201 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( r au0 * zfact(ji,jj) )202 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 202 203 END_2D 203 204 ! … … 246 247 ! 247 248 DO_2D_11_11 248 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = ebot_iwm(ji,jj) / ( r au0 * zfact(ji,jj) )249 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = ebot_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 249 250 END_2D 250 251 ! … … 258 259 ! Calculate molecular kinematic viscosity 259 260 znu_t(:,:,:) = 1.e-4_wp * ( 17.91_wp - 0.53810_wp * ts(:,:,:,jp_tem,Kmm) + 0.00694_wp * ts(:,:,:,jp_tem,Kmm) * ts(:,:,:,jp_tem,Kmm) & 260 & + 0.02305_wp * ts(:,:,:,jp_sal,Kmm) ) * tmask(:,:,:) * r1_r au0261 & + 0.02305_wp * ts(:,:,:,jp_sal,Kmm) ) * tmask(:,:,:) * r1_rho0 261 262 DO jk = 2, jpkm1 262 263 znu_w(:,:,jk) = 0.5_wp * ( znu_t(:,:,jk-1) + znu_t(:,:,jk) ) * wmask(:,:,jk) … … 296 297 END_3D 297 298 CALL mpp_sum( 'zdfiwm', zztmp ) 298 zztmp = r au0 * zztmp ! Global integral of rauo * Kz * N^2 = power contributing to mixing299 zztmp = rho0 * zztmp ! Global integral of rauo * Kz * N^2 = power contributing to mixing 299 300 ! 300 301 IF(lwp) THEN … … 340 341 !* output useful diagnostics: Kz*N^2 , 341 342 !!gm Kz*N2 should take into account the ratio avs/avt if it is used.... (see diaar5) 342 ! vertical integral of r au0 * Kz * N^2 , energy density (zemx_iwm)343 ! vertical integral of rho0 * Kz * N^2 , energy density (zemx_iwm) 343 344 IF( iom_use("bflx_iwm") .OR. iom_use("pcmap_iwm") ) THEN 344 345 ALLOCATE( z2d(jpi,jpj) , z3d(jpi,jpj,jpk) ) … … 348 349 z2d(:,:) = z2d(:,:) + e3w(:,:,jk,Kmm) * z3d(:,:,jk) * wmask(:,:,jk) 349 350 END DO 350 z2d(:,:) = r au0 * z2d(:,:)351 z2d(:,:) = rho0 * z2d(:,:) 351 352 CALL iom_put( "bflx_iwm", z3d ) 352 353 CALL iom_put( "pcmap_iwm", z2d ) … … 386 387 !! de Lavergne et al. in prep., 2017 387 388 !!---------------------------------------------------------------------- 388 INTEGER :: inum ! local integer 389 INTEGER :: ifpr ! dummy loop indices 390 INTEGER :: inum ! local integer 389 391 INTEGER :: ios 390 392 REAL(wp) :: zbot, zpyc, zcri ! local scalars 391 !! 392 NAMELIST/namzdf_iwm/ nn_zpyc, ln_mevar, ln_tsdiff 393 ! 394 CHARACTER(len=256) :: cn_dir ! Root directory for location of ssr files 395 INTEGER, PARAMETER :: jpiwm = 5 ! maximum number of files to read 396 INTEGER, PARAMETER :: jp_mpb = 1 397 INTEGER, PARAMETER :: jp_mpp = 2 398 INTEGER, PARAMETER :: jp_mpc = 3 399 INTEGER, PARAMETER :: jp_dsb = 4 400 INTEGER, PARAMETER :: jp_dsc = 5 401 ! 402 TYPE(FLD_N), DIMENSION(jpiwm) :: slf_iwm ! array of namelist informations 403 TYPE(FLD_N) :: sn_mpb, sn_mpp, sn_mpc ! informations about Mixing Power field to be read 404 TYPE(FLD_N) :: sn_dsb, sn_dsc ! informations about Decay Scale field to be read 405 TYPE(FLD ), DIMENSION(jpiwm) :: sf_iwm ! structure of input fields (file informations, fields read) 406 ! 407 NAMELIST/namzdf_iwm/ nn_zpyc, ln_mevar, ln_tsdiff, & 408 & cn_dir, sn_mpb, sn_mpp, sn_mpc, sn_dsb, sn_dsc 393 409 !!---------------------------------------------------------------------- 394 410 ! … … 425 441 IF( zdf_iwm_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'zdf_iwm_init : unable to allocate iwm arrays' ) 426 442 ! 443 ! store namelist information in an array 444 slf_iwm(jp_mpb) = sn_mpb ; slf_iwm(jp_mpp) = sn_mpp ; slf_iwm(jp_mpc) = sn_mpc 445 slf_iwm(jp_dsb) = sn_dsb ; slf_iwm(jp_dsc) = sn_dsc 446 ! 447 DO ifpr= 1, jpiwm 448 ALLOCATE( sf_iwm(ifpr)%fnow(jpi,jpj,1) ) 449 IF( slf_iwm(ifpr)%ln_tint )ALLOCATE( sf_iwm(ifpr)%fdta(jpi,jpj,1,2) ) 450 END DO 451 452 ! fill sf_iwm with sf_iwm and control print 453 CALL fld_fill( sf_iwm, slf_iwm , cn_dir, 'zdfiwm_init', 'iwm input file', 'namiwm' ) 454 455 ! ! hard-coded default definition (to be defined in namelist ?) 456 sf_iwm(jp_mpb)%fnow(:,:,1) = 1.e-6 457 sf_iwm(jp_mpp)%fnow(:,:,1) = 1.e-6 458 sf_iwm(jp_mpc)%fnow(:,:,1) = 1.e-10 459 sf_iwm(jp_dsb)%fnow(:,:,1) = 100. 460 sf_iwm(jp_dsc)%fnow(:,:,1) = 100. 461 427 462 ! ! read necessary fields 428 CALL iom_open('mixing_power_bot',inum) ! energy flux for high-mode wave breaking [W/m2] 429 CALL iom_get (inum, jpdom_data, 'field', ebot_iwm, 1 ) 430 CALL iom_close(inum) 431 ! 432 CALL iom_open('mixing_power_pyc',inum) ! energy flux for pynocline-intensified wave breaking [W/m2] 433 CALL iom_get (inum, jpdom_data, 'field', epyc_iwm, 1 ) 434 CALL iom_close(inum) 435 ! 436 CALL iom_open('mixing_power_cri',inum) ! energy flux for critical slope wave breaking [W/m2] 437 CALL iom_get (inum, jpdom_data, 'field', ecri_iwm, 1 ) 438 CALL iom_close(inum) 439 ! 440 CALL iom_open('decay_scale_bot',inum) ! spatially variable decay scale for high-mode wave breaking [m] 441 CALL iom_get (inum, jpdom_data, 'field', hbot_iwm, 1 ) 442 CALL iom_close(inum) 443 ! 444 CALL iom_open('decay_scale_cri',inum) ! spatially variable decay scale for critical slope wave breaking [m] 445 CALL iom_get (inum, jpdom_data, 'field', hcri_iwm, 1 ) 446 CALL iom_close(inum) 447 448 ebot_iwm(:,:) = ebot_iwm(:,:) * ssmask(:,:) 449 epyc_iwm(:,:) = epyc_iwm(:,:) * ssmask(:,:) 450 ecri_iwm(:,:) = ecri_iwm(:,:) * ssmask(:,:) 463 CALL fld_read( nit000, 1, sf_iwm ) 464 465 ebot_iwm(:,:) = sf_iwm(1)%fnow(:,:,1) * ssmask(:,:) ! energy flux for high-mode wave breaking [W/m2] 466 epyc_iwm(:,:) = sf_iwm(2)%fnow(:,:,1) * ssmask(:,:) ! energy flux for pynocline-intensified wave breaking [W/m2] 467 ecri_iwm(:,:) = sf_iwm(3)%fnow(:,:,1) * ssmask(:,:) ! energy flux for critical slope wave breaking [W/m2] 468 hbot_iwm(:,:) = sf_iwm(4)%fnow(:,:,1) ! spatially variable decay scale for high-mode wave breaking [m] 469 hcri_iwm(:,:) = sf_iwm(5)%fnow(:,:,1) ! spatially variable decay scale for critical slope wave breaking [m] 451 470 452 471 zbot = glob_sum( 'zdfiwm', e1e2t(:,:) * ebot_iwm(:,:) ) 453 472 zpyc = glob_sum( 'zdfiwm', e1e2t(:,:) * epyc_iwm(:,:) ) 454 473 zcri = glob_sum( 'zdfiwm', e1e2t(:,:) * ecri_iwm(:,:) ) 474 455 475 IF(lwp) THEN 456 476 WRITE(numout,*) ' High-mode wave-breaking energy: ', zbot * 1.e-12_wp, 'TW'
Note: See TracChangeset
for help on using the changeset viewer.