ella51
C ELLA51 SOURCE CHAT 05/01/12 23:34:34 5004 C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Y) IMPLICIT COMPLEX*16(Z) C C OPERATEUR ELFE LAPLACE ACOU C C RESOLUTION D'UN SYSTEME LINEAIRE COMPLEXE ZA1 * ZX = ZV C C PAR LA METHODE DE GAUSS AVEC CALCUL DE LA TRIANGULARISATION C C ET STOCKAGE DE CELLE CI DANS LES VECTEURS IPIVO, JPIVO ET 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-35 C DO 10 I=1,N IAUX(I) = I 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 XPIV =0.D0 IPIV =0 JPIV =0 DO 110 I = ILIG,N DO 111 J = ILIG,N IF( ABS(ZA1(I,J)) .GT.XPIV ) THEN IPIV= I JPIV= J XPIV = ABS(ZA1(I,J)) ENDIF 111 CONTINUE 110 CONTINUE C IPIVO(ILIG) = IPIV JPIVO(ILIG) = JPIV C IF(XPIV .LE.EPS) THEN WRITE(6,*)'RETURN DANS ELLP51',XPIV,ILIG RETURN 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(IPIV,J) ZA1(IPIV,J)= ZA1(ILIG,J) ZA1(ILIG,J)= ZAUX 120 CONTINUE C ZAUX = ZV(IPIV) ZV(IPIV)= 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,JPIV) ZA1(I,JPIV)= ZA1(I,JLIG) ZA1(I,JLIG)= ZAUX 130 CONTINUE I0 = IAUX (JPIV) IAUX(JPIV) = IAUX (JLIG) 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