matinv.f 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. SUBROUTINE MATINV(A,NLD,NB)
  2. C ======================================================
  3. C COMPUTES THE INVERSE OF A MATRIX A
  4. C
  5. C PARAMETERS:
  6. C -----------
  7. C A (INPUT/OUTPUT): ON INPUT THE MATRIX TO INVERSE
  8. C AND ON OUTPUT THE RESULT
  9. C NB (INPUT): THE DIMENSION OF MATRXI A IS NB x NB
  10. C NLD: LEADING DIMENSION OF A
  11. C
  12. C NOTE : USES LAPACK SUBROUTINES "DGETRF" AND "DGETRI"
  13. C ======================================================
  14. INTEGER IPIV,INFO,LDA
  15. REAL*8 WORK
  16. INTEGER I,J,NB
  17. REAL*8 A(NLD,*)
  18. PARAMETER(IWORK=1000)
  19. DIMENSION WORK(IWORK)
  20. DIMENSION IPIV(NB)
  21. LDA=NB
  22. C ****************
  23. C LU decomposition
  24. C DGETRF : a lapack subroutine
  25. C ****************
  26. CALL DGETRF(NB,NB,A,NLD,IPIV,INFO)
  27. IF (INFO.NE.0) THEN
  28. PRINT *, "Echec dans la décomposition LU"
  29. ENDIF
  30. C *****************************************
  31. C Invert from LU decomposition
  32. C DGETRI: a lapack subroutine
  33. C *****************************************
  34. CALL DGETRI(NB,A,NLD,IPIV,WORK,IWORK,INFO)
  35. IF (INFO.NE.0) THEN
  36. PRINT *, "Echec dans l'inversion de la matrice"
  37. ENDIF
  38. RETURN
  39. ENDSUBROUTINE