72 '$Id: CRTM_MW_Snow_SfcOptics.f90 60152 2015-08-13 19:19:13Z paul.vandelst@noaa.gov $' 170 GeometryInfo, & ! Input
171 SensorIndex , & ! Input
172 ChannelIndex, & ! Input
174 result( error_status )
178 INTEGER,
INTENT(IN) :: sensorindex
179 INTEGER,
INTENT(IN) :: channelindex
182 INTEGER :: error_status
184 CHARACTER(*),
PARAMETER :: routine_name =
'Compute_MW_Snow_SfcOptics' 185 REAL(fp),
PARAMETER :: msu_snow_temperature_threshold = 100.0_fp
186 REAL(fp),
PARAMETER :: msu_tb_threshold = 50.0_fp
187 REAL(fp),
PARAMETER :: msu_alpha_c = 0.35_fp
188 REAL(fp),
PARAMETER :: msu_emissivity_threshold = 0.6_fp
189 REAL(fp),
PARAMETER :: msu_default_emissivity = 0.855_fp
190 REAL(fp),
PARAMETER :: frequency_threshold = 80.0_fp
191 REAL(fp),
PARAMETER :: default_emissivity = 0.90_fp
192 REAL(fp),
PARAMETER :: not_used(4) = -99.9_fp
193 INTEGER,
PARAMETER :: amsre_v_index(6) = (/1, 3, 5, 7, 9, 11/)
194 INTEGER,
PARAMETER :: amsre_h_index(6) = (/2, 4, 6, 8, 10, 12/)
195 INTEGER,
PARAMETER :: amsua_index(4) = (/1, 2, 3, 15/)
196 INTEGER,
PARAMETER :: ssmis_index(8) = (/13,12,14,16,15,17,18,8/)
197 INTEGER,
PARAMETER :: atms_index(5) = (/1, 2, 3, 16,17/)
200 REAL(fp) :: sensor_zenith_angle
210 sensor_type:
SELECT CASE( surface%SensorData%WMO_Sensor_ID )
214 DO i = 1, sfcoptics%n_Angles
216 sfcoptics%Angle(i), &
217 sc(sensorindex)%Frequency(channelindex), &
218 surface%SensorData%Tb(atms_index), &
219 surface%Snow_Temperature, &
220 surface%Snow_Depth, &
221 sfcoptics%Emissivity(i,2), &
222 sfcoptics%Emissivity(i,1) )
228 DO i = 1, sfcoptics%n_Angles
230 sfcoptics%Angle(i), &
231 sc(sensorindex)%Frequency(channelindex), &
232 surface%Snow_Depth, &
233 surface%Snow_Temperature, &
234 surface%SensorData%Tb(amsua_index), &
236 sfcoptics%Emissivity(i,2), &
237 sfcoptics%Emissivity(i,1) )
242 DO i = 1, sfcoptics%n_Angles
244 sfcoptics%Angle(i), &
245 sc(sensorindex)%Frequency(channelindex), &
246 surface%Snow_Depth, &
247 surface%Snow_Temperature, &
249 surface%SensorData%Tb(1:2), &
250 sfcoptics%Emissivity(i,2), &
251 sfcoptics%Emissivity(i,1) )
256 DO i = 1, sfcoptics%n_Angles
258 sfcoptics%Angle(i), &
259 sc(sensorindex)%Frequency(channelindex), &
260 surface%Snow_Temperature, &
261 surface%SensorData%Tb(1:2), &
262 sfcoptics%Emissivity(i,2), &
263 sfcoptics%Emissivity(i,1) )
268 DO i = 1, sfcoptics%n_Angles
270 sfcoptics%Angle(i), &
271 surface%SensorData%Tb(amsre_v_index), &
272 surface%SensorData%Tb(amsre_h_index), &
273 surface%Snow_Temperature, &
274 surface%Snow_Temperature, &
275 sfcoptics%Emissivity(i,2), &
276 sfcoptics%Emissivity(i,1) )
281 DO i = 1, sfcoptics%n_Angles
283 sfcoptics%Angle(i), &
284 surface%Snow_Temperature, &
285 surface%SensorData%Tb, &
286 surface%Snow_Depth, &
287 sfcoptics%Emissivity(i,2), &
288 sfcoptics%Emissivity(i,1) )
293 DO i = 1, sfcoptics%n_Angles
295 sfcoptics%Angle(i), &
296 surface%Snow_Temperature, &
297 surface%SensorData%Tb(ssmis_index), &
298 surface%Snow_Depth, &
299 sfcoptics%Emissivity(i,2), &
300 sfcoptics%Emissivity(i,1) )
305 DO i = 1, sfcoptics%n_Angles
306 IF( surface%Snow_Temperature > msu_snow_temperature_threshold .AND. &
307 surface%SensorData%Tb(1) > msu_tb_threshold )
THEN 308 alpha = msu_alpha_c * surface%Snow_Temperature
309 sfcoptics%Emissivity(i,1) = (surface%SensorData%Tb(1)-alpha)/&
310 (surface%Snow_Temperature-alpha)
311 IF( sfcoptics%Emissivity(i,1) >
one ) &
312 sfcoptics%Emissivity(i,1) =
one 313 IF( sfcoptics%Emissivity(i,1) < msu_emissivity_threshold ) &
314 sfcoptics%Emissivity(i,1) = msu_emissivity_threshold
316 sfcoptics%Emissivity(i,1) = msu_default_emissivity
318 sfcoptics%Emissivity(i,2) = sfcoptics%Emissivity(i,1)
323 IF (
sc(sensorindex)%Frequency(channelindex) < frequency_threshold )
THEN 324 DO i = 1, sfcoptics%n_Angles
326 sc(sensorindex)%Frequency(channelindex), &
329 surface%Snow_Temperature, &
330 surface%Snow_Temperature, &
333 surface%Vegetation_Type, &
334 surface%Snow_Depth, &
335 sfcoptics%Emissivity(i,2), &
336 sfcoptics%Emissivity(i,1) )
339 sfcoptics%Emissivity(1:sfcoptics%n_Angles,1:2) = default_emissivity
342 END SELECT sensor_type
347 sfcoptics%Reflectivity =
zero 348 DO i = 1, sfcoptics%n_Angles
349 sfcoptics%Reflectivity(i,1,i,1) =
one-sfcoptics%Emissivity(i,1)
350 sfcoptics%Reflectivity(i,2,i,2) =
one-sfcoptics%Emissivity(i,2)
408 CHARACTER(*),
PARAMETER :: routine_name =
'Compute_MW_Snow_SfcOptics_TL' 418 sfcoptics_tl%Reflectivity =
zero 419 sfcoptics_tl%Emissivity =
zero 479 CHARACTER(*),
PARAMETER :: routine_name =
'Compute_MW_Snow_SfcOptics_AD' 489 sfcoptics_ad%Reflectivity =
zero 490 sfcoptics_ad%Emissivity =
zero
integer, parameter, public wmo_ssmi
integer, parameter, public wmo_mhs
integer, parameter, public wmo_amsre
real(fp), parameter, public zero
character(*), parameter module_version_id
subroutine, public nesdis_amsre_snow(Frequency, User_Angle, tv, th, Ts, Tsnow, Emissivity_H, Emissivity_V)
integer, parameter, public fp
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)
integer function, public compute_mw_snow_sfcoptics_tl(SfcOptics_TL)
integer function, public compute_mw_snow_sfcoptics(Surface, GeometryInfo, SensorIndex, ChannelIndex, SfcOptics)
integer, parameter, public wmo_ssmis
subroutine, public nesdis_snowem_mhs(Satellite_Angle, User_Angle, frequency, Ts, tbb, Emissivity_H, Emissivity_V)
subroutine, public nesdis_amsu_snowem(Satellite_Angle, User_Angle, frequency, Snow_Depth, Ts, tba, tbb, Emissivity_H, Emissivity_V)
integer, parameter, public wmo_msu
integer function, public compute_mw_snow_sfcoptics_ad(SfcOptics_AD)
subroutine, public nesdis_atms_snowem(Satellite_Angle, User_Angle, Frequency, Tbs, Tss, Snow_Depth, Emissivity_H, Emissivity_V)
real(fp), parameter, public one
integer, parameter, public wmo_amsua
integer, parameter, public wmo_atms
subroutine, public nesdis_ssmis_snowem(frequency, Angle, Ts, tb, Depth, Emissivity_H, Emissivity_V)
type(spccoeff_type), dimension(:), allocatable, save, public sc
subroutine, public nesdis_ssmi_snowem(frequency, Angle, Ts, tb, Depth, Emissivity_H, Emissivity_V)
integer, parameter, public wmo_amsub
integer, parameter, public success
elemental subroutine, public crtm_geometryinfo_getvalue(gInfo, Geometry, iFOV, Longitude, Latitude, Surface_Altitude, Sensor_Scan_Angle, Sensor_Zenith_Angle, Sensor_Azimuth_Angle, Source_Zenith_Angle, Source_Azimuth_Angle, Flux_Zenith_Angle, Year, Month, Day, Distance_Ratio, Sensor_Scan_Radian, Sensor_Zenith_Radian, Sensor_Azimuth_Radian, Secant_Sensor_Zenith, Cosine_Sensor_Zenith, Source_Zenith_Radian, Source_Azimuth_Radian, Secant_Source_Zenith, Flux_Zenith_Radian, Secant_Flux_Zenith, Trans_Zenith_Radian, Secant_Trans_Zenith, AU_ratio2)