mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-29 20:10:28 -04:00 
			
		
		
		
	
		
			
	
	
		
			3397 lines
		
	
	
		
			118 KiB
		
	
	
	
		
			FortranFixed
		
	
	
	
	
	
		
		
			
		
	
	
			3397 lines
		
	
	
		
			118 KiB
		
	
	
	
		
			FortranFixed
		
	
	
	
	
	
|  |       SUBROUTINE sla_CLDJ (IY, IM, ID, DJM, J)
 | ||
|  | *+
 | ||
|  | *     - - - - -
 | ||
|  | *      C L D J
 | ||
|  | *     - - - - -
 | ||
|  | *
 | ||
|  | *  Gregorian Calendar to Modified Julian Date
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     IY,IM,ID     int    year, month, day in Gregorian calendar
 | ||
|  | *
 | ||
|  | *  Returned:
 | ||
|  | *     DJM          dp     modified Julian Date (JD-2400000.5) for 0 hrs
 | ||
|  | *     J            int    status:
 | ||
|  | *                           0 = OK
 | ||
|  | *                           1 = bad year   (MJD not computed)
 | ||
|  | *                           2 = bad month  (MJD not computed)
 | ||
|  | *                           3 = bad day    (MJD computed)
 | ||
|  | *
 | ||
|  | *  The year must be -4699 (i.e. 4700BC) or later.
 | ||
|  | *
 | ||
|  | *  The algorithm is adapted from Hatcher 1984 (QJRAS 25, 53-55).
 | ||
|  | *
 | ||
|  | *  Last revision:   27 July 2004
 | ||
|  | *
 | ||
|  | *  Copyright P.T.Wallace.  All rights reserved.
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       INTEGER IY,IM,ID
 | ||
|  |       DOUBLE PRECISION DJM
 | ||
|  |       INTEGER J
 | ||
|  | 
 | ||
|  | *  Month lengths in days
 | ||
|  |       INTEGER MTAB(12)
 | ||
|  |       DATA MTAB / 31,28,31,30,31,30,31,31,30,31,30,31 /
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Preset status.
 | ||
|  |       J = 0
 | ||
|  | 
 | ||
|  | *  Validate year.
 | ||
|  |       IF ( IY .LT. -4699 ) THEN
 | ||
|  |          J = 1
 | ||
|  |       ELSE
 | ||
|  | 
 | ||
|  | *     Validate month.
 | ||
|  |          IF ( IM.GE.1 .AND. IM.LE.12 ) THEN
 | ||
|  | 
 | ||
|  | *        Allow for leap year.
 | ||
|  |             IF ( MOD(IY,4) .EQ. 0 ) THEN
 | ||
|  |                MTAB(2) = 29
 | ||
|  |             ELSE
 | ||
|  |                MTAB(2) = 28
 | ||
|  |             END IF
 | ||
|  |             IF ( MOD(IY,100).EQ.0 .AND. MOD(IY,400).NE.0 )
 | ||
|  |      :         MTAB(2) = 28
 | ||
|  | 
 | ||
|  | *        Validate day.
 | ||
|  |             IF ( ID.LT.1 .OR. ID.GT.MTAB(IM) ) J=3
 | ||
|  | 
 | ||
|  | *        Modified Julian Date.
 | ||
|  |             DJM = DBLE ( ( 1461 * ( IY - (12-IM)/10 + 4712 ) ) / 4
 | ||
|  |      :               + ( 306 * MOD ( IM+9, 12 ) + 5 ) / 10
 | ||
|  |      :               - ( 3 * ( ( IY - (12-IM)/10 + 4900 ) / 100 ) ) / 4
 | ||
|  |      :               + ID - 2399904 )
 | ||
|  | 
 | ||
|  | *        Bad month.
 | ||
|  |          ELSE
 | ||
|  |             J=2
 | ||
|  |          END IF
 | ||
|  | 
 | ||
|  |       END IF
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       DOUBLE PRECISION FUNCTION sla_DAT (UTC)
 | ||
|  | *+
 | ||
|  | *     - - - -
 | ||
|  | *      D A T
 | ||
|  | *     - - - -
 | ||
|  | *
 | ||
|  | *  Increment to be applied to Coordinated Universal Time UTC to give
 | ||
|  | *  International Atomic Time TAI (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     UTC      d      UTC date as a modified JD (JD-2400000.5)
 | ||
|  | *
 | ||
|  | *  Result:  TAI-UTC in seconds
 | ||
|  | *
 | ||
|  | *  Notes:
 | ||
|  | *
 | ||
|  | *  1  The UTC is specified to be a date rather than a time to indicate
 | ||
|  | *     that care needs to be taken not to specify an instant which lies
 | ||
|  | *     within a leap second.  Though in most cases UTC can include the
 | ||
|  | *     fractional part, correct behaviour on the day of a leap second
 | ||
|  | *     can only be guaranteed up to the end of the second 23:59:59.
 | ||
|  | *
 | ||
|  | *  2  For epochs from 1961 January 1 onwards, the expressions from the
 | ||
|  | *     file ftp://maia.usno.navy.mil/ser7/tai-utc.dat are used.
 | ||
|  | *
 | ||
|  | *  3  The 5ms time step at 1961 January 1 is taken from 2.58.1 (p87) of
 | ||
|  | *     the 1992 Explanatory Supplement.
 | ||
|  | *
 | ||
|  | *  4  UTC began at 1960 January 1.0 (JD 2436934.5) and it is improper
 | ||
|  | *     to call the routine with an earlier epoch.  However, if this
 | ||
|  | *     is attempted, the TAI-UTC expression for the year 1960 is used.
 | ||
|  | *
 | ||
|  | *
 | ||
|  | *     :-----------------------------------------:
 | ||
|  | *     :                                         :
 | ||
|  | *     :                IMPORTANT                :
 | ||
|  | *     :                                         :
 | ||
|  | *     :  This routine must be updated on each   :
 | ||
|  | *     :     occasion that a leap second is      :
 | ||
|  | *     :                announced                :
 | ||
|  | *     :                                         :
 | ||
|  | *     :  Latest leap second:  2015 July 1       :
 | ||
|  | *     :                                         :
 | ||
|  | *     :-----------------------------------------:
 | ||
|  | *
 | ||
|  | *  Last revision:   5 July 2008
 | ||
|  | *
 | ||
|  | *  Copyright P.T.Wallace.  All rights reserved.
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION UTC
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION DT
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |       IF (.FALSE.) THEN
 | ||
|  | 
 | ||
|  | * - - - - - - - - - - - - - - - - - - - - - - *
 | ||
|  | *  Add new code here on each occasion that a  *
 | ||
|  | *  leap second is announced, and update the   *
 | ||
|  | *  preamble comments appropriately.           *
 | ||
|  | * - - - - - - - - - - - - - - - - - - - - - - *
 | ||
|  | 
 | ||
|  | *     2015 July 1
 | ||
|  |       ELSE IF (UTC.GE.57204D0) THEN
 | ||
|  |          DT=36D0
 | ||
|  | 
 | ||
|  | *     2012 July 1
 | ||
|  |       ELSE IF (UTC.GE.56109D0) THEN
 | ||
|  |          DT=35D0
 | ||
|  | 
 | ||
|  | *     2009 January 1
 | ||
|  |       ELSE IF (UTC.GE.54832D0) THEN
 | ||
|  |          DT=34D0
 | ||
|  | 
 | ||
|  | *     2006 January 1
 | ||
|  |       ELSE IF (UTC.GE.53736D0) THEN
 | ||
|  |          DT=33D0
 | ||
|  | 
 | ||
|  | *     1999 January 1
 | ||
|  |       ELSE IF (UTC.GE.51179D0) THEN
 | ||
|  |          DT=32D0
 | ||
|  | 
 | ||
|  | *     1997 July 1
 | ||
|  |       ELSE IF (UTC.GE.50630D0) THEN
 | ||
|  |          DT=31D0
 | ||
|  | 
 | ||
|  | *     1996 January 1
 | ||
|  |       ELSE IF (UTC.GE.50083D0) THEN
 | ||
|  |          DT=30D0
 | ||
|  | 
 | ||
|  | *     1994 July 1
 | ||
|  |       ELSE IF (UTC.GE.49534D0) THEN
 | ||
|  |          DT=29D0
 | ||
|  | 
 | ||
|  | *     1993 July 1
 | ||
|  |       ELSE IF (UTC.GE.49169D0) THEN
 | ||
|  |          DT=28D0
 | ||
|  | 
 | ||
|  | *     1992 July 1
 | ||
|  |       ELSE IF (UTC.GE.48804D0) THEN
 | ||
|  |          DT=27D0
 | ||
|  | 
 | ||
|  | *     1991 January 1
 | ||
|  |       ELSE IF (UTC.GE.48257D0) THEN
 | ||
|  |          DT=26D0
 | ||
|  | 
 | ||
|  | *     1990 January 1
 | ||
|  |       ELSE IF (UTC.GE.47892D0) THEN
 | ||
|  |          DT=25D0
 | ||
|  | 
 | ||
|  | *     1988 January 1
 | ||
|  |       ELSE IF (UTC.GE.47161D0) THEN
 | ||
|  |          DT=24D0
 | ||
|  | 
 | ||
|  | *     1985 July 1
 | ||
|  |       ELSE IF (UTC.GE.46247D0) THEN
 | ||
|  |          DT=23D0
 | ||
|  | 
 | ||
|  | *     1983 July 1
 | ||
|  |       ELSE IF (UTC.GE.45516D0) THEN
 | ||
|  |          DT=22D0
 | ||
|  | 
 | ||
|  | *     1982 July 1
 | ||
|  |       ELSE IF (UTC.GE.45151D0) THEN
 | ||
|  |          DT=21D0
 | ||
|  | 
 | ||
|  | *     1981 July 1
 | ||
|  |       ELSE IF (UTC.GE.44786D0) THEN
 | ||
|  |          DT=20D0
 | ||
|  | 
 | ||
|  | *     1980 January 1
 | ||
|  |       ELSE IF (UTC.GE.44239D0) THEN
 | ||
|  |          DT=19D0
 | ||
|  | 
 | ||
|  | *     1979 January 1
 | ||
|  |       ELSE IF (UTC.GE.43874D0) THEN
 | ||
|  |          DT=18D0
 | ||
|  | 
 | ||
|  | *     1978 January 1
 | ||
|  |       ELSE IF (UTC.GE.43509D0) THEN
 | ||
|  |          DT=17D0
 | ||
|  | 
 | ||
|  | *     1977 January 1
 | ||
|  |       ELSE IF (UTC.GE.43144D0) THEN
 | ||
|  |          DT=16D0
 | ||
|  | 
 | ||
|  | *     1976 January 1
 | ||
|  |       ELSE IF (UTC.GE.42778D0) THEN
 | ||
|  |          DT=15D0
 | ||
|  | 
 | ||
|  | *     1975 January 1
 | ||
|  |       ELSE IF (UTC.GE.42413D0) THEN
 | ||
|  |          DT=14D0
 | ||
|  | 
 | ||
|  | *     1974 January 1
 | ||
|  |       ELSE IF (UTC.GE.42048D0) THEN
 | ||
|  |          DT=13D0
 | ||
|  | 
 | ||
|  | *     1973 January 1
 | ||
|  |       ELSE IF (UTC.GE.41683D0) THEN
 | ||
|  |          DT=12D0
 | ||
|  | 
 | ||
|  | *     1972 July 1
 | ||
|  |       ELSE IF (UTC.GE.41499D0) THEN
 | ||
|  |          DT=11D0
 | ||
|  | 
 | ||
|  | *     1972 January 1
 | ||
|  |       ELSE IF (UTC.GE.41317D0) THEN
 | ||
|  |          DT=10D0
 | ||
|  | 
 | ||
|  | *     1968 February 1
 | ||
|  |       ELSE IF (UTC.GE.39887D0) THEN
 | ||
|  |          DT=4.2131700D0+(UTC-39126D0)*0.002592D0
 | ||
|  | 
 | ||
|  | *     1966 January 1
 | ||
|  |       ELSE IF (UTC.GE.39126D0) THEN
 | ||
|  |          DT=4.3131700D0+(UTC-39126D0)*0.002592D0
 | ||
|  | 
 | ||
|  | *     1965 September 1
 | ||
|  |       ELSE IF (UTC.GE.39004D0) THEN
 | ||
|  |          DT=3.8401300D0+(UTC-38761D0)*0.001296D0
 | ||
|  | 
 | ||
|  | *     1965 July 1
 | ||
|  |       ELSE IF (UTC.GE.38942D0) THEN
 | ||
|  |          DT=3.7401300D0+(UTC-38761D0)*0.001296D0
 | ||
|  | 
 | ||
|  | *     1965 March 1
 | ||
|  |       ELSE IF (UTC.GE.38820D0) THEN
 | ||
|  |          DT=3.6401300D0+(UTC-38761D0)*0.001296D0
 | ||
|  | 
 | ||
|  | *     1965 January 1
 | ||
|  |       ELSE IF (UTC.GE.38761D0) THEN
 | ||
|  |          DT=3.5401300D0+(UTC-38761D0)*0.001296D0
 | ||
|  | 
 | ||
|  | *     1964 September 1
 | ||
|  |       ELSE IF (UTC.GE.38639D0) THEN
 | ||
|  |          DT=3.4401300D0+(UTC-38761D0)*0.001296D0
 | ||
|  | 
 | ||
|  | *     1964 April 1
 | ||
|  |       ELSE IF (UTC.GE.38486D0) THEN
 | ||
|  |          DT=3.3401300D0+(UTC-38761D0)*0.001296D0
 | ||
|  | 
 | ||
|  | *     1964 January 1
 | ||
|  |       ELSE IF (UTC.GE.38395D0) THEN
 | ||
|  |          DT=3.2401300D0+(UTC-38761D0)*0.001296D0
 | ||
|  | 
 | ||
|  | *     1963 November 1
 | ||
|  |       ELSE IF (UTC.GE.38334D0) THEN
 | ||
|  |          DT=1.9458580D0+(UTC-37665D0)*0.0011232D0
 | ||
|  | 
 | ||
|  | *     1962 January 1
 | ||
|  |       ELSE IF (UTC.GE.37665D0) THEN
 | ||
|  |          DT=1.8458580D0+(UTC-37665D0)*0.0011232D0
 | ||
|  | 
 | ||
|  | *     1961 August 1
 | ||
|  |       ELSE IF (UTC.GE.37512D0) THEN
 | ||
|  |          DT=1.3728180D0+(UTC-37300D0)*0.001296D0
 | ||
|  | 
 | ||
|  | *     1961 January 1
 | ||
|  |       ELSE IF (UTC.GE.37300D0) THEN
 | ||
|  |          DT=1.4228180D0+(UTC-37300D0)*0.001296D0
 | ||
|  | 
 | ||
|  | *     Before that
 | ||
|  |       ELSE
 | ||
|  |          DT=1.4178180D0+(UTC-37300D0)*0.001296D0
 | ||
|  | 
 | ||
|  |       END IF
 | ||
|  | 
 | ||
|  |       sla_DAT=DT
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_DC62S (V, A, B, R, AD, BD, RD)
 | ||
|  | *+
 | ||
|  | *     - - - - - -
 | ||
|  | *      D C 6 2 S
 | ||
|  | *     - - - - - -
 | ||
|  | *
 | ||
|  | *  Conversion of position & velocity in Cartesian coordinates
 | ||
|  | *  to spherical coordinates (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     V      d(6)   Cartesian position & velocity vector
 | ||
|  | *
 | ||
|  | *  Returned:
 | ||
|  | *     A      d      longitude (radians)
 | ||
|  | *     B      d      latitude (radians)
 | ||
|  | *     R      d      radial coordinate
 | ||
|  | *     AD     d      longitude derivative (radians per unit time)
 | ||
|  | *     BD     d      latitude derivative (radians per unit time)
 | ||
|  | *     RD     d      radial derivative
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   28 April 1996
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1996 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION V(6),A,B,R,AD,BD,RD
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION X,Y,Z,XD,YD,ZD,RXY2,RXY,R2,XYP
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Components of position/velocity vector
 | ||
|  |       X=V(1)
 | ||
|  |       Y=V(2)
 | ||
|  |       Z=V(3)
 | ||
|  |       XD=V(4)
 | ||
|  |       YD=V(5)
 | ||
|  |       ZD=V(6)
 | ||
|  | 
 | ||
|  | *  Component of R in XY plane squared
 | ||
|  |       RXY2=X*X+Y*Y
 | ||
|  | 
 | ||
|  | *  Modulus squared
 | ||
|  |       R2=RXY2+Z*Z
 | ||
|  | 
 | ||
|  | *  Protection against null vector
 | ||
|  |       IF (R2.EQ.0D0) THEN
 | ||
|  |          X=XD
 | ||
|  |          Y=YD
 | ||
|  |          Z=ZD
 | ||
|  |          RXY2=X*X+Y*Y
 | ||
|  |          R2=RXY2+Z*Z
 | ||
|  |       END IF
 | ||
|  | 
 | ||
|  | *  Position and velocity in spherical coordinates
 | ||
|  |       RXY=SQRT(RXY2)
 | ||
|  |       XYP=X*XD+Y*YD
 | ||
|  |       IF (RXY2.NE.0D0) THEN
 | ||
|  |          A=ATAN2(Y,X)
 | ||
|  |          B=ATAN2(Z,RXY)
 | ||
|  |          AD=(X*YD-Y*XD)/RXY2
 | ||
|  |          BD=(ZD*RXY2-Z*XYP)/(R2*RXY)
 | ||
|  |       ELSE
 | ||
|  |          A=0D0
 | ||
|  |          IF (Z.NE.0D0) THEN
 | ||
|  |             B=ATAN2(Z,RXY)
 | ||
|  |          ELSE
 | ||
|  |             B=0D0
 | ||
|  |          END IF
 | ||
|  |          AD=0D0
 | ||
|  |          BD=0D0
 | ||
|  |       END IF
 | ||
|  |       R=SQRT(R2)
 | ||
|  |       IF (R.NE.0D0) THEN
 | ||
|  |          RD=(XYP+Z*ZD)/R
 | ||
|  |       ELSE
 | ||
|  |          RD=0D0
 | ||
|  |       END IF
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_DCC2S (V, A, B)
 | ||
|  | *+
 | ||
|  | *     - - - - - -
 | ||
|  | *      D C C 2 S
 | ||
|  | *     - - - - - -
 | ||
|  | *
 | ||
|  | *  Cartesian to spherical coordinates (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     V     d(3)   x,y,z vector
 | ||
|  | *
 | ||
|  | *  Returned:
 | ||
|  | *     A,B   d      spherical coordinates in radians
 | ||
|  | *
 | ||
|  | *  The spherical coordinates are longitude (+ve anticlockwise looking
 | ||
|  | *  from the +ve latitude pole) and latitude.  The Cartesian coordinates
 | ||
|  | *  are right handed, with the x axis at zero longitude and latitude, and
 | ||
|  | *  the z axis at the +ve latitude pole.
 | ||
|  | *
 | ||
|  | *  If V is null, zero A and B are returned.  At either pole, zero A is
 | ||
|  | *  returned.
 | ||
|  | *
 | ||
|  | *  Last revision:   22 July 2004
 | ||
|  | *
 | ||
|  | *  Copyright P.T.Wallace.  All rights reserved.
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION V(3),A,B
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION X,Y,Z,R
 | ||
|  | 
 | ||
|  | 
 | ||
|  |       X = V(1)
 | ||
|  |       Y = V(2)
 | ||
|  |       Z = V(3)
 | ||
|  |       R = SQRT(X*X+Y*Y)
 | ||
|  | 
 | ||
|  |       IF (R.EQ.0D0) THEN
 | ||
|  |          A = 0D0
 | ||
|  |       ELSE
 | ||
|  |          A = ATAN2(Y,X)
 | ||
|  |       END IF
 | ||
|  | 
 | ||
|  |       IF (Z.EQ.0D0) THEN
 | ||
|  |          B = 0D0
 | ||
|  |       ELSE
 | ||
|  |          B = ATAN2(Z,R)
 | ||
|  |       END IF
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_DCS2C (A, B, V)
 | ||
|  | *+
 | ||
|  | *     - - - - - -
 | ||
|  | *      D C S 2 C
 | ||
|  | *     - - - - - -
 | ||
|  | *
 | ||
|  | *  Spherical coordinates to direction cosines (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     A,B       d      spherical coordinates in radians
 | ||
|  | *                         (RA,Dec), (long,lat) etc.
 | ||
|  | *
 | ||
|  | *  Returned:
 | ||
|  | *     V         d(3)   x,y,z unit vector
 | ||
|  | *
 | ||
|  | *  The spherical coordinates are longitude (+ve anticlockwise looking
 | ||
|  | *  from the +ve latitude pole) and latitude.  The Cartesian coordinates
 | ||
|  | *  are right handed, with the x axis at zero longitude and latitude, and
 | ||
|  | *  the z axis at the +ve latitude pole.
 | ||
|  | *
 | ||
|  | *  Last revision:   26 December 2004
 | ||
|  | *
 | ||
|  | *  Copyright P.T.Wallace.  All rights reserved.
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION A,B,V(3)
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION COSB
 | ||
|  | 
 | ||
|  | 
 | ||
|  |       COSB = COS(B)
 | ||
|  | 
 | ||
|  |       V(1) = COS(A)*COSB
 | ||
|  |       V(2) = SIN(A)*COSB
 | ||
|  |       V(3) = SIN(B)
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_DE2H (HA, DEC, PHI, AZ, EL)
 | ||
|  | *+
 | ||
|  | *     - - - - -
 | ||
|  | *      D E 2 H
 | ||
|  | *     - - - - -
 | ||
|  | *
 | ||
|  | *  Equatorial to horizon coordinates:  HA,Dec to Az,El
 | ||
|  | *
 | ||
|  | *  (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     HA      d     hour angle
 | ||
|  | *     DEC     d     declination
 | ||
|  | *     PHI     d     observatory latitude
 | ||
|  | *
 | ||
|  | *  Returned:
 | ||
|  | *     AZ      d     azimuth
 | ||
|  | *     EL      d     elevation
 | ||
|  | *
 | ||
|  | *  Notes:
 | ||
|  | *
 | ||
|  | *  1)  All the arguments are angles in radians.
 | ||
|  | *
 | ||
|  | *  2)  Azimuth is returned in the range 0-2pi;  north is zero,
 | ||
|  | *      and east is +pi/2.  Elevation is returned in the range
 | ||
|  | *      +/-pi/2.
 | ||
|  | *
 | ||
|  | *  3)  The latitude must be geodetic.  In critical applications,
 | ||
|  | *      corrections for polar motion should be applied.
 | ||
|  | *
 | ||
|  | *  4)  In some applications it will be important to specify the
 | ||
|  | *      correct type of hour angle and declination in order to
 | ||
|  | *      produce the required type of azimuth and elevation.  In
 | ||
|  | *      particular, it may be important to distinguish between
 | ||
|  | *      elevation as affected by refraction, which would
 | ||
|  | *      require the "observed" HA,Dec, and the elevation
 | ||
|  | *      in vacuo, which would require the "topocentric" HA,Dec.
 | ||
|  | *      If the effects of diurnal aberration can be neglected, the
 | ||
|  | *      "apparent" HA,Dec may be used instead of the topocentric
 | ||
|  | *      HA,Dec.
 | ||
|  | *
 | ||
|  | *  5)  No range checking of arguments is carried out.
 | ||
