1 |
C $Header$ |
2 |
C $Name$ |
3 |
|
4 |
#include "RADTRANS_OPTIONS.h" |
5 |
|
6 |
CBOP |
7 |
C !ROUTINE: RADTRANS_SUNMOD |
8 |
|
9 |
C !INTERFACE: ====================================================== |
10 |
subroutine radtrans_sunmod(rad,iday,imon,iyr,gmt,up,no,ea, |
11 |
O sunz,rs) |
12 |
|
13 |
C !DESCRIPTION: |
14 |
c MODIFIED only by separating subroutines that were previously included |
15 |
c |
16 |
c Given year, day of year, time in hours (GMT) and latitude and |
17 |
c longitude, returns an accurate solar zenith and azimuth angle. |
18 |
c Based on IAU 1976 Earth ellipsoid. Method for computing solar |
19 |
c vector and local vertical from Patt and Gregg, 1994, Int. J. |
20 |
c Remote Sensing. Only outputs solar zenith angle. This version |
21 |
c utilizes a pre-calculation of the local up, north, and east |
22 |
c vectors, since the locations where the solar zenith angle are |
23 |
c calculated in the model are fixed. |
24 |
c |
25 |
c Subroutines required: sun2000 |
26 |
c gha2000 |
27 |
c jd |
28 |
c |
29 |
C !USES: =========================================================== |
30 |
IMPLICIT NONE |
31 |
|
32 |
C !INPUT PARAMETERS: =============================================== |
33 |
INTEGER iday, imon, iyr |
34 |
_RL rad, gmt, up(3), no(3), ea(3) |
35 |
c INTEGER myThid |
36 |
|
37 |
C !OUTPUT PARAMETERS: ============================================== |
38 |
_RL sunz, rs |
39 |
|
40 |
C !FUNCTIONS: ====================================================== |
41 |
|
42 |
C !LOCAL VARIABLES: ================================================ |
43 |
INTEGER j |
44 |
_RL radeg, sec, day, gha, ghar, sunv, sunn, sune |
45 |
_RL suni(3),sung(3) |
46 |
CEOP |
47 |
|
48 |
|
49 |
radeg = rad |
50 |
c Compute sun vector |
51 |
c Compute unit sun vector in geocentric inertial coordinates |
52 |
sec = gmt*3600.0D0 |
53 |
call radtrans_sun2000 (radeg, iyr, imon, iday, sec, suni, rs) |
54 |
|
55 |
c Get Greenwich mean sidereal angle |
56 |
day = float(iday) + sec/86400.0D0 |
57 |
call radtrans_gha2000 (radeg, iyr, imon, day, gha) |
58 |
ghar = gha/radeg |
59 |
|
60 |
c Transform Sun vector into geocentric rotating frame |
61 |
sung(1) = suni(1)*cos(ghar) + suni(2)*sin(ghar) |
62 |
sung(2) = suni(2)*cos(ghar) - suni(1)*sin(ghar) |
63 |
sung(3) = suni(3) |
64 |
c |
65 |
c Compute components of spacecraft and sun vector in the |
66 |
c vertical (up), North (no), and East (ea) vectors frame |
67 |
sunv = 0.0 |
68 |
sunn = 0.0 |
69 |
sune = 0.0 |
70 |
do j = 1,3 |
71 |
sunv = sunv + sung(j)*up(j) |
72 |
sunn = sunn + sung(j)*no(j) |
73 |
sune = sune + sung(j)*ea(j) |
74 |
enddo |
75 |
c |
76 |
c Compute the solar zenith |
77 |
sunz = radeg*atan2(sqrt(sunn*sunn+sune*sune),sunv) |
78 |
c |
79 |
return |
80 |
end |
81 |
c |
82 |
c ***************************************************************** |
83 |
c HERE SUBROUTINE sun2000 removed |
84 |
c ********************************************************************* |
85 |
c HERE SUBROUTINE gha2000 removed |
86 |
c HERE SUBROUTINE ephparms removed |
87 |
c HERE SUBROUTINE nutate removed |
88 |
c HERE FUNCTION jd removed |
89 |
c ************************************************************************ |