VOYAGER
E.2 CHECHITSEN1
Voyager LECP Data Analysis Handbook
Instrument Modeling Reports
by Sheela Shodhan
E.2 CHECHITSEN1
************************************************************************* * THIS FILE CONTAINS ALL THE SUBROUTINES THAT ARE USED TO FIND WHETHER * * THE LINE SEGMENT HAS HIT ANY OF THE SURFACES AND LOST OR NOT. * *************************************************************************
SUBROUTINE CHECKHIT(HIT,NSURF)
* PURPOSE : TO SCAN THROUGH ALL THE POLYGONS, TO DETERMINE THE FATE OF * * PARTICLE * *************************************************************************
IMPLICIT NONE
INTEGER I,J,HIT,MAXSURF,NSURF,NTY,NVERT
PARAMETER (MAXSURF=50)
REAL*8 A,B,C,COEFF(MAXSURF,4),D,VERT(10,3)
COMMON /COEFF/COEFF,/VERT/VERT,NVERT,/NTY/NTY
D WRITE(6,*) ' ---------- '
NSURF=1
HIT=0
DO WHILE((NSURF.LE.NTY).AND.(HIT.EQ.0))
CALL FINDVERT(VERT,NVERT,NSURF)
D WRITE(6,*) 'NO. OF VERTICES ARE: ',NVERT
D DO I=1,NVERT
D WRITE(6,*) (VERT(I,J),J=1,3)
D END DO
A=COEFF(NSURF,1)
B=COEFF(NSURF,2)
C=COEFF(NSURF,3)
D=COEFF(NSURF,4)
CALL SCANPOLY(A,B,C,D,HIT,NSURF)
NSURF=NSURF+1
END DO
D WRITE(6,*) 'HIT: ',HIT,'SURFACE NO.: ',NSURF-1
RETURN
END
C---------------------------------------------------------------------------
C---------------------------------------------------------------------------
SUBROUTINE FINDVERT(VERT,NVERT,NSURF)
* PURPOSE : INITIALIZES THE ARRAY VERT WITH THE VERTICES FOR A GIVEN * * SURFACE NSURF * ****************************************************************************
INTEGER I1,I2,J,MAXSURF,MAXCOO,NVERT
PARAMETER (MAXSURF=50,MAXCOO=31)
REAL*8 CHAN(MAXSURF,MAXCOO),VERT(10,3)
COMMON /CHAN/CHAN
NVERT=IDINT(CHAN(NSURF,1))
I2=2
DO I1=1,NVERT
DO J=1,3
VERT(I1,J)=CHAN(NSURF,I2)
I2=I2+1
END DO
END DO
RETURN
END
C----------------------------------------------------------------------------
C----------------------------------------------------------------------------
SUBROUTINE SCANPOLY(A,B,C,D,HIT,I)
* PURPOSE : TO DETERMINE WHETHER THE PARTICLE HAS HIT THE PLANE SPECIFIED * * BY THE COEFFICIENTS A,B,C & D AND LOST OR NOT. * * VARIABLES: * * HIT : WHOSE VALUE INDICATES WHETHER TRAJECTORY CALCULATION IS TO BE * * CONTINUED OR NOT. * * = 0 PARTICLE IS NOT LOST-SO CONTINUE WITH THE TRAJECTORY CALCULATION.* * = 1 PARTICLE IS LOST-DO NOT CONTINUE WITH THE TRAJECTORY CALCULATION.* * = 2 PARTICLE ESCAPES FROM THE SENSOR ASSEMBLY WITHOUT HITTING * * ANY OF THE OTHER SURFACES. NO NEED TO CONTINUE WITH THE * * TRAJECTORY CALCULATION - SO STOP CALCULATION. * * NGAMAP,NLOWAP,NOPAP : APERTURES OF THE HOUSINGS OF THE DETECTORS,DEFLECTIO* * N SYSTEM AND SENSOR SUBSYSTEM RESPECTIVELY * * SECT : COORDINATES OF THE INTERSECTION POINT * *****************************************************************************
IMPLICIT NONE
REAL*8 A,B,C,D,SECT(3),TLN(2,3),VERT(10,3)
INTEGER FLAG,HIT,I,NCOUNT,NGAMAP,NLOWAP,NERR,NVERT,NOPAP
PARAMETER (NGAMAP=14,NLOWAP=19,NOPAP=26)
CALL INTERSECT(SECT,A,B,C,D,NERR)
C NERR = 0 :NO INTERSECTION BETWEEN THE LINE & THE PLANE
IF (NERR .EQ. 0) THEN
HIT=0
D WRITE(6,*) 'LINE SEGMENT PARALLEL TO THE PLANE'
RETURN
END IF
C SINCE AT THS POINT INTERSECTION IS POSSIBLE,FIND WHETHER THE POINT
C BELONGS TO THE LINE SEGMENT OR NOT.
D WRITE(6,*) 'INTERSECTION POINT :',(SECT(NCOUNT),NCOUNT=1,3)
D WRITE(6,*) 'TEST WHETHER IT BELONGS TO THE LINE-SEGMENT OR NOT'
CALL BETWEEN(SECT,NERR)
C NERR = 0 :POINT DOES NOT BELONG TO THE LINE-SEGMENT
C SO IT HAS NOT REACHED THE PLANE YET-HANGING THERE
IF (NERR .EQ. 0) THEN
HIT=0
D WRITE(6,*) 'POINT DOES NOT BELONG TO THE LINE SEGMENT'
RETURN
END IF
C POINT BELONGS TO THE LINE-SEGMENT-TEST WHETHER THIS C INTERSECTION POINT C LIES ON THE EDGES OF THE POLYGON OR NOT
D WRITE(6,*) 'TEST WHETHER IT LIES ON THE EDGES OF THE
D & POLYGON OR NOT'
CALL HITEDGE(SECT,NERR)
C NERR = 0 :IT DOES NOT LIE ON ANY OF THE
C EDGES OF THE POLYGON
C = 1 :PARTICLE LOST-SINCE IT LIES ON ONE OF
C THE EDGES OF THE POLYGON.
IF (NERR .EQ. 1) THEN
HIT=1
D WRITE(6,*) 'IT LIES ON THE EDGES OF THE POLYGON'
RETURN
END IF
C TEST WHETHER THE PARTICLE LIES INSIDE THE POLYGON OR NOT
D WRITE(6,*) 'TEST WHETHER IT LIES INSIDE THE POLYGON OR NOT'
CALL INOUT(SECT,FLAG)
C FLAG = 0 :PARTCLE LIES OUTSIDE THE POLYGON
C = 1 :IT LIES INSIDE THE POLYGON
IF (FLAG .EQ. 1) THEN
IF ((I .EQ. NLOWAP) .OR. (I .EQ. NGAMAP))THEN
!LIES INSIDE THE LOWER APERTURE OR GAMMA OPENING
HIT=0
D WRITE(6,*) 'IT LIES INSIDE THE LOWER POLYGON'
RETURN
ELSE
IF (I .EQ. NOPAP) THEN !INSIDE THE OUTER APERTURE
HIT=2
D WRITE(6,*) 'IT LIES INSIDE THE OUTER OPENING APERUTRE'
RETURN
END IF
END IF
HIT=1 !INSIDE THE OTHER POLYGONS
D WRITE(6,*) 'IT LIES INSIDE THE OTHER POLYGONS'
RETURN
END IF
IF (FLAG .NE. 0) THEN
D WRITE(6,*) 'ERROR IN INOUT ROUTINE-CHECK'
HIT=10
RETURN
END IF
IF ((I .EQ. NLOWAP).OR.(I .EQ. NOPAP).OR.(I.EQ.NGAMAP)) THEN
!LIES OUTSIDE THE APERTURE SURFACES
HIT=1
D WRITE(6,*) 'LIES OUTSIDE THE APERTURE SURFACES'
ELSE
HIT=0 !OUTSIDE THE OTHER PLANE
D WRITE(6,*) 'LIES OUTSIDE OTHER PLANES-SO NOT LOST YET'
END IF !POLYGONS-MAY NOT BE LOST YET
RETURN
END
C----------------------------------------------------------------------------
C----------------------------------------------------------------------------
SUBROUTINE INTERSECT(SECT,A,B,C,D,NERR)
*
* PURPOSE : TO FIND THE INTERSECTION POINT OF THE PLANE AND THE LINE FORMED *
* BY THE LINE-SEGMENT *
*****************************************************************************
IMPLICIT NONE
REAL*8 A,B,C,D,DX,DY,DZ,DET,RATIO
REAL*8 TLN(2,3),SECT(3),NUM
INTEGER NERR
COMMON /TLN/TLN
NERR = 1
DX=TLN(2,1)-TLN(1,1)
DY=TLN(2,2)-TLN(1,2)
DZ=TLN(2,3)-TLN(1,3)
DET=A*DX+B*DY+C*DZ
NUM=-(A*TLN(1,1)+B*TLN(1,2)+C*TLN(1,3)+D)
IF (DET.EQ. 0.0) THEN
NERR=0
RETURN
END IF
RATIO=NUM/DET
C
SECT(1)=DX*RATIO+TLN(1,1)
SECT(2)=DY*RATIO+TLN(1,2)
SECT(3)=DZ*RATIO+TLN(1,3)
C
RETURN
END
C----------------------------------------------------------------------------
C----------------------------------------------------------------------------
SUBROUTINE BETWEEN(SECT,NERR)
*
* PURPOSE : DETERMINE WHETHER THE INTERSECTION POINT LIES BETWEEN THE TWO *
* END POINTS OF THE SEGMENT OR NOT *
*****************************************************************************
IMPLICIT NONE
REAL*8 DD,DT1,DT2,DT3,DIS(2),SECT(3),TLN(2,3)
INTEGER I,NERR
COMMON /TLN/TLN
C
NERR = 1
DT1=TLN(1,1)-TLN(2,1)
DT2=TLN(1,2)-TLN(2,2)
DT3=TLN(1,3)-TLN(2,3)
DD=DSQRT(DT1**2+DT2**2+DT3**2)
DO I=1,2
DT1=TLN(I,1)-SECT(1)
DT2=TLN(I,2)-SECT(2)
DT3=TLN(I,3)-SECT(3)
DIS(I)=DSQRT(DT1**2+DT2**2+DT3**2)
END DO
IF (DIS(1).GT.DD.OR.DIS(2).GT.DD) THEN
NERR=0
END IF
C
RETURN
END
C----------------------------------------------------------------------------
C----------------------------------------------------------------------------
SUBROUTINE HITEDGE(SECT,NERR)
*
* PURPOSE : TO DETERMINE WHETHER THE INTERSECTION POINT LIES ON THE EDGE OF *
* THE POLYGON OR NOT *
*****************************************************************************
IMPLICIT NONE
REAL*8 VERT(10,3),SECT(3),TOL
REAL*8 DS,DS1,DS2,DIF
PARAMETER (TOL=5.D-05)
INTEGER I,K,NERR,NVERT
COMMON /VERT/VERT,NVERT
C
I=1
NERR = 0
DO WHILE(I.LE.NVERT.AND.NERR.EQ.0)
DS=0.D0
DS1=0.D0
DS2=0.D0
IF (I.NE.NVERT) THEN
DO K=1,3
DS=DS+(VERT(I,K)-VERT(I+1,K))**2
DS1=DS1+(VERT(I,K)-SECT(K))**2
DS2=DS2+(VERT(I+1,K)-SECT(K))**2
END DO
ELSE
DO K=1,3
DS=DS+(VERT(I,K)-VERT(1,K))**2
DS1=DS1+(VERT(I,K)-SECT(K))**2
DS2=DS2+(VERT(1,K)-SECT(K))**2
END DO
END IF
DS=DSQRT(DS)
DS1=DSQRT(DS1)
DS2=DSQRT(DS2)
DIF=DABS(DS-DS1-DS2)
C
IF (DIF.LE.TOL) THEN
NERR=1
END IF
I=I+1
END DO
RETURN
END
C-----------------------------------------------------------------------------
C-----------------------------------------------------------------------------
SUBROUTINE INOUT(SECT,FLAG)
* PURPOSE : TO DETERMINE WHETHER THE INTERSECTION POINT LIES INSIDE THE * * BOUNDED POLYGON OR NOT * ******************************************************************************
IMPLICIT NONE
REAL*8 VECT1(3),VECT2(3),CRSPRCT(3)
REAL*8 VERT(10,3),SECT(3)
INTEGER I,J,SINAL(3),NSINAL(3),FLAG,NVERT
COMMON /VERT/VERT,NVERT
C
C
C COMPUTE THE CROSS PRODUCT OF THE FIRST TWO VECTORS FROM THE FIRST TWO
C VERTICES AND INTERSECTION POINT. THE SINAL OF THIS CURL VECTOR WILL
C BE USED AS A REFERENCE TO TEST THE REST OF THE CROSS PRODUCT VECTORS.
C
FLAG=1
DO J=1,3
VECT1(J)=VERT(1,J)-SECT(J)
VECT2(J)=VERT(2,J)-SECT(J)
END DO
C
C COMPUTE THE COMPONENTS OF THE COMPONENTS OF THE FIRST CORSS PRODUCT
C
CRSPRCT(1)=VECT1(2)*VECT2(3)-VECT1(3)*VECT2(2)
CRSPRCT(2)=VECT1(3)*VECT2(1)-VECT1(1)*VECT2(3)
CRSPRCT(3)=VECT1(1)*VECT2(2)-VECT1(2)*VECT2(1)
CALL CRSPRCTSIGN(CRSPRCT,SINAL)
C
C TEST IF THE OTHER CROSS PRODUCT VECTORS HAVE THE SAME DIRECTIONS
C AS THE FIRST ONE. IF YES ,THEN "IN". IF NO,THEN "OUT".
C
I=2
DO WHILE (FLAG.EQ.1.AND.I.LE.NVERT)
DO J=1,3
VECT1(J)=VERT(I,J)-SECT(J)
IF (I.NE.NVERT) THEN
VECT2(J)=VERT(I+1,J)-SECT(J)
ELSE
VECT2(J)=VERT(1,J)-SECT(J)
END IF
END DO
C
C COMPUTE THE COMPONENTS OF THE CROSS PRODUCT VECTORS OF THE REST
C OF THE VERTICES.
C
CRSPRCT(1)=VECT1(2)*VECT2(3)-VECT1(3)*VECT2(2)
CRSPRCT(2)=VECT1(3)*VECT2(1)-VECT1(1)*VECT2(3)
CRSPRCT(3)=VECT1(1)*VECT2(2)-VECT1(2)*VECT2(1)
C
CALL CRSPRCTSIGN(CRSPRCT,NSINAL)
IF (NSINAL(1).EQ.SINAL(1).AND.NSINAL(2).EQ.SINAL(2).
& AND.NSINAL(3).EQ.SINAL(3)) THEN
FLAG=1
ELSE
FLAG=0
END IF
I=I+1
END DO
RETURN
END
C----------------------------------------------------------------------------
C----------------------------------------------------------------------------
SUBROUTINE CRSPRCTSIGN(CRSPRCT,SINAL)
* PURPOSE : IT DETERMINES THE SIGN OF THE CROSS-PRODUCT. * *****************************************************************************
IMPLICIT NONE
REAL*8 TOL
PARAMETER (TOL=5.D-05)
REAL*8 CRSPRCT(3)
INTEGER I,SINAL(3)
C
DO I=1,3
IF (DABS(CRSPRCT(I)).LT.TOL) THEN
SINAL(I)=0
ELSE
IF (CRSPRCT(I).LT.0.0D0) THEN
SINAL(I)=-1
ELSE
SINAL(I)=1
END IF
END IF
END DO
RETURN
END
C---------------------------------------------------------------------------- C----------------------------------------------------------------------------
Return to thesis table of contents.
Return to Voyager
LECP Data Analysis Handbook Table of Contents.
Return to Fundamental
Technologies Home Page.
Updated 8/9/19, Cameron Crane
VOYAGER 1 ELAPSED TIME
--:--:--:--
Days: Hours:
Minutes: Seconds
*Since official launch
September 5, 1977, 12:56:00:00 UTC
*Since official launch
September 5, 1977, 12:56:00:00 UTC
VOYAGER 2 ELAPSED TIME
--:--:--:--
Days: Hours:
Minutes: Seconds
*Since official launch
August 20, 1977, 14:29:00:00 UTC
*Since official launch
August 20, 1977, 14:29:00:00 UTC
QUICK FACTS
Manufacturer:
Voyagers 1 and 2 were built in the Jet Propulsion
Laboratory in Southern California.
Mission Duration: 40+ years have elapsed for both Voyager 1 and Voyager 2 (both are ongoing).
Destination: Their original destinations were Saturn and Jupiter. Their current destination is interstellar space.
Mission Duration: 40+ years have elapsed for both Voyager 1 and Voyager 2 (both are ongoing).
Destination: Their original destinations were Saturn and Jupiter. Their current destination is interstellar space.

