Download ella51.eso

Back to the list

   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