|  | *
 | ||
|  | *  6)  In applications which involve many such calculations, rather
 | ||
|  | *      than calling the present routine it will be more efficient to
 | ||
|  | *      use inline code, having previously computed fixed terms such
 | ||
|  | *      as sine and cosine of latitude, and (for tracking a star)
 | ||
|  | *      sine and cosine of declination.
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   9 July 1994
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1995 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION HA,DEC,PHI,AZ,EL
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION D2PI
 | ||
|  |       PARAMETER (D2PI=6.283185307179586476925286766559D0)
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION SH,CH,SD,CD,SP,CP,X,Y,Z,R,A
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Useful trig functions
 | ||
|  |       SH=SIN(HA)
 | ||
|  |       CH=COS(HA)
 | ||
|  |       SD=SIN(DEC)
 | ||
|  |       CD=COS(DEC)
 | ||
|  |       SP=SIN(PHI)
 | ||
|  |       CP=COS(PHI)
 | ||
|  | 
 | ||
|  | *  Az,El as x,y,z
 | ||
|  |       X=-CH*CD*SP+SD*CP
 | ||
|  |       Y=-SH*CD
 | ||
|  |       Z=CH*CD*CP+SD*SP
 | ||
|  | 
 | ||
|  | *  To spherical
 | ||
|  |       R=SQRT(X*X+Y*Y)
 | ||
|  |       IF (R.EQ.0D0) THEN
 | ||
|  |          A=0D0
 | ||
|  |       ELSE
 | ||
|  |          A=ATAN2(Y,X)
 | ||
|  |       END IF
 | ||
|  |       IF (A.LT.0D0) A=A+D2PI
 | ||
|  |       AZ=A
 | ||
|  |       EL=ATAN2(Z,R)
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_DEULER (ORDER, PHI, THETA, PSI, RMAT)
 | ||
|  | *+
 | ||
|  | *     - - - - - - -
 | ||
|  | *      D E U L E R
 | ||
|  | *     - - - - - - -
 | ||
|  | *
 | ||
|  | *  Form a rotation matrix from the Euler angles - three successive
 | ||
