C INVERE SOURCE CHAT 05/01/13 00:42:45 5004 SUBROUTINE INVERE(VP,N,IVP,K,DET) C****************************************************************************** C INVERSION D'UNE MATRICE NON SYMETRIQUE AVEC RECHERCHE DE PIVOT NON NUL C SUR UNE COLONNE C ENTREES C VP MATRICE A INVERSER C N ORDRE DE LA MATRICE A INVERSER C IVP DIMENSION DE LA MATRICE DANS LE PROGRAMME D'APPEL C K VECTEUR DE TRAVAIL ENTIER DE LONGUEUR N C SORTIES C VP MATRICE INVERSEE C DET DETERMINANT C****************************************************************************** IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION VP(IVP,IVP),K(N) DATA ZERO/0.D0/,UN/1.D0/,EPS/1.D-13/ C****************************************************************************** DET=UN DO 5 I=1,N 5 K(I)=I C****************DEBUT DE L'INVERSION DO 80 II=1,N C****************RECHERCHE D'UN PIVOT NON NUL SUR LA COLONNE II DO 10 I=II,N PIV=VP(I,II) IF(ABS(PIV).GT.EPS) GOTO 20 10 CONTINUE DET=ZERO RETURN C****************ECHANGER LA LIGNE II ET LA LIGNE I 20 DET=DET*PIV IF(I.EQ.II) GOTO 40 I1=K(II) K(II)=K(I) K(I)=I1 DO 30 J=1,N C=VP(I,J) VP(I,J)=VP(II,J) 30 VP(II,J)=C DET=-DET C****************NORMALISATION DE LA LIGNE DU PIVOT 40 C=UN/PIV VP(II,II)=UN DO 50 J=1,N 50 VP(II,J)=VP(II,J)*C C****************ELIMINATION DO 70 I=1,N IF(I.EQ.II) GOTO 70 C=VP(I,II) VP(I,II)=ZERO DO 60 J=1,N 60 VP(I,J)=VP(I,J)-C*VP(II,J) 70 CONTINUE 80 CONTINUE C****************REORDONNER LES COLONNES DE L'INVERSE DO 120 J=1,N C****************CHERCHER J1 TEL QUE K(J1)=J DO 90 J1=J,N JJ=K(J1) IF(JJ.EQ.J) GOTO 100 90 CONTINUE 100 IF(J.EQ.J1) GOTO 120 C****************ECHANGER LES COLONNES J ET J1 K(J1)=K(J) DO 110 I=1,N C=VP(I,J) VP(I,J)=VP(I,J1) 110 VP(I,J1)=C 120 CONTINUE RETURN END