mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-29 23:58:39 -05:00
e837b9209e
Also new, simplified routines for Doppler spread. Beware! Not yet fully tested ... git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@5496 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
3397 lines
118 KiB
Fortran
3397 lines
118 KiB
Fortran
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
|