FUNCTION NV1INIgoes +(IFUNC,IARR) INTEGER IARR(*) CHARACTER*2 CLLSW COMMON/NAVCOMgoesnv1/ +NAVDAY,LINTOT,DEGLIN,IELTOT,DEGELE,SPINRA,IETIMY,IET &IMH,SEMIMA,OECCEN,ORBINC,PERHEL,ASNODE,NOPCLN,DECLIN,RASCEN,PICLIN &,PRERAT,PREDIR,PITCH,YAW,ROLL,SKEW COMMON /BETCOMgoesnv1/ +IAJUST,IBTCON,NEGBET,ISEANG COMMON /VASCOMgoesnv1/ +SCAN1,TIME1,SCAN2,TIME2 COMMON /NAVINIgoesnv1/ + & EMEGA,AB,ASQ,BSQ,R,RSQ, & RDPDG, & NUMSEN,TOTLIN,RADLIN, & TOTELE,RADELE,PICELE, & CPITCH,CYAW,CROLL, & PSKEW, & RFACT,ROASIN,TMPSCL, & B11,B12,B13,B21,B22,B23,B31,B32,B33, & GAMMA,GAMDOT, & ROTM11,ROTM13,ROTM21,ROTM23,ROTM31,ROTM33, & PICTIM,XREF COMMON /NVUNITgoesnv1/ + LLSW,IOLD INCLUDE 'hex80.inc' DATA MISVAL/ HEX80 / DATA JINIT/0/ IF (JINIT.EQ.0) THEN JINIT=1 LLSW=0 JDAYSV=-1 JTIMSV=-1 IOLD=0 ENDIF IF (IFUNC.EQ.2) THEN CALL MOVWC(IARR,CLLSW) IF (CLLSW.EQ.'LL') LLSW=0 IF (CLLSW.EQ.'XY') LLSW=1 NV1INIgoes +=0 RETURN ENDIF JTYPE=IARR(1) IF (JTYPE.NE.LIT('GOES')) GOTO 90 JDAY=IARR(2) JTIME=IARR(3) IF(JDAY.EQ.JDAYSV.AND.JTIME.EQ.JTIMSV) GO TO 10 NAVDAY=MOD(JDAY,100000) DO 20 N=7,12 IF(IARR(N).GT.0) GO TO 25 20 CONTINUE GO TO 90 25 IETIMY=ICON1goesnv1 +(IARR(5)) IETIMH=100*(IARR(6)/100)+IROUND(.6*MOD(IARR(6),100)) SEMIMA=FLOAT(IARR(7))/100.0 OECCEN=FLOAT(IARR(8))/1000000.0 ORBINC=FLOAT(IARR(9))/1000.0 XMEANA=FLOAT(IARR(10))/1000.0 PERHEL=FLOAT(IARR(11))/1000.0 ASNODE=FLOAT(IARR(12))/1000.0 CALL EPOCHgoesnv1 +(IETIMY,IETIMH,SEMIMA,OECCEN,XMEANA) IF (IARR(5).EQ.0) GOTO 90 DECLIN=FLALO(IARR(13)) RASCEN=FLALO(IARR(14)) PICLIN=IARR(15) IF (IARR(15).GE.1000000) PICLIN=PICLIN/10000. IF (IARR(13).EQ.0.AND.IARR(14).EQ.0.AND.IARR(15).EQ.0) & GOTO 90 SPINRA=IARR(16)/1000.0 IF(IARR(16).NE.0.AND.SPINRA.LT.300.0) SPINRA=60000.0/SPINRA IF (IARR(16).EQ.0) GOTO 90 DEGLIN=FLALO(IARR(17)) LINTOT=IARR(18) DEGELE=FLALO(IARR(19)) IELTOT=IARR(20) PITCH=FLALO(IARR(21)) YAW=FLALO(IARR(22)) ROLL=FLALO(IARR(23)) SKEW=IARR(29)/100000.0 IF (IARR(29).EQ.MISVAL) SKEW=0. IAJUST=IARR(25) ISEANG=IARR(28) IBTCON=6289920 NEGBET=3144960 EMEGA=.26251617 AB=40546851.22 ASQ=40683833.48 BSQ=40410330.18 R=6371.221 RSQ=R*R RDPDG=1.745329252E-02 NUMSEN=MOD(LINTOT/100000,100) IF(NUMSEN.LT.1)NUMSEN=1 TOTLIN=NUMSEN*MOD(LINTOT,100000) RADLIN=RDPDG*DEGLIN/(TOTLIN-1.0) TOTELE=IELTOT RADELE=RDPDG*DEGELE/(TOTELE-1.0) PICELE=(1.0+TOTELE)/2.0 CPITCH=RDPDG*PITCH CYAW=RDPDG*YAW CROLL=RDPDG*ROLL PSKEW=ATAN2(SKEW,RADLIN/RADELE) STP=SIN(CPITCH) CTP=COS(CPITCH) STY=SIN(CYAW-PSKEW) CTY =COS(CYAW-PSKEW) STR=SIN(CROLL) CTR=COS(CROLL) ROTM11=CTR*CTP ROTM13=STY*STR*CTP+CTY*STP ROTM21=-STR ROTM23=STY*CTR ROTM31=-CTR*STP ROTM33=CTY*CTP-STY*STR*STP RFACT=ROTM31**2+ROTM33**2 ROASIN=ATAN2(ROTM31,ROTM33) TMPSCL=SPINRA/3600000.0 DEC=DECLIN*RDPDG SINDEC=SIN(DEC) COSDEC=COS(DEC) RAS=RASCEN*RDPDG SINRAS=SIN(RAS) COSRAS=COS(RAS) B11=-SINRAS B12=COSRAS B13=0.0 B21=-SINDEC*COSRAS B22=-SINDEC*SINRAS B23=COSDEC B31=COSDEC*COSRAS B32=COSDEC*SINRAS B33=SINDEC XREF=RAERAC(NAVDAY,0,0.0)*RDPDG PICTIM=FLALO(JTIME) GAMMA=FLOAT(IARR(39))/100. GAMDOT=FLOAT(IARR(40))/100. ISS=JDAY/100000 IF ((ISS.GT.25.OR.ISS.EQ.12).AND.IARR(31).GT.0) THEN SCAN1=FLOAT(IARR(31)) TIME1=FLALO(IARR(32)) SCAN2=FLOAT(IARR(35)) TIME2=FLALO(IARR(36)) ELSE SCAN1=1. TIME1=FLALO(JTIME) SCAN2=FLOAT(MOD(LINTOT,100000)) TIME2=TIME1+SCAN2*TMPSCL ENDIF IOLD=0 10 CONTINUE JDAYSV=JDAY JTIMSV=JTIME NV1INIgoes +=0 RETURN 90 NV1INIgoes +=-1 RETURN END FUNCTION NV1SAEgoes +(XLIN,XELE,XDUM,XPAR,YPAR,ZPAR) COMMON/NAVCOMgoesnv1/ +NAVDAY,LINTOT,DEGLIN,IELTOT,DEGELE,SPINRA,IETIMY,IET &IMH,SEMIMA,OECCEN,ORBINC,PERHEL,ASNODE,NOPCLN,DECLIN,RASCEN,PICLIN &,PRERAT,PREDIR,PITCH,YAW,ROLL,SKEW COMMON/NAVINIgoesnv1/ + & EMEGA,AB,ASQ,BSQ,R,RSQ, & RDPDG, & NUMSEN,TOTLIN,RADLIN, & TOTELE,RADELE,PICELE, & CPITCH,CYAW,CROLL, & PSKEW, & RFACT,ROASIN,TMPSCL, & B11,B12,B13,B21,B22,B23,B31,B32,B33, & GAMMA,GAMDOT, & ROTM11,ROTM13,ROTM21,ROTM23,ROTM31,ROTM33, & PICTIM,XREF COMMON /NVUNITgoesnv1/ + LLSW,IOLD DATA PI/3.14159265/ ILIN=IROUND(XLIN) PARLIN=(ILIN-1)/NUMSEN+1 FRAMET=TMPSCL*PARLIN SAMTIM=FRAMET+PICTIM CALL SATVECgoesnv1 +(SAMTIM,XSAT,YSAT,ZSAT) YLIN=(XLIN-PICLIN)*RADLIN YELE=(XELE-PICELE+GAMMA+GAMDOT*SAMTIM)*RADELE XCOR=B11*XSAT+B12*YSAT+B13*ZSAT YCOR=B21*XSAT+B22*YSAT+B23*ZSAT ROT=ATAN2(YCOR,XCOR)+PI YELE=YELE-ROT COSLIN=COS(YLIN ) SINLIN=SIN(YLIN) SINELE=SIN(YELE) COSELE=COS(YELE) ELI=ROTM11*COSLIN-ROTM13*SINLIN EMI=ROTM21*COSLIN-ROTM23*SINLIN ENI=ROTM31*COSLIN-ROTM33*SINLIN TEMP=ELI ELI=COSELE*ELI+SINELE*EMI EMI=-SINELE*TEMP+COSELE*EMI ELO=B11*ELI+B21*EMI+B31*ENI EMO=B12*ELI+B22*EMI+B32*ENI ENO=B13*ELI+B23*EMI+B33*ENI BASQ=BSQ/ASQ ONEMSQ=1.0-BASQ AQ=BASQ+ONEMSQ*ENO**2 BQ=2.0*((ELO*XSAT+EMO*YSAT)*BASQ+ENO*ZSAT) CQ=(XSAT**2+YSAT**2)*BASQ+ZSAT**2-BSQ RAD=BQ**2-4.0*AQ*CQ IF(RAD.LT.1.0)GO TO 2 S=-(BQ+SQRT(RAD))/(2.0*AQ) X=XSAT+ELO*S Y=YSAT+EMO*S Z=ZSAT+ENO*S CT=COS(EMEGA*SAMTIM+XREF) ST=SIN(EMEGA*SAMTIM+XREF) X1=CT*X+ST*Y Y1=-ST*X+CT*Y IF (LLSW.EQ.0) THEN CALL NXYZLLgoesnv1 +(X1,Y1,Z,XPAR,YPAR) ZPAR=0. ELSE XPAR=X1 YPAR=Y1 ZPAR=Z ENDIF NV1SAEgoes +=0 RETURN 2 NV1SAEgoes +=-1 RETURN END FUNCTION NV1EASgoes +(XPAR,YPAR,ZPAR,XLIN,XELE,XDUM) COMMON/NAVINIgoesnv1/ + & EMEGA,AB,ASQ,BSQ,R,RSQ, & RDPDG, & NUMSEN,TOTLIN,RADLIN, & TOTELE,RADELE,PICELE, & CPITCH,CYAW,CROLL, & PSKEW, & RFACT,ROASIN,TMPSCL, & B11,B12,B13,B21,B22,B23,B31,B32,B33, & GAMMA,GAMDOT, & ROTM11,ROTM13,ROTM21,ROTM23,ROTM31,ROTM33, & PICTIM,XREF COMMON/NAVCOMgoesnv1/ +NAVDAY,LINTOT,DEGLIN,IELTOT,DEGELE,SPINRA,IETIMY,IET &IMH,SEMIMA,OECCEN,ORBINC,PERHEL,ASNODE,NOPCLN,DECLIN,RASCEN,PICLIN &,PRERAT,PREDIR,PITCH,YAW,ROLL,SKEW COMMON/VASCOMgoesnv1/ +SCAN1,TIME1,SCAN2,TIME2 COMMON /NVUNITgoesnv1/ + LLSW,IOLD DATA OLDLIN/910./,ORBTIM/-99999./ NV1EASgoes +=0 IF (LLSW.EQ.0) THEN IF (ABS(XPAR).GT.90.) THEN NV1EASgoes +=-1 RETURN ENDIF CALL NLLXYZgoesnv1 +(XPAR,YPAR,X1,Y1,Z) ELSE X1=XPAR Y1=YPAR Z=ZPAR ENDIF XDUM=0.0 SAMTIM=TIME1 DO 50 I=1,2 IF(ABS(SAMTIM-ORBTIM).LT.0.0005) GO TO 10 CALL SATVECgoesnv1 +(SAMTIM,XSAT,YSAT,ZSAT) ORBTIM=SAMTIM XHT=SQRT(XSAT**2+YSAT**2+ZSAT**2) 10 CT=COS(EMEGA*SAMTIM+XREF) ST=SIN(EMEGA*SAMTIM+XREF) X=CT*X1-ST*Y1 Y= ST*X1+CT*Y1 VCSTE1=X-XSAT VCSTE2=Y-YSAT VCSTE3=Z-ZSAT VCSES3=B31*VCSTE1+B32*VCSTE2+B33*VCSTE3 ZNORM=SQRT(VCSTE1**2+VCSTE2**2+VCSTE3**2) X3=VCSES3/ZNORM UMV=ATAN2(X3,SQRT(RFACT-X3**2))-ROASIN XLIN=PICLIN-UMV/RADLIN PARLIN=IFIX(XLIN-1.0)/NUMSEN IF(I.EQ.2) GO TO 50 SAMTIM=TIME2 OLDLIN=XLIN 50 CONTINUE SCNNUM=(IFIX(OLDLIN+XLIN)/2.0-1.0)/NUMSEN SCNFRC=(SCNNUM-SCAN1)/(SCAN2-SCAN1) XLIN=OLDLIN+SCNFRC*(XLIN-OLDLIN) SAMTIM=TIME1+TMPSCL*(SCNNUM-SCAN1) CALL SATVECgoesnv1 +(SAMTIM,XSAT,YSAT,ZSAT) COSA=X*XSAT+Y*YSAT+Z*ZSAT CTST=0.0001*R*XHT+RSQ IF(COSA.LT.CTST) NV1EASgoes +=-1 XSATS1=B11*XSAT+B12*YSAT+B13*ZSAT YSATS2=B21*XSAT+B22*YSAT+B23*ZSAT CT=COS(EMEGA*SAMTIM+XREF) ST=SIN(EMEGA*SAMTIM+XREF) X=CT*X1-ST*Y1 Y= ST*X1+CT*Y1 VCSTE1=X-XSAT VCSTE2=Y-YSAT VCSTE3=Z-ZSAT VCSES1=B11*VCSTE1+B12*VCSTE2+B13*VCSTE3 VCSES2=B21*VCSTE1+B22*VCSTE2+B23*VCSTE3 VCSES3=B31*VCSTE1+B32*VCSTE2+B33*VCSTE3 XNORM=SQRT(ZNORM**2-VCSES3**2) YNORM=SQRT(XSATS1**2+YSATS2**2) ZNORM=SQRT(VCSTE1**2+VCSTE2**2+VCSTE3**2) X3=VCSES3/ZNORM UMV=ATAN2(X3,SQRT(RFACT-X3**2))-ROASIN SLIN=SIN(UMV) CLIN=COS(UMV) U=ROTM11*CLIN+ROTM13*SLIN V=ROTM21*CLIN+ROTM23*SLIN XELE=PICELE+ASIN((XSATS1*VCSES2-YSATS2*VCSES1)/(XNORM*YNORM))/RADE &LE XELE=XELE+ATAN2(V,U)/RADELE XELE=XELE-GAMMA-GAMDOT*SAMTIM RETURN END FUNCTION NV1OPTgoes +(IFUNC,XIN,XOUT) REAL XIN(*),XOUT(*) CHARACTER*4 CLIT,CFUNC COMMON /NAVINIgoesnv1/ + & EMEGA,AB,ASQ,BSQ,R,RSQ, & RDPDG, & NUMSEN,TOTLIN,RADLIN, & TOTELE,RADELE,PICELE, & CPITCH,CYAW,CROLL, & PSKEW, & RFACT,ROASIN,TMPSCL, & B11,B12,B13,B21,B22,B23,B31,B32,B33, & GAMMA,GAMDOT, & ROTM11,ROTM13,ROTM21,ROTM23,ROTM31,ROTM33, & PICTIM,XREF DATA LASDAY/-1/,LASTIM/-1/ DATA A/6378.388/,B/6356.912/,RR/6371.221/ CFUNC=CLIT(IFUNC) NV1OPTgoes +=0 IF(CFUNC.EQ.'SPOS') THEN INORB=0 NTIME=M0ITIME(PICTIM) CALL SATPOSgoesnv1 +(INORB,NTIME,X,Y,Z) CALL NXYZLLgoesnv1 +(X,Y,Z,XOUT(1),XOUT(2)) ELSE IF(CFUNC.EQ.'ANG ') THEN JDAY=IROUND(XIN(1)) JTIME=M0ITIME(XIN(2)) FLAT=XIN(3) FLON=XIN(4) IF(JDAY.NE.LASDAY.OR.JTIME.NE.LASTIM) THEN CALL SOLARP(JDAY,JTIME,GHA,DEC,XLAT,XLON) LASDAY=JDAY LASTIM=JTIME ENDIF CALL ANGLESgoesnv1 +(JDAY,JTIME,FLAT,FLON,GHA,DEC,ZENLOC,SZEN,RELANG) XOUT(1)=ZENLOC XOUT(2)=SZEN XOUT(3)=RELANG ELSE IF(CFUNC.EQ.'HGT ') THEN HGT=XIN(1) ASQ=(A+HGT)*(A+HGT) BSQ=(B+HGT)*(B+HGT) AB=(A+HGT)*(B+HGT) R=RR+HGT RSQ=R*R ELSE NV1OPTgoes +=1 ENDIF RETURN END FUNCTION ICON1goesnv1 +(YYMMDD) IMPLICIT INTEGER(A-Z) DIMENSION NUM(12) DATA NUM/0,31,59,90,120,151,181,212,243,273,304,334/ YEAR=MOD(YYMMDD/10000,100) MONTH=MOD(YYMMDD/100,100) DAY=MOD(YYMMDD,100) IF(MONTH.LT.0.OR.MONTH.GT.12)MONTH=1 JULDAY=DAY+NUM(MONTH) IF(MOD(YEAR,4).EQ.0.AND.MONTH.GT.2) JULDAY=JULDAY+1 ICON1goesnv1 +=1000*YEAR+JULDAY RETURN END SUBROUTINE EPOCHgoesnv1 +(IETIMY,IETIMH,SEMIMA,OECCEN,XMEANA) PARAMETER (PI=3.14159265) PARAMETER (RDPDG=PI/180.0) PARAMETER (RE=6378.388) PARAMETER (GRACON=0.07436574) LEAPYR(IY)=366-(MOD(IY,4)+3)/4 XMMC=GRACON*SQRT(RE/SEMIMA)**3 XMANOM=RDPDG*XMEANA TIME=(XMANOM-OECCEN*SIN(XMANOM))/(60.0*XMMC) TIME1=FLALO(IETIMH) TIME=TIME1-TIME IDAY=0 IF(TIME.GT.48.0)GO TO 8 IF(TIME.GT.24.0)GO TO 1 IF(TIME.LT.-24.0)GO TO 2 IF(TIME.LT.0.0)GO TO 3 GO TO 4 8 TIME=TIME-48.0 IDAY=2 GO TO 4 1 TIME=TIME-24.0 IDAY=1 GO TO 4 2 TIME=TIME+48.0 IDAY=-2 GO TO 4 3 TIME=TIME+24.0 IDAY=-1 4 IETIMH=M0ITIME(TIME) IF(IDAY.EQ.0)RETURN JYEAR=MOD(IETIMY/1000,100) jyear=jyear+1000 JDAY=MOD(IETIMY,1000) JDAY=JDAY+IDAY IF(JDAY.LT.1)GO TO 5 JTOT=LEAPYR(JYEAR) IF(JDAY.GT.JTOT)GO TO 6 GO TO 7 5 JYEAR=JYEAR-1 JDAY=LEAPYR(JYEAR)+JDAY GO TO 7 6 JYEAR=JYEAR+1 JDAY=JDAY-JTOT 7 continue jyear=mod(jyear,100) IETIMY=1000*JYEAR+JDAY RETURN END SUBROUTINE SATVECgoesnv1 +(SAMTIM,X,Y,Z) DOUBLE PRECISION TWOPI,PI720,DE,TE,DRA,TRA,DNAV,TDIFRA,TDIFE DOUBLE PRECISION PI,RDPDG,RE,GRACON,SOLSID,SHA DOUBLE PRECISION DIFTIM,ECANM1,ECANOM,XMANOM DOUBLE PRECISION DABS,DSQRT,DSIN,DCOS COMMON/NAVCOMgoesnv1/ +NAVDAY,LINTOT,DEGLIN,IELTOT,DEGELE,SPINRA,IETIMY,IET &IMH,SEMIMA,OECCEN,ORBINC,PERHEL,ASNODE,NOPCLN,DECLIN,RASCEN,PICLIN &,PRERAT,PREDIR,PITCH,YAW,ROLL,SKEW COMMON /NVUNITgoesnv1/ + LLSW,IOLD DATA NAVSAV/0/ IF(IOLD.EQ.1) GO TO 10 IOLD=1 NAVSAV=NAVDAY PI=3.14159265D0 TWOPI=2.0*PI PI720=PI/720. RDPDG=PI/180.0 RE=6378.388 GRACON=.07436574D0 SOLSID=1.00273791D0 SHA=100.26467D0 SHA=RDPDG*SHA IRAYD=74001 IRAHMS=0 O=RDPDG*ORBINC P=RDPDG*PERHEL A=RDPDG*ASNODE SO=SIN(O) CO=COS(O) SP=SIN(P)*SEMIMA CP=COS(P)*SEMIMA SA=SIN(A) CA=COS(A) PX=CP*CA-SP*SA*CO PY=CP*SA+SP*CA*CO PZ=SP*SO QX=-SP*CA-CP*SA*CO QY=-SP*SA+CP*CA*CO QZ=CP*SO SROME2=SQRT(1.0-OECCEN)*SQRT(1.0+OECCEN) XMMC=GRACON*RE*DSQRT(RE/SEMIMA)/SEMIMA IEY=MOD(IETIMY/1000,100) IED=MOD(IETIMY,1000) IEFAC=(IEY-1)/4+1 DE=365*(IEY-1)+IEFAC+IED-1 TE=1440.0*DE+60.0*FLALO(IETIMH) IRAY=IRAYD/1000 IRAD=MOD(IRAYD,1000) IRAFAC=(IRAY-1)/4+1 DRA=365*(IRAY-1)+IRAFAC+IRAD-1 TRA=1440.0*DRA+60.0*FLALO(IRAHMS) INAVY=MOD(NAVDAY/1000,100) INAVD=MOD(NAVDAY,1000) INFAC=(INAVY-1)/4+1 DNAV=365*(INAVY-1)+INFAC+INAVD-1 TDIFE=DNAV*1440.-TE TDIFRA=DNAV*1440.-TRA EPSILN=1.0E-8 10 TIMSAM=SAMTIM*60.0 DIFTIM=TDIFE+TIMSAM XMANOM=XMMC*DIFTIM ECANM1=XMANOM DO 2 I=1,20 ECANOM=XMANOM+OECCEN*DSIN(ECANM1) IF(DABS(ECANOM-ECANM1).LT.EPSILN)GO TO 3 2 ECANM1=ECANOM 3 XOMEGA=DCOS(ECANOM)-OECCEN YOMEGA=SROME2*DSIN(ECANOM) Z =XOMEGA*PZ+YOMEGA*QZ Y =XOMEGA*PY+YOMEGA*QY X =XOMEGA*PX+YOMEGA*QX RETURN END SUBROUTINE NLLXYZgoesnv1 +(XLAT,XLON,X,Y,Z) COMMON /NAVINIgoesnv1/ + & EMEGA,AB,ASQ,BSQ,RR,RSQ, & RDPDG, & NUMSEN,TOTLIN,RADLIN, & TOTELE,RADELE,PICELE, & CPITCH,CYAW,CROLL, & PSKEW, & RFACT,ROASIN,TMPSCL, & B11,B12,B13,B21,B22,B23,B31,B32,B33, & GAMMA,GAMDOT, & ROTM11,ROTM13,ROTM21,ROTM23,ROTM31,ROTM33, & PICTIM,XREF YLAT=RDPDG*XLAT YLAT=ATAN2(BSQ*SIN(YLAT),ASQ*COS(YLAT)) YLON=-RDPDG*XLON SNLT=SIN(YLAT) CSLT=COS(YLAT) CSLN=COS(YLON) SNLN=SIN(YLON) TNLT=(SNLT/CSLT)**2 R=AB*SQRT((1.0+TNLT)/(BSQ+ASQ*TNLT)) X=R*CSLT*CSLN Y=R*CSLT*SNLN Z=R*SNLT RETURN END SUBROUTINE NXYZLLgoesnv1 +(X,Y,Z,XLAT,XLON) COMMON /NAVINIgoesnv1/ + & EMEGA,AB,ASQ,BSQ,R,RSQ, & RDPDG, & NUMSEN,TOTLIN,RADLIN, & TOTELE,RADELE,PICELE, & CPITCH,CYAW,CROLL, & PSKEW, & RFACT,ROASIN,TMPSCL, & B11,B12,B13,B21,B22,B23,B31,B32,B33, & GAMMA,GAMDOT, & ROTM11,ROTM13,ROTM21,ROTM23,ROTM31,ROTM33, & PICTIM,XREF XLAT=100.0 XLON=200.0 IF(X.EQ.0..AND.Y.EQ.0..AND.Z.EQ.0.) GO TO 90 A=ATAN(Z/SQRT(X*X+Y*Y)) XLAT=ATAN2(ASQ*SIN(A),BSQ*COS(A))/RDPDG XLON=-ATAN2(Y,X)/RDPDG 90 RETURN END SUBROUTINE ANGLESgoesnv1 +(JDAY,JTIME,XLAT,XLON,GHA,DEC,SATANG,SUNANG, & RELANG) DATA IDAY/0/ DATA PI/3.14159265/ DATA R/6371.221/ RDPDG=PI/180.0 IF(IDAY.EQ.JDAY)GO TO 1 IDAY=JDAY INORB=0 1 PICTIM=FTIME(JTIME) CALL SATPOSgoesnv1 +(INORB,JTIME,XSAT,YSAT,ZSAT) HEIGHT=SQRT(XSAT**2+YSAT**2+ZSAT**2) YLAT=RDPDG*XLAT YLAT=GEOLAT(YLAT,1) YLON=RDPDG*XLON SLAT=SIN(YLAT) CLAT=COS(YLAT) SLON=SIN(YLON) CLON=COS(YLON) XSAM=R*CLAT*CLON YSAM=R*CLAT*SLON ZSAM=R*SLAT SNLG=-PICTIM*PI/12.0-RDPDG*GHA SNDC=RDPDG*DEC COSDEC=COS(SNDC) US=COS(SNLG)*COSDEC VS=SIN(SNLG)*COSDEC WS=SIN(SNDC) SUNANG=ACOS((US*XSAM+VS*YSAM+WS*ZSAM)/R)/RDPDG XVEC=XSAT-XSAM YVEC=YSAT-YSAM ZVEC=ZSAT-ZSAM XFACT=SQRT(XVEC**2+YVEC**2+ZVEC**2) SATANG=ACOS((XVEC*XSAM+YVEC*YSAM+ZVEC*ZSAM)/(R*XFACT))/RDPDG X1=CLAT*CLON Y1=CLAT*SLON Z1=SLAT X2=SLON Y2=-CLON X3=-SLAT*CLON Y3=-SLAT*SLON Z3=CLAT XC1=US-X1 YC1=VS-Y1 ZC1=WS-Z1 XC2=XSAT/HEIGHT-X1 YC2=YSAT/HEIGHT-Y1 ZC2=ZSAT/HEIGHT-Z1 XAN1=XC1*X3+YC1*Y3+ZC1*Z3 XAN2=XC2*X3+YC2*Y3+ZC2*Z3 YAN1=XC1*X2+YC1*Y2 YAN2=XC2*X2+YC2*Y2 XAN3=XAN1*XAN2+YAN1*YAN2 YAN3=-YAN1*XAN2+XAN1*YAN2 RELANG=ATAN2(YAN3,XAN3)/RDPDG RELANG=ABS(RELANG) RETURN END SUBROUTINE SATPOSgoesnv1 +(INORB,NTIME,X,Y,Z) IMPLICIT DOUBLE PRECISION (A-H,O-Z) REAL DEGLIN,DEGELE,SPINRA,SEMIMA,OECCEN,ORBINC,PERHEL REAL ASNODE,DECLIN,RASCEN,PICLIN,PRERAT,PREDIR,PITCH,YAW REAL ROLL,SKEW REAL X,Y,Z COMMON/NAVCOMgoesnv1/ +NAVDAY,LINTOT,DEGLIN,IELTOT,DEGELE,SPINRA,IETIMY,IET &IMH,SEMIMA,OECCEN,ORBINC,PERHEL,ASNODE,NOPCLN,DECLIN,RASCEN,PICLIN &,PRERAT,PREDIR,PITCH,YAW,ROLL,SKEW IF(INORB.NE.0)GO TO 1 INORB=1 PI=3.14159265D0 RDPDG=PI/180.0 RE=6378.388 GRACON=.07436574D0 SOLSID=1.00273791D0 SHA=100.26467D0 SHA=RDPDG*SHA IRAYD=74001 IRAHMS=0 O=RDPDG*ORBINC P=RDPDG*PERHEL A=RDPDG*ASNODE SO=SIN(O) CO=COS(O) SP=SIN(P)*SEMIMA CP=COS(P)*SEMIMA SA=SIN(A) CA=COS(A) PX=CP*CA-SP*SA*CO PY=CP*SA+SP*CA*CO PZ=SP*SO QX=-SP*CA-CP*SA*CO QY=-SP*SA+CP*CA*CO QZ=CP*SO SROME2=SQRT(1.0-OECCEN)*SQRT(1.0+OECCEN) XMMC=GRACON*RE*DSQRT(RE/SEMIMA)/SEMIMA 1 DIFTIM=TIMDIF(IETIMY,IETIMH,NAVDAY,NTIME) XMANOM=XMMC*DIFTIM ECANM1=XMANOM EPSILN=1.0E-8 DO 2 I=1,20 ECANOM=XMANOM+OECCEN*DSIN(ECANM1) IF(DABS(ECANOM-ECANM1).LT.EPSILN)GO TO 3 2 ECANM1=ECANOM 3 XOMEGA=DCOS(ECANOM)-OECCEN YOMEGA=SROME2*DSIN(ECANOM) XS=XOMEGA*PX+YOMEGA*QX YS=XOMEGA*PY+YOMEGA*QY ZS=XOMEGA*PZ+YOMEGA*QZ DIFTIM=TIMDIF(IRAYD,IRAHMS,NAVDAY,NTIME) RA=DIFTIM*SOLSID*PI/720.0D0+SHA RAS=DMOD(RA,2.0*PI) CRA=COS(RAS) SRA=SIN(RAS) X=CRA*XS+SRA*YS Y=-SRA*XS+CRA*YS Z=ZS RETURN END