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 12724 for NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ZDF/zdfiwm.F90 – NEMO

Ignore:
Timestamp:
2020-04-08T21:37:59+02:00 (4 years ago)
Author:
techene
Message:

branch KERNEL-06 : merge with trunk@12698 #2385 - in duplcated files : changes to comply to the new trunk variables and some loop bug fixes

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  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@HEAD         sette 
  • NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/ZDF/zdfiwm.F90

    r12622 r12724  
    2323   USE phycst         ! physical constants 
    2424   ! 
     25   USE fldread        ! field read 
    2526   USE prtctl         ! Print control 
    2627   USE in_out_manager ! I/O manager 
     
    8889      !!              This is divided into three components: 
    8990      !!                 1. Bottom-intensified low-mode dissipation at critical slopes 
    90       !!                     zemx_iwm(z) = ( ecri_iwm / rau0 ) * EXP( -(H-z)/hcri_iwm ) 
     91      !!                     zemx_iwm(z) = ( ecri_iwm / rho0 ) * EXP( -(H-z)/hcri_iwm ) 
    9192      !!                                   / ( 1. - EXP( - H/hcri_iwm ) ) * hcri_iwm 
    9293      !!              where hcri_iwm is the characteristic length scale of the bottom  
    9394      !!              intensification, ecri_iwm a map of available power, and H the ocean depth. 
    9495      !!                 2. Pycnocline-intensified low-mode dissipation 
    95       !!                     zemx_iwm(z) = ( epyc_iwm / rau0 ) * ( sqrt(rn2(z))^nn_zpyc ) 
     96      !!                     zemx_iwm(z) = ( epyc_iwm / rho0 ) * ( sqrt(rn2(z))^nn_zpyc ) 
    9697      !!                                   / SUM( sqrt(rn2(z))^nn_zpyc * e3w[z) ) 
    9798      !!              where epyc_iwm is a map of available power, and nn_zpyc 
     
    99100      !!              energy dissipation. 
    100101      !!                 3. WKB-height dependent high mode dissipation 
    101       !!                     zemx_iwm(z) = ( ebot_iwm / rau0 ) * rn2(z) * EXP(-z_wkb(z)/hbot_iwm) 
     102      !!                     zemx_iwm(z) = ( ebot_iwm / rho0 ) * rn2(z) * EXP(-z_wkb(z)/hbot_iwm) 
    102103      !!                                   / SUM( rn2(z) * EXP(-z_wkb(z)/hbot_iwm) * e3w[z) ) 
    103104      !!              where hbot_iwm is the characteristic length scale of the WKB bottom  
     
    152153      DO_2D_11_11 
    153154         zhdep(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1)       ! depth of the ocean 
    154          zfact(ji,jj) = rau0 * (  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) )  ) 
    155156         IF( zfact(ji,jj) /= 0._wp )   zfact(ji,jj) = ecri_iwm(ji,jj) / zfact(ji,jj) 
    156157      END_2D 
     
    184185         ! 
    185186         DO_2D_11_11 
    186             IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = epyc_iwm(ji,jj) / ( rau0 * zfact(ji,jj) ) 
     187            IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 
    187188         END_2D 
    188189         ! 
     
    199200         ! 
    200201         DO_2D_11_11 
    201             IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = epyc_iwm(ji,jj) / ( rau0 * zfact(ji,jj) ) 
     202            IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 
    202203         END_2D 
    203204         ! 
     
    246247      ! 
    247248      DO_2D_11_11 
    248          IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = ebot_iwm(ji,jj) / ( rau0 * zfact(ji,jj) ) 
     249         IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = ebot_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 
    249250      END_2D 
    250251      ! 
     
    258259      ! Calculate molecular kinematic viscosity 
    259260      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_rau0 
     261         &                                  + 0.02305_wp * ts(:,:,:,jp_sal,Kmm)  ) * tmask(:,:,:) * r1_rho0 
    261262      DO jk = 2, jpkm1 
    262263         znu_w(:,:,jk) = 0.5_wp * ( znu_t(:,:,jk-1) + znu_t(:,:,jk) ) * wmask(:,:,jk) 
     
    296297         END_3D 
    297298         CALL mpp_sum( 'zdfiwm', zztmp ) 
    298          zztmp = rau0 * zztmp ! Global integral of rauo * Kz * N^2 = power contributing to mixing  
     299         zztmp = rho0 * zztmp ! Global integral of rauo * Kz * N^2 = power contributing to mixing  
    299300         ! 
    300301         IF(lwp) THEN 
     
    340341                                    !* output useful diagnostics: Kz*N^2 ,  
    341342!!gm Kz*N2 should take into account the ratio avs/avt if it is used.... (see diaar5) 
    342                                     !  vertical integral of rau0 * Kz * N^2 , energy density (zemx_iwm) 
     343                                    !  vertical integral of rho0 * Kz * N^2 , energy density (zemx_iwm) 
    343344      IF( iom_use("bflx_iwm") .OR. iom_use("pcmap_iwm") ) THEN 
    344345         ALLOCATE( z2d(jpi,jpj) , z3d(jpi,jpj,jpk) ) 
     
    348349            z2d(:,:) = z2d(:,:) + e3w(:,:,jk,Kmm) * z3d(:,:,jk) * wmask(:,:,jk) 
    349350         END DO 
    350          z2d(:,:) = rau0 * z2d(:,:) 
     351         z2d(:,:) = rho0 * z2d(:,:) 
    351352         CALL iom_put( "bflx_iwm", z3d ) 
    352353         CALL iom_put( "pcmap_iwm", z2d ) 
     
    386387      !!              de Lavergne et al. in prep., 2017 
    387388      !!---------------------------------------------------------------------- 
    388       INTEGER  ::   inum         ! local integer 
     389      INTEGER  ::   ifpr               ! dummy loop indices 
     390      INTEGER  ::   inum               ! local integer 
    389391      INTEGER  ::   ios 
    390392      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 
    393409      !!---------------------------------------------------------------------- 
    394410      ! 
     
    425441      IF( zdf_iwm_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_iwm_init : unable to allocate iwm arrays' ) 
    426442      ! 
     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 
    427462      !                             ! 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] 
    451470 
    452471      zbot = glob_sum( 'zdfiwm', e1e2t(:,:) * ebot_iwm(:,:) ) 
    453472      zpyc = glob_sum( 'zdfiwm', e1e2t(:,:) * epyc_iwm(:,:) ) 
    454473      zcri = glob_sum( 'zdfiwm', e1e2t(:,:) * ecri_iwm(:,:) ) 
     474 
    455475      IF(lwp) THEN 
    456476         WRITE(numout,*) '      High-mode wave-breaking energy:             ', zbot * 1.e-12_wp, 'TW' 
Note: See TracChangeset for help on using the changeset viewer.