*-- Author : S.Burke
SUBROUTINE FKETOI(EXT,SINT,CINT)
**********************************************************************
* *
* Convert an `external' state vector to an `internal' vector *
* and covariance. *
* *
* External: 1/r, phi, theta, x, y, z, IPTYPE, covariance *
* Internal: x, y, q/p, tan(theta), phi *
* *
* The `external' covariance is packed with COVCP. *
* *
**********************************************************************
*KEEP,FKPIDP.
DOUBLE PRECISION PI,TWOPI,PIBY2
PARAMETER (PI=3.141592653589793238)
PARAMETER (TWOPI=PI*2.0D0,PIBY2=PI/2.0D0)
*KEND.
PARAMETER (BCONV=-0.0002998)
DOUBLE PRECISION SINT(5),CINT(5,5),SEC2TH,DIFF1,DIFF3
DIMENSION EXT(16),B(3),COV(15)
**********************************************************************
* Get the field
CALL GUFLD(EXT(4),B)
* Trap zero field problems
IF (ABS(B(3)).LT.1.0E-2) B(3) = SIGN(12.0,B(3))
* Transform the state vector
SINT(1) = EXT(4)
SINT(2) = EXT(5)
SINT(3) = EXT(1)*DSIN(DBLE(EXT(3)))/(BCONV*B(3))
SINT(4) = DTAN(DBLE(EXT(3)))
SINT(5) = EXT(2)
IF (SINT(5).LT.0.D0) SINT(5) = SINT(5) + TWOPI
* Trap more zero-field problems
IF (ABS(SINT(3)).GT.1.0D4) SINT(3) = SIGN(1.0D4,SINT(3))
* Differential coefficients
SEC2TH = (1.D0 + SINT(4)*SINT(4))
IF (EXT(1).NE.0.) THEN
DIFF1 = SINT(3)/EXT(1)
ELSE
DIFF1 = DSIN(DBLE(EXT(3)))/(BCONV*B(3))
ENDIF
DIFF3 = SINT(3)*SINT(4)
* Unpack the covariance ...
CALL COVCP(5,COV,EXT(8),2)
* ... and transform it
CINT(1,1) = COV(10)
CINT(2,1) = COV(14)
CINT(2,2) = COV(15)
CINT(3,1) = COV(7) *DIFF1 + COV(9) *DIFF3
CINT(3,2) = COV(11)*DIFF1 + COV(13)*DIFF3
CINT(3,3) = COV(1)*DIFF1*DIFF1 + 2.D0*COV(4)*DIFF1*DIFF3
& + COV(6)*DIFF3*DIFF3
* Trap more zero-field problems
IF (CINT(3,3).GT.1.0D6) CINT(3,3) = 1.0D6
CINT(4,1) = COV(9)*SEC2TH
CINT(4,2) = COV(13)
CINT(4,3) = (COV(4)*DIFF1 + COV(6)*DIFF3)*SEC2TH
CINT(4,4) = COV(6)*SEC2TH*SEC2TH
CINT(5,1) = COV(8)
CINT(5,2) = COV(12)
CINT(5,3) = COV(2)*DIFF1 + COV(5)*DIFF3
CINT(5,4) = COV(5)*SEC2TH
CINT(5,5) = COV(3)
RETURN
END
*