67 '$Id: CRTM_MW_Water_SfcOptics.f90 60152 2015-08-13 19:19:13Z paul.vandelst@noaa.gov $' 79 TYPE(fastemx_type) :: fastemx_var
81 TYPE(lf_mwssem_type) :: lf_mwssem_var
83 REAL(fp),
DIMENSION(MAX_N_ANGLES) :: deh_dts =
zero 84 REAL(fp),
DIMENSION(MAX_N_ANGLES) :: deh_dwindspeed =
zero 85 REAL(fp),
DIMENSION(MAX_N_ANGLES) :: dev_dts =
zero 86 REAL(fp),
DIMENSION(MAX_N_ANGLES) :: dev_dwindspeed =
zero 184 GeometryInfo, & ! Input
185 SensorIndex , & ! Input
186 ChannelIndex, & ! Input
187 SfcOptics , & ! Output
193 INTEGER,
INTENT(IN) :: sensorindex
194 INTEGER,
INTENT(IN) :: channelindex
200 CHARACTER(*),
PARAMETER :: routine_name =
'Compute_MW_Water_SfcOptics' 203 REAL(fp) :: frequency
204 REAL(fp) :: source_azimuth_angle, sensor_azimuth_angle
205 REAL(fp) :: reflectivity(n_stokes)
210 sfcoptics%Reflectivity =
zero 212 frequency =
sc(sensorindex)%Frequency(channelindex)
215 source_azimuth_angle = source_azimuth_angle, &
216 sensor_azimuth_angle = sensor_azimuth_angle )
220 IF( sfcoptics%Use_New_MWSSEM )
THEN 223 sfcoptics%Azimuth_Angle = surface%Wind_Direction - sensor_azimuth_angle
224 DO i = 1, sfcoptics%n_Angles
228 sfcoptics%Angle(i) , &
229 surface%Water_Temperature , &
231 surface%Wind_Speed , &
233 sfcoptics%Emissivity(i,:) , &
235 azimuth_angle = sfcoptics%Azimuth_Angle, &
236 transmittance = sfcoptics%Transmittance )
238 sfcoptics%Reflectivity(i,j,i,j) = reflectivity(j)
247 DO i = 1, sfcoptics%n_Angles
250 sfcoptics%Angle(i) , &
251 surface%Water_Temperature, &
253 surface%Wind_Speed , &
254 sfcoptics%Emissivity(i,:), &
256 sfcoptics%Reflectivity(i,1,i,1) =
one-sfcoptics%Emissivity(i,1)
257 sfcoptics%Reflectivity(i,2,i,2) =
one-sfcoptics%Emissivity(i,2)
261 DO i = 1, sfcoptics%n_Angles
263 sfcoptics%Angle(i) , &
264 surface%Water_Temperature, &
265 surface%Wind_Speed , &
266 sfcoptics%Emissivity(i,:), &
267 ivar%dEH_dWindSpeed(i) , &
268 ivar%dEV_dWindSpeed(i) )
269 sfcoptics%Reflectivity(i,1,i,1) =
one-sfcoptics%Emissivity(i,1)
270 sfcoptics%Reflectivity(i,2,i,2) =
one-sfcoptics%Emissivity(i,2)
386 SfcOptics , & ! Input
387 Surface_TL , & ! Input
388 GeometryInfo, & ! Input
389 SensorIndex , & ! Input
390 ChannelIndex, & ! Input
391 SfcOptics_TL, & ! Output
398 INTEGER,
INTENT(IN) :: sensorindex
399 INTEGER,
INTENT(IN) :: channelindex
405 CHARACTER(*),
PARAMETER :: routine_name =
'Compute_MW_Water_SfcOptics_TL' 408 REAL(fp) :: frequency
409 REAL(fp) :: source_azimuth_angle, sensor_azimuth_angle
410 REAL(fp) :: reflectivity_tl(n_stokes)
415 sfcoptics_tl%Reflectivity =
zero 417 frequency =
sc(sensorindex)%Frequency(channelindex)
420 source_azimuth_angle = source_azimuth_angle, &
421 sensor_azimuth_angle = sensor_azimuth_angle )
425 IF( sfcoptics%Use_New_MWSSEM )
THEN 428 DO i = 1, sfcoptics%n_Angles
431 surface_tl%Water_Temperature , &
432 surface_tl%Salinity , &
433 surface_tl%Wind_Speed , &
435 sfcoptics_tl%Emissivity(i,:) , &
437 azimuth_angle_tl = surface_tl%Wind_Direction, &
438 transmittance_tl = sfcoptics_tl%Transmittance )
440 sfcoptics_tl%Reflectivity(i,j,i,j) = reflectivity_tl(j)
449 DO i = 1, sfcoptics%n_Angles
451 surface_tl%Water_Temperature, &
452 surface_tl%Salinity , &
453 surface_tl%Wind_Speed , &
454 sfcoptics_tl%Emissivity(i,:), &
456 sfcoptics_tl%Reflectivity(i,1,i,1) = -sfcoptics_tl%Emissivity(i,1)
457 sfcoptics_tl%Reflectivity(i,2,i,2) = -sfcoptics_tl%Emissivity(i,2)
461 DO i = 1, sfcoptics%n_Angles
462 sfcoptics_tl%Emissivity(i,2) = (ivar%dEH_dTs(i)*surface_tl%Water_Temperature) + &
463 (ivar%dEH_dWindSpeed(i)*surface_tl%Wind_Speed)
464 sfcoptics_tl%Emissivity(i,1) = (ivar%dEV_dTs(i)*surface_tl%Water_Temperature) + &
465 (ivar%dEV_dWindSpeed(i)*surface_tl%Wind_Speed)
466 sfcoptics_tl%Reflectivity(i,1,i,1) = -sfcoptics_tl%Emissivity(i,1)
467 sfcoptics_tl%Reflectivity(i,2,i,2) = -sfcoptics_tl%Emissivity(i,2)
584 SfcOptics , & ! Input
585 SfcOptics_AD, & ! Input
586 GeometryInfo, & ! Input
587 SensorIndex , & ! Input
588 ChannelIndex, & ! Input
589 Surface_AD , & ! Output
596 INTEGER,
INTENT(IN) :: sensorindex
597 INTEGER,
INTENT(IN) :: channelindex
603 CHARACTER(*),
PARAMETER :: routine_name =
'Compute_MW_Water_SfcOptics_AD' 606 REAL(fp) :: frequency
607 REAL(fp) :: source_azimuth_angle, sensor_azimuth_angle
608 REAL(fp) :: reflectivity_ad(n_stokes)
609 REAL(fp) :: azimuth_angle_ad
615 frequency =
sc(sensorindex)%Frequency(channelindex)
618 source_azimuth_angle = source_azimuth_angle, &
619 sensor_azimuth_angle = sensor_azimuth_angle )
623 IF( sfcoptics%Use_New_MWSSEM )
THEN 626 azimuth_angle_ad =
zero 627 DO i = 1, sfcoptics%n_Angles
629 reflectivity_ad(j) = sfcoptics_ad%Reflectivity(i,j,i,j)
633 sfcoptics_ad%Emissivity(i,:) , &
636 surface_ad%Water_Temperature , &
637 surface_ad%Salinity , &
638 surface_ad%Wind_Speed , &
639 azimuth_angle_ad = azimuth_angle_ad , &
640 transmittance_ad = sfcoptics_ad%Transmittance )
642 surface_ad%Wind_Direction = surface_ad%Wind_Direction + azimuth_angle_ad
649 DO i = 1, sfcoptics%n_Angles
650 sfcoptics_ad%Emissivity(i,1) = sfcoptics_ad%Emissivity(i,1)-sfcoptics_ad%Reflectivity(i,1,i,1)
651 sfcoptics_ad%Emissivity(i,2) = sfcoptics_ad%Emissivity(i,2)-sfcoptics_ad%Reflectivity(i,2,i,2)
653 sfcoptics_ad%Emissivity(i,:), &
654 surface_ad%Water_Temperature, &
655 surface_ad%Salinity , &
656 surface_ad%Wind_Speed , &
661 DO i = sfcoptics%n_Angles, 1, -1
663 sfcoptics_ad%Emissivity(i,j) = sfcoptics_ad%Emissivity(i,j) - &
664 sfcoptics_ad%Reflectivity(i,j,i,j)
665 sfcoptics_ad%Reflectivity(i,j,i,j) =
zero 668 surface_ad%Water_Temperature = surface_ad%Water_Temperature + &
669 (ivar%dEV_dTs(i)*sfcoptics_ad%Emissivity(i,1))
670 surface_ad%Wind_Speed = surface_ad%Wind_Speed + &
671 (ivar%dEV_dWindSpeed(i)*sfcoptics_ad%Emissivity(i,1))
672 sfcoptics_ad%Emissivity(i,1) =
zero 674 surface_ad%Water_Temperature = surface_ad%Water_Temperature + &
675 (ivar%dEH_dTs(i)*sfcoptics_ad%Emissivity(i,2))
676 surface_ad%Wind_Speed = surface_ad%Wind_Speed + &
677 (ivar%dEH_dWindSpeed(i)*sfcoptics_ad%Emissivity(i,2))
678 sfcoptics_ad%Emissivity(i,2) =
zero 683 sfcoptics_ad%Reflectivity =
zero
character(*), parameter module_version_id
integer, parameter, public set
real(fp), parameter, public zero
subroutine, public compute_fastemx_tl(MWwaterCoeff, Temperature_TL, Salinity_TL, Wind_Speed_TL, iVar, Emissivity_TL, Reflectivity_TL, Azimuth_Angle_TL, Transmittance_TL)
type(mwwatercoeff_type), target, save, public mwwaterc
integer, parameter, public fp
integer, parameter, public max_n_angles
integer function, public compute_mw_water_sfcoptics_tl(SfcOptics, Surface_TL, GeometryInfo, SensorIndex, ChannelIndex, SfcOptics_TL, iVar)
integer function, public compute_mw_water_sfcoptics(Surface, GeometryInfo, SensorIndex, ChannelIndex, SfcOptics, iVar)
integer function, public compute_mw_water_sfcoptics_ad(SfcOptics, SfcOptics_AD, GeometryInfo, SensorIndex, ChannelIndex, Surface_AD, iVar)
subroutine, public lowfrequency_mwssem_ad(Emissivity_AD, Temperature_AD, Salinity_AD, Wind_Speed_AD, iVar)
integer, parameter, public max_n_stokes
subroutine, public fastem1(Frequency, Sat_Zenith_Angle, SST, Wind_Speed, Emissivity, dEH_dWindSpeed, dEV_dWindSpeed)
integer, parameter, public not_set
real(fp), parameter, public one
real(fp), parameter low_f_threshold
subroutine, public compute_fastemx_ad(MWwaterCoeff, Emissivity_AD, Reflectivity_AD, iVar, Temperature_AD, Salinity_AD, Wind_Speed_AD, Azimuth_Angle_AD, Transmittance_AD)
subroutine, public lowfrequency_mwssem(Frequency, Zenith_Angle, Temperature, Salinity, Wind_Speed, Emissivity, iVar)
subroutine, public lowfrequency_mwssem_tl(Temperature_TL, Salinity_TL, Wind_Speed_TL, Emissivity_TL, iVar)
type(spccoeff_type), dimension(:), allocatable, save, public sc
subroutine, public compute_fastemx(MWwaterCoeff, Frequency, Zenith_Angle, Temperature, Salinity, Wind_Speed, iVar, Emissivity, Reflectivity, Azimuth_Angle, Transmittance)
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)