54 SUBROUTINE crtm_emission(n_Layers, & ! Input number of atmospheric layers
55 n_Angles, & ! number angles used in SfcOptics
56 Diffuse_Surface, & ! Input TRUE: Lambertian, FALSE: specular
57 u, & ! Input cosine of local viewing angle
58 T_OD, & ! Input nadir layer optical depth
59 Planck_Atmosphere, & ! Input atmospheric layer Planck radiance
60 Planck_Surface, & ! Input surface Planck radiance
61 emissivity, & ! Input surface emissivity
62 reflectivity, & ! Input surface reflectivity matrix
63 direct_reflectivity, & ! Input reflectivity for direct irradiance
64 cosmic_background, & ! Input cosmic background radiance
65 Solar_irradiance, & ! Input Solar spectral irradiance
66 Is_Solar_Channel, & ! Input Indicate solar affected channel
67 Source_Zenith_Radian, & ! Input Point source (e.g. solar) zenith angle
86 INTEGER,
INTENT(IN) :: n_layers
87 INTEGER,
INTENT(IN) :: n_angles
88 LOGICAL,
INTENT(IN) :: diffuse_surface
89 REAL(fp),
INTENT(IN) :: u
90 REAL(fp),
DIMENSION(:),
INTENT(IN) :: t_od
91 REAL(fp),
DIMENSION(0:),
INTENT(IN) :: planck_atmosphere
92 REAL(fp),
INTENT(IN) :: planck_surface
93 REAL(fp),
DIMENSION(:),
INTENT(IN) :: emissivity
94 REAL(fp),
DIMENSION(:,:),
INTENT(IN) :: reflectivity
95 REAL(fp),
DIMENSION(:),
INTENT(IN) :: direct_reflectivity
96 REAL(fp),
INTENT(IN) :: cosmic_background
97 REAL(fp),
INTENT(IN) :: solar_irradiance
98 LOGICAL,
INTENT(IN) :: is_solar_channel
99 REAL(fp),
INTENT(IN) :: source_zenith_radian
100 TYPE(
rtv_type),
INTENT(IN OUT) :: rtv
102 REAL(fp) :: layer_source_up, cosine_u0
109 IF( diffuse_surface )
THEN 112 rtv%Secant_Down_Angle =
one/u
116 rtv%e_Level_Rad_DOWN(0) = cosmic_background
122 rtv%Total_OD = rtv%Total_OD + t_od(k)
124 rtv%e_Layer_Trans_DOWN(k) = exp(-t_od(k)*rtv%Secant_Down_Angle)
126 rtv%e_Level_Rad_DOWN(k) = (rtv%e_Level_Rad_DOWN(k-1)*rtv%e_Layer_Trans_DOWN(k)) + &
127 (planck_atmosphere(k)*(
one-rtv%e_Layer_Trans_DOWN(k)))
129 rtv%e_Layer_Trans_UP(k) = exp(-t_od(k)/u)
132 rtv%e_Cloud_Radiance_UP(k) = rtv%e_Source_UP(k-1) + planck_atmosphere(k)*rtv%e_Level_Trans_UP(k-1)
133 rtv%e_Source_UP(k) = rtv%e_Source_UP(k-1)+rtv%e_Level_Trans_UP(k-1)*planck_atmosphere(k)*(
one-rtv%e_Layer_Trans_UP(k))
134 rtv%e_Level_Trans_UP(k) = rtv%e_Level_Trans_UP(k-1)*rtv%e_Layer_Trans_UP(k)
141 rtv%e_Level_Rad_UP(n_layers) = (emissivity(n_angles)*planck_surface) + &
142 (reflectivity(1,1)*rtv%e_Level_Rad_DOWN(n_layers))
145 rtv%Down_Solar_Radiance =
zero 146 IF( is_solar_channel )
THEN 147 cosine_u0 = cos(source_zenith_radian)
148 IF( cosine_u0 >
zero)
THEN 149 rtv%Down_Solar_Radiance = cosine_u0*exp(-rtv%Total_OD/cosine_u0)*solar_irradiance/
pi 150 rtv%e_Level_Rad_UP(n_layers) = rtv%e_Level_Rad_UP(n_layers) + &
151 (rtv%Down_Solar_Radiance*direct_reflectivity(1))
159 rtv%Up_Radiance =
zero 162 DO k = n_layers, 1, -1
166 layer_source_up = planck_atmosphere(k) * (
one - rtv%e_Layer_Trans_UP(k) )
168 rtv%e_Level_Rad_UP(k-1) = (rtv%e_Level_Rad_UP(k)*rtv%e_Layer_Trans_UP(k)) + &
171 rtv%Up_Radiance = (rtv%Up_Radiance*rtv%e_Layer_Trans_UP(k)) + layer_source_up
176 SUBROUTINE crtm_emission_tl(n_Layers, & ! Input number of atmospheric layers
177 n_Angles, & ! number angles used in SfcOptics
178 u, & ! Input cosine of local viewing angle
179 Planck_Atmosphere, & ! Input atmospheric layer Planck radiance
180 Planck_Surface, & ! Input surface Planck radiance
181 emissivity, & ! Input surface emissivity
182 reflectivity, & ! Input surface reflectivity matrix
183 direct_reflectivity, & ! Input reflectivity for direct irradiance
184 Solar_irradiance, & ! Input Solar spectral irradiance
185 Is_Solar_Channel, & ! Input Indicate solar affected channel
186 Source_Zenith_Radian, & ! Input Point source (e.g. solar) zenith angle
189 planck_atmosphere_tl, &
193 direct_reflectivity_tl, &
202 INTEGER,
INTENT(IN) :: n_layers, n_angles
203 LOGICAL,
INTENT(IN) :: is_solar_channel
204 REAL (fp),
INTENT(IN) :: solar_irradiance, source_zenith_radian
205 REAL (fp),
INTENT(IN),
DIMENSION( : ) :: emissivity,t_od_tl,emissivity_tl
206 REAL (fp),
INTENT(IN),
DIMENSION( :,: ) :: reflectivity ,reflectivity_tl
207 REAL (fp),
INTENT(IN),
DIMENSION( : ) :: direct_reflectivity,direct_reflectivity_tl
208 REAL (fp),
INTENT(IN),
DIMENSION( 0: ) :: planck_atmosphere,planck_atmosphere_tl
209 REAL (fp),
INTENT(IN) :: planck_surface,u,planck_surface_tl
210 REAL (fp),
INTENT(INOUT) :: up_rad_tl
215 REAL (fp) :: layer_source_up_tl, layer_source_down_tl,a_tl,down_rad_tl
216 REAL (fp) :: total_od, total_od_tl
218 REAL( fp) :: cosine_u0
227 total_od = rtv%Total_OD
231 total_od_tl = total_od_tl + t_od_tl(k)
232 a_tl = -t_od_tl(k) * rtv%Secant_Down_Angle
234 layer_source_down_tl = planck_atmosphere_tl(k) * (
one - rtv%e_Layer_Trans_DOWN(k) ) &
235 - planck_atmosphere(k) * rtv%e_Layer_Trans_DOWN(k) * a_tl
239 down_rad_tl = down_rad_tl*rtv%e_Layer_Trans_DOWN(k) &
240 +rtv%e_Level_Rad_DOWN(k-1)*rtv%e_Layer_Trans_DOWN(k)*a_tl+layer_source_down_tl
248 up_rad_tl =emissivity_tl(n_angles)*planck_surface+emissivity(n_angles)*planck_surface_tl &
249 +reflectivity_tl(1,1)*rtv%e_Level_Rad_DOWN(n_layers)+reflectivity(1,1)*down_rad_tl
252 IF( is_solar_channel )
THEN 253 cosine_u0 = cos(source_zenith_radian)
254 IF( cosine_u0 >
zero)
THEN 255 up_rad_tl = up_rad_tl + cosine_u0*solar_irradiance/
pi &
256 * direct_reflectivity_tl(1) * exp(-total_od/cosine_u0) &
257 - solar_irradiance/
pi * direct_reflectivity(1) &
258 * total_od_tl * exp(-total_od/cosine_u0)
266 DO k = n_layers, 1, -1
268 layer_source_up_tl = planck_atmosphere_tl(k) * (
one - rtv%e_Layer_Trans_UP(k) ) &
269 - planck_atmosphere(k) * rtv%e_Layer_Trans_UP(k) * a_tl
272 up_rad_tl=up_rad_tl*rtv%e_Layer_Trans_UP(k) &
273 +rtv%e_Level_Rad_UP(k)*rtv%e_Layer_Trans_UP(k)*a_tl+layer_source_up_tl
280 SUBROUTINE crtm_emission_ad(n_Layers, & ! Input number of atmospheric layers
281 n_Angles, & ! number angles used in SfcOptics
282 u, & ! Input cosine of local viewing angle
283 Planck_Atmosphere, & ! Input atmospheric layer Planck radiance
284 Planck_Surface, & ! Input surface Planck radiance
285 emissivity, & ! Input surface emissivity
286 reflectivity, & ! Input surface reflectivity matrix
287 direct_reflectivity, & ! Input surface reflectivity matrix
288 Solar_irradiance, & ! Input Solar spectral irradiance
289 Is_Solar_Channel, & ! Input Indicate solar affected channel
290 Source_Zenith_Radian, & ! Input Point source (e.g. solar) zenith angle
294 planck_atmosphere_ad, &
298 direct_reflectivity_ad)
306 INTEGER,
INTENT(IN) :: n_layers, n_angles
307 LOGICAL,
INTENT(IN) :: is_solar_channel
308 REAL (fp),
INTENT(IN) :: solar_irradiance, source_zenith_radian
309 REAL (fp),
INTENT(IN),
DIMENSION( : ) :: emissivity
310 REAL (fp),
INTENT(IN),
DIMENSION( :,: ) :: reflectivity
311 REAL (fp),
INTENT(IN),
DIMENSION( : ) :: direct_reflectivity
312 REAL (fp),
INTENT(IN),
DIMENSION( 0: ) :: planck_atmosphere
313 REAL (fp),
INTENT(IN) :: planck_surface,u
314 REAL (fp),
INTENT(IN) :: up_rad_ad_in
315 REAL (fp),
INTENT(IN OUT),
DIMENSION( : ) :: t_od_ad,emissivity_ad
316 REAL (fp),
INTENT(IN OUT),
DIMENSION( :,: ) :: reflectivity_ad
317 REAL (fp),
INTENT(IN OUT),
DIMENSION( : ) :: direct_reflectivity_ad
318 REAL (fp),
INTENT(IN OUT),
DIMENSION( 0: ) :: planck_atmosphere_ad
319 REAL (fp),
INTENT(IN OUT) :: planck_surface_ad
322 REAL (fp) :: layer_source_up_ad, layer_source_down_ad,a_ad,down_rad_ad
323 REAL (fp) :: cosine_u0, up_rad_ad, total_od, total_od_ad
329 planck_atmosphere_ad =
zero 330 planck_surface_ad =
zero 332 reflectivity_ad =
zero 333 direct_reflectivity_ad =
zero 334 up_rad_ad = up_rad_ad_in
337 total_od = rtv%Total_OD
344 a_ad = rtv%e_Level_Rad_UP(k)*rtv%e_Layer_Trans_UP(k)*up_rad_ad
345 layer_source_up_ad = up_rad_ad
346 up_rad_ad = up_rad_ad * rtv%e_Layer_Trans_UP(k)
348 planck_atmosphere_ad(k) = planck_atmosphere_ad(k) + &
349 layer_source_up_ad * (
one - rtv%e_Layer_Trans_UP(k))
350 a_ad = a_ad - planck_atmosphere(k) * rtv%e_Layer_Trans_UP(k)* layer_source_up_ad
352 t_od_ad(k) = t_od_ad(k) - a_ad/u
358 IF( is_solar_channel )
THEN 359 cosine_u0 = cos(source_zenith_radian)
360 IF( cosine_u0 >
zero)
THEN 361 total_od_ad = -solar_irradiance/
pi * direct_reflectivity(1) &
362 * up_rad_ad * exp(-total_od/cosine_u0)
363 direct_reflectivity_ad(1) = cosine_u0 * solar_irradiance/
pi &
364 * up_rad_ad* exp(-total_od/cosine_u0)
368 emissivity_ad(n_angles)=up_rad_ad*planck_surface
369 planck_surface_ad = emissivity(n_angles)*up_rad_ad
370 reflectivity_ad(1,1)=up_rad_ad*rtv%e_Level_Rad_DOWN(n_layers)
371 down_rad_ad = reflectivity(1,1)*up_rad_ad
376 DO k = n_layers, 1, -1
378 a_ad = rtv%e_Level_Rad_DOWN(k-1)*rtv%e_Layer_Trans_DOWN(k)*down_rad_ad
379 layer_source_down_ad = down_rad_ad
380 down_rad_ad = down_rad_ad*rtv%e_Layer_Trans_DOWN(k)
382 planck_atmosphere_ad(k) = planck_atmosphere_ad(k) + layer_source_down_ad * &
383 (
one - rtv%e_Layer_Trans_DOWN(k))
384 a_ad = a_ad - planck_atmosphere(k) * rtv%e_Layer_Trans_DOWN(k)* layer_source_down_ad
387 t_od_ad(k) = t_od_ad(k) - a_ad * rtv%Secant_Down_Angle
389 t_od_ad(k) = t_od_ad(k) + total_od_ad
character(*), parameter module_version_id
real(fp), parameter, public zero
subroutine, public crtm_emission_ad(n_Layers, n_Angles, u, Planck_Atmosphere, Planck_Surface, emissivity, reflectivity, direct_reflectivity, Solar_irradiance, Is_Solar_Channel, Source_Zenith_Radian, RTV, up_rad_AD_in, T_OD_AD, Planck_Atmosphere_AD, Planck_Surface_AD, emissivity_AD, reflectivity_AD, direct_reflectivity_AD)
real(fp), parameter, public secant_diffusivity
real(fp), parameter, public one
subroutine, public crtm_emission(n_Layers, n_Angles, Diffuse_Surface, u, T_OD, Planck_Atmosphere, Planck_Surface, emissivity, reflectivity, direct_reflectivity, cosmic_background, Solar_irradiance, Is_Solar_Channel, Source_Zenith_Radian, RTV)
subroutine, public crtm_emission_tl(n_Layers, n_Angles, u, Planck_Atmosphere, Planck_Surface, emissivity, reflectivity, direct_reflectivity, Solar_irradiance, Is_Solar_Channel, Source_Zenith_Radian, RTV, T_OD_TL, Planck_Atmosphere_TL, Planck_Surface_TL, emissivity_TL, reflectivity_TL, direct_reflectivity_TL, up_rad_TL)
real(fp), parameter, public pi