Changeset 8233 for branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC
- Timestamp:
- 2017-06-28T14:33:07+02:00 (7 years ago)
- Location:
- branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/DOM/phycst.F90
r7813 r8233 54 54 55 55 REAL(wp), PUBLIC :: rhosn = 330._wp !: volumic mass of snow [kg/m3] 56 ! MV MP 2016 57 REAL(wp), PUBLIC :: rhofw = 1000._wp !: volumic mass of freshwater in melt ponds [kg/m3] 58 ! END MV MP 2016 56 59 REAL(wp), PUBLIC :: emic = 0.97_wp !: emissivity of snow or ice 57 60 REAL(wp), PUBLIC :: sice = 6.0_wp !: salinity of ice [psu] … … 176 179 WRITE(numout,*) ' density of sea ice = ', rhoic , ' kg/m^3' 177 180 WRITE(numout,*) ' density of snow = ', rhosn , ' kg/m^3' 181 WRITE(numout,*) ' density of freshwater (in melt ponds) = ', rhofw , ' kg/m^3' 178 182 WRITE(numout,*) ' emissivity of snow or ice = ', emic 179 183 WRITE(numout,*) ' salinity of ice = ', sice , ' psu' -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/albedo.F90
r7813 r8233 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 !! 4.0 ! 2017-05 (M. Vancoppenolle, O. Lecomte) Melt ponds 12 13 !!---------------------------------------------------------------------- 13 14 … … 39 40 ! !!* namelist namsbc_alb 40 41 INTEGER :: nn_ice_alb 41 REAL(wp) :: rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt 42 REAL(wp) :: rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd 42 43 43 44 !!---------------------------------------------------------------------- … … 48 49 CONTAINS 49 50 50 SUBROUTINE albedo_ice( pt_ice, ph_ice, ph_snw, pa _ice_cs, pa_ice_os )51 SUBROUTINE albedo_ice( pt_ice, ph_ice, ph_snw, pafrac_pnd, ph_pnd, ld_pnd, pa_ice_cs, pa_ice_os ) 51 52 !!---------------------------------------------------------------------- 52 53 !! *** ROUTINE albedo_ice *** … … 58 59 !! 1: the scheme is "home made" (for cloudy skies) and based on Brandt et al. (J. Climate 2005) 59 60 !! and Grenfell & Perovich (JGR 2004) 61 !! 2: fractional surface-based formulation of scheme 1 (NEW) 60 62 !! Description of scheme 1: 61 63 !! 1) Albedo dependency on ice thickness follows the findings from Brandt et al (2005) … … 80 82 !! Brandt et al. 2005, J. Climate, vol 18 81 83 !! Grenfell & Perovich 2004, JGR, vol 109 82 !!---------------------------------------------------------------------- 83 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pt_ice ! ice surface temperature (Kelvin) 84 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: ph_ice ! sea-ice thickness 85 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: ph_snw ! snow thickness 86 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: pa_ice_cs ! albedo of ice under clear sky 87 REAL(wp), INTENT( out), DIMENSION(:,:,:) :: pa_ice_os ! albedo of ice under overcast sky 88 !! 89 INTEGER :: ji, jj, jl ! dummy loop indices 90 INTEGER :: ijpl ! number of ice categories (3rd dim of ice input arrays) 91 REAL(wp) :: zswitch, z1_c1, z1_c2 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) :: zswitch, z1_c1, z1_c2 99 REAL(wp) :: zhref_pnd 92 100 REAL(wp) :: zalb_sm, zalb_sf, zalb_st ! albedo of snow melting, freezing, total 93 101 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb, zalb_it ! intermediate variable & albedo of ice (snow free) 102 !! MV MP 103 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_pnd ! ponded sea ice albedo 104 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_ice ! bare sea ice albedo 105 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_snw ! snow-covered sea ice albedo 106 REAL(wp), POINTER, DIMENSION(:,:,:) :: zafrac_snw ! relative snow fraction 107 REAL(wp), POINTER, DIMENSION(:,:,:) :: zafrac_ice ! relative ice fraction 108 REAL(wp), POINTER, DIMENSION(:,:,:) :: zafrac_pnd ! relative ice fraction (effective) 109 !! 94 110 !!--------------------------------------------------------------------- 95 111 … … 97 113 98 114 CALL wrk_alloc( jpi,jpj,ijpl, zalb, zalb_it ) 115 CALL wrk_alloc( jpi,jpj,ijpl, zalb_pnd, zalb_ice, zalb_snw ) 116 CALL wrk_alloc( jpi,jpj,ijpl, zalb_pnd, zafrac_snw, zafrac_ice, zafrac_pnd ) 99 117 100 118 IF( albd_init == 0 ) CALL albedo_init ! initialization 101 119 120 !----------------------------------------------------- 121 ! Snow-free albedo (no ice thickness dependence yet) 122 !----------------------------------------------------- 123 ! 124 ! Part common to nn_ice_alb = 0, 1, 2 125 ! 126 IF ( .NOT. ld_pnd ) THEN !--- No melt ponds OR radiatively inactive melt ponds 127 ! Bare ice albedo is prescribed, with implicit assumption on pond fraction and depth 128 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb(:,:,:) = rn_alb_imlt 129 ! !!! MV I think we could replace rt0_ice by rt0 and get rid of rt0 130 ELSE WHERE ; zalb(:,:,:) = rn_alb_idry 131 END WHERE 132 ENDIF 133 102 134 SELECT CASE ( nn_ice_alb ) 103 135 … … 105 137 ! Shine and Henderson-Sellers (1985) 106 138 !------------------------------------------ 139 ! NB: This parameterization is based on clear sky values 140 107 141 CASE( 0 ) 108 142 109 ! Computation of ice albedo (free of snow) 110 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb(:,:,:) = rn_alb_imlt 111 ELSE WHERE ; zalb(:,:,:) = rn_alb_idry 112 END WHERE 113 143 ! Thickness-dependent bare ice albedo 114 144 WHERE ( 1.5 < ph_ice ) ; zalb_it = zalb 115 145 ELSE WHERE( 1.0 < ph_ice .AND. ph_ice <= 1.5 ) ; zalb_it = 0.472 + 2.0 * ( zalb - 0.472 ) * ( ph_ice - 1.0 ) … … 119 149 ELSE WHERE ; zalb_it = 0.1 + 3.6 * ph_ice 120 150 END WHERE 121 151 152 IF ( ld_pnd ) THEN 153 ! Depth-dependent ponded ice albedo 154 zhref_pnd = 0.05 ! Characteristic length scale for thickness dependence of ponded ice albedo, Lecomte et al (2015) 155 zalb_pnd = rn_alb_dpnd - ( rn_alb_dpnd - zalb_it ) * EXP( - ph_pnd / zhref_pnd ) 156 157 ! Snow-free ice albedo is a function of pond fraction 158 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb_it = zalb_it * ( 1. - pafrac_pnd ) + zalb_pnd * pafrac_pnd ; END WHERE 159 ENDIF 160 122 161 DO jl = 1, ijpl 123 162 DO jj = 1, jpj 124 163 DO ji = 1, jpi 125 ! freezing snow164 ! Freezing snow 126 165 ! no effect of underlying ice layer IF snow thickness > c1. Albedo does not depend on snow thick if > c2 127 166 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ( ph_snw(ji,jj,jl) - c1 ) ) ) … … 130 169 & + zswitch * rn_alb_sdry 131 170 132 ! melting snow171 ! Melting snow 133 172 ! no effect of underlying ice layer. Albedo does not depend on snow thick IF > c2 134 173 zswitch = MAX( 0._wp , SIGN( 1._wp , ph_snw(ji,jj,jl) - c2 ) ) … … 136 175 & + zswitch * rn_alb_smlt 137 176 ! 138 ! snow albedo177 ! Snow albedo 139 178 zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) ) 140 179 zalb_st = zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 141 180 142 ! Ice/snowalbedo143 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) )144 pa_ice_cs(ji,jj,jl) = 181 ! Surface albedo 182 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 183 pa_ice_cs(ji,jj,jl) = zswitch * zalb_st + ( 1._wp - zswitch ) * zalb_it(ji,jj,jl) 145 184 ! 146 185 END DO … … 153 192 ! New parameterization (2016) 154 193 !------------------------------------------ 194 ! NB: This parameterization is based on overcast skies values 195 155 196 CASE( 1 ) 156 197 157 ! compilation of values from literature 198 ! compilation of values from literature (reference overcast sky values) 158 199 ! rn_alb_sdry = 0.85 ! dry snow 159 200 ! rn_alb_smlt = 0.75 ! melting snow 160 201 ! rn_alb_idry = 0.60 ! bare frozen ice 202 ! rn_alb_dpnd = 0.36 ! ponded-ice overcast albedo (Lecomte et al, 2015) 203 ! ! early melt pnds 0.27, late melt ponds 0.14 Grenfell & Perovich 161 204 ! Perovich et al 2002 (Sheba) => the only dataset for which all types of ice/snow were retrieved 162 205 ! rn_alb_sdry = 0.85 ! dry snow … … 168 211 ! rn_alb_idry = 0.54 ! bare frozen ice 169 212 ! 170 ! Computation of ice albedo (free of snow)213 ! Computation of snow-free ice albedo 171 214 z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) ) 172 215 z1_c2 = 1. / 0.05 173 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb = rn_alb_imlt 174 ELSE WHERE ; zalb = rn_alb_idry 175 END WHERE 176 177 WHERE ( 1.5 < ph_ice ) ; zalb_it = zalb 178 ELSE WHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 ) ; zalb_it = zalb + ( 0.18 - zalb ) * z1_c1 * & 216 217 ! Accounting for the ice-thickness dependency 218 WHERE ( 1.5 < ph_ice ) ; zalb_it = zalb 219 ELSE WHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 ) ; zalb_it = zalb + ( 0.18 - zalb ) * z1_c1 * & 179 220 & ( LOG(1.5) - LOG(ph_ice) ) 180 ELSE WHERE ; zalb_it = ralb_oce + ( 0.18 - ralb_oce ) * z1_c2 * ph_ice221 ELSE WHERE ; zalb_it = ralb_oce + ( 0.18 - ralb_oce ) * z1_c2 * ph_ice 181 222 END WHERE 223 224 IF ( ld_pnd ) THEN 225 ! Depth-dependent ponded ice albedo 226 zhref_pnd = 0.05 ! Characteristic length scale for thickness dependence of ponded ice albedo, Lecomte et al (2015) 227 zalb_pnd = rn_alb_dpnd - ( rn_alb_dpnd - zalb_it ) * EXP( - ph_pnd / zhref_pnd ) 228 229 ! Snow-free ice albedo is weighted mean of ponded ice and bare ice contributions 230 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb_it = zalb_it * ( 1. - pafrac_pnd ) + zalb_pnd * pafrac_pnd ; END WHERE 231 ENDIF 182 232 183 233 z1_c1 = 1. / 0.02 184 234 z1_c2 = 1. / 0.03 185 ! Computation of the snow/ice albedo 235 236 ! Overcast sky surface albedo (accounting for snow, ice melt ponds) 186 237 DO jl = 1, ijpl 187 238 DO jj = 1, jpj 188 239 DO ji = 1, jpi 240 ! Snow depth dependence of snow albedo 189 241 zalb_sf = rn_alb_sdry - ( rn_alb_sdry - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c1 ); 190 242 zalb_sm = rn_alb_smlt - ( rn_alb_smlt - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c2 ); 191 243 192 ! snow albedo244 ! Snow albedo (MV I guess we could use rt0 instead of rt0_snow) 193 245 zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) ) 194 246 zalb_st = zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 195 247 196 ! Ice/snowalbedo248 ! Surface albedo 197 249 zswitch = MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 198 250 pa_ice_os(ji,jj,jl) = ( 1._wp - zswitch ) * zalb_st + zswitch * zalb_it(ji,jj,jl) … … 201 253 END DO 202 254 END DO 203 ! Effect of the clouds (2d order polynomial) 255 256 ! Clear sky surface albedo 204 257 pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 ); 258 259 !--------------------------------------------------- 260 ! Fractional surface-based parameterization (2017) 261 !--------------------------------------------------- 262 CASE( 2 ) 263 264 ! MV: I propose this formulation that is more elegant, and more easy to expand towards 265 ! varying pond and snow fraction. 266 ! Formulation 1 has issues to handle ponds and snow together that 267 ! can't easily be fixed. This one handles it better, I believe. 268 269 !----------------------------------------- 270 ! Snow, bare ice and ponded ice fractions 271 !----------------------------------------- 272 ! Specific fractions (zafrac) refer to relative area covered by snow within each ice category 273 274 !--- Effective pond fraction (for now, we prevent melt ponds and snow at the same time) 275 zafrac_pnd = 0._wp 276 IF ( ld_pnd ) THEN 277 WHERE( ph_snw == 0._wp ) ; zafrac_pnd = pafrac_pnd ; END WHERE ! Snow fully "shades" melt ponds 278 ENDIF 279 280 !--- Specific snow fraction (for now, prescribed) 281 WHERE ( ph_snw > 0._wp ) ; zafrac_snw = 1. 282 ELSE WHERE ; zafrac_snw = 0. 283 END WHERE 284 285 !--- Specific ice fraction 286 zafrac_ice = 1. - zafrac_snw - zafrac_pnd 287 288 !-------------------------------------------------- 289 ! Snow-covered, pond-covered, and bare ice albedos 290 !-------------------------------------------------- 291 ! Bare ice albedo 292 z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) ) 293 z1_c2 = 1. / 0.05 294 WHERE ( 1.5 < ph_ice ) ; zalb_ice = zalb 295 ELSE WHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 ) ; zalb_ice = zalb + ( 0.18 - zalb ) * z1_c1 * & 296 & ( LOG(1.5) - LOG(ph_ice) ) 297 ELSE WHERE ; zalb_ice = ralb_oce + ( 0.18 - ralb_oce ) * z1_c2 * ph_ice 298 END WHERE 299 300 ! Snow-covered ice albedo (freezing, melting cases) 301 z1_c1 = 1. / 0.02 302 z1_c2 = 1. / 0.03 303 304 WHERE( pt_ice < rt0_snow ) ; zalb_snw = rn_alb_sdry - ( rn_alb_sdry - zalb_ice ) * EXP( - ph_snw * z1_c1 ); 305 ELSE WHERE ; zalb_snw = rn_alb_smlt - ( rn_alb_smlt - zalb_ice ) * EXP( - ph_snw * z1_c2 ); 306 END WHERE 307 308 ! Depth-dependent ponded ice albedo 309 IF ( ld_pnd ) THEN 310 zhref_pnd = 0.05 ! Characteristic length scale for thickness dependence of ponded ice albedo, Lecomte et al (2015) 311 zalb_pnd = rn_alb_dpnd - ( rn_alb_dpnd - zalb_ice ) * EXP( - ph_pnd / zhref_pnd ) 312 ELSE 313 zalb_pnd = rn_alb_dpnd 314 ENDIF 315 316 ! Surface albedo is weighted mean of snow, ponds and bare ice contributions 317 pa_ice_os = zafrac_snw * zalb_snw + zafrac_pnd * zalb_pnd + zafrac_ice * zalb_ice 318 319 pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 ) 205 320 206 321 END SELECT 207 322 208 323 CALL wrk_dealloc( jpi,jpj,ijpl, zalb, zalb_it ) 324 CALL wrk_dealloc( jpi,jpj,ijpl, zalb_pnd, zalb_ice, zalb_snw ) 325 CALL wrk_dealloc( jpi,jpj,ijpl, zalb_pnd, zafrac_snw, zafrac_ice, zafrac_pnd ) 209 326 ! 210 327 END SUBROUTINE albedo_ice -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r7777 r8233 48 48 USE limvar ! Ice variables switch 49 49 USE limctl ! 50 ! MV MP 2016 51 USE limmp 52 ! END MV MP 2016 53 50 54 USE limistate ! LIM initial state 51 55 USE limthd_sal ! LIM ice thermodynamics: salinity … … 208 212 CALL wrk_alloc( jpi,jpj,jpl, zalb_os, zalb_cs ) 209 213 210 CALL albedo_ice( t_su, ht_i, ht_s, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos 214 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 215 211 216 SELECT CASE( ksbc ) 212 217 CASE( jp_usr ) ; CALL usrdef_sbc_ice_flx( kt ) ! user defined formulation … … 231 236 ! --- zap this if no ice thermo --- ! 232 237 IF( ln_limthd ) CALL lim_thd( kt ) ! -- Ice thermodynamics 238 239 ! MV MP 2016 240 IF ( ln_pnd ) CALL lim_mp( kt ) ! -- Melt ponds 241 ! END MV MP 2016 242 233 243 IF( ln_limthd ) CALL lim_update2( kt ) ! -- Corrections 234 244 ! --- … … 311 321 ! 312 322 CALL lim_thd_sal_init ! set ice salinity parameters 313 ! 323 324 ! MV MP 2016 325 CALL lim_mp_init ! set melt ponds parameters 326 ! END MV MP 2016 327 314 328 IF( ln_limdyn ) CALL lim_itd_me_init ! ice thickness distribution initialization for mecanical deformation 315 329 ! ! Initial sea-ice state … … 620 634 wfx_res(:,:) = 0._wp ; wfx_sub(:,:) = 0._wp 621 635 wfx_spr(:,:) = 0._wp ; wfx_lam(:,:) = 0._wp 636 637 ! MV MP 2016 638 wfx_pnd(:,:) = 0._wp ; wfx_snw_sum(:,:) = 0._wp 639 ! END MV MP 2016 622 640 623 641 hfx_thd(:,:) = 0._wp ;
Note: See TracChangeset
for help on using the changeset viewer.