1 subroutine iceem_amsu(theta,frequency,depth,ts,tba,tbb,esv,esh)
3 !$$$ subprogram documentation block
5 ! subprogram: iceem_amsua noaa/nesdis emissivity model over ice for AMSU-A/B
7 ! prgmmr: Banghua Yan org: nesdis date: 2004-03-01
10 ! abstract: noaa/nesdis emissivity model to compute microwave emissivity over
14 ! Yan, B., F. Weng and K.Okamoto,2004:
15 ! "A microwave snow emissivity model, submitted to TGRS
17 ! version: beta (sea ice type is to be determined)
19 ! program history log:
20 ! 2004-01-01 yan,b - implement the algorithm for the ice emissivity
21 ! 2004-03-01 yan,b - modify the code for SSI
22 ! 2004-07-23 okamoto - modify the code for GSI
24 ! input argument list:
25 ! theta - local zenith angle in radian
26 ! frequency - frequency in GHz
27 ! ts - surface temperature (K) (GDAS)
28 ! depth - scatter medium depth (mm) (not used here) (GDAS) !
29 ! tba[1] ~ tba[4] - brightness temperature at four AMSU-A window channels
34 ! tbb[1] ~ tbb[2] - brightness temperature at two AMSU-B window channels:
37 ! When tba[ ] or tbb[ ] = -999.9, it means a missing value (no available data)
39 ! output argument list:
40 ! em_vector - esv, esh
41 ! esv : emissivity at vertical polarization
42 ! esh : emissivity at horizontal polarization
43 ! sea ice_type (to be determined)
47 ! Questions/comments: Please send to Fuzhong.Weng@noaa.gov and Banghua.Yan@noaa.gov
51 ! machine: ibm rs/6000 sp
55 ! use kinds, only: r_kind,i_kind
56 ! use constants, only: zero, one
59 integer(i_kind) :: nch,nwcha,nwchb,nwch,nalg
60 Parameter(nwcha = 4, nwchb = 2, nwch = 5,nalg = 7)
61 real(r_kind) :: theta,frequency,depth,ts
62 real(r_kind) :: em_vector(2),esv,esh
63 real(r_kind) :: tb(nwch),tba(nwcha),tbb(nwchb)
64 logical :: INDATA(nalg),AMSUAB,AMSUA,AMSUB,ABTs,ATs,BTs,MODL
65 integer(i_kind) :: seaice_type,input_type,i,ich,np,k
67 Equivalence(INDATA(1), ABTs)
68 Equivalence(INDATA(2), ATs)
69 Equivalence(INDATA(3), AMSUAB)
70 Equivalence(INDATA(4), AMSUA)
71 Equivalence(INDATA(5), BTs)
72 Equivalence(INDATA(6), AMSUB)
73 Equivalence(INDATA(7), MODL)
77 em_vector(1) = 0.85_r_kind
78 em_vector(2) = 0.82_r_kind
85 ! Read AMSU & Ts data and set available option
86 ! Get five AMSU-A/B window measurements
87 tb(1) = tba(1); tb(2) = tba(2); tb(3) = tba(3)
88 tb(4) = tba(4); tb(5) = tbb(2)
90 ! Check available data
91 if((ts <= 100.0_r_kind) .or. (ts >= 320.0_r_kind) ) then
92 ABTs = .false.; ATs = .false.; BTs = .false.; MODL = .false.
95 if((tba(i) <= 100.0_r_kind) .or. (tba(i) >= 320.0_r_kind) ) then
96 ABTs = .false.; ATs = .false.; AMSUAB = .false.; AMSUA = .false.
101 if((tbb(i) <= 100.0_r_kind) .or. (tbb(i) >= 320.0_r_kind) ) then
102 ABTs = .false.; AMSUAB = .false.; BTs = .false.; AMSUB = .false.
106 if((depth < zero) .or. (depth >= 3000.0_r_kind)) MODL = .false.
107 if((frequency >= 80.0_r_kind) .and. (BTs)) then
108 ATs = .false.; AMSUAB = .false.
111 ! Check input type and call a specific Option/subroutine
119 GET_option: SELECT CASE (input_type)
121 ! call siem_abts(theta,frequency,tb,ts,seaice_type,em_vector)
123 call siem_ats(theta,frequency,tba,ts,seaice_type,em_vector)
125 ! call siem_ab(theta,frequency,tb,seaice_type,em_vector)
127 ! call siem_amsua(theta,frequency,tba,seaice_type,em_vector)
129 call siem_bts(theta,frequency,tbb,ts,seaice_type,em_vector)
131 ! call siem_amsub(theta,frequency,tbb,seaice_type,em_vector)
133 ! call siem_default(theta,frequency,depth,ts,seaice_type,em_vector)
134 END SELECT GET_option
136 if (em_vector(1) > one) em_vector(1) = one
137 if (em_vector(2) > one) em_vector(2) = one
138 if (em_vector(1) < 0.6_r_kind) em_vector(1) = 0.6_r_kind
139 if (em_vector(2) < 0.6_r_kind) em_vector(2) = 0.6_r_kind
143 end subroutine iceem_amsu