|  | *  rotations about specified Cartesian axes (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *    ORDER   c*(*)   specifies about which axes the rotations occur
 | ||
|  | *    PHI     d       1st rotation (radians)
 | ||
|  | *    THETA   d       2nd rotation (   "   )
 | ||
|  | *    PSI     d       3rd rotation (   "   )
 | ||
|  | *
 | ||
|  | *  Returned:
 | ||
|  | *    RMAT    d(3,3)  rotation matrix
 | ||
|  | *
 | ||
|  | *  A rotation is positive when the reference frame rotates
 | ||
|  | *  anticlockwise as seen looking towards the origin from the
 | ||
|  | *  positive region of the specified axis.
 | ||
|  | *
 | ||
|  | *  The characters of ORDER define which axes the three successive
 | ||
|  | *  rotations are about.  A typical value is 'ZXZ', indicating that
 | ||
|  | *  RMAT is to become the direction cosine matrix corresponding to
 | ||
|  | *  rotations of the reference frame through PHI radians about the
 | ||
|  | *  old Z-axis, followed by THETA radians about the resulting X-axis,
 | ||
|  | *  then PSI radians about the resulting Z-axis.
 | ||
|  | *
 | ||
|  | *  The axis names can be any of the following, in any order or
 | ||
|  | *  combination:  X, Y, Z, uppercase or lowercase, 1, 2, 3.  Normal
 | ||
|  | *  axis labelling/numbering conventions apply;  the xyz (=123)
 | ||
|  | *  triad is right-handed.  Thus, the 'ZXZ' example given above
 | ||
|  | *  could be written 'zxz' or '313' (or even 'ZxZ' or '3xZ').  ORDER
 | ||
|  | *  is terminated by length or by the first unrecognized character.
 | ||
|  | *
 | ||
|  | *  Fewer than three rotations are acceptable, in which case the later
 | ||
|  | *  angle arguments are ignored.  If all rotations are zero, the
 | ||
|  | *  identity matrix is produced.
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   23 May 1997
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1997 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       CHARACTER*(*) ORDER
 | ||
|  |       DOUBLE PRECISION PHI,THETA,PSI,RMAT(3,3)
 | ||
|  | 
 | ||
|  |       INTEGER J,I,L,N,K
 | ||
|  |       DOUBLE PRECISION RESULT(3,3),ROTN(3,3),ANGLE,S,C,W,WM(3,3)
 | ||
|  |       CHARACTER AXIS
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Initialize result matrix
 | ||
|  |       DO J=1,3
 | ||
|  |          DO I=1,3
 | ||
|  |             IF (I.NE.J) THEN
 | ||
|  |                RESULT(I,J) = 0D0
 | ||
|  |             ELSE
 | ||
|  |                RESULT(I,J) = 1D0
 | ||
|  |             END IF
 | ||
|  |          END DO
 | ||
|  |       END DO
 | ||
|  | 
 | ||
|  | *  Establish length of axis string
 | ||
|  |       L = LEN(ORDER)
 | ||
|  | 
 | ||
|  | *  Look at each character of axis string until finished
 | ||
|  |       DO N=1,3
 | ||
|  |          IF (N.LE.L) THEN
 | ||
|  | 
 | ||
|  | *        Initialize rotation matrix for the current rotation
 | ||
|  |             DO J=1,3
 | ||
|  |                DO I=1,3
 | ||
|  |                   IF (I.NE.J) THEN
 | ||
|  |                      ROTN(I,J) = 0D0
 | ||
|  |                   ELSE
 | ||
|  |                      ROTN(I,J) = 1D0
 | ||
|  |                   END IF
 | ||
|  |                END DO
 | ||
|  |             END DO
 | ||
|  | 
 | ||
|  | *        Pick up the appropriate Euler angle and take sine & cosine
 | ||
|  |             IF (N.EQ.1) THEN
 | ||
|  |                ANGLE = PHI
 | ||
|  |             ELSE IF (N.EQ.2) THEN
 | ||
|  |                ANGLE = THETA
 | ||
|  |             ELSE
 | ||
|  |                ANGLE = PSI
 | ||
|  |             END IF
 | ||
|  |             S = SIN(ANGLE)
 | ||
|  |             C = COS(ANGLE)
 | ||
|  | 
 | ||
|  | *        Identify the axis
 | ||
|  |             AXIS = ORDER(N:N)
 | ||
|  |             IF (AXIS.EQ.'X'.OR.
 | ||
|  |      :          AXIS.EQ.'x'.OR.
 | ||
|  |      :          AXIS.EQ.'1') THEN
 | ||
|  | 
 | ||
|  | *           Matrix for x-rotation
 | ||
|  |                ROTN(2,2) = C
 | ||
|  |                ROTN(2,3) = S
 | ||
|  |                ROTN(3,2) = -S
 | ||
|  |                ROTN(3,3) = C
 | ||
|  | 
 | ||
|  |             ELSE IF (AXIS.EQ.'Y'.OR.
 | ||
|  |      :               AXIS.EQ.'y'.OR.
 | ||
|  |      :               AXIS.EQ.'2') THEN
 | ||
|  | 
 | ||
|  | *           Matrix for y-rotation
 | ||
|  |                ROTN(1,1) = C
 | ||
|  |                ROTN(1,3) = -S
 | ||
|  |                ROTN(3,1) = S
 | ||
|  |                ROTN(3,3) = C
 | ||
|  | 
 | ||
|  |             ELSE IF (AXIS.EQ.'Z'.OR.
 | ||
|  |      :               AXIS.EQ.'z'.OR.
 | ||
|  |      :               AXIS.EQ.'3') THEN
 | ||
|  | 
 | ||
|  | *           Matrix for z-rotation
 | ||
|  |                ROTN(1,1) = C
 | ||
|  |                ROTN(1,2) = S
 | ||
|  |                ROTN(2,1) = -S
 | ||
|  |                ROTN(2,2) = C
 | ||
|  | 
 | ||
|  |             ELSE
 | ||
|  | 
 | ||
|  | *           Unrecognized character - fake end of string
 | ||
|  |                L = 0
 | ||
|  | 
 | ||
|  |             END IF
 | ||
|  | 
 | ||
|  | *        Apply the current rotation (matrix ROTN x matrix RESULT)
 | ||
|  |             DO I=1,3
 | ||
|  |                DO J=1,3
 | ||
|  |                   W = 0D0
 | ||
|  |                   DO K=1,3
 | ||
|  |                      W = W+ROTN(I,K)*RESULT(K,J)
 | ||
|  |                   END DO
 | ||
|  |                   WM(I,J) = W
 | ||
|  |                END DO
 | ||
|  |             END DO
 | ||
|  |             DO J=1,3
 | ||
|  |                DO I=1,3
 | ||
|  |                   RESULT(I,J) = WM(I,J)
 | ||
|  |                END DO
 | ||
|  |             END DO
 | ||
|  | 
 | ||
|  |          END IF
 | ||
|  | 
 | ||
|  |       END DO
 | ||
|  | 
 | ||
|  | *  Copy the result
 | ||
|  |       DO J=1,3
 | ||
|  |          DO I=1,3
 | ||
|  |             RMAT(I,J) = RESULT(I,J)
 | ||
|  |          END DO
 | ||
|  |       END DO
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_DMOON (DATE, PV)
 | ||
|  | *+
 | ||
|  | *     - - - - - -
 | ||
|  | *      D M O O N
 | ||
|  | *     - - - - - -
 | ||
|  | *
 | ||
|  | *  Approximate geocentric position and velocity of the Moon
 | ||
|  | *  (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     DATE       D       TDB (loosely ET) as a Modified Julian Date
 | ||
|  | *                                                    (JD-2400000.5)
 | ||
|  | *
 | ||
|  | *  Returned:
 | ||
|  | *     PV         D(6)    Moon x,y,z,xdot,ydot,zdot, mean equator and
 | ||
|  | *                                         equinox of date (AU, AU/s)
 | ||
|  | *
 | ||
|  | *  Notes:
 | ||
|  | *
 | ||
|  | *  1  This routine is a full implementation of the algorithm
 | ||
|  | *     published by Meeus (see reference).
 | ||
|  | *
 | ||
|  | *  2  Meeus quotes accuracies of 10 arcsec in longitude, 3 arcsec in
 | ||
|  | *     latitude and 0.2 arcsec in HP (equivalent to about 20 km in
 | ||
|  | *     distance).  Comparison with JPL DE200 over the interval
 | ||
|  | *     1960-2025 gives RMS errors of 3.7 arcsec and 83 mas/hour in
 | ||
|  | *     longitude, 2.3 arcsec and 48 mas/hour in latitude, 11 km
 | ||
|  | *     and 81 mm/s in distance.  The maximum errors over the same
 | ||
|  | *     interval are 18 arcsec and 0.50 arcsec/hour in longitude,
 | ||
|  | *     11 arcsec and 0.24 arcsec/hour in latitude, 40 km and 0.29 m/s
 | ||
|  | *     in distance.
 | ||
|  | *
 | ||
|  | *  3  The original algorithm is expressed in terms of the obsolete
 | ||
|  | *     timescale Ephemeris Time.  Either TDB or TT can be used, but
 | ||
|  | *     not UT without incurring significant errors (30 arcsec at
 | ||
|  | *     the present time) due to the Moon's 0.5 arcsec/sec movement.
 | ||
|  | *
 | ||
|  | *  4  The algorithm is based on pre IAU 1976 standards.  However,
 | ||
|  | *     the result has been moved onto the new (FK5) equinox, an
 | ||
|  | *     adjustment which is in any case much smaller than the
 | ||
|  | *     intrinsic accuracy of the procedure.
 | ||
|  | *
 | ||
|  | *  5  Velocity is obtained by a complete analytical differentiation
 | ||
|  | *     of the Meeus model.
 | ||
|  | *
 | ||
|  | *  Reference:
 | ||
|  | *     Meeus, l'Astronomie, June 1984, p348.
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   22 January 1998
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1998 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION DATE,PV(6)
 | ||
|  | 
 | ||
|  | *  Degrees, arcseconds and seconds of time to radians
 | ||
|  |       DOUBLE PRECISION D2R,DAS2R,DS2R
 | ||
|  |       PARAMETER (D2R=0.0174532925199432957692369D0,
 | ||
|  |      :           DAS2R=4.848136811095359935899141D-6,
 | ||
|  |      :           DS2R=7.272205216643039903848712D-5)
 | ||
|  | 
 | ||
|  | *  Seconds per Julian century (86400*36525)
 | ||
|  |       DOUBLE PRECISION CJ
 | ||
|  |       PARAMETER (CJ=3155760000D0)
 | ||
|  | 
 | ||
|  | *  Julian epoch of B1950
 | ||
|  |       DOUBLE PRECISION B1950
 | ||
|  |       PARAMETER (B1950=1949.9997904423D0)
 | ||
|  | 
 | ||
|  | *  Earth equatorial radius in AU ( = 6378.137 / 149597870 )
 | ||
|  |       DOUBLE PRECISION ERADAU
 | ||
|  |       PARAMETER (ERADAU=4.2635212653763D-5)
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION T,THETA,SINOM,COSOM,DOMCOM,WA,DWA,WB,DWB,WOM,
 | ||
|  |      :                 DWOM,SINWOM,COSWOM,V,DV,COEFF,EMN,EMPN,DN,FN,EN,
 | ||
|  |      :                 DEN,DTHETA,FTHETA,EL,DEL,B,DB,BF,DBF,P,DP,SP,R,
 | ||
|  |      :                 DR,X,Y,Z,XD,YD,ZD,SEL,CEL,SB,CB,RCB,RBD,W,EPJ,
 | ||
|  |      :                 EQCOR,EPS,SINEPS,COSEPS,ES,EC
 | ||
|  |       INTEGER N,I
 | ||
|  | 
 | ||
|  | *
 | ||
|  | *  Coefficients for fundamental arguments
 | ||
|  | *
 | ||
|  | *   at J1900:  T**0, T**1, T**2, T**3
 | ||
|  | *   at epoch:  T**0, T**1
 | ||
|  | *
 | ||
|  | *  Units are degrees for position and Julian centuries for time
 | ||
|  | *
 | ||
|  | 
 | ||
|  | *  Moon's mean longitude
 | ||
|  |       DOUBLE PRECISION ELP0,ELP1,ELP2,ELP3,ELP,DELP
 | ||
|  |       PARAMETER (ELP0=270.434164D0,
 | ||
|  |      :           ELP1=481267.8831D0,
 | ||
|  |      :           ELP2=-0.001133D0,
 | ||
|  |      :           ELP3=0.0000019D0)
 | ||
|  | 
 | ||
|  | *  Sun's mean anomaly
 | ||
|  |       DOUBLE PRECISION EM0,EM1,EM2,EM3,EM,DEM
 | ||
|  |       PARAMETER (EM0=358.475833D0,
 | ||
|  |      :           EM1=35999.0498D0,
 | ||
|  |      :           EM2=-0.000150D0,
 | ||
|  |      :           EM3=-0.0000033D0)
 | ||
|  | 
 | ||
|  | *  Moon's mean anomaly
 | ||
|  |       DOUBLE PRECISION EMP0,EMP1,EMP2,EMP3,EMP,DEMP
 | ||
|  |       PARAMETER (EMP0=296.104608D0,
 | ||
|  |      :           EMP1=477198.8491D0,
 | ||
|  |      :           EMP2=0.009192D0,
 | ||
|  |      :           EMP3=0.0000144D0)
 | ||
|  | 
 | ||
|  | *  Moon's mean elongation
 | ||
|  |       DOUBLE PRECISION D0,D1,D2,D3,D,DD
 | ||
|  |       PARAMETER (D0=350.737486D0,
 | ||
|  |      :           D1=445267.1142D0,
 | ||
|  |      :           D2=-0.001436D0,
 | ||
|  |      :           D3=0.0000019D0)
 | ||
|  | 
 | ||
|  | *  Mean distance of the Moon from its ascending node
 | ||
|  |       DOUBLE PRECISION F0,F1,F2,F3,F,DF
 | ||
|  |       PARAMETER (F0=11.250889D0,
 | ||
|  |      :           F1=483202.0251D0,
 | ||
|  |      :           F2=-0.003211D0,
 | ||
|  |      :           F3=-0.0000003D0)
 | ||
|  | 
 | ||
|  | *  Longitude of the Moon's ascending node
 | ||
|  |       DOUBLE PRECISION OM0,OM1,OM2,OM3,OM,DOM
 | ||
|  |       PARAMETER (OM0=259.183275D0,
 | ||
|  |      :           OM1=-1934.1420D0,
 | ||
|  |      :           OM2=0.002078D0,
 | ||
|  |      :           OM3=0.0000022D0)
 | ||
|  | 
 | ||
|  | *  Coefficients for (dimensionless) E factor
 | ||
|  |       DOUBLE PRECISION E1,E2,E,DE,ESQ,DESQ
 | ||
|  |       PARAMETER (E1=-0.002495D0,E2=-0.00000752D0)
 | ||
|  | 
 | ||
|  | *  Coefficients for periodic variations etc
 | ||
|  |       DOUBLE PRECISION PAC,PA0,PA1
 | ||
|  |       PARAMETER (PAC=0.000233D0,PA0=51.2D0,PA1=20.2D0)
 | ||
|  |       DOUBLE PRECISION PBC
 | ||
|  |       PARAMETER (PBC=-0.001778D0)
 | ||
|  |       DOUBLE PRECISION PCC
 | ||
|  |       PARAMETER (PCC=0.000817D0)
 | ||
|  |       DOUBLE PRECISION PDC
 | ||
|  |       PARAMETER (PDC=0.002011D0)
 | ||
|  |       DOUBLE PRECISION PEC,PE0,PE1,PE2
 | ||
|  |       PARAMETER (PEC=0.003964D0,
 | ||
|  |      :                     PE0=346.560D0,PE1=132.870D0,PE2=-0.0091731D0)
 | ||
|  |       DOUBLE PRECISION PFC
 | ||
|  |       PARAMETER (PFC=0.001964D0)
 | ||
|  |       DOUBLE PRECISION PGC
 | ||
|  |       PARAMETER (PGC=0.002541D0)
 | ||
|  |       DOUBLE PRECISION PHC
 | ||
|  |       PARAMETER (PHC=0.001964D0)
 | ||
|  |       DOUBLE PRECISION PIC
 | ||
|  |       PARAMETER (PIC=-0.024691D0)
 | ||
|  |       DOUBLE PRECISION PJC,PJ0,PJ1
 | ||
|  |       PARAMETER (PJC=-0.004328D0,PJ0=275.05D0,PJ1=-2.30D0)
 | ||
|  |       DOUBLE PRECISION CW1
 | ||
|  |       PARAMETER (CW1=0.0004664D0)
 | ||
|  |       DOUBLE PRECISION CW2
 | ||
|  |       PARAMETER (CW2=0.0000754D0)
 | ||
|  | 
 | ||
|  | *
 | ||
|  | *  Coefficients for Moon position
 | ||
|  | *
 | ||
|  | *   Tx(N)       = coefficient of L, B or P term (deg)
 | ||
|  | *   ITx(N,1-5)  = coefficients of M, M', D, F, E**n in argument
 | ||
|  | *
 | ||
|  |       INTEGER NL,NB,NP
 | ||
|  |       PARAMETER (NL=50,NB=45,NP=31)
 | ||
|  |       DOUBLE PRECISION TL(NL),TB(NB),TP(NP)
 | ||
|  |       INTEGER ITL(5,NL),ITB(5,NB),ITP(5,NP)
 | ||
|  | *
 | ||
|  | *  Longitude
 | ||
|  | *                                         M   M'  D   F   n
 | ||
|  |       DATA TL( 1)/            +6.288750D0                     /,
 | ||
|  |      :     (ITL(I, 1),I=1,5)/            +0, +1, +0, +0,  0   /
 | ||
|  |       DATA TL( 2)/            +1.274018D0                     /,
 | ||
|  |      :     (ITL(I, 2),I=1,5)/            +0, -1, +2, +0,  0   /
 | ||
|  |       DATA TL( 3)/            +0.658309D0                     /,
 | ||
|  |      :     (ITL(I, 3),I=1,5)/            +0, +0, +2, +0,  0   /
 | ||
|  |       DATA TL( 4)/            +0.213616D0                     /,
 | ||
|  |      :     (ITL(I, 4),I=1,5)/            +0, +2, +0, +0,  0   /
 | ||
|  |       DATA TL( 5)/            -0.185596D0                     /,
 | ||
|  |      :     (ITL(I, 5),I=1,5)/            +1, +0, +0, +0,  1   /
 | ||
|  |       DATA TL( 6)/            -0.114336D0                     /,
 | ||
|  |      :     (ITL(I, 6),I=1,5)/            +0, +0, +0, +2,  0   /
 | ||
|  |       DATA TL( 7)/            +0.058793D0                     /,
 | ||
|  |      :     (ITL(I, 7),I=1,5)/            +0, -2, +2, +0,  0   /
 | ||
|  |       DATA TL( 8)/            +0.057212D0                     /,
 | ||
|  |      :     (ITL(I, 8),I=1,5)/            -1, -1, +2, +0,  1   /
 | ||
|  |       DATA TL( 9)/            +0.053320D0                     /,
 | ||
|  |      :     (ITL(I, 9),I=1,5)/            +0, +1, +2, +0,  0   /
 | ||
|  |       DATA TL(10)/            +0.045874D0                     /,
 | ||
|  |      :     (ITL(I,10),I=1,5)/            -1, +0, +2, +0,  1   /
 | ||
|  |       DATA TL(11)/            +0.041024D0                     /,
 | ||
|  |      :     (ITL(I,11),I=1,5)/            -1, +1, +0, +0,  1   /
 | ||
|  |       DATA TL(12)/            -0.034718D0                     /,
 | ||
|  |      :     (ITL(I,12),I=1,5)/            +0, +0, +1, +0,  0   /
 | ||
|  |       DATA TL(13)/            -0.030465D0                     /,
 | ||
|  |      :     (ITL(I,13),I=1,5)/            +1, +1, +0, +0,  1   /
 | ||
|  |       DATA TL(14)/            +0.015326D0                     /,
 | ||
|  |      :     (ITL(I,14),I=1,5)/            +0, +0, +2, -2,  0   /
 | ||
|  |       DATA TL(15)/            -0.012528D0                     /,
 | ||
|  |      :     (ITL(I,15),I=1,5)/            +0, +1, +0, +2,  0   /
 | ||
|  |       DATA TL(16)/            -0.010980D0                     /,
 | ||
|  |      :     (ITL(I,16),I=1,5)/            +0, -1, +0, +2,  0   /
 | ||
|  |       DATA TL(17)/            +0.010674D0                     /,
 | ||
|  |      :     (ITL(I,17),I=1,5)/            +0, -1, +4, +0,  0   /
 | ||
|  |       DATA TL(18)/            +0.010034D0                     /,
 | ||
|  |      :     (ITL(I,18),I=1,5)/            +0, +3, +0, +0,  0   /
 | ||
|  |       DATA TL(19)/            +0.008548D0                     /,
 | ||
|  |      :     (ITL(I,19),I=1,5)/            +0, -2, +4, +0,  0   /
 | ||
|  |       DATA TL(20)/            -0.007910D0                     /,
 | ||
|  |      :     (ITL(I,20),I=1,5)/            +1, -1, +2, +0,  1   /
 | ||
|  |       DATA TL(21)/            -0.006783D0                     /,
 | ||
|  |      :     (ITL(I,21),I=1,5)/            +1, +0, +2, +0,  1   /
 | ||
|  |       DATA TL(22)/            +0.005162D0                     /,
 | ||
|  |      :     (ITL(I,22),I=1,5)/            +0, +1, -1, +0,  0   /
 | ||
|  |       DATA TL(23)/            +0.005000D0                     /,
 | ||
|  |      :     (ITL(I,23),I=1,5)/            +1, +0, +1, +0,  1   /
 | ||
|  |       DATA TL(24)/            +0.004049D0                     /,
 | ||
|  |      :     (ITL(I,24),I=1,5)/            -1, +1, +2, +0,  1   /
 | ||
|  |       DATA TL(25)/            +0.003996D0                     /,
 | ||
|  |      :     (ITL(I,25),I=1,5)/            +0, +2, +2, +0,  0   /
 | ||
|  |       DATA TL(26)/            +0.003862D0                     /,
 | ||
|  |      :     (ITL(I,26),I=1,5)/            +0, +0, +4, +0,  0   /
 | ||
|  |       DATA TL(27)/            +0.003665D0                     /,
 | ||
|  |      :     (ITL(I,27),I=1,5)/            +0, -3, +2, +0,  0   /
 | ||
|  |       DATA TL(28)/            +0.002695D0                     /,
 | ||
|  |      :     (ITL(I,28),I=1,5)/            -1, +2, +0, +0,  1   /
 | ||
|  |       DATA TL(29)/            +0.002602D0                     /,
 | ||
|  |      :     (ITL(I,29),I=1,5)/            +0, +1, -2, -2,  0   /
 | ||
|  |       DATA TL(30)/            +0.002396D0                     /,
 | ||
|  |      :     (ITL(I,30),I=1,5)/            -1, -2, +2, +0,  1   /
 | ||
|  |       DATA TL(31)/            -0.002349D0                     /,
 | ||
|  |      :     (ITL(I,31),I=1,5)/            +0, +1, +1, +0,  0   /
 | ||
|  |       DATA TL(32)/            +0.002249D0                     /,
 | ||
|  |      :     (ITL(I,32),I=1,5)/            -2, +0, +2, +0,  2   /
 | ||
|  |       DATA TL(33)/            -0.002125D0                     /,
 | ||
|  |      :     (ITL(I,33),I=1,5)/            +1, +2, +0, +0,  1   /
 | ||
|  |       DATA TL(34)/            -0.002079D0                     /,
 | ||
|  |      :     (ITL(I,34),I=1,5)/            +2, +0, +0, +0,  2   /
 | ||
|  |       DATA TL(35)/            +0.002059D0                     /,
 | ||
|  |      :     (ITL(I,35),I=1,5)/            -2, -1, +2, +0,  2   /
 | ||
|  |       DATA TL(36)/            -0.001773D0                     /,
 | ||
|  |      :     (ITL(I,36),I=1,5)/            +0, +1, +2, -2,  0   /
 | ||
|  |       DATA TL(37)/            -0.001595D0                     /,
 | ||
|  |      :     (ITL(I,37),I=1,5)/            +0, +0, +2, +2,  0   /
 | ||
|  |       DATA TL(38)/            +0.001220D0                     /,
 | ||
|  |      :     (ITL(I,38),I=1,5)/            -1, -1, +4, +0,  1   /
 | ||
|  |       DATA TL(39)/            -0.001110D0                     /,
 | ||
|  |      :     (ITL(I,39),I=1,5)/            +0, +2, +0, +2,  0   /
 | ||
|  |       DATA TL(40)/            +0.000892D0                     /,
 | ||
|  |      :     (ITL(I,40),I=1,5)/            +0, +1, -3, +0,  0   /
 | ||
|  |       DATA TL(41)/            -0.000811D0                     /,
 | ||
|  |      :     (ITL(I,41),I=1,5)/            +1, +1, +2, +0,  1   /
 | ||
|  |       DATA TL(42)/            +0.000761D0                     /,
 | ||
|  |      :     (ITL(I,42),I=1,5)/            -1, -2, +4, +0,  1   /
 | ||
|  |       DATA TL(43)/            +0.000717D0                     /,
 | ||
|  |      :     (ITL(I,43),I=1,5)/            -2, +1, +0, +0,  2   /
 | ||
|  |       DATA TL(44)/            +0.000704D0                     /,
 | ||
|  |      :     (ITL(I,44),I=1,5)/            -2, +1, -2, +0,  2   /
 | ||
|  |       DATA TL(45)/            +0.000693D0                     /,
 | ||
|  |      :     (ITL(I,45),I=1,5)/            +1, -2, +2, +0,  1   /
 | ||
|  |       DATA TL(46)/            +0.000598D0                     /,
 | ||
|  |      :     (ITL(I,46),I=1,5)/            -1, +0, +2, -2,  1   /
 | ||
|  |       DATA TL(47)/            +0.000550D0                     /,
 | ||
|  |      :     (ITL(I,47),I=1,5)/            +0, +1, +4, +0,  0   /
 | ||
|  |       DATA TL(48)/            +0.000538D0                     /,
 | ||
|  |      :     (ITL(I,48),I=1,5)/            +0, +4, +0, +0,  0   /
 | ||
|  |       DATA TL(49)/            +0.000521D0                     /,
 | ||
|  |      :     (ITL(I,49),I=1,5)/            -1, +0, +4, +0,  1   /
 | ||
|  |       DATA TL(50)/            +0.000486D0                     /,
 | ||
|  |      :     (ITL(I,50),I=1,5)/            +0, +2, -1, +0,  0   /
 | ||
|  | *
 | ||
|  | *  Latitude
 | ||
|  | *                                         M   M'  D   F   n
 | ||
|  |       DATA TB( 1)/            +5.128189D0                     /,
 | ||
|  |      :     (ITB(I, 1),I=1,5)/            +0, +0, +0, +1,  0   /
 | ||
|  |       DATA TB( 2)/            +0.280606D0                     /,
 | ||
|  |      :     (ITB(I, 2),I=1,5)/            +0, +1, +0, +1,  0   /
 | ||
|  |       DATA TB( 3)/            +0.277693D0                     /,
 | ||
|  |      :     (ITB(I, 3),I=1,5)/            +0, +1, +0, -1,  0   /
 | ||
|  |       DATA TB( 4)/            +0.173238D0                     /,
 | ||
|  |      :     (ITB(I, 4),I=1,5)/            +0, +0, +2, -1,  0   /
 | ||
|  |       DATA TB( 5)/            +0.055413D0                     /,
 | ||
|  |      :     (ITB(I, 5),I=1,5)/            +0, -1, +2, +1,  0   /
 | ||
|  |       DATA TB( 6)/            +0.046272D0                     /,
 | ||
|  |      :     (ITB(I, 6),I=1,5)/            +0, -1, +2, -1,  0   /
 | ||
|  |       DATA TB( 7)/            +0.032573D0                     /,
 | ||
|  |      :     (ITB(I, 7),I=1,5)/            +0, +0, +2, +1,  0   /
 | ||
|  |       DATA TB( 8)/            +0.017198D0                     /,
 | ||
|  |      :     (ITB(I, 8),I=1,5)/            +0, +2, +0, +1,  0   /
 | ||
|  |       DATA TB( 9)/            +0.009267D0                     /,
 | ||
|  |      :     (ITB(I, 9),I=1,5)/            +0, +1, +2, -1,  0   /
 | ||
|  |       DATA TB(10)/            +0.008823D0                     /,
 | ||
|  |      :     (ITB(I,10),I=1,5)/            +0, +2, +0, -1,  0   /
 | ||
|  |       DATA TB(11)/            +0.008247D0                     /,
 | ||
|  |      :     (ITB(I,11),I=1,5)/            -1, +0, +2, -1,  1   /
 | ||
|  |       DATA TB(12)/            +0.004323D0                     /,
 | ||
|  |      :     (ITB(I,12),I=1,5)/            +0, -2, +2, -1,  0   /
 | ||
|  |       DATA TB(13)/            +0.004200D0                     /,
 | ||
|  |      :     (ITB(I,13),I=1,5)/            +0, +1, +2, +1,  0   /
 | ||
|  |       DATA TB(14)/            +0.003372D0                     /,
 | ||
|  |      :     (ITB(I,14),I=1,5)/            -1, +0, -2, +1,  1   /
 | ||
|  |       DATA TB(15)/            +0.002472D0                     /,
 | ||
|  |      :     (ITB(I,15),I=1,5)/            -1, -1, +2, +1,  1   /
 | ||
|  |       DATA TB(16)/            +0.002222D0                     /,
 | ||
|  |      :     (ITB(I,16),I=1,5)/            -1, +0, +2, +1,  1   /
 | ||
|  |       DATA TB(17)/            +0.002072D0                     /,
 | ||
|  |      :     (ITB(I,17),I=1,5)/            -1, -1, +2, -1,  1   /
 | ||
|  |       DATA TB(18)/            +0.001877D0                     /,
 | ||
|  |      :     (ITB(I,18),I=1,5)/            -1, +1, +0, +1,  1   /
 | ||
|  |       DATA TB(19)/            +0.001828D0                     /,
 | ||
|  |      :     (ITB(I,19),I=1,5)/            +0, -1, +4, -1,  0   /
 | ||
|  |       DATA TB(20)/            -0.001803D0                     /,
 | ||
|  |      :     (ITB(I,20),I=1,5)/            +1, +0, +0, +1,  1   /
 | ||
|  |       DATA TB(21)/            -0.001750D0                     /,
 | ||
|  |      :     (ITB(I,21),I=1,5)/            +0, +0, +0, +3,  0   /
 | ||
|  |       DATA TB(22)/            +0.001570D0                     /,
 | ||
|  |      :     (ITB(I,22),I=1,5)/            -1, +1, +0, -1,  1   /
 | ||
|  |       DATA TB(23)/            -0.001487D0                     /,
 | ||
|  |      :     (ITB(I,23),I=1,5)/            +0, +0, +1, +1,  0   /
 | ||
|  |       DATA TB(24)/            -0.001481D0                     /,
 | ||
|  |      :     (ITB(I,24),I=1,5)/            +1, +1, +0, +1,  1   /
 | ||
|  |       DATA TB(25)/            +0.001417D0                     /,
 | ||
|  |      :     (ITB(I,25),I=1,5)/            -1, -1, +0, +1,  1   /
 | ||
|  |       DATA TB(26)/            +0.001350D0                     /,
 | ||
|  |      :     (ITB(I,26),I=1,5)/            -1, +0, +0, +1,  1   /
 | ||
|  |       DATA TB(27)/            +0.001330D0                     /,
 | ||
|  |      :     (ITB(I,27),I=1,5)/            +0, +0, -1, +1,  0   /
 | ||
|  |       DATA TB(28)/            +0.001106D0                     /,
 | ||
|  |      :     (ITB(I,28),I=1,5)/            +0, +3, +0, +1,  0   /
 | ||
|  |       DATA TB(29)/            +0.001020D0                     /,
 | ||
|  |      :     (ITB(I,29),I=1,5)/            +0, +0, +4, -1,  0   /
 | ||
|  |       DATA TB(30)/            +0.000833D0                     /,
 | ||
|  |      :     (ITB(I,30),I=1,5)/            +0, -1, +4, +1,  0   /
 | ||
|  |       DATA TB(31)/            +0.000781D0                     /,
 | ||
|  |      :     (ITB(I,31),I=1,5)/            +0, +1, +0, -3,  0   /
 | ||
|  |       DATA TB(32)/            +0.000670D0                     /,
 | ||
|  |      :     (ITB(I,32),I=1,5)/            +0, -2, +4, +1,  0   /
 | ||
|  |       DATA TB(33)/            +0.000606D0                     /,
 | ||
|  |      :     (ITB(I,33),I=1,5)/            +0, +0, +2, -3,  0   /
 | ||
|  |       DATA TB(34)/            +0.000597D0                     /,
 | ||
|  |      :     (ITB(I,34),I=1,5)/            +0, +2, +2, -1,  0   /
 | ||
|  |       DATA TB(35)/            +0.000492D0                     /,
 | ||
|  |      :     (ITB(I,35),I=1,5)/            -1, +1, +2, -1,  1   /
 | ||
|  |       DATA TB(36)/            +0.000450D0                     /,
 | ||
|  |      :     (ITB(I,36),I=1,5)/            +0, +2, -2, -1,  0   /
 | ||
|  |       DATA TB(37)/            +0.000439D0                     /,
 | ||
|  |      :     (ITB(I,37),I=1,5)/            +0, +3, +0, -1,  0   /
 | ||
|  |       DATA TB(38)/            +0.000423D0                     /,
 | ||
|  |      :     (ITB(I,38),I=1,5)/            +0, +2, +2, +1,  0   /
 | ||
|  |       DATA TB(39)/            +0.000422D0                     /,
 | ||
|  |      :     (ITB(I,39),I=1,5)/            +0, -3, +2, -1,  0   /
 | ||
|  |       DATA TB(40)/            -0.000367D0                     /,
 | ||
|  |      :     (ITB(I,40),I=1,5)/            +1, -1, +2, +1,  1   /
 | ||
|  |       DATA TB(41)/            -0.000353D0                     /,
 | ||
|  |      :     (ITB(I,41),I=1,5)/            +1, +0, +2, +1,  1   /
 | ||
|  |       DATA TB(42)/            +0.000331D0                     /,
 | ||
|  |      :     (ITB(I,42),I=1,5)/            +0, +0, +4, +1,  0   /
 | ||
|  |       DATA TB(43)/            +0.000317D0                     /,
 | ||
|  |      :     (ITB(I,43),I=1,5)/            -1, +1, +2, +1,  1   /
 | ||
|  |       DATA TB(44)/            +0.000306D0                     /,
 | ||
|  |      :     (ITB(I,44),I=1,5)/            -2, +0, +2, -1,  2   /
 | ||
|  |       DATA TB(45)/            -0.000283D0                     /,
 | ||
|  |      :     (ITB(I,45),I=1,5)/            +0, +1, +0, +3,  0   /
 | ||
|  | *
 | ||
|  | *  Parallax
 | ||
|  | *                                         M   M'  D   F   n
 | ||
|  |       DATA TP( 1)/            +0.950724D0                     /,
 | ||
|  |      :     (ITP(I, 1),I=1,5)/            +0, +0, +0, +0,  0   /
 | ||
|  |       DATA TP( 2)/            +0.051818D0                     /,
 | ||
|  |      :     (ITP(I, 2),I=1,5)/            +0, +1, +0, +0,  0   /
 | ||
|  |       DATA TP( 3)/            +0.009531D0                     /,
 | ||
|  |      :     (ITP(I, 3),I=1,5)/            +0, -1, +2, +0,  0   /
 | ||
|  |       DATA TP( 4)/            +0.007843D0                     /,
 | ||
|  |      :     (ITP(I, 4),I=1,5)/            +0, +0, +2, +0,  0   /
 | ||
|  |       DATA TP( 5)/            +0.002824D0                     /,
 | ||
|  |      :     (ITP(I, 5),I=1,5)/            +0, +2, +0, +0,  0   /
 | ||
|  |       DATA TP( 6)/            +0.000857D0                     /,
 | ||
|  |      :     (ITP(I, 6),I=1,5)/            +0, +1, +2, +0,  0   /
 | ||
|  |       DATA TP( 7)/            +0.000533D0                     /,
 | ||
|  |      :     (ITP(I, 7),I=1,5)/            -1, +0, +2, +0,  1   /
 | ||
|  |       DATA TP( 8)/            +0.000401D0                     /,
 | ||
|  |      :     (ITP(I, 8),I=1,5)/            -1, -1, +2, +0,  1   /
 | ||
|  |       DATA TP( 9)/            +0.000320D0                     /,
 | ||
|  |      :     (ITP(I, 9),I=1,5)/            -1, +1, +0, +0,  1   /
 | ||
|  |       DATA TP(10)/            -0.000271D0                     /,
 | ||
|  |      :     (ITP(I,10),I=1,5)/            +0, +0, +1, +0,  0   /
 | ||
|  |       DATA TP(11)/            -0.000264D0                     /,
 | ||
|  |      :     (ITP(I,11),I=1,5)/            +1, +1, +0, +0,  1   /
 | ||
|  |       DATA TP(12)/            -0.000198D0                     /,
 | ||
|  |      :     (ITP(I,12),I=1,5)/            +0, -1, +0, +2,  0   /
 | ||
|  |       DATA TP(13)/            +0.000173D0                     /,
 | ||
|  |      :     (ITP(I,13),I=1,5)/            +0, +3, +0, +0,  0   /
 | ||
|  |       DATA TP(14)/            +0.000167D0                     /,
 | ||
|  |      :     (ITP(I,14),I=1,5)/            +0, -1, +4, +0,  0   /
 | ||
|  |       DATA TP(15)/            -0.000111D0                     /,
 | ||
|  |      :     (ITP(I,15),I=1,5)/            +1, +0, +0, +0,  1   /
 | ||
|  |       DATA TP(16)/            +0.000103D0                     /,
 | ||
|  |      :     (ITP(I,16),I=1,5)/            +0, -2, +4, +0,  0   /
 | ||
|  |       DATA TP(17)/            -0.000084D0                     /,
 | ||
|  |      :     (ITP(I,17),I=1,5)/            +0, +2, -2, +0,  0   /
 | ||
|  |       DATA TP(18)/            -0.000083D0                     /,
 | ||
|  |      :     (ITP(I,18),I=1,5)/            +1, +0, +2, +0,  1   /
 | ||
|  |       DATA TP(19)/            +0.000079D0                     /,
 | ||
|  |      :     (ITP(I,19),I=1,5)/            +0, +2, +2, +0,  0   /
 | ||
|  |       DATA TP(20)/            +0.000072D0                     /,
 | ||
|  |      :     (ITP(I,20),I=1,5)/            +0, +0, +4, +0,  0   /
 | ||
|  |       DATA TP(21)/            +0.000064D0                     /,
 | ||
|  |      :     (ITP(I,21),I=1,5)/            -1, +1, +2, +0,  1   /
 | ||
|  |       DATA TP(22)/            -0.000063D0                     /,
 | ||
|  |      :     (ITP(I,22),I=1,5)/            +1, -1, +2, +0,  1   /
 | ||
|  |       DATA TP(23)/            +0.000041D0                     /,
 | ||
|  |      :     (ITP(I,23),I=1,5)/            +1, +0, +1, +0,  1   /
 | ||
|  |       DATA TP(24)/            +0.000035D0                     /,
 | ||
|  |      :     (ITP(I,24),I=1,5)/            -1, +2, +0, +0,  1   /
 | ||
|  |       DATA TP(25)/            -0.000033D0                     /,
 | ||
|  |      :     (ITP(I,25),I=1,5)/            +0, +3, -2, +0,  0   /
 | ||
|  |       DATA TP(26)/            -0.000030D0                     /,
 | ||
|  |      :     (ITP(I,26),I=1,5)/            +0, +1, +1, +0,  0   /
 | ||
|  |       DATA TP(27)/            -0.000029D0                     /,
 | ||
|  |      :     (ITP(I,27),I=1,5)/            +0, +0, -2, +2,  0   /
 | ||
|  |       DATA TP(28)/            -0.000029D0                     /,
 | ||
|  |      :     (ITP(I,28),I=1,5)/            +1, +2, +0, +0,  1   /
 | ||
|  |       DATA TP(29)/            +0.000026D0                     /,
 | ||
|  |      :     (ITP(I,29),I=1,5)/            -2, +0, +2, +0,  2   /
 | ||
|  |       DATA TP(30)/            -0.000023D0                     /,
 | ||
|  |      :     (ITP(I,30),I=1,5)/            +0, +1, -2, +2,  0   /
 | ||
|  |       DATA TP(31)/            +0.000019D0                     /,
 | ||
|  |      :     (ITP(I,31),I=1,5)/            -1, -1, +4, +0,  1   /
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Centuries since J1900
 | ||
|  |       T=(DATE-15019.5D0)/36525D0
 | ||
|  | 
 | ||
|  | *
 | ||
|  | *  Fundamental arguments (radians) and derivatives (radians per
 | ||
|  | *  Julian century) for the current epoch
 | ||
|  | *
 | ||
|  | 
 | ||
|  | *  Moon's mean longitude
 | ||
|  |       ELP=D2R*MOD(ELP0+(ELP1+(ELP2+ELP3*T)*T)*T,360D0)
 | ||
|  |       DELP=D2R*(ELP1+(2D0*ELP2+3D0*ELP3*T)*T)
 | ||
|  | 
 | ||
|  | *  Sun's mean anomaly
 | ||
|  |       EM=D2R*MOD(EM0+(EM1+(EM2+EM3*T)*T)*T,360D0)
 | ||
|  |       DEM=D2R*(EM1+(2D0*EM2+3D0*EM3*T)*T)
 | ||
|  | 
 | ||
|  | *  Moon's mean anomaly
 | ||
|  |       EMP=D2R*MOD(EMP0+(EMP1+(EMP2+EMP3*T)*T)*T,360D0)
 | ||
|  |       DEMP=D2R*(EMP1+(2D0*EMP2+3D0*EMP3*T)*T)
 | ||
|  | 
 | ||
|  | *  Moon's mean elongation
 | ||
|  |       D=D2R*MOD(D0+(D1+(D2+D3*T)*T)*T,360D0)
 | ||
|  |       DD=D2R*(D1+(2D0*D2+3D0*D3*T)*T)
 | ||
|  | 
 | ||
|  | *  Mean distance of the Moon from its ascending node
 | ||
|  |       F=D2R*MOD(F0+(F1+(F2+F3*T)*T)*T,360D0)
 | ||
|  |       DF=D2R*(F1+(2D0*F2+3D0*F3*T)*T)
 | ||
|  | 
 | ||
|  | *  Longitude of the Moon's ascending node
 | ||
|  |       OM=D2R*MOD(OM0+(OM1+(OM2+OM3*T)*T)*T,360D0)
 | ||
|  |       DOM=D2R*(OM1+(2D0*OM2+3D0*OM3*T)*T)
 | ||
|  |       SINOM=SIN(OM)
 | ||
|  |       COSOM=COS(OM)
 | ||
|  |       DOMCOM=DOM*COSOM
 | ||
|  | 
 | ||
|  | *  Add the periodic variations
 | ||
|  |       THETA=D2R*(PA0+PA1*T)
 | ||
|  |       WA=SIN(THETA)
 | ||
|  |       DWA=D2R*PA1*COS(THETA)
 | ||
|  |       THETA=D2R*(PE0+(PE1+PE2*T)*T)
 | ||
|  |       WB=PEC*SIN(THETA)
 | ||
|  |       DWB=D2R*PEC*(PE1+2D0*PE2*T)*COS(THETA)
 | ||
|  |       ELP=ELP+D2R*(PAC*WA+WB+PFC*SINOM)
 | ||
|  |       DELP=DELP+D2R*(PAC*DWA+DWB+PFC*DOMCOM)
 | ||
|  |       EM=EM+D2R*PBC*WA
 | ||
|  |       DEM=DEM+D2R*PBC*DWA
 | ||
|  |       EMP=EMP+D2R*(PCC*WA+WB+PGC*SINOM)
 | ||
|  |       DEMP=DEMP+D2R*(PCC*DWA+DWB+PGC*DOMCOM)
 | ||
|  |       D=D+D2R*(PDC*WA+WB+PHC*SINOM)
 | ||
|  |       DD=DD+D2R*(PDC*DWA+DWB+PHC*DOMCOM)
 | ||
|  |       WOM=OM+D2R*(PJ0+PJ1*T)
 | ||
|  |       DWOM=DOM+D2R*PJ1
 | ||
|  |       SINWOM=SIN(WOM)
 | ||
|  |       COSWOM=COS(WOM)
 | ||
|  |       F=F+D2R*(WB+PIC*SINOM+PJC*SINWOM)
 | ||
|  |       DF=DF+D2R*(DWB+PIC*DOMCOM+PJC*DWOM*COSWOM)
 | ||
|  | 
 | ||
|  | *  E-factor, and square
 | ||
|  |       E=1D0+(E1+E2*T)*T
 | ||
|  |       DE=E1+2D0*E2*T
 | ||
|  |       ESQ=E*E
 | ||
|  |       DESQ=2D0*E*DE
 | ||
|  | 
 | ||
|  | *
 | ||
|  | *  Series expansions
 | ||
|  | *
 | ||
|  | 
 | ||
|  | *  Longitude
 | ||
|  |       V=0D0
 | ||
|  |       DV=0D0
 | ||
|  |       DO N=NL,1,-1
 | ||
|  |          COEFF=TL(N)
 | ||
|  |          EMN=DBLE(ITL(1,N))
 | ||
|  |          EMPN=DBLE(ITL(2,N))
 | ||
|  |          DN=DBLE(ITL(3,N))
 | ||
|  |          FN=DBLE(ITL(4,N))
 | ||
|  |          I=ITL(5,N)
 | ||
|  |          IF (I.EQ.0) THEN
 | ||
|  |             EN=1D0
 | ||
|  |             DEN=0D0
 | ||
|  |          ELSE IF (I.EQ.1) THEN
 | ||
|  |             EN=E
 | ||
|  |             DEN=DE
 | ||
|  |          ELSE
 | ||
|  |             EN=ESQ
 | ||
|  |             DEN=DESQ
 | ||
|  |          END IF
 | ||
|  |          THETA=EMN*EM+EMPN*EMP+DN*D+FN*F
 | ||
|  |          DTHETA=EMN*DEM+EMPN*DEMP+DN*DD+FN*DF
 | ||
|  |          FTHETA=SIN(THETA)
 | ||
|  |          V=V+COEFF*FTHETA*EN
 | ||
|  |          DV=DV+COEFF*(COS(THETA)*DTHETA*EN+FTHETA*DEN)
 | ||
|  |       END DO
 | ||
|  |       EL=ELP+D2R*V
 | ||
|  |       DEL=(DELP+D2R*DV)/CJ
 | ||
|  | 
 | ||
|  | *  Latitude
 | ||
|  |       V=0D0
 | ||
|  |       DV=0D0
 | ||
|  |       DO N=NB,1,-1
 | ||
|  |          COEFF=TB(N)
 | ||
|  |          EMN=DBLE(ITB(1,N))
 | ||
|  |          EMPN=DBLE(ITB(2,N))
 | ||
|  |          DN=DBLE(ITB(3,N))
 | ||
|  |          FN=DBLE(ITB(4,N))
 | ||
|  |          I=ITB(5,N)
 | ||
|  |          IF (I.EQ.0) THEN
 | ||
|  |             EN=1D0
 | ||
|  |             DEN=0D0
 | ||
|  |          ELSE IF (I.EQ.1) THEN
 | ||
|  |             EN=E
 | ||
|  |             DEN=DE
 | ||
|  |          ELSE
 | ||
|  |             EN=ESQ
 | ||
|  |             DEN=DESQ
 | ||
|  |          END IF
 | ||
|  |          THETA=EMN*EM+EMPN*EMP+DN*D+FN*F
 | ||
|  |          DTHETA=EMN*DEM+EMPN*DEMP+DN*DD+FN*DF
 | ||
|  |          FTHETA=SIN(THETA)
 | ||
|  |          V=V+COEFF*FTHETA*EN
 | ||
|  |          DV=DV+COEFF*(COS(THETA)*DTHETA*EN+FTHETA*DEN)
 | ||
|  |       END DO
 | ||
|  |       BF=1D0-CW1*COSOM-CW2*COSWOM
 | ||
|  |       DBF=CW1*DOM*SINOM+CW2*DWOM*SINWOM
 | ||
|  |       B=D2R*V*BF
 | ||
|  |       DB=D2R*(DV*BF+V*DBF)/CJ
 | ||
|  | 
 | ||
|  | *  Parallax
 | ||
|  |       V=0D0
 | ||
|  |       DV=0D0
 | ||
|  |       DO N=NP,1,-1
 | ||
|  |          COEFF=TP(N)
 | ||
|  |          EMN=DBLE(ITP(1,N))
 | ||
|  |          EMPN=DBLE(ITP(2,N))
 | ||
|  |          DN=DBLE(ITP(3,N))
 | ||
|  |          FN=DBLE(ITP(4,N))
 | ||
|  |          I=ITP(5,N)
 | ||
|  |          IF (I.EQ.0) THEN
 | ||
|  |             EN=1D0
 | ||
|  |             DEN=0D0
 | ||
|  |          ELSE IF (I.EQ.1) THEN
 | ||
|  |             EN=E
 | ||
|  |             DEN=DE
 | ||
|  |          ELSE
 | ||
|  |             EN=ESQ
 | ||
|  |             DEN=DESQ
 | ||
|  |          END IF
 | ||
|  |          THETA=EMN*EM+EMPN*EMP+DN*D+FN*F
 | ||
|  |          DTHETA=EMN*DEM+EMPN*DEMP+DN*DD+FN*DF
 | ||
|  |          FTHETA=COS(THETA)
 | ||
|  |          V=V+COEFF*FTHETA*EN
 | ||
|  |          DV=DV+COEFF*(-SIN(THETA)*DTHETA*EN+FTHETA*DEN)
 | ||
|  |       END DO
 | ||
|  |       P=D2R*V
 | ||
|  |       DP=D2R*DV/CJ
 | ||
|  | 
 | ||
|  | *
 | ||
|  | *  Transformation into final form
 | ||
|  | *
 | ||
|  | 
 | ||
|  | *  Parallax to distance (AU, AU/sec)
 | ||
|  |       SP=SIN(P)
 | ||
|  |       R=ERADAU/SP
 | ||
|  |       DR=-R*DP*COS(P)/SP
 | ||
|  | 
 | ||
|  | *  Longitude, latitude to x,y,z (AU)
 | ||
|  |       SEL=SIN(EL)
 | ||
|  |       CEL=COS(EL)
 | ||
|  |       SB=SIN(B)
 | ||
|  |       CB=COS(B)
 | ||
|  |       RCB=R*CB
 | ||
|  |       RBD=R*DB
 | ||
|  |       W=RBD*SB-CB*DR
 | ||
|  |       X=RCB*CEL
 | ||
|  |       Y=RCB*SEL
 | ||
|  |       Z=R*SB
 | ||
|  |       XD=-Y*DEL-W*CEL
 | ||
|  |       YD=X*DEL-W*SEL
 | ||
|  |       ZD=RBD*CB+SB*DR
 | ||
|  | 
 | ||
|  | *  Julian centuries since J2000
 | ||
|  |       T=(DATE-51544.5D0)/36525D0
 | ||
|  | 
 | ||
|  | *  Fricke equinox correction
 | ||
|  |       EPJ=2000D0+T*100D0
 | ||
|  |       EQCOR=DS2R*(0.035D0+0.00085D0*(EPJ-B1950))
 | ||
|  | 
 | ||
|  | *  Mean obliquity (IAU 1976)
 | ||
|  |       EPS=DAS2R*(84381.448D0+(-46.8150D0+(-0.00059D0+0.001813D0*T)*T)*T)
 | ||
|  | 
 | ||
|  | *  To the equatorial system, mean of date, FK5 system
 | ||
|  |       SINEPS=SIN(EPS)
 | ||
|  |       COSEPS=COS(EPS)
 | ||
|  |       ES=EQCOR*SINEPS
 | ||
|  |       EC=EQCOR*COSEPS
 | ||
|  |       PV(1)=X-EC*Y+ES*Z
 | ||
|  |       PV(2)=EQCOR*X+Y*COSEPS-Z*SINEPS
 | ||
|  |       PV(3)=Y*SINEPS+Z*COSEPS
 | ||
|  |       PV(4)=XD-EC*YD+ES*ZD
 | ||
|  |       PV(5)=EQCOR*XD+YD*COSEPS-ZD*SINEPS
 | ||
|  |       PV(6)=YD*SINEPS+ZD*COSEPS
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_DMXV (DM, VA, VB)
 | ||
|  | *+
 | ||
|  | *     - - - - -
 | ||
|  | *      D M X V
 | ||
|  | *     - - - - -
 | ||
|  | *
 | ||
|  | *  Performs the 3-D forward unitary transformation:
 | ||
|  | *
 | ||
|  | *     vector VB = matrix DM * vector VA
 | ||
|  | *
 | ||
|  | *  (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     DM       dp(3,3)    matrix
 | ||
|  | *     VA       dp(3)      vector
 | ||
|  | *
 | ||
|  | *  Returned:
 | ||
|  | *     VB       dp(3)      result vector
 | ||
|  | *
 | ||
|  | *  To comply with the ANSI Fortran 77 standard, VA and VB must be
 | ||
|  | *  different arrays.  However, the routine is coded so as to work
 | ||
|  | *  properly on many platforms even if this rule is violated.
 | ||
|  | *
 | ||
|  | *  Last revision:   26 December 2004
 | ||
|  | *
 | ||
|  | *  Copyright P.T.Wallace.  All rights reserved.
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION DM(3,3),VA(3),VB(3)
 | ||
|  | 
 | ||
|  |       INTEGER I,J
 | ||
|  |       DOUBLE PRECISION W,VW(3)
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Matrix DM * vector VA -> vector VW
 | ||
|  |       DO J=1,3
 | ||
|  |          W=0D0
 | ||
|  |          DO I=1,3
 | ||
|  |             W=W+DM(J,I)*VA(I)
 | ||
|  |          END DO
 | ||
|  |          VW(J)=W
 | ||
|  |       END DO
 | ||
|  | 
 | ||
|  | *  Vector VW -> vector VB
 | ||
|  |       DO J=1,3
 | ||
|  |          VB(J)=VW(J)
 | ||
|  |       END DO
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       DOUBLE PRECISION FUNCTION sla_DRANGE (ANGLE)
 | ||
|  | *+
 | ||
|  | *     - - - - - - -
 | ||
|  | *      D R A N G E
 | ||
|  | *     - - - - - - -
 | ||
|  | *
 | ||
|  | *  Normalize angle into range +/- pi  (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     ANGLE     dp      the angle in radians
 | ||
|  | *
 | ||
|  | *  The result (double precision) is ANGLE expressed in the range +/- pi.
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   23 November 1995
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1995 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION ANGLE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION DPI,D2PI
 | ||
|  |       PARAMETER (DPI=3.141592653589793238462643D0)
 | ||
|  |       PARAMETER (D2PI=6.283185307179586476925287D0)
 | ||
|  | 
 | ||
|  | 
 | ||
|  |       sla_DRANGE=MOD(ANGLE,D2PI)
 | ||
|  |       IF (ABS(sla_DRANGE).GE.DPI)
 | ||
|  |      :          sla_DRANGE=sla_DRANGE-SIGN(D2PI,ANGLE)
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       DOUBLE PRECISION FUNCTION sla_DRANRM (ANGLE)
 | ||
|  | *+
 | ||
|  | *     - - - - - - -
 | ||
|  | *      D R A N R M
 | ||
|  | *     - - - - - - -
 | ||
|  | *
 | ||
|  | *  Normalize angle into range 0-2 pi  (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     ANGLE     dp      the angle in radians
 | ||
|  | *
 | ||
|  | *  The result is ANGLE expressed in the range 0-2 pi.
 | ||
|  | *
 | ||
|  | *  Last revision:   22 July 2004
 | ||
|  | *
 | ||
|  | *  Copyright P.T.Wallace.  All rights reserved.
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION ANGLE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION D2PI
 | ||
|  |       PARAMETER (D2PI=6.283185307179586476925286766559D0)
 | ||
|  | 
 | ||
|  | 
 | ||
|  |       sla_DRANRM = MOD(ANGLE,D2PI)
 | ||
|  |       IF (sla_DRANRM.LT.0D0) sla_DRANRM = sla_DRANRM+D2PI
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       DOUBLE PRECISION FUNCTION sla_DTT (UTC)
 | ||
|  | *+
 | ||
|  | *     - - - -
 | ||
|  | *      D T T
 | ||
|  | *     - - - -
 | ||
|  | *
 | ||
|  | *  Increment to be applied to Coordinated Universal Time UTC to give
 | ||
|  | *  Terrestrial Time TT (formerly Ephemeris Time ET)
 | ||
|  | *
 | ||
|  | *  (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     UTC      d      UTC date as a modified JD (JD-2400000.5)
 | ||
|  | *
 | ||
|  | *  Result:  TT-UTC in seconds
 | ||
|  | *
 | ||
|  | *  Notes:
 | ||
|  | *
 | ||
|  | *  1  The UTC is specified to be a date rather than a time to indicate
 | ||
|  | *     that care needs to be taken not to specify an instant which lies
 | ||
|  | *     within a leap second.  Though in most cases UTC can include the
 | ||
|  | *     fractional part, correct behaviour on the day of a leap second
 | ||
|  | *     can only be guaranteed up to the end of the second 23:59:59.
 | ||
|  | *
 | ||
|  | *  2  Pre 1972 January 1 a fixed value of 10 + ET-TAI is returned.
 | ||
|  | *
 | ||
|  | *  3  See also the routine sla_DT, which roughly estimates ET-UT for
 | ||
|  | *     historical epochs.
 | ||
|  | *
 | ||
|  | *  Called:  sla_DAT
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   6 December 1994
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1995 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION UTC
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION sla_DAT
 | ||
|  | 
 | ||
|  | 
 | ||
|  |       sla_DTT=32.184D0+sla_DAT(UTC)
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_ECMAT (DATE, RMAT)
 | ||
|  | *+
 | ||
|  | *     - - - - - -
 | ||
|  | *      E C M A T
 | ||
|  | *     - - - - - -
 | ||
|  | *
 | ||
|  | *  Form the equatorial to ecliptic rotation matrix - IAU 1980 theory
 | ||
|  | *  (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     DATE     dp         TDB (loosely ET) as Modified Julian Date
 | ||
|  | *                                            (JD-2400000.5)
 | ||
|  | *  Returned:
 | ||
|  | *     RMAT     dp(3,3)    matrix
 | ||
|  | *
 | ||
|  | *  Reference:
 | ||
|  | *     Murray,C.A., Vectorial Astrometry, section 4.3.
 | ||
|  | *
 | ||
|  | *  Note:
 | ||
|  | *    The matrix is in the sense   V(ecl)  =  RMAT * V(equ);  the
 | ||
|  | *    equator, equinox and ecliptic are mean of date.
 | ||
|  | *
 | ||
|  | *  Called:  sla_DEULER
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   23 August 1996
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1996 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION DATE,RMAT(3,3)
 | ||
|  | 
 | ||
|  | *  Arc seconds to radians
 | ||
|  |       DOUBLE PRECISION AS2R
 | ||
|  |       PARAMETER (AS2R=0.484813681109535994D-5)
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION T,EPS0
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Interval between basic epoch J2000.0 and current epoch (JC)
 | ||
|  |       T = (DATE-51544.5D0)/36525D0
 | ||
|  | 
 | ||
|  | *  Mean obliquity
 | ||
|  |       EPS0 = AS2R*
 | ||
|  |      :   (84381.448D0+(-46.8150D0+(-0.00059D0+0.001813D0*T)*T)*T)
 | ||
|  | 
 | ||
|  | *  Matrix
 | ||
|  |       CALL sla_DEULER('X',EPS0,0D0,0D0,RMAT)
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       DOUBLE PRECISION FUNCTION sla_EPJ (DATE)
 | ||
|  | *+
 | ||
|  | *     - - - -
 | ||
|  | *      E P J
 | ||
|  | *     - - - -
 | ||
|  | *
 | ||
|  | *  Conversion of Modified Julian Date to Julian Epoch (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     DATE     dp       Modified Julian Date (JD - 2400000.5)
 | ||
|  | *
 | ||
|  | *  The result is the Julian Epoch.
 | ||
|  | *
 | ||
|  | *  Reference:
 | ||
|  | *     Lieske,J.H., 1979. Astron.Astrophys.,73,282.
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   February 1984
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1995 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION DATE
 | ||
|  | 
 | ||
|  | 
 | ||
|  |       sla_EPJ = 2000D0 + (DATE-51544.5D0)/365.25D0
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_EQECL (DR, DD, DATE, DL, DB)
 | ||
|  | *+
 | ||
|  | *     - - - - - -
 | ||
|  | *      E Q E C L
 | ||
|  | *     - - - - - -
 | ||
|  | *
 | ||
|  | *  Transformation from J2000.0 equatorial coordinates to
 | ||
|  | *  ecliptic coordinates (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     DR,DD       dp      J2000.0 mean RA,Dec (radians)
 | ||
|  | *     DATE        dp      TDB (loosely ET) as Modified Julian Date
 | ||
|  | *                                              (JD-2400000.5)
 | ||
|  | *  Returned:
 | ||
|  | *     DL,DB       dp      ecliptic longitude and latitude
 | ||
|  | *                         (mean of date, IAU 1980 theory, radians)
 | ||
|  | *
 | ||
|  | *  Called:
 | ||
|  | *     sla_DCS2C, sla_PREC, sla_EPJ, sla_DMXV, sla_ECMAT, sla_DCC2S,
 | ||
|  | *     sla_DRANRM, sla_DRANGE
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   March 1986
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1995 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION DR,DD,DATE,DL,DB
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION sla_EPJ,sla_DRANRM,sla_DRANGE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION RMAT(3,3),V1(3),V2(3)
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Spherical to Cartesian
 | ||
|  |       CALL sla_DCS2C(DR,DD,V1)
 | ||
|  | 
 | ||
|  | *  Mean J2000 to mean of date
 | ||
|  |       CALL sla_PREC(2000D0,sla_EPJ(DATE),RMAT)
 | ||
|  |       CALL sla_DMXV(RMAT,V1,V2)
 | ||
|  | 
 | ||
|  | *  Equatorial to ecliptic
 | ||
|  |       CALL sla_ECMAT(DATE,RMAT)
 | ||
|  |       CALL sla_DMXV(RMAT,V2,V1)
 | ||
|  | 
 | ||
|  | *  Cartesian to spherical
 | ||
|  |       CALL sla_DCC2S(V1,DL,DB)
 | ||
|  | 
 | ||
|  | *  Express in conventional ranges
 | ||
|  |       DL=sla_DRANRM(DL)
 | ||
|  |       DB=sla_DRANGE(DB)
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       DOUBLE PRECISION FUNCTION sla_EQEQX (DATE)
 | ||
|  | *+
 | ||
|  | *     - - - - - -
 | ||
|  | *      E Q E Q X
 | ||
|  | *     - - - - - -
 | ||
|  | *
 | ||
|  | *  Equation of the equinoxes  (IAU 1994, double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     DATE    dp      TDB (loosely ET) as Modified Julian Date
 | ||
|  | *                                          (JD-2400000.5)
 | ||
|  | *
 | ||
|  | *  The result is the equation of the equinoxes (double precision)
 | ||
|  | *  in radians:
 | ||
|  | *
 | ||
|  | *     Greenwich apparent ST = GMST + sla_EQEQX
 | ||
|  | *
 | ||
|  | *  References:  IAU Resolution C7, Recommendation 3 (1994)
 | ||
|  | *               Capitaine, N. & Gontier, A.-M., Astron. Astrophys.,
 | ||
|  | *               275, 645-650 (1993)
 | ||
|  | *
 | ||
|  | *  Called:  sla_NUTC
 | ||
|  | *
 | ||
|  | *  Patrick Wallace   Starlink   23 August 1996
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1996 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION DATE
 | ||
|  | 
 | ||
|  | *  Turns to arc seconds and arc seconds to radians
 | ||
|  |       DOUBLE PRECISION T2AS,AS2R
 | ||
|  |       PARAMETER (T2AS=1296000D0,
 | ||
|  |      :           AS2R=0.484813681109535994D-5)
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION T,OM,DPSI,DEPS,EPS0
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Interval between basic epoch J2000.0 and current epoch (JC)
 | ||
|  |       T=(DATE-51544.5D0)/36525D0
 | ||
|  | 
 | ||
|  | *  Longitude of the mean ascending node of the lunar orbit on the
 | ||
|  | *   ecliptic, measured from the mean equinox of date
 | ||
|  |       OM=AS2R*(450160.280D0+(-5D0*T2AS-482890.539D0
 | ||
|  |      :         +(7.455D0+0.008D0*T)*T)*T)
 | ||
|  | 
 | ||
|  | *  Nutation
 | ||
|  |       CALL sla_NUTC(DATE,DPSI,DEPS,EPS0)
 | ||
|  | 
 | ||
|  | *  Equation of the equinoxes
 | ||
|  |       sla_EQEQX=DPSI*COS(EPS0)+AS2R*(0.00264D0*SIN(OM)+
 | ||
|  |      :                               0.000063D0*SIN(OM+OM))
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_GEOC (P, H, R, Z)
 | ||
|  | *+
 | ||
|  | *     - - - - -
 | ||
|  | *      G E O C
 | ||
|  | *     - - - - -
 | ||
|  | *
 | ||
|  | *  Convert geodetic position to geocentric (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     P     dp     latitude (geodetic, radians)
 | ||
|  | *     H     dp     height above reference spheroid (geodetic, metres)
 | ||
|  | *
 | ||
|  | *  Returned:
 | ||
|  | *     R     dp     distance from Earth axis (AU)
 | ||
|  | *     Z     dp     distance from plane of Earth equator (AU)
 | ||
|  | *
 | ||
|  | *  Notes:
 | ||
|  | *
 | ||
|  | *  1  Geocentric latitude can be obtained by evaluating ATAN2(Z,R).
 | ||
|  | *
 | ||
|  | *  2  IAU 1976 constants are used.
 | ||
|  | *
 | ||
|  | *  Reference:
 | ||
|  | *
 | ||
|  | *     Green,R.M., Spherical Astronomy, CUP 1985, p98.
 | ||
|  | *
 | ||
|  | *  Last revision:   22 July 2004
 | ||
|  | *
 | ||
|  | *  Copyright P.T.Wallace.  All rights reserved.
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION P,H,R,Z
 | ||
|  | 
 | ||
|  | *  Earth equatorial radius (metres)
 | ||
|  |       DOUBLE PRECISION A0
 | ||
|  |       PARAMETER (A0=6378140D0)
 | ||
|  | 
 | ||
|  | *  Reference spheroid flattening factor and useful function
 | ||
|  |       DOUBLE PRECISION F,B
 | ||
|  |       PARAMETER (F=1D0/298.257D0,B=(1D0-F)**2)
 | ||
|  | 
 | ||
|  | *  Astronomical unit in metres
 | ||
|  |       DOUBLE PRECISION AU
 | ||
|  |       PARAMETER (AU=1.49597870D11)
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION SP,CP,C,S
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Geodetic to geocentric conversion
 | ||
|  |       SP = SIN(P)
 | ||
|  |       CP = COS(P)
 | ||
|  |       C = 1D0/SQRT(CP*CP+B*SP*SP)
 | ||
|  |       S = B*C
 | ||
|  |       R = (A0*C+H)*CP/AU
 | ||
|  |       Z = (A0*S+H)*SP/AU
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       DOUBLE PRECISION FUNCTION sla_GMST (UT1)
 | ||
|  | *+
 | ||
|  | *     - - - - -
 | ||
|  | *      G M S T
 | ||
|  | *     - - - - -
 | ||
|  | *
 | ||
|  | *  Conversion from universal time to sidereal time (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *    UT1    dp     universal time (strictly UT1) expressed as
 | ||
|  | *                  modified Julian Date (JD-2400000.5)
 | ||
|  | *
 | ||
|  | *  The result is the Greenwich mean sidereal time (double
 | ||
|  | *  precision, radians).
 | ||
|  | *
 | ||
|  | *  The IAU 1982 expression (see page S15 of 1984 Astronomical Almanac)
 | ||
|  | *  is used, but rearranged to reduce rounding errors.  This expression
 | ||
|  | *  is always described as giving the GMST at 0 hours UT.  In fact, it
 | ||
|  | *  gives the difference between the GMST and the UT, which happens to
 | ||
|  | *  equal the GMST (modulo 24 hours) at 0 hours UT each day.  In this
 | ||
|  | *  routine, the entire UT is used directly as the argument for the
 | ||
|  | *  standard formula, and the fractional part of the UT is added
 | ||
|  | *  separately.  Note that the factor 1.0027379... does not appear in the
 | ||
|  | *  IAU 1982 expression explicitly but in the form of the coefficient
 | ||
|  | *  8640184.812866, which is 86400x36525x0.0027379...
 | ||
|  | *
 | ||
|  | *  See also the routine sla_GMSTA, which delivers better numerical
 | ||
|  | *  precision by accepting the UT date and time as separate arguments.
 | ||
|  | *
 | ||
|  | *  Called:  sla_DRANRM
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   14 October 2001
 | ||
|  | *
 | ||
|  | *  Copyright (C) 2001 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION UT1
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION sla_DRANRM
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION D2PI,S2R
 | ||
|  |       PARAMETER (D2PI=6.283185307179586476925286766559D0,
 | ||
|  |      :           S2R=7.272205216643039903848711535369D-5)
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION TU
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Julian centuries from fundamental epoch J2000 to this UT
 | ||
|  |       TU=(UT1-51544.5D0)/36525D0
 | ||
|  | 
 | ||
|  | *  GMST at this UT
 | ||
|  |       sla_GMST=sla_DRANRM(MOD(UT1,1D0)*D2PI+
 | ||
|  |      :                    (24110.54841D0+
 | ||
|  |      :                    (8640184.812866D0+
 | ||
|  |      :                    (0.093104D0-6.2D-6*TU)*TU)*TU)*S2R)
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_NUTC (DATE, DPSI, DEPS, EPS0)
 | ||
|  | *+
 | ||
|  | *     - - - - -
 | ||
|  | *      N U T C
 | ||
|  | *     - - - - -
 | ||
|  | *
 | ||
|  | *  Nutation:  longitude & obliquity components and mean obliquity,
 | ||
|  | *  using the Shirai & Fukushima (2001) theory.
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     DATE        d    TDB (loosely ET) as Modified Julian Date
 | ||
|  | *                                            (JD-2400000.5)
 | ||
|  | *  Returned:
 | ||
|  | *     DPSI,DEPS   d    nutation in longitude,obliquity
 | ||
|  | *     EPS0        d    mean obliquity
 | ||
|  | *
 | ||
|  | *  Notes:
 | ||
|  | *
 | ||
|  | *  1  The routine predicts forced nutation (but not free core nutation)
 | ||
|  | *     plus corrections to the IAU 1976 precession model.
 | ||
|  | *
 | ||
|  | *  2  Earth attitude predictions made by combining the present nutation
 | ||
|  | *     model with IAU 1976 precession are accurate to 1 mas (with respect
 | ||
|  | *     to the ICRF) for a few decades around 2000.
 | ||
|  | *
 | ||
|  | *  3  The sla_NUTC80 routine is the equivalent of the present routine
 | ||
|  | *     but using the IAU 1980 nutation theory.  The older theory is less
 | ||
|  | *     accurate, leading to errors as large as 350 mas over the interval
 | ||
|  | *     1900-2100, mainly because of the error in the IAU 1976 precession.
 | ||
|  | *
 | ||
|  | *  References:
 | ||
|  | *
 | ||
|  | *     Shirai, T. & Fukushima, T., Astron.J. 121, 3270-3283 (2001).
 | ||
|  | *
 | ||
|  | *     Fukushima, T., Astron.Astrophys. 244, L11 (1991).
 | ||
|  | *
 | ||
|  | *     Simon, J. L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
 | ||
|  | *     Francou, G. & Laskar, J., Astron.Astrophys. 282, 663 (1994).
 | ||
|  | *
 | ||
|  | *  This revision:   24 November 2005
 | ||
|  | *
 | ||
|  | *  Copyright P.T.Wallace.  All rights reserved.
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION DATE,DPSI,DEPS,EPS0
 | ||
|  | 
 | ||
|  | *  Degrees to radians
 | ||
|  |       DOUBLE PRECISION DD2R
 | ||
|  |       PARAMETER (DD2R=1.745329251994329576923691D-2)
 | ||
|  | 
 | ||
|  | *  Arc seconds to radians
 | ||
|  |       DOUBLE PRECISION DAS2R
 | ||
|  |       PARAMETER (DAS2R=4.848136811095359935899141D-6)
 | ||
|  | 
 | ||
|  | *  Arc seconds in a full circle
 | ||
|  |       DOUBLE PRECISION TURNAS
 | ||
|  |       PARAMETER (TURNAS=1296000D0)
 | ||
|  | 
 | ||
|  | *  Reference epoch (J2000), MJD
 | ||
|  |       DOUBLE PRECISION DJM0
 | ||
|  |       PARAMETER (DJM0=51544.5D0 )
 | ||
|  | 
 | ||
|  | *  Days per Julian century
 | ||
|  |       DOUBLE PRECISION DJC
 | ||
|  |       PARAMETER (DJC=36525D0)
 | ||
|  | 
 | ||
|  |       INTEGER I,J
 | ||
|  |       DOUBLE PRECISION T,EL,ELP,F,D,OM,VE,MA,JU,SA,THETA,C,S,DP,DE
 | ||
|  | 
 | ||
|  | *  Number of terms in the nutation model
 | ||
|  |       INTEGER NTERMS
 | ||
|  |       PARAMETER (NTERMS=194)
 | ||
|  | 
 | ||
|  | *  The SF2001 forced nutation model
 | ||
|  |       INTEGER NA(9,NTERMS)
 | ||
|  |       DOUBLE PRECISION PSI(4,NTERMS), EPS(4,NTERMS)
 | ||
|  | 
 | ||
|  | *  Coefficients of fundamental angles
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=1,10 ) /
 | ||
|  |      :    0,   0,   0,   0,  -1,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,  -2,   2,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   0,   0,  -2,   0,   0,   0,   0,
 | ||
|  |      :    0,   1,   0,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   1,   2,  -2,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   0,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    0,  -1,   2,  -2,   2,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=11,20 ) /
 | ||
|  |      :    0,   0,   2,  -2,   1,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   0,   2,   0,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   0,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   0,   0,  -1,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   2,   2,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   2,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :   -2,   0,   2,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   0,   2,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,   2,   2,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=21,30 ) /
 | ||
|  |      :    2,   0,   0,  -2,   0,   0,   0,   0,   0,
 | ||
|  |      :    2,   0,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   2,  -2,   2,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   2,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :    2,   0,   0,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   1,   0,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   0,   2,   1,   0,   0,   0,   0,
 | ||
|  |      :    0,   2,   2,  -2,   2,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,  -2,   0,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=31,40 ) /
 | ||
|  |      :   -1,   0,   0,   2,  -1,   0,   0,   0,   0,
 | ||
|  |      :    0,   1,   0,   0,  -1,   0,   0,   0,   0,
 | ||
|  |      :    0,   2,   0,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   2,   2,   1,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   2,   2,   2,   0,   0,   0,   0,
 | ||
|  |      :    0,   1,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :   -2,   0,   2,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,   2,   1,   0,   0,   0,   0,
 | ||
|  |      :    0,  -1,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   0,   2,   1,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=41,50 ) /
 | ||
|  |      :    1,   0,   2,  -2,   1,   0,   0,   0,   0,
 | ||
|  |      :    2,   0,   0,  -2,  -1,   0,   0,   0,   0,
 | ||
|  |      :    2,   0,   2,  -2,   2,   0,   0,   0,   0,
 | ||
|  |      :    2,   0,   2,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   0,   2,  -1,   0,   0,   0,   0,
 | ||
|  |      :    0,  -1,   2,  -2,   1,   0,   0,   0,   0,
 | ||
|  |      :   -1,  -1,   0,   2,   0,   0,   0,   0,   0,
 | ||
|  |      :    2,   0,   0,  -2,   1,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   0,   2,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   1,   2,  -2,   1,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=51,60 ) /
 | ||
|  |      :    1,  -1,   0,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :   -2,   0,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    0,  -1,   0,   2,   0,   0,   0,   0,   0,
 | ||
|  |      :    3,   0,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   0,   1,   0,   0,   0,   0,   0,
 | ||
|  |      :    1,  -1,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   0,  -1,   0,   0,   0,   0,   0,
 | ||
|  |      :   -1,  -1,   2,   2,   2,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   2,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :    2,   0,   0,   0,  -1,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=61,70 ) /
 | ||
|  |      :    0,  -1,   2,   2,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   1,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    2,   0,   0,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :    1,   1,   0,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,  -2,   2,  -1,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   2,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :   -1,   1,   0,   1,   0,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   0,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   1,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,   1,   2,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=71,80 ) /
 | ||
|  |      :   -1,   1,   0,   1,   1,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   2,   4,   2,   0,   0,   0,   0,
 | ||
|  |      :    0,  -2,   2,  -2,   1,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   2,   2,   1,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   0,   0,  -2,   0,   0,   0,   0,
 | ||
|  |      :   -2,   0,   2,   2,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   1,   2,  -2,   2,   0,   0,   0,   0,
 | ||
|  |      :   -2,   0,   2,   4,   2,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   4,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    2,   0,   2,  -2,   1,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=81,90 ) /
 | ||
|  |      :    1,   0,   0,  -1,  -1,   0,   0,   0,   0,
 | ||
|  |      :    2,   0,   2,   2,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   0,   2,   1,   0,   0,   0,   0,
 | ||
|  |      :    3,   0,   0,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,  -2,  -1,   0,   0,   0,   0,
 | ||
|  |      :    3,   0,   2,  -2,   2,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   4,  -2,   2,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   0,   4,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   1,   2,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,  -2,   3,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=91,100 ) /
 | ||
|  |      :   -2,   0,   0,   4,   0,   0,   0,   0,   0,
 | ||
|  |      :   -1,  -1,   0,   2,   1,   0,   0,   0,   0,
 | ||
|  |      :   -2,   0,   2,   0,  -1,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,   0,  -1,   0,   0,   0,   0,
 | ||
|  |      :    0,  -1,   2,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :    0,   1,   0,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,  -1,   2,   0,   0,   0,   0,
 | ||
|  |      :    2,   1,   0,  -2,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,   4,   2,   0,   0,   0,   0,
 | ||
|  |      :   -1,  -1,   0,   2,  -1,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=101,110 ) /
 | ||
|  |      :   -1,   1,   0,   2,   0,   0,   0,   0,   0,
 | ||
|  |      :    1,  -1,   0,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :    0,  -1,   2,  -2,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   1,   0,   0,  -2,   0,   0,   0,   0,
 | ||
|  |      :    1,  -1,   2,   2,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   0,   2,  -1,   0,   0,   0,   0,
 | ||
|  |      :   -1,   1,   2,   2,   2,   0,   0,   0,   0,
 | ||
|  |      :    3,   0,   2,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :    0,   1,   2,   2,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   2,  -2,   0,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=111,120 ) /
 | ||
|  |      :   -1,   0,  -2,   4,  -1,   0,   0,   0,   0,
 | ||
|  |      :   -1,  -1,   2,   2,   1,   0,   0,   0,   0,
 | ||
|  |      :    0,  -1,   2,   2,   1,   0,   0,   0,   0,
 | ||
|  |      :    2,  -1,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   0,   2,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,  -1,   2,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :   -1,   1,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    0,   1,   0,   2,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   1,   2,  -2,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   3,   2,  -2,   2,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=121,130 ) /
 | ||
|  |      :    0,   0,   0,   1,   1,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   2,   2,   0,   0,   0,   0,   0,
 | ||
|  |      :    2,   1,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   1,   0,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :    2,   0,   0,   2,   0,   0,   0,   0,   0,
 | ||
|  |      :    1,   1,   2,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   0,   2,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,  -2,   2,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,  -1,   0,   2,  -1,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   1,   0,   2,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=131,140 ) /
 | ||
