! ! Helper module containing the foam-related utility routines for the ! CRTM implementation of FASTEM4 and FASTEM5 ! ! ! CREATION HISTORY: ! Written by: Original FASTEM1-5 authors ! ! Refactored by: Paul van Delst, November 2011 ! paul.vandelst@noaa.gov ! MODULE Foam_Utility_Module ! ----------------- ! Environment setup ! ----------------- ! Module use USE Type_Kinds , ONLY: fp USE FitCoeff_Define, ONLY: FitCoeff_1D_type ! Disable implicit typing IMPLICIT NONE ! ------------ ! Visibilities ! ------------ PRIVATE PUBLIC :: Foam_Coverage PUBLIC :: Foam_Coverage_TL PUBLIC :: Foam_Coverage_AD PUBLIC :: Foam_Reflectivity ! ----------------- ! Module parameters ! ----------------- CHARACTER(*), PARAMETER :: MODULE_VERSION_ID = & '$Id: Foam_Utility_Module.f90 99117 2017-11-27 18:37:14Z tong.zhu@noaa.gov $' ! Literal constants REAL(fp), PARAMETER :: ZERO = 0.0_fp REAL(fp), PARAMETER :: ONE = 1.0_fp REAL(fp), PARAMETER :: TWO = 2.0_fp CONTAINS ! =================================================================== ! Foam coverage. ! ! Monahan, E.C., and O'Muircheartaigh, I.G., (1986) ! Whitecaps and the passive remote sensing of the ocean surface, ! International Journal of Remote Sensing, 7, pp627-642. ! ! The neutral stability condition is used here (i.e. the difference ! between the skin and air temperature is assumed to be zero) so ! that the form of the foam coverage equation is the same as in ! Tang (1974) and Liu et al. (1998).. ! ! Liu, Q. et al. (1998) Monte Carlo simulations of the ! microwave emissivity of the sea surface. ! JGR, 103(C11), pp24983-24989 ! ! Tang, C. (1974) The effect of droplets in the air-sea ! transition zone on the sea brightness temperature. ! J. Phys. Oceanography, 4, pp579-593. ! ! =================================================================== ! Forward model SUBROUTINE Foam_Coverage(FCCoeff, wind_speed, coverage) TYPE(FitCoeff_1D_type), INTENT(IN) :: FCCoeff REAL(fp) , INTENT(IN) :: wind_speed REAL(fp) , INTENT(OUT) :: coverage IF ( wind_speed < ZERO ) THEN coverage = ZERO RETURN END IF coverage = FCCoeff%C(1) * (wind_speed**FCCoeff%C(2)) END SUBROUTINE Foam_Coverage ! Tangent-linear model SUBROUTINE Foam_Coverage_TL(FCCoeff, wind_speed, wind_speed_TL, coverage_TL) TYPE(FitCoeff_1D_type), INTENT(IN) :: FCCoeff REAL(fp) , INTENT(IN) :: wind_speed REAL(fp) , INTENT(IN) :: wind_speed_TL REAL(fp) , INTENT(OUT) :: coverage_TL IF ( wind_speed < ZERO ) THEN coverage_TL = ZERO RETURN END IF coverage_TL = FCCoeff%C(1)*FCCoeff%C(2) * (wind_speed**(FCCoeff%C(2)-ONE)) * wind_speed_TL END SUBROUTINE Foam_Coverage_TL ! Adjoint model SUBROUTINE Foam_Coverage_AD(FCCoeff, wind_speed, coverage_AD, wind_speed_AD) TYPE(FitCoeff_1D_type), INTENT(IN) :: FCCoeff REAL(fp) , INTENT(IN) :: wind_speed ! Input REAL(fp) , INTENT(IN OUT) :: coverage_AD ! Input REAL(fp) , INTENT(IN OUT) :: wind_speed_AD ! Output IF ( wind_speed < ZERO ) THEN coverage_AD = ZERO RETURN END IF wind_speed_AD = wind_speed_AD + & FCCoeff%C(1)*FCCoeff%C(2) * (wind_speed**(FCCoeff%C(2)-ONE)) * coverage_AD coverage_AD = ZERO END SUBROUTINE Foam_Coverage_AD ! ============================================================= ! Foam reflectivity ! ! See section d in ! ! Kazumori, M. et al. (2008) Impact Study of AMSR-E Radiances ! in the NCEP Global Data Assimilation System, ! Monthly Weather Review, 136, pp541-559 ! ! Function dependence is on zenith angle only so no TL ! or AD routine. ! ============================================================= SUBROUTINE Foam_Reflectivity( & FRCoeff , & Zenith_Angle, & Frequency , & Rv , & Rh ) ! Arguments TYPE(FitCoeff_1D_type), INTENT(IN) :: FRCoeff REAL(fp) , INTENT(IN) :: Zenith_Angle REAL(fp) , INTENT(IN) :: Frequency REAL(fp) , INTENT(OUT) :: Rv, Rh ! Local variables REAL(fp) :: factor ! The vertical component is a fixed value Rv = ONE - FRCoeff%C(1) ! Fixed nadir emissivity ! The horizontal component uses a regression equation ! to compute a factor modifying the nadir emissivity factor = ONE + Zenith_Angle*(FRCoeff%C(2) + & Zenith_Angle*(FRCoeff%C(3) + & Zenith_Angle*FRCoeff%C(4) ) ) Rh = ONE - factor*FRCoeff%C(1) ! Frequency correction factor = FRCoeff%C(5) * EXP(FRCoeff%C(6)*Frequency) Rv = Rv * factor Rh = Rh * factor END SUBROUTINE Foam_Reflectivity END MODULE Foam_Utility_Module