ellp53
C ELLP53 SOURCE CHAT 05/01/12 23:35:47 5004 C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Y) IMPLICIT COMPLEX*16(Z) C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C OPERATEUR ELFE LAPLACE POUTRE C C RESOLUTION D'UN SYSTEME LINEAIRE COMPLEXE ZA1 * ZX = ZV C C PAR LA METHODE DE GAUSS EN UTILISATION LE STOCKAGE DE LA C C TRIANGULARISATION FAITE PAR ELLP51 (IPIV, JPIV, IAUX) C C C PARAMETRES : C C ZA1(N*N) : MATRICE (N*N) REPRESENTANT LE SYSTEME LINEAIRE C ZV(N) : SECOND MEMBRE C IAUX(N) : TABLEAU DE TRAVAIL QUI DONNE L'ORDRE DES INCONNUES C C SORTIE : C C ZX : SOLUTION C C AUTEUR : DE LANGRE C DATE : 08 DEC 1989 C C ==================================================================== C COMPLEX*16 ZA1(N,*),ZV(*),ZX(*) INTEGER IAUX(*),IPIVO(*),JPIVO(*) EPS = 1.D-10 C C DO 10 I=1,N C IAUX(I) = I C 10 CONTINUE C 1. TRIANGULARISATION C BOUCLE SUR LES MATRICES EMBOITEES C DO 100 ILIG =1,N C C 1.1 RECHERCHE DU PIVOT C C XPIV =0.D0 C IPIV =0 C JPIV =0 C DO 110 I = ILIG,N C DO 111 J = ILIG,N C IF( ABS ( ZA1(I,J)) .GT.XPIV ) THEN C IPIV= I C JPIV= J C XPIV =ABS ( ZA1(I,J)) C ENDIF C111 CONTINUE C110 CONTINUE C C C IF(XPIV .LE.EPS) THEN C WRITE(6,*)'RETURN DANS ELLP51',XPIV,ILIG C RETURN C ENDIF C C 1.2 ON MET LA LIGNE NUMERO IPIV EN ILIG C ET MEME CHOSE AU SECOND MEMBRE C DO 120 J=ILIG,N ZAUX = ZA1(IPIVO(ILIG),J) ZA1(IPIVO(ILIG),J)= ZA1(ILIG,J) ZA1(ILIG,J)= ZAUX 120 CONTINUE C ZAUX = ZV(IPIVO(ILIG)) ZV(IPIVO(ILIG))= ZV(ILIG) ZV(ILIG)= ZAUX C C 1.3 ON MET LA COLONNE NUMERO JPIV EN JLIG= ILIG C ET ON NOTE CELA DANS LE TABLEAU IAUX C * ERREUR SUR BORNES 130 CORRIGEE C JLIG=ILIG DO 130 I=1 ,N ZAUX = ZA1(I,JPIVO(JLIG)) ZA1(I,JPIVO(JLIG))= ZA1(I,JLIG) ZA1(I,JLIG)= ZAUX 130 CONTINUE C I0 = IAUX (JPIVO(JLIG)) C IAUX(JPIVO(JLIG)) = IAUX (JLIG) C IAUX(JLIG) = I0 C C 1.4 REDUCTION PAR SOUSTRACTION DES LIGNES ENTRE-ELLES C ET MEME CHOSE AU SECOND MEMBRE C DO 140 I= ILIG + 1 ,N ZAUX = ZA1(I,ILIG) / ZA1(ILIG,ILIG) DO 141 J=ILIG ,N ZA1(I,J)= ZA1(I,J)- ZAUX * ZA1 (ILIG,J) 141 CONTINUE ZV(I) = ZV(I)- ZAUX * ZV(ILIG) 140 CONTINUE C C FIN BOUCLE SUR LES MATRICES EMBOITEES 100 CONTINUE C C 2. SUBSTITUTION EN REMONTANT C ZV(N) = ZV(N) / ZA1 (N,N) DO 200 I= 2,N IN = N + 1 - I DO 210 K= 1,I-1 KN = N + 1 - K ZV(IN) = ZV(IN) - ZA1 (IN,KN)* ZV(KN) 210 CONTINUE ZV(IN) = ZV(IN) / ZA1 (IN,IN) 200 CONTINUE C C 3. ON REMET LES INCONNUES A LA BONNE PLACE C DO 300 I= 1,N ZX(IAUX(I)) = ZV(I) 300 CONTINUE C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales