      SUBROUTINE LINV3F(A,B,IJOB,N,IA,D1,D2,WKAREA,IER)
C
C     IN PLACE MATRIX INVERSION AND SOLUTION OF SIMULTANEOUS EQUATIONS
C
C     USES LINPACK SUBROUTINES TO SIMULATE THE IMSL ROUTINE LINV3F
C
C     A(N[IA],N)   MATRIX, ALTERED ON OUTPUT
C     B(N)         VECTOR, I.E. AX=B, OUTPUT IS THE SOLN IN B
C
C     IJOB         1   INVERT A INTO A
C                  2   SOLVE AX=B,  A=LU
C                  3   SOLVE AX=B,  INVERT A
C                  4   DET OF A, A=LU
C     DET(1)       >0  DETERMINANT = DET(1)*2**DET(2)
C                  <0  NOT SET
C     WKAREA(2*N)  WORKAREA IF IJOB = 1,3
C           (N)    WORKAREA IF IJOB = 2,4
C     IER          0     NO ERRORS
C                  64    WARNING:IJOB>4, IJOB IS SET TO 4
C                  130   FATAL:A IS SINGULAR
C
      IMPLICIT REAL*8(A-H,O-Z)
      IMPLICIT INTEGER*4(I-N) 
      DIMENSION A(IA,N),B(N),WKAREA(*),DET(2)
C
      IER = 130
      CALL DGEFA(A,IA,N,WKAREA,INFO)
      IF(INFO.NE.0) RETURN
      IER = 0
      IF((IJOB.GT.0).AND.(IJOB.LT.5)) GO TO 10
      IER = 64
      IJOB = 4
   10 GO TO (20,30,40,50), IJOB
   20 JOB = 11
      IF(D1.LT.0.0) JOB = 1
      CALL DGEDI(A,IA,N,WKAREA,DET,WKAREA(N+1),JOB)
      D1 = DET(1)
      D2 = DET(2)
      RETURN
C
   30 CALL DGESL(A,IA,N,WKAREA,B,0)
      IF(D1.GE.0.0) GO TO 50
      RETURN
C
   40 CALL DGESL(A,IA,N,WKAREA,B,0)
      JOB = 11
      IF(D1.LT.0.0) JOB = 1
      CALL DGEDI(A,IA,N,WKAREA,DET,WKAREA(N+1),JOB)
      D1 = DET(1)
      D2 = DET(2)
      RETURN
C
   50 JOB = 10
      CALL DGEDI(A,IA,N,WKAREA,DET,WKAREA(N+1),JOB)
      D1 = DET(1)
      D2 = DET(2)
      RETURN
      END 

