- Timestamp:
- 2017-09-01T15:49:35+02:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icealb.F90
r8426 r8486 4 4 !! Ocean forcing: bulk thermohaline forcing of the ice 5 5 !!===================================================================== 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 11 7 !!---------------------------------------------------------------------- 12 8 #if defined key_lim3 13 9 !!---------------------------------------------------------------------- 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 17 16 USE phycst ! physical constants 18 17 ! … … 24 23 PRIVATE 25 24 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 !!!! 29 30 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 33 36 34 ! !!* namelist namsbc_alb 37 ! !!* namelist namsbc_alb * 35 38 INTEGER :: nn_ice_alb 36 39 REAL(wp) :: rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd 37 40 38 41 !!---------------------------------------------------------------------- 39 !! NEMO/ OPA 4.0 , NEMO Consortium (2010)42 !! NEMO/ICE 4.0 , NEMO Consortium (2017) 40 43 !! $Id: icealb.F90 8268 2017-07-03 15:01:04Z clem $ 41 44 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 76 79 !! Brandt et al. 2005, J. Climate, vol 18 77 80 !! 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 ! - - 93 94 REAL(wp) :: zalb_sm, zalb_sf, zalb_st ! albedo of snow melting, freezing, total 94 95 ! 95 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zalb, zalb_it 96 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zalb, zalb_it ! intermediate variable & albedo of ice (snow free) 96 97 !! 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) 104 104 !!--------------------------------------------------------------------- 105 105 … … 120 120 ENDIF 121 121 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 132 129 WHERE ( 1.5 < ph_ice ) ; zalb_it = zalb 133 130 ELSE WHERE( 1.0 < ph_ice .AND. ph_ice <= 1.5 ) ; zalb_it = 0.472 + 2.0 * ( zalb - 0.472 ) * ( ph_ice - 1.0 ) … … 137 134 ELSE WHERE ; zalb_it = 0.1 + 3.6 * ph_ice 138 135 END WHERE 139 140 IF ( ld_pnd ) THEN 141 ! Depth-dependent ponded ice albedo142 z href_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 fraction146 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb_it = zalb_it * ( 1. - pafrac_pnd ) + zalb_pnd * pafrac_pnd ;END WHERE136 ! 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 147 144 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 149 148 DO jl = 1, jpl 150 149 DO jj = 1, jpj 151 150 DO ji = 1, jpi 152 ! Freezing snow151 ! ! Freezing snow 153 152 ! no effect of underlying ice layer IF snow thickness > c1. Albedo does not depend on snow thick if > c2 154 zswitch 155 zalb_sf 156 & + ph_snw(ji,jj,jl) * ( rn_alb_sdry - zalb_it(ji,jj,jl) ) /c1 ) &157 & +zswitch * rn_alb_sdry158 159 ! Melting snow153 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 160 159 ! 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 164 167 ! 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 170 169 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 171 170 pa_ice_cs(ji,jj,jl) = zswitch * zalb_st + ( 1._wp - zswitch ) * zalb_it(ji,jj,jl) … … 174 173 END DO 175 174 END DO 176 175 ! 177 176 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 202 199 z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) ) 203 200 z1_c2 = 1. / 0.05 204 201 205 ! Accounting for the ice-thickness dependency206 WHERE ( 1.5 < ph_ice ) ;zalb_it = zalb207 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 E LSE WHERE ; zalb_it = rn_alb_oce + ( 0.18 - rn_alb_oce ) * z1_c2 * ph_ice210 END WHERE211 212 IF ( ld_pnd ) THEN213 ! Depth-dependent ponded ice albedo214 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 contributions218 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb_it = zalb_it * ( 1. - pafrac_pnd ) + zalb_pnd * pafrac_pnd ;END WHERE202 ! !--- 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 219 216 ENDIF 220 217 ! 218 ! !--- Overcast sky surface albedo (accounting for snow, ice melt ponds) 221 219 z1_c1 = 1. / 0.02 222 220 z1_c2 = 1. / 0.03 223 224 ! Overcast sky surface albedo (accounting for snow, ice melt ponds)225 221 DO jl = 1, jpl 226 222 DO jj = 1, jpj … … 241 237 END DO 242 238 END DO 243 244 ! Clear sky surface albedo239 ! 240 ! !--- Clear sky surface albedo 245 241 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 * & 284 277 & ( 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 ) 308 297 309 298 END SELECT … … 311 300 END SUBROUTINE ice_alb 312 301 302 313 303 SUBROUTINE alb_init 314 304 !!---------------------------------------------------------------------- … … 320 310 !!---------------------------------------------------------------------- 321 311 INTEGER :: ios ! Local integer output status for namelist read 312 !! 322 313 NAMELIST/namicealb/ nn_ice_alb, rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd 323 314 !!---------------------------------------------------------------------- … … 353 344 !! Default option Dummy module NO LIM 3.0 sea-ice model 354 345 !!---------------------------------------------------------------------- 355 CONTAINS356 !357 SUBROUTINE ice_alb ! Dummy routine358 WRITE(*,*) 'ice_alb: You should not have seen this print! error?'359 END SUBROUTINE ice_alb360 346 #endif 361 347
Note: See TracChangeset
for help on using the changeset viewer.