31 spccoeff_isinfraredsensor , &
32 spccoeff_ismicrowavesensor, &
33 spccoeff_isvisiblesensor
98 nlte_predictor_isactive , &
147 '$Id: CRTM_K_Matrix_Module.f90 60152 2015-08-13 19:19:13Z paul.vandelst@noaa.gov $' 274 Atmosphere , & ! FWD Input, M
275 Surface , & ! FWD Input, M
276 RTSolution_K, & ! K Input, L x M
277 Geometry , & ! Input, M
278 ChannelInfo , & ! Input, n_Sensors
279 Atmosphere_K, & ! K Output, L x M
280 Surface_K , & ! K Output, L x M
281 RTSolution , & ! FWD Output, L x M
283 result( error_status )
287 TYPE(crtm_rtsolution_type) ,
INTENT(IN OUT) :: rtsolution_k(:,:)
292 TYPE(crtm_rtsolution_type) ,
INTENT(IN OUT) :: rtsolution(:,:)
295 INTEGER :: error_status
297 CHARACTER(*),
PARAMETER :: routine_name =
'CRTM_K_Matrix' 299 CHARACTER(256) :: message
300 LOGICAL :: options_present
301 LOGICAL :: check_input
302 LOGICAL :: user_emissivity, user_direct_reflectivity, user_n_streams
303 LOGICAL :: user_antcorr, compute_antcorr
304 LOGICAL :: apply_nlte_correction
305 LOGICAL :: atmosphere_invalid, surface_invalid, geometry_invalid, options_invalid
306 INTEGER :: rt_algorithm_id
309 INTEGER :: n, n_sensors, sensorindex
310 INTEGER :: l, n_channels, channelindex
311 INTEGER :: m, n_profiles
313 INTEGER :: n_full_streams, mth_azi
314 REAL(fp) :: source_za
315 REAL(fp) :: wavenumber
316 REAL(fp) :: transmittance, transmittance_k
329 TYPE(crtm_pvar_type) :: pvar
330 TYPE(crtm_aavar_type) :: aavar
333 TYPE(aovar_type) :: aovar
336 TYPE(nlte_predictor_type) :: nlte_predictor, nlte_predictor_k
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(atmosphere_k,dim=1) < n_channels .OR. &
353 SIZE(surface_k ,dim=1) < n_channels .OR. &
354 SIZE(rtsolution_k,dim=1) < n_channels )
THEN 356 WRITE( message,
'("RTSolution and K-matrix (Atm,Sfc,RT) structure arrays too small (",& 357 &3(i0,","),i0,") for the number of requested channels (",i0,")")') &
358 SIZE(rtsolution ,dim=1), &
359 SIZE(atmosphere_k,dim=1), &
360 SIZE(surface_k ,dim=1), &
361 SIZE(rtsolution_k,dim=1), &
370 n_profiles =
SIZE(atmosphere)
372 IF (
SIZE(surface) /= n_profiles .OR. &
373 SIZE(rtsolution_k,dim=2) /= n_profiles .OR. &
374 SIZE(geometry) /= n_profiles .OR. &
375 SIZE(atmosphere_k,dim=2) /= n_profiles .OR. &
376 SIZE(surface_k ,dim=2) /= n_profiles .OR. &
377 SIZE(rtsolution ,dim=2) /= n_profiles )
THEN 379 message =
'Inconsistent profile dimensionality for input arguments.' 384 options_present = .false.
385 IF (
PRESENT( options ) )
THEN 386 options_present = .true.
387 IF (
SIZE( options ) /= n_profiles )
THEN 389 message =
'Inconsistent profile dimensionality for Options optional input argument.' 402 message =
'Error allocating SfcOptics data structures' 411 profile_loop:
DO m = 1, n_profiles
417 WRITE( message,
'("The CloudCoeff data must be loaded (with CRTM_Init routine) ", & 418 &"for the cloudy case profile #",i0)' ) m
424 WRITE( message,
'("The AerosolCoeff data must be loaded (with CRTM_Init routine) ", & 425 &"for the aerosol case profile #",i0)' ) m
434 atmosphere_k(l,m)%Climatology = atmosphere(m)%Climatology
436 DO j = 1, atmosphere(m)%n_Absorbers
437 atmosphere_k(l,m)%Absorber_ID(j) = atmosphere(m)%Absorber_ID(j)
438 atmosphere_k(l,m)%Absorber_Units(j) = atmosphere(m)%Absorber_Units(j)
441 DO nc = 1, atmosphere(m)%n_Clouds
442 atmosphere_k(l,m)%Cloud(nc)%Type = atmosphere(m)%Cloud(nc)%Type
445 DO na = 1, atmosphere(m)%n_Aerosols
446 atmosphere_k(l,m)%Aerosol(na)%Type = atmosphere(m)%Aerosol(na)%Type
449 surface_k(l,m)%Land_Coverage = surface(m)%Land_Coverage
450 surface_k(l,m)%Water_Coverage = surface(m)%Water_Coverage
451 surface_k(l,m)%Snow_Coverage = surface(m)%Snow_Coverage
452 surface_k(l,m)%Ice_Coverage = surface(m)%Ice_Coverage
453 surface_k(l,m)%Land_Type = surface(m)%Land_Type
454 surface_k(l,m)%Water_Type = surface(m)%Water_Type
455 surface_k(l,m)%Snow_Type = surface(m)%Snow_Type
456 surface_k(l,m)%Ice_Type = surface(m)%Ice_Type
462 check_input = default_options%Check_Input
463 user_emissivity = default_options%Use_Emissivity
464 user_antcorr = default_options%Use_Antenna_Correction
465 apply_nlte_correction = default_options%Apply_NLTE_Correction
466 rt_algorithm_id = default_options%RT_Algorithm_Id
467 user_n_streams = default_options%Use_N_Streams
469 IF (options_present)
THEN 471 check_input = options(m)%Check_Input
473 user_emissivity = options(m)%Use_Emissivity
474 IF ( options(m)%Use_Emissivity )
THEN 476 IF ( options(m)%n_Channels < n_channels )
THEN 478 WRITE( message,
'( "Input Options channel dimension (", i0, ") is less ", & 479 &"than the number of requested channels (",i0, ")" )' ) &
480 options(m)%n_Channels, n_channels
485 user_direct_reflectivity = options(m)%Use_Direct_Reflectivity
488 user_antcorr = options(m)%Use_Antenna_Correction
490 apply_nlte_correction = options(m)%Apply_NLTE_Correction
493 ancillaryinput%SSU = options(m)%SSU
494 ancillaryinput%Zeeman = options(m)%Zeeman
496 sfcoptics%Use_New_MWSSEM = .NOT. options(m)%Use_Old_MWSSEM
498 rt_algorithm_id = options(m)%RT_Algorithm_ID
500 user_n_streams = options(m)%Use_N_Streams
502 IF ( user_n_streams )
THEN 503 IF ( options(m)%n_Streams <= 0 .OR. mod(options(m)%n_Streams,2) /= 0 .OR. &
506 WRITE( message,
'( "Input Options n_Streams (", i0, ") is invalid" )' ) &
516 IF ( check_input )
THEN 521 IF ( atmosphere_invalid .OR. surface_invalid .OR. geometry_invalid )
THEN 523 WRITE( message,
'("Input data check failed for profile #",i0)' ) m
528 IF ( options_present )
THEN 530 IF ( options_invalid )
THEN 532 WRITE( message,
'("Options data check failed for profile #",i0)' ) m
548 source_zenith_angle = source_za )
558 IF ( error_status /=
success )
THEN 560 WRITE( message,
'("Error adding FWD extra layers to profile #",i0)' ) m
567 WRITE( message,
'("Added layers [",i0,"] cause total [",i0,"] to exceed the ",& 568 &"maximum allowed [",i0,"] for profile #",i0)' ) &
585 WRITE( message,
'("Error allocating AtmOptics data structures for profile #",i0)' ) m
589 IF (options_present)
THEN 591 atmoptics%Include_Scattering = options(m)%Include_Scattering
592 atmoptics_k%Include_Scattering = options(m)%Include_Scattering
595 CALL aovar_create( aovar, atm%n_Layers )
600 IF ( atm%n_Clouds > 0 )
THEN 608 IF ( atm%n_Aerosols > 0 )
THEN 623 sensor_loop:
DO n = 1, n_sensors
627 sensorindex = channelinfo(n)%Sensor_Index
631 IF ( user_antcorr .AND. &
634 compute_antcorr = .true.
636 compute_antcorr = .false.
653 WRITE( message,
'("Error allocating predictor structures for profile #",i0, & 654 &" and ",a," sensor.")' ) m,
sc(sensorindex)%Sensor_Id
670 IF( (atm%n_Clouds > 0 .OR. &
671 atm%n_Aerosols > 0 .OR. &
672 spccoeff_isvisiblesensor(
sc(sensorindex) ) ) .and. atmoptics%Include_Scattering )
THEN 676 WRITE( message,
'("Error allocating RTV structure for profile #",i0, & 677 &" and ",a," sensor.")' ) m, trim(
sc(sensorindex)%Sensor_Id)
682 rtv%RT_Algorithm_Id = rt_algorithm_id
687 IF ( apply_nlte_correction )
THEN 689 sc(sensorindex)%NC, &
699 channel_loop:
DO l = 1, channelinfo(n)%n_Channels
704 IF ( .NOT. channelinfo(n)%Process_Channel(l) ) cycle channel_loop
706 channelindex = channelinfo(n)%Channel_Index(l)
710 rtsolution(ln,m)%Sensor_Id = channelinfo(n)%Sensor_Id
711 rtsolution(ln,m)%WMO_Satellite_Id = channelinfo(n)%WMO_Satellite_Id
712 rtsolution(ln,m)%WMO_Sensor_Id = channelinfo(n)%WMO_Sensor_Id
713 rtsolution(ln,m)%Sensor_Channel = channelinfo(n)%Sensor_Channel(l)
714 rtsolution_k(ln,m)%Sensor_Id = rtsolution(ln,m)%Sensor_Id
715 rtsolution_k(ln,m)%WMO_Satellite_Id = rtsolution(ln,m)%WMO_Satellite_Id
716 rtsolution_k(ln,m)%WMO_Sensor_Id = rtsolution(ln,m)%WMO_Sensor_Id
717 rtsolution_k(ln,m)%Sensor_Channel = rtsolution(ln,m)%Sensor_Channel
722 transmittance_k =
zero 730 IF ( user_n_streams )
THEN 731 n_full_streams = options(m)%n_Streams
732 rtsolution(ln,m)%n_Full_Streams = n_full_streams + 2
733 rtsolution(ln,m)%Scattering_Flag = .true.
741 atmoptics%n_Legendre_Terms = n_full_streams
742 atmoptics_k%n_Legendre_Terms = n_full_streams
761 IF(
sc(sensorindex)%Solar_Irradiance(channelindex) >
zero .AND. &
763 rtv%Solar_Flag_true = .true.
766 IF( spccoeff_isvisiblesensor(
sc(sensorindex) ) .AND. rtv%Solar_Flag_true )
THEN 767 rtv%Visible_Flag_true = .true.
769 IF( atmoptics%n_Legendre_Terms < 4 )
THEN 770 atmoptics%n_Legendre_Terms = 4
771 atmoptics_k%n_Legendre_Terms = atmoptics%n_Legendre_Terms
772 rtsolution(ln,m)%Scattering_FLAG = .true.
773 rtsolution(ln,m)%n_Full_Streams = atmoptics%n_Legendre_Terms + 2
777 wavenumber =
sc(sensorindex)%Wavenumber(channelindex)
782 IF ( error_status /=
success )
THEN 783 WRITE( message,
'("Error computing MoleculeScatter for ",a,& 784 &", channel ",i0,", profile #",i0)') &
785 trim(channelinfo(n)%Sensor_ID), &
786 channelinfo(n)%Sensor_Channel(l), &
792 rtv%Visible_Flag_true = .false.
798 IF( atm%n_Clouds > 0 )
THEN 804 IF (error_status /=
success)
THEN 805 WRITE( message,
'("Error computing CloudScatter for ",a,& 806 &", channel ",i0,", profile #",i0)' ) &
807 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
815 IF ( atm%n_Aerosols > 0 )
THEN 821 IF ( error_status /=
success )
THEN 822 WRITE( message,
'("Error computing AerosolScatter for ",a,& 823 &", channel ",i0,", profile #",i0)' ) &
824 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
832 IF( atmoptics%Include_Scattering )
THEN 836 rtsolution(ln,m)%SOD = atmoptics%Scattering_Optical_Depth
841 sfcoptics%Transmittance = -
one 843 sfcoptics%Transmittance = transmittance
849 sfcoptics%Compute = .true.
851 IF ( user_emissivity )
THEN 852 sfcoptics%Compute = .false.
853 sfcoptics%Emissivity(1,1) = options(m)%Emissivity(ln)
854 sfcoptics%Reflectivity(1,1,1,1) =
one - options(m)%Emissivity(ln)
855 IF ( user_direct_reflectivity )
THEN 856 sfcoptics%Direct_Reflectivity(1,1) = options(m)%Direct_Reflectivity(ln)
858 sfcoptics%Direct_Reflectivity(1,1) = sfcoptics%Reflectivity(1,1,1,1)
867 rtsolution(ln,m)%Radiance =
zero 876 sensor_dependent_rtsolution: &
877 IF ( spccoeff_isinfraredsensor(
sc(sensorindex) ) .OR. &
878 spccoeff_ismicrowavesensor(
sc(sensorindex) ) )
THEN 885 sfcoptics%mth_Azi = 0
898 IF ( error_status /=
success )
THEN 899 WRITE( message,
'( "Error computing RTSolution for ", a, & 900 &", channel ", i0,", profile #",i0)' ) &
901 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
907 IF ( apply_nlte_correction .AND. nlte_predictor_isactive(nlte_predictor) ) &
909 sc(sensorindex)%NC , &
912 rtsolution(ln,m)%Radiance )
918 rtsolution(ln,m)%Radiance , &
919 rtsolution(ln,m)%Brightness_Temperature )
922 IF ( compute_antcorr )
THEN 939 rtsolution(ln,m)%Radiance , &
940 rtsolution_k(ln,m)%Brightness_Temperature, &
941 rtsolution_k(ln,m)%Radiance )
942 rtsolution_k(ln,m)%Brightness_Temperature =
zero 945 IF ( apply_nlte_correction .AND. nlte_predictor_isactive(nlte_predictor) ) &
947 sc(sensorindex)%NC , &
949 rtsolution_k(ln,m)%Radiance, &
959 rtsolution_k(ln,m), &
968 IF ( error_status /=
success )
THEN 969 WRITE( message,
'( "Error computing RTSolution_K for ", a, & 970 &", channel ", i0,", profile #",i0)' ) &
971 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
977 ELSE sensor_dependent_rtsolution
982 azimuth_fourier_loop:
DO mth_azi = 0, rtv%n_Azi
985 rtv%mth_Azi = mth_azi
986 sfcoptics%mth_Azi = mth_azi
999 IF ( error_status /=
success )
THEN 1000 WRITE( message,
'( "Error computing RTSolution for ", a, & 1001 &", channel ", i0,", profile #",i0)' ) &
1002 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
1013 rtsolution(ln,m) , &
1014 rtsolution_k(ln,m), &
1023 IF ( error_status /=
success )
THEN 1024 WRITE( message,
'( "Error computing RTSolution_K for ", a, & 1025 &", channel ", i0,", profile #",i0)' ) &
1026 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
1030 END DO azimuth_fourier_loop
1036 rtsolution(ln,m)%Radiance , &
1037 rtsolution(ln,m)%Brightness_Temperature )
1039 END IF sensor_dependent_rtsolution
1046 IF( atmoptics%Include_Scattering )
THEN 1052 IF ( atm%n_Aerosols > 0 )
THEN 1060 IF ( error_status /=
success )
THEN 1061 WRITE( message,
'("Error computing AerosolScatter_K for ",a,& 1062 &", channel ",i0,", profile #",i0)' ) &
1063 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
1071 IF ( atm%n_Clouds > 0 )
THEN 1079 IF ( error_status /=
success )
THEN 1080 WRITE( message,
'("Error computing CloudScatter_K for ",a,& 1081 &", channel ",i0,", profile #",i0)' ) &
1082 trim(channelinfo(n)%Sensor_ID), channelinfo(n)%Sensor_Channel(l), m
1090 IF( rtv%Visible_Flag_true )
THEN 1091 wavenumber =
sc(sensorindex)%Wavenumber(channelindex)
1096 IF ( error_status /=
success )
THEN 1097 WRITE( message,
'("Error computing MoleculeScatter_K for ",a,& 1098 &", channel ",i0,", profile #",i0)' ) &
1099 trim(channelinfo(n)%Sensor_ID), &
1100 channelinfo(n)%Sensor_Channel(l), &
1110 transmittance_k = sfcoptics_k%transmittance
1111 sfcoptics_k%transmittance =
zero 1126 IF ( apply_nlte_correction )
THEN 1129 nlte_predictor_k , &
1149 IF ( error_status /=
success )
THEN 1151 WRITE( message,
'("Error adding AD extra layers to profile #",i0)' ) m
1210 CHARACTER(*),
INTENT(OUT) :: id
integer function, public crtm_compute_aerosolscatter_ad(Atm, AScat, AScat_AD, SensorIndex, ChannelIndex, Atm_AD, ASV)
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 function, public crtm_k_matrix(Atmosphere, Surface, RTSolution_K, Geometry, ChannelInfo, Atmosphere_K, Surface_K, RTSolution, Options)
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
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)
character(*), parameter module_version_id
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_k_matrix_version(Id)
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)
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)