|  |      :    0,   1,   0,   1,   0,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,  -2,   2,  -2,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   0,   1,  -1,   0,   0,   0,   0,
 | ||
|  |      :    1,  -1,   0,   0,  -1,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   0,   4,   0,   0,   0,   0,   0,
 | ||
|  |      :    1,  -1,   0,   2,   0,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   2,   1,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   2,  -1,   2,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   0,   2,  -2,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,   1,   1,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=141,150 ) /
 | ||
|  |      :   -1,   0,   2,   0,  -1,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   2,   4,   1,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,   2,   0,   0,   0,   0,   0,
 | ||
|  |      :    1,   1,   2,  -2,   1,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   1,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   2,  -1,   1,   0,   0,   0,   0,
 | ||
|  |      :   -2,   0,   2,   2,   1,   0,   0,   0,   0,
 | ||
|  |      :    2,  -1,   0,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :    4,   0,   2,   0,   2,   0,   0,   0,   0,
 | ||
|  |      :    2,   1,   2,  -2,   2,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=151,160 ) /
 | ||
|  |      :    0,   1,   2,   1,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   4,  -2,   2,   0,   0,   0,   0,
 | ||
|  |      :    1,   1,   0,   0,  -1,   0,   0,   0,   0,
 | ||
|  |      :   -2,   0,   2,   4,   1,   0,   0,   0,   0,
 | ||
