114 '$Id: CRTM_FastemX.f90 60152 2015-08-13 19:19:13Z paul.vandelst@noaa.gov $' 140 LOGICAL :: is_valid = .false.
143 REAL(fp) :: zenith_angle =
zero 148 LOGICAL :: azimuth_angle_valid = .false.
149 REAL(fp) :: azimuth_angle =
zero 150 LOGICAL :: transmittance_valid = .false.
151 REAL(fp) :: transmittance =
zero 155 COMPLEX(fp) :: permittivity =
zero 179 TYPE(pvar_type) :: pvar
180 TYPE(fvar_type) :: fvar
181 TYPE(sscvar_type) :: sscvar
182 TYPE(lscvar_type) :: lscvar
183 TYPE(aevar_type) :: aevar
184 TYPE(aef6var_type) :: aef6var
185 TYPE(rcvar_type) :: rcvar
303 MWwaterCoeff , & ! Input
304 Frequency , & ! Input
305 Zenith_Angle , & ! Input
306 Temperature , & ! Input
308 Wind_Speed , & ! Input
309 iVar , & ! Internal variable output
310 Emissivity , & ! Output
311 Reflectivity , & ! Output
312 Azimuth_Angle, & ! Optional Input
316 REAL(fp),
INTENT(IN) :: frequency
317 REAL(fp),
INTENT(IN) :: zenith_angle
318 REAL(fp),
INTENT(IN) :: temperature
319 REAL(fp),
INTENT(IN) :: salinity
320 REAL(fp),
INTENT(IN) :: wind_speed
322 REAL(fp),
INTENT(OUT) :: emissivity(:)
323 REAL(fp),
INTENT(OUT) :: reflectivity(:)
324 REAL(fp),
OPTIONAL,
INTENT(IN) :: azimuth_angle
325 REAL(fp),
OPTIONAL,
INTENT(IN) :: transmittance
329 ivar%Frequency = frequency
330 ivar%Zenith_Angle = zenith_angle
331 ivar%Temperature = temperature
332 ivar%Salinity = salinity
333 ivar%Wind_Speed = wind_speed
338 CALL ocean_permittivity( temperature, salinity, frequency, &
345 ivar%Rv_Fresnel, ivar%Rh_Fresnel, &
351 mwwatercoeff%FRCoeff, &
360 mwwatercoeff%FCCoeff, &
367 mwwatercoeff%LSCCoeff, &
377 mwwatercoeff%SSCCoeff, &
385 ivar%Rv = ivar%Rv_Fresnel*ivar%F_Small -ivar%Rv_Large
386 ivar%Rh = ivar%Rh_Fresnel*ivar%F_Small -ivar%Rh_Large
387 emissivity(
iv_idx) =
one - (
one-ivar%Foam_Cover)*ivar%Rv - ivar%Foam_Cover*ivar%Rv_Foam
388 emissivity(
ih_idx) =
one - (
one-ivar%Foam_Cover)*ivar%Rh - ivar%Foam_Cover*ivar%Rh_Foam
391 ivar%Azimuth_Angle_Valid = .false.
392 ivar%e_Azimuth =
zero 393 IF (
PRESENT(azimuth_angle) )
THEN 394 IF ( abs(azimuth_angle) <= 360.0_fp )
THEN 395 IF ( mwwatercoeff%Version ==
fastem6 )
THEN 397 mwwatercoeff%AZCoeff, &
406 mwwatercoeff%AZCoeff, &
414 ivar%Azimuth_Angle_Valid = .true.
415 ivar%Azimuth_Angle = azimuth_angle
420 ivar%Transmittance_Valid = .false.
423 IF (
PRESENT(transmittance) )
THEN 424 IF ( transmittance >
zero .AND. transmittance <
one )
THEN 426 mwwatercoeff%RCCoeff, &
434 ivar%Transmittance_Valid = .true.
435 ivar%Transmittance = transmittance
455 ivar%Is_Valid = .true.
556 MWwaterCoeff , & ! Input
557 Temperature_TL , & ! TL Input
558 Salinity_TL , & ! TL Input
559 Wind_Speed_TL , & ! TL Input
560 iVar , & ! Internal variable input
561 Emissivity_TL , & ! TL Output
562 Reflectivity_TL , & ! TL Output
563 Azimuth_Angle_TL, & ! Optional TL input
567 REAL(fp),
INTENT(IN) :: temperature_tl
568 REAL(fp),
INTENT(IN) :: salinity_tl
569 REAL(fp),
INTENT(IN) :: wind_speed_tl
571 REAL(fp),
INTENT(OUT) :: emissivity_tl(:)
572 REAL(fp),
INTENT(OUT) :: reflectivity_tl(:)
573 REAL(fp),
OPTIONAL,
INTENT(IN) :: azimuth_angle_tl
574 REAL(fp),
OPTIONAL,
INTENT(IN) :: transmittance_tl
576 REAL(fp) :: rv_fresnel_tl, rh_fresnel_tl
577 REAL(fp) :: rv_foam_tl , rh_foam_tl
578 REAL(fp) :: rv_large_tl , rh_large_tl
579 REAL(fp) :: rv_tl , rh_tl
580 REAL(fp) :: rv_mod_tl , rh_mod_tl
581 REAL(fp) :: foam_cover_tl
583 COMPLEX(fp) :: permittivity_tl
584 REAL(fp) :: f_small_tl
587 IF ( .NOT. ivar%Is_Valid )
THEN 589 reflectivity_tl =
zero 595 CALL ocean_permittivity_tl( temperature_tl, salinity_tl, ivar%Frequency, &
602 rv_fresnel_tl, rh_fresnel_tl, &
613 mwwatercoeff%FCCoeff, &
629 mwwatercoeff%SSCCoeff, &
635 rv_tl = rv_fresnel_tl*ivar%F_Small + ivar%Rv_Fresnel*f_small_tl - rv_large_tl
636 emissivity_tl(
iv_idx) = (ivar%Foam_Cover-
one)*rv_tl + &
637 (ivar%Rv-ivar%Rv_Foam)*foam_cover_tl - &
638 ivar%Foam_Cover*rv_foam_tl
639 rh_tl = rh_fresnel_tl*ivar%F_Small + ivar%Rh_Fresnel*f_small_tl - rh_large_tl
640 emissivity_tl(
ih_idx) = (ivar%Foam_Cover-
one)*rh_tl + &
641 (ivar%Rh-ivar%Rh_Foam)*foam_cover_tl - &
642 ivar%Foam_Cover*rh_foam_tl
645 IF (
PRESENT(azimuth_angle_tl) .AND. ivar%Azimuth_Angle_Valid )
THEN 646 IF ( mwwatercoeff%Version ==
fastem6 )
THEN 648 mwwatercoeff%AZCoeff, &
656 mwwatercoeff%AZCoeff, &
668 IF (
PRESENT(transmittance_tl) .AND. ivar%Transmittance_Valid )
THEN 670 mwwatercoeff%RCCoeff, &
797 MWwaterCoeff , & ! Input
798 Emissivity_AD , & ! AD Input
799 Reflectivity_AD , & ! AD Input
800 iVar , & ! Internal variable input
801 Temperature_AD , & ! AD Output
802 Salinity_AD , & ! AD Output
803 Wind_Speed_AD , & ! AD Output
804 Azimuth_Angle_AD, & ! Optional AD Output
808 REAL(fp),
INTENT(IN OUT) :: emissivity_ad(:)
809 REAL(fp),
INTENT(IN OUT) :: reflectivity_ad(:)
811 REAL(fp),
INTENT(IN OUT) :: temperature_ad
812 REAL(fp),
INTENT(IN OUT) :: salinity_ad
813 REAL(fp),
INTENT(IN OUT) :: wind_speed_ad
814 REAL(fp),
OPTIONAL,
INTENT(IN OUT) :: azimuth_angle_ad
815 REAL(fp),
OPTIONAL,
INTENT(IN OUT) :: transmittance_ad
817 REAL(fp) :: rv_fresnel_ad, rh_fresnel_ad
818 REAL(fp) :: rv_foam_ad , rh_foam_ad
819 REAL(fp) :: rv_large_ad , rh_large_ad
820 REAL(fp) :: rv_ad , rh_ad
821 REAL(fp) :: rv_mod_ad , rh_mod_ad
822 REAL(fp) :: foam_cover_ad
824 COMPLEX(fp) :: permittivity_ad
825 REAL(fp) :: f_small_ad
828 IF ( .NOT. ivar%Is_Valid )
THEN 829 temperature_ad =
zero 832 IF (
PRESENT(azimuth_angle_ad) ) azimuth_angle_ad =
zero 833 IF (
PRESENT(transmittance_ad) ) transmittance_ad =
zero 858 IF (
PRESENT(transmittance_ad) .AND. ivar%Transmittance_Valid )
THEN 860 mwwatercoeff%RCCoeff, &
873 IF (
PRESENT(azimuth_angle_ad) .AND. ivar%Azimuth_Angle_Valid )
THEN 874 IF ( mwwatercoeff%Version ==
fastem6 )
THEN 876 mwwatercoeff%AZCoeff, &
883 mwwatercoeff%AZCoeff, &
894 rh_foam_ad = -ivar%Foam_Cover *emissivity_ad(
ih_idx)
895 foam_cover_ad = (ivar%Rh-ivar%Rh_Foam)*emissivity_ad(
ih_idx)
896 rh_ad = (ivar%Foam_Cover-
one) *emissivity_ad(
ih_idx)
899 f_small_ad = ivar%Rh_Fresnel*rh_ad
900 rh_fresnel_ad = rh_ad*ivar%F_Small
903 rv_foam_ad = -ivar%Foam_Cover *emissivity_ad(
iv_idx)
904 foam_cover_ad = (ivar%Rv-ivar%Rv_Foam)*emissivity_ad(
iv_idx) + foam_cover_ad
905 rv_ad = (ivar%Foam_Cover-
one) *emissivity_ad(
iv_idx)
908 f_small_ad = f_small_ad + ivar%Rv_Fresnel*rv_ad
909 rv_fresnel_ad = rv_ad*ivar%F_Small
915 mwwatercoeff%SSCCoeff, &
931 mwwatercoeff%FCCoeff, &
943 permittivity_ad =
zero 949 CALL ocean_permittivity_ad( permittivity_ad, ivar%Frequency, &
950 temperature_ad, salinity_ad, &
subroutine, public azimuth_emissivity_tl(AZCoeff, Wind_Speed_TL, Azimuth_Angle_TL, e_Azimuth_TL, iVar)
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)
integer, parameter, public fp
real(fp), parameter, public three
real(fp), parameter degrees_to_radians
subroutine, public small_scale_correction(SSCCoeff, Frequency, cos_Z, Wind_Speed, Correction, iVar)
subroutine, public liu_ocean_permittivity(Temperature, Salinity, Frequency, Permittivity, iVar)
subroutine, public azimuth_emissivity_f6(AZCoeff, Wind_Speed, Azimuth_Angle, Frequency, Zenith_Angle, e_Azimuth, iVar)
subroutine, public azimuth_emissivity_ad(AZCoeff, e_Azimuth_AD, Wind_Speed_AD, Azimuth_Angle_AD, iVar)
subroutine, public fresnel_reflectivity_ad(Rv_AD, Rh_AD, cos_i, permittivity_AD, iVar)
subroutine, public foam_coverage_ad(FCCoeff, wind_speed, coverage_AD, wind_speed_AD)
integer, parameter ih_idx
subroutine, public foam_reflectivity(FRCoeff, Zenith_Angle, Frequency, Rv, Rh)
subroutine, public large_scale_correction(LSCCoeff, Frequency, cos_Z, Wind_Speed, Rv_Large, Rh_Large, iVar)
subroutine, public foam_coverage_tl(FCCoeff, wind_speed, wind_speed_TL, coverage_TL)
real(fp), parameter invalid_transmittance
subroutine, public azimuth_emissivity(AZCoeff, Wind_Speed, Azimuth_Angle, Frequency, cos_z, e_Azimuth, iVar)
integer, parameter fastem6
subroutine, public reflection_correction_ad(RCCoeff, Rv_Mod_AD, Rh_Mod_AD, Wind_Speed_AD, Transmittance_AD, iVar)
real(fp), parameter invalid_azimuth_angle
real(fp), parameter, public one
subroutine, public small_scale_correction_tl(SSCCoeff, Wind_Speed_TL, Correction_TL, iVar)
subroutine, public large_scale_correction_tl(Wind_Speed_TL, Rv_Large_TL, Rh_Large_TL, iVar)
real(fp), parameter, public two
subroutine, public compute_fastemx_ad(MWwaterCoeff, Emissivity_AD, Reflectivity_AD, iVar, Temperature_AD, Salinity_AD, Wind_Speed_AD, Azimuth_Angle_AD, Transmittance_AD)
real(fp), parameter, public degrees_to_radians
real(fp), parameter, public point_5
subroutine, public small_scale_correction_ad(SSCCoeff, Correction_AD, Wind_Speed_AD, iVar)
integer, parameter n_stokes
subroutine, public reflection_correction_tl(RCCoeff, Wind_Speed_TL, Transmittance_TL, Rv_Mod_TL, Rh_Mod_TL, iVar)
subroutine, public azimuth_emissivity_f6_tl(AZCoeff, Wind_Speed_TL, Azimuth_Angle_TL, e_Azimuth_TL, iVar)
subroutine, public liu_ocean_permittivity_ad(Permittivity_AD, Frequency, Temperature_AD, Salinity_AD, iVar)
integer, parameter iv_idx
subroutine, public liu_ocean_permittivity_tl(Temperature_TL, Salinity_TL, Frequency, Permittivity_TL, iVar)
subroutine, public large_scale_correction_ad(Rv_Large_AD, Rh_Large_AD, Wind_Speed_AD, iVar)
subroutine, public compute_fastemx(MWwaterCoeff, Frequency, Zenith_Angle, Temperature, Salinity, Wind_Speed, iVar, Emissivity, Reflectivity, Azimuth_Angle, Transmittance)
character(*), parameter module_version_id
subroutine, public fresnel_reflectivity(permittivity, cos_i, Rv, Rh, iVar)
subroutine, public reflection_correction(RCCoeff, Frequency, cos_z, Wind_Speed, Transmittance, Rv_Mod, Rh_Mod, iVar)
subroutine, public fresnel_reflectivity_tl(permittivity_TL, cos_i, Rv_TL, Rh_TL, iVar)
subroutine, public azimuth_emissivity_f6_ad(AZCoeff, e_Azimuth_AD, Wind_Speed_AD, Azimuth_Angle_AD, iVar)
real(fp), parameter, public pi
subroutine, public foam_coverage(FCCoeff, wind_speed, coverage)