Changeset 12894


Ignore:
Timestamp:
2020-05-08T15:40:58+02:00 (7 months ago)
Author:
clem
Message:

add parameterization of radiation from Marion Lebrun (2019)

Location:
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/cfgs/SHARED/namelist_ice_ref

    r12890 r12894  
    102102&namdyn_adv     !   Ice advection 
    103103!------------------------------------------------------------------------------ 
    104    ln_adv_Pra       = .true.         !  Advection scheme (Prather) 
    105    ln_adv_UMx       = .false.          !  Advection scheme (Ultimate-Macho) 
     104   ln_adv_Pra       = .true.          !  Advection scheme (Prather) 
     105   ln_adv_UMx       = .false.         !  Advection scheme (Ultimate-Macho) 
    106106      nn_UMx        =   5             !     order of the scheme for UMx (1-5 ; 20=centered 2nd order) 
    107107/ 
     
    123123   ln_cndflx        = .false.         !  Use conduction flux as surface boundary conditions (i.e. for Jules coupling) 
    124124      ln_cndemulate = .false.         !     emulate conduction flux (if not provided in the inputs) 
     125   nn_qtrice        = 0               !  Solar flux transmitted thru the surface scattering layer: 
     126                                      !     = 0  Grenfell and Maykut 1977 (depends on cloudiness and is 0 when there is snow)  
     127                                      !     = 1  Lebrun 2019 (equals 0.3 anytime with different melting/dry snw conductivities) 
    125128/ 
    126129!------------------------------------------------------------------------------ 
     
    142145   rn_cnd_s         =   0.31          !  thermal conductivity of the snow (0.31 W/m/K, Maykut and Untersteiner, 1971) 
    143146                                      !     Obs: 0.1-0.5 (Lecomte et al, JAMES 2013) 
    144    rn_kappa_i       =   1.0           !  radiation attenuation coefficient in sea ice [1/m] 
     147   rn_kappa_i       =   1.0           !  radiation attenuation coefficient in sea ice                     [1/m] 
     148   rn_kappa_s       =  10.0           !  nn_qtrice = 0: radiation attenuation coefficient in snow         [1/m] 
     149   rn_kappa_smlt    =   7.0           !  nn_qtrice = 1: radiation attenuation coefficient in melting snow [1/m] 
     150   rn_kappa_sdry    =  10.0           !                 radiation attenuation coefficient in dry snow     [1/m] 
    145151/ 
    146152!------------------------------------------------------------------------------ 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/doc/namelists/namthd_zdf

    r11025 r12894  
    77   rn_cnd_s         =   0.31          !  thermal conductivity of the snow (0.31 W/m/K, Maykut and Untersteiner, 1971) 
    88                                      !     Obs: 0.1-0.5 (Lecomte et al, JAMES 2013) 
    9    rn_kappa_i       =   1.0           !  radiation attenuation coefficient in sea ice [1/m] 
     9   rn_kappa_i       =   1.0           !  radiation attenuation coefficient in sea ice                     [1/m] 
     10   rn_kappa_s       =  10.0           !  nn_qtrice = 0: radiation attenuation coefficient in snow         [1/m] 
     11   rn_kappa_smlt    =   7.0           !  nn_qtrice = 1: radiation attenuation coefficient in melting snow [1/m] 
     12   rn_kappa_sdry    =  10.0           !                 radiation attenuation coefficient in dry snow     [1/m] 
    1013/ 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/ICE/ice.F90

    r12890 r12894  
    176176   !                                      !   = 1  Average N(cat) fluxes then redistribute over the N(cat) ice using T-ice and albedo sensitivity 
    177177   !                                      !   = 2  Redistribute a single flux over categories 
     178                                          ! -- icethd_zdf -- ! 
    178179   LOGICAL , PUBLIC ::   ln_cndflx        !: use conduction flux as surface boundary condition (instead of qsr and qns)  
    179180   LOGICAL , PUBLIC ::   ln_cndemulate    !: emulate conduction flux (if not provided)  
     
    182183   INTEGER, PUBLIC, PARAMETER ::   np_cnd_ON  = 1  !: forcing from conduction flux (SM0L) (compute qcn and qsr_tr via sbcblk.F90 or sbccpl.F90) 
    183184   INTEGER, PUBLIC, PARAMETER ::   np_cnd_EMU = 2  !: emulate conduction flux via icethd_zdf.F90 (BL99) (1st round compute qcn and qsr_tr, 2nd round use it) 
    184  
     185   INTEGER, PUBLIC ::   nn_qtrice         !: Solar flux transmitted thru the surface scattering layer: 
     186   !                                      !   = 0  Grenfell and Maykut 1977 (depends on cloudiness and is 0 when there is snow)  
     187   !                                      !   = 1  Lebrun 2019 (equals 0.3 anytime with different melting/dry snw conductivities) 
     188   ! 
    185189   !                                     !!** ice-vertical diffusion namelist (namthd_zdf) ** 
    186190   LOGICAL , PUBLIC ::   ln_cndi_U64      !: thermal conductivity: Untersteiner (1964) 
    187191   LOGICAL , PUBLIC ::   ln_cndi_P07      !: thermal conductivity: Pringle et al (2007) 
    188    REAL(wp), PUBLIC ::   rn_kappa_i       !: coef. for the extinction of radiation Grenfell et al. (2006) [1/m] 
    189192   REAL(wp), PUBLIC ::   rn_cnd_s         !: thermal conductivity of the snow [W/m/K]    
     193   REAL(wp), PUBLIC ::   rn_kappa_i       !: coef. for the extinction of radiation in sea ice, Grenfell et al. (2006) [1/m] 
     194   REAL(wp), PUBLIC ::   rn_kappa_s       !: coef. for the extinction of radiation in snw (nn_qtrice=0) [1/m] 
     195   REAL(wp), PUBLIC ::   rn_kappa_smlt    !: coef. for the extinction of radiation in melt snw (nn_qtrice=1) [1/m] 
     196   REAL(wp), PUBLIC ::   rn_kappa_sdry    !: coef. for the extinction of radiation in dry  snw (nn_qtrice=1) [1/m] 
    190197 
    191198   !                                     !!** ice-salinity namelist (namthd_sal) ** 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/ICE/icesbc.F90

    r12890 r12894  
    276276      INTEGER ::   ios, ioptio   ! Local integer 
    277277      !! 
    278       NAMELIST/namsbc/ rn_cio, rn_snwblow, nn_snwfra, nn_flxdist, ln_cndflx, ln_cndemulate 
     278      NAMELIST/namsbc/ rn_cio, nn_snwfra, rn_snwblow, nn_flxdist, ln_cndflx, ln_cndemulate, nn_qtrice 
    279279      !!------------------------------------------------------------------- 
    280280      ! 
     
    292292         WRITE(numout,*) '~~~~~~~~~~~~~~~~' 
    293293         WRITE(numout,*) '   Namelist namsbc:' 
    294          WRITE(numout,*) '      drag coefficient for oceanic stress              rn_cio        = ', rn_cio 
    295          WRITE(numout,*) '      fraction of ice covered by snow (options 0,1,2)  nn_snwfra     = ', nn_snwfra 
    296          WRITE(numout,*) '      coefficient for ice-lead partition of snowfall   rn_snwblow    = ', rn_snwblow 
    297          WRITE(numout,*) '      Multicategory heat flux formulation              nn_flxdist    = ', nn_flxdist 
    298          WRITE(numout,*) '      Use conduction flux as surface condition         ln_cndflx     = ', ln_cndflx 
    299          WRITE(numout,*) '         emulate conduction flux                       ln_cndemulate = ', ln_cndemulate 
     294         WRITE(numout,*) '      drag coefficient for oceanic stress                       rn_cio        = ', rn_cio 
     295         WRITE(numout,*) '      fraction of ice covered by snow (options 0,1,2)           nn_snwfra     = ', nn_snwfra 
     296         WRITE(numout,*) '      coefficient for ice-lead partition of snowfall            rn_snwblow    = ', rn_snwblow 
     297         WRITE(numout,*) '      Multicategory heat flux formulation                       nn_flxdist    = ', nn_flxdist 
     298         WRITE(numout,*) '      Use conduction flux as surface condition                  ln_cndflx     = ', ln_cndflx 
     299         WRITE(numout,*) '         emulate conduction flux                                ln_cndemulate = ', ln_cndemulate 
     300         WRITE(numout,*) '      solar flux transmitted thru the surface scattering layer  nn_qtrice     = ', nn_qtrice 
     301         WRITE(numout,*) '         = 0  Grenfell and Maykut 1977' 
     302         WRITE(numout,*) '         = 1  Lebrun 2019' 
    300303      ENDIF 
    301304      ! 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/ICE/icethd_zdf.F90

    r11536 r12894  
    8585      INTEGER  ::   ios, ioptio   ! Local integer 
    8686      !! 
    87       NAMELIST/namthd_zdf/ ln_zdf_BL99, ln_cndi_U64, ln_cndi_P07, rn_cnd_s, rn_kappa_i 
     87      NAMELIST/namthd_zdf/ ln_zdf_BL99, ln_cndi_U64, ln_cndi_P07, rn_cnd_s, & 
     88         &                 rn_kappa_i, rn_kappa_s, rn_kappa_smlt, rn_kappa_sdry 
    8889      !!------------------------------------------------------------------- 
    8990      ! 
     
    101102         WRITE(numout,*) '~~~~~~~~~~~~~~~~' 
    102103         WRITE(numout,*) '   Namelist namthd_zdf:' 
    103          WRITE(numout,*) '      Bitz and Lipscomb (1999) formulation                    ln_zdf_BL99  = ', ln_zdf_BL99 
    104          WRITE(numout,*) '      thermal conductivity in the ice (Untersteiner 1964)     ln_cndi_U64  = ', ln_cndi_U64 
    105          WRITE(numout,*) '      thermal conductivity in the ice (Pringle et al 2007)    ln_cndi_P07  = ', ln_cndi_P07 
    106          WRITE(numout,*) '      thermal conductivity in the snow                        rn_cnd_s     = ', rn_cnd_s 
    107          WRITE(numout,*) '      extinction radiation parameter in sea ice               rn_kappa_i   = ', rn_kappa_i 
     104         WRITE(numout,*) '      Bitz and Lipscomb (1999) formulation                      ln_zdf_BL99   = ', ln_zdf_BL99 
     105         WRITE(numout,*) '      thermal conductivity in the ice (Untersteiner 1964)       ln_cndi_U64   = ', ln_cndi_U64 
     106         WRITE(numout,*) '      thermal conductivity in the ice (Pringle et al 2007)      ln_cndi_P07   = ', ln_cndi_P07 
     107         WRITE(numout,*) '      thermal conductivity in the snow                          rn_cnd_s      = ', rn_cnd_s 
     108         WRITE(numout,*) '      extinction radiation parameter in sea ice                 rn_kappa_i    = ', rn_kappa_i 
     109         WRITE(numout,*) '      extinction radiation parameter in snw      (nn_qtrice=0)  rn_kappa_s    = ', rn_kappa_s 
     110         WRITE(numout,*) '      extinction radiation parameter in melt snw (nn_qtrice=1)  rn_kappa_smlt = ', rn_kappa_smlt 
     111         WRITE(numout,*) '      extinction radiation parameter in dry  snw (nn_qtrice=1)  rn_kappa_sdry = ', rn_kappa_sdry 
    108112      ENDIF 
    109113      ! 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/ICE/icethd_zdf_bl99.F90

    r12890 r12894  
    9090      REAL(wp) ::   zgamma    =  18009._wp    ! for specific heat 
    9191      REAL(wp) ::   zbeta     =  0.117_wp     ! for thermal conductivity (could be 0.13) 
    92       REAL(wp) ::   zraext_s  =  10._wp       ! extinction coefficient of radiation in the snow 
    9392      REAL(wp) ::   zkimin    =  0.10_wp      ! minimum ice thermal conductivity 
    9493      REAL(wp) ::   ztsu_err  =  1.e-5_wp     ! range around which t_su is considered at 0C  
     
    101100      REAL(wp) ::   zhfx_err, zdq             ! diag errors on heat 
    102101      ! 
     102      REAL(wp), DIMENSION(jpij) ::   zraext_s     ! extinction coefficient of radiation in the snow 
    103103      REAL(wp), DIMENSION(jpij) ::   ztsub        ! surface temperature at previous iteration 
    104104      REAL(wp), DIMENSION(jpij) ::   zh_i, z1_h_i ! ice layer thickness 
     
    148148      ! 1) Initialization 
    149149      !------------------ 
     150      ! 
     151      ! extinction radiation in the snow 
     152      IF    ( nn_qtrice == 0 ) THEN   ! constant  
     153         zraext_s(1:npti) = rn_kappa_s 
     154      ELSEIF( nn_qtrice == 1 ) THEN   ! depends on melting/freezing conditions 
     155         WHERE( t_su_1d(1:npti) < rt0 )   ;   zraext_s(1:npti) = rn_kappa_sdry   ! no surface melting 
     156         ELSEWHERE                        ;   zraext_s(1:npti) = rn_kappa_smlt   !    surface melting 
     157         END WHERE 
     158      ENDIF 
     159      ! 
     160      ! layers thicknesses 
    150161      DO ji = 1, npti 
    151162         zh_s(ji) = MAX( zhs_ssl , h_s_1d(ji) ) * r1_nlay_s ! set a minimum snw thickness for conduction 
     
    183194         DO ji = 1, npti 
    184195            !                             ! radiation transmitted below the layer-th snow layer 
    185             zradtr_s(ji,jk) = zradtr_s(ji,0) * EXP( - zraext_s * MAX( 0._wp, zh_s(ji) * REAL(jk) - zhs_ssl ) ) 
     196            zradtr_s(ji,jk) = zradtr_s(ji,0) * EXP( - zraext_s(ji) * MAX( 0._wp, zh_s(ji) * REAL(jk) - zhs_ssl ) ) 
    186197            !                             ! radiation absorbed by the layer-th snow layer 
    187198            zradab_s(ji,jk) = zradtr_s(ji,jk-1) - zradtr_s(ji,jk) 
     
    193204         DO ji = 1, npti 
    194205            !                             ! radiation transmitted below the layer-th ice layer 
     206            zradtr_i(ji,jk) =           za_s_fra(ji)   * zradtr_s(ji,nlay_s)                       &   ! part covered by snow 
     207               &                                       * EXP( - rn_kappa_i * zh_i(ji) * REAL(jk) ) & 
     208               &            + ( 1._wp - za_s_fra(ji) ) * qtr_ice_top_1d(ji)                        &   ! part snow free 
     209               &                                       * EXP( - rn_kappa_i * MAX( 0._wp, zh_i(ji) * REAL(jk) - zhi_ssl ) ) 
     210             
    195211            zradtr_i(ji,jk) = zradtr_i(ji,0) * EXP( - rn_kappa_i * MAX( 0._wp, zh_i(ji) * REAL(jk) - zhi_ssl ) ) 
    196212            !                             ! radiation absorbed by the layer-th ice layer 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/SBC/sbcblk.F90

    r12890 r12894  
    4646   USE lib_fortran    ! to use key_nosignedzero 
    4747#if defined key_si3 
    48    USE ice     , ONLY :   u_ice, v_ice, jpl, a_i_b, at_i_b, t_su, rn_cnd_s, hfx_err_dif 
     48   USE ice     , ONLY :   u_ice, v_ice, jpl, a_i_b, at_i_b, t_su, rn_cnd_s, hfx_err_dif, nn_qtrice 
    4949   USE icevar         ! for CALL ice_var_snwblow 
    5050#endif 
     
    917917      END DO 
    918918 
    919       ! --- shortwave radiation transmitted below the surface (W/m2, see Grenfell Maykut 77) --- ! 
    920       ztri(:,:) = 0.18 * ( 1.0 - cloud_fra(:,:) ) + 0.35 * cloud_fra(:,:)  ! surface transmission when hi>10cm 
    921       ! 
    922       DO jl = 1, jpl 
    923          WHERE    ( phs(:,:,jl) <= 0._wp .AND. phi(:,:,jl) <  0.1_wp )     ! linear decrease from hi=0 to 10cm   
    924             qtr_ice_top(:,:,jl) = qsr_ice(:,:,jl) * ( ztri(:,:) + ( 1._wp - ztri(:,:) ) * ( 1._wp - phi(:,:,jl) * 10._wp ) ) 
    925          ELSEWHERE( phs(:,:,jl) <= 0._wp .AND. phi(:,:,jl) >= 0.1_wp )     ! constant (ztri) when hi>10cm 
    926             qtr_ice_top(:,:,jl) = qsr_ice(:,:,jl) * ztri(:,:) 
    927          ELSEWHERE                                                         ! zero when hs>0 
    928             qtr_ice_top(:,:,jl) = 0._wp  
    929          END WHERE 
    930       ENDDO 
     919      ! --- shortwave radiation transmitted thru the surface scattering layer (W/m2) --- ! 
     920      IF( nn_qtrice == 0 ) THEN 
     921         ! formulation derived from Grenfell and Maykut (1977), where transmission rate 
     922         !    1) depends on cloudiness 
     923         !    2) is 0 when there is any snow 
     924         !    3) tends to 1 for thin ice 
     925         ztri(:,:) = 0.18 * ( 1.0 - cloud_fra(:,:) ) + 0.35 * cloud_fra(:,:)  ! surface transmission when hi>10cm 
     926         DO jl = 1, jpl 
     927            WHERE    ( phs(:,:,jl) <= 0._wp .AND. phi(:,:,jl) <  0.1_wp )     ! linear decrease from hi=0 to 10cm   
     928               qtr_ice_top(:,:,jl) = qsr_ice(:,:,jl) * ( ztri(:,:) + ( 1._wp - ztri(:,:) ) * ( 1._wp - phi(:,:,jl) * 10._wp ) ) 
     929            ELSEWHERE( phs(:,:,jl) <= 0._wp .AND. phi(:,:,jl) >= 0.1_wp )     ! constant (ztri) when hi>10cm 
     930               qtr_ice_top(:,:,jl) = qsr_ice(:,:,jl) * ztri(:,:) 
     931            ELSEWHERE                                                         ! zero when hs>0 
     932               qtr_ice_top(:,:,jl) = 0._wp  
     933            END WHERE 
     934         ENDDO 
     935      ELSEIF( nn_qtrice == 1 ) THEN 
     936         ! formulation is derived from the thesis of M. Lebrun (2019). 
     937         !    It represents the best fit using several sets of observations 
     938         !    It comes with snow conductivities adapted to freezing/melting conditions (see icethd_zdf_bl99.F90) 
     939         qtr_ice_top(:,:,:) = 0.3_wp * qsr_ice(:,:,:) 
     940      ENDIF 
    931941      ! 
    932942 
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/SBC/sbccpl.F90

    r12890 r12894  
    21112111      IF( .NOT.ln_cndflx ) THEN                              !==  No conduction flux as surface forcing  ==! 
    21122112         ! 
    2113          !                    ! ===> used prescribed cloud fraction representative for polar oceans in summer (0.81) 
    2114          !                    !      should be real cloud fraction instead (as in the bulk) but needs to be read from atm. 
    2115          ztri(:,:) = 0.18 * ( 1.0 - zcloud_fra(:,:) ) + 0.35 * zcloud_fra(:,:)  ! surface transmission when hi>10cm (Grenfell Maykut 77) 
    2116          ! 
    2117          DO jl = 1, jpl 
    2118             WHERE    ( phs(:,:,jl) <= 0._wp .AND. phi(:,:,jl) <  0.1_wp )     ! linear decrease from hi=0 to 10cm   
    2119                zqtr_ice_top(:,:,jl) = qsr_ice(:,:,jl) * ( ztri(:,:) + ( 1._wp - ztri(:,:) ) * ( 1._wp - phi(:,:,jl) * 10._wp ) ) 
    2120             ELSEWHERE( phs(:,:,jl) <= 0._wp .AND. phi(:,:,jl) >= 0.1_wp )     ! constant (ztri) when hi>10cm 
    2121                zqtr_ice_top(:,:,jl) = qsr_ice(:,:,jl) * ztri(:,:) 
    2122             ELSEWHERE                                                         ! zero when hs>0 
    2123                zqtr_ice_top(:,:,jl) = 0._wp 
    2124             END WHERE 
    2125          ENDDO 
     2113         IF( nn_qtrice == 0 ) THEN 
     2114            ! formulation derived from Grenfell and Maykut (1977), where transmission rate 
     2115            !    1) depends on cloudiness 
     2116            !       ! ===> used prescribed cloud fraction representative for polar oceans in summer (0.81) 
     2117            !       !      should be real cloud fraction instead (as in the bulk) but needs to be read from atm. 
     2118            !    2) is 0 when there is any snow 
     2119            !    3) tends to 1 for thin ice 
     2120            ztri(:,:) = 0.18 * ( 1.0 - zcloud_fra(:,:) ) + 0.35 * zcloud_fra(:,:)  ! surface transmission when hi>10cm 
     2121            DO jl = 1, jpl 
     2122               WHERE    ( phs(:,:,jl) <= 0._wp .AND. phi(:,:,jl) <  0.1_wp )       ! linear decrease from hi=0 to 10cm   
     2123                  zqtr_ice_top(:,:,jl) = zqsr_ice(:,:,jl) * ( ztri(:,:) + ( 1._wp - ztri(:,:) ) * ( 1._wp - phi(:,:,jl) * 10._wp ) ) 
     2124               ELSEWHERE( phs(:,:,jl) <= 0._wp .AND. phi(:,:,jl) >= 0.1_wp )       ! constant (ztri) when hi>10cm 
     2125                  zqtr_ice_top(:,:,jl) = zqsr_ice(:,:,jl) * ztri(:,:) 
     2126               ELSEWHERE                                                           ! zero when hs>0 
     2127                  zqtr_ice_top(:,:,jl) = 0._wp  
     2128               END WHERE 
     2129            ENDDO 
     2130         ELSEIF( nn_qtrice == 1 ) THEN 
     2131            ! formulation is derived from the thesis of M. Lebrun (2019). 
     2132            !    It represents the best fit using several sets of observations 
     2133            !    It comes with snow conductivities adapted to freezing/melting conditions (see icethd_zdf_bl99.F90) 
     2134            zqtr_ice_top(:,:,:) = 0.3_wp * zqsr_ice(:,:,:) 
     2135         ENDIF 
    21262136         !      
    21272137      ELSEIF( ln_cndflx .AND. .NOT.ln_cndemulate ) THEN      !==  conduction flux as surface forcing  ==! 
    21282138         ! 
    2129          !                    ! ===> here we must receive the qtr_ice_top array from the coupler 
    2130          !                           for now just assume zero (fully opaque ice) 
     2139         !          ! ===> here we must receive the qtr_ice_top array from the coupler 
     2140         !                 for now just assume zero (fully opaque ice) 
    21312141         zqtr_ice_top(:,:,:) = 0._wp 
    21322142         ! 
Note: See TracChangeset for help on using the changeset viewer.