1 : C ELPDRE SOURCE CHAT 05/01/12 23:37:23 5004 2 : SUBROUTINE ELPDRE(CA1,CV,CX,IAUX,N) 3 : C 4 : IMPLICIT INTEGER(I-N) 5 : IMPLICIT REAL*8(A-B,D-H,O-Z) 6 : IMPLICIT COMPLEX*16(C) 7 : C ==================================================================== 8 : C CA1 MATRICE (N*N) 9 : C CV SECOND MEMBRE 10 : C CX SOLUTION 11 : C IAUX(N) TABLEAU DE TRAVAIL QUI DONNE L'ORDRE DES INCONNUES 12 : C ==================================================================== 13 : C 14 : DIMENSION CA1(N,*) 15 : DIMENSION CV(*) 16 : DIMENSION CX(*) 17 : DIMENSION IAUX(*) 18 : C 19 : EPS = 1D-10 20 : C 21 : DO 10 I=1,N 22 : IAUX(I) = I 23 : 10 CONTINUE 24 : C 1. TRIANGULARISATION 25 : C BOUCLE SUR LES MATRICES EMBOITEES 26 : C 27 : DO 100 ILIG =1,N 28 : C 29 : C 1.1 RECHERCHE DU PIVOT 30 : C 31 : XPIV =0.D0 32 : IPIV =0 33 : JPIV =0 34 : DO 110 I = ILIG,N 35 : DO 111 J = ILIG,N 36 : IF( ABS ( CA1(I,J)) .GT.XPIV ) THEN 37 : IPIV= I 38 : JPIV= J 39 : XPIV =ABS ( CA1(I,J)) 40 : ENDIF 41 : 111 CONTINUE 42 : 110 CONTINUE 43 : C 44 : * WRITE(6,*) 'DRE ILIG IPIV JPIV ',ILIG,IPIV,JPIV 45 : IF(XPIV .LE.EPS) THEN 46 : RETURN 47 : ENDIF 48 : C 49 : C 1.2 ON MET LA LIGNE NUMERO IPIV EN ILIG 50 : C ET MEME CHOSE AU SECOND MEMBRE 51 : C 52 : DO 120 J=ILIG,N 53 : CAUX = CA1(IPIV,J) 54 : CA1(IPIV,J)= CA1(ILIG,J) 55 : CA1(ILIG,J)= CAUX 56 : 120 CONTINUE 57 : C 58 : CAUX = CV(IPIV) 59 : CV(IPIV)= CV(ILIG) 60 : CV(ILIG)= CAUX 61 : C 62 : C 1.3 ON MET LA COLONNE NUMERO JPIV EN JLIG= ILIG 63 : C ET ON NOTE CELA DANS LE TABLEAU IAUX 64 : C * ERREUR SUR BORNES 130 CORRIGEE 65 : C 66 : JLIG=ILIG 67 : DO 130 I=1 ,N 68 : CAUX = CA1(I,JPIV) 69 : CA1(I,JPIV)= CA1(I,JLIG) 70 : CA1(I,JLIG)= CAUX 71 : 130 CONTINUE 72 : I0 = IAUX (JPIV) 73 : IAUX(JPIV) = IAUX (JLIG) 74 : IAUX(JLIG) = I0 75 : C 76 : C 1.4 REDUCTION PAR SOUSTRACTION DES LIGNES ENTRE-ELLES 77 : C ET MEME CHOSE AU SECOND MEMBRE 78 : C 79 : DO 140 I= ILIG + 1 ,N 80 : CAUX = CA1(I,ILIG) / CA1(ILIG,ILIG) 81 : DO 141 J=ILIG ,N 82 : CA1(I,J)= CA1(I,J)- CAUX * CA1 (ILIG,J) 83 : 141 CONTINUE 84 : CV(I) = CV(I)- CAUX * CV(ILIG) 85 : 140 CONTINUE 86 : C 87 : C FIN BOUCLE SUR LES MATRICES EMBOITEES 88 : 100 CONTINUE 89 : C 90 : C 2. SUBSTITUTION EN REMONTANT 91 : C 92 : CV(N) = CV(N) / CA1 (N,N) 93 : DO 200 I= 2,N 94 : IN = N + 1 - I 95 : DO 210 K= 1,I-1 96 : KN = N + 1 - K 97 : CV(IN) = CV(IN) - CA1 (IN,KN)* CV(KN) 98 : 210 CONTINUE 99 : CV(IN) = CV(IN) / CA1 (IN,IN) 100 : 200 CONTINUE 101 : C 102 : C 3. ON REMET LES INCONNUES A LA BONNE PLACE 103 : C 104 : DO 300 I= 1,N 105 : CX(IAUX(I)) = CV(I) 106 : 300 CONTINUE 107 : C 108 : RETURN 109 : END 110 : 111 :
© Cast3M 2003 - All rights reserved.
Disclaimer