25 spccoeff_ismicrowavesensor , &
26 spccoeff_isinfraredsensor , &
27 spccoeff_isvisiblesensor , &
28 spccoeff_isultravioletsensor, &
31 first_stokes_component, &
32 second_stokes_component, &
33 third_stokes_component, &
34 fourth_stokes_component, &
37 plus45l_polarization, &
38 minus45l_polarization, &
39 vl_mixed_polarization, &
40 hl_mixed_polarization, &
122 '$Id: CRTM_SfcOptics.f90 60152 2015-08-13 19:19:13Z paul.vandelst@noaa.gov $' 124 INTEGER,
PARAMETER ::
ml = 256
134 TYPE(mwlsovar_type) :: mwlsov
135 TYPE(mwwsovar_type) :: mwwsov
136 TYPE(mwssovar_type) :: mwssov
137 TYPE(mwisovar_type) :: mwisov
139 TYPE(irlsovar_type) :: irlsov
140 TYPE(irwsovar_type) :: irwsov
141 TYPE(irssovar_type) :: irssov
142 TYPE(irisovar_type) :: irisov
144 TYPE(vislsovar_type) :: vislsov
145 TYPE(viswsovar_type) :: viswsov
146 TYPE(visssovar_type) :: visssov
147 TYPE(visisovar_type) :: visisov
199 sfcoptics%Surface_Temperature = &
200 ( surface%Land_Coverage * surface%Land_Temperature ) + &
201 ( surface%Water_Coverage * surface%Water_Temperature ) + &
202 ( surface%Snow_Coverage * surface%Snow_Temperature ) + &
203 ( surface%Ice_Coverage * surface%Ice_Temperature )
255 Surface_TL, & ! Input
263 sfcoptics_tl%Surface_Temperature = &
264 ( surface%Land_Coverage * surface_tl%Land_Temperature ) + &
265 ( surface%Water_Coverage * surface_tl%Water_Temperature ) + &
266 ( surface%Snow_Coverage * surface_tl%Snow_Temperature ) + &
267 ( surface%Ice_Coverage * surface_tl%Ice_Temperature )
329 SfcOptics_AD, & ! Input
337 surface_ad%Land_Temperature = surface_ad%Land_Temperature + &
338 (surface%Land_Coverage *sfcoptics_ad%Surface_Temperature)
339 surface_ad%Water_Temperature = surface_ad%Water_Temperature + &
340 (surface%Water_Coverage*sfcoptics_ad%Surface_Temperature)
341 surface_ad%Snow_Temperature = surface_ad%Snow_Temperature + &
342 (surface%Snow_Coverage *sfcoptics_ad%Surface_Temperature)
343 surface_ad%Ice_Temperature = surface_ad%Ice_Temperature + &
344 (surface%Ice_Coverage *sfcoptics_ad%Surface_Temperature)
345 sfcoptics_ad%Surface_Temperature =
zero 444 GeometryInfo, & ! Input
445 SensorIndex , & ! Input
446 ChannelIndex, & ! Input
447 SfcOptics , & ! Output
449 result( error_status )
453 INTEGER ,
INTENT(IN) :: sensorindex
454 INTEGER ,
INTENT(IN) :: channelindex
458 INTEGER :: error_status
460 CHARACTER(*),
PARAMETER :: routine_name =
'CRTM_Compute_SfcOptics' 462 CHARACTER(ML) :: message
465 REAL(fp) :: sin2_angle
466 REAL(fp),
DIMENSION(SfcOptics%n_Angles,MAX_N_STOKES) :: emissivity
467 REAL(fp),
DIMENSION(SfcOptics%n_Angles,MAX_N_STOKES, &
SfcOptics%n_Angles,MAX_N_STOKES) :: reflectivity
468 REAL(fp),
DIMENSION(SfcOptics%n_Angles,MAX_N_STOKES) :: direct_reflectivity
469 INTEGER :: polarization
476 nl = sfcoptics%n_Stokes
477 nz = sfcoptics%n_Angles
478 polarization =
sc(sensorindex)%Polarization(channelindex)
482 direct_reflectivity =
zero 493 sensor_select:
IF ( spccoeff_ismicrowavesensor(
sc(sensorindex) ) )
THEN 498 microwave_land:
IF( surface%Land_Coverage >
zero)
THEN 506 IF ( error_status /=
success )
THEN 507 WRITE( message,
'("Error computing MW land SfcOptics at ",& 508 &"channel index ",i0)' ) channelindex
515 emissivity(1:nz,1:2) = sfcoptics%Emissivity(1:nz,1:2) * surface%Land_Coverage
516 reflectivity(1:nz,1:2,1:nz,1:2) = sfcoptics%Reflectivity(1:nz,1:2,1:nz,1:2) * surface%Land_Coverage
518 END IF microwave_land
524 microwave_water:
IF( surface%Water_Coverage >
zero )
THEN 534 IF ( error_status /=
success )
THEN 535 WRITE( message,
'("Error computing MW water SfcOptics at ",& 536 &"channel index ",i0)' ) channelindex
544 emissivity(1:nz,1:2) = emissivity(1:nz,1:2) + &
545 (sfcoptics%Emissivity(1:nz,1:2)*surface%Water_Coverage)
546 reflectivity(1:nz,1:2,1:nz,1:2) = reflectivity(1:nz,1:2,1:nz,1:2) + &
547 (sfcoptics%Reflectivity(1:nz,1:2,1:nz,1:2)*surface%Water_Coverage)
549 END IF microwave_water
555 microwave_snow:
IF( surface%Snow_Coverage >
zero )
THEN 564 IF ( error_status /=
success )
THEN 565 WRITE( message,
'("Error computing MW snow SfcOptics at ",& 566 &"channel index ",i0)' ) channelindex
573 emissivity(1:nz,1:2) = emissivity(1:nz,1:2) + &
574 (sfcoptics%Emissivity(1:nz,1:2)*surface%Snow_Coverage)
575 reflectivity(1:nz,1:2,1:nz,1:2) = reflectivity(1:nz,1:2,1:nz,1:2) + &
576 (sfcoptics%Reflectivity(1:nz,1:2,1:nz,1:2)*surface%Snow_Coverage)
578 END IF microwave_snow
584 microwave_ice:
IF( surface%Ice_Coverage >
zero )
THEN 593 IF ( error_status /=
success )
THEN 594 WRITE( message,
'("Error computing MW ice SfcOptics at ",& 595 &"channel index ",i0)' ) channelindex
602 emissivity(1:nz,1:2) = emissivity(1:nz,1:2) + &
603 (sfcoptics%Emissivity(1:nz,1:2)*surface%Ice_Coverage)
604 reflectivity(1:nz,1:2,1:nz,1:2) = reflectivity(1:nz,1:2,1:nz,1:2) + &
605 (sfcoptics%Reflectivity(1:nz,1:2,1:nz,1:2)*surface%Ice_Coverage)
624 decoupled_polarization:
IF( sfcoptics%n_Stokes == 1 )
THEN 630 polarization_type:
SELECT CASE( polarization )
637 sfcoptics%Emissivity(1:nz,1) = &
638 point_5 * ( emissivity(1:nz,1) + emissivity(1:nz,2) )
639 sfcoptics%Reflectivity(1:nz,1,1:nz,1) = &
640 point_5 * ( reflectivity(1:nz,1,1:nz,1) + reflectivity(1:nz,2,1:nz,2) )
645 CASE( second_stokes_component )
646 sfcoptics%Emissivity(1:nz,1) = &
647 point_5 * ( emissivity(1:nz,1) - emissivity(1:nz,2) )
648 sfcoptics%Reflectivity(1:nz,1,1:nz,1) = &
649 point_5 * ( reflectivity(1:nz,1,1:nz,1) - reflectivity(1:nz,2,1:nz,2) )
652 CASE ( third_stokes_component )
653 sfcoptics%Emissivity(1:nz,1) = emissivity(1:nz,3)
654 sfcoptics%Reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,3,1:nz,3)
657 CASE ( fourth_stokes_component )
658 sfcoptics%Emissivity(1:nz,1) = emissivity(1:nz,4)
659 sfcoptics%Reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,4,1:nz,4)
662 CASE ( vl_polarization )
663 sfcoptics%Emissivity(1:nz,1) = emissivity(1:nz,1)
664 sfcoptics%Reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,1,1:nz,1)
667 CASE ( hl_polarization )
668 sfcoptics%Emissivity(1:nz,1) = emissivity(1:nz,2)
669 sfcoptics%Reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,2,1:nz,2)
672 CASE ( plus45l_polarization )
674 sfcoptics%Emissivity(1:nz,1) = emissivity(1:nz,1)
675 sfcoptics%Reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,1,1:nz,1)
678 CASE ( minus45l_polarization )
679 sfcoptics%Emissivity(1:nz,1) = emissivity(1:nz,1)
680 sfcoptics%Reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,1,1:nz,1)
687 CASE ( vl_mixed_polarization )
689 sin2_angle = (geometryinfo%Distance_Ratio*sin(
degrees_to_radians*sfcoptics%Angle(i)))**2
690 sfcoptics%Emissivity(i,1) = (emissivity(i,1)*(
one-sin2_angle)) + &
691 (emissivity(i,2)*sin2_angle)
692 sfcoptics%Reflectivity(i,1,i,1) = (reflectivity(i,1,i,1)*(
one-sin2_angle)) + &
693 (reflectivity(i,2,i,2)*sin2_angle)
701 CASE ( hl_mixed_polarization )
703 sin2_angle = (geometryinfo%Distance_Ratio*sin(
degrees_to_radians*sfcoptics%Angle(i)))**2
704 sfcoptics%Emissivity(i,1) = (emissivity(i,1)*sin2_angle) + &
705 (emissivity(i,2)*(
one-sin2_angle))
706 sfcoptics%Reflectivity(i,1,i,1) = (reflectivity(i,1,i,1)*sin2_angle) + &
707 (reflectivity(i,2,i,2)*(
one-sin2_angle))
711 CASE ( rc_polarization )
712 sfcoptics%Emissivity(1:nz,1) = emissivity(1:nz,1)
713 sfcoptics%Reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,1,1:nz,1)
716 CASE ( lc_polarization )
717 sfcoptics%Emissivity(1:nz,1) = emissivity(1:nz,1)
718 sfcoptics%Reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,1,1:nz,1)
723 WRITE( message,
'("Unrecognised polarization flag for microwave ",& 724 &"channel index ",i0)' ) channelindex
728 END SELECT polarization_type
737 sfcoptics%Emissivity(1:nz,1:nl) = emissivity(1:nz,1:nl)
738 sfcoptics%Reflectivity(1:nz,1:nl,1:nz,1:nl) = reflectivity(1:nz,1:nl,1:nz,1:nl)
740 END IF decoupled_polarization
752 ELSE IF ( spccoeff_isinfraredsensor(
sc(sensorindex) ) )
THEN 757 infrared_land:
IF( surface%Land_Coverage >
zero )
THEN 766 IF ( error_status /=
success )
THEN 767 WRITE( message,
'("Error computing IR land SfcOptics at ",& 768 &"channel index ",i0)' ) channelindex
775 emissivity(1:nz,1) = sfcoptics%Emissivity(1:nz,1) * surface%Land_Coverage
776 reflectivity(1:nz,1,1:nz,1) = sfcoptics%Reflectivity(1:nz,1,1:nz,1) * surface%Land_Coverage
777 direct_reflectivity(1:nz,1) = sfcoptics%Direct_Reflectivity(1:nz,1) * surface%Land_Coverage
784 infrared_water:
IF( surface%Water_Coverage >
zero )
THEN 794 IF ( error_status /=
success )
THEN 795 WRITE( message,
'("Error computing IR water SfcOptics at ",& 796 &"channel index ",i0)' ) channelindex
803 emissivity(1:nz,1) = emissivity(1:nz,1) + &
804 ( sfcoptics%Emissivity(1:nz,1) * surface%Water_Coverage )
805 reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,1,1:nz,1) + &
806 ( sfcoptics%Reflectivity(1:nz,1,1:nz,1) * surface%Water_Coverage )
807 direct_reflectivity(1:nz,1) = direct_reflectivity(1:nz,1) + &
808 ( sfcoptics%Direct_Reflectivity(1:nz,1) * surface%Water_Coverage )
810 END IF infrared_water
816 infrared_snow:
IF( surface%Snow_Coverage >
zero )
THEN 825 IF ( error_status /=
success )
THEN 826 WRITE( message,
'("Error computing IR snow SfcOptics at ",& 827 &"channel index ",i0)' ) channelindex
834 emissivity(1:nz,1) = emissivity(1:nz,1) + &
835 (sfcoptics%Emissivity(1:nz,1)*surface%Snow_Coverage)
836 reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,1,1:nz,1) + &
837 (sfcoptics%Reflectivity(1:nz,1,1:nz,1)*surface%Snow_Coverage)
838 direct_reflectivity(1:nz,1) = direct_reflectivity(1:nz,1) + &
839 ( sfcoptics%Direct_Reflectivity(1:nz,1)*surface%Snow_Coverage)
847 infrared_ice:
IF( surface%Ice_Coverage >
zero )
THEN 856 IF ( error_status /=
success )
THEN 857 WRITE( message,
'("Error computing IR ice SfcOptics at ",& 858 &"channel index ",i0)' ) channelindex
865 emissivity(1:nz,1) = emissivity(1:nz,1) + &
866 (sfcoptics%Emissivity(1:nz,1) * surface%Ice_Coverage)
867 reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,1,1:nz,1) + &
868 (sfcoptics%Reflectivity(1:nz,1,1:nz,1) * surface%Ice_Coverage)
869 direct_reflectivity(1:nz,1) = direct_reflectivity(1:nz,1) + &
870 ( sfcoptics%Direct_Reflectivity(1:nz,1)*surface%Ice_Coverage)
878 sfcoptics%Emissivity(1:nz,1) = emissivity(1:nz,1)
879 sfcoptics%Reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,1,1:nz,1)
880 sfcoptics%Direct_Reflectivity(1:nz,1) = direct_reflectivity(1:nz,1)
893 ELSE IF ( spccoeff_isvisiblesensor(
sc(sensorindex) ) )
THEN 895 mth_azi_test:
IF( sfcoptics%mth_Azi == 0 )
THEN 904 visible_land:
IF( surface%Land_Coverage >
zero )
THEN 913 IF ( error_status /=
success )
THEN 914 WRITE( message,
'("Error computing VIS land SfcOptics at ", & 915 &"channel index ",i0)' ) channelindex
922 emissivity(1:nz,1) = sfcoptics%Emissivity(1:nz,1) * surface%Land_Coverage
923 reflectivity(1:nz,1,1:nz,1) = sfcoptics%Reflectivity(1:nz,1,1:nz,1) * surface%Land_Coverage
924 direct_reflectivity(1:nz,1) = sfcoptics%Direct_Reflectivity(1:nz,1) * surface%Land_Coverage
932 visible_water:
IF( surface%Water_Coverage >
zero )
THEN 941 IF ( error_status /=
success )
THEN 942 WRITE( message,
'("Error computing VIS water SfcOptics at ",& 943 &"channel index ",i0)' ) channelindex
950 emissivity(1:nz,1) = emissivity(1:nz,1) + &
951 ( sfcoptics%Emissivity(1:nz,1) * surface%Water_Coverage )
952 reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,1,1:nz,1) + &
953 ( sfcoptics%Reflectivity(1:nz,1,1:nz,1) * surface%Water_Coverage )
954 direct_reflectivity(1:nz,1) = direct_reflectivity(1:nz,1) + &
955 ( sfcoptics%Direct_Reflectivity(1:nz,1) * surface%Water_Coverage )
963 visible_snow:
IF( surface%Snow_Coverage >
zero )
THEN 972 IF ( error_status /=
success )
THEN 973 WRITE( message,
'("Error computing VIS snow SfcOptics at ",& 974 &"channel index ",i0)' ) channelindex
981 emissivity(1:nz,1) = emissivity(1:nz,1) + &
982 (sfcoptics%Emissivity(1:nz,1)*surface%Snow_Coverage)
983 reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,1,1:nz,1) + &
984 (sfcoptics%Reflectivity(1:nz,1,1:nz,1)*surface%Snow_Coverage)
985 direct_reflectivity(1:nz,1) = direct_reflectivity(1:nz,1) + &
986 ( sfcoptics%Direct_Reflectivity(1:nz,1) * surface%Snow_Coverage )
994 visible_ice:
IF( surface%Ice_Coverage >
zero )
THEN 1003 IF ( error_status /=
success )
THEN 1004 WRITE( message,
'("Error computing VIS ice SfcOptics at ",& 1005 &"channel index ",i0)' ) channelindex
1012 emissivity(1:nz,1) = emissivity(1:nz,1) + &
1013 (sfcoptics%Emissivity(1:nz,1) * surface%Ice_Coverage)
1014 reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,1,1:nz,1) + &
1015 (sfcoptics%Reflectivity(1:nz,1,1:nz,1) * surface%Ice_Coverage)
1016 direct_reflectivity(1:nz,1) = direct_reflectivity(1:nz,1) + &
1017 ( sfcoptics%Direct_Reflectivity(1:nz,1) * surface%Ice_Coverage )
1025 sfcoptics%Emissivity(1:nz,1) = emissivity(1:nz,1)
1026 sfcoptics%Reflectivity(1:nz,1,1:nz,1) = reflectivity(1:nz,1,1:nz,1)
1027 sfcoptics%Direct_Reflectivity(1:nz,1) = direct_reflectivity(1:nz,1)
1031 sfcoptics%Emissivity(1:nz,1) =
zero 1032 sfcoptics%Reflectivity(1:nz,1,1:nz,1) =
zero 1033 sfcoptics%Direct_Reflectivity =
zero 1050 WRITE( message,
'("Unrecognised sensor type for channel index ",i0)' ) &
1055 END IF sensor_select
1170 SfcOptics , & ! Input
1171 Surface_TL , & ! Input
1172 GeometryInfo, & ! Input
1173 SensorIndex , & ! Input
1174 ChannelIndex, & ! Input
1175 SfcOptics_TL, & ! Output
1177 result( error_status )
1183 INTEGER ,
INTENT(IN) :: sensorindex
1184 INTEGER ,
INTENT(IN) :: channelindex
1188 INTEGER :: error_status
1190 CHARACTER(*),
PARAMETER :: routine_name =
'CRTM_Compute_SfcOptics_TL' 1192 CHARACTER(ML) :: message
1195 INTEGER :: polarization
1196 REAL(fp) :: sin2_angle
1197 REAL(fp),
DIMENSION(SfcOptics%n_Angles,MAX_N_STOKES) :: emissivity_tl
1198 REAL(fp),
DIMENSION(SfcOptics%n_Angles,MAX_N_STOKES, &
SfcOptics%n_Angles,MAX_N_STOKES) :: reflectivity_tl
1199 REAL(fp),
DIMENSION(SfcOptics%n_Angles,MAX_N_STOKES) :: direct_reflectivity_tl
1205 nl = sfcoptics%n_Stokes
1206 nz = sfcoptics%n_Angles
1207 polarization =
sc(sensorindex)%Polarization( channelindex )
1209 emissivity_tl =
zero 1210 reflectivity_tl =
zero 1211 direct_reflectivity_tl =
zero 1222 sensor_select:
IF ( spccoeff_ismicrowavesensor(
sc(sensorindex) ) )
THEN 1227 microwave_land:
IF( surface%Land_Coverage >
zero)
THEN 1231 IF ( error_status /=
success )
THEN 1232 WRITE( message,
'("Error computing MW land SfcOptics_TL at ",& 1233 &"channel index ",i0)' ) channelindex
1240 emissivity_tl(1:nz,1:2) = &
1241 sfcoptics_tl%Emissivity(1:nz,1:2)*surface%Land_Coverage
1242 reflectivity_tl(1:nz,1:2,1:nz,1:2) = &
1243 sfcoptics_tl%Reflectivity(1:nz,1:2,1:nz,1:2)*surface%Land_Coverage
1245 END IF microwave_land
1251 microwave_water:
IF( surface%Water_Coverage >
zero )
THEN 1262 IF ( error_status /=
success )
THEN 1263 WRITE( message,
'("Error computing MW water SfcOptics_TL at ",& 1264 &"channel index ",i0)' ) channelindex
1271 emissivity_tl(1:nz,1:2) = emissivity_tl(1:nz,1:2) + &
1272 ( sfcoptics_tl%Emissivity(1:nz,1:2) * surface%Water_Coverage )
1273 reflectivity_tl(1:nz,1:2,1:nz,1:2) = reflectivity_tl(1:nz,1:2,1:nz,1:2) + &
1274 ( sfcoptics_tl%Reflectivity(1:nz,1:2,1:nz,1:2) * surface%Water_Coverage )
1276 END IF microwave_water
1282 microwave_snow:
IF( surface%Snow_Coverage >
zero )
THEN 1286 IF ( error_status /=
success )
THEN 1287 WRITE( message,
'("Error computing MW snow SfcOptics_TL at ",& 1288 &"channel index ",i0)' ) channelindex
1295 emissivity_tl(1:nz,1:2) = emissivity_tl(1:nz,1:2) + &
1296 ( sfcoptics_tl%Emissivity(1:nz,1:2) * surface%Snow_Coverage )
1297 reflectivity_tl(1:nz,1:2,1:nz,1:2) = reflectivity_tl(1:nz,1:2,1:nz,1:2) + &
1298 ( sfcoptics_tl%Reflectivity(1:nz,1:2,1:nz,1:2) * surface%Snow_Coverage )
1300 ENDIF microwave_snow
1307 microwave_ice:
IF( surface%Ice_Coverage >
zero )
THEN 1311 IF ( error_status /=
success )
THEN 1312 WRITE( message,
'("Error computing MW ice SfcOptics_TL at ",& 1313 &"channel index ",i0)' ) channelindex
1320 emissivity_tl(1:nz,1:2) = emissivity_tl(1:nz,1:2) + &
1321 ( sfcoptics_tl%Emissivity(1:nz,1:2) * surface%Ice_Coverage )
1322 reflectivity_tl(1:nz,1:2,1:nz,1:2) = reflectivity_tl(1:nz,1:2,1:nz,1:2) + &
1323 ( sfcoptics_tl%Reflectivity(1:nz,1:2,1:nz,1:2) * surface%Ice_Coverage )
1342 decoupled_polarization:
IF( sfcoptics%n_Stokes == 1 )
THEN 1348 polarization_type:
SELECT CASE( polarization )
1355 sfcoptics_tl%Emissivity(1:nz,1) = &
1356 point_5 * ( emissivity_tl(1:nz,1) + emissivity_tl(1:nz,2) )
1357 sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) = &
1358 point_5 * ( reflectivity_tl(1:nz,1,1:nz,1) + reflectivity_tl(1:nz,2,1:nz,2) )
1363 CASE( second_stokes_component )
1364 sfcoptics_tl%Emissivity(1:nz,1) = &
1365 point_5 * ( emissivity_tl(1:nz,1) - emissivity_tl(1:nz,2) )
1366 sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) = &
1367 point_5 * ( reflectivity_tl(1:nz,1,1:nz,1) - reflectivity_tl(1:nz,2,1:nz,2) )
1370 CASE ( third_stokes_component )
1371 sfcoptics_tl%Emissivity(1:nz,1) = emissivity_tl(1:nz,3)
1372 sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) = reflectivity_tl(1:nz,3,1:nz,3)
1375 CASE ( fourth_stokes_component )
1376 sfcoptics_tl%Emissivity(1:nz,1) = emissivity_tl(1:nz,4)
1377 sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) = reflectivity_tl(1:nz,4,1:nz,4)
1380 CASE ( vl_polarization )
1381 sfcoptics_tl%Emissivity(1:nz,1) = emissivity_tl(1:nz,1)
1382 sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) = reflectivity_tl(1:nz,1,1:nz,1)
1385 CASE ( hl_polarization )
1386 sfcoptics_tl%Emissivity(1:nz,1) = emissivity_tl(1:nz,2)
1387 sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) = reflectivity_tl(:,2,:,2)
1390 CASE ( plus45l_polarization )
1391 sfcoptics_tl%Emissivity(1:nz,1) = emissivity_tl(1:nz,1)
1392 sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) = reflectivity_tl(1:nz,1,1:nz,1)
1395 CASE ( minus45l_polarization )
1396 sfcoptics_tl%Emissivity(1:nz,1) = emissivity_tl(1:nz,1)
1397 sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) = reflectivity_tl(1:nz,1,1:nz,1)
1404 CASE ( vl_mixed_polarization )
1406 sin2_angle = (geometryinfo%Distance_Ratio*sin(
degrees_to_radians*sfcoptics%Angle(i)))**2
1407 sfcoptics_tl%Emissivity(i,1) = (emissivity_tl(i,1)*(
one-sin2_angle)) + &
1408 (emissivity_tl(i,2)*sin2_angle)
1409 sfcoptics_tl%Reflectivity(i,1,i,1) = (reflectivity_tl(i,1,i,1)*(
one-sin2_angle)) + &
1410 (reflectivity_tl(i,2,i,2)*sin2_angle)
1418 CASE ( hl_mixed_polarization )
1420 sin2_angle = (geometryinfo%Distance_Ratio*sin(
degrees_to_radians*sfcoptics%Angle(i)))**2
1421 sfcoptics_tl%Emissivity(i,1) = (emissivity_tl(i,1)*sin2_angle) + &
1422 (emissivity_tl(i,2)*(
one-sin2_angle))
1423 sfcoptics_tl%Reflectivity(i,1,i,1) = (reflectivity_tl(i,1,i,1)*sin2_angle) + &
1424 (reflectivity_tl(i,2,i,2)*(
one-sin2_angle))
1428 CASE ( rc_polarization )
1429 sfcoptics_tl%Emissivity(1:nz,1) = emissivity_tl(1:nz,1)
1430 sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) = reflectivity_tl(1:nz,1,1:nz,1)
1433 CASE ( lc_polarization )
1434 sfcoptics_tl%Emissivity(1:nz,1) = emissivity_tl(1:nz,1)
1435 sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) = reflectivity_tl(1:nz,1,1:nz,1)
1440 WRITE( message,
'("Unrecognised polarization flag for microwave ",& 1441 &"channel index ",i0)' ) channelindex
1445 END SELECT polarization_type
1455 sfcoptics_tl%Emissivity = emissivity_tl(1:nz,1:nl)
1456 sfcoptics_tl%Reflectivity = reflectivity_tl(1:nz,1:nl,1:nz,1:nl)
1458 END IF decoupled_polarization
1470 ELSE IF ( spccoeff_isinfraredsensor(
sc(sensorindex) ) )
THEN 1476 infrared_land:
IF( surface%Land_Coverage >
zero )
THEN 1481 IF ( error_status /=
success )
THEN 1482 WRITE( message,
'("Error computing IR land SfcOptics_TL at ",& 1483 &"channel index ",i0)' ) channelindex
1490 emissivity_tl(1:nz,1) = &
1491 sfcoptics_tl%Emissivity(1:nz,1) * surface%Land_Coverage
1492 reflectivity_tl(1:nz,1,1:nz,1) = &
1493 sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) * surface%Land_Coverage
1495 END IF infrared_land
1501 infrared_water:
IF( surface%Water_Coverage >
zero )
THEN 1513 IF ( error_status /=
success )
THEN 1514 WRITE( message,
'("Error computing IR water SfcOptics_TL at ",& 1515 &"channel index ",i0)' ) channelindex
1522 emissivity_tl(1:nz,1) = emissivity_tl(1:nz,1) + &
1523 ( sfcoptics_tl%Emissivity(1:nz,1) * surface%Water_Coverage )
1524 reflectivity_tl(1:nz,1,1:nz,1) = reflectivity_tl(1:nz,1,1:nz,1) + &
1525 ( sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) * surface%Water_Coverage )
1526 direct_reflectivity_tl(1:nz,1) = direct_reflectivity_tl(1:nz,1) + &
1527 ( sfcoptics_tl%Direct_Reflectivity(1:nz,1) * surface%Water_Coverage )
1529 END IF infrared_water
1535 infrared_snow:
IF( surface%Snow_Coverage >
zero )
THEN 1539 IF ( error_status /=
success )
THEN 1540 WRITE( message,
'("Error computing IR snow SfcOptics_TL at ",& 1541 &"channel index ",i0)' ) channelindex
1548 emissivity_tl(1:nz,1) = emissivity_tl(1:nz,1) + &
1549 ( sfcoptics_tl%Emissivity(1:nz,1) * surface%Snow_Coverage )
1550 reflectivity_tl(1:nz,1,1:nz,1) = reflectivity_tl(1:nz,1,1:nz,1) + &
1551 ( sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) * surface%Snow_Coverage )
1552 direct_reflectivity_tl(1:nz,1) = direct_reflectivity_tl(1:nz,1) + &
1553 ( sfcoptics_tl%Direct_Reflectivity(1:nz,1) * surface%Snow_Coverage )
1555 END IF infrared_snow
1561 infrared_ice:
IF( surface%Ice_Coverage >
zero )
THEN 1565 IF ( error_status /=
success )
THEN 1566 WRITE( message,
'("Error computing IR ice SfcOptics_TL at ",& 1567 &"channel index ",i0)' ) channelindex
1574 emissivity_tl(1:nz,1) = emissivity_tl(1:nz,1) + &
1575 ( sfcoptics_tl%Emissivity(1:nz,1) * surface%Ice_Coverage )
1576 reflectivity_tl(1:nz,1,1:nz,1) = reflectivity_tl(1:nz,1,1:nz,1) + &
1577 ( sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) * surface%Ice_Coverage )
1578 direct_reflectivity_tl(1:nz,1) = direct_reflectivity_tl(1:nz,1) + &
1579 ( sfcoptics_tl%Direct_Reflectivity(1:nz,1) * surface%Ice_Coverage )
1587 sfcoptics_tl%Emissivity(1:nz,1) = emissivity_tl(1:nz,1)
1588 sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) = reflectivity_tl(1:nz,1,1:nz,1)
1589 sfcoptics_tl%Direct_Reflectivity(1:nz,1) = direct_reflectivity_tl(1:nz,1)
1600 ELSE IF ( spccoeff_isvisiblesensor(
sc(sensorindex) ) )
THEN 1606 sfcoptics_tl%Emissivity(1:nz,1) =
zero 1607 sfcoptics_tl%Reflectivity(1:nz,1,1:nz,1) =
zero 1608 sfcoptics_tl%Direct_Reflectivity =
zero 1622 WRITE( message,
'("Unrecognised sensor type for channel index ",i0)' ) &
1627 END IF sensor_select
1746 SfcOptics , & ! Input
1747 SfcOptics_AD, & ! Input
1748 GeometryInfo, & ! Input
1749 SensorIndex , & ! Input
1750 ChannelIndex, & ! Input
1751 Surface_AD , & ! Output
1753 result( error_status )
1759 INTEGER ,
INTENT(IN) :: sensorindex
1760 INTEGER ,
INTENT(IN) :: channelindex
1764 INTEGER :: error_status
1766 CHARACTER(*),
PARAMETER :: routine_name =
'CRTM_Compute_SfcOptics_AD' 1768 CHARACTER(256) :: message
1771 INTEGER :: polarization
1772 REAL(fp) :: sin2_angle
1773 REAL(fp),
DIMENSION(SfcOptics%n_Angles,MAX_N_STOKES) :: emissivity_ad
1774 REAL(fp),
DIMENSION(SfcOptics%n_Angles,MAX_N_STOKES, &
SfcOptics%n_Angles,MAX_N_STOKES) :: reflectivity_ad
1775 REAL(fp),
DIMENSION(SfcOptics%n_Angles,MAX_N_STOKES) :: direct_reflectivity_ad
1781 nl = sfcoptics%n_Stokes
1782 nz = sfcoptics%n_Angles
1783 polarization =
sc(sensorindex)%Polarization( channelindex )
1785 emissivity_ad =
zero 1786 reflectivity_ad =
zero 1787 direct_reflectivity_ad =
zero 1798 sensor_select:
IF ( spccoeff_ismicrowavesensor(
sc(sensorindex) ) )
THEN 1813 decoupled_polarization:
IF( sfcoptics%n_Stokes == 1 )
THEN 1819 polarization_type:
SELECT CASE( polarization )
1826 emissivity_ad(1:nz,1) = sfcoptics_ad%Emissivity(1:nz,1)
1827 emissivity_ad(1:nz,2) = sfcoptics_ad%Emissivity(1:nz,1)
1828 sfcoptics_ad%Emissivity =
zero 1829 reflectivity_ad(1:nz,1,1:nz,1) = sfcoptics_ad%Reflectivity(1:nz,1,1:nz,1)
1830 reflectivity_ad(1:nz,2,1:nz,2) = sfcoptics_ad%Reflectivity(1:nz,1,1:nz,1)
1831 sfcoptics_ad%Reflectivity =
zero 1836 CASE( second_stokes_component )
1837 emissivity_ad(1:nz,1) = sfcoptics_ad%Emissivity(1:nz,1)
1838 emissivity_ad(1:nz,2) = -sfcoptics_ad%Emissivity(1:nz,1)
1839 sfcoptics_ad%Emissivity =
zero 1840 reflectivity_ad(1:nz,1,1:nz,1) = sfcoptics_ad%Reflectivity(1:nz,1,1:nz,1)
1841 reflectivity_ad(1:nz,2,1:nz,2) = -sfcoptics_ad%Reflectivity(1:nz,1,1:nz,1)
1842 sfcoptics_ad%Reflectivity =
zero 1845 CASE ( third_stokes_component )
1846 emissivity_ad(1:nz,3) = sfcoptics_ad%Emissivity(1:nz,1)
1847 sfcoptics_ad%Emissivity =
zero 1848 reflectivity_ad(1:nz,3,1:nz,3) = sfcoptics_ad%Reflectivity(1:nz,1,1:nz,1)
1849 sfcoptics_ad%Reflectivity =
zero 1852 CASE ( fourth_stokes_component )
1853 emissivity_ad(1:nz,4) = sfcoptics_ad%Emissivity(1:nz,1)
1854 sfcoptics_ad%Emissivity =
zero 1855 reflectivity_ad(1:nz,4,1:nz,4) = sfcoptics_ad%Reflectivity(1:nz,1,1:nz,1)
1856 sfcoptics_ad%Reflectivity =
zero 1859 CASE ( vl_polarization )
1860 emissivity_ad(1:nz,1) = sfcoptics_ad%Emissivity(1:nz,1)
1861 sfcoptics_ad%Emissivity =
zero 1862 reflectivity_ad(1:nz,1,1:nz,1) = sfcoptics_ad%Reflectivity(1:nz,1,1:nz,1)
1863 sfcoptics_ad%Reflectivity =
zero 1866 CASE ( hl_polarization )
1867 emissivity_ad(1:nz,2) = sfcoptics_ad%Emissivity(1:nz,1)
1868 sfcoptics_ad%Emissivity =
zero 1869 reflectivity_ad(1:nz,2,1:nz,2) = sfcoptics_ad%Reflectivity(1:nz,1,1:nz,1)
1870 sfcoptics_ad%Reflectivity =
zero 1873 CASE ( plus45l_polarization )
1874 emissivity_ad(1:nz,1) = sfcoptics_ad%Emissivity(1:nz,1)
1875 sfcoptics_ad%Emissivity =
zero 1876 reflectivity_ad(1:nz,1,1:nz,1) = sfcoptics_ad%Reflectivity(1:nz,1,1:nz,1)
1877 sfcoptics_ad%Reflectivity =
zero 1880 CASE ( minus45l_polarization )
1881 emissivity_ad(1:nz,1) = sfcoptics_ad%Emissivity(1:nz,1)
1882 sfcoptics_ad%Emissivity =
zero 1883 reflectivity_ad(1:nz,1,1:nz,1) = sfcoptics_ad%Reflectivity(1:nz,1,1:nz,1)
1884 sfcoptics_ad%Reflectivity =
zero 1891 CASE ( vl_mixed_polarization )
1893 sin2_angle = (geometryinfo%Distance_Ratio*sin(
degrees_to_radians*sfcoptics%Angle(i)))**2
1894 emissivity_ad(i,1) = sfcoptics_ad%Emissivity(i,1)*(
one-sin2_angle)
1895 emissivity_ad(i,2) = sfcoptics_ad%Emissivity(i,1)*sin2_angle
1896 reflectivity_ad(i,1,i,1) = sfcoptics_ad%Reflectivity(i,1,i,1)*(
one-sin2_angle)
1897 reflectivity_ad(i,2,i,2) = sfcoptics_ad%Reflectivity(i,1,i,1)*sin2_angle
1899 sfcoptics_ad%Emissivity =
zero 1900 sfcoptics_ad%Reflectivity =
zero 1907 CASE ( hl_mixed_polarization )
1909 sin2_angle = (geometryinfo%Distance_Ratio*sin(
degrees_to_radians*sfcoptics%Angle(i)))**2
1910 emissivity_ad(i,1) = sfcoptics_ad%Emissivity(i,1)*sin2_angle
1911 emissivity_ad(i,2) = sfcoptics_ad%Emissivity(i,1)*(
one-sin2_angle)
1912 reflectivity_ad(i,1,i,1) = sfcoptics_ad%Reflectivity(i,1,i,1)*sin2_angle
1913 reflectivity_ad(i,2,i,2) = sfcoptics_ad%Reflectivity(i,1,i,1)*(
one-sin2_angle)
1915 sfcoptics_ad%Emissivity =
zero 1916 sfcoptics_ad%Reflectivity =
zero 1919 CASE ( rc_polarization )
1920 emissivity_ad(1:nz,1) = sfcoptics_ad%Emissivity(1:nz,1)
1921 sfcoptics_ad%Emissivity =
zero 1922 reflectivity_ad(1:nz,1,1:nz,1) = sfcoptics_ad%Reflectivity(1:nz,1,1:nz,1)
1923 sfcoptics_ad%Reflectivity =
zero 1926 CASE ( lc_polarization )
1927 emissivity_ad(1:nz,1) = sfcoptics_ad%Emissivity(1:nz,1)
1928 sfcoptics_ad%Emissivity =
zero 1929 reflectivity_ad(1:nz,1,1:nz,1) = sfcoptics_ad%Reflectivity(1:nz,1,1:nz,1)
1930 sfcoptics_ad%Reflectivity =
zero 1935 WRITE( message,
'("Unrecognised polarization flag for microwave ",& 1936 &"channel index ",i0)' ) channelindex
1940 END SELECT polarization_type
1950 emissivity_ad(1:nz,1:nl) = sfcoptics_ad%Emissivity(1:nz,1:nl)
1951 sfcoptics_ad%Emissivity =
zero 1952 reflectivity_ad(1:nz,1:nl,1:nz,1:nl) = sfcoptics_ad%Reflectivity(1:nz,1:nl,1:nz,1:nl)
1953 sfcoptics_ad%Reflectivity =
zero 1955 END IF decoupled_polarization
1961 microwave_ice:
IF( surface%Ice_Coverage >
zero )
THEN 1966 sfcoptics_ad%Emissivity(1:nz,1:2) = &
1967 sfcoptics_ad%Emissivity(1:nz,1:2) + &
1968 (emissivity_ad(1:nz,1:2)*surface%Ice_Coverage)
1969 sfcoptics_ad%Reflectivity(1:nz,1:2,1:nz,1:2) = &
1970 sfcoptics_ad%Reflectivity(1:nz,1:2,1:nz,1:2) + &
1971 (reflectivity_ad(1:nz,1:2,1:nz,1:2)*surface%Ice_Coverage)
1975 IF ( error_status /=
success )
THEN 1976 WRITE( message,
'("Error computing MW ice SfcOptics_AD at ",& 1977 &"channel index ",i0)' ) channelindex
1981 END IF microwave_ice
1988 microwave_snow:
IF( surface%Snow_Coverage >
zero )
THEN 1993 sfcoptics_ad%Emissivity(1:nz,1:2) = &
1994 sfcoptics_ad%Emissivity(1:nz,1:2) + &
1995 (emissivity_ad(1:nz,1:2)*surface%Snow_Coverage)
1996 sfcoptics_ad%Reflectivity(1:nz,1:2,1:nz,1:2) = &
1997 sfcoptics_ad%Reflectivity(1:nz,1:2,1:nz,1:2) + &
1998 (reflectivity_ad(1:nz,1:2,1:nz,1:2)*surface%Snow_Coverage)
2002 IF ( error_status /=
success )
THEN 2003 WRITE( message,
'("Error computing MW snow SfcOptics_AD at ",& 2004 &"channel index ",i0)' ) channelindex
2009 END IF microwave_snow
2015 microwave_water:
IF( surface%Water_Coverage >
zero )
THEN 2020 sfcoptics_ad%Emissivity(1:nz,1:2) = &
2021 sfcoptics_ad%Emissivity(1:nz,1:2) + &
2022 (emissivity_ad(1:nz,1:2)*surface%Water_Coverage)
2023 sfcoptics_ad%Reflectivity(1:nz,1:2,1:nz,1:2) = &
2024 sfcoptics_ad%Reflectivity(1:nz,1:2,1:nz,1:2) + &
2025 (reflectivity_ad(1:nz,1:2,1:nz,1:2)*surface%Water_Coverage)
2036 IF ( error_status /=
success )
THEN 2037 WRITE( message,
'("Error computing MW water SfcOptics_AD at ",& 2038 &"channel index ",i0)' ) channelindex
2043 END IF microwave_water
2049 microwave_land:
IF( surface%Land_Coverage >
zero )
THEN 2054 sfcoptics_ad%Emissivity(1:nz,1:2) = &
2055 sfcoptics_ad%Emissivity(1:nz,1:2) + &
2056 (emissivity_ad(1:nz,1:2)*surface%Land_Coverage)
2057 sfcoptics_ad%Reflectivity(1:nz,1:2,1:nz,1:2) = &
2058 sfcoptics_ad%Reflectivity(1:nz,1:2,1:nz,1:2) + &
2059 (reflectivity_ad(1:nz,1:2,1:nz,1:2)*surface%Land_Coverage)
2063 IF ( error_status /=
success )
THEN 2064 WRITE( message,
'("Error computing MW land SfcOptics_AD at ",& 2065 &"channel index ",i0)' ) channelindex
2070 END IF microwave_land
2082 ELSE IF ( spccoeff_isinfraredsensor(
sc(sensorindex) ) )
THEN 2088 infrared_ice:
IF( surface%Ice_Coverage >
zero )
THEN 2093 sfcoptics_ad%Emissivity(1:nz,1:nl) = &
2094 sfcoptics_ad%Emissivity(1:nz,1:nl) + &
2095 (emissivity_ad(1:nz,1:nl)*surface%Ice_Coverage)
2096 sfcoptics_ad%Reflectivity(1:nz,1:nl,1:nz,1:nl) = &
2097 sfcoptics_ad%Reflectivity(1:nz,1:nl,1:nz,1:nl) + &
2098 (reflectivity_ad(1:nz,1:nl,1:nz,1:nl)*surface%Ice_Coverage)
2102 IF ( error_status /=
success )
THEN 2103 WRITE( message,
'("Error computing IR ice SfcOptics_AD at ",& 2104 &"channel index ",i0)' ) channelindex
2115 infrared_snow:
IF( surface%Snow_Coverage >
zero )
THEN 2120 sfcoptics_ad%Emissivity(1:nz,1:nl) = &
2121 sfcoptics_ad%Emissivity(1:nz,1:nl) + &
2122 (emissivity_ad(1:nz,1:nl)*surface%Snow_Coverage)
2123 sfcoptics_ad%Reflectivity(1:nz,1:nl,1:nz,1:nl) = &
2124 sfcoptics_ad%Reflectivity(1:nz,1:nl,1:nz,1:nl) + &
2125 (reflectivity_ad(1:nz,1:nl,1:nz,1:nl)*surface%Snow_Coverage)
2129 IF ( error_status /=
success )
THEN 2130 WRITE( message,
'("Error computing IR snow SfcOptics_AD at ",& 2131 &"channel index ",i0)' ) channelindex
2136 END IF infrared_snow
2142 infrared_water:
IF ( surface%Water_Coverage >
zero )
THEN 2147 sfcoptics_ad%Emissivity(1:nz,1:nl) = &
2148 sfcoptics_ad%Emissivity(1:nz,1:nl) + &
2149 (emissivity_ad(1:nz,1:nl)*surface%Water_Coverage)
2150 sfcoptics_ad%Reflectivity(1:nz,1:nl,1:nz,1:nl) = &
2151 sfcoptics_ad%Reflectivity(1:nz,1:nl,1:nz,1:nl) + &
2152 (reflectivity_ad(1:nz,1:nl,1:nz,1:nl)*surface%Water_Coverage)
2164 IF ( error_status /=
success )
THEN 2165 WRITE( message,
'("Error computing IR water SfcOptics_AD at ",& 2166 &"channel index ",i0)' ) channelindex
2171 END IF infrared_water
2177 infrared_land:
IF( surface%Land_Coverage >
zero )
THEN 2182 sfcoptics_ad%Emissivity(1:nz,1:nl) = &
2183 sfcoptics_ad%Emissivity(1:nz,1:nl) + &
2184 (emissivity_ad(1:nz,1:nl)*surface%Land_Coverage)
2185 sfcoptics_ad%Reflectivity(1:nz,1:nl,1:nz,1:nl) = &
2186 sfcoptics_ad%Reflectivity(1:nz,1:nl,1:nz,1:nl) + &
2187 (reflectivity_ad(1:nz,1:nl,1:nz,1:nl)*surface%Land_Coverage)
2192 IF ( error_status /=
success )
THEN 2193 WRITE( message,
'("Error computing IR land SfcOptics_AD at ",& 2194 &"channel index ",i0)' ) channelindex
2199 END IF infrared_land
2211 ELSE IF ( spccoeff_isvisiblesensor(
sc(sensorindex) ) )
THEN 2217 sfcoptics_ad%Emissivity(1:nz,1) =
zero 2218 sfcoptics_ad%Reflectivity(1:nz,1,1:nz,1) =
zero 2219 sfcoptics_ad%Direct_Reflectivity =
zero 2232 WRITE( message,
'("Unrecognised sensor type for channel index ",i0)' ) &
2237 END IF sensor_select
2242 integer function, public crtm_compute_sfcoptics_tl(Surface, SfcOptics, Surface_TL, GeometryInfo, SensorIndex, ChannelIndex, SfcOptics_TL, iVar)
integer, parameter, public failure
integer function, public compute_ir_land_sfcoptics(Surface, SensorIndex, ChannelIndex, SfcOptics, iVar)
integer function, public compute_vis_ice_sfcoptics_tl(SfcOptics_TL)
real(fp), parameter, public zero
integer function, public compute_ir_water_sfcoptics_tl(Surface, SfcOptics, Surface_TL, GeometryInfo, SensorIndex, ChannelIndex, SfcOptics_TL, iVar)
integer function, public compute_mw_land_sfcoptics_ad(SfcOptics_AD)
integer function, public compute_vis_water_sfcoptics_tl(SfcOptics_TL)
integer, parameter, public fp
integer function, public compute_ir_land_sfcoptics_tl(SfcOptics_TL)
integer function, public compute_vis_land_sfcoptics_tl(SfcOptics_TL)
character(*), parameter module_version_id
integer function, public compute_mw_snow_sfcoptics_tl(SfcOptics_TL)
integer function, public compute_mw_water_sfcoptics_tl(SfcOptics, Surface_TL, GeometryInfo, SensorIndex, ChannelIndex, SfcOptics_TL, iVar)
integer function, public compute_mw_snow_sfcoptics(Surface, GeometryInfo, SensorIndex, ChannelIndex, SfcOptics)
integer function, public compute_mw_water_sfcoptics(Surface, GeometryInfo, SensorIndex, ChannelIndex, SfcOptics, iVar)
integer function, public compute_vis_snow_sfcoptics(Surface, SensorIndex, ChannelIndex, SfcOptics, iVar)
integer function, public compute_vis_snow_sfcoptics_tl(SfcOptics_TL)
integer function, public compute_ir_ice_sfcoptics_tl(SfcOptics_TL)
integer function, public compute_ir_ice_sfcoptics_ad(SfcOptics_AD)
elemental subroutine, public crtm_sfcoptics_create(SfcOptics, n_Angles, n_Stokes)
integer function, public compute_vis_land_sfcoptics_ad(SfcOptics_AD)
integer function, public compute_ir_snow_sfcoptics_tl(SfcOptics_TL)
integer function, public crtm_compute_sfcoptics(Surface, GeometryInfo, SensorIndex, ChannelIndex, SfcOptics, iVar)
integer function, public compute_mw_land_sfcoptics_tl(SfcOptics_TL)
integer function, public compute_mw_snow_sfcoptics_ad(SfcOptics_AD)
integer function, public compute_mw_water_sfcoptics_ad(SfcOptics, SfcOptics_AD, GeometryInfo, SensorIndex, ChannelIndex, Surface_AD, iVar)
integer function, public compute_vis_water_sfcoptics(Surface, SensorIndex, ChannelIndex, SfcOptics, iVar)
integer, parameter, public max_n_stokes
subroutine, public crtm_compute_surfacet_ad(Surface, SfcOptics_AD, Surface_AD)
integer function, public compute_vis_land_sfcoptics(Surface, SensorIndex, ChannelIndex, SfcOptics, iVar)
integer function, public compute_ir_water_sfcoptics(Surface, GeometryInfo, SensorIndex, ChannelIndex, SfcOptics, iVar)
integer function, public compute_ir_land_sfcoptics_ad(SfcOptics_AD)
real(fp), parameter, public one
recursive subroutine, public display_message(Routine_Name, Message, Error_State, Message_Log)
subroutine, public crtm_compute_surfacet(Surface, SfcOptics)
integer function, public compute_vis_water_sfcoptics_ad(SfcOptics_AD)
integer function, public compute_vis_snow_sfcoptics_ad(SfcOptics_AD)
elemental logical function, public crtm_sfcoptics_associated(SfcOptics)
integer function, public compute_mw_land_sfcoptics(Surface, SensorIndex, ChannelIndex, SfcOptics)
integer function, public compute_ir_snow_sfcoptics_ad(SfcOptics_AD)
integer function, public compute_mw_ice_sfcoptics_ad(SfcOptics_AD)
subroutine, public crtm_compute_surfacet_tl(Surface, Surface_TL, SfcOptics_TL)
real(fp), parameter, public degrees_to_radians
integer function, public compute_vis_ice_sfcoptics_ad(SfcOptics_AD)
type(spccoeff_type), dimension(:), allocatable, save, public sc
integer function, public compute_ir_water_sfcoptics_ad(Surface, SfcOptics, SfcOptics_AD, GeometryInfo, SensorIndex, ChannelIndex, Surface_AD, iVar)
real(fp), parameter, public point_5
integer function, public crtm_compute_sfcoptics_ad(Surface, SfcOptics, SfcOptics_AD, GeometryInfo, SensorIndex, ChannelIndex, Surface_AD, iVar)
integer function, public compute_ir_snow_sfcoptics(Surface, SensorIndex, ChannelIndex, SfcOptics, iVar)
elemental subroutine, public crtm_sfcoptics_destroy(SfcOptics)
integer function, public compute_mw_ice_sfcoptics(Surface, GeometryInfo, SensorIndex, ChannelIndex, SfcOptics)
integer function, public compute_mw_ice_sfcoptics_tl(SfcOptics_TL)
integer function, public compute_ir_ice_sfcoptics(Surface, SensorIndex, ChannelIndex, SfcOptics, iVar)
integer function, public compute_vis_ice_sfcoptics(Surface, SensorIndex, ChannelIndex, SfcOptics, iVar)
integer, parameter, public success