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

Feature/cd mw water emis #184

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/Build/libsrc/make.dependencies
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ CRTM_MoleculeScatter.o : CRTM_MoleculeScatter.f90 CRTM_AtmOptics_Define.o CRTM_A
CRTM_MW_Ice_SfcOptics.o : CRTM_MW_Ice_SfcOptics.f90 CRTM_MW_Snow_SfcOptics.o NESDIS_ATMS_SeaICE_Module.o NESDIS_SSMIS_SeaIceEM_Module.o NESDIS_MHS_SICEEM_Module.o NESDIS_SEAICE_PHYEM_MODULE.o NESDIS_SSMI_SIceEM_Module.o NESDIS_AMSRE_SICEEM_Module.o NESDIS_AMSU_SICEEM_Module.o CRTM_SensorInfo.o CRTM_SfcOptics_Define.o CRTM_GeometryInfo_Define.o CRTM_Surface_Define.o CRTM_SpcCoeff.o CRTM_Parameters.o Message_Handler.o Type_Kinds.o
CRTM_MW_Land_SfcOptics.o : CRTM_MW_Land_SfcOptics.f90 NESDIS_LandEM_Module.o CRTM_SfcOptics_Define.o CRTM_GeometryInfo_Define.o CRTM_Surface_Define.o CRTM_SpcCoeff.o CRTM_Parameters.o Message_Handler.o Type_Kinds.o
CRTM_MW_Snow_SfcOptics.o : CRTM_MW_Snow_SfcOptics.f90 NESDIS_ATMS_SnowEM_Module.o NESDIS_SSMIS_SnowEM_Module.o NESDIS_MHS_SnowEM_Module.o NESDIS_AMSRE_SNOWEM_Module.o NESDIS_SSMI_SnowEM_Module.o NESDIS_AMSU_SnowEM_Module.o NESDIS_LandEM_Module.o CRTM_SensorInfo.o CRTM_SfcOptics_Define.o CRTM_GeometryInfo_Define.o CRTM_Surface_Define.o CRTM_SpcCoeff.o CRTM_Parameters.o Message_Handler.o Type_Kinds.o
CRTM_MWwaterCoeff.o : CRTM_MWwaterCoeff.f90 MWwaterCoeff_Define.o Message_Handler.o
CRTM_MWwaterCoeff.o : CRTM_MWwaterCoeff.f90 MWwaterCoeff_Define.o MWwaterCoeff_FASTEM6.o MWwaterCoeff_FASTEM4.o Message_Handler.o
CRTM_MW_Water_SfcOptics.o : CRTM_MW_Water_SfcOptics.f90 CRTM_MWwaterCoeff.o CRTM_FastemX.o CRTM_Fastem1.o CRTM_LowFrequency_MWSSEM.o CRTM_SfcOptics_Define.o CRTM_GeometryInfo_Define.o CRTM_Surface_Define.o CRTM_SpcCoeff.o CRTM_Parameters.o Message_Handler.o Type_Kinds.o
CRTM_NLTECorrection.o : CRTM_NLTECorrection.f90 NLTE_Predictor_Define.o NLTE_Parameters.o NLTECoeff_Define.o CRTM_GeometryInfo_Define.o CRTM_Atmosphere_Define.o CRTM_Parameters.o Type_Kinds.o
CRTM_Options_Define.o : CRTM_Options_Define.f90 CRTM_CloudCover_Define.o Zeeman_Input_Define.o SSU_Input_Define.o CRTM_Parameters.o Binary_File_Utility.o File_Utility.o Compare_Float_Numbers.o Message_Handler.o Type_Kinds.o
Expand Down Expand Up @@ -135,6 +135,8 @@ NESDIS_SSMI_SIceEM_Module.o : NESDIS_SSMI_SIceEM_Module.f90 NESDIS_LandEM_Module
NESDIS_SSMI_SnowEM_Module.o : NESDIS_SSMI_SnowEM_Module.f90 NESDIS_LandEM_Module.o Type_Kinds.o
NESDIS_SSMIS_SeaIceEM_Module.o : NESDIS_SSMIS_SeaIceEM_Module.f90 NESDIS_LandEM_Module.o Type_Kinds.o
NESDIS_SSMIS_SnowEM_Module.o : NESDIS_SSMIS_SnowEM_Module.f90 NESDIS_LandEM_Module.o Type_Kinds.o
MWwaterCoeff_FASTEM4.o : MWwaterCoeff_FASTEM4.F90 FitCoeff_Define.o MWwaterCoeff_Define.o Type_Kinds.o
MWwaterCoeff_FASTEM6.o : MWwaterCoeff_FASTEM6.F90 FitCoeff_Define.o MWwaterCoeff_Define.o Message_Handler.o Type_Kinds.o
netCDF_Utility.o : netCDF_Utility.f90 Type_Kinds.o Message_Handler.o netCDF_Attribute_Utility.o netCDF_Dimension_Utility.o netCDF_Variable_Utility.o
netCDF_Attribute_Utility.o : netCDF_Attribute_Utility.f90 Type_Kinds.o Message_Handler.o
netCDF_Dimension_Utility.o : netCDF_Dimension_Utility.f90 Type_Kinds.o Message_Handler.o
Expand Down
2 changes: 2 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ list( APPEND crtm_src_files
Coefficients/EmisCoeff/IR_Snow/IRsnowCoeff_netCDF_IO.f90
Coefficients/EmisCoeff/MW_Water/MWwaterCoeff_Define.f90
Coefficients/EmisCoeff/MW_Water/MWwaterLUT/MWwaterLUT_Define.f90
Coefficients/EmisCoeff/MW_Water/MWwaterCoeff_CreateFile/MWwaterCoeff_FASTEM6.f90
Coefficients/EmisCoeff/MW_Water/MWwaterCoeff_CreateFile/MWwaterCoeff_FASTEM4.f90
Coefficients/EmisCoeff/SEcategory/SEcategory_Define.f90
Coefficients/EmisCoeff/SEcategory/SEcategory_IO.f90
Coefficients/EmisCoeff/SEcategory/SEcategory_netCDF_IO.f90
Expand Down
37 changes: 30 additions & 7 deletions src/CRTM_LifeCycle.f90
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@ MODULE CRTM_LifeCycle
CRTM_VISiceCoeff_Destroy
! ...Microwave surface emissivities
USE CRTM_MWwaterCoeff , ONLY: CRTM_MWwaterCoeff_Load, &
CRTM_MWwaterCoeff_Destroy
CRTM_MWwaterCoeff_Destroy, &
CRTM_MWwaterCoeff_Load_FASTEM
! Disable all implicit typing
IMPLICIT NONE

Expand Down Expand Up @@ -538,6 +539,7 @@ FUNCTION CRTM_Init( &
VISsnowCoeff_File , & ! Optional input
VISiceCoeff_File , & ! Optional input
MWwaterCoeff_File , & ! Optional input
MWwaterCoeff_Scheme , & ! Optional input
IRwaterCoeff_Format , & ! Optional input
IRlandCoeff_Format , & ! Optional input
IRsnowCoeff_Format , & ! Optional input
Expand Down Expand Up @@ -576,6 +578,7 @@ FUNCTION CRTM_Init( &
CHARACTER(*), OPTIONAL, INTENT(IN) :: VISsnowCoeff_File
CHARACTER(*), OPTIONAL, INTENT(IN) :: VISiceCoeff_File
CHARACTER(*), OPTIONAL, INTENT(IN) :: MWwaterCoeff_File
CHARACTER(*), OPTIONAL, INTENT(IN) :: MWwaterCoeff_Scheme
CHARACTER(*), OPTIONAL, INTENT(IN) :: IRwaterCoeff_Format
CHARACTER(*), OPTIONAL, INTENT(IN) :: IRlandCoeff_Format
CHARACTER(*), OPTIONAL, INTENT(IN) :: IRsnowCoeff_Format
Expand Down Expand Up @@ -616,6 +619,7 @@ FUNCTION CRTM_Init( &
CHARACTER(SL) :: Default_VISsnowCoeff_File
CHARACTER(SL) :: Default_VISiceCoeff_File
CHARACTER(SL) :: Default_MWwaterCoeff_File
CHARACTER(SL) :: Default_MWwaterCoeff_Scheme
CHARACTER(SL) :: Default_IRwaterCoeff_Format
CHARACTER(SL) :: Default_IRlandCoeff_Format
CHARACTER(SL) :: Default_IRsnowCoeff_Format
Expand Down Expand Up @@ -689,6 +693,7 @@ FUNCTION CRTM_Init( &
Default_VISsnowCoeff_File = 'NPOESS.VISsnow.EmisCoeff.bin'
Default_VISiceCoeff_File = 'NPOESS.VISice.EmisCoeff.bin'
Default_MWwaterCoeff_File = 'FASTEM6.MWwater.EmisCoeff.bin'
Default_MWwaterCoeff_Scheme = 'FASTEM6'
! ... Default file formats
Default_AerosolCoeff_Format = 'Binary'
Default_CloudCoeff_Format = 'Binary'
Expand Down Expand Up @@ -731,6 +736,9 @@ FUNCTION CRTM_Init( &
IF ( PRESENT(VISlandCoeff_Format ) ) Default_VISlandCoeff_Format = TRIM(ADJUSTL(VISlandCoeff_Format))
IF ( PRESENT(VISsnowCoeff_Format ) ) Default_VISsnowCoeff_Format = TRIM(ADJUSTL(VISsnowCoeff_Format))
IF ( PRESENT(VISiceCoeff_Format ) ) Default_VISiceCoeff_Format = TRIM(ADJUSTL(VISiceCoeff_Format))
! ...MW water emissivity scheme
IF ( PRESENT(MWwaterCoeff_Scheme ) ) Default_MWwaterCoeff_Scheme = TRIM(ADJUSTL(MWwaterCoeff_Scheme))

! ...Was a path specified?
IF ( PRESENT(File_Path) ) THEN
Default_MWwaterCoeff_File = TRIM(ADJUSTL(File_Path)) // TRIM(Default_MWwaterCoeff_File)
Expand Down Expand Up @@ -848,7 +856,7 @@ FUNCTION CRTM_Init( &
END IF
IF ( .NOT. Quiet_ ) THEN
WRITE(*, '("Loading IR land emissivity coefficients: ", a) ') TRIM(Default_IRlandCoeff_File)
END IF
END IF
err_stat = CRTM_IRlandCoeff_Load( &
Default_IRlandCoeff_File, &
File_Path = Default_File_Path, &
Expand Down Expand Up @@ -1039,14 +1047,29 @@ FUNCTION CRTM_Init( &
WRITE(*, '("Loading MW water emissivity coefficients: ", a) ') TRIM(Default_MWwaterCoeff_File)
END IF
Microwave_Sensor: IF ( ANY(SpcCoeff_IsMicrowaveSensor(SC)) ) THEN
! ...MW water
err_stat = CRTM_MWwaterCoeff_Load( &
Default_MWwaterCoeff_File, &

! Note: this module is only needed for FASTEM5 scheme and the corresponding
! Binary lookup tables.
! ! ...MW water
! err_stat = CRTM_MWwaterCoeff_Load( &
! Default_MWwaterCoeff_File, &
! Quiet = Quiet , &
! Process_ID = Process_ID , &
! Output_Process_ID = Output_Process_ID )
! IF ( err_stat /= SUCCESS ) THEN
! msg = 'Error loading MWwaterCoeff data from '//TRIM(Default_MWwaterCoeff_File)
! CALL Display_Message( ROUTINE_NAME,TRIM(msg)//TRIM(pid_msg),err_stat )
! RETURN
! END IF

! ...MW water without LUT, support FASTEM4 and FASTEM6
err_stat = CRTM_MWwaterCoeff_Load_FASTEM( &
Default_MWwaterCoeff_Scheme , &
Quiet = Quiet , &
Process_ID = Process_ID , &
Output_Process_ID = Output_Process_ID )
IF ( err_stat /= SUCCESS ) THEN
msg = 'Error loading MWwaterCoeff data from '//TRIM(Default_MWwaterCoeff_File)
msg = 'Error loading MWwaterCoeff module '//TRIM(Default_MWwaterCoeff_Scheme)
CALL Display_Message( ROUTINE_NAME,TRIM(msg)//TRIM(pid_msg),err_stat )
RETURN
END IF
Expand Down Expand Up @@ -1293,4 +1316,4 @@ FUNCTION CRTM_IsInitialized( ChannelInfo ) RESULT( Status )
LOGICAL :: Status
Status = ALL(CRTM_ChannelInfo_Associated(ChannelInfo))
END FUNCTION CRTM_IsInitialized
END MODULE CRTM_LifeCycle
END MODULE CRTM_LifeCycle
141 changes: 134 additions & 7 deletions src/Coefficients/CRTM_MWwaterCoeff.f90
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
! CRTM_MWwaterCoeff
!
! Module containing the shared CRTM microwave water surface emissivity
! data and their load/destruction routines.
! data and their load/destruction routines.
!
! PUBLIC DATA:
! MWwaterC: Data structure containing the microwave water surface
Expand Down Expand Up @@ -32,6 +32,9 @@ MODULE CRTM_MWwaterCoeff
MWwaterCoeff_Associated, &
MWwaterCoeff_Destroy , &
MWwaterCoeff_Readfile
USE MWwaterCoeff_FASTEM6, ONLY: Load_FASTEM6 => MWwaterCoeff_LoadCoeffs
USE MWwaterCoeff_FASTEM4, ONLY: Load_FASTEM4 => MWwaterCoeff_LoadCoeffs

! Disable all implicit typing
IMPLICIT NONE

Expand All @@ -44,6 +47,7 @@ MODULE CRTM_MWwaterCoeff
! The shared data
PUBLIC :: MWwaterC
! Procedures
PUBLIC :: CRTM_MWwaterCoeff_Load_FASTEM
PUBLIC :: CRTM_MWwaterCoeff_Load
PUBLIC :: CRTM_MWwaterCoeff_Destroy
PUBLIC :: CRTM_MWwaterCoeff_IsLoaded
Expand All @@ -64,6 +68,129 @@ MODULE CRTM_MWwaterCoeff

CONTAINS

!---------------------------------------------------------------
!:sdoc+:
!
! NAME:
! CRTM_MWwaterCoeff_Load_FASTEM
!
! PURPOSE:
! Function to load the microwave water surface emissivity data into
! the public data structure MWwaterC
!
! CALLING SEQUENCE:
! Error_Status = CRTM_MWwaterCoeff_Load_FASTEM( &
! FASTEM_Scheme, &
! Quiet = Quiet , &
! Process_ID = Process_ID , &
! Output_Process_ID = Output_Process_ID )
!
! INPUT ARGUMENTS:
! FASTEM_Scheme: Name of the FASTEM Scheme
! OPTIONS: FASTEM4 or FASTEM6
! UNITS: N/A
! TYPE: CHARACTER(*)
! DIMENSION: Scalar
! ATTRIBUTES: INTENT(IN)
!
!
! OPTIONAL INPUT ARGUMENTS:
! Quiet: Set this logical argument to suppress INFORMATION
! messages being printed to stdout
! If == .FALSE., INFORMATION messages are OUTPUT [DEFAULT].
! == .TRUE., INFORMATION messages are SUPPRESSED.
! If not specified, default is .FALSE.
! UNITS: N/A
! TYPE: LOGICAL
! DIMENSION: Scalar
! ATTRIBUTES: INTENT(IN), OPTIONAL
!
! Process_ID: Set this argument to the MPI process ID that this
! function call is running under. This value is used
! solely for controlling INFORMATIOn message output.
! If MPI is not being used, ignore this argument.
! This argument is ignored if the Quiet argument is set.
! UNITS: N/A
! TYPE: INTEGER
! DIMENSION: Scalar
! ATTRIBUTES: INTENT(IN), OPTIONAL
!
! Output_Process_ID: Set this argument to the MPI process ID in which
! all INFORMATION messages are to be output. If
! the passed Process_ID value agrees with this value
! the INFORMATION messages are output.
! This argument is ignored if the Quiet argument
! is set.
! UNITS: N/A
! TYPE: INTEGER
! DIMENSION: Scalar
! ATTRIBUTES: INTENT(IN), OPTIONAL
!
! FUNCTION RESULT:
! Error_Status: The return value is an integer defining the error
! status. The error codes are defined in the
! Message_Handler module.
! If == SUCCESS the data load was successful
! == FAILURE an unrecoverable error occurred.
! UNITS: N/A
! TYPE: INTEGER
! DIMENSION: Scalar
!
! SIDE EFFECTS:
! This function modifies the contents of the public data
! structure MWwaterC.
!
!:sdoc-:
!------------------------------------------------------------------------------

FUNCTION CRTM_MWwaterCoeff_Load_FASTEM( &
FASTEM_Scheme , & ! Input
Quiet , & ! Optional input
Process_ID , & ! Optional input
Output_Process_ID) & ! Optional input
RESULT( err_stat )
! Arguments
CHARACTER(*), INTENT(IN) :: FASTEM_Scheme
LOGICAL , OPTIONAL, INTENT(IN) :: Quiet
INTEGER , OPTIONAL, INTENT(IN) :: Process_ID
INTEGER , OPTIONAL, INTENT(IN) :: Output_Process_ID
! Function result
INTEGER :: err_stat
! Local parameters
CHARACTER(*), PARAMETER :: ROUTINE_NAME = 'CRTM_MWwaterCoeff_Load_FASTEM'
CHARACTER(ML) :: msg, pid_msg
LOGICAL :: noisy

! Setup
err_stat = SUCCESS
! ...Check Quiet argument
noisy = .TRUE.
IF ( PRESENT(Quiet) ) noisy = .NOT. Quiet
! ...Check the MPI Process Ids
IF ( noisy .AND. PRESENT(Process_ID) .AND. PRESENT(Output_Process_ID) ) THEN
IF ( Process_Id /= Output_Process_Id ) noisy = .FALSE.
END IF
! ...Create a process ID message tag for error messages
IF ( PRESENT(Process_Id) ) THEN
WRITE( pid_msg,'("; Process ID: ",i0)' ) Process_ID
ELSE
pid_msg = ''
END IF

! Load MWwaterCoeff data
SELECT CASE ( FASTEM_Scheme )
CASE ( 'FASTEM6' )
CALL Load_FASTEM6( MWwaterC )
CASE ( 'FASTEM4' )
CALL Load_FASTEM4( MWwaterC )
CASE DEFAULT
err_stat = FAILURE
msg = 'This option not yet implemented: '//TRIM(FASTEM_Scheme)//TRIM(pid_msg)
CALL Display_Message( ROUTINE_NAME, msg, err_stat )
RETURN
END SELECT

END FUNCTION CRTM_MWwaterCoeff_Load_FASTEM

!------------------------------------------------------------------------------
!:sdoc+:
Expand Down Expand Up @@ -123,7 +250,7 @@ MODULE CRTM_MWwaterCoeff
! Output_Process_ID: Set this argument to the MPI process ID in which
! all INFORMATION messages are to be output. If
! the passed Process_ID value agrees with this value
! the INFORMATION messages are output.
! the INFORMATION messages are output.
! This argument is ignored if the Quiet argument
! is set.
! UNITS: N/A
Expand Down Expand Up @@ -158,7 +285,7 @@ FUNCTION CRTM_MWwaterCoeff_Load( &
! Arguments
CHARACTER(*), INTENT(IN) :: Filename
CHARACTER(*), OPTIONAL, INTENT(IN) :: File_Path
LOGICAL , OPTIONAL, INTENT(IN) :: Quiet
LOGICAL , OPTIONAL, INTENT(IN) :: Quiet
INTEGER , OPTIONAL, INTENT(IN) :: Process_ID
INTEGER , OPTIONAL, INTENT(IN) :: Output_Process_ID
! Function result
Expand All @@ -170,7 +297,7 @@ FUNCTION CRTM_MWwaterCoeff_Load( &
CHARACTER(ML) :: MWwaterCoeff_File
LOGICAL :: noisy

! Setup
! Setup
err_stat = SUCCESS
! ...Assign the filename to local variable
MWwaterCoeff_File = ADJUSTL(Filename)
Expand All @@ -189,8 +316,8 @@ FUNCTION CRTM_MWwaterCoeff_Load( &
ELSE
pid_msg = ''
END IF


! Read the MWwaterCoeff data file
err_stat = MWwaterCoeff_ReadFile( &
MWwaterC, &
Expand Down Expand Up @@ -275,7 +402,7 @@ FUNCTION CRTM_MWwaterCoeff_Destroy( Process_ID ) RESULT( err_stat )

END FUNCTION CRTM_MWwaterCoeff_Destroy


!------------------------------------------------------------------------------
!:sdoc+:
!
Expand Down
Loading