Changeset 8106 for branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM
- Timestamp:
- 2017-06-01T09:54:36+02:00 (7 years ago)
- 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 383 383 384 384 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 387 391 END DO 388 392 389 393 ELSE 390 394 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 393 399 394 400 ENDIF … … 418 424 END DO 419 425 420 ! MV MP 2016421 426 a_ip(:,:,:) = 0._wp 422 427 v_ip(:,:,:) = 0._wp 423 ! END MV MP 2016 428 a_ip_frac(:,:,:) = 0._wp 429 h_ip (:,:,:) = 0._wp 424 430 425 431 ENDIF ! ln_limini -
branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limmp.F90
r8099 r8106 120 120 ENDIF 121 121 122 123 122 ! 124 123 END SUBROUTINE lim_mp_init … … 200 199 201 200 WHERE ( ( a_i > epsi10 ) .AND. ( t_su >= rt0-epsi06 ) ) 202 a_ip = rn_apnd * z1_jpl201 a_ip_frac = rn_apnd 203 202 h_ip = rn_hpnd 204 v_ip = a_ip * h_ip205 a_ip _frac = a_ip /a_i203 v_ip = a_ip_frac * a_i * h_ip 204 a_ip = a_ip_frac * a_i 206 205 ELSE WHERE 207 206 a_ip = 0._wp -
branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90
r8099 r8106 209 209 !------------------------------------------------------------------------! 210 210 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 213 212 214 213 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 7 7 !! NEMO 1.0 ! 2003-07 (C. Ethe, G. Madec) Optimization (old name:shine) 8 8 !! - ! 2004-11 (C. Talandier) add albedo_init 9 !! - ! 200 1-06 (M. Vancoppenolle) LIM 3.09 !! - ! 2006-06 (M. Vancoppenolle) LIM 3.0 10 10 !! - ! 2006-08 (G. Madec) cleaning for surface module 11 11 !! 3.6 ! 2016-01 (C. Rousset) new parameterization for sea ice albedo 12 !! x.x ! 2017-05 (M. Vancoppenolle, O. Lecomte) Melt ponds 12 13 !!---------------------------------------------------------------------- 13 14 … … 48 49 CONTAINS 49 50 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 ) 53 52 !!---------------------------------------------------------------------- 54 53 !! *** ROUTINE albedo_ice *** … … 60 59 !! 1: the scheme is "home made" (for cloudy skies) and based on Brandt et al. (J. Climate 2005) 61 60 !! and Grenfell & Perovich (JGR 2004) 61 !! 2: fractional surface-based formulation of scheme 1 (NEW) 62 62 !! Description of scheme 1: 63 63 !! 1) Albedo dependency on ice thickness follows the findings from Brandt et al (2005) … … 82 82 !! Brandt et al. 2005, J. Climate, vol 18 83 83 !! 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 100 99 REAL(wp) :: zswitch, z1_c1, z1_c2 101 REAL(wp) :: zhref_pnd ! MV MP 2016100 REAL(wp) :: zhref_pnd 102 101 REAL(wp) :: zalb_sm, zalb_sf, zalb_st ! albedo of snow melting, freezing, total 103 102 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb, zalb_it ! intermediate variable & albedo of ice (snow free) 104 ! MV MP 2016105 REAL(wp), POINTER, DIMENSION(:,:,:) :: zafrac_pnd, zh_pnd ! melt pond fraction and thickness106 103 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_pnd ! ponded sea ice albedo 107 104 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_ice ! bare sea ice albedo 108 105 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 !! 110 109 !!--------------------------------------------------------------------- 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 116 114 117 115 ijpl = SIZE( pt_ice, 3 ) ! number of ice categories 118 116 119 117 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 ) 121 120 122 121 IF( albd_init == 0 ) CALL albedo_init ! initialization 123 122 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 166 142 167 143 ENDIF 168 169 ! END MV MP 2016170 144 171 145 SELECT CASE ( nn_ice_alb ) … … 174 148 ! Shine and Henderson-Sellers (1985) 175 149 !------------------------------------------ 150 ! NB: This parameterization is based on clear sky values 151 176 152 CASE( 0 ) 177 153 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 186 155 WHERE ( 1.5 < ph_ice ) ; zalb_it = zalb 187 156 ELSE WHERE( 1.0 < ph_ice .AND. ph_ice <= 1.5 ) ; zalb_it = 0.472 + 2.0 * ( zalb - 0.472 ) * ( ph_ice - 1.0 ) … … 191 160 ELSE WHERE ; zalb_it = 0.1 + 3.6 * ph_ice 192 161 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) 193 176 194 177 DO jl = 1, ijpl 195 178 DO jj = 1, jpj 196 179 DO ji = 1, jpi 197 ! freezing snow180 ! Freezing snow 198 181 ! no effect of underlying ice layer IF snow thickness > c1. Albedo does not depend on snow thick if > c2 199 182 ! ! freezing snow … … 203 186 & + zswitch * ralb_sf 204 187 205 ! melting snow188 ! Melting snow 206 189 ! no effect of underlying ice layer. Albedo does not depend on snow thick IF > c2 207 190 zswitch = MAX( 0._wp , SIGN( 1._wp , ph_snw(ji,jj,jl) - c2 ) ) 208 191 zalb_sm = ( 1._wp - zswitch ) * ( ralb_im + ph_snw(ji,jj,jl) * ( ralb_sm - ralb_im ) / c2 ) & 209 192 & + zswitch * ralb_sm 210 !211 ! snow albedo193 194 ! Snow albedo 212 195 zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) ) 213 196 zalb_st = zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 214 197 215 ! surface albedo198 ! Surface albedo 216 199 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 217 200 pa_ice_cs(ji,jj,jl) = zswitch * zalb_st + ( 1._wp - zswitch ) * zalb_it(ji,jj,jl) … … 226 209 ! New parameterization (2016) 227 210 !------------------------------------------ 211 ! NB: This parameterization is based on overcast skies values 212 228 213 CASE( 1 ) 229 214 230 215 ! ! Reference (overcast sky) values 231 ! ralb_im = rn_albice ! bare ice232 ! compilation of values from literature233 216 ! ralb_sf = 0.85 ! dry snow 234 217 ! ralb_sm = 0.75 ! melting snow … … 245 228 ! ralb_if = 0.54 ! bare frozen ice 246 229 ! 247 ! Computation of ice albedo (free of snow)230 ! Computation of snow-free ice albedo 248 231 z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) ) 249 232 z1_c2 = 1. / 0.05 250 233 251 ! Accounting for the ice-thickness dependency (this has not been carefully checked with melt ponds)252 WHERE ( 1.5 < ph_ice ) ; zalb_it = zalb253 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 * & 254 237 & ( LOG(1.5) - LOG(ph_ice) ) 255 ELSE WHERE ; zalb_it = ralb_oce + ( 0.18 - ralb_oce ) * z1_c2 * ph_ice238 ELSE WHERE ; zalb_it = ralb_oce + ( 0.18 - ralb_oce ) * z1_c2 * ph_ice 256 239 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 257 249 258 250 z1_c1 = 1. / 0.02 259 251 z1_c2 = 1. / 0.03 260 252 261 ! Surface albedo (accounting for snow, ice melt ponds), overcast skies253 ! Overcast sky surface albedo (accounting for snow, ice melt ponds) 262 254 DO jl = 1, ijpl 263 255 DO jj = 1, jpj 264 256 DO ji = 1, jpi 265 257 258 ! Snow depth dependence of snow albedo 266 259 zalb_sf = ralb_sf - ( ralb_sf - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c1 ); 267 260 zalb_sm = ralb_sm - ( ralb_sm - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c2 ); 268 261 269 ! snow albedo262 ! Snow albedo (MV I guess we could use rt0 instead of rt0_snow) 270 263 zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) ) 271 264 zalb_st = zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 272 265 273 ! Ice/snowalbedo266 ! Surface albedo 274 267 zswitch = MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 275 268 pa_ice_os(ji,jj,jl) = ( 1._wp - zswitch ) * zalb_st + zswitch * zalb_it(ji,jj,jl) … … 279 272 END DO 280 273 281 ! Clear sky albedo274 ! Clear sky surface albedo 282 275 pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 ); 283 276 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. 305 299 ! 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 ) 333 329 334 330 END SELECT 335 331 336 332 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 ) 338 335 ! 339 336 END SUBROUTINE albedo_ice -
branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r8099 r8106 226 226 CALL wrk_alloc( jpi,jpj,jpl, zalb_os, zalb_cs ) 227 227 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 230 229 231 230 SELECT CASE( kblk )
Note: See TracChangeset
for help on using the changeset viewer.