Changeset 8592
- Timestamp:
- 2017-10-04T20:08:33+02:00 (7 years ago)
- 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 211 211 &namalb ! albedo parameters 212 212 !------------------------------------------------------------------------------ 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 223 219 / 224 220 !------------------------------------------------------------------------------ -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icealb.F90
r8567 r8592 36 36 ! 37 37 ! ** 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 ponds42 38 REAL(wp) :: rn_alb_sdry ! dry snow albedo 43 39 REAL(wp) :: rn_alb_smlt ! melting snow albedo … … 53 49 CONTAINS 54 50 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 ) 56 52 !!---------------------------------------------------------------------- 57 53 !! *** ROUTINE ice_alb *** … … 59 55 !! ** Purpose : Computation of the albedo of the snow/ice system 60 56 !! 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) 67 59 !! 1) Albedo dependency on ice thickness follows the findings from Brandt et al (2005) 68 60 !! which are an update of Allison et al. (JGR 1993) ; Brandt et al. 1999 … … 76 68 !! 4) The needed 4 parameters are: dry and melting snow, freezing ice and bare puddled ice 77 69 !! 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 79 87 !! 1) ice albedo when ice thick. tends to 0 is different than ocean albedo 80 88 !! 2) for small ice thick. covered with some snow (<3cm?), albedo is larger … … 87 95 !! Grenfell & Perovich 2004, JGR, vol 109 88 96 !!---------------------------------------------------------------------- 89 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pt_ ice! ice surface temperature (Kelvin)97 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pt_su ! ice surface temperature (Kelvin) 90 98 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: ph_ice ! sea-ice thickness 91 99 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: ph_snw ! snow depth 92 100 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pafrac_pnd ! melt pond relative fraction (per unit ice area) 93 101 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 97 104 ! 98 105 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 111 111 !!--------------------------------------------------------------------- 112 112 ! 113 113 IF( nn_timing == 1 ) CALL timing_start('icealb') 114 114 ! 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 ! 177 164 END DO 178 165 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 ) 303 169 ! 304 170 IF( nn_timing == 1 ) CALL timing_stop('icealb') … … 317 183 INTEGER :: ios ! Local integer output status for namelist read 318 184 !! 319 NAMELIST/namalb/ nn_ice_alb,rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd185 NAMELIST/namalb/ rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd 320 186 !!---------------------------------------------------------------------- 321 187 ! … … 334 200 WRITE(numout,*) '~~~~~~~~~~~~' 335 201 WRITE(numout,*) ' Namelist namalb:' 336 WRITE(numout,*) ' choose the albedo parameterization nn_ice_alb = ', nn_ice_alb337 202 WRITE(numout,*) ' albedo of dry snow rn_alb_sdry = ', rn_alb_sdry 338 203 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 130 130 131 131 ! --- 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 ) 133 133 134 134 ! 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 147 147 END DO 148 148 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 162 158 163 159 DO jl = 1, jpl … … 248 244 END DO 249 245 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 263 255 264 256 DO jl = 1, jpl -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/iceupdate.F90
r8564 r8592 199 199 ! Snow/ice albedo (only if sent to coupler, useless in forced mode) 200 200 !------------------------------------------------------------------ 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 albedos201 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 202 202 ! 203 203 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 167 167 !! a criteria for icy area (i.e. a_i > epsi20 and v_i > epsi20 ) 168 168 169 !------------------------------------------------------- 170 ! Ice thickness, snow thickness, ice salinity, ice age 171 !------------------------------------------------------- 169 !--------------------------------------------------------------- 170 ! Ice thickness, snow thickness, ice salinity, ice age and ponds 171 !--------------------------------------------------------------- 172 172 ! !--- inverse of the ice area 173 173 WHERE( a_i(:,:,:) > epsi20 ) ; z1_a_i(:,:,:) = 1._wp / a_i(:,:,:) … … 178 178 ELSEWHERE ; z1_v_i(:,:,:) = 0._wp 179 179 END WHERE 180 ! 181 h_i(:,:,:) = v_i (:,:,:) * z1_a_i(:,:,:) !--- ice thickness180 ! !--- ice thickness 181 h_i(:,:,:) = v_i (:,:,:) * z1_a_i(:,:,:) 182 182 183 183 zhmax = hi_max(jpl) 184 184 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 area185 WHERE( h_i(:,:,jpl) > zhmax ) ! bound h_i by hi_max (i.e. 99 m) with associated update of ice area 186 186 h_i (:,:,jpl) = zhmax 187 187 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_max188 z1_a_i(:,:,jpl) = zhmax * z1_v_i(:,:,jpl) 189 189 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 196 202 WHERE( v_i(:,:,:) > epsi20 ) ; s_i(:,:,:) = MAX( rn_simin , MIN( rn_simax, sv_i(:,:,:) * z1_v_i(:,:,:) ) ) 197 203 ELSEWHERE ; s_i(:,:,:) = rn_simin 198 204 END WHERE 199 205 ENDIF 200 201 CALL ice_var_salprof ! salinity profile 206 CALL ice_var_salprof ! salinity profile 202 207 203 208 !------------------- … … 242 247 vt_s (:,:) = SUM( v_s, dim=3 ) 243 248 at_i (:,:) = SUM( a_i, dim=3 ) 244 245 ! MV MP 2016246 ! probably should resum for melt ponds ???247 248 249 ! 249 250 END SUBROUTINE ice_var_glo2eqv -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r8563 r8592 32 32 USE geo2ocean ! 33 33 USE oce , ONLY : tsn, un, vn, sshn, ub, vb, sshb, fraqsr_1lev 34 USE albedooce!34 USE ocealb ! 35 35 USE eosbn2 ! 36 36 USE sbcrnf, ONLY : l_rnfcpl … … 177 177 TYPE( DYNARR ), SAVE, DIMENSION(jprcv) :: frcv ! all fields recieved from the atmosphere 178 178 179 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: alb edo_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) 180 180 181 181 REAL(wp) :: rpref = 101000._wp ! reference atmospheric pressure[N/m2] … … 201 201 ierr(:) = 0 202 202 ! 203 ALLOCATE( alb edo_oce_mix(jpi,jpj), nrcvinfo(jprcv), STAT=ierr(1) )203 ALLOCATE( alb_oce_mix(jpi,jpj), nrcvinfo(jprcv), STAT=ierr(1) ) 204 204 205 205 #if ! defined key_lim3 && ! defined key_cice … … 735 735 ! 2. receiving mixed oce-ice solar radiation 736 736 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 ) 738 738 ! Due to lack of information on nebulosity : mean clear/overcast sky 739 alb edo_oce_mix(:,:) = ( zacs(:,:) + zaos(:,:) ) * 0.5739 alb_oce_mix(:,:) = ( zacs(:,:) + zaos(:,:) ) * 0.5 740 740 ENDIF 741 741 … … 1884 1884 ! ( see OASIS3 user guide, 5th edition, p39 ) 1885 1885 zqsr_ice(:,:,1) = frcv(jpr_qsrmix)%z3(:,:,1) * ( 1.- palbi(:,:,1) ) & 1886 & / ( 1.- ( alb edo_oce_mix(:,: ) * ziceld(:,:) &1886 & / ( 1.- ( alb_oce_mix(:,: ) * ziceld(:,:) & 1887 1887 & + palbi (:,:,1) * picefr(:,:) ) ) 1888 1888 END SELECT … … 2051 2051 ztmp1(:,:) = SUM( alb_ice (:,:,1:jpl) * a_i(:,:,1:jpl), dim=3 ) / SUM( a_i(:,:,1:jpl), dim=3 ) 2052 2052 ELSEWHERE 2053 ztmp1(:,:) = alb edo_oce_mix(:,:)2053 ztmp1(:,:) = alb_oce_mix(:,:) 2054 2054 END WHERE 2055 2055 CASE default ; CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_alb%clcat' ) … … 2079 2079 2080 2080 IF( ssnd(jps_albmix)%laction ) THEN ! mixed ice-ocean 2081 ztmp1(:,:) = alb edo_oce_mix(:,:) * zfr_l(:,:)2081 ztmp1(:,:) = alb_oce_mix(:,:) * zfr_l(:,:) 2082 2082 DO jl=1,jpl 2083 2083 ztmp1(:,:) = ztmp1(:,:) + alb_ice(:,:,jl) * a_i(:,:,jl)
Note: See TracChangeset
for help on using the changeset viewer.