|  |      :    2,   0,   2,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   1,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :    1,   0,   0,   1,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   1,   0,   2,   1,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   4,   0,   1,   0,   0,   0,   0,
 | ||
|  |      :   -1,   0,   0,   4,   1,   0,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=161,170 ) /
 | ||
|  |      :    2,   0,   2,   2,   1,   0,   0,   0,   0,
 | ||
|  |      :    2,   1,   0,   0,   0,   0,   0,   0,   0,
 | ||
|  |      :    0,   0,   5,  -5,   5,  -3,   0,   0,   0,
 | ||
|  |      :    0,   0,   0,   0,   0,   0,   0,   2,   0,
 | ||
|  |      :    0,   0,   1,  -1,   1,   0,   0,  -1,   0,
 | ||
|  |      :    0,   0,  -1,   1,  -1,   1,   0,   0,   0,
 | ||
|  |      :    0,   0,  -1,   1,   0,   0,   2,   0,   0,
 | ||
|  |      :    0,   0,   3,  -3,   3,   0,   0,  -1,   0,
 | ||
|  |      :    0,   0,  -8,   8,  -7,   5,   0,   0,   0,
 | ||
|  |      :    0,   0,  -1,   1,  -1,   0,   2,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=171,180 ) /
 | ||
|  |      :    0,   0,  -2,   2,  -2,   2,   0,   0,   0,
 | ||
