* DRIVER 3 NOV 80 * WGS-72 PHYSICAL AND GEOPOTENTIAL CONSTANTS * CK2= .5*J2*AE**2 CK4=-.375*J4*AE**4 program coriolis DOUBLE PRECISION EPOCH,DS50 COMMON/E1/XMO,XNODEO,OMEGAO,EO,XINCL,XNO,XNDT2O,XNDD6O,BSTAR,X,Y,Z,XDOT,YDOT,ZDOT,EPOCH,DS50 COMMON/C1/CK2,CK4,E6A,QOMS2T,S,TOTHRD,XJ3,XKE,XKMPER,XMNPDA,AE COMMON/C2/DE2RA,PI,PIO2,TWOPI,X3PIO2 DATA IHG/1HG/ DATA DE2RA,E6A,PI,PIO2,QO,SO,TOTHRD,TWOPI,X3PIO2,XJ2,XJ3,XJ4,XKE,XKMPER,XMNPDA,AE & /.174532925E-1,1.E-6,3.14159265,1.57079633,120.0,78.0,.66666667,6.2831853, & 4.71238898,1.082616E-3,-.253881E-5,-1.65597E-6,.743669161E-1,6378.135,1440.,1./ CHARACTER ABUF(2)*80 CHARACTER CSET(5)*4 /'SGP ','SGP4','SDP4','SGP8','SDP8'/ include 'openfile.h' logical bOpenFile character cStr*80 character cFile*80 parameter (nVar=1) character cVar(nVar)*20 character cArg*20 double precision TBeg, TEnd, DelT, JD, TT integer time(2) logical bReset logical ForeignArgSet ! SELECT EPHEMERIS TYPE AND OUTPUT TIMES CK2=.5*XJ2*AE**2 CK4=-.375*XJ4*AE**4 QOMS2T=((QO-SO)*AE/XKMPER)**4 S=AE*(1.+SO/XKMPER) iVar = nVar call ForeignArg(' ',iVar,cVar,cArg) call ForeignI4Arg(cArg,'ephemeris',2,IEPT0) bReset = ForeignArgSet(cArg,'reset_flag') TBeg = 2452541.5d0 TEnd = 2452544.5d0 DelT = 1.0d0 ! READ IN MEAN ELEMENTS FROM 2 CARD T(TRANS) OR G(INTERN) FORMAT cFile = 'tle.txt' iRecl = 0 if (.not. bOpenFile(OPN__TEXT+OPN__REOPEN,iU,cFile,iRecl)) continue WRITE (*,'(10X,5H TIME,12X,1HX,14X,1HY,14X,1HZ,9X,4HXDOT,6X,4HYDOT,6X,4HZDOT)') read (iU,'(A)',iostat=I) cStr do while (I .eq. 0) READ (iU,'(A)') cStr READ (cStr,'(18X,D14.8,1X,F10.8,2(1X,F6.5,I2))') EPOCH,XNDT2O,XNDD6O,IEXP,BSTAR,IBEXP READ (iU,'(7X,2(1X,F8.4),1X,F7.7,2(1X,F8.4),1X,F11.8)') XINCL,XNODEO,EO,OMEGAO,XMO,XNO READ (cStr(19:20),'(I2.2)') iYr READ (cStr(21:32),'(F12.8)') JD iYr = 2000+iYr call Time2Day8(1,time,JD) call Time2YDoy(1,time,iYr,time) call Time2JD(0,time,time) call Time2Day8(0,time,JD) XNDD6O=XNDD6O*(10.**IEXP) XNODEO=XNODEO*DE2RA OMEGAO=OMEGAO*DE2RA XMO=XMO*DE2RA XINCL=XINCL*DE2RA TEMP=TWOPI/XMNPDA/XMNPDA XNO=XNO*TEMP*XMNPDA XNDT2O=XNDT2O*TEMP XNDD6O=XNDD6O*TEMP/XMNPDA ! INPUT CHECK FOR PERIOD VS EPHEMERIS SELECTED ! PERIOD GE 225 MINUTES IS DEEP SPACE A1=(XKE/XNO)**TOTHRD TEMP=1.5*CK2*(3.*COS(XINCL)**2-1.)/(1.-EO*EO)**1.5 DEL1=TEMP/(A1*A1) AO=A1*(1.-DEL1*(.5*TOTHRD+DEL1*(1.+134./81.*DEL1))) DELO=TEMP/(AO*AO) XNODP=XNO/(1.+DELO) IDEEP = 0 IF((TWOPI/XNODP/XMNPDA) .GE. 0.15625) IDEEP=1 BSTAR = BSTAR*(10.**IBEXP)/AE TT = TBeg IEPT = IEPT0 IF (IEPT .NE. 0) THEN IF(IDEEP .EQ. 1 .AND. (IEPT .EQ. 1 .OR. IEPT .EQ. 2 .OR. IEPT .EQ. 4)) THEN !IEPT = IEPT+1 WRITE(6,'(2A)') ' SWITCHING TO DEEP SPACE EPHEMERIS ',CSET(IEPT) ELSE IF(IDEEP .EQ. 0 .AND. (IEPT .EQ. 3 .OR. IEPT .EQ. 5)) THEN !IEPT = IEPT-1 WRITE(6,'(2A)') ' SWITCHING TO NEAR EARTH EPHEMERIS ',CSET(IEPT) END IF END IF IFLAG_SGP = 1 IFLAG_SGP4 = 1 IFLAG_SDP4 = 1 IFLAG_SGP8 = 1 IFLAG_SDP8 = 1 DO WHILE (TT .LE. TEnd) TSINCE = sngl((TT-JD)*1440d0) IF (IEPT .EQ. 0) THEN CALL SGP(IFLAG_SGP ,TSINCE) CALL TLE_SHOW(CSET(1),JD,TT,X,Y,Z,XDOT,YDOT,ZDOT,XKMPER,AE,XMNPDA) CALL SGP4(IFLAG_SGP4,TSINCE) CALL TLE_SHOW(CSET(2),JD,TT,X,Y,Z,XDOT,YDOT,ZDOT,XKMPER,AE,XMNPDA) !CALL SDP4(IFLAG_SDP4,TSINCE) !CALL TLE_SHOW(CSET(3),JD,TT,X,Y,Z,XDOT,YDOT,ZDOT,XKMPER,AE,XMNPDA) CALL SGP8(IFLAG_SGP8,TSINCE) CALL TLE_SHOW(CSET(4),JD,TT,X,Y,Z,XDOT,YDOT,ZDOT,XKMPER,AE,XMNPDA) !CALL SDP8(IFLAG_SDP8,TSINCE) !CALL TLE_SHOW(CSET(5),JD,TT,X,Y,Z,XDOT,YDOT,ZDOT,XKMPER,AE,XMNPDA) ELSE IF (IEPT .EQ. 1) THEN CALL SGP(IFLAG_SGP,TSINCE) CALL TLE_SHOW(CSET(IEPT),JD