50 REAL(fp),
PARAMETER ::
zero = 0.0_fp
51 REAL(fp),
PARAMETER ::
point1 = 0.1_fp
52 REAL(fp),
PARAMETER ::
point5 = 0.5_fp
53 REAL(fp),
PARAMETER ::
one = 1.0_fp
54 REAL(fp),
PARAMETER ::
two = 2.0_fp
55 REAL(fp),
PARAMETER ::
three = 3.0_fp
56 REAL(fp),
PARAMETER ::
four = 4.0_fp
57 REAL(fp),
PARAMETER ::
pi = 3.141592653589793238462643_fp
175 Soil_Moisture_Content, & ! Input
176 Vegetation_Fraction, & ! Input
177 Soil_Temperature, & ! Input
181 Vegetation_Type, & ! Input
182 Snow_Depth, & ! Input
183 Emissivity_H, & ! Output
186 REAL(fp),
intent(in) :: angle
187 REAL(fp),
intent(in) :: frequency
188 REAL(fp),
intent(in) :: soil_moisture_content
189 REAL(fp),
intent(in) :: vegetation_fraction
190 REAL(fp),
intent(in) :: soil_temperature
191 REAL(fp),
intent(in) :: t_skin
192 REAL(fp),
intent(in) :: lai
193 INTEGER,
intent(in) :: soil_type
194 INTEGER,
intent(in) :: vegetation_type
195 REAL(fp),
intent(in) :: snow_depth
196 REAL(fp),
intent(out):: emissivity_v,emissivity_h
198 REAL(fp),
PARAMETER :: snow_depth_c = 10.0_fp
199 REAL(fp),
PARAMETER :: tsoilc_undersnow = 280.0_fp
200 REAL(fp),
PARAMETER :: rhos = 2.65_fp
201 REAL(fp) :: sand, clay, rhob
202 REAL(fp),
PARAMETER,
dimension(0:9) :: frac_sand = (/ 0.80_fp, &
203 0.92_fp, 0.10_fp, 0.20_fp, 0.51_fp, 0.50_fp, &
204 0.35_fp, 0.60_fp, 0.42_fp, 0.92_fp /)
205 REAL(fp),
PARAMETER,
dimension(0:9) :: frac_clay = (/ 0.20_fp, &
206 0.06_fp, 0.34_fp, 0.63_fp, 0.14_fp, 0.43_fp, &
207 0.34_fp, 0.28_fp, 0.085_fp, 0.06_fp /)
208 REAL(fp),
PARAMETER,
dimension(0:9) :: rhob_soil = (/ 1.48_fp, &
209 1.68_fp, 1.27_fp, 1.21_fp, 1.48_fp, 1.31_fp, &
210 1.32_fp, 1.40_fp, 1.54_fp, 1.68_fp /)
212 REAL(fp),
PARAMETER,
dimension(0:13) :: veg_rho = (/ 0.33_fp, &
213 0.40_fp, 0.40_fp, 0.40_fp, 0.40_fp, 0.40_fp, &
214 0.25_fp, 0.25_fp, 0.40_fp, 0.40_fp, 0.40_fp, &
215 0.40_fp, 0.33_fp, 0.33_fp /)
217 REAL(fp),
PARAMETER,
dimension(0:13) :: veg_mge = (/ 0.50_fp, &
218 0.45_fp, 0.45_fp, 0.45_fp, 0.40_fp, 0.40_fp, &
219 0.30_fp, 0.35_fp, 0.30_fp, 0.30_fp, 0.40_fp, &
220 0.30_fp, 0.50_fp, 0.40_fp /)
222 REAL(fp),
PARAMETER,
dimension(0:13) :: lai_min = (/ 0.52_fp, &
223 3.08_fp, 1.85_fp, 2.80_fp, 5.00_fp, 1.00_fp, &
224 0.50_fp, 0.52_fp, 0.60_fp, 0.50_fp, 0.60_fp, &
225 0.10_fp, 1.56_fp, 0.01_fp /)
226 REAL(fp),
PARAMETER,
dimension(0:13) :: lai_max = (/ 2.90_fp, &
227 6.48_fp, 3.31_fp, 5.50_fp, 6.40_fp, 5.16_fp, &
228 3.66_fp, 2.90_fp, 2.60_fp, 3.66_fp, 2.60_fp, &
229 0.75_fp, 5.68_fp, 0.01_fp /)
231 REAL(fp),
PARAMETER,
dimension(0:13) :: leaf_th = (/ 0.07_fp, &
232 0.18_fp, 0.18_fp, 0.18_fp, 0.18_fp, 0.18_fp, &
233 0.12_fp, 0.12_fp, 0.12_fp, 0.12_fp, 0.12_fp, &
234 0.12_fp, 0.15_fp, 0.12_fp /)
236 REAL(fp) :: mv,veg_frac,theta,theta_i,theta_t,mu,r21_h,r21_v,r23_h,r23_v, &
237 t21_v,t21_h,gv,gh,ssalb_h,ssalb_v,tau_h,tau_v,mge, &
238 leaf_thick,rad,sigma,va,ep_real,ep_imag
240 REAL(fp) :: rhoveg, vlai
241 REAL(fp) :: local_snow_depth
242 COMPLEX(fp) :: esoil, eveg, esnow, eair
243 LOGICAL :: snowem_physical_model
246 theta = angle*
pi/180.0_fp
250 mv = soil_moisture_content
251 veg_frac = vegetation_fraction
252 t_soil = soil_temperature
253 sand = frac_sand(soil_type)
254 clay = frac_clay(soil_type )
255 rhob = rhob_soil(soil_type )
256 local_snow_depth = snow_depth
259 if ( (t_soil <= 100.0_fp .OR. t_soil >= 350.0_fp) .AND. &
260 (t_skin >= 100.0_fp .AND. t_skin <= 350.0_fp) ) t_soil = t_skin
266 IF (local_snow_depth >
point1)
THEN 271 snowem_physical_model = .true.
272 if (local_snow_depth > snow_depth_c) snowem_physical_model = .false.
275 IF ( snowem_physical_model )
THEN 282 local_snow_depth =
min(local_snow_depth,1000.0_fp)
286 va = 0.4_fp + 0.0004_fp*local_snow_depth
293 t_soil =
min(t_soil,tsoilc_undersnow)
295 CALL snow_diel(frequency, ep_real, ep_imag, rad, va, esnow)
296 CALL soil_diel(frequency, t_soil, mv, rhob, rhos, sand, clay, esoil)
298 theta_i = asin(
REAL(SIN(theta)*SQRT(eair)/SQRT(esnow),
fp))
300 CALL reflectance(esnow, eair, theta_i, theta, r21_v, r21_h)
301 CALL transmittance(esnow, eair, theta_i, theta, t21_v, t21_h)
304 theta_t = asin(
REAL(SIN(theta_i)*SQRT(esnow)/SQRT(esoil),
fp))
306 CALL reflectance(esnow, esoil, theta_i, theta_t, r23_v, r23_h)
308 CALL snow_optic(frequency,rad,local_snow_depth,va,ep_real, ep_imag,gv,gh,&
309 ssalb_v,ssalb_h,tau_v,tau_h)
311 r21_h,r21_v,r23_h,r23_v,t21_v,t21_h,emissivity_v,emissivity_h, &
312 frequency, t_soil, t_skin)
315 CALL snowem_default(frequency,t_skin, local_snow_depth,emissivity_v,emissivity_h)
332 mge = veg_mge(vegetation_type)
333 rhoveg = veg_rho(vegetation_type)
334 leaf_thick = leaf_th(vegetation_type)
341 CALL soil_diel(frequency, t_soil, mv, rhob, rhos, sand, clay, esoil)
342 theta_t = asin(
REAL(SIN(theta)*SQRT(eair)/SQRT(esoil),
fp))
343 CALL reflectance(eair, esoil, theta, theta_t, r23_v, r23_h)
346 CALL canopy_optic(vlai,frequency,theta,eveg,leaf_thick,gv,gh,ssalb_v,ssalb_h,tau_v,tau_h)
348 r21_h,r21_v,r23_h,r23_v,t21_v,t21_h,emissivity_v,emissivity_h, &
349 frequency, t_soil, t_skin)
366 subroutine snowem_default(frequency,ts, depth,Emissivity_V,Emissivity_H)
394 REAL(fp) :: frequency,ts, depth,Emissivity_V,Emissivity_H
396 INTEGER ,
PARAMETER :: new = 7
397 INTEGER ,
PARAMETER :: NFRESH_SHALLOW_SNOW = 1
398 INTEGER ,
PARAMETER :: NPOWDER_SNOW = 2
399 INTEGER ,
PARAMETER :: NWET_SNOW = 3
400 INTEGER ,
PARAMETER :: NDEEP_SNOW = 4
401 REAL(fp),
PARAMETER :: twet = 270.0_fp
402 REAL(fp),
PARAMETER :: tcrust = 235.0_fp
403 REAL(fp),
PARAMETER :: depth_s = 50.0_fp
404 REAL(fp),
PARAMETER :: depth_c = 100.0_fp
406 INTEGER :: ich,basic_snow_type
407 REAL(fp),
DIMENSION(new) :: ev, eh, freq
414 basic_snow_type = nfresh_shallow_snow
415 if (ts >= twet .and. depth <= depth_s)
then 416 basic_snow_type = nwet_snow
418 if (depth <= depth_s)
then 419 basic_snow_type = nfresh_shallow_snow
421 basic_snow_type = npowder_snow
424 if (ts <= tcrust .and. depth >= depth_c) basic_snow_type = ndeep_snow
427 SELECT CASE (basic_snow_type)
428 CASE (nfresh_shallow_snow)
443 if (frequency <= freq(1))
then 448 if (frequency >= freq(new))
then 449 emissivity_h = eh(new)
450 emissivity_v = ev(new)
455 channel_loop:
do ich=2,new
456 if (frequency <= freq(ich))
then 457 df = frequency-freq(ich-1)
458 df0 = freq(ich)-freq(ich-1)
459 emissivity_h = eh(ich-1) + (df*(eh(ich)-eh(ich-1))/df0)
460 emissivity_v = ev(ich-1) + (df*(ev(ich)-ev(ich-1))/df0)
468 subroutine canopy_optic(vlai,frequency,theta,esv,d,gv,gh,&
469 ssalb_v,ssalb_h,tau_v, tau_h)
507 REAL(fp) :: frequency,theta,d,vlai,ssalb_v,ssalb_h,tau_v,tau_h,gv, gh, mu
508 COMPLEX(fp) :: ix,k0,kz0,kz1,rhc,rvc,esv,expval1,factt,factrvc,factrhc
509 REAL(fp) :: rh,rv,th,tv
510 REAL(fp),
PARAMETER :: threshold = 0.999_fp
517 kz1 = k0*sqrt(esv - sin(theta)**2)
519 rhc = (kz0 - kz1)/(kz0 + kz1)
520 rvc = (esv*kz0 - kz1)/(esv*kz0 + kz1)
522 expval1 = exp(-
two*ix*kz1*d)
523 factrvc =
one-rvc**2*expval1
524 factrhc =
one-rhc**2*expval1
525 factt =
four*kz0*kz1*exp(ix*(kz0-kz1)*d)
527 rv = abs(rvc*(
one - expval1)/factrvc)**2
528 rh = abs(rhc*(
one - expval1)/factrhc)**2
530 th = abs(factt/((kz1+kz0)**2*factrhc))**2
531 tv = abs(esv*factt/((kz1+esv*kz0)**2*factrvc))**2
539 ssalb_v =
min((rv+rh)/(
two-tv-th),threshold)
545 subroutine snow_optic(frequency,a,h,f,ep_real,ep_imag,gv,gh, ssalb_v,ssalb_h,tau_v,tau_h)
589 REAL(fp) :: yr,yi,ep_real,ep_imag
590 REAL(fp) :: frequency,a,h,f,ssalb_v,ssalb_h,tau_v,tau_h,gv,gh,k
591 REAL(fp) :: ks1,ks2,ks3,ks,kr1,kr2,kr3,kr,ki1,ki2,ki3,ki
592 REAL(fp) :: fact1,fact2,fact3,fact4,fact5
594 k =
twopi/(300._fp/frequency)
596 yr = (ep_real -
one)/(ep_real +
two)
597 yi = -ep_imag/(ep_real +
two)
605 ks1 = k*sqrt(fact2/fact5)
606 ks2 = fact4*fact3/fact1
612 kr3 =
two*yi*yr/(fact2**3)
613 kr = k*sqrt(kr1+kr2*kr3)
615 ki1 =
three*f*yi/fact2**2
618 ki = k**2/(
two*kr)*(ki1+ki2*ki3)
623 ssalb_v =
min(ks/ki, 0.999_fp)
631 subroutine soil_diel(freq,t_soil,vmc,rhob,rhos,sand,clay,esm)
675 REAL(fp) :: f,tauw,freq,t_soil,vmc,rhob,rhos,sand,clay
676 REAL(fp) :: alpha,beta,ess,rhoef,t,eswi,eswo
678 COMPLEX(fp) :: esm,esw,es1,es2
681 beta = 1.09_fp - 0.11_fp*sand + 0.18_fp*clay
682 ess = (1.01_fp + 0.44_fp*rhos)**2 - 0.062_fp
683 rhoef = -1.645_fp + 1.939_fp*rhob - 0.020213_fp*sand + 0.01594_fp*clay
684 t = t_soil - 273.0_fp
694 eswo = 87.134_fp+(-1.949e-1_fp+(-1.276e-2_fp+2.491e-4_fp*t)*t)*t
695 tauw = 1.1109e-10_fp+(-3.824e-12_fp+(6.938e-14_fp-5.096e-16_fp*t)*t)*t
698 es1 = cmplx(eswi, -rhoef*(rhos-rhob)/(
twopi*f*esof*rhos*vmc),
fp)
700 es1 = cmplx(eswi,
zero,
fp)
703 es2 = cmplx(eswo-eswi,
zero,
fp)/cmplx(
one, f*tauw,
fp)
705 esm =
one + (ess**alpha -
one)*rhob/rhos + vmc**beta*esw**alpha - vmc
706 esm = esm**(
one/alpha)
708 if(aimag(esm) >=
zero) esm = cmplx(
REAL(esm,fp),-0.0001_fp, fp)
713 subroutine snow_diel(frequency,ep_real,ep_imag,rad,frac,ep_eff)
759 REAL(fp) :: ep_imag,ep_real
760 REAL(fp) :: frequency,rad,frac,k0,yr,yi
761 COMPLEX(fp) :: y,ep_r,ep_i,ep_eff,fracy
763 k0 =
twopi/(300.0_fp/frequency)
765 yr = (ep_real -
one)/(ep_real +
two)
766 yi = ep_imag/(ep_real +
two)
768 y = cmplx(yr, yi,
fp)
772 ep_i =
two*fracy*y*(k0*rad)**3*(
one-frac)**4/((
one-fracy)**2*(
one+
two*frac)**2)
775 if (aimag(ep_eff) >=
zero) ep_eff = cmplx(
REAL(ep_eff), -0.0001_fp, fp)
818 REAL(fp) :: frequency, mg, en, vf, vb
819 REAL(fp) :: rhoveg, vmv
820 COMPLEX(fp) :: esv, xx
822 vmv = mg*rhoveg/(
one - mg*(
one-rhoveg) )
823 en = 1.7_fp + (3.2_fp + 6.5_fp*vmv)*vmv
825 vf = vmv*(0.82_fp*vmv + 0.166_fp)
826 vb = 31.4_fp*vmv*vmv/(
one + 59.5_fp*vmv*vmv)
830 esv = en + vf*(4.9_fp + 75.0_fp/(
one + xx*frequency/18.0_fp)-xx*(18.0_fp/frequency)) + &
831 vb*(2.9_fp + 55.0_fp/(
one + sqrt(xx*frequency/0.18_fp)))
833 if (aimag(esv) >=
zero) esv = cmplx(
REAL(esv), -0.0001_fp, fp)
838 subroutine reflectance(em1, em2, theta_i, theta_t, rv, rh)
871 REAL(fp) :: theta_i, theta_t
872 REAL(fp) :: rh, rv,cos_i,cos_t
873 COMPLEX(fp) :: em1, em2, m1, m2, angle_i, angle_t
880 angle_i = cmplx(cos_i,
zero,
fp)
881 angle_t = cmplx(cos_t,
zero,
fp)
886 rv = (abs((m1*angle_t-m2*angle_i)/(m1*angle_t+m2*angle_i)))**2
887 rh = (abs((m1*angle_i-m2*angle_t)/(m1*angle_i+m2*angle_t)))**2
926 REAL(fp) :: theta_i, theta_t
927 REAL(fp) :: th, tv, rr, cos_i,cos_t
928 COMPLEX(fp) :: em1, em2, m1, m2, angle_i, angle_t
935 angle_i = cmplx(cos_i,
zero,
fp)
936 angle_t = cmplx(cos_t,
zero,
fp)
941 rr = abs(m2/m1)*cos_t/cos_i
942 tv = rr*(abs(
two*m1*angle_i/(m1*angle_t + m2*angle_i)))**2
943 th = rr*(abs(
two*m1*angle_i/(m1*angle_i + m2*angle_t)))**2
999 REAL(fp) :: frequency
1000 REAL(fp) :: q, rh, rv, rh_s, rv_s, sigma
1004 q = 0.35_fp*(
one - exp(-0.60_fp*frequency*sigma**
two))
1005 rh = rh_s + q*(rv_s-rh_s)
1006 rv = rv_s + q*(rh_s-rv_s)
1012 r21_h,r21_v,r23_h,r23_v,t21_v,t21_h,esv,esh,frequency,t_soil,t_skin)
1071 REAL(fp) :: mu, gv, gh, ssalb_h, ssalb_v, tau_h,tau_v, &
1072 r21_h, r21_v, r23_h, r23_v, t21_v, t21_h, esv, esh
1073 REAL(fp) :: alfa_v, alfa_h, kk_h, kk_v, gamma_h, gamma_v, beta_v, beta_h
1074 REAL(fp) :: fact1,fact2
1075 REAL(fp) :: frequency, t_soil, t_skin
1076 REAL(fp) :: gsect0, gsect1_h, gsect1_v, gsect2_h, gsect2_v
1078 alfa_h = sqrt((
one - ssalb_h)/(
one - gh*ssalb_h))
1079 kk_h = sqrt((
one - ssalb_h)*(
one - gh*ssalb_h))/mu
1080 beta_h = (
one - alfa_h)/(
one + alfa_h)
1081 gamma_h = (beta_h -r23_h)/(
one-beta_h*r23_h)
1083 alfa_v = sqrt((
one-ssalb_v)/(
one - gv*ssalb_v))
1084 kk_v = sqrt((
one-ssalb_v)*(
one - gv*ssalb_v))/mu
1085 beta_v = (
one - alfa_v)/(
one + alfa_v)
1086 gamma_v = (beta_v -r23_v)/(
one-beta_v*r23_v)
1088 fact1=gamma_h*exp(-
two*kk_h*tau_h)
1089 fact2=gamma_v*exp(-
two*kk_v*tau_v)
1091 gsect0 =(exp(
c_2*frequency/t_skin) -
one)/(exp(
c_2*frequency/t_soil) -
one)
1093 gsect1_h=(
one-r23_h)*(gsect0-
one)
1094 gsect2_h=((
one-beta_h*beta_h)/(
one-beta_h*r23_h))*exp(-kk_h*tau_h)
1096 gsect1_v=(
one-r23_v)*(gsect0-
one)
1097 gsect2_v=((
one-beta_v*beta_v)/(
one-beta_v*r23_v))*exp(-kk_h*tau_v)
1099 esh = t21_h*((
one - beta_h)*(
one + fact1)+gsect1_h*gsect2_h) /(
one-beta_h*r21_h-(beta_h-r21_h)*fact1)
1100 esv = t21_v*((
one - beta_v)*(
one + fact2)+gsect1_v*gsect2_v) /(
one-beta_v*r21_v-(beta_v-r21_v)*fact2)
real(fp), parameter, public half
subroutine transmittance(em1, em2, theta_i, theta_t, tv, th)
real(fp), dimension(n_freq_amsre), parameter, public wet_snow_ev_amsre
real(fp), parameter, public zero
real(fp), parameter, public four
integer, parameter, public fp
real(fp), dimension(n_freq_amsre), parameter, public frequency_amsre
real(fp), parameter, public three
subroutine, public nesdis_landem(Angle, Frequency, Soil_Moisture_Content, Vegetation_Fraction, Soil_Temperature, t_skin, Lai, Soil_Type, Vegetation_Type, Snow_Depth, Emissivity_H, Emissivity_V)
real(fp), dimension(n_freq_amsre), parameter, public deep_snow_ev_amsre
real(fp), parameter, public point5
subroutine snowem_default(frequency, ts, depth, Emissivity_V, Emissivity_H)
real(fp), dimension(n_freq_amsre), parameter, public wet_snow_eh_amsre
real(fp), dimension(n_freq_amsre), parameter, public grass_after_snow_ev_amsre
real(fp), parameter, public c_2
subroutine soil_diel(freq, t_soil, vmc, rhob, rhos, sand, clay, esm)
subroutine two_stream_solution(mu, gv, gh, ssalb_h, ssalb_v, tau_h, tau_v, r21_h, r21_v, r23_h, r23_v, t21_v, t21_h, esv, esh, frequency, t_soil, t_skin)
real(fp), parameter, public emissh_default
real(fp), parameter, public one
real(fp), parameter, public twopi
subroutine roughness_reflectance(frequency, sigma, rv, rh)
subroutine canopy_diel(frequency, mg, esv, rhoveg)
real(fp), parameter, public two
subroutine canopy_optic(vlai, frequency, theta, esv, d, gv, gh, ssalb_v, ssalb_h, tau_v, tau_h)
real(fp), dimension(n_freq_amsre), parameter, public grass_after_snow_eh_amsre
real(fp), dimension(n_freq_amsre), parameter, public powder_snow_ev_amsre
real(fp), parameter, public point1
real(fp), parameter, public one_tenth
real(fp), dimension(n_freq_amsre), parameter, public powder_snow_eh_amsre
real(fp), dimension(n_freq_amsre), parameter, public deep_snow_eh_amsre
subroutine reflectance(em1, em2, theta_i, theta_t, rv, rh)
subroutine snow_diel(frequency, ep_real, ep_imag, rad, frac, ep_eff)
subroutine snow_optic(frequency, a, h, f, ep_real, ep_imag, gv, gh, ssalb_v, ssalb_h, tau_v, tau_h)
real(fp), parameter, public emissv_default
real(fp), parameter, public pi