|  |      :    0,   0,  -6,   6,  -6,   4,   0,   0,   0,
 | ||
|  |      :    0,   0,  -2,   2,  -2,   0,   8,  -3,   0,
 | ||
|  |      :    0,   0,   6,  -6,   6,   0,  -8,   3,   0,
 | ||
|  |      :    0,   0,   4,  -4,   4,  -2,   0,   0,   0,
 | ||
|  |      :    0,   0,  -3,   3,  -3,   2,   0,   0,   0,
 | ||
|  |      :    0,   0,   4,  -4,   3,   0,  -8,   3,   0,
 | ||
|  |      :    0,   0,  -4,   4,  -5,   0,   8,  -3,   0,
 | ||
|  |      :    0,   0,   0,   0,   0,   2,   0,   0,   0,
 | ||
|  |      :    0,   0,  -4,   4,  -4,   3,   0,   0,   0 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=181,190 ) /
 | ||
|  |      :    0,   1,  -1,   1,  -1,   0,   0,   1,   0,
 | ||
|  |      :    0,   0,   0,   0,   0,   0,   0,   1,   0,
 | ||
|  |      :    0,   0,   1,  -1,   1,   1,   0,   0,   0,
 | ||
|  |      :    0,   0,   2,  -2,   2,   0,  -2,   0,   0,
 | ||
|  |      :    0,  -1,  -7,   7,  -7,   5,   0,   0,   0,
 | ||
|  |      :   -2,   0,   2,   0,   2,   0,   0,  -2,   0,
 | ||
|  |      :   -2,   0,   2,   0,   1,   0,   0,  -3,   0,
 | ||
|  |      :    0,   0,   2,  -2,   2,   0,   0,  -2,   0,
 | ||
|  |      :    0,   0,   1,  -1,   1,   0,   0,   1,   0,
 | ||
|  |      :    0,   0,   0,   0,   0,   0,   0,   0,   2 /
 | ||
|  |       DATA ( ( NA(I,J), I=1,9 ), J=191,NTERMS ) /
 | ||
|  |      :    0,   0,   0,   0,   0,   0,   0,   0,   1,
 | ||
|  |      :    2,   0,  -2,   0,  -2,   0,   0,   3,   0,
 | ||
|  |      :    0,   0,   1,  -1,   1,   0,   0,  -2,   0,
 | ||
|  |      :    0,   0,  -7,   7,  -7,   5,   0,   0,   0 /
 | ||
|  | 
 | ||
|  | *  Nutation series: longitude
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=1,10 ) /
 | ||
|  |      :  3341.5D0, 17206241.8D0,  3.1D0, 17409.5D0,
 | ||
|  |      : -1716.8D0, -1317185.3D0,  1.4D0,  -156.8D0,
 | ||
|  |      :   285.7D0,  -227667.0D0,  0.3D0,   -23.5D0,
 | ||
|  |      :   -68.6D0,  -207448.0D0,  0.0D0,   -21.4D0,
 | ||
|  |      :   950.3D0,   147607.9D0, -2.3D0,  -355.0D0,
 | ||
|  |      :   -66.7D0,   -51689.1D0,  0.2D0,   122.6D0,
 | ||
|  |      :  -108.6D0,    71117.6D0,  0.0D0,     7.0D0,
 | ||
|  |      :    35.6D0,   -38740.2D0,  0.1D0,   -36.2D0,
 | ||
|  |      :    85.4D0,   -30127.6D0,  0.0D0,    -3.1D0,
 | ||
|  |      :     9.0D0,    21583.0D0,  0.1D0,   -50.3D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=11,20 ) /
 | ||
|  |      :    22.1D0,    12822.8D0,  0.0D0,    13.3D0,
 | ||
|  |      :     3.4D0,    12350.8D0,  0.0D0,     1.3D0,
 | ||
|  |      :   -21.1D0,    15699.4D0,  0.0D0,     1.6D0,
 | ||
|  |      :     4.2D0,     6313.8D0,  0.0D0,     6.2D0,
 | ||
|  |      :   -22.8D0,     5796.9D0,  0.0D0,     6.1D0,
 | ||
|  |      :    15.7D0,    -5961.1D0,  0.0D0,    -0.6D0,
 | ||
|  |      :    13.1D0,    -5159.1D0,  0.0D0,    -4.6D0,
 | ||
|  |      :     1.8D0,     4592.7D0,  0.0D0,     4.5D0,
 | ||
|  |      :   -17.5D0,     6336.0D0,  0.0D0,     0.7D0,
 | ||
|  |      :    16.3D0,    -3851.1D0,  0.0D0,    -0.4D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=21,30 ) /
 | ||
|  |      :    -2.8D0,     4771.7D0,  0.0D0,     0.5D0,
 | ||
|  |      :    13.8D0,    -3099.3D0,  0.0D0,    -0.3D0,
 | ||
|  |      :     0.2D0,     2860.3D0,  0.0D0,     0.3D0,
 | ||
|  |      :     1.4D0,     2045.3D0,  0.0D0,     2.0D0,
 | ||
|  |      :    -8.6D0,     2922.6D0,  0.0D0,     0.3D0,
 | ||
|  |      :    -7.7D0,     2587.9D0,  0.0D0,     0.2D0,
 | ||
|  |      :     8.8D0,    -1408.1D0,  0.0D0,     3.7D0,
 | ||
|  |      :     1.4D0,     1517.5D0,  0.0D0,     1.5D0,
 | ||
|  |      :    -1.9D0,    -1579.7D0,  0.0D0,     7.7D0,
 | ||
|  |      :     1.3D0,    -2178.6D0,  0.0D0,    -0.2D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=31,40 ) /
 | ||
|  |      :    -4.8D0,     1286.8D0,  0.0D0,     1.3D0,
 | ||
|  |      :     6.3D0,     1267.2D0,  0.0D0,    -4.0D0,
 | ||
|  |      :    -1.0D0,     1669.3D0,  0.0D0,    -8.3D0,
 | ||
|  |      :     2.4D0,    -1020.0D0,  0.0D0,    -0.9D0,
 | ||
|  |      :     4.5D0,     -766.9D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -1.1D0,      756.5D0,  0.0D0,    -1.7D0,
 | ||
|  |      :    -1.4D0,    -1097.3D0,  0.0D0,    -0.5D0,
 | ||
|  |      :     2.6D0,     -663.0D0,  0.0D0,    -0.6D0,
 | ||
|  |      :     0.8D0,     -714.1D0,  0.0D0,     1.6D0,
 | ||
|  |      :     0.4D0,     -629.9D0,  0.0D0,    -0.6D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=41,50 ) /
 | ||
|  |      :     0.3D0,      580.4D0,  0.0D0,     0.6D0,
 | ||
|  |      :    -1.6D0,      577.3D0,  0.0D0,     0.5D0,
 | ||
|  |      :    -0.9D0,      644.4D0,  0.0D0,     0.0D0,
 | ||
|  |      :     2.2D0,     -534.0D0,  0.0D0,    -0.5D0,
 | ||
|  |      :    -2.5D0,      493.3D0,  0.0D0,     0.5D0,
 | ||
|  |      :    -0.1D0,     -477.3D0,  0.0D0,    -2.4D0,
 | ||
|  |      :    -0.9D0,      735.0D0,  0.0D0,    -1.7D0,
 | ||
|  |      :     0.7D0,      406.2D0,  0.0D0,     0.4D0,
 | ||
|  |      :    -2.8D0,      656.9D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.6D0,      358.0D0,  0.0D0,     2.0D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=51,60 ) /
 | ||
|  |      :    -0.7D0,      472.5D0,  0.0D0,    -1.1D0,
 | ||
|  |      :    -0.1D0,     -300.5D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -1.2D0,      435.1D0,  0.0D0,    -1.0D0,
 | ||
|  |      :     1.8D0,     -289.4D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.6D0,     -422.6D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.8D0,     -287.6D0,  0.0D0,     0.6D0,
 | ||
|  |      :   -38.6D0,     -392.3D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.7D0,     -281.8D0,  0.0D0,     0.6D0,
 | ||
|  |      :     0.6D0,     -405.7D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -1.2D0,      229.0D0,  0.0D0,     0.2D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=61,70 ) /
 | ||
|  |      :     1.1D0,     -264.3D0,  0.0D0,     0.5D0,
 | ||
|  |      :    -0.7D0,      247.9D0,  0.0D0,    -0.5D0,
 | ||
|  |      :    -0.2D0,      218.0D0,  0.0D0,     0.2D0,
 | ||
|  |      :     0.6D0,     -339.0D0,  0.0D0,     0.8D0,
 | ||
|  |      :    -0.7D0,      198.7D0,  0.0D0,     0.2D0,
 | ||
|  |      :    -1.5D0,      334.0D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      334.0D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.1D0,     -198.1D0,  0.0D0,     0.0D0,
 | ||
|  |      :  -106.6D0,        0.0D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.5D0,      165.8D0,  0.0D0,     0.0D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=71,80 ) /
 | ||
|  |      :     0.0D0,      134.8D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.9D0,     -151.6D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.0D0,     -129.7D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.8D0,     -132.8D0,  0.0D0,    -0.1D0,
 | ||
|  |      :     0.5D0,     -140.7D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.1D0,      138.4D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.0D0,      129.0D0,  0.0D0,    -0.3D0,
 | ||
|  |      :     0.5D0,     -121.2D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.3D0,      114.5D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.1D0,      101.8D0,  0.0D0,     0.0D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=81,90 ) /
 | ||
|  |      :    -3.6D0,     -101.9D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.8D0,     -109.4D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.2D0,      -97.0D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.7D0,      157.3D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.2D0,      -83.3D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.3D0,       93.3D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.1D0,       92.1D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.5D0,      133.6D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.1D0,       81.5D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.0D0,      123.9D0,  0.0D0,     0.0D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=91,100 ) /
 | ||
|  |      :    -0.3D0,      128.1D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,       74.1D0,  0.0D0,    -0.3D0,
 | ||
|  |      :    -0.2D0,      -70.3D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.4D0,       66.6D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      -66.7D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.7D0,       69.3D0,  0.0D0,    -0.3D0,
 | ||
|  |      :     0.0D0,      -70.4D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.1D0,      101.5D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.5D0,      -69.1D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.2D0,       58.5D0,  0.0D0,     0.2D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=101,110 ) /
 | ||
|  |      :     0.1D0,      -94.9D0,  0.0D0,     0.2D0,
 | ||
|  |      :     0.0D0,       52.9D0,  0.0D0,    -0.2D0,
 | ||
|  |      :     0.1D0,       86.7D0,  0.0D0,    -0.2D0,
 | ||
|  |      :    -0.1D0,      -59.2D0,  0.0D0,     0.2D0,
 | ||
|  |      :     0.3D0,      -58.8D0,  0.0D0,     0.1D0,
 | ||
|  |      :    -0.3D0,       49.0D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.2D0,       56.9D0,  0.0D0,    -0.1D0,
 | ||
