* 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 Doy integer time(2) ! 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) call ForeignArg(' ',iVar,cVar,cArg) call ForeignI4Arg(cArg,'ephemeris',2,IEPT) TS = 2452541.5 TF = 2452541.5 DELT = 1.0 IDEEP = 0 ! READ IN MEAN ELEMENTS FROM 2 CARD T(TRANS) OR G(INTERN) FORMAT cFile = 'coriolis_orbital_elements.txt' iRecl = 0 if (.not. bOpenFile(OPN__TEXT+OPN__REOPEN,iU,cFile,iRecl)) continue WRITE (*,'(1X,A4,7H TSINCE,14X,1HX,12X,1HY,12X,1HZ,12X,4HXDOT,11X,4HYDOT,11X,4HZDOT)') CSET(IEPT) 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)') Doy iYr = 2000+iYr call Time2Day8(1,time,Doy) call Time2YDoy(1,time,iYr,time) call Time2JD(0,time,time) call Time2Day8(0,time,Doy) 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) IF((TWOPI/XNODP/XMNPDA) .GE. 0.15625) IDEEP=1 BSTAR = BSTAR*(10.**IBEXP)/AE TT = TS IFLAG = 1 IF(IDEEP .EQ. 1 .AND. (IEPT .EQ. 1 .OR. IEPT .EQ. 2 .OR. IEPT .EQ. 4)) & WRITE(6,'(A)') ' SHOULD USE DEEP SPACE EPHEMERIS' IF(IDEEP .EQ. 0 .AND. (IEPT .EQ. 3 .OR. IEPT .EQ. 5)) & WRITE(6,'(A)') ' SHOULD USE NEAR EARTH EPHEMERIS' DO WHILE (TT .LE. TF) TSINCE = (TT-doy)*1440.0 IF (IEPT .EQ. 1) THEN CALL SGP(IFLAG,TSINCE) ELSE IF (IEPT .EQ. 2) THEN CALL SGP4(IFLAG,TSINCE) ELSE IF (IEPT .EQ. 3) THEN CALL SDP4(IFLAG,TSINCE) ELSE IF (IEPT .EQ. 4) THEN CALL SGP8(IFLAG,TSINCE) ELSE IF (IEPT .EQ. 5) THEN CALL SDP8(IFLAG,TSINCE) END IF X =X *XKMPER/AE Y =Y *XKMPER/AE Z =Z *XKMPER/AE XDOT=XDOT*XKMPER/AE*XMNPDA/86400. YDOT=YDOT*XKMPER/AE*XMNPDA/86400. ZDOT=ZDOT*XKMPER/AE*XMNPDA/86400. WRITE (*,'(F17.8,6F15.8)') TSINCE,X,Y,Z,XDOT,YDOT,ZDOT TT=TT+DELT END DO if (0 .eq. 0) stop read (iU,'(A)',iostat=I) cStr end do END