900 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			900 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								C++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      SUBROUTINE FSIZER1(NRECL,KSIZE,NRFILE,NAMFIL)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C   Version 1.0 uses the INQUIRE statement to find out the the record length 
							 | 
						||
| 
								 | 
							
								C   of the direct access file before opening it.  This procedure is non-standard, 
							 | 
						||
| 
								 | 
							
								C   but seems to work for VAX machines. 
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C  THE SUBROUTINE ALSO SETS THE VALUES OF  NRECL, NRFILE, AND NAMFIL.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C  THE PARAMETERS NAMFIL, NRECL, AND NRFILE ARE TO BE SET BY THE USER
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  NAMFIL IS THE EXTERNAL NAME OF THE BINARY EPHEMERIS FILE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      CHARACTER*256  NAMFIL
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								c      NAMFIL='JPLEPH'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  NRECL=1 IF "RECL" IN THE OPEN STATEMENT IS THE RECORD LENGTH IN S.P. WORDS
							 | 
						||
| 
								 | 
							
								C  NRECL=4 IF "RECL" IN THE OPEN STATEMENT IS THE RECORD LENGTH IN BYTES
							 | 
						||
| 
								 | 
							
								C  (for a VAX, it is probably 1)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      NRECL=4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  NRFILE IS THE INTERNAL UNIT NUMBER USED FOR THE EPHEMERIS FILE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								c      NRFILE=12
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C   FIND THE RECORD SIZE USING THE INQUIRE STATEMENT  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								c      IRECSZ=0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      INQUIRE(FILE=NAMFIL,RECL=IRECSZ)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C IF 'INQUIRE' DOES NOT WORK, USUALLY IRECSZ WILL BE LEFT AT 0 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(IRECSZ .LE. 0) write(*,*)
							 | 
						||
| 
								 | 
							
								     . ' INQUIRE STATEMENT PROBABLY DID NOT WORK'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      KSIZE=IRECSZ/NRECL
							 | 
						||
| 
								 | 
							
								      if(nrfile.eq.-99) stop              !silence compiler warning
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      RETURN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      END
							 | 
						||
| 
								 | 
							
								C++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      SUBROUTINE FSIZER2(NRECL,KSIZE,NRFILE,NAMFIL)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C  THIS SUBROUTINE OPENS THE FILE, 'NAMFIL', WITH A PHONY RECORD LENGTH, READS 
							 | 
						||
| 
								 | 
							
								C  THE FIRST RECORD, AND USES THE INFO TO COMPUTE KSIZE, THE NUMBER OF SINGLE 
							 | 
						||
| 
								 | 
							
								C  PRECISION WORDS IN A RECORD.  
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C  THE SUBROUTINE ALSO SETS THE VALUES OF  NRECL, NRFILE, AND NAMFIL.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      SAVE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      INTEGER OLDMAX
							 | 
						||
| 
								 | 
							
								      PARAMETER (OLDMAX = 400)
							 | 
						||
| 
								 | 
							
								      INTEGER NMAX
							 | 
						||
| 
								 | 
							
								      PARAMETER (NMAX = 1000)
							 | 
						||
| 
								 | 
							
								      CHARACTER*6 TTL(14,3),CNAM(NMAX)
							 | 
						||
| 
								 | 
							
								      CHARACTER*256 NAMFIL,jpleph_file_name
							 | 
						||
| 
								 | 
							
								      DIMENSION SS(3)
							 | 
						||
| 
								 | 
							
								      INTEGER IPT(3,13)
							 | 
						||
| 
								 | 
							
								      common/jplcom/jpleph_file_name
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C  THE PARAMETERS NRECL, NRFILE, AND NAMFIL ARE TO BE SET BY THE USER
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  NRECL=1 IF "RECL" IN THE OPEN STATEMENT IS THE RECORD LENGTH IN S.P. WORDS
							 | 
						||
| 
								 | 
							
								C  NRECL=4 IF "RECL" IN THE OPEN STATEMENT IS THE RECORD LENGTH IN BYTES
							 | 
						||
| 
								 | 
							
								C  (for UNIX, it is probably 4)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      NRECL=4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  NRFILE IS THE INTERNAL UNIT NUMBER USED FOR THE EPHEMERIS FILE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      NRFILE=12
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  NAMFIL IS THE EXTERNAL NAME OF THE BINARY EPHEMERIS FILE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								!      NAMFIL='JPLEPH' 
							 | 
						||
| 
								 | 
							
								      NAMFIL=jpleph_file_name
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  **  OPEN THE DIRECT-ACCESS FILE AND GET THE POINTERS IN ORDER TO 
							 | 
						||
| 
								 | 
							
								C  **  DETERMINE THE SIZE OF THE EPHEMERIS RECORD
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      MRECL=NRECL*1000
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        OPEN(NRFILE,
							 | 
						||
| 
								 | 
							
								     *       FILE=NAMFIL,
							 | 
						||
| 
								 | 
							
								     *       ACCESS='DIRECT',
							 | 
						||
| 
								 | 
							
								     *       FORM='UNFORMATTED',
							 | 
						||
| 
								 | 
							
								     *       RECL=MRECL,
							 | 
						||
| 
								 | 
							
								     *       STATUS='OLD')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      READ(NRFILE,REC=1)TTL,(CNAM(K),K=1,OLDMAX),SS,NCON,AU,EMRAT,
							 | 
						||
| 
								 | 
							
								     & ((IPT(I,J),I=1,3),J=1,12),NUMDE,(IPT(I,13),I=1,3)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      CLOSE(NRFILE)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  FIND THE NUMBER OF EPHEMERIS COEFFICIENTS FROM THE POINTERS
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      KMX = 0
							 | 
						||
| 
								 | 
							
								      KHI = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      DO I = 1,13
							 | 
						||
| 
								 | 
							
								         IF (IPT(1,I) .GT. KMX) THEN
							 | 
						||
| 
								 | 
							
								            KMX = IPT(1,I)
							 | 
						||
| 
								 | 
							
								            KHI = I
							 | 
						||
| 
								 | 
							
								         ENDIF
							 | 
						||
| 
								 | 
							
								      ENDDO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      ND = 3
							 | 
						||
