Changeset 8106


Ignore:
Timestamp:
2017-06-01T09:54:36+02:00 (3 years ago)
Author:
vancop
Message:

Follow up on melt ponds and albedo

Location:
branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90

    r8098 r8106  
    383383 
    384384            DO jl = 1, jpl 
    385                a_ip(:,:,jl) = 0.1 * zswitch(:,:) 
    386                v_ip(:,:,jl) = 0.1 * zswitch(:,:) * a_ip(:,:,jl) 
     385 
     386               a_ip_frac(:,:,jl) = 0.2 *  zswitch(:,:) 
     387               h_ip     (:,:,jl) = 0.05 * zswitch(:,:) 
     388               a_ip(:,:,jl)      = a_ip_frac(:,:,jl) * a_i (:,:,jl)  
     389               v_ip(:,:,jl)      = h_ip     (:,:,jl) * a_ip(:,:,jl) 
     390 
    387391            END DO 
    388392 
    389393         ELSE 
    390394 
    391             a_ip = 0._wp 
    392             v_ip = 0._wp 
     395            a_ip(:,:,:)      = 0._wp 
     396            v_ip(:,:,:)      = 0._wp 
     397            a_ip_frac(:,:,:) = 0._wp 
     398            h_ip     (:,:,:) = 0._wp 
    393399 
    394400         ENDIF 
     
    418424         END DO 
    419425 
    420          ! MV MP 2016 
    421426         a_ip(:,:,:)      = 0._wp 
    422427         v_ip(:,:,:)      = 0._wp 
    423          ! END MV MP 2016 
     428         a_ip_frac(:,:,:) = 0._wp 
     429         h_ip     (:,:,:) = 0._wp 
    424430 
    425431      ENDIF ! ln_limini 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limmp.F90

    r8099 r8106  
    120120      ENDIF 
    121121 
    122  
    123122      ! 
    124123   END SUBROUTINE lim_mp_init 
     
    200199 
    201200       WHERE ( ( a_i > epsi10 ) .AND. ( t_su >= rt0-epsi06 ) )  
    202           a_ip      = rn_apnd * z1_jpl  
     201          a_ip_frac = rn_apnd 
    203202          h_ip      = rn_hpnd     
    204           v_ip      = a_ip * h_ip  
    205           a_ip_frac = a_ip / a_i 
     203          v_ip      = a_ip_frac * a_i * h_ip  
     204          a_ip      = a_ip_frac * a_i 
    206205       ELSE WHERE 
    207206          a_ip      = 0._wp 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90

    r8099 r8106  
    209209      !------------------------------------------------------------------------! 
    210210      CALL wrk_alloc( jpi, jpj, jpl, zalb_cs, zalb_os )     
    211       ! MV PND CALL albedo_ice( t_su, ht_i, ht_s, zalb_cs, zalb_os )  ! cloud-sky and overcast-sky ice albedos 
    212       CALL albedo_ice( t_su, ht_i, a_i, ht_s, a_ip, v_ip, zalb_cs, zalb_os, ln_pnd_rad ) ! cloud-sky and overcast-sky ice albedos 
     211      CALL albedo_ice( t_su, ht_i, ht_s, a_ip_frac, h_ip, ln_pnd_rad, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos 
    213212 
    214213      alb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/OPA_SRC/SBC/albedo.F90

    r8099 r8106  
    77   !!   NEMO     1.0  ! 2003-07  (C. Ethe, G. Madec)  Optimization (old name:shine) 
    88   !!             -   ! 2004-11  (C. Talandier)  add albedo_init 
    9    !!             -   ! 2001-06  (M. Vancoppenolle) LIM 3.0 
     9   !!             -   ! 2006-06  (M. Vancoppenolle) LIM 3.0 
    1010   !!             -   ! 2006-08  (G. Madec)  cleaning for surface module 
    1111   !!            3.6  ! 2016-01  (C. Rousset) new parameterization for sea ice albedo 
     12   !!            x.x  ! 2017-05  (M. Vancoppenolle, O. Lecomte) Melt ponds 
    1213   !!---------------------------------------------------------------------- 
    1314 
     
    4849CONTAINS 
    4950 
    50    ! MV MP 2016 
    51    ! SUBROUTINE albedo_ice( pt_ice, ph_ice, ph_snw, pa_ice_cs, pa_ice_os ) 
    52    SUBROUTINE albedo_ice( pt_ice, ph_ice, pa_ice, ph_snw, pa_pnd, pv_pnd, pa_ice_cs, pa_ice_os, ld_pnd ) 
     51   SUBROUTINE albedo_ice( pt_ice, ph_ice, ph_snw, pafrac_pnd, ph_pnd, ld_pnd, pa_ice_cs, pa_ice_os ) 
    5352      !!---------------------------------------------------------------------- 
    5453      !!               ***  ROUTINE albedo_ice  *** 
     
    6059      !!                  1: the scheme is "home made" (for cloudy skies) and based on Brandt et al. (J. Climate 2005) 
    6160      !!                                                                           and Grenfell & Perovich (JGR 2004) 
     61      !!                  2: fractional surface-based formulation of scheme 1 (NEW) 
    6262      !!                Description of scheme 1: 
    6363      !!                  1) Albedo dependency on ice thickness follows the findings from Brandt et al (2005) 
     
    8282      !!                Brandt et al. 2005, J. Climate, vol 18 
    8383      !!                Grenfell & Perovich 2004, JGR, vol 109  
    84       !!---------------------------------------------------------------------- 
    85       REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pt_ice      !  ice surface temperature (Kelvin) 
    86       REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_ice      !  sea-ice thickness 
    87       REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_snw      !  snow depth 
    88       ! MV MP 2016 
    89       REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pa_ice      !  ice fraction 
    90       REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pa_pnd      !  melt pond fraction 
    91       REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pv_pnd      !  melt pond volume 
    92       LOGICAL , INTENT(in   )                   ::   ld_pnd      !  melt ponds radiatively active  
    93       ! END MV MP 2016 
    94       REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   pa_ice_cs   !  albedo of ice under clear    sky 
    95       REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   pa_ice_os   !  albedo of ice under overcast sky 
    96       !! 
    97       INTEGER  ::   ji, jj, jl         ! dummy loop indices 
    98       INTEGER  ::   ijpl               ! number of ice categories (3rd dim of ice input arrays) 
    99       REAL(wp)                            ::   ralb_im, ralb_sf, ralb_sm, ralb_if, ralb_dp ! MV MP 2016 
     84      !! 
     85      !!---------------------------------------------------------------------- 
     86      !! 
     87      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pt_ice              !  ice surface temperature (Kelvin) 
     88      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_ice              !  sea-ice thickness 
     89      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_snw              !  snow depth 
     90      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pafrac_pnd          !  melt pond relative fraction (per unit ice area) 
     91      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_pnd              !  melt pond depth 
     92      LOGICAL , INTENT(in   )                   ::   ld_pnd              !  melt ponds radiatively active or not 
     93      REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   pa_ice_cs           !  albedo of ice under clear    sky 
     94      REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   pa_ice_os           !  albedo of ice under overcast sky 
     95      !! 
     96      INTEGER  ::   ji, jj, jl                                           ! dummy loop indices 
     97      INTEGER  ::   ijpl                                                 ! number of ice categories (3rd dim of ice input arrays) 
     98      REAL(wp)                            ::   ralb_im, ralb_sf, ralb_sm, ralb_if, ralb_dp 
    10099      REAL(wp)                            ::   zswitch, z1_c1, z1_c2 
    101       REAL(wp)                            ::   zhref_pnd                                   ! MV MP 2016 
     100      REAL(wp)                            ::   zhref_pnd                                  
    102101      REAL(wp)                            ::   zalb_sm, zalb_sf, zalb_st ! albedo of snow melting, freezing, total 
    103102      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zalb, zalb_it             ! intermediate variable & albedo of ice (snow free) 
    104       ! MV MP 2016 
    105       REAL(wp), POINTER, DIMENSION(:,:,:) ::   zafrac_pnd, zh_pnd        ! melt pond fraction and thickness 
    106103      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zalb_pnd                  ! ponded sea ice albedo 
    107104      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zalb_ice                  ! bare sea ice albedo 
    108105      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zalb_snw                  ! snow-covered sea ice albedo 
    109       ! END MV MP 2016 
     106      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zafrac_snw                ! relative snow fraction 
     107      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zafrac_ice                ! relative ice fraction 
     108      !! 
    110109      !!--------------------------------------------------------------------- 
    111       ! TO DO 
    112       ! Update namelist  
    113       ! V Change the reference for rn_albice - should be bare ice with no puddles!!! 
    114       ! ... add 3rd computation 
    115  
     110 
     111      WRITE(numout,*) ' albedo_ice ' 
     112      WRITE(numout,*) ' ld_pnd     : ', ld_pnd 
     113      WRITE(numout,*) ' nn_ice_alb : ', nn_ice_alb 
    116114 
    117115      ijpl = SIZE( pt_ice, 3 )                     ! number of ice categories 
    118116       
    119117      CALL wrk_alloc( jpi,jpj,ijpl, zalb, zalb_it ) 
    120       CALL wrk_alloc( jpi,jpj,ijpl, zafrac_pnd, zh_pnd, zalb_pnd ) 
     118      CALL wrk_alloc( jpi,jpj,ijpl, zalb_pnd, zalb_ice, zalb_snw ) 
     119      CALL wrk_alloc( jpi,jpj,ijpl, zalb_pnd, zafrac_snw, zafrac_ice ) 
    121120 
    122121      IF( albd_init == 0 )   CALL albedo_init      ! initialization  
    123122 
    124       ralb_sf = rn_alb_sdry ! dry snow 
    125       ralb_sm = rn_alb_smlt ! melting snow 
    126       ralb_if = rn_alb_idry ! bare frozen ice 
    127       ralb_im = rn_alb_imlt ! bare puddled ice  
    128       ralb_dp = rn_alb_dpnd ! deep pond albedo   ! MV MP 2016 
    129        
    130       ! MV MP 2016 
    131       !------------------------------------------------ 
    132       !  Pond fraction and thickness, snow-free albedo 
    133       !------------------------------------------------ 
    134       ! If melt ponds are radiatively active ( ld_pnd = .TRUE. ) 
    135       ! Then - melt pond fraction and thickness are assumed non-zero in the albedo computation  
    136       !      - the snow-free albedo is the weighted mean of bare ice (ralb_if) and ponded-ice albedos (zalb_pnd) 
    137  
    138       ! Otherwise, we just specify the bare ice albedo 
    139       ! for cold ice and melting ice, the latter implicitly assuming a specified fraction of melt ponds 
    140  
    141       IF ( ld_pnd ) THEN 
    142  
    143          ! ponded ice fraction and thickness 
    144          WHERE ( pa_ice > 1.e-10_wp ) ;   zafrac_pnd = pa_pnd / pa_ice ;   zh_pnd = pv_pnd / pa_ice 
    145          ELSE WHERE                   ;   zafrac_pnd = 0._wp           ;   zh_pnd = 0._wp  
    146          END WHERE 
    147            
    148          ! ponded ice albedo, including thickness dependence: 
    149          zhref_pnd = 0.05         ! characteristic length scale for albedo dependence of ponded ice, Lecomte et al (2015) 
    150          zalb_pnd  = ralb_dp - ( ralb_dp - ralb_if ) * EXP( - zh_pnd / zhref_pnd ) 
    151  
    152          ! weighted bare / ponded ice albedo (no ice thickness correction) 
    153          WHERE     ( ph_snw == 0._wp )  ;   zalb = ralb_if * ( 1. - zafrac_pnd ) + zalb_pnd * zafrac_pnd 
    154          END  WHERE 
    155  
    156       ELSE ! No melt ponds or radiatively inactive 
    157        
    158          ! ponded ice fraction and thickness 
    159          zafrac_pnd = 0._wp 
    160          zh_pnd     = 0._wp 
    161  
    162          ! snow-free ice albedo 
    163          WHERE     ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice )   ;   zalb = ralb_im    ! prescribed bare ice albedo with assumed contribution of melt ponds 
    164          ELSE WHERE                                              ;   zalb = ralb_if 
    165          END  WHERE 
     123      ralb_sf = rn_alb_sdry    ! dry snow 
     124      ralb_sm = rn_alb_smlt    ! melting snow 
     125      ralb_if = rn_alb_idry    ! bare frozen ice 
     126      ralb_im = rn_alb_imlt    ! bare puddled ice (assumes implicit contribution of melt ponds) 
     127      ralb_dp = rn_alb_dpnd    ! deep pond albedo 
     128 
     129      !----------------------------------------------------- 
     130      !  Snow-free albedo (no ice thickness dependence yet) 
     131      !----------------------------------------------------- 
     132      ! 
     133      ! Part common to nn_ice_alb = 0, 1, 2 
     134      ! 
     135 
     136      zalb = ralb_if          
     137      IF ( .NOT. ld_pnd ) THEN   !--- No melt ponds OR radiatively inactive melt ponds 
     138 
     139         ! Bare ice albedo is prescribed, with implicit assumption on pond fraction and depth 
     140         WHERE     ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ;  zalb = ralb_im  ;  END WHERE   
     141                                                       ! !!! MV I think we could replace rt0_ice by rt0 and get rid of rt0 
    166142 
    167143      ENDIF 
    168  
    169       ! END MV MP 2016 
    170144 
    171145      SELECT CASE ( nn_ice_alb ) 
     
    174148      !  Shine and Henderson-Sellers (1985) 
    175149      !------------------------------------------ 
     150      ! NB: This parameterization is based on clear sky values 
     151 
    176152      CASE( 0 ) 
    177153        
    178          ! Reference (clear sky) values 
    179          !ralb_sf = 0.80       ! dry snow 
    180          !ralb_sm = 0.65       ! melting snow 
    181          !ralb_if = 0.72       ! bare frozen ice 
    182          !ralb_im = rn_albice  ! bare ice  
    183          !ralb_dp = 0.30       ! deep ponded ice albedo, clear sky value, Lecomte et al (2015) MV MP 2016 
    184          !                     ! early melt ponds 0.24, late melt ponds 0.13 Grenfell & Perovich (2004) 
    185           
     154         ! Thickness-dependent bare ice albedo 
    186155         WHERE     ( 1.5  < ph_ice                     )  ;  zalb_it = zalb 
    187156         ELSE WHERE( 1.0  < ph_ice .AND. ph_ice <= 1.5 )  ;  zalb_it = 0.472  + 2.0 * ( zalb - 0.472 ) * ( ph_ice - 1.0 ) 
     
    191160         ELSE WHERE                                       ;  zalb_it = 0.1    + 3.6    * ph_ice 
    192161         END WHERE 
     162 
     163         IF ( ld_pnd ) THEN 
     164            ! Depth-dependent ponded ice albedo 
     165            zhref_pnd = 0.05        ! Characteristic length scale for thickness dependence of ponded ice albedo, Lecomte et al (2015) 
     166            zalb_pnd  = ralb_dp - ( ralb_dp - zalb_it ) * EXP( - ph_pnd / zhref_pnd )  
     167 
     168            ! Snow-free ice albedo is a function of pond fraction 
     169            WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice )   ; zalb_it = zalb_it * ( 1. - pafrac_pnd  ) + zalb_pnd * pafrac_pnd ;   END WHERE 
     170         ENDIF  
     171 
     172         ! Note that this way of coding things means that the thickness 
     173         ! dependence of bare ice albedo is also altering the ponded ice albedo 
     174         ! I'm not sure that this is valid, but at least, this maintains 
     175         ! consistency with previous formulation (see below) 
    193176      
    194177         DO jl = 1, ijpl 
    195178            DO jj = 1, jpj 
    196179               DO ji = 1, jpi 
    197                   ! freezing snow 
     180                  ! Freezing snow 
    198181                  ! no effect of underlying ice layer IF snow thickness > c1. Albedo does not depend on snow thick if > c2 
    199182                  !                                        !  freezing snow         
     
    203186                     &        +         zswitch   * ralb_sf   
    204187 
    205                   ! melting snow 
     188                  ! Melting snow 
    206189                  ! no effect of underlying ice layer. Albedo does not depend on snow thick IF > c2 
    207190                  zswitch   = MAX( 0._wp , SIGN( 1._wp , ph_snw(ji,jj,jl) - c2 ) ) 
    208191                  zalb_sm = ( 1._wp - zswitch ) * ( ralb_im + ph_snw(ji,jj,jl) * ( ralb_sm - ralb_im ) / c2 )   & 
    209192                      &     +         zswitch   *   ralb_sm  
    210                   ! 
    211                   ! snow albedo 
     193                    
     194                  ! Snow albedo 
    212195                  zswitch  =  MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) )    
    213196                  zalb_st  =  zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 
    214197                
    215                   ! surface albedo 
     198                  ! Surface albedo 
    216199                  zswitch             = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 
    217200                  pa_ice_cs(ji,jj,jl) = zswitch * zalb_st + ( 1._wp - zswitch ) * zalb_it(ji,jj,jl) 
     
    226209      !  New parameterization (2016) 
    227210      !------------------------------------------ 
     211      ! NB: This parameterization is based on overcast skies values 
     212       
    228213      CASE( 1 )  
    229214 
    230215!         ! Reference (overcast sky) values 
    231 !       ralb_im = rn_albice  ! bare ice 
    232 ! compilation of values from literature 
    233216!        ralb_sf = 0.85      ! dry snow 
    234217!        ralb_sm = 0.75      ! melting snow 
     
    245228!         ralb_if = 0.54      ! bare frozen ice 
    246229!  
    247          ! Computation of ice albedo (free of snow) 
     230         ! Computation of snow-free ice albedo  
    248231         z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) )  
    249232         z1_c2 = 1. / 0.05 
    250233 
    251          ! Accounting for the ice-thickness dependency (this has not been carefully checked with melt ponds) 
    252          WHERE     ( 1.5  < ph_ice                     )  ;  zalb_it = zalb 
    253          ELSE WHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 )  ;  zalb_it = zalb     + ( 0.18 - zalb     ) * z1_c1 *  & 
     234         ! Accounting for the ice-thickness dependency 
     235         WHERE     ( 1.5  < ph_ice                     )        ;  zalb_it = zalb 
     236         ELSE WHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 )        ;  zalb_it = zalb     + ( 0.18 - zalb     ) * z1_c1 *  & 
    254237            &                                                                     ( LOG(1.5) - LOG(ph_ice) ) 
    255          ELSE WHERE                                       ;  zalb_it = ralb_oce + ( 0.18 - ralb_oce ) * z1_c2 * ph_ice 
     238         ELSE WHERE                                             ;  zalb_it = ralb_oce + ( 0.18 - ralb_oce ) * z1_c2 * ph_ice 
    256239         END WHERE 
     240 
     241         IF ( ld_pnd ) THEN 
     242            ! Depth-dependent ponded ice albedo 
     243            zhref_pnd = 0.05        ! Characteristic length scale for thickness dependence of ponded ice albedo, Lecomte et al (2015) 
     244            zalb_pnd  = ralb_dp - ( ralb_dp - zalb_it ) * EXP( - ph_pnd / zhref_pnd )  
     245 
     246            ! Snow-free ice albedo is weighted mean of ponded ice and bare ice contributions 
     247            WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice )   ;  zalb_it = zalb_it * ( 1. - pafrac_pnd  ) + zalb_pnd * pafrac_pnd ;  END WHERE 
     248         ENDIF  
    257249 
    258250         z1_c1 = 1. / 0.02 
    259251         z1_c2 = 1. / 0.03 
    260252          
    261          ! Surface albedo (accounting for snow, ice melt ponds), overcast skies 
     253         ! Overcast sky surface albedo (accounting for snow, ice melt ponds) 
    262254         DO jl = 1, ijpl 
    263255            DO jj = 1, jpj 
    264256               DO ji = 1, jpi 
    265257 
     258                  ! Snow depth dependence of snow albedo 
    266259                  zalb_sf = ralb_sf - ( ralb_sf - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c1 ); 
    267260                  zalb_sm = ralb_sm - ( ralb_sm - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c2 ); 
    268261 
    269                    ! snow albedo 
     262                  ! Snow albedo (MV I guess we could use rt0 instead of rt0_snow) 
    270263                  zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) )    
    271264                  zalb_st = zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 
    272265 
    273                   ! Ice/snow albedo    
     266                  ! Surface albedo    
    274267                  zswitch             = MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 
    275268                  pa_ice_os(ji,jj,jl) = ( 1._wp - zswitch ) * zalb_st + zswitch *  zalb_it(ji,jj,jl)  
     
    279272         END DO 
    280273 
    281          ! Clear sky albedo 
     274         ! Clear sky surface albedo 
    282275         pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 );  
    283276 
    284 !     !------------------------------------------ 
    285 !     !  Surface-based parameterization (2017) 
    286 !     !------------------------------------------ 
    287 !      CASE( 2 )  
    288 ! 
    289 !         !----------------------------------------- 
    290 !         ! Snow, bare ice and ponded ice fractions  
    291 !         !----------------------------------------- 
    292 !         ! Specific fractions (zafrac) refer to relative area covered by snow within each ice category 
    293 ! 
    294 !         !--- Snow (for now, prescribed) 
    295 !         WHERE     ( pa_ice > epsi10 .OR. ph_snw <= epsi06 )  ;  zafrac_snw = 0. 
    296 !         ELSE WHERE                                           ;  zafrac_snw = 1. 
    297 !         END WHERE 
    298 ! 
    299 !         !--- Melt ponds  
    300 !         ! for now, done at the beginning 
    301 ! 
    302 !         !--- Ice 
    303 !         WHERE     ( pa_ice > epsi10 )   ;  zafrac_ice = 1. - zafrac_snw - zafrac_pnd 
    304 !         ELSE WHERE                      ;  zafrac_ice = 0. 
     277      !--------------------------------------------------- 
     278      !  Fractional surface-based parameterization (2017) 
     279      !--------------------------------------------------- 
     280      CASE( 2 )  
     281  
     282      ! MV: I propose this formulation that is more elegant, and more easy to expand towards 
     283      !     varying pond and snow fraction 
     284  
     285          !----------------------------------------- 
     286          ! Snow, bare ice and ponded ice fractions  
     287          !----------------------------------------- 
     288          ! Specific fractions (zafrac) refer to relative area covered by snow within each ice category 
     289  
     290          !--- Specific snow fraction (for now, prescribed) 
     291          WHERE     ( ph_snw > 0._wp     ) ;  zafrac_snw = 1. 
     292          ELSE WHERE                       ;  zafrac_snw = 0. 
     293          END WHERE 
     294  
     295          !--- Specific ice fraction  
     296          zafrac_ice = 1. - zafrac_snw - pafrac_pnd 
     297!          WHERE     ( ph_ice > 1.0e-6_wp ) ;  zafrac_ice = 1. - zafrac_snw - pafrac_pnd 
     298!         ELSE WHERE                       ;  zafrac_ice = 0. 
    305299!         ENDWHERE 
    306 ! 
    307 !         !-------------------------------------------------- 
    308 !         ! Snow-covered, pond-covered, and bare ice albedos 
    309 !         !-------------------------------------------------- 
    310 !         ! zalb_snw, zalb_pnd, zalb_ice 
    311 !         k 
    312 ! 
    313 ! 
    314 !          
    315 ! 
    316 !           
    317 ! 
    318 ! 
    319 ! 
    320 !      ENDch grid cell has specific fractions of snow, ponds and ice 
    321 !      ãs = 1 if hs > 0; 0 otherwise 
    322 !      ãp = a_pnd / a_i 
    323 !      ãi = ( 1 - ãs - ãp )  
    324 !       
    325 !      2) Compute albedo for each of the three surface types 
    326 !      αi = f(hi,Tsu) 
    327 !      αs = f(hi, hs, Tsu) 
    328 !      αp = f(hp, hi?, Tsu?) 
    329 !       
    330 !      3) Surface albedo = weighted mean 
    331 !       
    332 !      α = αs * ãs + αp * ãp + αi * ( 1 - ãs - ãp)  
     300  
     301          !-------------------------------------------------- 
     302          ! Snow-covered, pond-covered, and bare ice albedos 
     303          !-------------------------------------------------- 
     304          ! Bare ice albedo 
     305          z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) )  
     306          z1_c2 = 1. / 0.05 
     307          WHERE     ( 1.5  < ph_ice                     )  ;  zalb_ice = zalb 
     308          ELSE WHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 )  ;  zalb_ice = zalb     + ( 0.18 - zalb     ) * z1_c1 *  & 
     309            &                                                                       ( LOG(1.5) - LOG(ph_ice) ) 
     310          ELSE WHERE                                       ;  zalb_ice = ralb_oce + ( 0.18 - ralb_oce ) * z1_c2 * ph_ice 
     311          END WHERE 
     312 
     313          ! Snow-covered ice albedo (freezing, melting cases) 
     314          z1_c1 = 1. / 0.02 
     315          z1_c2 = 1. / 0.03 
     316          
     317          WHERE( pt_ice < rt0_snow ) ; zalb_snw = ralb_sf - ( ralb_sf - zalb_ice ) * EXP( - ph_snw * z1_c1 ); 
     318          ELSE WHERE                 ; zalb_snw = ralb_sm - ( ralb_sm - zalb_ice ) * EXP( - ph_snw * z1_c2 ); 
     319          END WHERE 
     320 
     321          ! Depth-dependent ponded ice albedo 
     322          zhref_pnd = 0.05        ! Characteristic length scale for thickness dependence of ponded ice albedo, Lecomte et al (2015) 
     323          zalb_pnd  = ralb_dp - ( ralb_dp - zalb_ice ) * EXP( - ph_pnd / zhref_pnd )  
     324 
     325          ! Surface albedo is weighted mean of snow, ponds and bare ice contributions 
     326          pa_ice_os = zafrac_snw * zalb_snw  +  pafrac_pnd * zalb_pnd  +  zafrac_ice * zalb_ice 
     327           
     328          pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 ) 
    333329 
    334330      END SELECT 
    335331       
    336332      CALL wrk_dealloc( jpi,jpj,ijpl, zalb, zalb_it ) 
    337       CALL wrk_dealloc( jpi,jpj,ijpl, zafrac_pnd, zh_pnd ) ! MV MP 2016 
     333      CALL wrk_dealloc( jpi,jpj,ijpl, zalb_pnd, zalb_ice, zalb_snw ) 
     334      CALL wrk_dealloc( jpi,jpj,ijpl, zalb_pnd, zafrac_snw, zafrac_ice ) 
    338335      ! 
    339336   END SUBROUTINE albedo_ice 
  • branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90

    r8099 r8106  
    226226         CALL wrk_alloc( jpi,jpj,jpl, zalb_os, zalb_cs ) 
    227227          
    228                                       !CALL albedo_ice( t_su, ht_i, ht_s, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos 
    229                                       CALL albedo_ice( t_su, ht_i, a_i, ht_s, a_ip, v_ip, zalb_cs, zalb_os, ln_pnd_rad ) ! cloud-sky and overcast-sky ice albedos 
     228                                      CALL albedo_ice( t_su, ht_i, ht_s, a_ip_frac, h_ip, ln_pnd_rad, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos MV MP 2016 
    230229 
    231230         SELECT CASE( kblk ) 
Note: See TracChangeset for help on using the changeset viewer.