C ELPDR2    SOURCE    CHAT      05/01/12    23:37:20     5004
      SUBROUTINE ELPDR2(CA1,CV,CX,N,IPIVO,JPIVO,IAUX)
C
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-B,D-H,O-Z)
      IMPLICIT COMPLEX*16(C)
C
C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C
C    RESOLUTION D'UN SYSTEME LINEAIRE COMPLEXE   CA1 * CX = CV
C
C    PAR LA METHODE DE GAUSS EN UTILISATION LE STOCKAGE DE LA
C
C    TRIANGULARISATION FAITE PAR ELPDR1 (IPIV, JPIV, IAUX)
C
C
C    PARAMETRES :
C
C    CA1(N*N) : MATRICE (N*N) REPRESENTANT LE SYSTEME LINEAIRE
C    CV(N)    : SECOND MEMBRE
C    IAUX(N)  : TABLEAU DE TRAVAIL QUI DONNE L'ORDRE DES INCONNUES
C
C    SORTIE :
C
C    CX       : SOLUTION
C
C    AUTEUR : SAINT-DIZIER
C    DATE   : 08 DEC 1989
C
C  ====================================================================
C
      COMPLEX*16  CA1(N,*),CV(*),CX(*)
      INTEGER      IAUX(*),IPIVO(*),JPIVO(*)
      EPS = 1.D-12
C
      DO 100 ILIG =1,N
C
C
      DO 120 J=ILIG,N
        CAUX      = CA1(IPIVO(ILIG),J)
        CA1(IPIVO(ILIG),J)= CA1(ILIG,J)
        CA1(ILIG,J)= CAUX
  120 CONTINUE
C
      CAUX    = CV(IPIVO(ILIG))
      CV(IPIVO(ILIG))= CV(ILIG)
      CV(ILIG)= CAUX
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
        CAUX      = CA1(I,JPIVO(JLIG))
        CA1(I,JPIVO(JLIG))= CA1(I,JLIG)
        CA1(I,JLIG)= CAUX
  130 CONTINUE
C
      DO 140 I= ILIG + 1 ,N
        CAUX      = CA1(I,ILIG) / CA1(ILIG,ILIG)
        DO 141 J=ILIG  ,N
          CA1(I,J)= CA1(I,J)- CAUX * CA1 (ILIG,J)
  141   CONTINUE
        CV(I)  = CV(I)- CAUX * CV(ILIG)
  140 CONTINUE
C
C     FIN   BOUCLE SUR LES MATRICES EMBOITEES
100   CONTINUE
C
C   2. SUBSTITUTION EN REMONTANT
C
      CV(N) = CV(N) / CA1 (N,N)
      DO 200 I= 2,N
        IN = N + 1 - I
        DO 210 K= 1,I-1
          KN = N + 1 - K
          CV(IN) = CV(IN) - CA1 (IN,KN)* CV(KN)
  210   CONTINUE
        CV(IN) = CV(IN) / CA1 (IN,IN)
  200 CONTINUE
C
C   3. ON REMET LES INCONNUES A LA BONNE PLACE
C
      DO 300 I= 1,N
        CX(IAUX(I)) = CV(I)
  300 CONTINUE
C
      RETURN
      END