|  |      :     0.3D0,      -50.2D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.2D0,       53.4D0,  0.0D0,    -0.1D0,
 | ||
|  |      :     0.1D0,      -76.5D0,  0.0D0,     0.0D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=111,120 ) /
 | ||
|  |      :    -0.2D0,       45.3D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      -46.8D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.2D0,      -44.6D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.2D0,      -48.7D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      -46.8D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      -42.0D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.0D0,       46.4D0,  0.0D0,    -0.1D0,
 | ||
|  |      :     0.2D0,      -67.3D0,  0.0D0,     0.1D0,
 | ||
|  |      :     0.0D0,      -65.8D0,  0.0D0,     0.2D0,
 | ||
|  |      :    -0.1D0,      -43.9D0,  0.0D0,     0.3D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=121,130 ) /
 | ||
|  |      :     0.0D0,      -38.9D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.3D0,       63.9D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.2D0,       41.2D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.0D0,      -36.1D0,  0.0D0,     0.2D0,
 | ||
|  |      :    -0.3D0,       58.5D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.1D0,       36.1D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.0D0,      -39.7D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      -57.7D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.2D0,       33.4D0,  0.0D0,     0.0D0,
 | ||
|  |      :    36.4D0,        0.0D0,  0.0D0,     0.0D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=131,140 ) /
 | ||
|  |      :    -0.1D0,       55.7D0,  0.0D0,    -0.1D0,
 | ||
|  |      :     0.1D0,      -35.4D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      -31.0D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.1D0,       30.1D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.3D0,       49.2D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.2D0,       49.1D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.1D0,       33.6D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      -33.5D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      -31.0D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.1D0,       28.0D0,  0.0D0,     0.0D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=141,150 ) /
 | ||
|  |      :     0.1D0,      -25.2D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      -26.2D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.2D0,       41.5D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.0D0,       24.5D0,  0.0D0,     0.1D0,
 | ||
|  |      :   -16.2D0,        0.0D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.0D0,      -22.3D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.0D0,       23.1D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.1D0,       37.5D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.2D0,      -25.7D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.0D0,       25.2D0,  0.0D0,     0.0D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=151,160 ) /
 | ||
|  |      :     0.1D0,      -24.5D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.1D0,       24.3D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      -20.7D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      -20.8D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.2D0,       33.4D0,  0.0D0,     0.0D0,
 | ||
|  |      :    32.9D0,        0.0D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      -32.6D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.0D0,       19.9D0,  0.0D0,     0.0D0,
 | ||
|  |      :    -0.1D0,       19.6D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.0D0,      -18.7D0,  0.0D0,     0.0D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=161,170 ) /
 | ||
|  |      :     0.1D0,      -19.0D0,  0.0D0,     0.0D0,
 | ||
|  |      :     0.1D0,      -28.6D0,  0.0D0,     0.0D0,
 | ||
|  |      :     4.0D0,      178.8D0,-11.8D0,     0.3D0,
 | ||
|  |      :    39.8D0,     -107.3D0, -5.6D0,    -1.0D0,
 | ||
|  |      :     9.9D0,      164.0D0, -4.1D0,     0.1D0,
 | ||
|  |      :    -4.8D0,     -135.3D0, -3.4D0,    -0.1D0,
 | ||
|  |      :    50.5D0,       75.0D0,  1.4D0,    -1.2D0,
 | ||
|  |      :    -1.1D0,      -53.5D0,  1.3D0,     0.0D0,
 | ||
|  |      :   -45.0D0,       -2.4D0, -0.4D0,     6.6D0,
 | ||
|  |      :   -11.5D0,      -61.0D0, -0.9D0,     0.4D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=171,180 ) /
 | ||
|  |      :     4.4D0,      -68.4D0, -3.4D0,     0.0D0,
 | ||
|  |      :     7.7D0,      -47.1D0, -4.7D0,    -1.0D0,
 | ||
|  |      :   -42.9D0,      -12.6D0, -1.2D0,     4.2D0,
 | ||
|  |      :   -42.8D0,       12.7D0, -1.2D0,    -4.2D0,
 | ||
|  |      :    -7.6D0,      -44.1D0,  2.1D0,    -0.5D0,
 | ||
|  |      :   -64.1D0,        1.7D0,  0.2D0,     4.5D0,
 | ||
|  |      :    36.4D0,      -10.4D0,  1.0D0,     3.5D0,
 | ||
|  |      :    35.6D0,       10.2D0,  1.0D0,    -3.5D0,
 | ||
|  |      :    -1.7D0,       39.5D0,  2.0D0,     0.0D0,
 | ||
|  |      :    50.9D0,       -8.2D0, -0.8D0,    -5.0D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=181,190 ) /
 | ||
|  |      :     0.0D0,       52.3D0,  1.2D0,     0.0D0,
 | ||
|  |      :   -42.9D0,      -17.8D0,  0.4D0,     0.0D0,
 | ||
|  |      :     2.6D0,       34.3D0,  0.8D0,     0.0D0,
 | ||
|  |      :    -0.8D0,      -48.6D0,  2.4D0,    -0.1D0,
 | ||
|  |      :    -4.9D0,       30.5D0,  3.7D0,     0.7D0,
 | ||
|  |      :     0.0D0,      -43.6D0,  2.1D0,     0.0D0,
 | ||
|  |      :     0.0D0,      -25.4D0,  1.2D0,     0.0D0,
 | ||
|  |      :     2.0D0,       40.9D0, -2.0D0,     0.0D0,
 | ||
|  |      :    -2.1D0,       26.1D0,  0.6D0,     0.0D0,
 | ||
|  |      :    22.6D0,       -3.2D0, -0.5D0,    -0.5D0 /
 | ||
|  |       DATA ( ( PSI(I,J), I=1,4 ), J=191,NTERMS ) /
 | ||
|  |      :    -7.6D0,       24.9D0, -0.4D0,    -0.2D0,
 | ||
|  |      :    -6.2D0,       34.9D0,  1.7D0,     0.3D0,
 | ||
|  |      :     2.0D0,       17.4D0, -0.4D0,     0.1D0,
 | ||
|  |      :    -3.9D0,       20.5D0,  2.4D0,     0.6D0 /
 | ||
|  | 
 | ||
|  | *  Nutation series: obliquity
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=1,10 ) /
 | ||
|  |      : 9205365.8D0, -1506.2D0,  885.7D0, -0.2D0,
 | ||
|  |      :  573095.9D0,  -570.2D0, -305.0D0, -0.3D0,
 | ||
|  |      :   97845.5D0,   147.8D0,  -48.8D0, -0.2D0,
 | ||
|  |      :  -89753.6D0,    28.0D0,   46.9D0,  0.0D0,
 | ||
|  |      :    7406.7D0,  -327.1D0,  -18.2D0,  0.8D0,
 | ||
|  |      :   22442.3D0,   -22.3D0,  -67.6D0,  0.0D0,
 | ||
|  |      :    -683.6D0,    46.8D0,    0.0D0,  0.0D0,
 | ||
|  |      :   20070.7D0,    36.0D0,    1.6D0,  0.0D0,
 | ||
|  |      :   12893.8D0,    39.5D0,   -6.2D0,  0.0D0,
 | ||
|  |      :   -9593.2D0,    14.4D0,   30.2D0, -0.1D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=11,20 ) /
 | ||
|  |      :   -6899.5D0,     4.8D0,   -0.6D0,  0.0D0,
 | ||
|  |      :   -5332.5D0,    -0.1D0,    2.7D0,  0.0D0,
 | ||
|  |      :    -125.2D0,    10.5D0,    0.0D0,  0.0D0,
 | ||
|  |      :   -3323.4D0,    -0.9D0,   -0.3D0,  0.0D0,
 | ||
|  |      :    3142.3D0,     8.9D0,    0.3D0,  0.0D0,
 | ||
|  |      :    2552.5D0,     7.3D0,   -1.2D0,  0.0D0,
 | ||
|  |      :    2634.4D0,     8.8D0,    0.2D0,  0.0D0,
 | ||
|  |      :   -2424.4D0,     1.6D0,   -0.4D0,  0.0D0,
 | ||
|  |      :    -123.3D0,     3.9D0,    0.0D0,  0.0D0,
 | ||
|  |      :    1642.4D0,     7.3D0,   -0.8D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=21,30 ) /
 | ||
|  |      :      47.9D0,     3.2D0,    0.0D0,  0.0D0,
 | ||
|  |      :    1321.2D0,     6.2D0,   -0.6D0,  0.0D0,
 | ||
|  |      :   -1234.1D0,    -0.3D0,    0.6D0,  0.0D0,
 | ||
|  |      :   -1076.5D0,    -0.3D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -61.6D0,     1.8D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -55.4D0,     1.6D0,    0.0D0,  0.0D0,
 | ||
|  |      :     856.9D0,    -4.9D0,   -2.1D0,  0.0D0,
 | ||
|  |      :    -800.7D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     685.1D0,    -0.6D0,   -3.8D0,  0.0D0,
 | ||
|  |      :     -16.9D0,    -1.5D0,    0.0D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=31,40 ) /
 | ||
|  |      :     695.7D0,     1.8D0,    0.0D0,  0.0D0,
 | ||
|  |      :     642.2D0,    -2.6D0,   -1.6D0,  0.0D0,
 | ||
|  |      :      13.3D0,     1.1D0,   -0.1D0,  0.0D0,
 | ||
|  |      :     521.9D0,     1.6D0,    0.0D0,  0.0D0,
 | ||
|  |      :     325.8D0,     2.0D0,   -0.1D0,  0.0D0,
 | ||
|  |      :    -325.1D0,    -0.5D0,    0.9D0,  0.0D0,
 | ||
|  |      :      10.1D0,     0.3D0,    0.0D0,  0.0D0,
 | ||
|  |      :     334.5D0,     1.6D0,    0.0D0,  0.0D0,
 | ||
|  |      :     307.1D0,     0.4D0,   -0.9D0,  0.0D0,
 | ||
|  |      :     327.2D0,     0.5D0,    0.0D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=41,50 ) /
 | ||
|  |      :    -304.6D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     304.0D0,     0.6D0,    0.0D0,  0.0D0,
 | ||
|  |      :    -276.8D0,    -0.5D0,    0.1D0,  0.0D0,
 | ||
|  |      :     268.9D0,     1.3D0,    0.0D0,  0.0D0,
 | ||
|  |      :     271.8D0,     1.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     271.5D0,    -0.4D0,   -0.8D0,  0.0D0,
 | ||
|  |      :      -5.2D0,     0.5D0,    0.0D0,  0.0D0,
 | ||
|  |      :    -220.5D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -20.1D0,     0.3D0,    0.0D0,  0.0D0,
 | ||
|  |      :    -191.0D0,     0.1D0,    0.5D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=51,60 ) /
 | ||
|  |      :      -4.1D0,     0.3D0,    0.0D0,  0.0D0,
 | ||
|  |      :     130.6D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :       3.0D0,     0.3D0,    0.0D0,  0.0D0,
 | ||
|  |      :     122.9D0,     0.8D0,    0.0D0,  0.0D0,
 | ||
|  |      :       3.7D0,    -0.3D0,    0.0D0,  0.0D0,
 | ||
|  |      :     123.1D0,     0.4D0,   -0.3D0,  0.0D0,
 | ||
|  |      :     -52.7D0,    15.3D0,    0.0D0,  0.0D0,
 | ||
|  |      :     120.7D0,     0.3D0,   -0.3D0,  0.0D0,
 | ||
|  |      :       4.0D0,    -0.3D0,    0.0D0,  0.0D0,
 | ||
|  |      :     126.5D0,     0.5D0,    0.0D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=61,70 ) /
 | ||
|  |      :     112.7D0,     0.5D0,   -0.3D0,  0.0D0,
 | ||
|  |      :    -106.1D0,    -0.3D0,    0.3D0,  0.0D0,
 | ||
|  |      :    -112.9D0,    -0.2D0,    0.0D0,  0.0D0,
 | ||
|  |      :       3.6D0,    -0.2D0,    0.0D0,  0.0D0,
 | ||
|  |      :     107.4D0,     0.3D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -10.9D0,     0.2D0,    0.0D0,  0.0D0,
 | ||
|  |      :      -0.9D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      85.4D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :       0.0D0,   -88.8D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -71.0D0,    -0.2D0,    0.0D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=71,80 ) /
 | ||
|  |      :     -70.3D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      64.5D0,     0.4D0,    0.0D0,  0.0D0,
 | ||
|  |      :      69.8D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      66.1D0,     0.4D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -61.0D0,    -0.2D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -59.5D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -55.6D0,     0.0D0,    0.2D0,  0.0D0,
 | ||
|  |      :      51.7D0,     0.2D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -49.0D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -52.7D0,    -0.1D0,    0.0D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=81,90 ) /
 | ||
|  |      :     -49.6D0,     1.4D0,    0.0D0,  0.0D0,
 | ||
|  |      :      46.3D0,     0.4D0,    0.0D0,  0.0D0,
 | ||
|  |      :      49.6D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      -5.1D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -44.0D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -39.9D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -39.5D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      -3.9D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -42.1D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -17.2D0,     0.1D0,    0.0D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=91,100 ) /
 | ||
|  |      :      -2.3D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -39.2D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -38.4D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      36.8D0,     0.2D0,    0.0D0,  0.0D0,
 | ||
|  |      :      34.6D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -32.7D0,     0.3D0,    0.0D0,  0.0D0,
 | ||
|  |      :      30.4D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :       0.4D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      29.3D0,     0.2D0,    0.0D0,  0.0D0,
 | ||
|  |      :      31.6D0,     0.1D0,    0.0D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=101,110 ) /
 | ||
|  |      :       0.8D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -27.9D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :       2.9D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -25.3D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      25.0D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      27.5D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -24.4D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      24.9D0,     0.2D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -22.8D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :       0.9D0,    -0.1D0,    0.0D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=111,120 ) /
 | ||
|  |      :      24.4D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      23.9D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      22.5D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      20.8D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      20.1D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      21.5D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -20.0D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :       1.4D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      -0.2D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      19.0D0,     0.0D0,   -0.1D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=121,130 ) /
 | ||
|  |      :      20.5D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      -2.0D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -17.6D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      19.0D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      -2.4D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -18.4D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      17.1D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :       0.4D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      18.4D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :       0.0D0,    17.4D0,    0.0D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=131,140 ) /
 | ||
|  |      :      -0.6D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -15.4D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -16.8D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      16.3D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      -2.0D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      -1.5D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -14.3D0,    -0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      14.4D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -13.4D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -14.3D0,    -0.1D0,    0.0D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=141,150 ) /
 | ||
|  |      :     -13.7D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      13.1D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      -1.7D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -12.8D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :       0.0D0,   -14.4D0,    0.0D0,  0.0D0,
 | ||
|  |      :      12.4D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -12.0D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      -0.8D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      10.9D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -10.8D0,     0.0D0,    0.0D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=151,160 ) /
 | ||
|  |      :      10.5D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -10.4D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -11.2D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      10.5D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :      -1.4D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :       0.0D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :       0.7D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -10.3D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -10.0D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :       9.6D0,     0.0D0,    0.0D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=161,170 ) /
 | ||
|  |      :       9.4D0,     0.1D0,    0.0D0,  0.0D0,
 | ||
|  |      :       0.6D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -87.7D0,     4.4D0,   -0.4D0, -6.3D0,
 | ||
|  |      :      46.3D0,    22.4D0,    0.5D0, -2.4D0,
 | ||
|  |      :      15.6D0,    -3.4D0,    0.1D0,  0.4D0,
 | ||
|  |      :       5.2D0,     5.8D0,    0.2D0, -0.1D0,
 | ||
|  |      :     -30.1D0,    26.9D0,    0.7D0,  0.0D0,
 | ||
|  |      :      23.2D0,    -0.5D0,    0.0D0,  0.6D0,
 | ||
|  |      :       1.0D0,    23.2D0,    3.4D0,  0.0D0,
 | ||
|  |      :     -12.2D0,    -4.3D0,    0.0D0,  0.0D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=171,180 ) /
 | ||
|  |      :      -2.1D0,    -3.7D0,   -0.2D0,  0.1D0,
 | ||
|  |      :     -18.6D0,    -3.8D0,   -0.4D0,  1.8D0,
 | ||
|  |      :       5.5D0,   -18.7D0,   -1.8D0, -0.5D0,
 | ||
|  |      :      -5.5D0,   -18.7D0,    1.8D0, -0.5D0,
 | ||
|  |      :      18.4D0,    -3.6D0,    0.3D0,  0.9D0,
 | ||
|  |      :      -0.6D0,     1.3D0,    0.0D0,  0.0D0,
 | ||
|  |      :      -5.6D0,   -19.5D0,    1.9D0,  0.0D0,
 | ||
|  |      :       5.5D0,   -19.1D0,   -1.9D0,  0.0D0,
 | ||
|  |      :     -17.3D0,    -0.8D0,    0.0D0,  0.9D0,
 | ||
|  |      :      -3.2D0,    -8.3D0,   -0.8D0,  0.3D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=181,190 ) /
 | ||
|  |      :      -0.1D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :      -5.4D0,     7.8D0,   -0.3D0,  0.0D0,
 | ||
|  |      :     -14.8D0,     1.4D0,    0.0D0,  0.3D0,
 | ||
|  |      :      -3.8D0,     0.4D0,    0.0D0, -0.2D0,
 | ||
|  |      :      12.6D0,     3.2D0,    0.5D0, -1.5D0,
 | ||
|  |      :       0.1D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -13.6D0,     2.4D0,   -0.1D0,  0.0D0,
 | ||
|  |      :       0.9D0,     1.2D0,    0.0D0,  0.0D0,
 | ||
|  |      :     -11.9D0,    -0.5D0,    0.0D0,  0.3D0,
 | ||
|  |      :       0.4D0,    12.0D0,    0.3D0, -0.2D0 /
 | ||
|  |       DATA ( ( EPS(I,J), I=1,4 ), J=191,NTERMS ) /
 | ||
|  |      :       8.3D0,     6.1D0,   -0.1D0,  0.1D0,
 | ||
|  |      :       0.0D0,     0.0D0,    0.0D0,  0.0D0,
 | ||
|  |      :       0.4D0,   -10.8D0,    0.3D0,  0.0D0,
 | ||
|  |      :       9.6D0,     2.2D0,    0.3D0, -1.2D0 /
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Interval between fundamental epoch J2000.0 and given epoch (JC).
 | ||
|  |       T = (DATE-DJM0)/DJC
 | ||
|  | 
 | ||
|  | *  Mean anomaly of the Moon.
 | ||
|  |       EL  = 134.96340251D0*DD2R+
 | ||
|  |      :      MOD(T*(1717915923.2178D0+
 | ||
|  |      :          T*(        31.8792D0+
 | ||
|  |      :          T*(         0.051635D0+
 | ||
|  |      :          T*(       - 0.00024470D0)))),TURNAS)*DAS2R
 | ||
|  | 
 | ||
|  | *  Mean anomaly of the Sun.
 | ||
|  |       ELP = 357.52910918D0*DD2R+
 | ||
|  |      :      MOD(T*( 129596581.0481D0+
 | ||
|  |      :          T*(       - 0.5532D0+
 | ||
|  |      :          T*(         0.000136D0+
 | ||
|  |      :          T*(       - 0.00001149D0)))),TURNAS)*DAS2R
 | ||
|  | 
 | ||
|  | *  Mean argument of the latitude of the Moon.
 | ||
|  |       F   =  93.27209062D0*DD2R+
 | ||
|  |      :      MOD(T*(1739527262.8478D0+
 | ||
|  |      :          T*(      - 12.7512D0+
 | ||
|  |      :          T*(      -  0.001037D0+
 | ||
|  |      :          T*(         0.00000417D0)))),TURNAS)*DAS2R
 | ||
|  | 
 | ||
|  | *  Mean elongation of the Moon from the Sun.
 | ||
|  |       D   = 297.85019547D0*DD2R+
 | ||
|  |      :      MOD(T*(1602961601.2090D0+
 | ||
|  |      :          T*(       - 6.3706D0+
 | ||
|  |      :          T*(         0.006539D0+
 | ||
|  |      :          T*(       - 0.00003169D0)))),TURNAS)*DAS2R
 | ||
