1 subroutine da_get_satzen ( lat,lon,sate_index,theta_true )
2 !-------------------------------------------------
3 ! Purpose: calculate geostationary satellite_zenith_angle
5 ! Menthod: Yang et al., 2017: Impact of assimilating GOES imager
6 ! clear-sky radiance with a rapid refresh assimilation
7 ! system for convection-permitting forecast over Mexico.
8 ! J. Geophys. Res. Atmos., 122, 5472–5490
9 !-------------------------------------------------
13 real, intent(in) :: lat,lon
14 integer, intent(in) :: sate_index
15 real, intent(out) :: theta_true
17 real :: alat, alon, alon_sat
18 real :: theta, r_tmp, theta_tmp
24 if (sate_index .eq. 11) then
25 alon_sat = -135.*pi/180.
26 else if (sate_index .eq. 12) then
27 alon_sat = -60.*pi/180.
28 else if (sate_index .eq. 13) then
29 alon_sat = -75.*pi/180.
30 else if (sate_index .eq. 14) then
31 alon_sat = -105.*pi/180.
32 else if (sate_index .eq. 15) then
33 alon_sat = -135.*pi/180.
35 write(*,*)'this satellite is not included'
41 theta = abs(alon-alon_sat)
42 r_tmp = (2*earth_radius*sin(theta/2.)-earth_radius*(1-cos(alat))*sin(theta/2.))**2 &
43 +(2*earth_radius*sin(alat/2.))**2-(earth_radius*(1-cos(alat))*sin(theta/2.))**2
45 theta_true = 2*asin(r_tmp/earth_radius/2.)
46 theta_tmp = atan(earth_radius*sin(theta_true)/(satellite_height+earth_radius*(1-sin(theta_true))))
47 theta_true = (theta_true+theta_tmp)*180./pi
51 end subroutine da_get_satzen