Numérotation des lignes :

C INVMA1    SOURCE    PV        20/09/15    21:15:06     10713                SUBROUTINE INVMA1(A,NDI,N,ISING)CC_______________________________________________________________________CC SOUS PROGRAMME QUI CALCUL L INVERSE D UNE MATRICE CARRE D ORDRE NCC  LA METHODE DE GAUSS JORDAN EST UTILISECC   ISING = 1 SI LA MATRICE EST SINGULIEREC         = 0 SINONC_______________________________________________________________________C      IMPLICIT INTEGER(I-N)      IMPLICIT REAL*8(A-H,O-Z)      DIMENSION A(NDI,*)      DIMENSION IPIV(10),INDXR(10),INDXC(10)-INC CCREELCC   INITIALISATION DES VARIABLESC      ISING = 0 C  TEST SUR N        IF(N.GT.10) THEN             ISING = 1             RETURN       ENDIFC      DO 10 I = 1,N        IPIV(I)  = 0* inutile de remettre indxr et indxc a zero**      INDXR(I) = 0**      INDXC(I) = 0  10  CONTINUECC   REDUCTION DES COLONNES ET RECHERCHE DU PIVOTC      irow=1      icol=1      DO 20 I = 1,N        BIG = 0.D0        DO 30 J = 1,N        IF (IPIV(J).NE.1) THEN          DO 40 K = 1,N            IF (IPIV(K).EQ.0) THEN**            IF (ABS(A(J,K)).GE.BIG) THEN              IF (.NOT.(ABS(A(J,K)).LT.BIG)) THEN                BIG  = ABS(A(J,K))                IROW = J                ICOL = K              ENDIF            ELSEIF (IPIV(K).GT.1) THENCC    LA MATRICE EST SINGULIEREC              ISING = 1              GOTO 95            ENDIF  40      CONTINUE        ENDIF        IF (.not.(BIG.LT.XGRAND)) then              ISING = 1              GOTO 95        ENDIF  30    CONTINUE        IPIV(ICOL) = IPIV(ICOL) + 1CC    LE PIVOT A ETE TROUVEC      => CHANGEMENT DE COLONNEC        IF (IROW.NE.ICOL) THEN          DO 50 L = 1,N            DUM = A(IROW,L)            A(IROW,L) = A(ICOL,L)            A(ICOL,L) = DUM  50      CONTINUEC        ENDIF        INDXR(I) =IROW        INDXC(I) = ICOLC        IF (A(ICOL,ICOL).EQ.0.D0) THENCC    LA MATRICE EST SINGULIEREC          ISING = 1          GOTO 95        ENDIFC        PIVINV = 1.D0/A(ICOL,ICOL)        A(ICOL,ICOL) = 1.D0        DO 60 L = 1,N           A(ICOL,L) = A(ICOL,L)*PIVINV  60    CONTINUECC    REDUCTION DES COLONNESC        DO 70 LL = 1,N          IF(LL.NE.ICOL) THEN            DUM = A(LL,ICOL)            A(LL,ICOL) = 0.D0            DO 80 L = 1,N              A(LL,L) = A(LL,L) - A(ICOL,L)*DUM  80        CONTINUE          ENDIF  70    CONTINUE  20  CONTINUECC    CHANGEMENT DE COLONNE POUR OBTENIR L INVERSEC      DO 91 L = N,1,-1        IF(INDXR(L).NE.INDXC(L)) THEN          DO 92 K = 1,N            DUM = A(K,INDXR(L))            A(K,INDXR(L)) = A(K,INDXC(L))            A(K,INDXC(L)) = DUM  92      CONTINUE        ENDIF  91  CONTINUEC  95  CONTINUEC      END

© Cast3M 2003 - Tous droits réservés.
Mentions légales