Skip to content
Merged
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
5 changes: 4 additions & 1 deletion src/AtmOptics/CRTM_AtmOptics_Define.f90
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,9 @@ ELEMENTAL SUBROUTINE CRTM_AtmOptics_Create( &
CALL AtmOptics_Allocate( self, alloc_stat )
IF ( alloc_stat /= 0 ) RETURN
END IF

! Set the default value
CALL CRTM_AtmOptics_Zero( self )

! Initialise dimensions (but not arrays!)
self%n_Layers = n_Layers
Expand Down Expand Up @@ -400,7 +403,7 @@ SUBROUTINE Scalar_Inspect(self)
WRITE(*,'(5(1x,es22.15,:))') self%Single_Scatter_Albedo(1:self%n_Layers)
WRITE(*,'(3x,"Asymmetry_Factor :")')
WRITE(*,'(5(1x,es22.15,:))') self%Asymmetry_Factor(1:self%n_Layers)
WRITE(*,'(3x,"Backscat_Coefficient Backscattering coefficient :")')
WRITE(*,'(3x,"Backscat_Coefficient :")')
WRITE(*,'(5(1x,es22.15,:))') self%Backscat_Coefficient(1:self%n_Layers)
WRITE(*,'(3x,"Delta_Truncation :")')
WRITE(*,'(5(1x,es22.15,:))') self%Delta_Truncation(1:self%n_Layers)
Expand Down
2 changes: 2 additions & 0 deletions src/AtmScatter/AerosolScatter/ASvar_Define.f90
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ MODULE ASvar_Define
REAL(fp), ALLOCATABLE :: ke(:,:) ! I3 x I4 Mass extinction coefficient
REAL(fp), ALLOCATABLE :: w(:,:) ! I3 x I4 Single Scatter Albedo
REAL(fp), ALLOCATABLE :: g(:,:) ! I3 x I4 Asymmetry factor
REAL(fp), ALLOCATABLE :: kb(:,:) ! I3 x I4 Mass backscatter coefficient
REAL(fp), ALLOCATABLE :: pcoeff(:,:,:,:) ! 0:I1 x I2 x I3 x I4 Phase coefficients
! The accumulated scattering coefficient
REAL(fp), ALLOCATABLE :: total_bs(:) ! I3 Volume scattering coefficient
Expand Down Expand Up @@ -191,6 +192,7 @@ ELEMENTAL SUBROUTINE ASvar_Create( &
self%ke(n_Layers, n_Aerosols), &
self%w(n_Layers, n_Aerosols), &
self%g(n_Layers, n_Aerosols), &
self%kb(n_Layers, n_Aerosols), &
self%pcoeff(0:n_Legendre_Terms,n_Phase_Elements,n_Layers, n_Aerosols), &
self%total_bs(n_Layers), &
STAT = alloc_stat )
Expand Down
9 changes: 9 additions & 0 deletions src/AtmScatter/CRTM_AOD_Module.f90
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,10 @@ FUNCTION CRTM_AOD( &
! Save the nadir optical depth
RTSolution(ln,m)%Layer_Optical_Depth(1:Atmosphere(m)%n_Layers) = AtmOptics%Optical_Depth

! Save the Backscat_Coefficient, only non-zero for GOCART-GEOS5
! CD: double check if should be divided by 2PI
RTSolution(ln,m)%Backscat_Coefficient(1:Atmosphere(m)%n_Layers) = AtmOptics%Backscat_Coefficient

END DO Channel_Loop

END DO Sensor_Loop
Expand Down Expand Up @@ -669,6 +673,11 @@ FUNCTION CRTM_AOD_TL( &
RTSolution(ln,m)%Layer_Optical_Depth(1:Atmosphere(m)%n_Layers) = AtmOptics%Optical_Depth
RTSolution_TL(ln,m)%Layer_Optical_Depth(1:Atmosphere(m)%n_Layers) = AtmOptics_TL%Optical_Depth

! Save the backscatter coefficient, only non-zero for GOCART-GEOS5
! CD: double check if should be divided by 2PI
RTSolution(ln,m)%Backscat_Coefficient(1:Atmosphere(m)%n_Layers) = AtmOptics%Backscat_Coefficient
RTSolution_TL(ln,m)%Backscat_Coefficient(1:Atmosphere(m)%n_Layers) = AtmOptics_TL%Backscat_Coefficient

END DO Channel_Loop

END DO Sensor_Loop
Expand Down
96 changes: 81 additions & 15 deletions src/AtmScatter/CRTM_AerosolScatter.f90

Large diffs are not rendered by default.

14 changes: 10 additions & 4 deletions src/AtmScatter/CRTM_AtmScatter_Define.f90
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,6 @@ MODULE CRTM_AtmScatter_Define
! -----------------
! Module parameters
! -----------------
! RCS Id for the module
CHARACTER(*), PARAMETER :: MODULE_RCS_ID = &
! Message string length
INTEGER, PARAMETER :: ML = 256

Expand All @@ -66,6 +64,7 @@ MODULE CRTM_AtmScatter_Define
REAL(fp), POINTER :: Optical_Depth(:) => NULL() ! K
REAL(fp), POINTER :: Single_Scatter_Albedo(:) => NULL() ! K
REAL(fp), POINTER :: Asymmetry_Factor(:) => NULL() ! K
REAL(fp), POINTER :: Backscat_Coefficient(:) => NULL() ! K
REAL(fp), POINTER :: Delta_Truncation(:) => NULL() ! K
REAL(fp), POINTER :: Phase_Coefficient(:,:,:) => NULL() ! 0:Ic x Ip x K
END TYPE CRTM_AtmScatter_type
Expand Down Expand Up @@ -162,6 +161,7 @@ FUNCTION CRTM_Associated_AtmScatter( AtmScatter, & ! Input
IF ( ALL_Test ) THEN
IF ( ASSOCIATED(AtmScatter%Optical_Depth ) .AND. &
ASSOCIATED(AtmScatter%Single_Scatter_Albedo) .AND. &
ASSOCIATED(AtmScatter%Backscat_Coefficient ) .AND. &
ASSOCIATED(AtmScatter%Asymmetry_Factor ) .AND. &
ASSOCIATED(AtmScatter%Delta_Truncation ) .AND. &
ASSOCIATED(AtmScatter%Phase_Coefficient ) ) THEN
Expand All @@ -171,6 +171,7 @@ FUNCTION CRTM_Associated_AtmScatter( AtmScatter, & ! Input
IF ( ASSOCIATED(AtmScatter%Optical_Depth ) .OR. &
ASSOCIATED(AtmScatter%Single_Scatter_Albedo) .OR. &
ASSOCIATED(AtmScatter%Asymmetry_Factor ) .OR. &
ASSOCIATED(AtmScatter%Backscat_Coefficient ) .AND. &
ASSOCIATED(AtmScatter%Delta_Truncation ) .OR. &
ASSOCIATED(AtmScatter%Phase_Coefficient ) ) THEN
Association_Status = .TRUE.
Expand Down Expand Up @@ -276,6 +277,7 @@ FUNCTION CRTM_Destroy_AtmScatter( AtmScatter, & ! Output
DEALLOCATE( AtmScatter%Optical_Depth , &
AtmScatter%Single_Scatter_Albedo, &
AtmScatter%Asymmetry_Factor , &
AtmScatter%Backscat_Coefficient , &
AtmScatter%Delta_Truncation , &
AtmScatter%Phase_Coefficient , &
STAT=Allocate_Status )
Expand Down Expand Up @@ -439,6 +441,7 @@ FUNCTION CRTM_Allocate_AtmScatter( n_Layers , & ! Input
ALLOCATE( AtmScatter%Optical_Depth( n_Layers ), &
AtmScatter%Single_Scatter_Albedo( n_Layers ), &
AtmScatter%Asymmetry_Factor( n_Layers ), &
AtmScatter%Backscat_Coefficient( n_Layers ), &
AtmScatter%Delta_Truncation( n_Layers ), &
AtmScatter%Phase_Coefficient( 0:n_Legendre_Terms, &
n_Phase_Elements, &
Expand Down Expand Up @@ -467,6 +470,7 @@ FUNCTION CRTM_Allocate_AtmScatter( n_Layers , & ! Input
AtmScatter%Optical_Depth = ZERO
AtmScatter%Single_Scatter_Albedo = ZERO
AtmScatter%Asymmetry_Factor = ZERO
AtmScatter%Backscat_Coefficient = ZERO
AtmScatter%Delta_Truncation = ZERO
AtmScatter%Phase_Coefficient = ZERO

Expand Down Expand Up @@ -598,7 +602,8 @@ FUNCTION CRTM_Assign_AtmScatter( AtmScatter_in , & ! Input
! ---------------
AtmScatter_out%Optical_Depth = AtmScatter_in%Optical_Depth
AtmScatter_out%Single_Scatter_Albedo = AtmScatter_in%Single_Scatter_Albedo
AtmScatter_out%Asymmetry_Factor = AtmScatter_in%Asymmetry_Factor
AtmScatter_out%Asymmetry_Factor = AtmScatter_in%Asymmetry_Factor
AtmScatter_out%Backscat_Coefficient = AtmScatter_in%Backscat_Coefficient
AtmScatter_out%Delta_Truncation = AtmScatter_in%Delta_Truncation
AtmScatter_out%Phase_Coefficient = AtmScatter_in%Phase_Coefficient

Expand Down Expand Up @@ -644,7 +649,8 @@ SUBROUTINE CRTM_Zero_AtmScatter( AtmScatter )
! Reset the array components
AtmScatter%Optical_Depth = ZERO
AtmScatter%Single_Scatter_Albedo = ZERO
AtmScatter%Asymmetry_Factor = ZERO
AtmScatter%Asymmetry_Factor = ZERO
AtmScatter%Backscat_Coefficient = ZERO
AtmScatter%Delta_Truncation = ZERO
AtmScatter%Phase_Coefficient = ZERO
END SUBROUTINE CRTM_Zero_AtmScatter
Expand Down
21 changes: 21 additions & 0 deletions src/Coefficients/AerosolCoeff/AerosolCoeff_netCDF_IO.f90
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ MODULE AerosolCoeff_netCDF_IO
CHARACTER(*), PARAMETER :: RSIG_VARNAME = 'Rsig'
CHARACTER(*), PARAMETER :: RH_VARNAME = 'RH'
CHARACTER(*), PARAMETER :: KE_VARNAME = 'ke'
CHARACTER(*), PARAMETER :: KB_VARNAME = 'kb'
CHARACTER(*), PARAMETER :: W_VARNAME = 'w'
CHARACTER(*), PARAMETER :: G_VARNAME = 'g'
CHARACTER(*), PARAMETER :: PCOEFF_VARNAME = 'pcoeff'
Expand All @@ -104,6 +105,7 @@ MODULE AerosolCoeff_netCDF_IO
CHARACTER(*), PARAMETER :: RSIG_LONGNAME = 'Mode radius deviation'
CHARACTER(*), PARAMETER :: RH_LONGNAME = 'Relative humidity'
CHARACTER(*), PARAMETER :: KE_LONGNAME = 'ke'
CHARACTER(*), PARAMETER :: KB_LONGNAME = 'kb'
CHARACTER(*), PARAMETER :: W_LONGNAME = 'w'
CHARACTER(*), PARAMETER :: G_LONGNAME = 'g'
CHARACTER(*), PARAMETER :: PCOEFF_LONGNAME = 'pcoeff'
Expand All @@ -117,6 +119,7 @@ MODULE AerosolCoeff_netCDF_IO
CHARACTER(*), PARAMETER :: RSIG_DESCRIPTION = 'Mode radius standard deviation LUT dimension vector'
CHARACTER(*), PARAMETER :: RH_DESCRIPTION = 'Relative humidity LUT dimension vector'
CHARACTER(*), PARAMETER :: KE_DESCRIPTION = 'Mass extinction coefficient for aerosol scatterers'
CHARACTER(*), PARAMETER :: KB_DESCRIPTION = 'Mass backscatter coefficient for aerosol scatterers'
CHARACTER(*), PARAMETER :: W_DESCRIPTION = 'Single scatter albedo for aerosol scatterers'
CHARACTER(*), PARAMETER :: G_DESCRIPTION = 'Asymmetry parameter for aerosol scatterers'
CHARACTER(*), PARAMETER :: PCOEFF_DESCRIPTION = 'Phase coefficients for aerosol scatterers'
Expand All @@ -130,6 +133,7 @@ MODULE AerosolCoeff_netCDF_IO
CHARACTER(*), PARAMETER :: RSIG_UNITS = 'N/A'
CHARACTER(*), PARAMETER :: RH_UNITS = 'fraction (0->1)'
CHARACTER(*), PARAMETER :: KE_UNITS = 'Metres squared per kilogram (m^2.kg^-1)'
CHARACTER(*), PARAMETER :: KB_UNITS = 'Metres squared per kilogram (m^2.kg^-1)'
CHARACTER(*), PARAMETER :: W_UNITS = 'N/A'
CHARACTER(*), PARAMETER :: G_UNITS = 'N/A'
CHARACTER(*), PARAMETER :: PCOEFF_UNITS = 'N/A'
Expand All @@ -144,6 +148,7 @@ MODULE AerosolCoeff_netCDF_IO
REAL(Double) , PARAMETER :: RSIG_FILLVALUE = FILL_FLOAT
REAL(Double) , PARAMETER :: RH_FILLVALUE = FILL_FLOAT
REAL(Double) , PARAMETER :: KE_FILLVALUE = FILL_FLOAT
REAL(Double) , PARAMETER :: KB_FILLVALUE = FILL_FLOAT
REAL(Double) , PARAMETER :: W_FILLVALUE = FILL_FLOAT
REAL(Double) , PARAMETER :: G_FILLVALUE = FILL_FLOAT
REAL(Double) , PARAMETER :: PCOEFF_FILLVALUE = FILL_FLOAT
Expand All @@ -157,6 +162,7 @@ MODULE AerosolCoeff_netCDF_IO
INTEGER, PARAMETER :: RSIG_TYPE = NF90_DOUBLE
INTEGER, PARAMETER :: RH_TYPE = NF90_DOUBLE
INTEGER, PARAMETER :: KE_TYPE = NF90_DOUBLE
INTEGER, PARAMETER :: KB_TYPE = NF90_DOUBLE
INTEGER, PARAMETER :: W_TYPE = NF90_DOUBLE
INTEGER, PARAMETER :: G_TYPE = NF90_DOUBLE
INTEGER, PARAMETER :: PCOEFF_TYPE = NF90_DOUBLE
Expand Down Expand Up @@ -1143,6 +1149,21 @@ FUNCTION AerosolCoeff_netCDF_ReadFile( &
' - '//TRIM(NF90_STRERROR( NF90_Status ))
CALL Read_Cleanup(); RETURN
END IF
! ...kb variable, only for GOCART-GEOS5 scheme
IF ( Aerosol_Model == 'GOCART-GEOS5' ) THEN
NF90_Status = NF90_INQ_VARID( FileId,KB_VARNAME,VarId )
IF ( NF90_Status /= NF90_NOERR ) THEN
msg = 'Error inquiring '//TRIM(Filename)//' for '//KB_VARNAME//&
' variable ID - '//TRIM(NF90_STRERROR( NF90_Status ))
CALL Read_Cleanup(); RETURN
END IF
NF90_Status = NF90_GET_VAR( FileId,VarID,AerosolCoeff%kb )
IF ( NF90_Status /= NF90_NOERR ) THEN
msg = 'Error reading '//KB_VARNAME//' from '//TRIM(Filename)//&
' - '//TRIM(NF90_STRERROR( NF90_Status ))
CALL Read_Cleanup(); RETURN
END IF
END IF
! ...ke variable
NF90_Status = NF90_INQ_VARID( FileId,KE_VARNAME,VarId )
IF ( NF90_Status /= NF90_NOERR ) THEN
Expand Down
Loading