Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rollup fixes and features for release/REL-2.4.0_emc #42

Merged
1,360 changes: 1,360 additions & 0 deletions libsrc/ACCoeff_netCDF_IO.f90

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions libsrc/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
list( APPEND crtm_src_files
ACCoeff_netCDF_IO.f90
ACCoeff_Binary_IO.f90
ACCoeff_Define.f90
ADA_Module.f90
Expand Down Expand Up @@ -122,6 +123,7 @@ list( APPEND crtm_src_files
NESDIS_SSMI_SnowEM_Module.f90
NESDIS_SnowEM_ATMS_Parameters.f90
NESDIS_SnowEM_Parameters.f90
NLTECoeff_netCDF_IO.f90
NLTECoeff_Binary_IO.f90
NLTECoeff_Define.f90
NLTE_Parameters.f90
Expand Down Expand Up @@ -149,6 +151,7 @@ list( APPEND crtm_src_files
ODZeeman_TauCoeff.f90
PAFV_Define.f90
Profile_Utility_Parameters.f90
RSS_Emissivity_Model.f90
RTV_Define.f90
Reflection_Correction_Module.f90
SEcategory_Define.f90
Expand All @@ -159,6 +162,8 @@ list( APPEND crtm_src_files
Slope_Variance.f90
Small_Scale_Correction_Module.f90
Sort_Utility.f90
SpcCoeff_IO.f90
SpcCoeff_netCDF_IO.f90
SpcCoeff_Binary_IO.f90
SpcCoeff_Define.f90
Spectral_Units_Conversion.f90
Expand Down
131 changes: 98 additions & 33 deletions libsrc/CRTM_MW_Water_SfcOptics.f90
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ MODULE CRTM_MW_Water_SfcOptics
Compute_FastemX_TL,&
Compute_FastemX_AD
USE CRTM_MWwaterCoeff , ONLY: MWwaterC
USE RSS_Emissivity_Model
! Disable implicit typing
IMPLICIT NONE

Expand All @@ -64,7 +65,9 @@ MODULE CRTM_MW_Water_SfcOptics
! -----------------
! Low frequency model threshold
REAL(fp), PARAMETER :: LOW_F_THRESHOLD = 20.0_fp ! GHz

! L BAND frequency model threshold
REAL(fp), PARAMETER :: L_BAND_FRQ = 2.0_fp ! GHz
REAL(fp), PARAMETER :: K2C = -273.13_fp

! --------------------------------------
! Structure definition to hold forward
Expand Down Expand Up @@ -200,7 +203,7 @@ FUNCTION Compute_MW_Water_SfcOptics( &
REAL(fp) :: Frequency
REAL(fp) :: Source_Azimuth_Angle, Sensor_Azimuth_Angle
REAL(fp) :: Reflectivity(N_STOKES)

COMPLEX(fp) , DIMENSION(2) :: Specular_Emissivity

! Set up
err_stat = SUCCESS
Expand All @@ -215,33 +218,53 @@ FUNCTION Compute_MW_Water_SfcOptics( &

! Compute the surface optical parameters
IF( SfcOptics%Use_New_MWSSEM ) THEN

! FastemX model
SfcOptics%Azimuth_Angle = Surface%Wind_Direction - Sensor_Azimuth_Angle
DO i = 1, SfcOptics%n_Angles
CALL Compute_FastemX( &
MWwaterC , & ! Input model coefficients
Frequency , & ! Input
SfcOptics%n_Angles , & ! Input
SfcOptics%Angle(i) , & ! Input
Surface%Water_Temperature , & ! Input
Surface%Salinity , & ! Input
Surface%Wind_Speed , & ! Input
iVar%FastemX_Var(i) , & ! Internal variable output
SfcOptics%Emissivity(i,:) , & ! Output
Reflectivity , & ! Output
Azimuth_Angle = SfcOptics%Azimuth_Angle, & ! Optional input
Transmittance = SfcOptics%Transmittance ) ! Optional input
DO j = 1, N_STOKES
SfcOptics%Reflectivity(i,j,i,j) = Reflectivity(j)
END DO
END DO

! Low frequency model coupled with Fastem1
IF( Frequency < L_BAND_FRQ ) THEN
! Call the RSS model
DO i = 1, SfcOptics%n_Angles
CALL fdem0_meissner_wentz( &
Frequency , & ! Input
SfcOptics%Angle(i) , & ! Input
Surface%Water_Temperature + K2C , & ! Input
Surface%Salinity , & ! Input
Specular_Emissivity ) ! Output

SfcOptics%Emissivity(i,1)= Specular_Emissivity(1)
SfcOptics%Emissivity(i,2)= Specular_Emissivity(2)
SfcOptics%Reflectivity(i,1,i,1) = ONE-SfcOptics%Emissivity(i,1)
SfcOptics%Reflectivity(i,2,i,2) = ONE-SfcOptics%Emissivity(i,2)
END DO

ELSE
! FastemX model
SfcOptics%Azimuth_Angle = Surface%Wind_Direction - Sensor_Azimuth_Angle
DO i = 1, SfcOptics%n_Angles
CALL Compute_FastemX( &
MWwaterC , & ! Input model coefficients
Frequency , & ! Input
SfcOptics%n_Angles , & ! Input
SfcOptics%Angle(i) , & ! Input
Surface%Water_Temperature , & ! Input
Surface%Salinity , & ! Input
Surface%Wind_Speed , & ! Input
iVar%FastemX_Var(i) , & ! Internal variable output
SfcOptics%Emissivity(i,:) , & ! Output
Reflectivity , & ! Output
Azimuth_Angle = SfcOptics%Azimuth_Angle, & ! Optional input
Transmittance = SfcOptics%Transmittance ) ! Optional input
DO j = 1, N_STOKES
SfcOptics%Reflectivity(i,j,i,j) = Reflectivity(j)
END DO
END DO

END IF

ELSE

! Low frequency model coupled with Fastem1
! Low frequency model coupled with Fastem1
IF( Frequency < LOW_F_THRESHOLD ) THEN
! Call the low frequency model
! Call the low frequency model
DO i = 1, SfcOptics%n_Angles
CALL LowFrequency_MWSSEM( &
Frequency , & ! Input
Expand All @@ -250,20 +273,20 @@ FUNCTION Compute_MW_Water_SfcOptics( &
Surface%Salinity , & ! Input
Surface%Wind_Speed , & ! Input
SfcOptics%Emissivity(i,:), & ! Output
iVar%LF_MWSSEM_Var(i) ) ! Internal variable output
iVar%LF_MWSSEM_Var(i) ) ! Internal variable output
SfcOptics%Reflectivity(i,1,i,1) = ONE-SfcOptics%Emissivity(i,1)
SfcOptics%Reflectivity(i,2,i,2) = ONE-SfcOptics%Emissivity(i,2)
END DO
ELSE
! Call Fastem1
! Call Fastem1
DO i = 1, SfcOptics%n_Angles
CALL Fastem1( Frequency , & ! Input
SfcOptics%Angle(i) , & ! Input
Surface%Water_Temperature, & ! Input
Surface%Wind_Speed , & ! Input
SfcOptics%Emissivity(i,:), & ! Output
iVar%dEH_dWindSpeed(i) , & ! Output
iVar%dEV_dWindSpeed(i) ) ! Output
iVar%dEV_dWindSpeed(i) ) ! Output
SfcOptics%Reflectivity(i,1,i,1) = ONE-SfcOptics%Emissivity(i,1)
SfcOptics%Reflectivity(i,2,i,2) = ONE-SfcOptics%Emissivity(i,2)
END DO
Expand Down Expand Up @@ -382,6 +405,7 @@ END FUNCTION Compute_MW_Water_SfcOptics

FUNCTION Compute_MW_Water_SfcOptics_TL( &
SfcOptics , & ! Input
Surface , & ! Input
Surface_TL , & ! Input
GeometryInfo, & ! Input
SensorIndex , & ! Input
Expand All @@ -390,6 +414,7 @@ FUNCTION Compute_MW_Water_SfcOptics_TL( &
iVar ) & ! Internal variable input
RESULT( err_stat )
! Arguments
TYPE(CRTM_Surface_type), INTENT(IN) :: Surface
TYPE(CRTM_Surface_type), INTENT(IN) :: Surface_TL
TYPE(CRTM_SfcOptics_type), INTENT(IN) :: SfcOptics
TYPE(CRTM_GeometryInfo_type), INTENT(IN) :: GeometryInfo
Expand All @@ -406,7 +431,7 @@ FUNCTION Compute_MW_Water_SfcOptics_TL( &
REAL(fp) :: Frequency
REAL(fp) :: Source_Azimuth_Angle, Sensor_Azimuth_Angle
REAL(fp) :: Reflectivity_TL(N_STOKES)

COMPLEX(fp) , DIMENSION(2) :: Specular_Emissivity, Specular_Emissivity_TL

! Set up
err_stat = SUCCESS
Expand All @@ -421,9 +446,28 @@ FUNCTION Compute_MW_Water_SfcOptics_TL( &

! Compute the tangent-linear surface optical parameters
IF( SfcOptics%Use_New_MWSSEM ) THEN
IF( Frequency < L_BAND_FRQ ) THEN

! Call the RSS model for L-band
DO i = 1, SfcOptics%n_Angles
CALL fdem0_meissner_wentz_TL( &
Frequency , & ! Input
SfcOptics%Angle(i) , & ! Input
Surface%Water_Temperature + K2C , & ! Input
Surface_TL%Water_Temperature , & ! Input
Surface%Salinity , & ! Input
Surface_TL%Salinity , & ! Input
Specular_Emissivity , & ! Input
Specular_Emissivity_TL ) ! Output

SfcOptics_TL%Emissivity(i,:)= Specular_Emissivity_TL(:)
SfcOptics_TL%Reflectivity(i,1,i,1) = ONE-SfcOptics_TL%Emissivity(i,1)
SfcOptics_TL%Reflectivity(i,2,i,2) = ONE-SfcOptics_TL%Emissivity(i,2)
END DO

ELSE
! FastemX model
DO i = 1, SfcOptics%n_Angles
DO i = 1, SfcOptics%n_Angles
CALL Compute_FastemX_TL( &
MWwaterC , & ! Input model coefficients
Surface_TL%Water_Temperature , & ! TL Input
Expand All @@ -439,7 +483,8 @@ FUNCTION Compute_MW_Water_SfcOptics_TL( &
!SfcOptics_TL%Reflectivity(i,j,i,j) = -Reflectivity_TL(j)
SfcOptics_TL%Reflectivity(i,j,i,j) = Reflectivity_TL(j)
END DO
END DO
END DO
END IF

ELSE

Expand Down Expand Up @@ -586,6 +631,7 @@ FUNCTION Compute_MW_Water_SfcOptics_AD( &
GeometryInfo, & ! Input
SensorIndex , & ! Input
ChannelIndex, & ! Input
Surface , & ! Input
Surface_AD , & ! Output
iVar ) & ! Internal variable input
RESULT( err_stat )
Expand All @@ -595,6 +641,7 @@ FUNCTION Compute_MW_Water_SfcOptics_AD( &
TYPE(CRTM_GeometryInfo_type), INTENT(IN) :: GeometryInfo
INTEGER, INTENT(IN) :: SensorIndex
INTEGER, INTENT(IN) :: ChannelIndex
TYPE(CRTM_Surface_type), INTENT(IN) :: Surface
TYPE(CRTM_Surface_type), INTENT(IN OUT) :: Surface_AD
TYPE(iVar_type), INTENT(IN) :: iVar
! Function result
Expand All @@ -607,7 +654,7 @@ FUNCTION Compute_MW_Water_SfcOptics_AD( &
REAL(fp) :: Source_Azimuth_Angle, Sensor_Azimuth_Angle
REAL(fp) :: Reflectivity_AD(N_STOKES)
REAL(fp) :: Azimuth_Angle_AD

REAL(fp) , DIMENSION(2) :: Specular_Emissivity

! Set up
err_stat = SUCCESS
Expand All @@ -621,7 +668,24 @@ FUNCTION Compute_MW_Water_SfcOptics_AD( &

! Compute the adjoint surface optical parameters
IF( SfcOptics%Use_New_MWSSEM ) THEN

! Low frequency model coupled with Fastem1
IF( Frequency < L_BAND_FRQ ) THEN
! Call the RSS model for L-band
DO i = 1, SfcOptics%n_Angles
CALL fdem0_meissner_wentz_AD( &
Frequency , & ! Input
SfcOptics%Angle(i) , & ! Input
Surface%Water_Temperature + K2C , & ! Input
Surface_AD%Water_Temperature , & ! AD Output
Surface%Salinity ,& ! Input
Surface_AD%Salinity ,& ! AD Output
Specular_Emissivity , & ! Input
SfcOptics_AD%Emissivity(i,:) ) ! Input

SfcOptics_AD%Reflectivity(i,1,i,1) = ONE-SfcOptics_AD%Emissivity(i,1)
SfcOptics_AD%Reflectivity(i,2,i,2) = ONE-SfcOptics_AD%Emissivity(i,2)
END DO
ELSE
! FastemX model
Azimuth_Angle_AD = ZERO
DO i = 1, SfcOptics%n_Angles
Expand All @@ -640,6 +704,7 @@ FUNCTION Compute_MW_Water_SfcOptics_AD( &
Transmittance_AD = SfcOptics_AD%Transmittance ) ! Optional AD Output
END DO
Surface_AD%Wind_Direction = Surface_AD%Wind_Direction + Azimuth_Angle_AD
END IF

ELSE

Expand Down
Loading