C INV       SOURCE    CHAT      05/01/13    00:42:58     5004
C***********************************************************************
C*                                                                     *
C* PROJET      : Opérateur LIMI                                        *
C* NOM         : INV sous-programme                                    *
C* DESCRIPTION : Ce sous-programme calcule l'inverse d'une matrice     *
C*               carrée de rang 3, par la méthode des cofacteurs       *
C* LANGAGE     : Esope                                                 *
C* AUTEUR      : Guillaume VENCO - DRN/DMT/SEMT/LTMF                   *
C*                                                                     *
C***********************************************************************
C*                                                                     *
C* APPELES     : Fonction DET                                          *
C*                                                                     *
C***********************************************************************
C*                                                                     *
C* ENTREES     : A   : -Matrice carrée 3*3                             *
C*                                                                     *
C* SORTIES     : B   : -Matrice carrée 3*3 inverse de la matrice A     *
C*                                                                     *
C***********************************************************************
C*                                                                     *
C* VERSION     : 20/04/2000                                            *
C* CREATION    :                                                       *
C*                                                                     *
C***********************************************************************

      SUBROUTINE INV(A,B)
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
C*       *********************************
C*       *** Déclaration des variables ***
C*       *********************************

        REAL*8 A(3,3),B(3,3)
        REAL*8 Y

C*       *********************************
C*       ******** Sous-programme *********
C*       *********************************

C---- Condition d'inversibilité
        IF (DET(A).EQ.0) THEN
           write(6,*) 'La matrice n''est pas inversible'
           RETURN
        ENDIF

C---- Calcul du déterminant de A
        Y= DET(A)

C---- Calcul de l'inverse de A
        B(1,1)= (A(2,2)*A(3,3)-A(2,3)*A(3,2))/Y
        B(1,2)= -(A(1,2)*A(3,3)-A(1,3)*A(3,2))/Y
        B(1,3)= (A(1,2)*A(2,3)-A(1,3)*A(2,2))/Y
        B(2,1)= -(A(2,1)*A(3,3)-A(2,3)*A(3,1))/Y
        B(2,2)= (A(1,1)*A(3,3)-A(1,3)*A(3,1))/Y
        B(2,3)= -(A(1,1)*A(2,3)-A(1,3)*A(2,1))/Y
        B(3,1)= (A(2,1)*A(3,2)-A(2,2)*A(3,1))/Y
        B(3,2)= -(A(1,1)*A(3,2)-A(1,2)*A(3,1))/Y
        B(3,3)= (A(1,1)*A(2,2)-A(1,2)*A(2,1))/Y

c        write(6,1003) B(1,1),B(1,2),B(1,3)
c        write(6,1003) B(2,1),B(2,2),B(2,3)
c        write(6,1003) B(3,1),B(3,2),B(3,3)

        RETURN

 1003   FORMAT(3(1X,1PE11.4))

        END


C*       *********************************
C*       ****  Fin Sous-Programme  *******
C*       *********************************



