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 8486 for branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icealb.F90 – NEMO

Ignore:
Timestamp:
2017-09-01T15:49:35+02:00 (7 years ago)
Author:
clem
Message:

changes in style - part1 - (now the code looks better txs to Gurvan's comments)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icealb.F90

    r8426 r8486  
    44   !! Ocean forcing:  bulk thermohaline forcing of the ice 
    55   !!===================================================================== 
    6    !! History : 
    7    !!   NEMO     4.0  ! 2017-07  (C. Rousset) Split ice and ocean albedos 
    8    !!---------------------------------------------------------------------- 
    9    !!   ice_alb    : albedo for ice (clear and overcast skies) 
    10    !!   alb_init   : initialisation of albedo computation 
     6   !! History :  4.0  ! 2017-07  (C. Rousset) Split ice and ocean albedos 
    117   !!---------------------------------------------------------------------- 
    128#if defined key_lim3 
    139   !!---------------------------------------------------------------------- 
    14    !!   'key_lim3' :                                  LIM 3.0 sea-ice model 
    15    !!---------------------------------------------------------------------- 
    16    USE ice, ONLY : jpl 
     10   !!   'key_lim3'                                    LIM 3.0 sea-ice model 
     11   !!---------------------------------------------------------------------- 
     12   !!   ice_alb       : albedo for ice (clear and overcast skies) 
     13   !!   alb_init      : initialisation of albedo computation 
     14   !!---------------------------------------------------------------------- 
     15   USE ice     , ONLY : jpl   ! number of ice category 
    1716   USE phycst         ! physical constants 
    1817   ! 
     
    2423   PRIVATE 
    2524 
    26    PUBLIC   ice_alb   ! routine called icestp.F90 
    27  
    28    REAL(wp), PUBLIC, PARAMETER ::   rn_alb_oce = 0.066   ! ocean or lead albedo (Pegau and Paulson, Ann. Glac. 2001) 
     25   PUBLIC   ice_alb   ! routine called in iceforcing.F90 and iceupdate.F90 
     26 
     27   REAL(wp), PUBLIC, PARAMETER ::   rn_alb_oce = 0.066   !: ocean or lead albedo (Pegau and Paulson, Ann. Glac. 2001) 
     28 
     29!!gm real variable name starting with a "c" NOT DOCTOR !!!! 
    2930   INTEGER  ::   albd_init = 0       ! control flag for initialization   
    30    REAL(wp) ::   c1        = 0.05    ! snow thickness (only for nn_ice_alb=0) 
    31    REAL(wp) ::   c2        = 0.10    !  "        " 
    32    REAL(wp) ::   rcloud    = 0.06    ! cloud effect on albedo (only-for nn_ice_alb=0) 
     31   REAL(wp) , PARAMETER ::   c1        = 0.05    ! snow thickness (only for nn_ice_alb=0) 
     32   REAL(wp) , PARAMETER ::   c2        = 0.10    !  "        " 
     33   REAL(wp) , PARAMETER ::   rcloud    = 0.06    ! cloud effect on albedo (only-for nn_ice_alb=0) 
     34   REAL(wp) , PARAMETER ::   r1_c1 = 1. / c1 
     35   REAL(wp) , PARAMETER ::   r1_c2 = 1. / c2 
    3336  
    34    !                             !!* namelist namsbc_alb 
     37   !                             !!* namelist namsbc_alb * 
    3538   INTEGER  ::   nn_ice_alb 
    3639   REAL(wp) ::   rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd 
    3740 
    3841   !!---------------------------------------------------------------------- 
    39    !! NEMO/OPA 4.0 , NEMO Consortium (2010) 
     42   !! NEMO/ICE 4.0 , NEMO Consortium (2017) 
    4043   !! $Id: icealb.F90 8268 2017-07-03 15:01:04Z clem $ 
    4144   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    7679      !!                Brandt et al. 2005, J. Climate, vol 18 
    7780      !!                Grenfell & Perovich 2004, JGR, vol 109  
    78       !! 
    79       !!---------------------------------------------------------------------- 
    80       !! 
    81       REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pt_ice              !  ice surface temperature (Kelvin) 
    82       REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_ice              !  sea-ice thickness 
    83       REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_snw              !  snow depth 
    84       REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pafrac_pnd          !  melt pond relative fraction (per unit ice area) 
    85       REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_pnd              !  melt pond depth 
    86       LOGICAL , INTENT(in   )                   ::   ld_pnd              !  melt ponds radiatively active or not 
    87       REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   pa_ice_cs           !  albedo of ice under clear    sky 
    88       REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   pa_ice_os           !  albedo of ice under overcast sky 
    89       ! 
    90       INTEGER  ::   ji, jj, jl                                           ! dummy loop indices 
    91       REAL(wp) ::   zswitch, z1_c1, z1_c2 
    92       REAL(wp) ::   zhref_pnd                                  
     81      !!---------------------------------------------------------------------- 
     82      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pt_ice       !  ice surface temperature (Kelvin) 
     83      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_ice       !  sea-ice thickness 
     84      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_snw       !  snow depth 
     85      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pafrac_pnd   !  melt pond relative fraction (per unit ice area) 
     86      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_pnd       !  melt pond depth 
     87      LOGICAL , INTENT(in   )                   ::   ld_pnd       !  melt ponds radiatively active or not 
     88      REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   pa_ice_cs    !  albedo of ice under clear    sky 
     89      REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   pa_ice_os    !  albedo of ice under overcast sky 
     90      ! 
     91      INTEGER  ::   ji, jj, jl                ! dummy loop indices 
     92      REAL(wp) ::   zswitch, z1_c1, z1_c2     ! local scalar 
     93      REAL(wp) ::   z1_href_pnd               !   -      -                  
    9394      REAL(wp) ::   zalb_sm, zalb_sf, zalb_st ! albedo of snow melting, freezing, total 
    9495      ! 
    95       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zalb, zalb_it             ! intermediate variable & albedo of ice (snow free) 
     96      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zalb, zalb_it   ! intermediate variable & albedo of ice (snow free) 
    9697!! MV MP 
    97       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zalb_pnd                  ! ponded sea ice albedo 
    98       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zalb_ice                  ! bare sea ice albedo 
    99       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zalb_snw                  ! snow-covered sea ice albedo 
    100       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zafrac_snw                ! relative snow fraction 
    101       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zafrac_ice                ! relative ice fraction 
    102       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zafrac_pnd                ! relative ice fraction (effective) 
    103       !! 
     98      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zalb_pnd        ! ponded sea ice albedo 
     99      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zalb_ice        ! bare sea ice albedo 
     100      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zalb_snw        ! snow-covered sea ice albedo 
     101      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zafrac_snw      ! relative snow fraction 
     102      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zafrac_ice      ! relative ice fraction 
     103      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zafrac_pnd      ! relative ice fraction (effective) 
    104104      !!--------------------------------------------------------------------- 
    105105 
     
    120120      ENDIF 
    121121 
    122       SELECT CASE ( nn_ice_alb ) 
    123  
    124       !------------------------------------------ 
    125       !  Shine and Henderson-Sellers (1985) 
    126       !------------------------------------------ 
    127       ! NB: This parameterization is based on clear sky values 
    128  
    129       CASE( 0 ) 
    130         
    131          ! Thickness-dependent bare ice albedo 
     122      SELECT CASE ( nn_ice_alb )       ! select a parameterization 
     123      ! 
     124      !              !------------------------------------------ 
     125      CASE( 0 )      !  Shine and Henderson-Sellers (1985)     !   (based on clear sky values) 
     126         !           !------------------------------------------ 
     127         ! 
     128         !                       ! Thickness-dependent bare ice albedo 
    132129         WHERE     ( 1.5  < ph_ice                     )  ;  zalb_it = zalb 
    133130         ELSE WHERE( 1.0  < ph_ice .AND. ph_ice <= 1.5 )  ;  zalb_it = 0.472  + 2.0 * ( zalb - 0.472 ) * ( ph_ice - 1.0 ) 
     
    137134         ELSE WHERE                                       ;  zalb_it = 0.1    + 3.6    * ph_ice 
    138135         END WHERE 
    139  
    140          IF ( ld_pnd ) THEN 
    141             ! Depth-dependent ponded ice albedo 
    142             zhref_pnd = 0.05        ! Characteristic length scale for thickness dependence of ponded ice albedo, Lecomte et al (2015) 
    143             zalb_pnd  = rn_alb_dpnd - ( rn_alb_dpnd - zalb_it ) * EXP( - ph_pnd / zhref_pnd )  
    144  
    145             ! Snow-free ice albedo is a function of pond fraction 
    146             WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice )   ; zalb_it = zalb_it * ( 1. - pafrac_pnd  ) + zalb_pnd * pafrac_pnd ;   END WHERE 
     136         ! 
     137         IF ( ld_pnd ) THEN      ! Depth-dependent ponded ice albedo 
     138            z1_href_pnd = 1. / 0.05    ! inverse of the characteristic length scale (Lecomte et al. 2015) 
     139            zalb_pnd  = rn_alb_dpnd - ( rn_alb_dpnd - zalb_it ) * EXP( - ph_pnd * z1_href_pnd )  
     140            !                          ! Snow-free ice albedo is a function of pond fraction 
     141            WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice )    
     142               zalb_it = zalb_it * ( 1. - pafrac_pnd  ) + zalb_pnd * pafrac_pnd  
     143            END WHERE 
    147144         ENDIF  
    148  
     145         ! 
     146!!gm: optimization ( rn_alb_smlt - rn_alb_imlt ) * r1_c2 can be computed one for all  
     147!!gm  before the DO-loop below 
    149148         DO jl = 1, jpl 
    150149            DO jj = 1, jpj 
    151150               DO ji = 1, jpi 
    152                   ! Freezing snow 
     151                  !                    ! Freezing snow 
    153152                  ! no effect of underlying ice layer IF snow thickness > c1. Albedo does not depend on snow thick if > c2 
    154                   zswitch   = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ( ph_snw(ji,jj,jl) - c1 ) ) ) 
    155                   zalb_sf   = ( 1._wp - zswitch ) * (  zalb_it(ji,jj,jl)  & 
    156                      &                           + ph_snw(ji,jj,jl) * ( rn_alb_sdry - zalb_it(ji,jj,jl) ) / c1  )   & 
    157                      &        +         zswitch   * rn_alb_sdry   
    158  
    159                   ! Melting snow 
     153                  zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ( ph_snw(ji,jj,jl) - c1 ) ) ) 
     154                  zalb_sf = ( 1._wp - zswitch ) * (  zalb_it(ji,jj,jl)  & 
     155                     &                                   + ph_snw(ji,jj,jl) * ( rn_alb_sdry - zalb_it(ji,jj,jl) ) * r1_c1  )   & 
     156                     &             zswitch   * rn_alb_sdry   
     157                     ! 
     158                  !                    ! Melting snow 
    160159                  ! no effect of underlying ice layer. Albedo does not depend on snow thick IF > c2 
    161                   zswitch   = MAX( 0._wp , SIGN( 1._wp , ph_snw(ji,jj,jl) - c2 ) ) 
    162                   zalb_sm = ( 1._wp - zswitch ) * ( rn_alb_imlt + ph_snw(ji,jj,jl) * ( rn_alb_smlt - rn_alb_imlt ) / c2 )   & 
    163                       &     +         zswitch   *   rn_alb_smlt  
     160                  zswitch = MAX( 0._wp , SIGN( 1._wp , ph_snw(ji,jj,jl) - c2 ) ) 
     161                  zalb_sm = ( 1._wp - zswitch ) * ( rn_alb_imlt + ph_snw(ji,jj,jl) * ( rn_alb_smlt - rn_alb_imlt ) * r1_c2 )   & 
     162                     &      +         zswitch   *   rn_alb_smlt  
     163                     ! 
     164                  !                    ! Snow albedo 
     165                  zswitch =  MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) )    
     166                  zalb_st =  zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 
    164167                  ! 
    165                   ! Snow albedo 
    166                   zswitch  =  MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) )    
    167                   zalb_st  =  zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 
    168                 
    169                   ! Surface albedo 
     168                  !                    ! Surface albedo 
    170169                  zswitch             = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 
    171170                  pa_ice_cs(ji,jj,jl) = zswitch * zalb_st + ( 1._wp - zswitch ) * zalb_it(ji,jj,jl) 
     
    174173            END DO 
    175174         END DO 
    176  
     175         ! 
    177176         pa_ice_os(:,:,:) = pa_ice_cs(:,:,:) + rcloud       ! Oberhuber correction for overcast sky 
    178  
    179       !------------------------------------------ 
    180       !  New parameterization (2016) 
    181       !------------------------------------------ 
    182       ! NB: This parameterization is based on overcast skies values 
    183        
    184       CASE( 1 )  
    185  
    186 ! compilation of values from literature (reference overcast sky values) 
    187 !        rn_alb_sdry = 0.85      ! dry snow 
    188 !        rn_alb_smlt = 0.75      ! melting snow 
    189 !        rn_alb_idry = 0.60      ! bare frozen ice 
    190 !        rn_alb_dpnd = 0.36      ! ponded-ice overcast albedo (Lecomte et al, 2015) 
    191 !                                ! early melt pnds 0.27, late melt ponds 0.14 Grenfell & Perovich 
    192 ! Perovich et al 2002 (Sheba) => the only dataset for which all types of ice/snow were retrieved 
    193 !        rn_alb_sdry = 0.85      ! dry snow 
    194 !        rn_alb_smlt = 0.72      ! melting snow 
    195 !        rn_alb_idry = 0.65      ! bare frozen ice 
    196 ! Brandt et al 2005 (East Antarctica) 
    197 !        rn_alb_sdry = 0.87      ! dry snow 
    198 !        rn_alb_smlt = 0.82      ! melting snow 
    199 !        rn_alb_idry = 0.54      ! bare frozen ice 
    200 !  
    201          ! Computation of snow-free ice albedo  
     177         ! 
     178         ! 
     179         !           !------------------------------------------ 
     180      CASE( 1 )      !  New parameterization (2016)            !    (based on overcast sky values) 
     181         !           !------------------------------------------ 
     182         ! 
     183         !                    compilation of values from literature (reference overcast sky values) 
     184         !                          rn_alb_sdry = 0.85      ! dry snow 
     185         !                          rn_alb_smlt = 0.75      ! melting snow 
     186         !                          rn_alb_idry = 0.60      ! bare frozen ice 
     187         !                          rn_alb_dpnd = 0.36      ! ponded-ice overcast albedo (Lecomte et al, 2015) 
     188         !                                                  ! early melt pnds 0.27, late melt ponds 0.14 Grenfell & Perovich 
     189         !                    Perovich et al 2002 (Sheba) => the only dataset for which all types of ice/snow were retrieved 
     190         !                          rn_alb_sdry = 0.85      ! dry snow 
     191         !                          rn_alb_smlt = 0.72      ! melting snow 
     192         !                          rn_alb_idry = 0.65      ! bare frozen ice 
     193         !                    Brandt et al 2005 (East Antarctica) 
     194         !                          rn_alb_sdry = 0.87      ! dry snow 
     195         !                          rn_alb_smlt = 0.82      ! melting snow 
     196         !                          rn_alb_idry = 0.54      ! bare frozen ice 
     197         !  
     198         !              !--- Computation of snow-free ice albedo  
    202199         z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) )  
    203200         z1_c2 = 1. / 0.05 
    204201 
    205          ! Accounting for the ice-thickness dependency 
    206          WHERE     ( 1.5  < ph_ice                     )        ;  zalb_it = zalb 
    207          ELSE WHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 )        ;  zalb_it = zalb     + ( 0.18 - zalb     ) * z1_c1 *  & 
    208             &                                                                     ( LOG(1.5) - LOG(ph_ice) ) 
    209          ELSE WHERE                                             ;  zalb_it = rn_alb_oce + ( 0.18 - rn_alb_oce ) * z1_c2 * ph_ice 
    210          END WHERE 
    211  
    212          IF ( ld_pnd ) THEN 
    213             ! Depth-dependent ponded ice albedo 
    214             zhref_pnd = 0.05        ! Characteristic length scale for thickness dependence of ponded ice albedo, Lecomte et al (2015) 
    215             zalb_pnd  = rn_alb_dpnd - ( rn_alb_dpnd - zalb_it ) * EXP( - ph_pnd / zhref_pnd )  
    216  
    217             ! Snow-free ice albedo is weighted mean of ponded ice and bare ice contributions 
    218             WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice )   ;  zalb_it = zalb_it * ( 1. - pafrac_pnd  ) + zalb_pnd * pafrac_pnd ;  END WHERE 
     202         !              !--- Accounting for the ice-thickness dependency 
     203         WHERE     ( 1.5  < ph_ice                     )   ;   zalb_it = zalb 
     204         ELSE WHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 )   ;   zalb_it = zalb + ( 0.18 - zalb ) * z1_c1 * ( LOG(1.5) - LOG(ph_ice) ) 
     205         ELSE WHERE                                        ;   zalb_it = rn_alb_oce + ( 0.18 - rn_alb_oce ) * z1_c2 * ph_ice 
     206         END WHERE 
     207         ! 
     208         IF ( ld_pnd ) THEN      ! Depth-dependent ponded ice albedo 
     209            z1_href_pnd = 0.05        ! inverse of the characteristic length scale (Lecomte et al. 2015) 
     210            zalb_pnd  = rn_alb_dpnd - ( rn_alb_dpnd - zalb_it ) * EXP( - ph_pnd * z1_href_pnd )  
     211            ! 
     212            !                    ! Snow-free ice albedo is weighted mean of ponded ice and bare ice contributions 
     213            WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) 
     214               zalb_it = zalb_it * ( 1. - pafrac_pnd  ) + zalb_pnd * pafrac_pnd 
     215            END WHERE 
    219216         ENDIF  
    220  
     217         ! 
     218         !              !--- Overcast sky surface albedo (accounting for snow, ice melt ponds) 
    221219         z1_c1 = 1. / 0.02 
    222220         z1_c2 = 1. / 0.03 
    223           
    224          ! Overcast sky surface albedo (accounting for snow, ice melt ponds) 
    225221         DO jl = 1, jpl 
    226222            DO jj = 1, jpj 
     
    241237            END DO 
    242238         END DO 
    243  
    244          ! Clear sky surface albedo 
     239         ! 
     240         !              !--- Clear sky surface albedo 
    245241         pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 );  
    246  
    247       !--------------------------------------------------- 
    248       !  Fractional surface-based parameterization (2017) 
    249       !--------------------------------------------------- 
    250       CASE( 2 )  
    251   
    252       ! MV: I propose this formulation that is more elegant, and more easy to expand towards 
    253       !     varying pond and snow fraction. 
    254       !     Formulation 1 has issues to handle ponds and snow together that 
    255       !     can't easily be fixed. This one handles it better, I believe. 
    256  
    257           !----------------------------------------- 
    258           ! Snow, bare ice and ponded ice fractions  
    259           !----------------------------------------- 
    260           ! Specific fractions (zafrac) refer to relative area covered by snow within each ice category 
    261  
    262           !--- Effective pond fraction (for now, we prevent melt ponds and snow at the same time) 
    263           zafrac_pnd = 0._wp 
    264           IF ( ld_pnd ) THEN   
    265              WHERE( ph_snw == 0._wp ) ;  zafrac_pnd = pafrac_pnd ;  END WHERE  ! Snow fully "shades" melt ponds 
    266           ENDIF          
    267  
    268           !--- Specific snow fraction (for now, prescribed) 
    269           WHERE     ( ph_snw > 0._wp     ) ;  zafrac_snw = 1. 
    270           ELSE WHERE                       ;  zafrac_snw = 0. 
    271           END WHERE 
    272   
    273           !--- Specific ice fraction  
    274           zafrac_ice = 1. - zafrac_snw - zafrac_pnd 
    275   
    276           !-------------------------------------------------- 
    277           ! Snow-covered, pond-covered, and bare ice albedos 
    278           !-------------------------------------------------- 
    279           ! Bare ice albedo 
    280           z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) )  
    281           z1_c2 = 1. / 0.05 
    282           WHERE     ( 1.5  < ph_ice                     )  ;  zalb_ice = zalb 
    283           ELSE WHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 )  ;  zalb_ice = zalb     + ( 0.18 - zalb     ) * z1_c1 *  & 
     242         ! 
     243         ! 
     244         !           !------------------------------------------ 
     245      CASE( 2 )      !  Fractional surface-based parameterization (2017) 
     246         !           !------------------------------------------ 
     247         !              MV: I propose this formulation that is more elegant, and more easy to expand towards 
     248         !              varying pond and snow fraction. 
     249         !              Formulation 1 has issues to handle ponds and snow together that can't easily be fixed.  
     250         !              This one handles it better, I believe. 
     251         ! 
     252         !                 !==  Snow, bare ice and ponded ice fractions  ==! 
     253         ! 
     254         !                       ! Specific fractions (zafrac) refer to relative area covered by snow within each ice category 
     255         ! 
     256         !                       !--- Effective pond fraction (for now, we prevent melt ponds and snow at the same time) 
     257         zafrac_pnd = 0._wp 
     258         IF ( ld_pnd ) THEN   
     259            WHERE( ph_snw == 0._wp ) ;  zafrac_pnd = pafrac_pnd ;  END WHERE  ! Snow fully "shades" melt ponds 
     260         ENDIF          
     261         ! 
     262         !                       !--- Specific snow fraction (for now, prescribed) 
     263         WHERE     ( ph_snw > 0._wp     ) ;  zafrac_snw = 1. 
     264         ELSE WHERE                       ;  zafrac_snw = 0. 
     265         END WHERE 
     266         ! 
     267         !                       !--- Specific ice fraction  
     268         zafrac_ice = 1. - zafrac_snw - zafrac_pnd 
     269         ! 
     270         !                 !==  Snow-covered, pond-covered, and bare ice albedos  ==! 
     271         ! 
     272         !                       !--- Bare ice albedo 
     273         z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) )  
     274         z1_c2 = 1. / 0.05 
     275         WHERE     ( 1.5  < ph_ice                     )  ;  zalb_ice = zalb 
     276         ELSE WHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 )  ;  zalb_ice = zalb     + ( 0.18 - zalb     ) * z1_c1 *  & 
    284277            &                                                                       ( LOG(1.5) - LOG(ph_ice) ) 
    285           ELSE WHERE                                       ;  zalb_ice = rn_alb_oce + ( 0.18 - rn_alb_oce ) * z1_c2 * ph_ice 
    286           END WHERE 
    287  
    288           ! Snow-covered ice albedo (freezing, melting cases) 
    289           z1_c1 = 1. / 0.02 
    290           z1_c2 = 1. / 0.03 
    291           
    292           WHERE( pt_ice < rt0_snow ) ; zalb_snw = rn_alb_sdry - ( rn_alb_sdry - zalb_ice ) * EXP( - ph_snw * z1_c1 ); 
    293           ELSE WHERE                 ; zalb_snw = rn_alb_smlt - ( rn_alb_smlt - zalb_ice ) * EXP( - ph_snw * z1_c2 ); 
    294           END WHERE 
    295  
    296           ! Depth-dependent ponded ice albedo 
    297           IF ( ld_pnd ) THEN 
    298              zhref_pnd = 0.05        ! Characteristic length scale for thickness dependence of ponded ice albedo, Lecomte et al (2015) 
    299              zalb_pnd  = rn_alb_dpnd - ( rn_alb_dpnd - zalb_ice ) * EXP( - ph_pnd / zhref_pnd )  
    300           ELSE 
    301              zalb_pnd  = rn_alb_dpnd 
    302           ENDIF 
    303  
    304           ! Surface albedo is weighted mean of snow, ponds and bare ice contributions 
    305           pa_ice_os = zafrac_snw * zalb_snw  +  zafrac_pnd * zalb_pnd  +  zafrac_ice * zalb_ice 
    306            
    307           pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 ) 
     278         ELSE WHERE                                       ;  zalb_ice = rn_alb_oce + ( 0.18 - rn_alb_oce ) * z1_c2 * ph_ice 
     279         END WHERE 
     280         ! 
     281         z1_c1 = 1. / 0.02       !--- Snow-covered ice albedo (freezing, melting cases) 
     282         z1_c2 = 1. / 0.03 
     283         ! 
     284         WHERE( pt_ice < rt0_snow ) ; zalb_snw = rn_alb_sdry - ( rn_alb_sdry - zalb_ice ) * EXP( - ph_snw * z1_c1 ); 
     285         ELSE WHERE                 ; zalb_snw = rn_alb_smlt - ( rn_alb_smlt - zalb_ice ) * EXP( - ph_snw * z1_c2 ); 
     286         END WHERE 
     287         ! 
     288         IF ( ld_pnd ) THEN      !--- Depth-dependent ponded ice albedo 
     289            z1_href_pnd = 0.05        ! inverse of the characteristic length scale (Lecomte et al. 2015) 
     290            zalb_pnd  = rn_alb_dpnd - ( rn_alb_dpnd - zalb_ice ) * EXP( - ph_pnd * z1_href_pnd )  
     291         ELSE 
     292            zalb_pnd  = rn_alb_dpnd 
     293         ENDIF 
     294         !                       !--- Surface albedo is weighted mean of snow, ponds and bare ice contributions 
     295         pa_ice_os = zafrac_snw * zalb_snw  +  zafrac_pnd * zalb_pnd  +  zafrac_ice * zalb_ice 
     296         pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 ) 
    308297 
    309298      END SELECT 
     
    311300   END SUBROUTINE ice_alb 
    312301 
     302 
    313303   SUBROUTINE alb_init 
    314304      !!---------------------------------------------------------------------- 
     
    320310      !!---------------------------------------------------------------------- 
    321311      INTEGER  ::   ios                 ! Local integer output status for namelist read 
     312      !! 
    322313      NAMELIST/namicealb/ nn_ice_alb, rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd 
    323314      !!---------------------------------------------------------------------- 
     
    353344   !!   Default option           Dummy module      NO LIM 3.0 sea-ice model 
    354345   !!---------------------------------------------------------------------- 
    355 CONTAINS 
    356    ! 
    357    SUBROUTINE ice_alb     ! Dummy routine 
    358       WRITE(*,*) 'ice_alb: You should not have seen this print! error?' 
    359    END SUBROUTINE ice_alb 
    360346#endif 
    361347 
Note: See TracChangeset for help on using the changeset viewer.