ellp51
C ELLP51 SOURCE CHAT 05/01/12 23:35:43 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 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