31 spccoeff_isinfraredsensor , &
32 spccoeff_ismicrowavesensor, &
33 spccoeff_isvisiblesensor
98 nlte_predictor_isactive , &
146 '$Id: CRTM_Adjoint_Module.f90 60152 2015-08-13 19:19:13Z paul.vandelst@noaa.gov $' 273 Atmosphere , & ! FWD Input, M
274 Surface , & ! FWD Input, M
275 RTSolution_AD, & ! AD Input, L x M
276 Geometry , & ! Input, M
277 ChannelInfo , & ! Input, Scalar
278 Atmosphere_AD, & ! AD Output, M
279 Surface_AD , & ! AD Output, M
280 RTSolution , & ! FWD Output, L x M
282 result( error_status )
286 TYPE(crtm_rtsolution_type) ,
INTENT(IN OUT) :: rtsolution_ad(:,:)
291 TYPE(crtm_rtsolution_type) ,
INTENT(IN OUT) :: rtsolution(:,:)
294 INTEGER :: error_status
296 CHARACTER(*),
PARAMETER :: routine_name =
'CRTM_Adjoint' 298 CHARACTER(256) :: message
299 LOGICAL :: options_present
300 LOGICAL :: check_input
301 LOGICAL :: user_emissivity, user_direct_reflectivity, user_n_streams
302 LOGICAL :: user_antcorr, compute_antcorr
303 LOGICAL :: apply_nlte_correction
304 LOGICAL :: atmosphere_invalid, surface_invalid, geometry_invalid, options_invalid
305 INTEGER :: rt_algorithm_id
308 INTEGER :: n, n_sensors, sensorindex
309 INTEGER :: l, n_channels, channelindex
310 INTEGER :: m, n_profiles
312 INTEGER :: n_full_streams, mth_azi
313 REAL(fp) :: source_za
314 REAL(fp) :: wavenumber
315 REAL(fp) :: transmittance, transmittance_ad
328 TYPE(crtm_pvar_type) :: pvar
329 TYPE(crtm_aavar_type) :: aavar
332 TYPE(aovar_type) :: aovar
335 TYPE(nlte_predictor_type) :: nlte_predictor, nlte_predictor_ad
345 n_sensors =
SIZE(channelinfo)
347 IF ( n_sensors == 0 .OR. n_channels == 0 )
RETURN 351 IF (
SIZE(rtsolution ,dim=1) < n_channels .OR. &
352 SIZE(rtsolution_ad,dim=1) < n_channels )
THEN 354 WRITE( message,
'("Output RTSolution structure arrays too small (",i0," and ",i0,& 355 &") to hold results for the number of requested channels (",i0,")")') &
356 SIZE(rtsolution,dim=1),
SIZE(rtsolution_ad,dim=1), n_channels
364 n_profiles =
SIZE(atmosphere)
366 IF (
SIZE(surface) /= n_profiles .OR. &
367 SIZE(rtsolution_ad,dim=2) /= n_profiles .OR. &
368 SIZE(geometry) /= n_profiles .OR. &
369 SIZE(atmosphere_ad) /= n_profiles .OR. &
370 SIZE(surface_ad) /= n_profiles .OR. &
371 SIZE(rtsolution, dim=2) /= n_profiles )
THEN 373 message =
'Inconsistent profile dimensionality for input arguments.' 378 options_present = .false.
379 IF (
PRESENT(options) )
THEN 380 options_present = .true.
381 IF (
SIZE(options) /= n_profiles )
THEN 383 message =
'Inconsistent profile dimensionality for Options optional input argument.' 396 message =
'Error allocating SfcOptics data structures' 405 profile_loop:
DO m = 1, n_profiles
411 WRITE( message,
'("The CloudCoeff data must be loaded (with CRTM_Init routine) ", & 412 &"for the cloudy case profile #",i0)' ) m
418 WRITE( message,
'("The AerosolCoeff data must be loaded (with CRTM_Init routine) ", & 419 &"for the aerosol case profile #",i0)' ) m
427 atmosphere_ad(m)%Climatology = atmosphere(m)%Climatology
428 DO j = 1, atmosphere(m)%n_Absorbers
429 atmosphere_ad(m)%Absorber_ID(j) = atmosphere(m)%Absorber_ID(j)
430 atmosphere_ad(m)%Absorber_Units(j) = atmosphere(m)%Absorber_Units(j)
433 DO nc = 1, atmosphere(m)%n_Clouds
434 atmosphere_ad(m)%Cloud(nc)%Type = atmosphere(m)%Cloud(nc)%Type
437 DO na = 1, atmosphere(m)%n_Aerosols
438 atmosphere_ad(m)%Aerosol(na)%Type = atmosphere(m)%Aerosol(na)%Type
441 surface_ad(m)%Land_Coverage = surface(m)%Land_Coverage
442 surface_ad(m)%Water_Coverage = surface(m)%Water_Coverage
443 surface_ad(m)%Snow_Coverage = surface(m)%Snow_Coverage
444 surface_ad(m)%Ice_Coverage = surface(m)%Ice_Coverage
445 surface_ad(m)%Land_Type = surface(m)%Land_Type
446 surface_ad(m)%Water_Type = surface(m)%Water_Type
447 surface_ad(m)%Snow_Type = surface(m)%Snow_Type
448 surface_ad(m)%Ice_Type = surface(m)%Ice_Type
454 check_input = default_options%Check_Input
455 user_emissivity = default_options%Use_Emissivity
456 user_antcorr = default_options%Use_Antenna_Correction
457 apply_nlte_correction = default_options%Apply_NLTE_Correction
458 rt_algorithm_id = default_options%RT_Algorithm_Id
459 user_n_streams = default_options%Use_N_Streams
461 IF (options_present)
THEN 463 check_input = options(m)%Check_Input
465 user_emissivity = options(m)%Use_Emissivity
466 IF ( options(m)%Use_Emissivity )
THEN 468 IF ( options(m)%n_Channels < n_channels )
THEN 470 WRITE( message,
'( "Input Options channel dimension (", i0, ") is less ", & 471 &"than the number of requested channels (",i0, ")" )' ) &
472 options(m)%n_Channels, n_channels
477 user_direct_reflectivity = options(m)%Use_Direct_Reflectivity
480 user_antcorr = options(m)%Use_Antenna_Correction
482 apply_nlte_correction = options(m)%Apply_NLTE_Correction
486 ancillaryinput%SSU = options(m)%SSU
487 ancillaryinput%Zeeman = options(m)%Zeeman
489 sfcoptics%Use_New_MWSSEM = .NOT. options(m)%Use_Old_MWSSEM
491 rt_algorithm_id = options(m)%RT_Algorithm_Id
493 user_n_streams = options(m)%Use_N_Streams
495 IF ( user_n_streams )
THEN 496 IF ( options(m)%n_Streams <= 0 .OR. mod(options(m)%n_Streams,2) /= 0 .OR. &
499 WRITE( message,
'( "Input Options n_Streams (", i0, ") is invalid" )' ) &
509 IF ( check_input )
THEN 514 IF ( atmosphere_invalid .OR. surface_invalid .OR. geometry_invalid )
THEN 516 WRITE( message,
'("Input data check failed for profile #",i0)' ) m
521 IF ( options_present )
THEN 523 IF ( options_invalid )
THEN 525 WRITE( message,
'("Options data check failed for profile #",i0)' ) m
541 source_zenith_angle = source_za )
551 IF ( error_status /=
success )
THEN 553 WRITE( message,
'("Error adding FWD extra layers to profile #",i0)' ) m
560 WRITE( message,
'("Added layers [",i0,"] cause total [",i0,"] to exceed the ",& 561 &"maximum allowed [",i0,"] for profile #",i0)' ) &
580 WRITE( message,
'("Error allocating AtmOptics data structures for profile #",i0)' ) m
584 IF (options_present)
THEN 586 atmoptics%Include_Scattering = options(m)%Include_Scattering
587 atmoptics_ad%Include_Scattering = options(m)%Include_Scattering
590 CALL aovar_create( aovar, atm%n_Layers )
595 IF ( atm%n_Clouds > 0 )
THEN 603 IF ( atm%n_Aerosols > 0 )
THEN 618 sensor_loop:
DO n = 1, n_sensors
622 sensorindex = channelinfo(n)%Sensor_Index
626 IF ( user_antcorr .AND. &
629 compute_antcorr = .true.
631 compute_antcorr = .false.
648 WRITE( message,
'("Error allocating predictor structures for profile #",i0, & 649 &" and ",a," sensor.")' ) m,
sc(sensorindex)%Sensor_Id
663 IF( (atm%n_Clouds > 0 .OR. &
664 atm%n_Aerosols > 0 .OR. &
665 spccoeff_isvisiblesensor(
sc(sensorindex) ) ) .and. atmoptics%Include_Scattering )
THEN 669 WRITE( message,
'("Error allocating RTV structure for profile #",i0, & 670 &" and ",a," sensor.")' ) m, trim(
sc(sensorindex)%Sensor_Id)
675 rtv%RT_Algorithm_Id = rt_algorithm_id
680 IF ( apply_nlte_correction )
THEN 682 sc(sensorindex)%NC, &
692 channel_loop:
DO l = 1, channelinfo(n)%n_Channels
696 IF ( .NOT. channelinfo(n)%Process_Channel(l) ) cycle channel_loop
698 channelindex = channelinfo(n)%Channel_Index(l)
702 rtsolution(ln,m)%Sensor_Id = channelinfo(n)%Sensor_Id
703 rtsolution(ln,m)%WMO_Satellite_Id = channelinfo(n)%WMO_Satellite_Id
704 rtsolution(ln,m)%WMO_Sensor_Id = channelinfo(n)%WMO_Sensor_Id
705 rtsolution(ln,m)%Sensor_Channel = channelinfo(n)%Sensor_Channel(l)
706 rtsolution_ad(ln,m)%Sensor_Id = rtsolution(ln,m)%Sensor_Id
707 rtsolution_ad(ln,m)%WMO_Satellite_Id = rtsolution(ln,m)%WMO_Satellite_Id
708 rtsolution_ad(ln,m)%WMO_Sensor_Id = rtsolution(ln,m)%WMO_Sensor_Id
709 rtsolution_ad(ln,m)%Sensor_Channel = rtsolution(ln,m)%Sensor_Channel
714 transmittance_ad =
zero 718 IF ( user_n_streams )
THEN 719 n_full_streams = options(m)%n_Streams
720 rtsolution(ln,m)%n_Full_Streams = n_full_streams + 2
721 rtsolution(ln,m)%Scattering_Flag = .true.
729 atmoptics%n_Legendre_Terms = n_full_streams
730 atmoptics_ad%n_Legendre_Terms = n_full_streams
749 IF(
sc(sensorindex)%Solar_Irradiance(channelindex) >
zero .AND. &
751 rtv%Solar_Flag_true = .true.
754 IF( spccoeff_isvisiblesensor(
sc(sensorindex) ) .AND. rtv%Solar_Flag_true )
THEN 755 rtv%Visible_Flag_true = .true.
757 IF( atmoptics%n_Legendre_Terms < 4 )
THEN 758 atmoptics%n_Legendre_Terms = 4
759 atmoptics_ad%n_Legendre_Terms = atmoptics%n_Legendre_Terms
760 rtsolution(ln,m)%Scattering_FLAG = .true.
761 rtsolution(ln,m)%n_Full_Streams = atmoptics%n_Legendre_Terms + 2
765 wavenumber =
sc(sensorindex)%Wavenumber(channelindex)
770 IF ( error_status /=
success )
THEN 771 WRITE( message,
'("Error computing MoleculeScatter for ",a,& 772 &", channel ",i0,", profile #",i0)') &
773 trim(channelinfo(n)%Sensor_ID), &
774 channelinfo(n)%Sensor_Channel(l), &
780 rtv%Visible_Flag_true = .false.
786 IF( atm%n_Clouds > 0 )
THEN 792 IF (error_status /=
success)
THEN 793 WRITE( message,
'("Error computing CloudScatter for ",a,& 794 &", channel ",i0,", profile #",i0)' ) &
795 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
803 IF ( atm%n_Aerosols > 0 )
THEN 809 IF ( error_status /=
success )
THEN 810 WRITE( message,
'("Error computing AerosolScatter for ",a,& 811 &", channel ",i0,", profile #",i0)' ) &
812 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
820 IF( atmoptics%Include_Scattering )
THEN 824 rtsolution(ln,m)%SOD = atmoptics%Scattering_Optical_Depth
829 sfcoptics%Transmittance = -
one 831 sfcoptics%Transmittance = transmittance
837 sfcoptics%Compute = .true.
839 IF ( user_emissivity )
THEN 840 sfcoptics%Compute = .false.
841 sfcoptics%Emissivity(1,1) = options(m)%Emissivity(ln)
842 sfcoptics%Reflectivity(1,1,1,1) =
one - options(m)%Emissivity(ln)
843 IF ( user_direct_reflectivity )
THEN 844 sfcoptics%Direct_Reflectivity(1,1) = options(m)%Direct_Reflectivity(ln)
846 sfcoptics%Direct_Reflectivity(1,1) = sfcoptics%Reflectivity(1,1,1,1)
854 rtsolution(ln,m)%Radiance =
zero 863 sensor_dependent_rtsolution: &
864 IF ( spccoeff_isinfraredsensor(
sc(sensorindex) ) .OR. &
865 spccoeff_ismicrowavesensor(
sc(sensorindex) ) )
THEN 872 sfcoptics%mth_Azi = 0
885 IF ( error_status /=
success )
THEN 886 WRITE( message,
'( "Error computing RTSolution for ", a, & 887 &", channel ", i0,", profile #",i0)' ) &
888 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
894 IF ( apply_nlte_correction .AND. nlte_predictor_isactive(nlte_predictor) ) &
896 sc(sensorindex)%NC , &
899 rtsolution(ln,m)%Radiance )
905 rtsolution(ln,m)%Radiance , &
906 rtsolution(ln,m)%Brightness_Temperature )
909 IF ( compute_antcorr )
THEN 919 rtsolution_ad(ln,m) )
926 rtsolution(ln,m)%Radiance , &
927 rtsolution_ad(ln,m)%Brightness_Temperature, &
928 rtsolution_ad(ln,m)%Radiance )
929 rtsolution_ad(ln,m)%Brightness_Temperature =
zero 932 IF ( apply_nlte_correction .AND. nlte_predictor_isactive(nlte_predictor) ) &
934 sc(sensorindex)%NC , &
936 rtsolution_ad(ln,m)%Radiance, &
946 rtsolution_ad(ln,m), &
955 IF ( error_status /=
success )
THEN 956 WRITE( message,
'( "Error computing RTSolution_AD for ", a, & 957 &", channel ", i0,", profile #",i0)' ) &
958 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
964 ELSE sensor_dependent_rtsolution
969 azimuth_fourier_loop:
DO mth_azi = 0, rtv%n_Azi
972 rtv%mth_Azi = mth_azi
973 sfcoptics%mth_Azi = mth_azi
986 IF ( error_status /=
success )
THEN 987 WRITE( message,
'( "Error computing RTSolution for ", a, & 988 &", channel ", i0,", profile #",i0)' ) &
989 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
1000 rtsolution(ln,m) , &
1001 rtsolution_ad(ln,m), &
1010 IF ( error_status /=
success )
THEN 1011 WRITE( message,
'( "Error computing RTSolution_AD for ", a, & 1012 &", channel ", i0,", profile #",i0)' ) &
1013 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
1017 END DO azimuth_fourier_loop
1023 rtsolution(ln,m)%Radiance , &
1024 rtsolution(ln,m)%Brightness_Temperature )
1026 END IF sensor_dependent_rtsolution
1033 IF( atmoptics%Include_Scattering )
THEN 1039 IF ( atm%n_Aerosols > 0 )
THEN 1047 IF ( error_status /=
success )
THEN 1048 WRITE( message,
'("Error computing AerosolScatter_AD for ",a,& 1049 &", channel ",i0,", profile #",i0)' ) &
1050 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
1058 IF ( atm%n_Clouds > 0 )
THEN 1066 IF ( error_status /=
success )
THEN 1067 WRITE( message,
'("Error computing CloudScatter_AD for ",a,& 1068 &", channel ",i0,", profile #",i0)' ) &
1069 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
1077 IF( rtv%Visible_Flag_true )
THEN 1078 wavenumber =
sc(sensorindex)%Wavenumber(channelindex)
1083 IF ( error_status /=
success )
THEN 1084 WRITE( message,
'("Error computing MoleculeScatter_AD for ",a,& 1085 &", channel ",i0,", profile #",i0)' ) &
1086 trim(channelinfo(n)%Sensor_ID), &
1087 channelinfo(n)%Sensor_Channel(l), &
1097 transmittance_ad = sfcoptics_ad%transmittance
1098 sfcoptics_ad%transmittance =
zero 1114 IF ( apply_nlte_correction )
THEN 1117 nlte_predictor_ad, &
1147 IF ( error_status /=
success )
THEN 1149 WRITE( message,
'("Error adding AD extra layers to profile #",i0)' ) m
1196 CHARACTER(*),
INTENT(OUT) :: id
integer function, public crtm_compute_aerosolscatter_ad(Atm, AScat, AScat_AD, SensorIndex, ChannelIndex, Atm_AD, ASV)
integer function, public crtm_adjoint(Atmosphere, Surface, RTSolution_AD, Geometry, ChannelInfo, Atmosphere_AD, Surface_AD, RTSolution, Options)
subroutine, public crtm_compute_transmittance(atmoptics, transmittance)
logical function, public crtm_aerosolcoeff_isloaded()
integer, parameter, public max_n_azimuth_fourier
elemental type(crtm_atmosphere_type) function, public crtm_atmosphere_addlayercopy(atm, n_Added_Layers)
logical function, public crtm_cloudcoeff_isloaded()
integer, parameter, public failure
integer, parameter, public set
real(fp), parameter, public zero
integer, parameter, public warning
integer, parameter, public max_n_phase_elements
subroutine, public crtm_combine_atmoptics(AtmOptics, AOvar)
logical function, public crtm_options_isvalid(self)
integer, parameter, public fp
subroutine, public crtm_adjoint_version(Id)
elemental subroutine, public crtm_atmosphere_destroy(Atm)
integer, parameter, public max_n_angles
real(fp), parameter, public scattering_albedo_threshold
integer function, public crtm_compute_moleculescatter_ad(Wavenumber, AtmOptics_AD, Atmosphere_AD, Message_Log)
elemental subroutine, public crtm_geometryinfo_setvalue(gInfo, Geometry, iFOV, Longitude, Latitude, Surface_Altitude, Sensor_Scan_Angle, Sensor_Zenith_Angle, Sensor_Azimuth_Angle, Source_Zenith_Angle, Source_Azimuth_Angle, Flux_Zenith_Angle, Year, Month, Day, Distance_Ratio, Sensor_Scan_Radian, Sensor_Zenith_Radian, Sensor_Azimuth_Radian, Secant_Sensor_Zenith, Cosine_Sensor_Zenith, Source_Zenith_Radian, Source_Azimuth_Radian, Secant_Source_Zenith, Flux_Zenith_Radian, Secant_Flux_Zenith, Trans_Zenith_Radian, Secant_Trans_Zenith, AU_ratio2)
logical function, public crtm_atmosphere_isvalid(Atm)
subroutine, public crtm_combine_atmoptics_ad(AtmOptics, AtmOptics_AD, AOvar)
elemental subroutine, public crtm_atmoptics_destroy(self)
elemental subroutine, public csvar_create(self, n_Legendre_Terms, n_Phase_Elements, n_Layers, n_Clouds)
elemental subroutine, public crtm_geometryinfo_compute(gInfo)
elemental subroutine, public crtm_predictor_create(self, n_Layers, SensorIndex, SaveFWV)
pure logical function, public crtm_include_scattering(atmoptics)
integer, parameter, public max_n_legendre_terms
elemental subroutine, public crtm_sfcoptics_create(SfcOptics, n_Angles, n_Stokes)
integer function, public crtm_compute_rtsolution(Atmosphere, Surface, AtmOptics, SfcOptics, GeometryInfo, SensorIndex, ChannelIndex, RTSolution, RTV)
elemental logical function, public crtm_atmoptics_associated(self)
real(fp), parameter, public max_source_zenith_angle
elemental subroutine, public rtv_create(RTV, n_Angles, n_Legendre_Terms, n_Layers)
elemental subroutine, public crtm_atmoptics_zero(self)
integer, parameter, public max_n_streams
pure logical function, public crtm_no_scattering(atmoptics)
integer, parameter, public max_n_stokes
integer function, public crtm_compute_aerosolscatter(Atm, SensorIndex, ChannelIndex, AScat, ASV)
subroutine, public crtm_compute_surfacet_ad(Surface, SfcOptics_AD, Surface_AD)
subroutine, public crtm_planck_temperature_ad(n, l, Radiance, Temperature_AD, Radiance_AD)
integer function, public crtm_compute_cloudscatter(Atm, SensorIndex, ChannelIndex, CScat, CSV)
integer, parameter, public not_set
real(fp), parameter, public one
recursive subroutine, public display_message(Routine_Name, Message, Error_State, Message_Log)
integer function, public crtm_compute_moleculescatter(Wavenumber, Atmosphere, AtmOptics, Message_Log)
elemental logical function, public csvar_associated(self)
integer function, public crtm_atmosphere_addlayers_ad(Atm_In, Atm_Out_AD, Atm_In_AD)
subroutine, public crtm_compute_surfacet(Surface, SfcOptics)
subroutine, public compute_nlte_predictor_ad(NLTE_Predictor, NLTE_Predictor_AD, Atm_AD)
subroutine, public crtm_compute_antcorr(gI, n, l, RT)
elemental subroutine, public asvar_destroy(self)
elemental logical function, public crtm_sfcoptics_associated(SfcOptics)
elemental subroutine, public csvar_destroy(self)
integer function, public crtm_compute_nstreams(Atmosphere, SensorIndex, ChannelIndex, RTSolution)
elemental subroutine, public crtm_atmoptics_create(self, n_Layers, n_Legendre_Terms, n_Phase_Elements)
logical function, public crtm_surface_isvalid(Sfc)
logical function, public crtm_geometry_isvalid(geo)
integer function, public crtm_compute_cloudscatter_ad(Atm, CScat, CScat_AD, SensorIndex, ChannelIndex, Atm_AD, CSV)
elemental subroutine, public crtm_predictor_destroy(self)
subroutine, public crtm_compute_transmittance_ad(atmoptics, transmittance_AD, atmoptics_AD)
subroutine, public crtm_compute_predictors(SensorIndex, Atmosphere, GeometryInfo, AncillaryInput, Predictor, iVar)
subroutine, public compute_nlte_correction_ad(NLTECoeff, ChannelIndex, Radiance_AD, NLTE_Predictor_AD)
integer function, public crtm_compute_rtsolution_ad(Atmosphere, Surface, AtmOptics, SfcOptics, RTSolution, RTSolution_AD, GeometryInfo, SensorIndex, ChannelIndex, Atmosphere_AD, Surface_AD, AtmOptics_AD, SfcOptics_AD, RTV)
type(spccoeff_type), dimension(:), allocatable, save, public sc
elemental logical function, public asvar_associated(self)
integer, parameter, public max_n_layers
subroutine, public compute_nlte_correction(NLTECoeff, ChannelIndex, NLTE_Predictor, Radiance)
subroutine, public crtm_compute_atmabsorption_ad(SensorIndex, ChannelIndex, Predictor, AtmOptics_AD, Predictor_AD, iVar)
subroutine, public crtm_compute_atmabsorption(SensorIndex, ChannelIndex, AncillaryInput, Predictor, AtmOptics, iVar)
elemental subroutine, public crtm_sfcoptics_destroy(SfcOptics)
subroutine, public crtm_compute_predictors_ad(SensorIndex, Atmosphere, Predictor, Predictor_AD, AncillaryInput, Atmosphere_AD, iVar)
integer function, public crtm_atmosphere_addlayers(Atm_In, Atm_Out)
subroutine, public crtm_planck_temperature(n, l, Radiance, Temperature)
elemental integer function, public crtm_channelinfo_n_channels(ChannelInfo)
subroutine, public compute_nlte_predictor(NLTECoeff, Atm, gInfo, NLTE_Predictor)
elemental logical function, public crtm_predictor_associated(self)
elemental logical function, public rtv_associated(RTV)
elemental subroutine, public asvar_create(self, n_Legendre_Terms, n_Phase_Elements, n_Layers, n_Aerosols)
subroutine, public crtm_compute_antcorr_ad(gI, n, l, RT_AD)
integer, parameter, public success
elemental subroutine, public crtm_geometryinfo_getvalue(gInfo, Geometry, iFOV, Longitude, Latitude, Surface_Altitude, Sensor_Scan_Angle, Sensor_Zenith_Angle, Sensor_Azimuth_Angle, Source_Zenith_Angle, Source_Azimuth_Angle, Flux_Zenith_Angle, Year, Month, Day, Distance_Ratio, Sensor_Scan_Radian, Sensor_Zenith_Radian, Sensor_Azimuth_Radian, Secant_Sensor_Zenith, Cosine_Sensor_Zenith, Source_Zenith_Radian, Source_Azimuth_Radian, Secant_Source_Zenith, Flux_Zenith_Radian, Secant_Flux_Zenith, Trans_Zenith_Radian, Secant_Trans_Zenith, AU_ratio2)
character(*), parameter module_version_id
elemental logical function, public accoeff_associated(ACCoeff)
elemental subroutine, public rtv_destroy(RTV)
integer function, public crtm_get_pressurelevelidx(Atm, Level_Pressure)
elemental logical function, public nltecoeff_associated(NLTECoeff)