da_tb_tl.inc

References to this file elsewhere.
1 subroutine da_tb_tl(ifreq,theta,p0,ta,gamma,sst,wv,hwv,u,alw,zcld,            &
2 !                  tbv,tbh,                                                  &
3                   TGL_p0,TGL_ta,TGL_gamma,TGL_sst,TGL_wv,                   &
4                   TGL_hwv,TGL_u,TGL_alw,TGL_zcld,TGL_tbv,TGL_tbh           )\
5 
6    !---------------------------------------------------------------------------
7    ! Purpose: TBD
8    ! Input  : TGL_p0,  TGL_ta,   TGL_gamma, TGL_sst, TGL_wv, TGL_hwv, TGL_u
9    !          TGL_alw, TGL_zcld
10    ! Output : TGL_tbv, TGL_tbh,  tbv,  tbh
11    ! ---------------------------------------------------------------------------
12 
13    implicit none
14 
15    integer, intent(in  ) :: ifreq
16    real   , intent(in  ) :: theta,p0,ta,gamma,sst,wv,hwv,u,alw,zcld
17    real   , intent(in  ) :: TGL_p0,TGL_ta,TGL_gamma,TGL_sst,TGL_wv,     &
18                              TGL_hwv,TGL_u,TGL_alw,TGL_zcld
19 !   real   , intent(in  ) :: tbv,tbh
20    real   , intent( out) :: TGL_tbv,TGL_tbh 
21 
22    real :: freq(4),ebiasv(4),ebiash(4),cf1(4),cf2(4),cg(4)
23 
24    real :: f,costhet,gx2,tbup,tbdn,tauatm,sigma,remv,remh
25    real :: effangv,effangh,tbdnv,dum,foam,emissv,emissh 
26    real :: refv,refh,semv,semh,scatv,scath,tbdnh
27    real :: TGL_gx2,TGL_tbup,TGL_tbdn,TGL_tauatm,TGL_sigma
28    real :: TGL_remh,TGL_effangv,TGL_effangh
29    ! real :: TGL_tremv
30    real :: TGL_tbdnh,TGL_dum,TGL_foam,TGL_emissv
31    real :: TGL_emissh,TGL_refv,TGL_refh,TGL_semv
32    real :: TGL_semh,TGL_scatv,TGL_scath,TGL_remv,TGL_tbdnv
33    real :: TGL_theta
34 
35    real :: fem
36 
37    data freq/19.35,22.235,37.0,85.5/
38 
39    ! empirical bias corrections for surface emissivity
40 
41    data ebiasv/0.0095, 0.005,-0.014, -0.0010/
42    data ebiash/0.004,   0.0,-0.023, 0.043/
43 
44    data cf1/0.0015,0.004,0.0027,0.005/
45    data cg/4.50e-3, 5.200e-3, 5.5e-3, 7.2e-3 /
46 
47    data cf2/0.0023,0.000,0.0002,-0.006/
48 
49    ! 'foam' emissivity
50    data fem /1.0/
51 
52    f = freq(ifreq)
53    costhet = cos(theta*0.017453)
54 
55    ! effective surface slope variance
56 
57    gx2 = cg(ifreq)*    u
58    TGL_gx2 = cg(ifreq)*TGL_u
59 
60    ! get upwelling atmospheric brightness temperature
61 
62    TGL_theta=0.
63    call da_tbatmos_tl(ifreq,theta,p0,wv,hwv,ta,gamma,alw,zcld, &
64                        tbup,tbdn,tauatm,                        &
65                        TGL_theta,TGL_p0,TGL_wv,TGL_hwv,TGL_ta,TGL_gamma,  &
66                        TGL_alw,TGL_zcld,TGL_tbup,TGL_tbdn,      &
67                        TGL_tauatm                              )
68 
69    ! convert transmittance to optical depth
70 
71    sigma = -alog(tauatm)*costhet
72    TGL_sigma = -costhet*TGL_tauatm/tauatm
73 
74    ! get rough surface emissivity
75 
76    call da_roughem_tl(ifreq,gx2,sst,theta,remv,remh,         &
77                        TGL_gx2,TGL_sst,TGL_remv,TGL_remh     )
78 
79    ! get effective zenith angles for scattered radiation at surface
80 
81    call da_effang_tl(ifreq,theta,gx2,sigma,effangv,effangh,    &
82                       TGL_gx2,TGL_sigma,TGL_effangv,TGL_effangh)
83 
84    ! get effective sky brightness temperatures for scattered radiation
85 
86    call da_tbatmos_tl(ifreq,effangv,p0,wv,hwv,ta,gamma,alw,    &
87                        zcld,dum,tbdnv,dum,                      &
88                        TGL_effangv,TGL_p0,TGL_wv,TGL_hwv,       &
89                        TGL_ta,TGL_gamma,TGL_alw,TGL_zcld,       & 
90                        TGL_dum,TGL_tbdnv,TGL_dum               )
91 
92    call da_tbatmos_tl(ifreq,effangh,p0,wv,hwv,ta,gamma,alw,    &
93                        zcld,dum,tbdnh,dum,                      &
94                        TGL_effangh,TGL_p0,TGL_wv,TGL_hwv,       &
95                        TGL_ta,TGL_gamma,TGL_alw,TGL_zcld,       &
96                        TGL_dum,TGL_tbdnh,TGL_dum               )
97 
98    ! compute 'foam' coverage
99 
100    foam = cf1(ifreq)*    u
101    TGL_foam = cf1(ifreq)*TGL_u
102 
103    if (u .gt. 5.0) then
104       TGL_foam = TGL_foam + cf2(ifreq)*TGL_u
105       foam =     foam + cf2(ifreq)*(  u-5.0)
106    end if
107 
108    ! compute surface emissivities and reflectivity
109 
110    emissv     =     foam*fem + (1.0 - foam)*(remv + ebiasv(ifreq))
111    TGL_emissv = TGL_foam*fem - TGL_foam*(remv + ebiasv(ifreq)) &
112                                 + (1.0 - foam)*TGL_remv
113    emissh     =     foam*fem + (1.0 - foam)*(remh + ebiash(ifreq))
114    TGL_emissh = TGL_foam*fem - TGL_foam*(remh + ebiash(ifreq)) &
115                                 + (1.0 - foam)*TGL_remh
116    refv     =   1.0 - emissv
117    TGL_refv = - TGL_emissv
118    refh     =   1.0 - emissh
119    TGL_refh = - TGL_emissh
120 
121    ! compute surface emission term
122 
123    semv     = sst*emissv
124    TGL_semv = TGL_sst*emissv + sst*TGL_emissv
125    semh     = sst*emissh
126    TGL_semh = TGL_sst*emissh + sst*TGL_emissh
127 
128    ! compute surface scattering term
129 
130    scatv     = refv*tbdnv
131    TGL_scatv = TGL_refv*tbdnv + refv*TGL_tbdnv
132    scath     = refh*tbdnh
133    TGL_scath = TGL_refh*tbdnh + refh*TGL_tbdnh
134 
135    ! combine to get space-observed brightness temperature
136 
137    ! tbv     =     tbup + tauatm*(semv + scatv)
138    TGL_tbv = TGL_tbup + TGL_tauatm*(semv + scatv)   &
139                          + tauatm*(TGL_semv + TGL_scatv)
140    ! tbh     =     tbup + tauatm*(semh + scath)
141    TGL_tbh = TGL_tbup + TGL_tauatm*(semh + scath)   &
142                          + tauatm*(TGL_semh + TGL_scath)
143 
144 end subroutine da_tb_tl
145 
146