| 
								 | 
							
								      IF (KHI .EQ. 12) ND=2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      KSIZE = 2*(IPT(1,KHI)+ND*IPT(2,KHI)*IPT(3,KHI)-1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      RETURN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      END
							 | 
						||
| 
								 | 
							
								C++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      SUBROUTINE FSIZER3(NRECL,KSIZE,NRFILE,NAMFIL)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C  THE SUBROUTINE SETS THE VALUES OF  NRECL, KSIZE, NRFILE, AND NAMFIL.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      SAVE
							 | 
						||
| 
								 | 
							
								      CHARACTER*256 NAMFIL,jpleph_file_name
							 | 
						||
| 
								 | 
							
								      common/jplcom/jpleph_file_name
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C  THE PARAMETERS NRECL, NRFILE, AND NAMFIL ARE TO BE SET BY THE USER
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  NRECL=1 IF "RECL" IN THE OPEN STATEMENT IS THE RECORD LENGTH IN S.P. WORDS
							 | 
						||
| 
								 | 
							
								C  NRECL=4 IF "RECL" IN THE OPEN STATEMENT IS THE RECORD LENGTH IN BYTES
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								       NRECL=4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  NRFILE IS THE INTERNAL UNIT NUMBER USED FOR THE EPHEMERIS FILE (DEFAULT: 12)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      NRFILE=12
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  NAMFIL IS THE EXTERNAL NAME OF THE BINARY EPHEMERIS FILE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								!      NAMFIL='JPLEPH'
							 | 
						||
| 
								 | 
							
								      NAMFIL=jpleph_file_name
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  *****************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  KSIZE must be set by the user according to the ephemeris to be read
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  For  de200, set KSIZE to 1652
							 | 
						||
| 
								 | 
							
								C  For  de405, set KSIZE to 2036
							 | 
						||
| 
								 | 
							
								C  For  de406, set KSIZE to 1456
							 | 
						||
| 
								 | 
							
								C  For  de414, set KSIZE to 2036
							 | 
						||
| 
								 | 
							
								C  For  de418, set KSIZE to 2036
							 | 
						||
| 
								 | 
							
								C  For  de421, set KSIZE to 2036
							 | 
						||
| 
								 | 
							
								C  For  de422, set KSIZE to 2036
							 | 
						||
| 
								 | 
							
								C  For  de423, set KSIZE to 2036
							 | 
						||
| 
								 | 
							
								C  For  de424, set KSIZE to 2036
							 | 
						||
| 
								 | 
							
								C  For  de430, set KSIZE to 2036
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      KSIZE = 2036
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  *******************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      RETURN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      END
							 | 
						||
| 
								 | 
							
								C++++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      SUBROUTINE PLEPH ( ET, NTARG, NCENT, RRD )
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C++++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C  NOTE : Over the years, different versions of PLEPH have had a fifth argument:
							 | 
						||
| 
								 | 
							
								C  sometimes, an error return statement number; sometimes, a logical denoting
							 | 
						||
| 
								 | 
							
								C  whether or not the requested date is covered by the ephemeris.  We apologize
							 | 
						||
| 
								 | 
							
								C  for this inconsistency; in this present version, we use only the four necessary 
							 | 
						||
| 
								 | 
							
								C  arguments and do the testing outside of the subroutine.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     THIS SUBROUTINE READS THE JPL PLANETARY EPHEMERIS
							 | 
						||
| 
								 | 
							
								C     AND GIVES THE POSITION AND VELOCITY OF THE POINT 'NTARG'
							 | 
						||
| 
								 | 
							
								C     WITH RESPECT TO 'NCENT'.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     CALLING SEQUENCE PARAMETERS:
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       ET = D.P. JULIAN EPHEMERIS DATE AT WHICH INTERPOLATION
							 | 
						||
| 
								 | 
							
								C            IS WANTED.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       ** NOTE THE ENTRY DPLEPH FOR A DOUBLY-DIMENSIONED TIME **
							 | 
						||
| 
								 | 
							
								C          THE REASON FOR THIS OPTION IS DISCUSSED IN THE 
							 | 
						||
| 
								 | 
							
								C          SUBROUTINE STATE
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     NTARG = INTEGER NUMBER OF 'TARGET' POINT.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     NCENT = INTEGER NUMBER OF CENTER POINT.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C            THE NUMBERING CONVENTION FOR 'NTARG' AND 'NCENT' IS:
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C                1 = MERCURY           8 = NEPTUNE
							 | 
						||
| 
								 | 
							
								C                2 = VENUS             9 = PLUTO
							 | 
						||
| 
								 | 
							
								C                3 = EARTH            10 = MOON
							 | 
						||
| 
								 | 
							
								C                4 = MARS             11 = SUN
							 | 
						||
| 
								 | 
							
								C                5 = JUPITER          12 = SOLAR-SYSTEM BARYCENTER
							 | 
						||
| 
								 | 
							
								C                6 = SATURN           13 = EARTH-MOON BARYCENTER
							 | 
						||
| 
								 | 
							
								C                7 = URANUS           14 = NUTATIONS (LONGITUDE AND OBLIQ)
							 | 
						||
| 
								 | 
							
								C                            15 = LIBRATIONS, IF ON EPH FILE
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C             (IF NUTATIONS ARE WANTED, SET NTARG = 14. FOR LIBRATIONS,
							 | 
						||
| 
								 | 
							
								C              SET NTARG = 15. SET NCENT=0.)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C      RRD = OUTPUT 6-WORD D.P. ARRAY CONTAINING POSITION AND VELOCITY
							 | 
						||
| 
								 | 
							
								C            OF POINT 'NTARG' RELATIVE TO 'NCENT'. THE UNITS ARE AU AND
							 | 
						||
| 
								 | 
							
								C            AU/DAY. FOR LIBRATIONS THE UNITS ARE RADIANS AND RADIANS
							 | 
						||
| 
								 | 
							
								C            PER DAY. IN THE CASE OF NUTATIONS THE FIRST FOUR WORDS OF
							 | 
						||
| 
								 | 
							
								C            RRD WILL BE SET TO NUTATIONS AND RATES, HAVING UNITS OF
							 | 
						||
| 
								 | 
							
								C            RADIANS AND RADIANS/DAY.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C            The option is available to have the units in km and km/sec.
							 | 
						||
| 
								 | 
							
								C            For this, set km=.true. in the STCOMX common block.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      INTEGER NMAX
							 | 
						||
| 
								 | 
							
								      PARAMETER (NMAX = 1000)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      DIMENSION RRD(6),ET2Z(2),ET2(2),PV(6,13)
							 | 
						||
| 
								 | 
							
								      DIMENSION PVST(6,11),PNUT(4)
							 | 
						||
| 
								 | 
							
								      DIMENSION SS(3),CVAL(NMAX),PVSUN(6),ZIPS(2)
							 | 
						||
| 
								 | 
							
								      DATA ZIPS/2*0.d0/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      LOGICAL BSAVE,KM,BARY
							 | 
						||
| 
								 | 
							
								      LOGICAL FIRST
							 | 
						||
| 
								 | 
							
								      DATA FIRST/.TRUE./
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      INTEGER LIST(12),IPT(39),DENUM
							 | 
						||
| 
								 | 
							
								      COMMON/EPHHDR/CVAL,SS,AU,EMRAT,DENUM,NCON,IPT
							 | 
						||
| 
								 | 
							
								      COMMON/STCOMX/KM,BARY,PVSUN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C     INITIALIZE ET2 FOR 'STATE' AND SET UP COMPONENT COUNT
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      ET2(1)=ET
							 | 
						||
| 
								 | 
							
								      ET2(2)=0.D0
							 | 
						||
| 
								 | 
							
								      GO TO 11
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C     ENTRY POINT 'DPLEPH' FOR DOUBLY-DIMENSIONED TIME ARGUMENT 
							 | 
						||
| 
								 | 
							
								C          (SEE THE DISCUSSION IN THE SUBROUTINE STATE)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      ENTRY DPLEPH(ET2Z,NTARG,NCENT,RRD)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      ET2(1)=ET2Z(1)
							 | 
						||
| 
								 | 
							
								      ET2(2)=ET2Z(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  11  IF(FIRST) CALL STATE(ZIPS,LIST,PVST,PNUT)
							 | 
						||
| 
								 | 
							
								      FIRST=.FALSE.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(NTARG .EQ. NCENT) RETURN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      DO I=1,12
							 | 
						||
| 
								 | 
							
								        LIST(I)=0
							 | 
						||
| 
								 | 
							
								      ENDDO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C     CHECK FOR NUTATION CALL
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(NTARG.NE.14) GO TO 97
							 | 
						||
| 
								 | 
							
								        IF(IPT(35).GT.0) THEN
							 | 
						||
| 
								 | 
							
								          LIST(11)=2
							 | 
						||
| 
								 | 
							
								          CALL STATE(ET2,LIST,PVST,PNUT)
							 | 
						||
| 
								 | 
							
								          DO I=1,4
							 | 
						||
| 
								 | 
							
								            RRD(I)=PNUT(I)
							 | 
						||
| 
								 | 
							
								          ENDDO
							 | 
						||
| 
								 | 
							
								          RRD(5) = 0.d0
							 | 
						||
| 
								 | 
							
								          RRD(6) = 0.d0
							 | 
						||
| 
								 | 
							
								          RETURN
							 | 
						||
| 
								 | 
							
								        ELSE
							 | 
						||
| 
								 | 
							
								          DO I=1,4
							 | 
						||
| 
								 | 
							
								            RRD(I)=0.d0
							 | 
						||
| 
								 | 
							
								          ENDDO
							 | 
						||
| 
								 | 
							
								          WRITE(6,297)
							 | 
						||
| 
								 | 
							
								  297     FORMAT(' *****  NO NUTATIONS ON THE EPHEMERIS FILE  *****')
							 | 
						||
| 
								 | 
							
								          STOP
							 | 
						||
| 
								 | 
							
								        ENDIF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C     CHECK FOR LIBRATIONS
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  97  CONTINUE
							 | 
						||
| 
								 | 
							
								      DO I=1,6
							 | 
						||
| 
								 | 
							
								        RRD(I)=0.d0
							 | 
						||
| 
								 | 
							
								      ENDDO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(NTARG.NE.15) GO TO 98
							 | 
						||
| 
								 | 
							
								        IF(IPT(38).GT.0) THEN
							 | 
						||
| 
								 | 
							
								          LIST(12)=2
							 | 
						||
| 
								 | 
							
								          CALL STATE(ET2,LIST,PVST,PNUT)
							 | 
						||
| 
								 | 
							
								          DO I=1,6
							 | 
						||
| 
								 | 
							
								            RRD(I)=PVST(I,11)
							 | 
						||
| 
								 | 
							
								          ENDDO
							 | 
						||
| 
								 | 
							
								          RETURN
							 | 
						||
| 
								 | 
							
								        ELSE
							 | 
						||
| 
								 | 
							
								          WRITE(6,298)
							 | 
						||
| 
								 | 
							
								  298     FORMAT(' *****  NO LIBRATIONS ON THE EPHEMERIS FILE  *****')
							 | 
						||
| 
								 | 
							
								          STOP
							 | 
						||
| 
								 | 
							
								        ENDIF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C       FORCE BARYCENTRIC OUTPUT BY 'STATE'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  98  BSAVE=BARY
							 | 
						||
| 
								 | 
							
								      BARY=.TRUE.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C       SET UP PROPER ENTRIES IN 'LIST' ARRAY FOR STATE CALL
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      DO I=1,2
							 | 
						||
| 
								 | 
							
								        K=NTARG
							 | 
						||
| 
								 | 
							
								        IF(I .EQ. 2) K=NCENT
							 | 
						||
| 
								 | 
							
								        IF(K .LE. 10) LIST(K)=2
							 | 
						||
| 
								 | 
							
								        IF(K .EQ. 10) LIST(3)=2
							 | 
						||
| 
								 | 
							
								        IF(K .EQ. 3) LIST(10)=2
							 | 
						||
| 
								 | 
							
								        IF(K .EQ. 13) LIST(3)=2
							 | 
						||
| 
								 | 
							
								      ENDDO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C       MAKE CALL TO STATE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      CALL STATE(ET2,LIST,PVST,PNUT)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      DO I=1,10
							 | 
						||
| 
								 | 
							
								        DO J = 1,6
							 | 
						||
| 
								 | 
							
								          PV(J,I) = PVST(J,I)
							 | 
						||
| 
								 | 
							
								        ENDDO
							 | 
						||
| 
								 | 
							
								      ENDDO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(NTARG .EQ. 11 .OR. NCENT .EQ. 11) THEN
							 | 
						||
| 
								 | 
							
								      DO I=1,6
							 | 
						||
| 
								 | 
							
								        PV(I,11)=PVSUN(I)
							 | 
						||
| 
								 | 
							
								      ENDDO
							 | 
						||
| 
								 | 
							
								      ENDIF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(NTARG .EQ. 12 .OR. NCENT .EQ. 12) THEN
							 | 
						||
| 
								 | 
							
								        DO I=1,6
							 | 
						||
| 
								 | 
							
								          PV(I,12)=0.D0
							 | 
						||
| 
								 | 
							
								        ENDDO
							 | 
						||
| 
								 | 
							
								      ENDIF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(NTARG .EQ. 13 .OR. NCENT .EQ. 13) THEN
							 | 
						||
| 
								 | 
							
								        DO I=1,6
							 | 
						||
| 
								 | 
							
								          PV(I,13) = PVST(I,3)
							 | 
						||
| 
								 | 
							
								        ENDDO
							 | 
						||
| 
								 | 
							
								      ENDIF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(NTARG*NCENT .EQ. 30 .AND. NTARG+NCENT .EQ. 13) THEN
							 | 
						||
| 
								 | 
							
								        DO I=1,6
							 | 
						||
| 
								 | 
							
								          PV(I,3)=0.D0
							 | 
						||
| 
								 | 
							
								        ENDDO
							 | 
						||
| 
								 | 
							
								        GO TO 99
							 | 
						||
| 
								 | 
							
								      ENDIF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(LIST(3) .EQ. 2) THEN
							 | 
						||
| 
								 | 
							
								        DO I=1,6
							 | 
						||
| 
								 | 
							
								          PV(I,3)=PVST(I,3)-PVST(I,10)/(1.D0+EMRAT)
							 | 
						||
| 
								 | 
							
								        ENDDO
							 | 
						||
| 
								 | 
							
								      ENDIF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(LIST(10) .EQ. 2) THEN
							 | 
						||
| 
								 | 
							
								        DO I=1,6
							 | 
						||
| 
								 | 
							
								          PV(I,10) = PV(I,3)+PVST(I,10)
							 | 
						||
| 
								 | 
							
								        ENDDO
							 | 
						||
| 
								 | 
							
								      ENDIF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  99  DO I=1,6
							 | 
						||
| 
								 | 
							
								        RRD(I)=PV(I,NTARG)-PV(I,NCENT)
							 | 
						||
| 
								 | 
							
								      ENDDO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      BARY=BSAVE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      RETURN
							 | 
						||
| 
								 | 
							
								      END
							 | 
						||
| 
								 | 
							
								C+++++++++++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      SUBROUTINE INTERP(BUF,T,NCF,NCM,NA,IFL,PV)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C+++++++++++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     THIS SUBROUTINE DIFFERENTIATES AND INTERPOLATES A
							 | 
						||
| 
								 | 
							
								C     SET OF CHEBYSHEV COEFFICIENTS TO GIVE POSITION AND VELOCITY
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     CALLING SEQUENCE PARAMETERS:
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       INPUT:
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C         BUF   1ST LOCATION OF ARRAY OF D.P. CHEBYSHEV COEFFICIENTS OF POSITION
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C           T   T(1) IS DP FRACTIONAL TIME IN INTERVAL COVERED BY
							 | 
						||
| 
								 | 
							
								C               COEFFICIENTS AT WHICH INTERPOLATION IS WANTED
							 | 
						||
| 
								 | 
							
								C               (0 .LE. T(1) .LE. 1).  T(2) IS DP LENGTH OF WHOLE
							 | 
						||
| 
								 | 
							
								C               INTERVAL IN INPUT TIME UNITS.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C         NCF   # OF COEFFICIENTS PER COMPONENT
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C         NCM   # OF COMPONENTS PER SET OF COEFFICIENTS
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C          NA   # OF SETS OF COEFFICIENTS IN FULL ARRAY
							 | 
						||
| 
								 | 
							
								C               (I.E., # OF SUB-INTERVALS IN FULL INTERVAL)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C          IFL  INTEGER FLAG: =1 FOR POSITIONS ONLY
							 | 
						||
| 
								 | 
							
								C                             =2 FOR POS AND VEL
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       OUTPUT:
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C         PV   INTERPOLATED QUANTITIES REQUESTED.  DIMENSION
							 | 
						||
| 
								 | 
							
								C               EXPECTED IS PV(NCM,IFL), DP.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      SAVE
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      DOUBLE PRECISION BUF(NCF,NCM,*),T(2),PV(NCM,*),PC(18),VC(18)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      DATA NP/2/
							 | 
						||
| 
								 | 
							
								      DATA NV/3/
							 | 
						||
| 
								 | 
							
								      DATA TWOT/0.D0/
							 | 
						||
| 
								 | 
							
								      DATA PC(1),PC(2)/1.D0,0.D0/
							 | 
						||
| 
								 | 
							
								      DATA VC(2)/1.D0/
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       ENTRY POINT. GET CORRECT SUB-INTERVAL NUMBER FOR THIS SET
							 | 
						||
| 
								 | 
							
								C       OF COEFFICIENTS AND THEN GET NORMALIZED CHEBYSHEV TIME
							 | 
						||
| 
								 | 
							
								C       WITHIN THAT SUBINTERVAL.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      DNA=DBLE(NA)
							 | 
						||
| 
								 | 
							
								      DT1=DINT(T(1))
							 | 
						||
| 
								 | 
							
								      TEMP=DNA*T(1)
							 | 
						||
| 
								 | 
							
								      L=IDINT(TEMP-DT1)+1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C         TC IS THE NORMALIZED CHEBYSHEV TIME (-1 .LE. TC .LE. 1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      TC=2.D0*(DMOD(TEMP,1.D0)+DT1)-1.D0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C       CHECK TO SEE WHETHER CHEBYSHEV TIME HAS CHANGED,
							 | 
						||
| 
								 | 
							
								C       AND COMPUTE NEW POLYNOMIAL VALUES IF IT HAS.
							 | 
						||
| 
								 | 
							
								C       (THE ELEMENT PC(2) IS THE VALUE OF T1(TC) AND HENCE
							 | 
						||
| 
								 | 
							
								C       CONTAINS THE VALUE OF TC ON THE PREVIOUS CALL.)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(TC.NE.PC(2)) THEN
							 | 
						||
| 
								 | 
							
								        NP=2
							 | 
						||
| 
								 | 
							
								        NV=3
							 | 
						||
| 
								 | 
							
								        PC(2)=TC
							 | 
						||
| 
								 | 
							
								        TWOT=TC+TC
							 | 
						||
| 
								 | 
							
								      ENDIF
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       BE SURE THAT AT LEAST 'NCF' POLYNOMIALS HAVE BEEN EVALUATED
							 | 
						||
| 
								 | 
							
								C       AND ARE STORED IN THE ARRAY 'PC'.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      IF(NP.LT.NCF) THEN
							 | 
						||
| 
								 | 
							
								        DO 1 I=NP+1,NCF
							 | 
						||
| 
								 | 
							
								        PC(I)=TWOT*PC(I-1)-PC(I-2)
							 | 
						||
| 
								 | 
							
								    1   CONTINUE
							 | 
						||
| 
								 | 
							
								        NP=NCF
							 | 
						||
| 
								 | 
							
								      ENDIF
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       INTERPOLATE TO GET POSITION FOR EACH COMPONENT
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      DO 2 I=1,NCM
							 | 
						||
| 
								 | 
							
								      PV(I,1)=0.D0
							 | 
						||
| 
								 | 
							
								      DO 3 J=NCF,1,-1
							 | 
						||
| 
								 | 
							
								      PV(I,1)=PV(I,1)+PC(J)*BUF(J,I,L)
							 | 
						||
| 
								 | 
							
								    3 CONTINUE
							 | 
						||
| 
								 | 
							
								    2 CONTINUE
							 | 
						||
| 
								 | 
							
								      IF(IFL.LE.1) RETURN
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       IF VELOCITY INTERPOLATION IS WANTED, BE SURE ENOUGH
							 | 
						||
| 
								 | 
							
								C       DERIVATIVE POLYNOMIALS HAVE BEEN GENERATED AND STORED.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      VFAC=(DNA+DNA)/T(2)
							 | 
						||
| 
								 | 
							
								      VC(3)=TWOT+TWOT
							 | 
						||
| 
								 | 
							
								      IF(NV.LT.NCF) THEN
							 | 
						||
| 
								 | 
							
								        DO 4 I=NV+1,NCF
							 | 
						||
| 
								 | 
							
								        VC(I)=TWOT*VC(I-1)+PC(I-1)+PC(I-1)-VC(I-2)
							 | 
						||
| 
								 | 
							
								    4   CONTINUE
							 | 
						||
| 
								 | 
							
								        NV=NCF
							 | 
						||
| 
								 | 
							
								      ENDIF
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       INTERPOLATE TO GET VELOCITY FOR EACH COMPONENT
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      DO 5 I=1,NCM
							 | 
						||
| 
								 | 
							
								      PV(I,2)=0.D0
							 | 
						||
| 
								 | 
							
								      DO 6 J=NCF,2,-1
							 | 
						||
| 
								 | 
							
								      PV(I,2)=PV(I,2)+VC(J)*BUF(J,I,L)
							 | 
						||
| 
								 | 
							
								    6 CONTINUE
							 | 
						||
| 
								 | 
							
								      PV(I,2)=PV(I,2)*VFAC
							 | 
						||
| 
								 | 
							
								    5 CONTINUE
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      RETURN
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      END
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C+++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      SUBROUTINE SPLIT(TT,FR)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C+++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     THIS SUBROUTINE BREAKS A D.P. NUMBER INTO A D.P. INTEGER
							 | 
						||
| 
								 | 
							
								C     AND A D.P. FRACTIONAL PART.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     CALLING SEQUENCE PARAMETERS:
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       TT = D.P. INPUT NUMBER
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       FR = D.P. 2-WORD OUTPUT ARRAY.
							 | 
						||
| 
								 | 
							
								C            FR(1) CONTAINS INTEGER PART
							 | 
						||
| 
								 | 
							
								C            FR(2) CONTAINS FRACTIONAL PART
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C            FOR NEGATIVE INPUT NUMBERS, FR(1) CONTAINS THE NEXT
							 | 
						||
| 
								 | 
							
								C            MORE NEGATIVE INTEGER; FR(2) CONTAINS A POSITIVE FRACTION.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       CALLING SEQUENCE DECLARATIONS
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      DIMENSION FR(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C       MAIN ENTRY -- GET INTEGER AND FRACTIONAL PARTS
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      FR(1)=DINT(TT)
							 | 
						||
| 
								 | 
							
								      FR(2)=TT-FR(1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(TT.GE.0.D0 .OR. FR(2).EQ.0.D0) RETURN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C       MAKE ADJUSTMENTS FOR NEGATIVE INPUT NUMBER
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      FR(1)=FR(1)-1.D0
							 | 
						||
| 
								 | 
							
								      FR(2)=FR(2)+1.D0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      RETURN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      END
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C++++++++++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      SUBROUTINE STATE(ET2,LIST,PV,PNUT)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C++++++++++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C THIS SUBROUTINE READS AND INTERPOLATES THE JPL PLANETARY EPHEMERIS FILE
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     CALLING SEQUENCE PARAMETERS:
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     INPUT:
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C         ET2   DP 2-WORD JULIAN EPHEMERIS EPOCH AT WHICH INTERPOLATION
							 | 
						||
| 
								 | 
							
								C               IS WANTED.  ANY COMBINATION OF ET2(1)+ET2(2) WHICH FALLS
							 | 
						||
| 
								 | 
							
								C               WITHIN THE TIME SPAN ON THE FILE IS A PERMISSIBLE EPOCH.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C                A. FOR EASE IN PROGRAMMING, THE USER MAY PUT THE
							 | 
						||
| 
								 | 
							
								C                   ENTIRE EPOCH IN ET2(1) AND SET ET2(2)=0.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C                B. FOR MAXIMUM INTERPOLATION ACCURACY, SET ET2(1) =
							 | 
						||
| 
								 | 
							
								C                   THE MOST RECENT MIDNIGHT AT OR BEFORE INTERPOLATION
							 | 
						||
| 
								 | 
							
								C                   EPOCH AND SET ET2(2) = FRACTIONAL PART OF A DAY
							 | 
						||
| 
								 | 
							
								C                   ELAPSED BETWEEN ET2(1) AND EPOCH.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C                C. AS AN ALTERNATIVE, IT MAY PROVE CONVENIENT TO SET
							 | 
						||
| 
								 | 
							
								C                   ET2(1) = SOME FIXED EPOCH, SUCH AS START OF INTEGRATION,
							 | 
						||
| 
								 | 
							
								C                   AND ET2(2) = ELAPSED INTERVAL BETWEEN THEN AND EPOCH.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C        LIST   12-WORD INTEGER ARRAY SPECIFYING WHAT INTERPOLATION
							 | 
						||
| 
								 | 
							
								C               IS WANTED FOR EACH OF THE BODIES ON THE FILE.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C                         LIST(I)=0, NO INTERPOLATION FOR BODY I
							 | 
						||
| 
								 | 
							
								C                                =1, POSITION ONLY
							 | 
						||
| 
								 | 
							
								C                                =2, POSITION AND VELOCITY
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C               THE DESIGNATION OF THE ASTRONOMICAL BODIES BY I IS:
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C                         I = 1: MERCURY
							 | 
						||
| 
								 | 
							
								C                           = 2: VENUS
							 | 
						||
| 
								 | 
							
								C                           = 3: EARTH-MOON BARYCENTER
							 | 
						||
| 
								 | 
							
								C                           = 4: MARS
							 | 
						||
| 
								 | 
							
								C                           = 5: JUPITER
							 | 
						||
| 
								 | 
							
								C                           = 6: SATURN
							 | 
						||
| 
								 | 
							
								C                           = 7: URANUS
							 | 
						||
| 
								 | 
							
								C                           = 8: NEPTUNE
							 | 
						||
| 
								 | 
							
								C                           = 9: PLUTO
							 | 
						||
| 
								 | 
							
								C                           =10: GEOCENTRIC MOON
							 | 
						||
| 
								 | 
							
								C                           =11: NUTATIONS IN LONGITUDE AND OBLIQUITY
							 | 
						||
| 
								 | 
							
								C                           =12: LUNAR LIBRATIONS (IF ON FILE)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     OUTPUT:
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C          PV   DP 6 X 11 ARRAY THAT WILL CONTAIN REQUESTED INTERPOLATED
							 | 
						||
| 
								 | 
							
								C               QUANTITIES (OTHER THAN NUTATION, STOERD IN PNUT).  
							 | 
						||
| 
								 | 
							
								C               THE BODY SPECIFIED BY LIST(I) WILL HAVE ITS
							 | 
						||
| 
								 | 
							
								C               STATE IN THE ARRAY STARTING AT PV(1,I).  
							 | 
						||
| 
								 | 
							
								C               (ON ANY GIVEN CALL, ONLY THOSE WORDS IN 'PV' WHICH ARE 
							 | 
						||
| 
								 | 
							
								C                AFFECTED BY THE  FIRST 10 'LIST' ENTRIES, AND BY LIST(12)
							 | 
						||
| 
								 | 
							
								C                IF LIBRATIONS ARE ON THE FILE, ARE SET.  
							 | 
						||
| 
								 | 
							
								C                THE REST OF THE 'PV' ARRAYIS UNTOUCHED.)  
							 | 
						||
| 
								 | 
							
								C               THE ORDER OF COMPONENTS STARTING IN PV(1,I) IS: X,Y,Z,DX,DY,DZ.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C               ALL OUTPUT VECTORS ARE REFERENCED TO THE EARTH MEAN
							 | 
						||
| 
								 | 
							
								C               EQUATOR AND EQUINOX OF J2000 IF THE DE NUMBER IS 200 OR
							 | 
						||
| 
								 | 
							
								C               GREATER; OF B1950 IF THE DE NUMBER IS LESS THAN 200. 
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C               THE MOON STATE IS ALWAYS GEOCENTRIC; THE OTHER NINE STATES 
							 | 
						||
| 
								 | 
							
								C               ARE EITHER HELIOCENTRIC OR SOLAR-SYSTEM BARYCENTRIC, 
							 | 
						||
| 
								 | 
							
								C               DEPENDING ON THE SETTING OF COMMON FLAGS (SEE BELOW).
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C               LUNAR LIBRATIONS, IF ON FILE, ARE PUT INTO PV(K,11) IF
							 | 
						||
| 
								 | 
							
								C               LIST(12) IS 1 OR 2.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C         NUT   DP 4-WORD ARRAY THAT WILL CONTAIN NUTATIONS AND RATES,
							 | 
						||
| 
								 | 
							
								C               DEPENDING ON THE SETTING OF LIST(11).  THE ORDER OF
							 | 
						||
| 
								 | 
							
								C               QUANTITIES IN NUT IS:
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C                        D PSI  (NUTATION IN LONGITUDE)
							 | 
						||
| 
								 | 
							
								C                        D EPSILON (NUTATION IN OBLIQUITY)
							 | 
						||
| 
								 | 
							
								C                        D PSI DOT
							 | 
						||
| 
								 | 
							
								C                        D EPSILON DOT
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C           *   STATEMENT # FOR ERROR RETURN, IN CASE OF EPOCH OUT OF
							 | 
						||
| 
								 | 
							
								C               RANGE OR I/O ERRORS.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     COMMON AREA STCOMX:
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C          KM   LOGICAL FLAG DEFINING PHYSICAL UNITS OF THE OUTPUT
							 | 
						||
| 
								 | 
							
								C               STATES. KM = .TRUE., KM AND KM/SEC
							 | 
						||
| 
								 | 
							
								C                          = .FALSE., AU AND AU/DAY
							 | 
						||
| 
								 | 
							
								C               DEFAULT VALUE = .FALSE.  (KM DETERMINES TIME UNIT
							 | 
						||
| 
								 | 
							
								C               FOR NUTATIONS AND LIBRATIONS.  ANGLE UNIT IS ALWAYS RADIANS.)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C        BARY   LOGICAL FLAG DEFINING OUTPUT CENTER.
							 | 
						||
| 
								 | 
							
								C               ONLY THE 9 PLANETS ARE AFFECTED.
							 | 
						||
| 
								 | 
							
								C                        BARY = .TRUE. =\ CENTER IS SOLAR-SYSTEM BARYCENTER
							 | 
						||
| 
								 | 
							
								C                             = .FALSE. =\ CENTER IS SUN
							 | 
						||
| 
								 | 
							
								C               DEFAULT VALUE = .FALSE.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       PVSUN   DP 6-WORD ARRAY CONTAINING THE BARYCENTRIC POSITION AND
							 | 
						||
| 
								 | 
							
								C               VELOCITY OF THE SUN.
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      SAVE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      INTEGER OLDMAX
							 | 
						||
| 
								 | 
							
								      PARAMETER ( OLDMAX = 400)
							 | 
						||
| 
								 | 
							
								      INTEGER NMAX
							 | 
						||
| 
								 | 
							
								      PARAMETER ( NMAX = 1000)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      DIMENSION ET2(2),PV(6,11),PNUT(4),T(2),PJD(4),BUF(1500),
							 | 
						||
| 
								 | 
							
								     . SS(3),CVAL(NMAX),PVSUN(6)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      INTEGER LIST(12),IPT(3,13)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      LOGICAL FIRST
							 | 
						||
| 
								 | 
							
								      DATA FIRST/.TRUE./
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      CHARACTER*6 TTL(14,3),CNAM(NMAX)
							 | 
						||
| 
								 | 
							
								      CHARACTER*256 NAMFIL
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      LOGICAL KM,BARY
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      COMMON/EPHHDR/CVAL,SS,AU,EMRAT,NUMDE,NCON,IPT
							 | 
						||
| 
								 | 
							
								      COMMON/CHRHDR/CNAM,TTL
							 | 
						||
| 
								 | 
							
								      COMMON/STCOMX/KM,BARY,PVSUN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       ENTRY POINT - 1ST TIME IN, GET POINTER DATA, ETC., FROM EPH FILE
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      IF(FIRST) THEN
							 | 
						||
| 
								 | 
							
								        FIRST=.FALSE.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C ************************************************************************
							 | 
						||
| 
								 | 
							
								C ************************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C THE USER MUST SELECT ONE OF THE FOLLOWING BY DELETING THE 'C' IN COLUMN 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C ************************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C        CALL FSIZER1(NRECL,KSIZE,NRFILE,NAMFIL)
							 | 
						||
| 
								 | 
							
								C        CALL FSIZER2(NRECL,KSIZE,NRFILE,NAMFIL)
							 | 
						||
| 
								 | 
							
								        CALL FSIZER3(NRECL,KSIZE,NRFILE,NAMFIL)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(NRECL .EQ. 0) WRITE(*,*)'  ***** FSIZER IS NOT WORKING *****'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C ************************************************************************
							 | 
						||
| 
								 | 
							
								C ************************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IRECSZ=NRECL*KSIZE
							 | 
						||
| 
								 | 
							
								      NCOEFFS=KSIZE/2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        OPEN(NRFILE,
							 | 
						||
| 
								 | 
							
								     *       FILE=NAMFIL,
							 | 
						||
| 
								 | 
							
								     *       ACCESS='DIRECT',
							 | 
						||
| 
								 | 
							
								     *       FORM='UNFORMATTED',
							 | 
						||
| 
								 | 
							
								     *       RECL=IRECSZ,
							 | 
						||
| 
								 | 
							
								     *       STATUS='OLD')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      READ(NRFILE,REC=1)TTL,(CNAM(K),K=1,OLDMAX),SS,NCON,AU,EMRAT,
							 | 
						||
| 
								 | 
							
								     & ((IPT(I,J),I=1,3),J=1,12),NUMDE,(IPT(I,13),I=1,3)
							 | 
						||
| 
								 | 
							
								     & ,(CNAM(L),L=OLDMAX+1,NCON)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(NCON .LE. OLDMAX)THEN
							 | 
						||
| 
								 | 
							
								        READ(NRFILE,REC=2)(CVAL(I),I=1,OLDMAX)
							 | 
						||
| 
								 | 
							
								      ELSE
							 | 
						||
| 
								 | 
							
								        READ(NRFILE,REC=2)(CVAL(I),I=1,NCON)
							 | 
						||
| 
								 | 
							
								      ENDIF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      NRL=0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      ENDIF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C       ********** MAIN ENTRY POINT **********
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(ET2(1) .EQ. 0.D0) RETURN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      S=ET2(1)-.5D0
							 | 
						||
| 
								 | 
							
								      CALL SPLIT(S,PJD(1))
							 | 
						||
| 
								 | 
							
								      CALL SPLIT(ET2(2),PJD(3))
							 | 
						||
| 
								 | 
							
								      PJD(1)=PJD(1)+PJD(3)+.5D0
							 | 
						||
| 
								 | 
							
								      PJD(2)=PJD(2)+PJD(4)
							 | 
						||
| 
								 | 
							
								      CALL SPLIT(PJD(2),PJD(3))
							 | 
						||
| 
								 | 
							
								      PJD(1)=PJD(1)+PJD(3)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C       ERROR RETURN FOR EPOCH OUT OF RANGE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(PJD(1)+PJD(4).LT.SS(1) .OR. PJD(1)+PJD(4).GT.SS(2)) GO TO 98
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C       CALCULATE RECORD # AND RELATIVE TIME IN INTERVAL
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      NR=IDINT((PJD(1)-SS(1))/SS(3))+3
							 | 
						||
| 
								 | 
							
								      IF(PJD(1).EQ.SS(2)) NR=NR-1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        tmp1 = DBLE(NR-3)*SS(3) + SS(1)
							 | 
						||
| 
								 | 
							
								        tmp2 = PJD(1) - tmp1
							 | 
						||
| 
								 | 
							
								        T(1) = (tmp2 + PJD(4))/SS(3)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C       READ CORRECT RECORD IF NOT IN CORE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(NR.NE.NRL) THEN
							 | 
						||
| 
								 | 
							
								        NRL=NR
							 | 
						||
| 
								 | 
							
								        READ(NRFILE,REC=NR,ERR=99)(BUF(K),K=1,NCOEFFS)
							 | 
						||
| 
								 | 
							
								      ENDIF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(KM) THEN
							 | 
						||
| 
								 | 
							
								      T(2)=SS(3)*86400.D0
							 | 
						||
| 
								 | 
							
								      AUFAC=1.D0
							 | 
						||
| 
								 | 
							
								      ELSE
							 | 
						||
| 
								 | 
							
								      T(2)=SS(3)
							 | 
						||
| 
								 | 
							
								      AUFAC=1.D0/AU
							 | 
						||
| 
								 | 
							
								      ENDIF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C   INTERPOLATE SSBARY SUN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      CALL INTERP(BUF(IPT(1,11)),T,IPT(2,11),3,IPT(3,11),2,PVSUN)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      DO I=1,6
							 | 
						||
| 
								 | 
							
								      PVSUN(I)=PVSUN(I)*AUFAC
							 | 
						||
| 
								 | 
							
								      ENDDO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C   CHECK AND INTERPOLATE WHICHEVER BODIES ARE REQUESTED
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      DO 4 I=1,10
							 | 
						||
| 
								 | 
							
								      IF(LIST(I).EQ.0) GO TO 4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      CALL INTERP(BUF(IPT(1,I)),T,IPT(2,I),3,IPT(3,I),
							 | 
						||
| 
								 | 
							
								     & LIST(I),PV(1,I))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      DO J=1,6
							 | 
						||
| 
								 | 
							
								       IF(I.LE.9 .AND. .NOT.BARY) THEN
							 | 
						||
| 
								 | 
							
								       PV(J,I)=PV(J,I)*AUFAC-PVSUN(J)
							 | 
						||
| 
								 | 
							
								       ELSE
							 | 
						||
| 
								 | 
							
								       PV(J,I)=PV(J,I)*AUFAC
							 | 
						||
| 
								 | 
							
								       ENDIF
							 | 
						||
| 
								 | 
							
								      ENDDO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   4  CONTINUE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C       DO NUTATIONS IF REQUESTED (AND IF ON FILE)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(LIST(11).GT.0 .AND. IPT(2,12).GT.0)
							 | 
						||
| 
								 | 
							
								     * CALL INTERP(BUF(IPT(1,12)),T,IPT(2,12),2,IPT(3,12),
							 | 
						||
| 
								 | 
							
								     * LIST(11),PNUT)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C       GET LIBRATIONS IF REQUESTED (AND IF ON FILE)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(LIST(12).GT.0 .AND. IPT(2,13).GT.0)
							 | 
						||
| 
								 | 
							
								     * CALL INTERP(BUF(IPT(1,13)),T,IPT(2,13),3,IPT(3,13),
							 | 
						||
| 
								 | 
							
								     * LIST(12),PV(1,11))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      RETURN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  98  WRITE(*,198)ET2(1)+ET2(2),SS(1),SS(2)
							 | 
						||
| 
								 | 
							
								 198  FORMAT(' ***  Requested JED,',f12.2,
							 | 
						||
| 
								 | 
							
								     * ' not within ephemeris limits,',2f12.2,'  ***')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      STOP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   99 WRITE(*,'(2F12.2,A80)')ET2,'ERROR RETURN IN STATE'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      STOP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      END
							 | 
						||
| 
								 | 
							
								C+++++++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      SUBROUTINE CONST(NAM,VAL,SSS,N)
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C+++++++++++++++++++++++++++++
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     THIS ENTRY OBTAINS THE CONSTANTS FROM THE EPHEMERIS FILE
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C     CALLING SEQEUNCE PARAMETERS (ALL OUTPUT):
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       NAM = CHARACTER*6 ARRAY OF CONSTANT NAMES
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       VAL = D.P. ARRAY OF VALUES OF CONSTANTS
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C       SSS = D.P. JD START, JD STOP, STEP OF EPHEMERIS
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								C         N = INTEGER NUMBER OF ENTRIES IN 'NAM' AND 'VAL' ARRAYS
							 | 
						||
| 
								 | 
							
								C
							 | 
						||
| 
								 | 
							
								      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      SAVE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      INTEGER NMAX
							 | 
						||
| 
								 | 
							
								      PARAMETER (NMAX = 1000)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      CHARACTER*6 NAM(*),TTL(14,3),CNAM(NMAX)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      DOUBLE PRECISION VAL(*),SSS(3),SS(3),CVAL(NMAX),ZIPS(2)
							 | 
						||
| 
								 | 
							
								      DOUBLE PRECISION PVST(6,11),PNUT(4)
							 | 
						||
| 
								 | 
							
								      DATA ZIPS/2*0.d0/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      INTEGER IPT(3,13),DENUM,LIST(12)
							 | 
						||
| 
								 | 
							
								      logical first
							 | 
						||
| 
								 | 
							
								      data first/.true./
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      COMMON/EPHHDR/CVAL,SS,AU,EMRAT,DENUM,NCON,IPT
							 | 
						||
| 
								 | 
							
								      COMMON/CHRHDR/CNAM,TTL
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								C  CALL STATE TO INITIALIZE THE EPHEMERIS AND READ IN THE CONSTANTS
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      IF(FIRST) CALL STATE(ZIPS,LIST,PVST,PNUT)
							 | 
						||
| 
								 | 
							
								      first=.false.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      N=NCON
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      DO I=1,3
							 | 
						||
| 
								 | 
							
								        SSS(I)=SS(I)
							 | 
						||
| 
								 | 
							
								      ENDDO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      DO I=1,N
							 | 
						||
| 
								 | 
							
								        NAM(I)=CNAM(I)
							 | 
						||
| 
								 | 
							
								        VAL(I)=CVAL(I)
							 | 
						||
| 
								 | 
							
								      ENDDO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      RETURN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      END
							 |