52 '$Id: CRTM_GeometryInfo.f90 60152 2015-08-13 19:19:13Z paul.vandelst@noaa.gov $' 54 REAL(fp),
PARAMETER ::
m_to_km = 1.0e-03_fp
114 ginfo%Cosine_Sensor_Zenith = cos(ginfo%Sensor_Zenith_Radian)
115 ginfo%Secant_Sensor_Zenith =
one / ginfo%Cosine_Sensor_Zenith
121 ginfo%Secant_Trans_Zenith =
one / cos(ginfo%Trans_Zenith_Radian)
123 ginfo%Trans_Zenith_Radian = ginfo%Sensor_Zenith_Radian
124 ginfo%Secant_Trans_Zenith = ginfo%Secant_Sensor_Zenith
127 IF ( abs(ginfo%user%Sensor_Zenith_Angle) >
one )
THEN 128 ginfo%Distance_Ratio = abs(sin(ginfo%Sensor_Scan_Radian)/sin(ginfo%Sensor_Zenith_Radian))
133 cosv = cos(ginfo%Source_Zenith_Radian)
134 IF( cosv /=
zero )
THEN 135 ginfo%Secant_Source_Zenith =
one / cosv
138 ginfo%Secant_Source_Zenith = huge(cosv) * cosv/abs(cosv)
143 ginfo%Secant_Flux_Zenith =
one / cos(ginfo%Flux_Zenith_Radian)
145 ginfo%AU_ratio2 =
compute_au_ratio2( ginfo%user%Year, ginfo%user%Month, ginfo%user%Day )
194 ELEMENTAL SUBROUTINE saconv( &
195 Sensor_Zenith_Radian, & ! Input
197 Local_Zenith_Radian )
199 REAL(fp),
INTENT(IN) :: sensor_zenith_radian
200 REAL(fp),
INTENT(IN) :: altitude
201 REAL(fp),
INTENT(OUT) :: local_zenith_radian
209 local_zenith_radian = asin((
earth_radius / ra) * sin(sensor_zenith_radian))
267 Sensor_Zenith_Radian, & ! FWD Input
268 Altitude, & ! FWD Input
269 Altitude_TL, & ! TL Input
270 Local_Zenith_Radian_TL )
272 REAL(fp),
INTENT(IN) :: sensor_zenith_radian
273 REAL(fp),
INTENT(IN) :: altitude
274 REAL(fp),
INTENT(IN) :: altitude_tl
275 REAL(fp),
INTENT(OUT) :: local_zenith_radian_tl
277 REAL(fp) :: ra, ra_tl
278 REAL(fp) :: local_zenith_radian
285 CALL saconv( sensor_zenith_radian, altitude, local_zenith_radian )
286 local_zenith_radian_tl = -tan(local_zenith_radian) * ra_tl / ra
346 Sensor_Zenith_Radian, & ! FWD Input
347 Altitude, & ! FWD Input
348 Local_Zenith_Radian_AD, & ! AD Input
351 REAL(fp),
INTENT(IN) :: sensor_zenith_radian
352 REAL(fp),
INTENT(IN) :: altitude
353 REAL(fp),
INTENT(IN OUT) :: local_zenith_radian_ad
354 REAL(fp),
INTENT(IN OUT) :: altitude_ad
356 REAL(fp) :: local_zenith_radian
357 REAL(fp) :: ra, ra_ad
361 CALL saconv( sensor_zenith_radian, altitude, local_zenith_radian )
364 ra_ad = -tan(local_zenith_radian) * local_zenith_radian_ad / ra
365 local_zenith_radian_ad =
zero 366 altitude_ad = altitude_ad + (
m_to_km * ra_ad)
422 ELEMENTAL SUBROUTINE vaconv( &
423 Sensor_Scan_Radian, & ! Input
424 Satellite_Altitude, & ! Input
426 Local_Zenith_Radian )
428 REAL(fp),
INTENT(IN) :: sensor_scan_radian
429 REAL(fp),
INTENT(IN) :: satellite_altitude
430 REAL(fp),
INTENT(IN) :: altitude
431 REAL(fp),
INTENT(OUT) :: local_zenith_radian
443 local_zenith_radian = asin((rs / ra) * sin(sensor_scan_radian))
508 Sensor_Scan_Radian, & ! FWD Input
509 Satellite_Altitude, & ! FWD Input
510 Altitude, & ! FWD Input
511 Altitude_TL, & ! TL Input
512 Local_Zenith_Radian_TL )
514 REAL(fp),
INTENT(IN) :: sensor_scan_radian
515 REAL(fp),
INTENT(IN) :: satellite_altitude
516 REAL(fp),
INTENT(IN) :: altitude
517 REAL(fp),
INTENT(IN) :: altitude_tl
518 REAL(fp),
INTENT(OUT) :: local_zenith_radian_tl
520 REAL(fp) :: ra, ra_tl
522 REAL(fp) :: local_zenith_radian
532 CALL vaconv( sensor_scan_radian, satellite_altitude, altitude, local_zenith_radian )
533 local_zenith_radian_tl = -tan(local_zenith_radian) * ra_tl / ra
600 Sensor_Scan_Radian, & ! FWD Input
601 Satellite_Altitude, & ! FWD Input
602 Altitude, & ! FWD Input
603 Local_Zenith_Radian_AD, & ! AD Input
606 REAL(fp),
INTENT(IN) :: sensor_scan_radian
607 REAL(fp),
INTENT(IN) :: satellite_altitude
608 REAL(fp),
INTENT(IN) :: altitude
609 REAL(fp),
INTENT(IN OUT) :: local_zenith_radian_ad
610 REAL(fp),
INTENT(IN OUT) :: altitude_ad
612 REAL(fp) :: ra, ra_ad
614 REAL(fp) :: local_zenith_radian
619 CALL vaconv( sensor_scan_radian, satellite_altitude, altitude, local_zenith_radian )
622 ra_ad = -tan(local_zenith_radian) * local_zenith_radian_ad / ra
623 local_zenith_radian_ad =
zero 624 altitude_ad = altitude_ad + (
m_to_km * ra_ad)
653 CHARACTER(*),
INTENT(OUT) :: id
744 INTEGER,
INTENT(IN) :: year
745 INTEGER,
INTENT(IN) :: month
746 INTEGER,
INTENT(IN) :: day
748 REAL(fp) :: au_ratio2
750 INTEGER ,
PARAMETER :: n = 2
751 REAL(fp),
PARAMETER :: a(0:n) = (/ 1.000110_fp, 0.034221_fp, 0.000719_fp /)
752 REAL(fp),
PARAMETER :: b(0:n) = (/
zero , 0.001280_fp, 0.000077_fp /)
755 REAL(fp) :: doy, max_doy, t, it
758 doy =
REAL(DayOfYear( Day, Month, Year ),
fp)
759 max_doy =
REAL(DayOfYear( 31, 12, Year ),
fp)
768 au_ratio2 = au_ratio2 + (a(i) * cos(it)) + (b(i) * sin(it))
integer, parameter, public failure
real(fp), parameter, public zero
integer, parameter, public warning
real(fp), parameter, public max_trans_zenith_angle
logical function, public crtm_geometryinfo_isvalid(gInfo)
integer, parameter, public fp
subroutine, public crtm_geometryinfo_version(Id)
elemental subroutine, public vaconv_tl(Sensor_Scan_Radian, Satellite_Altitude, Altitude, Altitude_TL, Local_Zenith_Radian_TL)
elemental subroutine, public crtm_geometryinfo_compute(gInfo)
elemental subroutine, public saconv_ad(Sensor_Zenith_Radian, Altitude, Local_Zenith_Radian_AD, Altitude_AD)
real(fp), parameter, public earth_radius
elemental subroutine, public saconv_tl(Sensor_Zenith_Radian, Altitude, Altitude_TL, Local_Zenith_Radian_TL)
elemental integer function, public dayofyear(Day, Month, Year)
elemental subroutine, public vaconv(Sensor_Scan_Radian, Satellite_Altitude, Altitude, Local_Zenith_Radian)
elemental subroutine, public saconv(Sensor_Zenith_Radian, Altitude, Local_Zenith_Radian)
real(fp), parameter, public one
recursive subroutine, public display_message(Routine_Name, Message, Error_State, Message_Log)
real(fp), parameter, public twopi
real(fp), parameter, public two
real(fp), parameter, public degrees_to_radians
elemental subroutine, public vaconv_ad(Sensor_Scan_Radian, Satellite_Altitude, Altitude, Local_Zenith_Radian_AD, Altitude_AD)
real(fp), parameter, public satellite_height
character(*), parameter module_version_id
real(fp), parameter m_to_km
elemental real(fp) function compute_au_ratio2(Year, Month, Day)
integer, parameter, public success