*-- Author : S.Burke / J.V. Morris SUBROUTINE FKNORM(S,IERR) *-----------------------------------------Updates 27/07/93------- **: FKNORM 30907 SB. Error 17 now tan(theta)>5. ********************************************************************** * * * Normalise the theta and phi components of the state vector S * * * * ERROR CONDITIONS; * * IERR = 0 ; normal termination * * IERR = 116 ; tan(theta) > 10**6: reset to 10**6 * * | x or y > 10**4: reset to 10**4 * * IERR = 17 ; tan(theta) > 50 * * * ********************************************************************** IMPLICIT DOUBLE PRECISION (A-H,O-Z) PARAMETER (IUTIL=1,IROUT=4) *KEEP,FKECODE. PARAMETER (IWARN=0,IFATAL=1,IFPRO=2,IFFLT=3,IFSMO=4,IFPRS=5, & IFPAS=6,IFPAF=7) PARAMETER (IINF1=1,IINF2=2,IINF3=3,IINV=4,IDONE=5) PARAMETER (IICV=6,IMCV=7,IOCV=11,IRCV=12,IOVCV=13, & ITHGP2=16,ITHG1=17) PARAMETER (IFREE=20,IFREE1=30,IFREE2=40,IFREE3=50) *KEND. DIMENSION S(5) *KEEP,FKPIDP. DOUBLE PRECISION PI,TWOPI,PIBY2 PARAMETER (PI=3.141592653589793238) PARAMETER (TWOPI=PI*2.0D0,PIBY2=PI/2.0D0) *KEND. ********************************************************************** IERR = 0 IF (S(4).LT.0.D0) THEN S(4) = DABS(S(4)) S(5) = S(5) + PI ENDIF IF (S(4).GT.1.D6) THEN CALL FKERR(IUTIL,IROUT,IFATAL,ITHGP2,IERR) S(4) = 1.D6 ELSEIF (S(4).GT.50.D0) THEN CALL FKERR(IUTIL,IROUT,IWARN,ITHG1,IERR) ENDIF IF (DABS(S(5)).GT.TWOPI) S(5) = DMOD(S(5),TWOPI) IF (S(5).LT.0.D0) S(5) = S(5) + TWOPI IF (ABS(S(1)).GT.1.D4) THEN CALL FKERR(IUTIL,IROUT,IFATAL,ITHGP2,IERR) S(1) = SIGN(1.D4,S(1)) ENDIF IF (ABS(S(2)).GT.1.D4) THEN CALL FKERR(IUTIL,IROUT,IFATAL,ITHGP2,IERR) S(2) = SIGN(1.D4,S(2)) ENDIF RETURN END *