Changeset 7813 for trunk/NEMOGCM/NEMO/OPA_SRC/SBC/albedo.F90
- Timestamp:
- 2017-03-20T17:17:45+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/albedo.F90
r7753 r7813 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 42 42 43 43 !!---------------------------------------------------------------------- … … 89 89 INTEGER :: ji, jj, jl ! dummy loop indices 90 90 INTEGER :: ijpl ! number of ice categories (3rd dim of ice input arrays) 91 REAL(wp) :: ralb_im, ralb_sf, ralb_sm, ralb_if92 91 REAL(wp) :: zswitch, z1_c1, z1_c2 93 92 REAL(wp) :: zalb_sm, zalb_sf, zalb_st ! albedo of snow melting, freezing, total … … 100 99 101 100 IF( albd_init == 0 ) CALL albedo_init ! initialization 102 103 101 104 102 SELECT CASE ( nn_ice_alb ) … … 109 107 CASE( 0 ) 110 108 111 ralb_sf = 0.80 ! dry snow112 ralb_sm = 0.65 ! melting snow113 ralb_if = 0.72 ! bare frozen ice114 ralb_im = rn_albice ! bare puddled ice115 116 109 ! Computation of ice albedo (free of snow) 117 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb(:,:,:) = r alb_im118 ELSE WHERE ; zalb(:,:,:) = r alb_if110 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb(:,:,:) = rn_alb_imlt 111 ELSE WHERE ; zalb(:,:,:) = rn_alb_idry 119 112 END WHERE 120 113 … … 132 125 ! freezing snow 133 126 ! no effect of underlying ice layer IF snow thickness > c1. Albedo does not depend on snow thick if > c2 134 ! ! freezing snow135 127 zswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ( ph_snw(ji,jj,jl) - c1 ) ) ) 136 128 zalb_sf = ( 1._wp - zswitch ) * ( zalb_it(ji,jj,jl) & 137 & + ph_snw(ji,jj,jl) * ( r alb_sf- zalb_it(ji,jj,jl) ) / c1 ) &138 & + zswitch * r alb_sf129 & + ph_snw(ji,jj,jl) * ( rn_alb_sdry - zalb_it(ji,jj,jl) ) / c1 ) & 130 & + zswitch * rn_alb_sdry 139 131 140 132 ! melting snow 141 133 ! no effect of underlying ice layer. Albedo does not depend on snow thick IF > c2 142 134 zswitch = MAX( 0._wp , SIGN( 1._wp , ph_snw(ji,jj,jl) - c2 ) ) 143 zalb_sm = ( 1._wp - zswitch ) * ( r alb_im + ph_snw(ji,jj,jl) * ( ralb_sm - ralb_im) / c2 ) &144 & + zswitch * r alb_sm135 zalb_sm = ( 1._wp - zswitch ) * ( rn_alb_imlt + ph_snw(ji,jj,jl) * ( rn_alb_smlt - rn_alb_imlt ) / c2 ) & 136 & + zswitch * rn_alb_smlt 145 137 ! 146 138 ! snow albedo … … 163 155 CASE( 1 ) 164 156 165 ralb_im = rn_albice ! bare puddled ice166 157 ! compilation of values from literature 167 ralb_sf= 0.85 ! dry snow168 ralb_sm= 0.75 ! melting snow169 ralb_if= 0.60 ! bare frozen ice158 ! rn_alb_sdry = 0.85 ! dry snow 159 ! rn_alb_smlt = 0.75 ! melting snow 160 ! rn_alb_idry = 0.60 ! bare frozen ice 170 161 ! Perovich et al 2002 (Sheba) => the only dataset for which all types of ice/snow were retrieved 171 ! ralb_sf = 0.85! dry snow172 ! ralb_sm = 0.72! melting snow173 ! ralb_if = 0.65! bare frozen ice162 ! rn_alb_sdry = 0.85 ! dry snow 163 ! rn_alb_smlt = 0.72 ! melting snow 164 ! rn_alb_idry = 0.65 ! bare frozen ice 174 165 ! Brandt et al 2005 (East Antarctica) 175 ! ralb_sf= 0.87 ! dry snow176 ! ralb_sm= 0.82 ! melting snow177 ! ralb_if= 0.54 ! bare frozen ice166 ! rn_alb_sdry = 0.87 ! dry snow 167 ! rn_alb_smlt = 0.82 ! melting snow 168 ! rn_alb_idry = 0.54 ! bare frozen ice 178 169 ! 179 170 ! Computation of ice albedo (free of snow) 180 171 z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) ) 181 172 z1_c2 = 1. / 0.05 182 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb = r alb_im183 ELSE WHERE ; zalb = r alb_if173 WHERE ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice ) ; zalb = rn_alb_imlt 174 ELSE WHERE ; zalb = rn_alb_idry 184 175 END WHERE 185 176 … … 196 187 DO jj = 1, jpj 197 188 DO ji = 1, jpi 198 zalb_sf = r alb_sf - ( ralb_sf- zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c1 );199 zalb_sm = r alb_sm - ( ralb_sm- zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c2 );200 201 189 zalb_sf = rn_alb_sdry - ( rn_alb_sdry - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c1 ); 190 zalb_sm = rn_alb_smlt - ( rn_alb_smlt - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c2 ); 191 192 ! snow albedo 202 193 zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) ) 203 194 zalb_st = zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf … … 248 239 !!---------------------------------------------------------------------- 249 240 INTEGER :: ios ! Local integer output status for namelist read 250 NAMELIST/namsbc_alb/ nn_ice_alb, rn_alb ice241 NAMELIST/namsbc_alb/ nn_ice_alb, rn_alb_sdry, rn_alb_smlt, rn_alb_idry , rn_alb_imlt 251 242 !!---------------------------------------------------------------------- 252 243 ! … … 267 258 WRITE(numout,*) '~~~~~~~' 268 259 WRITE(numout,*) ' Namelist namsbc_alb : albedo ' 269 WRITE(numout,*) ' choose the albedo parameterization nn_ice_alb = ', nn_ice_alb 270 WRITE(numout,*) ' albedo of bare puddled ice rn_albice = ', rn_albice 260 WRITE(numout,*) ' choose the albedo parameterization nn_ice_alb = ', nn_ice_alb 261 WRITE(numout,*) ' albedo of dry snow rn_alb_sdry = ', rn_alb_sdry 262 WRITE(numout,*) ' albedo of melting snow rn_alb_smlt = ', rn_alb_smlt 263 WRITE(numout,*) ' albedo of dry ice rn_alb_idry = ', rn_alb_idry 264 WRITE(numout,*) ' albedo of bare puddled ice rn_alb_imlt = ', rn_alb_imlt 271 265 ENDIF 272 266 !
Note: See TracChangeset
for help on using the changeset viewer.