ULYSSES
Ulysses HISCALE Data Analysis Handbook
Appendix 10. Effect of Backscattered Electrons on the Geometric Factors of the LEMS30 Telescope (Hong MS Thesis)
****************************************************************************** * * * PROGRAM I.3 * * * ****************************************************************************** * * * TRAJRT4BDET * * THIS SUBROUTINE SHOULD BE LINKED WITH TRAJ4PT. IT NOT ONLY INCLUDES * * OUTP, BUT ALSO THE DIFFERENTIAL EQUATION SOLVER TDHPCG. * * * ******************************************************************************
SUBROUTINE DHPCG(PRMT,PV,DERY,NDIM,IHLF,FCT,OUTP,AUX)
implicit none
REAL*8 PRMT(5),X,H,Z,DELT,PV(6),DERY(6),AUX(16,6)
INTEGER NHIT,wscatter,scatter,i,n,istep,imod,ihlf,ihlf1,isw,ndim
common /nhit/nhit,/wscatter/wscatter,/scatter/scatter
integer startnsurf,ape
logical firstcheck,secondcheck
common /startnsurf/startnsurf,/ape/ape
common /firstcheck/firstcheck,/secondcheck/secondcheck
scatter=0
NHIT=0
N=1
IHLF1=0
IHLF=0
X=PRMT(1)
H=PRMT(3)
PRMT(5)=0.D0
DO I=1,NDIM
AUX(16,I)=0.D0
AUX(15,I)=DERY(I)
AUX(1,I)=PV(I)
ENDDO
C ERROR RETURNS
IF((H*PRMT(2)).LT.X*H) THEN
IHLF=13
ELSE IF((H*PRMT(2)).EQ.X*H) THEN
IHLF=12
ENDIF
ISW=0
C ****************************************************************
C
C COMPUTATION OF DERY FOR STARTING VALUES
C BLOCK 1 VS OLD LABELS 4_20
C
C ***************************************************************
DO WHILE (ISW.NE.4)
IF(ISW.EQ.0) THEN
IHLF1=0
CALL FCT(X,PV,DERY)
C RECORDING OF STARTING VALUES
CALL OUTP(X,PV,DERY,IHLF,NDIM,PRMT,NHIT)
IF (NHIT.NE.0) RETURN
IF(PRMT(5).NE.0.) THEN
RETURN
ENDIF
DO I=1,NDIM
AUX(8,I)=DERY(I)
ENDDO
C COMPUTATION OF AUX(2,I)
ISW=1
ELSE IF(ISW.EQ.1) THEN
IF(IHLF1.NE.1) THEN
X=X+H
DO I=1,NDIM
AUX(2,I)=PV(I)
ENDDO
ENDIF
IHLF1=0
C INCREMENT IS TESTED BY MEANS OF BISECTION
IHLF=IHLF+1
X=X-H
DO I=1,NDIM
AUX(4,I)=AUX(2,I)
ENDDO
H=.5D0*H
N=1
ISW=2
ELSE IF(ISW.EQ.2) THEN
X=X+H
CALL FCT(X,PV,DERY)
N=2
DO I=1,NDIM
AUX(2,I)=PV(I)
AUX(9,I)=DERY(I)
ENDDO
ISW=3
ELSE IF(ISW.EQ.3) THEN
C COMPUTATION OF TEST VALUE DELT
DELT=0.D0
DO I=1,NDIM
DELT=DELT+AUX(15,I)*DABS(PV(I)-AUX(4,I))
ENDDO
DELT=.66666666667D-1*DELT
if (delt.le.prmt(4)) then
c IF(DELE.LE.PRMT(4)) THEN
ISW=5
ELSE
IF(IHLF.GE.10) THEN
IHLF=11
X=X+H
ISW=0
IHLF1=2
ELSE
C NO SATISFACTORY ACCURACY AFTER 10 BISECTIONS. ERROR MESSAGE.
IHLF1=1
ISW=1
ENDIF
ENDIF
ELSE IF(ISW.EQ.5) THEN
C THERE IS SATISFACTORY ACCURACY AFTER LESS THAN 11 BISECTIONS.
X=X+H
CALL FCT(X,PV,DERY)
DO I=1,NDIM
AUX(3,I)=PV(I)
AUX(10,I)=DERY(I)
ENDDO
N=3
ISW=4
ENDIF
C *******************************************************************
C
C THE FOLLOWING PART OF SUBROUTINE HPCG COMPUTES BY MEANS OF
C RUNGE-KUTTA METHOD STARTING VALUES FOR THE NOT SELF-STARTING
C PREDICTOR-CORRECTOR METHOD.
C BLOCK 2 VS OLD LABELS 100_104
C
C *******************************************************************
IF(ISW.NE.5.AND.IHLF1.EQ.0) THEN
DO I=1,NDIM
Z=H*AUX(N+7,I)
AUX(5,I)=Z
PV(I)=AUX(N,I)+.4D0*Z
ENDDO
C Z IS AN AUXILIARY STORAGE LOCATION
Z=X+.4D0*H
CALL FCT(X,PV,DERY)
DO I=1,NDIM
Z=H*DERY(I)
AUX(6,I)=Z
PV(I)=AUX(N,I)+.29697760925D0*AUX(5,I)+.15875964497D0*Z
ENDDO
Z=X+.45573725422D0*H
CALL FCT(X,PV,DERY)
DO I=1,NDIM
Z=H*DERY(I)
AUX(7,I)=Z
PV(I)=AUX(N,I)+0.21810038823D0*AUX(5,I)-3.0509651487D0*AUX(6,I)
* + 3.8328647605D0*Z
ENDDO
Z=X+H
CALL FCT(X,PV,DERY)
DO I=1,NDIM
PV(I)=AUX(N,I)+.17476028223D0*AUX(5,I)-.55148066288D0*AUX(6,I)
* +1.2055355994D0*AUX(7,I)+.17118478122D0*H*DERY(I)
ENDDO
ENDIF
ENDDO
C *******************************************************************
C
C BLOCK 3 VS OLD LABELS 21_22
C
C *******************************************************************
N=1
X=X+H
CALL FCT(X,PV,DERY)
X=PRMT(1)
DO I=1,NDIM
AUX(11,I)=DERY(I)
PV(I)=AUX(1,I)+H*(.375D0*AUX(8,I)+.79166666667D0*AUX(9,I)
* -.20833333333D0*AUX(10,I)+.41666666667D-1*DERY(I))
ENDDO
C *********************************************************************
C
C BLOCK 4 VS OLD LABELS 23_30
C
C *********************************************************************
DO WHILE (N.LT.4)
X=X+H
N=N+1
CALL FCT(X,PV,DERY)
CALL OUTP(X,PV,DERY,IHLF,NDIM,PRMT,NHIT)
IF (NHIT.NE.0) RETURN
IF(PRMT(5).NE.0) THEN
RETURN
ELSE IF((N-4).LT.0) THEN
DO I=1,NDIM
AUX(N,I)=PV(I)
AUX(N+7,I)=DERY(I)
ENDDO
IF(N.LT.3) THEN
DO I=1,NDIM
DELT=AUX(9,I)+AUX(9,I)
DELT=DELT+DELT
PV(I)=AUX(1,I)+.33333333333D0*H*(AUX(8,I)+DELT+AUX(10,I))
ENDDO
ELSE
DO I=1,NDIM
DELT=AUX(9,I)+AUX(10,I)
DELT=DELT+DELT+DELT
PV(I)=AUX(1,I)+.375D0*H*(AUX(8,I)+DELT+AUX(11,I))
ENDDO
ENDIF
ENDIF
ENDDO
ISW=6
C ******************************************************************
C
C POSSIBLE BREAK POINT FOR LINKAGE
C STARTING VALUES ARE COMPUTED
C NOW START HAMMINGS MODIFIED PREDICTOR-CORRECTOR METHOD.
C BLOCK 5 VS OLD LABELS 200_226
C
C ******************************************************************
ISTEP=3
DO WHILE (ISW.GE.6)
IF(ISW.EQ.6) THEN
IF(N.EQ.8) THEN
C N=8 CAUSES THE ROWS OF AUX TO CHANGE THEIR STORAGE LOCATIONS
DO N=2,7
DO I=1,NDIM
AUX(N-1,I)=AUX(N,I)
AUX(N+6,I)=AUX(N+7,I)
ENDDO
ENDDO
N=7
ENDIF
C N LESS THAN 8 CAUSES N+1 TO GET N
N=N+1
C COMPUTATION OF NEXT VECTOR PV
DO I=1,NDIM
AUX(N-1,I)=PV(I)
AUX(N+6,I)=DERY(I)
ENDDO
X=X+H
ISW=7
ELSE IF(ISW.EQ.7) THEN
ISTEP=ISTEP+1
DO I=1,NDIM
DELT=AUX(N-4,I)+1.3333333333D0*H*(AUX(N+6,I)+AUX(N+6,I)
* -AUX(N+5,I)+AUX(N+4,I)+AUX(N+4,I))
PV(I)=DELT-.92561983471D0*AUX(16,I)
AUX(16,I)=DELT
ENDDO
C PREDICTOR IS NOW GENERATED IN ROW 16 OF AUX, MODIFIED PREDICTOR
C IS GENERATED I PV. DELT MEANS AN AUXILIARY STORAGE.
CALL FCT(X,PV,DERY)
C DERIVATIVE OF MODIFIED PREDICTOR IS GENERATED IN DERY
DO I=1,NDIM
DELT=.125D0*(9.D0*AUX(N-1,I)-AUX(N-3,I)+3.D0*H*(DERY(I)
* +AUX(N+6,I)+AUX(N+6,I)-AUX(N+5,I)))
AUX(16,I)=AUX(16,I)-DELT
PV(I)=DELT+.7438016529D-1*AUX(16,I)
ENDDO
C TEST WHETHER H MUST BE HALVED OR DOUBLED
DELT=0.D0
DO I=1,NDIM
DELT=DELT+AUX(15,I)*DABS(AUX(16,I))
ENDDO
ISW=8
ELSE IF(ISW.EQ.8) THEN
IF(DELT.LT.PRMT(4).OR.IHLF1.EQ.5) THEN
IHLF1=0
C H MUST NOT BE HALVED. THAT MEANS PV(I) ARE GOOD.
CALL FCT(X,PV,DERY)
CALL OUTP(X,PV,DERY,IHLF,NDIM,PRMT,NHIT)
IF (NHIT.NE.0) RETURN
IF(PRMT(5).NE.0.OR.IHLF.GE.11.OR.(H*(X-PRMT(2))).GE.0
* .OR.DABS(X-PRMT(2)).LT.0.1D0*DABS(H)) THEN
1150 FORMAT(I5)
RETURN
ELSE
IF(DELT.LE.(.2D-1*PRMT(4)).AND.IHLF.GT.0.AND.N.GE.7
* .AND.ISTEP.GE.4) THEN
C H COULD BE DOUBLED IF ALL NECESSARY PRECEEDING VALUES ARE AVAILABLE
IMOD=ISTEP/2
IF((ISTEP-IMOD-IMOD).EQ.0) THEN
H=H+H
IHLF=IHLF-1
ISTEP=0
DO I=1,NDIM
AUX(N-1,I)=AUX(N-2,I)
AUX(N-2,I)=AUX(N-4,I)
AUX(N-3,I)=AUX(N-6,I)
AUX(N+6,I)=AUX(N+5,I)
AUX(N+5,I)=AUX(N+3,I)
AUX(N+4,I)=AUX(N+1,I)
DELT=AUX(N+6,I)+AUX(N+5,I)
DELT=DELT+DELT+DELT
AUX(16,I)=8.962962963D0*(PV(I)-AUX(N-3,I))-3.361111111D0*H*
* (DERY(I)+DELT+AUX(N+4,I))
ENDDO
ISW=6
ELSE
ISW=6
ENDIF
ELSE
ISW=6
ENDIF
ENDIF
ISW=6
ELSE
ISW=9
ENDIF
ELSE IF(ISW.EQ.9) THEN
C H MUST BE HALVED
IHLF=IHLF+1
IF(IHLF.LE.10) THEN
ISW=10
ELSE
ISW=8
IHLF1=5
ENDIF
ELSE IF(ISW.EQ.10) THEN
H=.5D0*H
ISTEP=0
DO I=1,NDIM
PV(I)=.390625D-2*(8.D1*AUX(N-1,I)+135.D0*AUX(N-2,I)
* + 4.D1*AUX(N-1,I)+AUX(N-4,I))-.1171875D0*(AUX(N+6,I)
* - 6.D0*AUX(N+5,I)-AUX(N+4,I))*H
AUX(N-4,I)=.390625D-2*(12.D0*AUX(N-1,I)+135.D0*AUX(N-2,I)+
* 08.D0*AUX(N-3,I)+AUX(N-4,I))-.234375D-1*(AUX(N+6,I)+
* 8.D0*AUX(N+5,I)-9.D0*AUX(N+4,I))*H
AUX(N-3,I)=AUX(N-2,I)
AUX(N+4,I)=AUX(N+5,I)
ENDDO
X=X-H
DELT=X-(H+H)
CALL FCT(X,PV,DERY)
DO I=1,NDIM
AUX(N-2,I)=PV(I)
AUX(N+5,I)=DERY(I)
PV(I)=AUX(N-4,I)
ENDDO
DELT=DELT-(H+H)
CALL FCT(X,PV,DERY)
DO I=1,NDIM
DELT=AUX(N+5,I)+AUX(N+4,I)
DELT=DELT+DELT+DELT
AUX(16,I)=8.9629696296D0*(AUX(N-1,I)-PV(I))
* - 3.3611111111D0*H*(AUX(N+6,I)+DELT+DERY(I))
AUX(N+3,I)=DERY(I)
ENDDO
ISW=7
ENDIF
ENDDO
c print*, nhit
c pause
return
END C----------------------------------------------------------------------- C----------------------------------------------------------------------- C THIS IS A FILE OF ROUTINES THAT HAVE BEEN DECLARED EXTERNAL IN THE C MAIN PROGRAM & WHICH ARE PASSED INTO THE ROUTINE DHPCG THAT SOLVES THE C SYSTEM OF DIFFERENTIAL EQUATIONS.
SUBROUTINE FCT(X,Y,DERY)
IMPLICIT NONE
INTEGER NDIM
PARAMETER (NDIM=6)
REAL*8 BX,BY,BZ,DERY(NDIM),FAC,QMC,X,X00,Y(NDIM),Y00,Z00
COMMON /QMC/QMC
C COMMON /BX/BX,BY,BZ,/X00/X00,Y00,Z00
PARAMETER (FAC=1.0D-2)
C SUBROUTINE TO COMPUTE THE RIGHT HAND SIDE DERY OF THE SYSTEM AT THE
C GIVEN VALUES OF X & Y.
X00 = Y(1)/FAC
Y00 = Y(2)/FAC
Z00 = Y(3)/FAC
CALL FDMOD(X00,Y00,Z00,BX,BY,BZ)
D PRINT *,' QMC ',QMC
D PRINT *,' X00 ',X00,' Y00 ',Y00,' Z00 ',Z00
D PRINT *,' BX ',BX,' BY ',BY,' BZ ',BZ
DERY(1) = Y(4)
DERY(2) = Y(5)
DERY(3) = Y(6)
DERY(4) = QMC * (Y(5)*BZ - Y(6)*BY)
DERY(5) = QMC * (Y(6)*BX - Y(4)*BZ)
DERY(6) = QMC * (Y(4)*BY - Y(5)*BX)
RETURN
END
C--------------------------------------------------------------------
C---------------------------------------------------------------------
SUBROUTINE OUTP(X,Y,DERY,IHLF,NDIM,PRMT,HIT)
C PURPOSE : THIS IS A ROUTINE THAT IS DECLARED EXTERNAL IN THE MAIN C ROUTINE. IT PRINTS THE OUTPUT VALUES OBTAINED FROM THE ROUTINE C DHPCG - WHICH SOLVES THE SYSTEM OF DIFF. EQUATIONS.
IMPLICIT NONE
CHARACTER*72 FNAME
INTEGER HIT,I,IHLF,MULC,MULC1,NCOUNT,NDIM,NSURF,NU,ek
integer scatter,wscatter,change,Nscatter,nsurf1
REAL*8 DERY(NDIM),PRMT(5),X,Y(NDIM),TLN(2,3),TOTV,BX,BY,BZ,B,
& X00,Y00,Z00,FAC,PASVEL(10000,2)
real*8 x01(3),x02(3),aux(16,6),sect(3),c1(4),theta,phi
REAL*8 FPHI,DIST,X1,Y1,Z1
integer startnsurf,ape
logical firstcheck,secondcheck
common /startnsurf/startnsurf,/ape/ape
common /firstcheck/firstcheck,/secondcheck/secondcheck
external fct
PARAMETER (FAC=1.0D-2)
COMMON /NCOUNT/NCOUNT,/ek/ek
COMMON /TLN/TLN,/NU/NU
common /wscatter/wscatter,/scatter/scatter
common /sect/sect,/nsurf1/nsurf1,/c1/c1,/Nscatter/Nscatter
common /theta/theta,/phi/phi
C COMMON /PASVEL/PASVEL
INCLUDE 'PASS5.CMN'
DATA MULC/40/,MULC1/10/
TOTV=DSQRT(Y(4)*Y(4) + Y(5)*Y(5) + Y(6)*Y(6))
NCOUNT = NCOUNT + 1
D B = DSQRT(BX*BX + BY*BY + BZ*BZ)
IF (NU .EQ. 1) THEN
DO I=1,3
TLN(2,I)=Y(I)/FAC
ENDDO
ELSE
DO I=1,3
TLN(1,I)=TLN(2,I)
TLN(2,I)=Y(I)/FAC
ENDDO
do 31 i=1,3
x01(i)=tln(1,i)
x02(i)=tln(2,i)
31 enddo
c if (secondcheck) then
c write(6,*)'-----',startnsurf,ape
c endif
CALL CHECKHIT(HIT,NSURF)
!HIT=0 :CONTINUE WITH TRAJECTORY CALCULATION
! =1 :HIT THE NSURF(NTH SURFACE), LOST
! =2 :SUCCESSFULLY ESCAPED FROM THE SENSOR
if ( ((x01(1).gt.7.0).or.(x01(1).lt.0.0).or.(x01(2).gt.4)
& .or.(x01(2).lt.1.0).or.(x01(3).gt.1.0).or.(x01(3).lt.-1.0))
& .and. (hit.eq.0) ) then
c write(6,*)'Special case, trajectory has run out of assembly'
c & ,x02(1),x02(2),x02(3)
hit = 1
endif
IF (HIT .EQ. 2) THEN
NPAS = NPAS + 1
X1=TLN(2,1)-TLN(1,1)
Y1=TLN(2,2)-TLN(1,2)
Z1=TLN(2,3)-TLN(1,3)
DIST=DSQRT(X1*X1 + Y1*Y1 + Z1*Z1)
pas(npas,1)=theta
pas(npas,2)=phi
PAS(NPAS,3)=DACOS(Z1/DIST)
PAS(NPAS,4)=FPHI(X1,Y1)
pas(npas,11)=1
C PASVEL(NPAS,1)=DACOS(Y(6)/TOTV)
C PASVEL(NPAS,2)=FPHI(Y(4),Y(5))
DO I=1,6
PAS(NPAS,I+4)=Y(I)
ENDDO
ENDIF
C if ((hit.eq.0).and.(scatter.eq.1)) then
C if (wscatter.eq.1) then
C call SCATTERSUB(HIT,sect,X01,X02,C1,y)
C nsurf1 = nsurf - 1
C if (hit.eq.0) then
C call fct(x,y,dery)
C call DHPCG1(PRMT,Y,DERY,NDIM,IHLF,FCT,OUTP1,AUX)
C endif
C endif
C if (wscatter.eq.2) then
C do i=1,nscatter
C call SCATTERSUB(HIT,sect,X01,X02,C1,y)
C nsurf1 = nsurf - 1
C if (hit.eq.0) then
C call fct(x,y,dery)
C call DHPCG1(PRMT,Y,DERY,NDIM,IHLF,
C & FCT,OUTP1,AUX)
C------------------------------------------------------------------------
C Here is a modification to restrict only one diffuse scattering
C occurs during the process, Be careful with this modification
C need more testing for this.
C
C if (hit.eq.2) then
C nu=nu+1
C return
C endif
C------------------------------------------------------------------------
C endif
C enddo
C endif
C hit=1
C endif
ENDIF
NU=NU+1
D WRITE(3,15) X,(Y(I),I=1,NDIM),TOTV C15 FORMAT (1X,D14.7,6(1X,D14.7),1X,D14.7,1X,F10.3) 15 FORMAT (1X,D14.7,6(1X,D15.8),1X,D21.14) 20 FORMAT(3(X,F13.6))
RETURN
END **************************************************************************
Return to Appendix 10.11 List of Programs
Return to the Table of Contents for Hong's MS Thesis
Return to HISCALE List of Appendices
Return to Ulysses HISCALE Data Analysis Handbook Table of Contents
Updated 8/8/19, Cameron Crane
QUICK FACTS
Manufacturer:
ESA provided the Ulysses spacecraft, NASA provided the power
supply, and various others provided its instruments.
Mission End Date: June 30, 2009
Destination: The inner heliosphere of the sun away from the ecliptic plane
Orbit: Elliptical orbit transversing the polar regions of the sun outside of the ecliptic plane
Mission End Date: June 30, 2009
Destination: The inner heliosphere of the sun away from the ecliptic plane
Orbit: Elliptical orbit transversing the polar regions of the sun outside of the ecliptic plane

