C ICGFAC    SOURCE    CHAT      05/01/13    00:28:01     5004
      SUBROUTINE ICGFAC(P,A,KA,NEL,NNZ)
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C                                                                   C
C  Effectue une factorisation par un Choleski incomplet de la       C
C  matrice de pression lorsque celle-ci est stocke en mode         C
C  compress. La matrice de prconditionnement a la mme structure. C
C  On stocke dans la diagonale la diagonale inverse en vue de la    C
C  rsolution par monte descente.                                  C
C                                                                   C
C +---------------------------------------------------------------+ C
C ! DESCRIPTION DES ARGUMENTS                                     ! C
C !---------------------------------------------------------------! C
C !                                                               ! C
C +----------+------+---------------------------------------------+ C
C ! NOM      ! MODE ! DESCRIPTION                                 ! C
C +----------+------+---------------------------------------------+ C
C ! P        ! ---> ! La matrice de prconditionnement            ! C
C +----------+------+---------------------------------------------+ C
C ! A        ! <--- ! La matrice de pression stocke compress    ! C
C +----------+------+---------------------------------------------+ C
C ! KA       ! <--- ! Le tableau d'indexage correspondant         ! C
C +----------+------+---------------------------------------------+ C
C ! NEL      ! <--- ! Nombre de lignes de la matrice              ! C
C +----------+------+---------------------------------------------+ C
C ! NNZ      ! <--- ! Nombre de colonnes (nombre maxi de voisins) ! C
C +----------+------+---------------------------------------------+ C
C !                                                               ! C
C ! MODE = ---> VARIABLE ECRITE (SORTIE)                          ! C
C ! MODE = <--- VARIABLE LUE    (ENTREE)                          ! C
C ! MODE = <--> VARIABLE LUE ET ECRITE                            ! C
C !                                                               ! C
C +---------------------------------------------------------------+ C
C !                                                               ! C
C ! CONTACT : Franois Thomas  69 08 24 64 ou 76 96               ! C
C !                                                               ! C
C +---------------------------------------------------------------+ C
C !                                                               ! C
C ! RELATIONS AVEC D'AUTRES MODULES                               ! C
C !                                                               ! C
C +---------------------------------------------------------------+ C
C !                                                               ! C
C ! MODIFICATIONS                                                 ! C
C !                                                               ! C
C ! 11/03/92 : Cration                                           ! C
C !                                                               ! C
C +---------------------------------------------------------------+ C
C                                                                   C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
      DIMENSION P(NEL,NNZ),A(NEL,NNZ)
      DIMENSION KA(NEL,NNZ)

      DO 1 I=1,NEL
         DO 3 JKA=2,NNZ
            J=KA(I,JKA)
            IF(J.LT.I) THEN
               S=0.D0
               DO 4 KKA=2,NNZ
                  K=KA(J,KKA)
                  IF(K.LT.J) THEN
                     IKA=NORDRC(I,K,KA,NEL,NNZ)
                     IF(IKA.NE.0) S=S+P(I,IKA)*P(J,KKA)*P(K,1)
                  ENDIF
 4             CONTINUE
               P(I,JKA)=(A(I,JKA)-S)/P(J,1)
            ENDIF
 3       CONTINUE
         S=0.D0
         DO 2 KKA=2,NNZ
            K=KA(I,KKA)
            IF(K.LT.I) S=S+P(I,KKA)*P(I,KKA)*P(K,1)
 2       CONTINUE
         P(I,1)=A(I,1)-S
 1    CONTINUE

C On reporte dans le triangle suprieur (plus pratique pour la
C rsolution. On stocke la diagonale inverse pour des questions
C de performance dans la rsolution.

      DO 5 I=1,NEL
         DO 6 JKA=2,NNZ
            J=KA(I,JKA)
            IF(J.LT.I) THEN
               IKA=NORDRC(J,I,KA,NEL,NNZ)
               P(J,IKA)=P(I,JKA)
            ENDIF
  6      CONTINUE
         P(I,1)=1./P(I,1)
  5   CONTINUE

C Sortie
C     do 4000 i=1,nel
C        write(61,60) (ka(i,j),j=1,9)
C4000 continue
C     do 4001 i=1,nel
C        write(61,61) ( a(i,j),j=1,9)
C4001 continue
C     do 4002 i=1,nel
C        write(61,61) ( p(i,j),j=1,9)
C4002 continue
C60   format(9(1x,i4))
C61   format(9(1x,f7.4))

      RETURN
      END

