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 8592 – NEMO

Changeset 8592


Ignore:
Timestamp:
2017-10-04T20:08:33+02:00 (7 years ago)
Author:
clem
Message:

rewrite ice albedo routine

Location:
branches/2017/dev_r8183_ICEMODEL/NEMOGCM
Files:
1 added
1 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/CONFIG/SHARED/namelist_ice_lim3_ref

    r8585 r8592  
    211211&namalb     !   albedo parameters 
    212212!------------------------------------------------------------------------------ 
    213    nn_ice_alb       =    1            !  parameterization of ice/snow albedo 
    214                                       !     0: Shine & Henderson-Sellers (JGR 1985), giving clear-sky albedo 
    215                                       !     1: "home made" based on Brandt et al. (JClim 2005) 
    216                                       !                         and Grenfell & Perovich (JGR 2004), giving cloud-sky albedo 
    217                                       !     2: as 1 with melt ponds 
    218    rn_alb_sdry      =   0.85          !  dry snow albedo         : 0.80 (nn_ice_alb = 0); 0.85 (nn_ice_alb = 1); obs 0.85-0.87 (cloud-sky) 
    219    rn_alb_smlt      =   0.75          !  melting snow albedo     : 0.65 ( '' )          ; 0.75 ( '' )          ; obs 0.72-0.82 ( '' ) 
    220    rn_alb_idry      =   0.60          !  dry ice albedo          : 0.72 ( '' )          ; 0.60 ( '' )          ; obs 0.54-0.65 ( '' ) 
    221    rn_alb_imlt      =   0.50          !  bare puddled ice albedo : 0.53 ( '' )          ; 0.50 ( '' )          ; obs 0.49-0.58 ( '' ) 
    222    rn_alb_dpnd      =   0.27          !  ponded ice albedo       : 0.25 ( '' )          ; 0.27 ( '' )          ; obs 0.10-0.30 ( '' ) 
     213   !                                  !                          !  obs range (cloud-sky) 
     214   rn_alb_sdry      =   0.85          !  dry snow albedo         :  0.85 -- 0.87 
     215   rn_alb_smlt      =   0.75          !  melting snow albedo     :  0.72 -- 0.82 
     216   rn_alb_idry      =   0.60          !  dry ice albedo          :  0.54 -- 0.65 
     217   rn_alb_imlt      =   0.50          !  bare puddled ice albedo :  0.49 -- 0.58 
     218   rn_alb_dpnd      =   0.27          !  ponded ice albedo       :  0.10 -- 0.30  
    223219/ 
    224220!------------------------------------------------------------------------------ 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icealb.F90

    r8567 r8592  
    3636   ! 
    3737   ! ** albedo namelist (namalb) 
    38    INTEGER  ::   nn_ice_alb       ! type of albedo scheme: 0: Shine & Henderson-Sellers (JGR 1985) 
    39    !                                      !                         1: "home made" based on Brandt et al. (JClim 2005) 
    40    !                                      !                                             and Grenfell & Perovich (JGR 2004) 
    41    !                                      !                         2: Same as 1 but with melt ponds 
    4238   REAL(wp) ::   rn_alb_sdry      ! dry snow albedo 
    4339   REAL(wp) ::   rn_alb_smlt      ! melting snow albedo 
     
    5349CONTAINS 
    5450 
    55    SUBROUTINE ice_alb( pt_ice, ph_ice, ph_snw, pafrac_pnd, ph_pnd, ld_pnd, pa_ice_cs, pa_ice_os ) 
     51   SUBROUTINE ice_alb( pt_su, ph_ice, ph_snw, pafrac_pnd, ph_pnd, palb_cs, palb_os ) 
    5652      !!---------------------------------------------------------------------- 
    5753      !!               ***  ROUTINE ice_alb  *** 
     
    5955      !! ** Purpose :   Computation of the albedo of the snow/ice system  
    6056      !!        
    61       !! ** Method  :   Two schemes are available (from namelist parameter nn_ice_alb) 
    62       !!                  0: the scheme is that of Shine & Henderson-Sellers (JGR 1985) for clear-skies 
    63       !!                  1: the scheme is "home made" (for cloudy skies) and based on Brandt et al. (J. Climate 2005) 
    64       !!                                                                           and Grenfell & Perovich (JGR 2004) 
    65       !!                  2: fractional surface-based formulation of scheme 1 (NEW) 
    66       !!                Description of scheme 1: 
     57      !! ** Method  :   The scheme is "home made" (for cloudy skies) and based on Brandt et al. (J. Climate 2005) 
     58      !!                                                                      and Grenfell & Perovich (JGR 2004) 
    6759      !!                  1) Albedo dependency on ice thickness follows the findings from Brandt et al (2005) 
    6860      !!                     which are an update of Allison et al. (JGR 1993) ; Brandt et al. 1999 
     
    7668      !!                  4) The needed 4 parameters are: dry and melting snow, freezing ice and bare puddled ice 
    7769      !! 
    78       !! ** Note    :   The parameterization from Shine & Henderson-Sellers presents several misconstructions: 
     70      !!                     compilation of values from literature (reference overcast sky values) 
     71      !!                        rn_alb_sdry = 0.85      ! dry snow 
     72      !!                        rn_alb_smlt = 0.75      ! melting snow 
     73      !!                        rn_alb_idry = 0.60      ! bare frozen ice 
     74      !!                        rn_alb_imlt = 0.50      ! bare puddled ice albedo 
     75      !!                        rn_alb_dpnd = 0.36      ! ponded-ice overcast albedo (Lecomte et al, 2015) 
     76      !!                                                ! early melt pnds 0.27, late melt ponds 0.14 Grenfell & Perovich 
     77      !!                     Perovich et al 2002 (Sheba) => the only dataset for which all types of ice/snow were retrieved 
     78      !!                        rn_alb_sdry = 0.85      ! dry snow 
     79      !!                        rn_alb_smlt = 0.72      ! melting snow 
     80      !!                        rn_alb_idry = 0.65      ! bare frozen ice 
     81      !!                     Brandt et al 2005 (East Antarctica) 
     82      !!                        rn_alb_sdry = 0.87      ! dry snow 
     83      !!                        rn_alb_smlt = 0.82      ! melting snow 
     84      !!                        rn_alb_idry = 0.54      ! bare frozen ice 
     85      !! 
     86      !! ** Note    :   The old parameterization from Shine & Henderson-Sellers (not here anymore) presented several misconstructions 
    7987      !!                  1) ice albedo when ice thick. tends to 0 is different than ocean albedo 
    8088      !!                  2) for small ice thick. covered with some snow (<3cm?), albedo is larger  
     
    8795      !!                Grenfell & Perovich 2004, JGR, vol 109  
    8896      !!---------------------------------------------------------------------- 
    89       REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pt_ice       !  ice surface temperature (Kelvin) 
     97      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pt_su        !  ice surface temperature (Kelvin) 
    9098      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_ice       !  sea-ice thickness 
    9199      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_snw       !  snow depth 
    92100      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pafrac_pnd   !  melt pond relative fraction (per unit ice area) 
    93101      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   ph_pnd       !  melt pond depth 
    94       LOGICAL , INTENT(in   )                   ::   ld_pnd       !  melt ponds radiatively active or not 
    95       REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   pa_ice_cs    !  albedo of ice under clear    sky 
    96       REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   pa_ice_os    !  albedo of ice under overcast sky 
     102      REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   palb_cs      !  albedo of ice under clear    sky 
     103      REAL(wp), INTENT(  out), DIMENSION(:,:,:) ::   palb_os      !  albedo of ice under overcast sky 
    97104      ! 
    98105      INTEGER  ::   ji, jj, jl                ! dummy loop indices 
    99       REAL(wp) ::   zswitch, z1_c1, z1_c2     ! local scalar 
    100       REAL(wp) ::   z1_href_pnd               !   -      -                  
    101       REAL(wp) ::   zalb_sm, zalb_sf, zalb_st ! albedo of snow melting, freezing, total 
    102       ! 
    103       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zalb, zalb_it   ! intermediate variable & albedo of ice (snow free) 
    104 !! MV MP 
    105       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zalb_pnd        ! ponded sea ice albedo 
    106       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zalb_ice        ! bare sea ice albedo 
    107       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zalb_snw        ! snow-covered sea ice albedo 
    108       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zafrac_snw      ! relative snow fraction 
    109       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zafrac_ice      ! relative ice fraction 
    110       REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zafrac_pnd      ! relative ice fraction (effective) 
     106      REAL(wp) ::   z1_c1, z1_c2,z1_c3, z1_c4 ! local scalar 
     107      REAL(wp) ::   z1_href_pnd               ! inverse of the characteristic length scale (Lecomte et al. 2015) 
     108      REAL(wp) ::   zalb_pnd, zafrac_pnd      ! ponded sea ice albedo & relative pound fraction 
     109      REAL(wp) ::   zalb_ice, zafrac_ice      ! bare sea ice albedo & relative ice fraction 
     110      REAL(wp) ::   zalb_snw, zafrac_snw      ! snow-covered sea ice albedo & relative snow fraction 
    111111      !!--------------------------------------------------------------------- 
    112112      ! 
    113113      IF( nn_timing == 1 )   CALL timing_start('icealb') 
    114114      ! 
    115       !----------------------------------------------------- 
    116       !  Snow-free albedo (no ice thickness dependence yet) 
    117       !----------------------------------------------------- 
    118       ! 
    119       ! Part common to nn_ice_alb = 0, 1, 2 
    120       ! 
    121       IF ( .NOT. ld_pnd ) THEN   !--- No melt ponds OR radiatively inactive melt ponds 
    122          ! Bare ice albedo is prescribed, with implicit assumption on pond fraction and depth 
    123          WHERE     ( ph_snw == 0._wp .AND. pt_ice >= rt0 )   ;   zalb(:,:,:) = rn_alb_imlt 
    124          ELSEWHERE                                           ;   zalb(:,:,:) = rn_alb_idry 
    125          END WHERE 
    126       ENDIF 
    127  
    128       SELECT CASE ( nn_ice_alb )       ! select a parameterization 
    129       ! 
    130       !              !------------------------------------------ 
    131       CASE( 0 )      !  Shine and Henderson-Sellers (1985)     !   (based on clear sky values) 
    132          !           !------------------------------------------ 
    133          ! 
    134          !                       ! Thickness-dependent bare ice albedo 
    135          WHERE    ( 1.5  < ph_ice                     )   ;   zalb_it = zalb 
    136          ELSEWHERE( 1.0  < ph_ice .AND. ph_ice <= 1.5 )   ;   zalb_it = 0.472  + 2.0 * ( zalb - 0.472 ) * ( ph_ice - 1.0 ) 
    137          ELSEWHERE( 0.05 < ph_ice .AND. ph_ice <= 1.0 )   ;   zalb_it = 0.2467 + 0.7049 * ph_ice              & 
    138             &                                                                  - 0.8608 * ph_ice * ph_ice     & 
    139             &                                                                  + 0.3812 * ph_ice * ph_ice * ph_ice 
    140          ELSEWHERE                                        ;   zalb_it = 0.1    + 3.6    * ph_ice 
    141          END WHERE 
    142          ! 
    143          IF ( ld_pnd ) THEN      ! Depth-dependent ponded ice albedo 
    144             z1_href_pnd = 1. / 0.05    ! inverse of the characteristic length scale (Lecomte et al. 2015) 
    145             zalb_pnd  = rn_alb_dpnd - ( rn_alb_dpnd - zalb_it ) * EXP( - ph_pnd * z1_href_pnd )  
    146             !                          ! Snow-free ice albedo is a function of pond fraction 
    147             WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0 )    
    148                zalb_it = zalb_it * ( 1. - pafrac_pnd  ) + zalb_pnd * pafrac_pnd  
    149             END WHERE 
    150          ENDIF  
    151          ! 
    152          DO jl = 1, jpl 
    153             DO jj = 1, jpj 
    154                DO ji = 1, jpi 
    155                   !                    ! Freezing snow 
    156                   ! no effect of underlying ice layer IF snow thickness > c1. Albedo does not depend on snow thick if > ppc2 
    157                   zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ( ph_snw(ji,jj,jl) - ppc1 ) ) ) 
    158                   zalb_sf = ( 1._wp - zswitch ) * (  zalb_it(ji,jj,jl)  & 
    159                      &                                   + ph_snw(ji,jj,jl) * ( rn_alb_sdry - zalb_it(ji,jj,jl) ) * pp1_c1  )   & 
    160                      &    +           zswitch   * rn_alb_sdry   
    161                      ! 
    162                   !                    ! Melting snow 
    163                   ! no effect of underlying ice layer. Albedo does not depend on snow thick IF > ppc2 
    164                   zswitch = MAX( 0._wp , SIGN( 1._wp , ph_snw(ji,jj,jl) - ppc2 ) ) 
    165                   zalb_sm = ( 1._wp - zswitch ) * ( rn_alb_imlt + ph_snw(ji,jj,jl) * ( rn_alb_smlt - rn_alb_imlt ) * pp1_c2 )   & 
    166                      &      +         zswitch   *   rn_alb_smlt  
    167                      ! 
    168                   !                    ! Snow albedo 
    169                   zswitch =  MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) )    
    170                   zalb_st =  zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 
    171                   ! 
    172                   !                    ! Surface albedo 
    173                   zswitch             = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 
    174                   pa_ice_cs(ji,jj,jl) = zswitch * zalb_st + ( 1._wp - zswitch ) * zalb_it(ji,jj,jl) 
    175                   ! 
    176                END DO 
     115      z1_href_pnd = 0.05 
     116      z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) )  
     117      z1_c2 = 1. / 0.05 
     118      z1_c3 = 1. / 0.02 
     119      z1_c4 = 1. / 0.03 
     120      ! 
     121      DO jl = 1, jpl 
     122         DO jj = 1, jpj 
     123            DO ji = 1, jpi 
     124               !                       !--- Specific snow, ice and pond fractions (for now, we prevent melt ponds and snow at the same time) 
     125               IF( ph_snw(ji,jj,jl) == 0._wp ) THEN 
     126                  zafrac_snw = 0._wp 
     127                  zafrac_pnd = pafrac_pnd(ji,jj,jl) 
     128                  zafrac_ice = 1._wp - zafrac_pnd 
     129               ELSE 
     130                  zafrac_snw = 1._wp      ! Snow fully "shades" melt ponds and ice 
     131                  zafrac_pnd = 0._wp 
     132                  zafrac_ice = 0._wp 
     133               ENDIF 
     134               ! 
     135               !                       !--- Bare ice albedo (for hi > 150cm) 
     136               IF( zafrac_pnd > 0._wp ) THEN 
     137                  zalb_ice = rn_alb_idry 
     138               ELSE 
     139                  IF( ph_snw(ji,jj,jl) == 0._wp .AND. pt_su(ji,jj,jl) >= rt0 ) THEN  ;   zalb_ice = rn_alb_imlt 
     140                  ELSE                                                               ;   zalb_ice = rn_alb_idry   ;   ENDIF 
     141               ENDIF 
     142               !                       !--- Bare ice albedo (for hi < 150cm) 
     143               IF( 0.05 < ph_ice(ji,jj,jl) .AND. ph_ice(ji,jj,jl) <= 1.5 ) THEN      ! 5cm < hi < 150cm 
     144                  zalb_ice = zalb_ice    + ( 0.18 - zalb_ice   ) * z1_c1 * ( LOG(1.5) - LOG(ph_ice(ji,jj,jl)) ) 
     145               ELSEIF( ph_ice(ji,jj,jl) <= 0.05 ) THEN                               ! 0cm < hi < 5cm 
     146                  zalb_ice = rn_alb_oce  + ( 0.18 - rn_alb_oce ) * z1_c2 * ph_ice(ji,jj,jl) 
     147               ENDIF 
     148               ! 
     149               !                       !--- Snow-covered ice albedo (freezing, melting cases) 
     150               IF( pt_su(ji,jj,jl) < rt0_snow ) THEN 
     151                  zalb_snw = rn_alb_sdry - ( rn_alb_sdry - zalb_ice ) * EXP( - ph_snw(ji,jj,jl) * z1_c3 ) 
     152               ELSE 
     153                  zalb_snw = rn_alb_smlt - ( rn_alb_smlt - zalb_ice ) * EXP( - ph_snw(ji,jj,jl) * z1_c4 ) 
     154               ENDIF 
     155               !                       !--- Ponded ice albedo 
     156               IF( zafrac_pnd > 0._wp ) THEN 
     157                  zalb_pnd = rn_alb_dpnd - ( rn_alb_dpnd - zalb_ice ) * EXP( - ph_pnd(ji,jj,jl) * z1_href_pnd )  
     158               ELSE 
     159                  zalb_pnd = rn_alb_dpnd 
     160               ENDIF 
     161               !                       !--- Surface albedo is weighted mean of snow, ponds and bare ice contributions 
     162               palb_os(ji,jj,jl) = zafrac_snw * zalb_snw + zafrac_pnd * zalb_pnd + zafrac_ice * zalb_ice 
     163               ! 
    177164            END DO 
    178165         END DO 
    179          ! 
    180          pa_ice_os(:,:,:) = pa_ice_cs(:,:,:) + ppcloud       ! Oberhuber correction for overcast sky 
    181          ! 
    182          ! 
    183          !           !------------------------------------------ 
    184       CASE( 1 )      !  New parameterization (2016)            !    (based on overcast sky values) 
    185          !           !------------------------------------------ 
    186          ! 
    187          !                    compilation of values from literature (reference overcast sky values) 
    188          !                          rn_alb_sdry = 0.85      ! dry snow 
    189          !                          rn_alb_smlt = 0.75      ! melting snow 
    190          !                          rn_alb_idry = 0.60      ! bare frozen ice 
    191          !                          rn_alb_dpnd = 0.36      ! ponded-ice overcast albedo (Lecomte et al, 2015) 
    192          !                                                  ! early melt pnds 0.27, late melt ponds 0.14 Grenfell & Perovich 
    193          !                    Perovich et al 2002 (Sheba) => the only dataset for which all types of ice/snow were retrieved 
    194          !                          rn_alb_sdry = 0.85      ! dry snow 
    195          !                          rn_alb_smlt = 0.72      ! melting snow 
    196          !                          rn_alb_idry = 0.65      ! bare frozen ice 
    197          !                    Brandt et al 2005 (East Antarctica) 
    198          !                          rn_alb_sdry = 0.87      ! dry snow 
    199          !                          rn_alb_smlt = 0.82      ! melting snow 
    200          !                          rn_alb_idry = 0.54      ! bare frozen ice 
    201          !  
    202          !              !--- Computation of snow-free ice albedo  
    203          z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) )  
    204          z1_c2 = 1. / 0.05 
    205  
    206          !              !--- Accounting for the ice-thickness dependency 
    207          WHERE     ( 1.5  < ph_ice                     )   ;   zalb_it = zalb 
    208          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) ) 
    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      ! Depth-dependent ponded ice albedo 
    213             z1_href_pnd = 0.05        ! inverse of the characteristic length scale (Lecomte et al. 2015) 
    214             zalb_pnd  = rn_alb_dpnd - ( rn_alb_dpnd - zalb_it ) * EXP( - ph_pnd * z1_href_pnd )  
    215             ! 
    216             !                    ! Snow-free ice albedo is weighted mean of ponded ice and bare ice contributions 
    217             WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0 ) 
    218                zalb_it = zalb_it * ( 1. - pafrac_pnd  ) + zalb_pnd * pafrac_pnd 
    219             END WHERE 
    220          ENDIF  
    221          ! 
    222          !              !--- Overcast sky surface albedo (accounting for snow, ice melt ponds) 
    223          z1_c1 = 1. / 0.02 
    224          z1_c2 = 1. / 0.03 
    225          DO jl = 1, jpl 
    226             DO jj = 1, jpj 
    227                DO ji = 1, jpi 
    228                   ! Snow depth dependence of snow albedo 
    229                   zalb_sf = rn_alb_sdry - ( rn_alb_sdry - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c1 ); 
    230                   zalb_sm = rn_alb_smlt - ( rn_alb_smlt - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c2 ); 
    231  
    232                   ! Snow albedo (MV I guess we could use rt0 instead of rt0_snow) 
    233                   zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) )    
    234                   zalb_st = zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 
    235  
    236                   ! Surface albedo    
    237                   zswitch             = MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 
    238                   pa_ice_os(ji,jj,jl) = ( 1._wp - zswitch ) * zalb_st + zswitch *  zalb_it(ji,jj,jl) 
    239  
    240               END DO 
    241             END DO 
    242          END DO 
    243          ! 
    244          !              !--- Clear sky surface albedo 
    245          pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 );  
    246          ! 
    247          ! 
    248          !           !------------------------------------------ 
    249       CASE( 2 )      !  Fractional surface-based parameterization (2017) 
    250          !           !------------------------------------------ 
    251          !              MV: I propose this formulation that is more elegant, and more easy to expand towards 
    252          !              varying pond and snow fraction. 
    253          !              Formulation 1 has issues to handle ponds and snow together that can't easily be fixed.  
    254          !              This one handles it better, I believe. 
    255          ! 
    256          !                 !==  Snow, bare ice and ponded ice fractions  ==! 
    257          ! 
    258          !                       ! Specific fractions (zafrac) refer to relative area covered by snow within each ice category 
    259          ! 
    260          !                       !--- Effective pond fraction (for now, we prevent melt ponds and snow at the same time) 
    261          zafrac_pnd = 0._wp 
    262          IF ( ld_pnd ) THEN 
    263             WHERE( ph_snw == 0._wp )   zafrac_pnd = pafrac_pnd   ! Snow fully "shades" melt ponds 
    264          ENDIF          
    265          ! 
    266          !                       !--- Specific snow fraction (for now, prescribed) 
    267          WHERE( ph_snw > 0._wp )   ;   zafrac_snw = 1. 
    268          ELSEWHERE                 ;   zafrac_snw = 0. 
    269          END WHERE 
    270          ! 
    271          !                       !--- Specific ice fraction  
    272          zafrac_ice = 1. - zafrac_snw - zafrac_pnd 
    273          ! 
    274          !                 !==  Snow-covered, pond-covered, and bare ice albedos  ==! 
    275          ! 
    276          !                       !--- Bare ice albedo 
    277          z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) )  
    278          z1_c2 = 1. / 0.05 
    279          WHERE    ( 1.5  < ph_ice                     )   ;   zalb_ice = zalb 
    280          ELSEWHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 )   ;   zalb_ice = zalb       + ( 0.18 - zalb       ) * z1_c1 *  & 
    281             &                                                                       ( LOG(1.5) - LOG(ph_ice) ) 
    282          ELSEWHERE                                        ;   zalb_ice = rn_alb_oce + ( 0.18 - rn_alb_oce ) * z1_c2 * ph_ice 
    283          END WHERE 
    284          ! 
    285          z1_c1 = 1. / 0.02       !--- Snow-covered ice albedo (freezing, melting cases) 
    286          z1_c2 = 1. / 0.03 
    287          ! 
    288          WHERE( pt_ice < rt0_snow )   ;   zalb_snw = rn_alb_sdry - ( rn_alb_sdry - zalb_ice ) * EXP( - ph_snw * z1_c1 ) 
    289          ELSEWHERE                    ;   zalb_snw = rn_alb_smlt - ( rn_alb_smlt - zalb_ice ) * EXP( - ph_snw * z1_c2 ) 
    290          END WHERE 
    291          ! 
    292          IF ( ld_pnd ) THEN      !--- Depth-dependent ponded ice albedo 
    293             z1_href_pnd = 0.05        ! inverse of the characteristic length scale (Lecomte et al. 2015) 
    294             zalb_pnd  = rn_alb_dpnd - ( rn_alb_dpnd - zalb_ice ) * EXP( - ph_pnd * z1_href_pnd )  
    295          ELSE 
    296             zalb_pnd  = rn_alb_dpnd 
    297          ENDIF 
    298          !                       !--- Surface albedo is weighted mean of snow, ponds and bare ice contributions 
    299          pa_ice_os = zafrac_snw * zalb_snw  +  zafrac_pnd * zalb_pnd  +  zafrac_ice * zalb_ice 
    300          pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 ) 
    301  
    302       END SELECT 
     166      END DO 
     167      ! 
     168      palb_cs(:,:,:) = palb_os(:,:,:) - ( - 0.1010 * palb_os(:,:,:) * palb_os(:,:,:) + 0.1933 * palb_os(:,:,:) - 0.0148 ) 
    303169      ! 
    304170      IF( nn_timing == 1 )   CALL timing_stop('icealb') 
     
    317183      INTEGER  ::   ios                 ! Local integer output status for namelist read 
    318184      !! 
    319       NAMELIST/namalb/ nn_ice_alb, rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd 
     185      NAMELIST/namalb/ rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd 
    320186      !!---------------------------------------------------------------------- 
    321187      ! 
     
    334200         WRITE(numout,*) '~~~~~~~~~~~~' 
    335201         WRITE(numout,*) '   Namelist namalb:' 
    336          WRITE(numout,*) '      choose the albedo parameterization   nn_ice_alb  = ', nn_ice_alb 
    337202         WRITE(numout,*) '      albedo of dry snow                   rn_alb_sdry = ', rn_alb_sdry 
    338203         WRITE(numout,*) '      albedo of melting snow               rn_alb_smlt = ', rn_alb_smlt 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/iceforcing.F90

    r8563 r8592  
    130130 
    131131      ! --- cloud-sky and overcast-sky ice albedos --- ! 
    132       CALL ice_alb( t_su, h_i, h_s, a_ip_frac, h_ip, ln_pnd_rad, zalb_cs, zalb_os ) 
     132      CALL ice_alb( t_su, h_i, h_s, a_ip_frac, h_ip, zalb_cs, zalb_os ) 
    133133 
    134134      ! albedo depends on cloud fraction because of non-linear spectral effects 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icerst.F90

    r8564 r8592  
    147147      END DO 
    148148 
    149       ! MV MP 2016 
    150       IF ( nn_pnd_scheme > 0 ) THEN 
    151          DO jl = 1, jpl  
    152             WRITE(zchar,'(I2.2)') jl 
    153             znam = 'a_ip'//'_htc'//zchar 
    154             z2d(:,:) = a_ip(:,:,jl) 
    155             CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) ! a_ip 
    156             znam = 'v_ip'//'_htc'//zchar 
    157             z2d(:,:) = v_ip(:,:,jl) 
    158             CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) ! v_ip 
    159          END DO 
    160       ENDIF 
    161       ! END MV MP 2016 
     149      DO jl = 1, jpl  
     150         WRITE(zchar,'(I2.2)') jl 
     151         znam = 'a_ip'//'_htc'//zchar 
     152         z2d(:,:) = a_ip(:,:,jl) 
     153         CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) ! a_ip 
     154         znam = 'v_ip'//'_htc'//zchar 
     155         z2d(:,:) = v_ip(:,:,jl) 
     156         CALL iom_rstput( iter, nitrst, numriw, znam , z2d ) ! v_ip 
     157      END DO 
    162158 
    163159      DO jl = 1, jpl  
     
    248244      END DO 
    249245 
    250       ! MV MP 2016 
    251       IF ( nn_pnd_scheme > 0 ) THEN 
    252          DO jl = 1, jpl  
    253             WRITE(zchar,'(I2.2)') jl 
    254             znam = 'a_ip'//'_htc'//zchar 
    255             CALL iom_get( numrir, jpdom_autoglo, znam , z2d ) 
    256             a_ip(:,:,jl) = z2d(:,:) 
    257             znam = 'v_ip'//'_htc'//zchar 
    258             CALL iom_get( numrir, jpdom_autoglo, znam , z2d ) 
    259             v_ip(:,:,jl) = z2d(:,:) 
    260          END DO 
    261       ENDIF 
    262       ! END MV MP 2016 
     246      DO jl = 1, jpl  
     247         WRITE(zchar,'(I2.2)') jl 
     248         znam = 'a_ip'//'_htc'//zchar 
     249         CALL iom_get( numrir, jpdom_autoglo, znam , z2d ) 
     250         a_ip(:,:,jl) = z2d(:,:) 
     251         znam = 'v_ip'//'_htc'//zchar 
     252         CALL iom_get( numrir, jpdom_autoglo, znam , z2d ) 
     253         v_ip(:,:,jl) = z2d(:,:) 
     254      END DO 
    263255 
    264256      DO jl = 1, jpl  
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/iceupdate.F90

    r8564 r8592  
    199199      ! Snow/ice albedo (only if sent to coupler, useless in forced mode) 
    200200      !------------------------------------------------------------------ 
    201       CALL ice_alb( t_su, h_i, h_s, a_ip_frac, h_ip, ln_pnd_rad, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos 
     201      CALL ice_alb( t_su, h_i, h_s, a_ip_frac, h_ip, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos 
    202202      ! 
    203203      alb_ice(:,:,:) = ( 1._wp - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icevar.F90

    r8587 r8592  
    167167!!                a criteria for icy area (i.e. a_i > epsi20 and v_i > epsi20 ) 
    168168 
    169       !------------------------------------------------------- 
    170       ! Ice thickness, snow thickness, ice salinity, ice age 
    171       !------------------------------------------------------- 
     169      !--------------------------------------------------------------- 
     170      ! Ice thickness, snow thickness, ice salinity, ice age and ponds 
     171      !--------------------------------------------------------------- 
    172172      !                                            !--- inverse of the ice area 
    173173      WHERE( a_i(:,:,:) > epsi20 )   ;   z1_a_i(:,:,:) = 1._wp / a_i(:,:,:) 
     
    178178      ELSEWHERE                      ;   z1_v_i(:,:,:) = 0._wp 
    179179      END WHERE 
    180       ! 
    181       h_i(:,:,:) = v_i (:,:,:) * z1_a_i(:,:,:)    !--- ice thickness 
     180      !                                           !--- ice thickness 
     181      h_i(:,:,:) = v_i (:,:,:) * z1_a_i(:,:,:) 
    182182 
    183183      zhmax    =          hi_max(jpl) 
    184184      z1_zhmax =  1._wp / hi_max(jpl)                
    185       WHERE( h_i(:,:,jpl) > zhmax )               !--- bound h_i by hi_max (i.e. 99 m) with associated update of ice area 
     185      WHERE( h_i(:,:,jpl) > zhmax )   ! bound h_i by hi_max (i.e. 99 m) with associated update of ice area 
    186186         h_i  (:,:,jpl) = zhmax 
    187187         a_i   (:,:,jpl) = v_i(:,:,jpl) * z1_zhmax  
    188          z1_a_i(:,:,jpl) = zhmax * z1_v_i(:,:,jpl)          ! NB: v_i always /=0 as h_i > hi_max 
     188         z1_a_i(:,:,jpl) = zhmax * z1_v_i(:,:,jpl) 
    189189      END WHERE 
    190  
    191       h_s(:,:,:) = v_s (:,:,:) * z1_a_i(:,:,:)    !--- snow thickness 
    192        
    193       o_i(:,:,:)  = oa_i(:,:,:) * z1_a_i(:,:,:)    !--- ice age 
    194  
    195       IF( nn_icesal == 2 ) THEN                    !--- salinity (with a minimum value imposed everywhere) 
     190      !                                           !--- snow thickness 
     191      h_s(:,:,:) = v_s (:,:,:) * z1_a_i(:,:,:) 
     192      !                                           !--- ice age       
     193      o_i(:,:,:) = oa_i(:,:,:) * z1_a_i(:,:,:) 
     194      !                                           !--- pond fraction and thickness       
     195      a_ip_frac(:,:,:) = a_ip(:,:,:) * z1_a_i(:,:,:) 
     196      WHERE( a_ip_frac(:,:,:) > epsi20 )   ;   h_ip(:,:,:) = v_ip(:,:,:) * z1_a_i(:,:,:) / a_ip_frac(:,:,:) 
     197      ELSEWHERE                            ;   h_ip(:,:,:) = 0._wp 
     198      END WHERE 
     199      ! 
     200      !                                           !---  salinity (with a minimum value imposed everywhere)      
     201      IF( nn_icesal == 2 ) THEN 
    196202         WHERE( v_i(:,:,:) > epsi20 )   ;   s_i(:,:,:) = MAX( rn_simin , MIN( rn_simax, sv_i(:,:,:) * z1_v_i(:,:,:) ) ) 
    197203         ELSEWHERE                      ;   s_i(:,:,:) = rn_simin 
    198204         END WHERE 
    199205      ENDIF 
    200  
    201       CALL ice_var_salprof      ! salinity profile 
     206      CALL ice_var_salprof   ! salinity profile 
    202207 
    203208      !------------------- 
     
    242247      vt_s (:,:) = SUM( v_s, dim=3 ) 
    243248      at_i (:,:) = SUM( a_i, dim=3 ) 
    244  
    245 ! MV MP 2016 
    246 ! probably should resum for melt ponds ??? 
    247  
    248249      ! 
    249250   END SUBROUTINE ice_var_glo2eqv 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r8563 r8592  
    3232   USE geo2ocean      !  
    3333   USE oce   , ONLY : tsn, un, vn, sshn, ub, vb, sshb, fraqsr_1lev 
    34    USE albedooce      !  
     34   USE ocealb         !  
    3535   USE eosbn2         !  
    3636   USE sbcrnf, ONLY : l_rnfcpl 
     
    177177   TYPE( DYNARR ), SAVE, DIMENSION(jprcv) ::   frcv                     ! all fields recieved from the atmosphere 
    178178 
    179    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   albedo_oce_mix    ! ocean albedo sent to atmosphere (mix clear/overcast sky) 
     179   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   alb_oce_mix    ! ocean albedo sent to atmosphere (mix clear/overcast sky) 
    180180 
    181181   REAL(wp) ::   rpref = 101000._wp   ! reference atmospheric pressure[N/m2]  
     
    201201      ierr(:) = 0 
    202202      ! 
    203       ALLOCATE( albedo_oce_mix(jpi,jpj), nrcvinfo(jprcv),  STAT=ierr(1) ) 
     203      ALLOCATE( alb_oce_mix(jpi,jpj), nrcvinfo(jprcv),  STAT=ierr(1) ) 
    204204       
    205205#if ! defined key_lim3 && ! defined key_cice 
     
    735735      !     2. receiving mixed oce-ice solar radiation  
    736736      IF ( TRIM ( sn_snd_alb%cldes ) == 'mixed oce-ice' .OR. TRIM ( sn_rcv_qsr%cldes ) == 'mixed oce-ice' ) THEN 
    737          CALL albedo_oce( zaos, zacs ) 
     737         CALL oce_alb( zaos, zacs ) 
    738738         ! Due to lack of information on nebulosity : mean clear/overcast sky 
    739          albedo_oce_mix(:,:) = ( zacs(:,:) + zaos(:,:) ) * 0.5 
     739         alb_oce_mix(:,:) = ( zacs(:,:) + zaos(:,:) ) * 0.5 
    740740      ENDIF 
    741741 
     
    18841884!       ( see OASIS3 user guide, 5th edition, p39 ) 
    18851885         zqsr_ice(:,:,1) = frcv(jpr_qsrmix)%z3(:,:,1) * ( 1.- palbi(:,:,1) )   & 
    1886             &            / (  1.- ( albedo_oce_mix(:,:  ) * ziceld(:,:)       & 
     1886            &            / (  1.- ( alb_oce_mix(:,:  ) * ziceld(:,:)       & 
    18871887            &                     + palbi         (:,:,1) * picefr(:,:) ) ) 
    18881888      END SELECT 
     
    20512051                   ztmp1(:,:) = SUM( alb_ice (:,:,1:jpl) * a_i(:,:,1:jpl), dim=3 ) / SUM( a_i(:,:,1:jpl), dim=3 ) 
    20522052                ELSEWHERE 
    2053                    ztmp1(:,:) = albedo_oce_mix(:,:) 
     2053                   ztmp1(:,:) = alb_oce_mix(:,:) 
    20542054                END WHERE 
    20552055             CASE default   ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_alb%clcat' ) 
     
    20792079 
    20802080      IF( ssnd(jps_albmix)%laction ) THEN                         ! mixed ice-ocean 
    2081          ztmp1(:,:) = albedo_oce_mix(:,:) * zfr_l(:,:) 
     2081         ztmp1(:,:) = alb_oce_mix(:,:) * zfr_l(:,:) 
    20822082         DO jl=1,jpl 
    20832083            ztmp1(:,:) = ztmp1(:,:) + alb_ice(:,:,jl) * a_i(:,:,jl) 
Note: See TracChangeset for help on using the changeset viewer.