- Timestamp:
- 2020-07-30T12:12:41+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/OPA_SRC/SBC/albedo.F90
r11442 r13355 21 21 USE lib_mpp ! MPP library 22 22 USE wrk_nemo ! work arrays 23 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 23 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 24 24 USE stopack 25 25 … … 31 31 32 32 INTEGER :: albd_init = 0 !: control flag for initialization 33 33 34 34 REAL(wp) :: rmue = 0.40 ! cosine of local solar altitude 35 35 REAL(wp) :: ralb_oce = 0.066 ! ocean or lead albedo (Pegau and Paulson, Ann. Glac. 2001) … … 37 37 REAL(wp) :: c2 = 0.10 ! " " 38 38 REAL(wp) :: rcloud = 0.06 ! cloud effect on albedo (only-for nn_ice_alb=0) 39 39 40 40 ! !!* namelist namsbc_alb 41 41 INTEGER :: nn_ice_alb … … 52 52 !!---------------------------------------------------------------------- 53 53 !! *** ROUTINE albedo_ice *** 54 !! 55 !! ** Purpose : Computation of the albedo of the snow/ice system 56 !! 54 !! 55 !! ** Purpose : Computation of the albedo of the snow/ice system 56 !! 57 57 !! ** Method : Two schemes are available (from namelist parameter nn_ice_alb) 58 58 !! 0: the scheme is that of Shine & Henderson-Sellers (JGR 1985) for clear-skies … … 73 73 !! ** Note : The parameterization from Shine & Henderson-Sellers presents several misconstructions: 74 74 !! 1) ice albedo when ice thick. tends to 0 is different than ocean albedo 75 !! 2) for small ice thick. covered with some snow (<3cm?), albedo is larger 75 !! 2) for small ice thick. covered with some snow (<3cm?), albedo is larger 76 76 !! under melting conditions than under freezing conditions 77 !! 3) the evolution of ice albedo as a function of ice thickness shows 77 !! 3) the evolution of ice albedo as a function of ice thickness shows 78 78 !! 3 sharp inflexion points (at 5cm, 100cm and 150cm) that look highly unrealistic 79 79 !! 80 80 !! References : Shine & Henderson-Sellers 1985, JGR, 90(D1), 2243-2250. 81 81 !! Brandt et al. 2005, J. Climate, vol 18 82 !! Grenfell & Perovich 2004, JGR, vol 109 82 !! Grenfell & Perovich 2004, JGR, vol 109 83 83 !!---------------------------------------------------------------------- 84 84 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pt_ice ! ice surface temperature (Kelvin) … … 97 97 98 98 ijpl = SIZE( pt_ice, 3 ) ! number of ice categories 99 99 100 100 CALL wrk_alloc( jpi,jpj,ijpl, zalb, zalb_it ) 101 101 102 IF( albd_init == 0 ) CALL albedo_init ! initialization 103 104 102 IF( albd_init == 0 ) CALL albedo_init ! initialization 103 104 105 105 SELECT CASE ( nn_ice_alb ) 106 106 … … 109 109 !------------------------------------------ 110 110 CASE( 0 ) 111 111 112 112 ralb_sf = 0.80 ! dry snow 113 113 ralb_sm = 0.65 ! melting snow 114 114 ralb_if = 0.72 ! bare frozen ice 115 ralb_im = rn_albice ! bare puddled ice 116 115 ralb_im = rn_albice ! bare puddled ice 116 117 117 ! Computation of ice albedo (free of snow) 118 118 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb(:,:,:) = ralb_im 119 119 ELSE WHERE ; zalb(:,:,:) = ralb_if 120 120 END WHERE 121 121 122 122 WHERE ( 1.5 < ph_ice ) ; zalb_it = zalb 123 123 ELSE WHERE( 1.0 < ph_ice .AND. ph_ice <= 1.5 ) ; zalb_it = 0.472 + 2.0 * ( zalb - 0.472 ) * ( ph_ice - 1.0 ) … … 127 127 ELSE WHERE ; zalb_it = 0.1 + 3.6 * ph_ice 128 128 END WHERE 129 129 130 130 DO jl = 1, ijpl 131 131 DO jj = 1, jpj … … 133 133 ! freezing snow 134 134 ! no effect of underlying ice layer IF snow thickness > c1. Albedo does not depend on snow thick if > c2 135 ! ! freezing snow 135 ! ! freezing snow 136 136 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ( ph_snw(ji,jj,jl) - c1 ) ) ) 137 137 zalb_sf = ( 1._wp - zswitch ) * ( zalb_it(ji,jj,jl) & 138 138 & + ph_snw(ji,jj,jl) * ( ralb_sf - zalb_it(ji,jj,jl) ) / c1 ) & 139 & + zswitch * ralb_sf 139 & + zswitch * ralb_sf 140 140 141 141 ! melting snow … … 143 143 zswitch = MAX( 0._wp , SIGN( 1._wp , ph_snw(ji,jj,jl) - c2 ) ) 144 144 zalb_sm = ( 1._wp - zswitch ) * ( ralb_im + ph_snw(ji,jj,jl) * ( ralb_sm - ralb_im ) / c2 ) & 145 & + zswitch * ralb_sm 145 & + zswitch * ralb_sm 146 146 ! 147 147 ! snow albedo 148 zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) ) 148 zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) ) 149 149 zalb_st = zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 150 150 151 151 ! Ice/snow albedo 152 152 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) … … 155 155 END DO 156 156 END DO 157 157 158 #if defined key_traldf_c2d || key_traldf_c3d 158 159 IF ( ln_stopack .AND. nn_spp_icealb > 0 ) & 159 160 & CALL spp_gen( 1, pa_ice_cs(:,:,jl), nn_spp_icealb, rn_icealb_sd, jk_spp_alb, jl ) 160 161 #else 162 IF ( ln_stopack .AND. nn_spp_icealb > 0 ) & 163 & CALL ctl_stop( 'albedo_ice: parameter perturbation will only work with '// & 164 'key_traldf_c2d or key_traldf_c3d') 165 #endif 161 166 END DO 162 167 … … 166 171 ! New parameterization (2016) 167 172 !------------------------------------------ 168 CASE( 1 ) 173 CASE( 1 ) 169 174 170 175 ralb_im = rn_albice ! bare puddled ice … … 181 186 ! ralb_sm = 0.82 ! melting snow 182 187 ! ralb_if = 0.54 ! bare frozen ice 183 ! 188 ! 184 189 ! Computation of ice albedo (free of snow) 185 z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) ) 190 z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) ) 186 191 z1_c2 = 1. / 0.05 187 192 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb = ralb_im 188 193 ELSE WHERE ; zalb = ralb_if 189 194 END WHERE 190 195 191 196 WHERE ( 1.5 < ph_ice ) ; zalb_it = zalb 192 197 ELSE WHERE( 0.05 < ph_ice .AND. ph_ice <= 1.5 ) ; zalb_it = zalb + ( 0.18 - zalb ) * z1_c1 * & … … 205 210 206 211 ! snow albedo 207 zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) ) 212 zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) ) 208 213 zalb_st = zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 209 214 210 ! Ice/snow albedo 215 ! Ice/snow albedo 211 216 zswitch = MAX( 0._wp , SIGN( 1._wp , - ph_snw(ji,jj,jl) ) ) 212 217 pa_ice_os(ji,jj,jl) = ( 1._wp - zswitch ) * zalb_st + zswitch * zalb_it(ji,jj,jl) … … 214 219 END DO 215 220 END DO 216 221 222 #if defined key_traldf_c2d || key_traldf_c3d 217 223 IF ( ln_stopack .AND. nn_spp_icealb > 0 ) & 218 224 & CALL spp_gen( 1, pa_ice_os(:,:,jl), nn_spp_icealb, rn_icealb_sd, jk_spp_alb, jl ) 219 225 #else 226 IF ( ln_stopack .AND. nn_spp_icealb > 0 ) & 227 & CALL ctl_stop( 'albedo_ice: parameter perturbation will only work with '// & 228 'key_traldf_c2d or key_traldf_c3d') 229 #endif 220 230 END DO 221 231 ! Effect of the clouds (2d order polynomial) 222 pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 ); 232 pa_ice_cs = pa_ice_os - ( - 0.1010 * pa_ice_os * pa_ice_os + 0.1933 * pa_ice_os - 0.0148 ); 223 233 224 234 END SELECT 225 235 226 236 CALL wrk_dealloc( jpi,jpj,ijpl, zalb, zalb_it ) 227 237 ! … … 232 242 !!---------------------------------------------------------------------- 233 243 !! *** ROUTINE albedo_oce *** 234 !! 244 !! 235 245 !! ** Purpose : Computation of the albedo of the ocean 236 246 !!---------------------------------------------------------------------- … … 238 248 REAL(wp), DIMENSION(:,:), INTENT(out) :: pa_oce_cs ! albedo of ocean under clear sky 239 249 !! 240 REAL(wp) :: zcoef 250 REAL(wp) :: zcoef 241 251 !!---------------------------------------------------------------------- 242 252 ! 243 253 zcoef = 0.05 / ( 1.1 * rmue**1.4 + 0.15 ) ! Parameterization of Briegled and Ramanathan, 1982 244 pa_oce_cs(:,:) = zcoef 254 pa_oce_cs(:,:) = zcoef 245 255 pa_oce_os(:,:) = 0.06 ! Parameterization of Kondratyev, 1969 and Payne, 1972 246 256 ! … … 257 267 !!---------------------------------------------------------------------- 258 268 INTEGER :: ios ! Local integer output status for namelist read 259 NAMELIST/namsbc_alb/ nn_ice_alb, rn_albice 269 NAMELIST/namsbc_alb/ nn_ice_alb, rn_albice 260 270 !!---------------------------------------------------------------------- 261 271 !
Note: See TracChangeset
for help on using the changeset viewer.