|  | 
 | ||
|  | *  Mean longitude of the ascending node of the Moon.
 | ||
|  |       OM  = 125.04455501D0*DD2R+
 | ||
|  |      :      MOD(T*( - 6962890.5431D0+
 | ||
|  |      :          T*(         7.4722D0+
 | ||
|  |      :          T*(         0.007702D0+
 | ||
|  |      :          T*(       - 0.00005939D0)))),TURNAS)*DAS2R
 | ||
|  | 
 | ||
|  | *  Mean longitude of Venus.
 | ||
|  |       VE    = 181.97980085D0*DD2R+MOD(210664136.433548D0*T,TURNAS)*DAS2R
 | ||
|  | 
 | ||
|  | *  Mean longitude of Mars.
 | ||
|  |       MA    = 355.43299958D0*DD2R+MOD( 68905077.493988D0*T,TURNAS)*DAS2R
 | ||
|  | 
 | ||
|  | *  Mean longitude of Jupiter.
 | ||
|  |       JU    =  34.35151874D0*DD2R+MOD( 10925660.377991D0*T,TURNAS)*DAS2R
 | ||
|  | 
 | ||
|  | *  Mean longitude of Saturn.
 | ||
|  |       SA    =  50.07744430D0*DD2R+MOD(  4399609.855732D0*T,TURNAS)*DAS2R
 | ||
|  | 
 | ||
|  | *  Geodesic nutation (Fukushima 1991) in microarcsec.
 | ||
|  |       DP = -153.1D0*SIN(ELP)-1.9D0*SIN(2D0*ELP)
 | ||
|  |       DE = 0D0
 | ||
|  | 
 | ||
|  | *  Shirai & Fukushima (2001) nutation series.
 | ||
|  |       DO J=NTERMS,1,-1
 | ||
|  |          THETA = DBLE(NA(1,J))*EL+
 | ||
|  |      :           DBLE(NA(2,J))*ELP+
 | ||
|  |      :           DBLE(NA(3,J))*F+
 | ||
|  |      :           DBLE(NA(4,J))*D+
 | ||
|  |      :           DBLE(NA(5,J))*OM+
 | ||
|  |      :           DBLE(NA(6,J))*VE+
 | ||
|  |      :           DBLE(NA(7,J))*MA+
 | ||
|  |      :           DBLE(NA(8,J))*JU+
 | ||
|  |      :           DBLE(NA(9,J))*SA
 | ||
|  |          C = COS(THETA)
 | ||
|  |          S = SIN(THETA)
 | ||
|  |          DP = DP+(PSI(1,J)+PSI(3,J)*T)*C+(PSI(2,J)+PSI(4,J)*T)*S
 | ||
|  |          DE = DE+(EPS(1,J)+EPS(3,J)*T)*C+(EPS(2,J)+EPS(4,J)*T)*S
 | ||
|  |       END DO
 | ||
|  | 
 | ||
|  | *  Change of units, and addition of the precession correction.
 | ||
|  |       DPSI = (DP*1D-6-0.042888D0-0.29856D0*T)*DAS2R
 | ||
|  |       DEPS = (DE*1D-6-0.005171D0-0.02408D0*T)*DAS2R
 | ||
|  | 
 | ||
|  | *  Mean obliquity of date (Simon et al. 1994).
 | ||
|  |       EPS0 = (84381.412D0+
 | ||
|  |      :         (-46.80927D0+
 | ||
|  |      :          (-0.000152D0+
 | ||
|  |      :           (0.0019989D0+
 | ||
|  |      :          (-0.00000051D0+
 | ||
|  |      :          (-0.000000025D0)*T)*T)*T)*T)*T)*DAS2R
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_NUT (DATE, RMATN)
 | ||
|  | *+
 | ||
|  | *     - - - -
 | ||
|  | *      N U T
 | ||
|  | *     - - - -
 | ||
|  | *
 | ||
|  | *  Form the matrix of nutation for a given date - Shirai & Fukushima
 | ||
|  | *  2001 theory (double precision)
 | ||
|  | *
 | ||
|  | *  Reference:
 | ||
|  | *     Shirai, T. & Fukushima, T., Astron.J. 121, 3270-3283 (2001).
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     DATE    d          TDB (loosely ET) as Modified Julian Date
 | ||
|  | *                                           (=JD-2400000.5)
 | ||
|  | *  Returned:
 | ||
|  | *     RMATN   d(3,3)     nutation matrix
 | ||
|  | *
 | ||
|  | *  Notes:
 | ||
|  | *
 | ||
|  | *  1  The matrix is in the sense  v(true) = rmatn * v(mean) .
 | ||
|  | *     where v(true) is the star vector relative to the true equator and
 | ||
|  | *     equinox of date and v(mean) is the star vector relative to the
 | ||
|  | *     mean equator and equinox of date.
 | ||
|  | *
 | ||
|  | *  2  The matrix represents forced nutation (but not free core
 | ||
|  | *     nutation) plus corrections to the IAU~1976 precession model.
 | ||
|  | *
 | ||
|  | *  3  Earth attitude predictions made by combining the present nutation
 | ||
|  | *     matrix with IAU~1976 precession are accurate to 1~mas (with
 | ||
|  | *     respect to the ICRS) for a few decades around 2000.
 | ||
|  | *
 | ||
|  | *  4  The distinction between the required TDB and TT is always
 | ||
|  | *     negligible.  Moreover, for all but the most critical applications
 | ||
|  | *     UTC is adequate.
 | ||
|  | *
 | ||
|  | *  Called:   sla_NUTC, sla_DEULER
 | ||
|  | *
 | ||
|  | *  Last revision:   1 December 2005
 | ||
|  | *
 | ||
|  | *  Copyright P.T.Wallace.  All rights reserved.
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION DATE,RMATN(3,3)
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION DPSI,DEPS,EPS0
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Nutation components and mean obliquity
 | ||
|  |       CALL sla_NUTC(DATE,DPSI,DEPS,EPS0)
 | ||
|  | 
 | ||
|  | *  Rotation matrix
 | ||
|  |       CALL sla_DEULER('XZX',EPS0,-DPSI,-(EPS0+DEPS),RMATN)
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_PREBN (BEP0, BEP1, RMATP)
 | ||
|  | *+
 | ||
|  | *     - - - - - -
 | ||
|  | *      P R E B N
 | ||
|  | *     - - - - - -
 | ||
|  | *
 | ||
|  | *  Generate the matrix of precession between two epochs,
 | ||
|  | *  using the old, pre-IAU1976, Bessel-Newcomb model, using
 | ||
|  | *  Kinoshita's formulation (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     BEP0    dp         beginning Besselian epoch
 | ||
|  | *     BEP1    dp         ending Besselian epoch
 | ||
|  | *
 | ||
|  | *  Returned:
 | ||
|  | *     RMATP  dp(3,3)    precession matrix
 | ||
|  | *
 | ||
|  | *  The matrix is in the sense   V(BEP1)  =  RMATP * V(BEP0)
 | ||
|  | *
 | ||
|  | *  Reference:
 | ||
|  | *     Kinoshita, H. (1975) 'Formulas for precession', SAO Special
 | ||
|  | *     Report No. 364, Smithsonian Institution Astrophysical
 | ||
|  | *     Observatory, Cambridge, Massachusetts.
 | ||
|  | *
 | ||
|  | *  Called:  sla_DEULER
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   23 August 1996
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1996 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION BEP0,BEP1,RMATP(3,3)
 | ||
|  | 
 | ||
|  | *  Arc seconds to radians
 | ||
|  |       DOUBLE PRECISION AS2R
 | ||
|  |       PARAMETER (AS2R=0.484813681109535994D-5)
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION BIGT,T,TAS2R,W,ZETA,Z,THETA
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Interval between basic epoch B1850.0 and beginning epoch in TC
 | ||
|  |       BIGT = (BEP0-1850D0)/100D0
 | ||
|  | 
 | ||
|  | *  Interval over which precession required, in tropical centuries
 | ||
|  |       T = (BEP1-BEP0)/100D0
 | ||
|  | 
 | ||
|  | *  Euler angles
 | ||
|  |       TAS2R = T*AS2R
 | ||
|  |       W = 2303.5548D0+(1.39720D0+0.000059D0*BIGT)*BIGT
 | ||
|  | 
 | ||
|  |       ZETA = (W+(0.30242D0-0.000269D0*BIGT+0.017996D0*T)*T)*TAS2R
 | ||
|  |       Z = (W+(1.09478D0+0.000387D0*BIGT+0.018324D0*T)*T)*TAS2R
 | ||
|  |       THETA = (2005.1125D0+(-0.85294D0-0.000365D0*BIGT)*BIGT+
 | ||
|  |      :        (-0.42647D0-0.000365D0*BIGT-0.041802D0*T)*T)*TAS2R
 | ||
|  | 
 | ||
|  | *  Rotation matrix
 | ||
|  |       CALL sla_DEULER('ZYZ',-ZETA,THETA,-Z,RMATP)
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_PRECES (SYSTEM, EP0, EP1, RA, DC)
 | ||
|  | *+
 | ||
|  | *     - - - - - - -
 | ||
|  | *      P R E C E S
 | ||
|  | *     - - - - - - -
 | ||
|  | *
 | ||
|  | *  Precession - either FK4 (Bessel-Newcomb, pre IAU 1976) or
 | ||
|  | *  FK5 (Fricke, post IAU 1976) as required.
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     SYSTEM     char   precession to be applied: 'FK4' or 'FK5'
 | ||
|  | *     EP0,EP1    dp     starting and ending epoch
 | ||
|  | *     RA,DC      dp     RA,Dec, mean equator & equinox of epoch EP0
 | ||
|  | *
 | ||
|  | *  Returned:
 | ||
|  | *     RA,DC      dp     RA,Dec, mean equator & equinox of epoch EP1
 | ||
|  | *
 | ||
|  | *  Called:    sla_DRANRM, sla_PREBN, sla_PREC, sla_DCS2C,
 | ||
|  | *             sla_DMXV, sla_DCC2S
 | ||
|  | *
 | ||
|  | *  Notes:
 | ||
|  | *
 | ||
|  | *     1)  Lowercase characters in SYSTEM are acceptable.
 | ||
|  | *
 | ||
|  | *     2)  The epochs are Besselian if SYSTEM='FK4' and Julian if 'FK5'.
 | ||
|  | *         For example, to precess coordinates in the old system from
 | ||
|  | *         equinox 1900.0 to 1950.0 the call would be:
 | ||
|  | *             CALL sla_PRECES ('FK4', 1900D0, 1950D0, RA, DC)
 | ||
|  | *
 | ||
|  | *     3)  This routine will NOT correctly convert between the old and
 | ||
|  | *         the new systems - for example conversion from B1950 to J2000.
 | ||
|  | *         For these purposes see sla_FK425, sla_FK524, sla_FK45Z and
 | ||
|  | *         sla_FK54Z.
 | ||
|  | *
 | ||
|  | *     4)  If an invalid SYSTEM is supplied, values of -99D0,-99D0 will
 | ||
|  | *         be returned for both RA and DC.
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   20 April 1990
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1995 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       CHARACTER SYSTEM*(*)
 | ||
|  |       DOUBLE PRECISION EP0,EP1,RA,DC
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION PM(3,3),V1(3),V2(3)
 | ||
|  |       CHARACTER SYSUC*3
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION sla_DRANRM
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Convert to uppercase and validate SYSTEM
 | ||
|  |       SYSUC=SYSTEM
 | ||
|  |       IF (SYSUC(1:1).EQ.'f') SYSUC(1:1)='F'
 | ||
|  |       IF (SYSUC(2:2).EQ.'k') SYSUC(2:2)='K'
 | ||
|  |       IF (SYSUC.NE.'FK4'.AND.SYSUC.NE.'FK5') THEN
 | ||
|  |          RA=-99D0
 | ||
|  |          DC=-99D0
 | ||
|  |       ELSE
 | ||
|  | 
 | ||
|  | *     Generate appropriate precession matrix
 | ||
|  |          IF (SYSUC.EQ.'FK4') THEN
 | ||
|  |             CALL sla_PREBN(EP0,EP1,PM)
 | ||
|  |          ELSE
 | ||
|  |             CALL sla_PREC(EP0,EP1,PM)
 | ||
|  |          END IF
 | ||
|  | 
 | ||
|  | *     Convert RA,Dec to x,y,z
 | ||
|  |          CALL sla_DCS2C(RA,DC,V1)
 | ||
|  | 
 | ||
|  | *     Precess
 | ||
|  |          CALL sla_DMXV(PM,V1,V2)
 | ||
|  | 
 | ||
|  | *     Back to RA,Dec
 | ||
|  |          CALL sla_DCC2S(V2,RA,DC)
 | ||
|  |          RA=sla_DRANRM(RA)
 | ||
|  | 
 | ||
|  |       END IF
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_PREC (EP0, EP1, RMATP)
 | ||
|  | *+
 | ||
|  | *     - - - - -
 | ||
|  | *      P R E C
 | ||
|  | *     - - - - -
 | ||
|  | *
 | ||
|  | *  Form the matrix of precession between two epochs (IAU 1976, FK5)
 | ||
|  | *  (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     EP0    dp         beginning epoch
 | ||
|  | *     EP1    dp         ending epoch
 | ||
|  | *
 | ||
|  | *  Returned:
 | ||
|  | *     RMATP  dp(3,3)    precession matrix
 | ||
|  | *
 | ||
|  | *  Notes:
 | ||
|  | *
 | ||
|  | *     1)  The epochs are TDB (loosely ET) Julian epochs.
 | ||
|  | *
 | ||
|  | *     2)  The matrix is in the sense   V(EP1)  =  RMATP * V(EP0)
 | ||
|  | *
 | ||
|  | *     3)  Though the matrix method itself is rigorous, the precession
 | ||
|  | *         angles are expressed through canonical polynomials which are
 | ||
|  | *         valid only for a limited time span.  There are also known
 | ||
|  | *         errors in the IAU precession rate.  The absolute accuracy
 | ||
|  | *         of the present formulation is better than 0.1 arcsec from
 | ||
|  | *         1960AD to 2040AD, better than 1 arcsec from 1640AD to 2360AD,
 | ||
|  | *         and remains below 3 arcsec for the whole of the period
 | ||
|  | *         500BC to 3000AD.  The errors exceed 10 arcsec outside the
 | ||
|  | *         range 1200BC to 3900AD, exceed 100 arcsec outside 4200BC to
 | ||
|  | *         5600AD and exceed 1000 arcsec outside 6800BC to 8200AD.
 | ||
|  | *         The SLALIB routine sla_PRECL implements a more elaborate
 | ||
|  | *         model which is suitable for problems spanning several
 | ||
|  | *         thousand years.
 | ||
|  | *
 | ||
|  | *  References:
 | ||
|  | *     Lieske,J.H., 1979. Astron.Astrophys.,73,282.
 | ||
|  | *      equations (6) & (7), p283.
 | ||
|  | *     Kaplan,G.H., 1981. USNO circular no. 163, pA2.
 | ||
|  | *
 | ||
|  | *  Called:  sla_DEULER
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   23 August 1996
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1996 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION EP0,EP1,RMATP(3,3)
 | ||
|  | 
 | ||
|  | *  Arc seconds to radians
 | ||
|  |       DOUBLE PRECISION AS2R
 | ||
|  |       PARAMETER (AS2R=0.484813681109535994D-5)
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION T0,T,TAS2R,W,ZETA,Z,THETA
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Interval between basic epoch J2000.0 and beginning epoch (JC)
 | ||
|  |       T0 = (EP0-2000D0)/100D0
 | ||
|  | 
 | ||
|  | *  Interval over which precession required (JC)
 | ||
|  |       T = (EP1-EP0)/100D0
 | ||
|  | 
 | ||
|  | *  Euler angles
 | ||
|  |       TAS2R = T*AS2R
 | ||
|  |       W = 2306.2181D0+(1.39656D0-0.000139D0*T0)*T0
 | ||
|  | 
 | ||
|  |       ZETA = (W+((0.30188D0-0.000344D0*T0)+0.017998D0*T)*T)*TAS2R
 | ||
|  |       Z = (W+((1.09468D0+0.000066D0*T0)+0.018203D0*T)*T)*TAS2R
 | ||
|  |       THETA = ((2004.3109D0+(-0.85330D0-0.000217D0*T0)*T0)
 | ||
|  |      :        +((-0.42665D0-0.000217D0*T0)-0.041833D0*T)*T)*TAS2R
 | ||
|  | 
 | ||
|  | *  Rotation matrix
 | ||
|  |       CALL sla_DEULER('ZYZ',-ZETA,THETA,-Z,RMATP)
 | ||
|  | 
 | ||
|  |       END
 | ||
|  |       SUBROUTINE sla_PVOBS (P, H, STL, PV)
 | ||
|  | *+
 | ||
|  | *     - - - - - -
 | ||
|  | *      P V O B S
 | ||
|  | *     - - - - - -
 | ||
|  | *
 | ||
|  | *  Position and velocity of an observing station (double precision)
 | ||
|  | *
 | ||
|  | *  Given:
 | ||
|  | *     P     dp     latitude (geodetic, radians)
 | ||
|  | *     H     dp     height above reference spheroid (geodetic, metres)
 | ||
|  | *     STL   dp     local apparent sidereal time (radians)
 | ||
|  | *
 | ||
|  | *  Returned:
 | ||
|  | *     PV    dp(6)  position/velocity 6-vector (AU, AU/s, true equator
 | ||
|  | *                                              and equinox of date)
 | ||
|  | *
 | ||
|  | *  Called:  sla_GEOC
 | ||
|  | *
 | ||
|  | *  IAU 1976 constants are used.
 | ||
|  | *
 | ||
|  | *  P.T.Wallace   Starlink   14 November 1994
 | ||
|  | *
 | ||
|  | *  Copyright (C) 1995 Rutherford Appleton Laboratory
 | ||
|  | *
 | ||
|  | *  License:
 | ||
|  | *    This program is free software; you can redistribute it and/or modify
 | ||
|  | *    it under the terms of the GNU General Public License as published by
 | ||
|  | *    the Free Software Foundation; either version 2 of the License, or
 | ||
|  | *    (at your option) any later version.
 | ||
|  | *
 | ||
|  | *    This program is distributed in the hope that it will be useful,
 | ||
|  | *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|  | *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|  | *    GNU General Public License for more details.
 | ||
|  | *
 | ||
|  | *    You should have received a copy of the GNU General Public License
 | ||
|  | *    along with this program (see SLA_CONDITIONS); if not, write to the
 | ||
|  | *    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | ||
|  | *    Boston, MA  02110-1301  USA
 | ||
|  | *
 | ||
|  | *-
 | ||
|  | 
 | ||
|  |       IMPLICIT NONE
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION P,H,STL,PV(6)
 | ||
|  | 
 | ||
|  |       DOUBLE PRECISION R,Z,S,C,V
 | ||
|  | 
 | ||
|  | *  Mean sidereal rate (at J2000) in radians per (UT1) second
 | ||
|  |       DOUBLE PRECISION SR
 | ||
|  |       PARAMETER (SR=7.292115855306589D-5)
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | *  Geodetic to geocentric conversion
 | ||
|  |       CALL sla_GEOC(P,H,R,Z)
 | ||
|  | 
 | ||
|  | *  Functions of ST
 | ||
|  |       S=SIN(STL)
 | ||
|  |       C=COS(STL)
 | ||
|  | 
 | ||
|  | *  Speed
 | ||
|  |       V=SR*R
 | ||
|  | 
 | ||
|  | *  Position
 | ||
|  |       PV(1)=R*C
 | ||
|  |       PV(2)=R*S
 | ||
|  |       PV(3)=Z
 | ||
|  | 
 | ||
|  | *  Velocity
 | ||
|  |       PV(4)=-V*S
 | ||
|  |       PV(5)=V*C
 | ||
|  |       PV(6)=0D0
 | ||
|  | 
 | ||
|  |       END
 |