eqn_of_time.f
74 lines
| 2.7 KiB
| text/x-fortran
|
FortranFixedLexer
r0 | ||||
DOUBLE PRECISION FUNCTION EQN_OF_TIME(MEAN_LONG,IYR) | ||||
IMPLICIT NONE | ||||
c | ||||
c $Revision: 1.1 $ | ||||
c | ||||
c Log: eqn_of_time.f,v | ||||
c Revision 1.4 1997/04/15 16:55:43 baker | ||||
c Added a bit of code to handle the year 2000 problem. | ||||
c If the year is less than 88, we assume it is 2000-something. | ||||
c If the year is between 88 and 99 we assume it is 19xx. | ||||
c If the year is greater than 100 but less than 1900 we | ||||
c assume that it is 1900+the value. If the year is | ||||
c greater then 1900 we assume it is given correctly in | ||||
c full 4-digit form. | ||||
c | ||||
c Revision 1.3 1994/10/17 12:51:20 baker | ||||
c some code had to be rearranged to convince the compiler it was | ||||
c really OK. | ||||
c | ||||
c Revision 1.2 94/10/17 12:39:41 12:39:41 baker (Kile Baker S1G) | ||||
c added ephemerides for 1989 - 1998. This also required code to be | ||||
c added to determine which constants to use. | ||||
c | ||||
c Revision 1.1 94/10/14 11:27:56 11:27:56 baker (Kile Baker S1G) | ||||
c Initial revision | ||||
C | ||||
C Imported by Bill Rideout on April 21, 2010 | ||||
C Modified by nag_apt to convert all reals to double, int16 to ints | ||||
C | ||||
C $Id: eqn_of_time.f 3304 2011-01-17 15:25:59Z brideout $ | ||||
c | ||||
c | ||||
SAVE | ||||
DOUBLE PRECISION MEAN_LONG | ||||
INTEGER*4 IYR,INDEX | ||||
DOUBLE PRECISION COEFS(7,10) | ||||
DATA COEFS/-105.8D0,596.2D0,4.4D0,-12.7D0,-429.0D0,-2.1D0,19.3D0, | ||||
+ -105.9D0,596.2D0,4.4D0,-12.7D0,-429.0D0,-2.1D0,19.3D0, | ||||
+ -106.1D0,596.2D0,4.4D0,-12.7D0,-428.9D0,-2.1D0,19.3D0, | ||||
+ -106.2D0,596.2D0,4.4D0,-12.7D0,-428.9D0,-2.1D0,19.3D0, | ||||
+ -106.4D0,596.1D0,4.4D0,-12.7D0,-428.9D0,-2.1D0,19.3D0, | ||||
+ -106.5D0,596.1D0,4.4D0,-12.7D0,-428.8D0,-2.1D0,19.3D0, | ||||
+ -106.6D0,596.1D0,4.4D0,-12.7D0,-428.8D0,-2.1D0,19.3D0, | ||||
+ -106.7D0,596.1D0,4.4D0,-12.7D0,-428.7D0,-2.1D0,19.3D0, | ||||
+ -106.8D0,596.1D0,4.4D0,-12.7D0,-428.7D0,-2.1D0,19.3D0, | ||||
+ -107.0D0,596.1D0,4.4D0,-12.7D0,-428.7D0,-2.1D0,19.3D0/ | ||||
c | ||||
c compute the index into the coeffiecients table from the year | ||||
c | ||||
IF (IYR.LT.88) THEN | ||||
INDEX = IYR + 2000 - 1988 | ||||
ELSE IF (IYR.GE.88 .AND. IYR.LT.100) THEN | ||||
INDEX = IYR - 88 | ||||
ELSE IF (IYR.GE.100 .AND. IYR.LT.1900) THEN | ||||
INDEX = IYR - 88 | ||||
ELSE | ||||
INDEX = IYR - 1988 | ||||
END IF | ||||
IF (INDEX.LE.0) INDEX = 1 | ||||
IF (INDEX.GT.10) INDEX = 10 | ||||
EQN_OF_TIME = COEFS(1,INDEX)*DSIN(MEAN_LONG) + | ||||
+ COEFS(2,INDEX)*DSIN(2.0D0*MEAN_LONG) + | ||||
+ COEFS(3,INDEX)*DSIN(3.0D0*MEAN_LONG) + | ||||
+ COEFS(4,INDEX)*DSIN(4.0D0*MEAN_LONG) + | ||||
+ COEFS(5,INDEX)*DCOS(MEAN_LONG) + | ||||
+ COEFS(6,INDEX)*DCOS(2.0D0*MEAN_LONG) + | ||||
+ COEFS(7,INDEX)*DCOS(3.0D0*MEAN_LONG) | ||||
RETURN | ||||
END | ||||