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