Changeset 8099
- Timestamp:
- 2017-05-30T14:52:58+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/ice.F90
r8098 r8099 282 282 ! !!** melt pond namelist (namicemp) 283 283 LOGICAL , PUBLIC :: ln_pnd !: activate ponds or not 284 LOGICAL , PUBLIC :: ln_pnd_rad !: ponds radiatively active or not 284 285 INTEGER , PUBLIC :: nn_pnd_scheme !: type of melt pond scheme: =0 prescribed, =1 empirical, =2 topographic 285 286 INTEGER , PUBLIC :: nn_pnd_cpl !: type of melt pond coupling: =0 passive, =1 full, =2 radiation only, =3 freshwater only -
branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limmp.F90
r8098 r8099 95 95 IF(lwm) WRITE ( numoni, namicemp ) 96 96 97 ! Shortcut for radiatively active melt ponds 98 ln_pnd_rad = ln_pnd .AND. ( ( nn_pnd_cpl == 1 ) .OR. ( nn_pnd_cpl == 2 ) ) 99 97 100 IF(lwp) THEN ! control print 98 101 WRITE(numout,*) … … 104 107 WRITE(numout,*)' Prescribed pond fraction rn_apnd = ', rn_apnd 105 108 WRITE(numout,*)' Prescribed pond depth rn_hpnd = ', rn_hpnd 109 WRITE(numout,*)' Melt ponds radiatively active ln_pnd_rad = ', ln_pnd_rad 106 110 ENDIF 107 111 108 112 IF ( .NOT. ln_pnd ) THEN 113 WRITE(numout,*) 109 114 WRITE(numout,*) ' Melt ponds are not activated ' 110 115 WRITE(numout,*) ' nn_pnd_scheme, nn_pnd_cpl, rn_apnd and rn_hpnd are set to zero ' … … 114 119 rn_hpnd = 0._wp 115 120 ENDIF 121 116 122 117 123 ! -
branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90
r6994 r8099 209 209 !------------------------------------------------------------------------! 210 210 CALL wrk_alloc( jpi, jpj, jpl, zalb_cs, zalb_os ) 211 CALL albedo_ice( t_su, ht_i, ht_s, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos 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 213 212 214 alb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 213 215 CALL wrk_dealloc( jpi, jpj, jpl, zalb_cs, zalb_os ) -
branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/OPA_SRC/SBC/albedo.F90
r6323 r8099 39 39 ! !!* namelist namsbc_alb 40 40 INTEGER :: nn_ice_alb 41 REAL(wp) :: rn_alb ice41 REAL(wp) :: rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd 42 42 43 43 !!---------------------------------------------------------------------- … … 48 48 CONTAINS 49 49 50 SUBROUTINE albedo_ice( pt_ice, ph_ice, ph_snw, pa_ice_cs, pa_ice_os ) 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 53 !!---------------------------------------------------------------------- 52 54 !! *** ROUTINE albedo_ice *** … … 83 85 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pt_ice ! ice surface temperature (Kelvin) 84 86 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: ph_ice ! sea-ice thickness 85 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: ph_snw ! snow 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 86 94 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: pa_ice_cs ! albedo of ice under clear sky 87 95 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: pa_ice_os ! albedo of ice under overcast sky … … 89 97 INTEGER :: ji, jj, jl ! dummy loop indices 90 98 INTEGER :: ijpl ! number of ice categories (3rd dim of ice input arrays) 91 REAL(wp) :: ralb_im, ralb_sf, ralb_sm, ralb_if 92 REAL(wp) :: zswitch, z1_c1, z1_c2 99 REAL(wp) :: ralb_im, ralb_sf, ralb_sm, ralb_if, ralb_dp ! MV MP 2016 100 REAL(wp) :: zswitch, z1_c1, z1_c2 101 REAL(wp) :: zhref_pnd ! MV MP 2016 93 102 REAL(wp) :: zalb_sm, zalb_sf, zalb_st ! albedo of snow melting, freezing, total 94 103 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb, zalb_it ! intermediate variable & albedo of ice (snow free) 104 ! MV MP 2016 105 REAL(wp), POINTER, DIMENSION(:,:,:) :: zafrac_pnd, zh_pnd ! melt pond fraction and thickness 106 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_pnd ! ponded sea ice albedo 107 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_ice ! bare sea ice albedo 108 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_snw ! snow-covered sea ice albedo 109 ! END MV MP 2016 95 110 !!--------------------------------------------------------------------- 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 96 116 97 117 ijpl = SIZE( pt_ice, 3 ) ! number of ice categories 98 118 99 119 CALL wrk_alloc( jpi,jpj,ijpl, zalb, zalb_it ) 120 CALL wrk_alloc( jpi,jpj,ijpl, zafrac_pnd, zh_pnd, zalb_pnd ) 100 121 101 122 IF( albd_init == 0 ) CALL albedo_init ! initialization 102 123 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 103 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 166 167 ENDIF 168 169 ! END MV MP 2016 170 104 171 SELECT CASE ( nn_ice_alb ) 105 172 … … 109 176 CASE( 0 ) 110 177 111 ralb_sf = 0.80 ! dry snow 112 ralb_sm = 0.65 ! melting snow 113 ralb_if = 0.72 ! bare frozen ice 114 ralb_im = rn_albice ! bare puddled ice 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) 115 185 116 ! Computation of ice albedo (free of snow)117 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb(:,:,:) = ralb_im118 ELSE WHERE ; zalb(:,:,:) = ralb_if119 END WHERE120 121 186 WHERE ( 1.5 < ph_ice ) ; zalb_it = zalb 122 187 ELSE WHERE( 1.0 < ph_ice .AND. ph_ice <= 1.5 ) ; zalb_it = 0.472 + 2.0 * ( zalb - 0.472 ) * ( ph_ice - 1.0 ) … … 148 213 zalb_st = zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 149 214 150 ! Ice/snowalbedo151 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) )152 pa_ice_cs(ji,jj,jl) = 153 ! 215 ! surface albedo 216 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 217 pa_ice_cs(ji,jj,jl) = zswitch * zalb_st + ( 1._wp - zswitch ) * zalb_it(ji,jj,jl) 218 154 219 END DO 155 220 END DO … … 163 228 CASE( 1 ) 164 229 165 ralb_im = rn_albice ! bare puddled ice 230 ! ! Reference (overcast sky) values 231 ! ralb_im = rn_albice ! bare ice 166 232 ! compilation of values from literature 167 ralb_sf = 0.85 ! dry snow 168 ralb_sm = 0.75 ! melting snow 169 ralb_if = 0.60 ! bare frozen ice 233 ! ralb_sf = 0.85 ! dry snow 234 ! ralb_sm = 0.75 ! melting snow 235 ! ralb_if = 0.60 ! bare frozen ice 236 ! ralb_dp = 0.36 ! ponded-ice overcast albedo (Lecomte et al, 2015) 237 ! ! early melt pnds 0.27, late melt ponds 0.14 Grenfell & Perovich 170 238 ! Perovich et al 2002 (Sheba) => the only dataset for which all types of ice/snow were retrieved 171 239 ! ralb_sf = 0.85 ! dry snow … … 177 245 ! ralb_if = 0.54 ! bare frozen ice 178 246 ! 179 ! 247 ! Computation of ice albedo (free of snow) 180 248 z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) ) 181 249 z1_c2 = 1. / 0.05 182 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb = ralb_im 183 ELSE WHERE ; zalb = ralb_if 184 END WHERE 185 250 251 ! Accounting for the ice-thickness dependency (this has not been carefully checked with melt ponds) 186 252 WHERE ( 1.5 < ph_ice ) ; zalb_it = zalb 187 253 ELSE WHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 ) ; zalb_it = zalb + ( 0.18 - zalb ) * z1_c1 * & … … 192 258 z1_c1 = 1. / 0.02 193 259 z1_c2 = 1. / 0.03 194 ! Computation of the snow/ice albedo 260 261 ! Surface albedo (accounting for snow, ice melt ponds), overcast skies 195 262 DO jl = 1, ijpl 196 263 DO jj = 1, jpj 197 264 DO ji = 1, jpi 265 198 266 zalb_sf = ralb_sf - ( ralb_sf - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c1 ); 199 267 zalb_sm = ralb_sm - ( ralb_sm - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c2 ); … … 205 273 ! Ice/snow albedo 206 274 zswitch = MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 207 pa_ice_os(ji,jj,jl) = ( 1._wp - zswitch ) * zalb_st + zswitch * zalb_it(ji,jj,jl) 275 pa_ice_os(ji,jj,jl) = ( 1._wp - zswitch ) * zalb_st + zswitch * zalb_it(ji,jj,jl) 208 276 209 277 END DO 210 278 END DO 211 279 END DO 212 ! Effect of the clouds (2d order polynomial) 280 281 ! Clear sky albedo 213 282 pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 ); 283 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. 305 ! 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) 214 333 215 334 END SELECT 216 335 217 336 CALL wrk_dealloc( jpi,jpj,ijpl, zalb, zalb_it ) 337 CALL wrk_dealloc( jpi,jpj,ijpl, zafrac_pnd, zh_pnd ) ! MV MP 2016 218 338 ! 219 339 END SUBROUTINE albedo_ice … … 248 368 !!---------------------------------------------------------------------- 249 369 INTEGER :: ios ! Local integer output status for namelist read 250 NAMELIST/namsbc_alb/ nn_ice_alb, rn_alb ice370 NAMELIST/namsbc_alb/ nn_ice_alb, rn_alb_sdry, rn_alb_smlt, rn_alb_idry , rn_alb_imlt, rn_alb_dpnd 251 371 !!---------------------------------------------------------------------- 252 372 ! … … 268 388 WRITE(numout,*) ' Namelist namsbc_alb : albedo ' 269 389 WRITE(numout,*) ' choose the albedo parameterization nn_ice_alb = ', nn_ice_alb 270 WRITE(numout,*) ' albedo of bare puddled ice rn_albice = ', rn_albice 390 WRITE(numout,*) ' albedo of dry snow rn_alb_sdry = ', rn_alb_sdry 391 WRITE(numout,*) ' albedo of melting snow rn_alb_smlt = ', rn_alb_smlt 392 WRITE(numout,*) ' albedo of dry ice rn_alb_idry = ', rn_alb_idry 393 WRITE(numout,*) ' albedo of bare ice rn_alb_imlt = ', rn_alb_imlt 394 WRITE(numout,*) ' albedo of ponded ice rn_alb_dpnd = ', rn_alb_dpnd 271 395 ENDIF 272 396 ! -
branches/2016/dev_r6859_LIM3_meltponds/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r8085 r8099 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 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 230 229 231 SELECT CASE( kblk ) 230 232
Note: See TracChangeset
for help on using the changeset viewer.