*-- Author : S.Burke / J.V. Morris SUBROUTINE FKINV(MES,CMES,GMES,IERR) ********************************************************************** * * * Invert the measurement covariance matrix * * * * ERROR CONDITIONS; * * IERR = 0 ; normal termination * * -> IERR = 107 ; measurement covariance not positive definite * * * * -> Fatal error * * * ********************************************************************** IMPLICIT DOUBLE PRECISION (A-H,O-Z) PARAMETER (IUTIL=1,IROUT=3) *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 CMES(2,2),GMES(2,2) ********************************************************************** IERR = 0 IF (MES.EQ.2) THEN DET = (CMES(1,1)*CMES(2,2) - CMES(2,1)*CMES(2,1)) IF (DET.LE.0.D0) THEN CALL FKERR(IUTIL,IROUT,IFATAL,IMCV,IERR) RETURN ENDIF DET = 1.D0/DET GMES(1,1) = CMES(2,2)*DET GMES(2,1) = -CMES(2,1)*DET GMES(2,2) = CMES(1,1)*DET ELSE IF (CMES(1,1).LE.0.D0) THEN CALL FKERR(IUTIL,IROUT,IFATAL,IMCV,IERR) RETURN ENDIF GMES(1,1) = 1.D0/CMES(1,1) ENDIF RETURN END *