1 : C ELLA51 SOURCE CHAT 05/01/12 23:34:34 5004 2 : SUBROUTINE ELLA51(ZA1,ZV,ZX,N,IPIVO,JPIVO,IAUX) 3 : C 4 : IMPLICIT INTEGER(I-N) 5 : IMPLICIT REAL*8 (A-H,O-Y) 6 : IMPLICIT COMPLEX*16(Z) 7 : C 8 : C OPERATEUR ELFE LAPLACE ACOU 9 : C 10 : C RESOLUTION D'UN SYSTEME LINEAIRE COMPLEXE ZA1 * ZX = ZV 11 : C 12 : C PAR LA METHODE DE GAUSS AVEC CALCUL DE LA TRIANGULARISATION 13 : C 14 : C ET STOCKAGE DE CELLE CI DANS LES VECTEURS IPIVO, JPIVO ET IAUX 15 : C 16 : C 17 : C PARAMETRES : 18 : C 19 : C ZA1(N*N) : MATRICE (N*N) REPRESENTANT LE SYSTEME LINEAIRE 20 : C ZV(N) : SECOND MEMBRE 21 : C IAUX(N) : TABLEAU DE TRAVAIL QUI DONNE L'ORDRE DES INCONNUES 22 : C 23 : C SORTIE : 24 : C 25 : C ZX : SOLUTION 26 : C 27 : C AUTEUR : DE LANGRE 28 : C DATE : 08 DEC 1989 29 : C 30 : C ==================================================================== 31 : C 32 : COMPLEX*16 ZA1(N,*),ZV(*),ZX(*) 33 : INTEGER IAUX(*),IPIVO(*),JPIVO(*) 34 : EPS = 1.D-35 35 : C 36 : DO 10 I=1,N 37 : IAUX(I) = I 38 : 10 CONTINUE 39 : C 1. TRIANGULARISATION 40 : C BOUCLE SUR LES MATRICES EMBOITEES 41 : C 42 : DO 100 ILIG =1,N 43 : C 44 : C 1.1 RECHERCHE DU PIVOT 45 : C 46 : XPIV =0.D0 47 : IPIV =0 48 : JPIV =0 49 : DO 110 I = ILIG,N 50 : DO 111 J = ILIG,N 51 : IF( ABS(ZA1(I,J)) .GT.XPIV ) THEN 52 : IPIV= I 53 : JPIV= J 54 : XPIV = ABS(ZA1(I,J)) 55 : ENDIF 56 : 111 CONTINUE 57 : 110 CONTINUE 58 : C 59 : IPIVO(ILIG) = IPIV 60 : JPIVO(ILIG) = JPIV 61 : C 62 : IF(XPIV .LE.EPS) THEN 63 : WRITE(6,*)'RETURN DANS ELLP51',XPIV,ILIG 64 : RETURN 65 : ENDIF 66 : C 67 : C 1.2 ON MET LA LIGNE NUMERO IPIV EN ILIG 68 : C ET MEME CHOSE AU SECOND MEMBRE 69 : C 70 : DO 120 J=ILIG,N 71 : ZAUX = ZA1(IPIV,J) 72 : ZA1(IPIV,J)= ZA1(ILIG,J) 73 : ZA1(ILIG,J)= ZAUX 74 : 120 CONTINUE 75 : C 76 : ZAUX = ZV(IPIV) 77 : ZV(IPIV)= ZV(ILIG) 78 : ZV(ILIG)= ZAUX 79 : C 80 : C 1.3 ON MET LA COLONNE NUMERO JPIV EN JLIG= ILIG 81 : C ET ON NOTE CELA DANS LE TABLEAU IAUX 82 : C * ERREUR SUR BORNES 130 CORRIGEE 83 : C 84 : JLIG=ILIG 85 : DO 130 I=1 ,N 86 : ZAUX = ZA1(I,JPIV) 87 : ZA1(I,JPIV)= ZA1(I,JLIG) 88 : ZA1(I,JLIG)= ZAUX 89 : 130 CONTINUE 90 : I0 = IAUX (JPIV) 91 : IAUX(JPIV) = IAUX (JLIG) 92 : IAUX(JLIG) = I0 93 : C 94 : C 1.4 REDUCTION PAR SOUSTRACTION DES LIGNES ENTRE-ELLES 95 : C ET MEME CHOSE AU SECOND MEMBRE 96 : C 97 : DO 140 I= ILIG + 1 ,N 98 : ZAUX = ZA1(I,ILIG) / ZA1(ILIG,ILIG) 99 : DO 141 J=ILIG ,N 100 : ZA1(I,J)= ZA1(I,J)- ZAUX * ZA1 (ILIG,J) 101 : 141 CONTINUE 102 : ZV(I) = ZV(I)- ZAUX * ZV(ILIG) 103 : 140 CONTINUE 104 : C 105 : C FIN BOUCLE SUR LES MATRICES EMBOITEES 106 : 100 CONTINUE 107 : C 108 : C 2. SUBSTITUTION EN REMONTANT 109 : C 110 : ZV(N) = ZV(N) / ZA1 (N,N) 111 : DO 200 I= 2,N 112 : IN = N + 1 - I 113 : DO 210 K= 1,I-1 114 : KN = N + 1 - K 115 : ZV(IN) = ZV(IN) - ZA1 (IN,KN)* ZV(KN) 116 : 210 CONTINUE 117 : ZV(IN) = ZV(IN) / ZA1 (IN,IN) 118 : 200 CONTINUE 119 : C 120 : C 3. ON REMET LES INCONNUES A LA BONNE PLACE 121 : C 122 : DO 300 I= 1,N 123 : ZX(IAUX(I)) = ZV(I) 124 : 300 CONTINUE 125 : C 126 : RETURN 127 : END 128 : 129 :
© Cast3M 2003 - All rights reserved.
Disclaimer