C ICGFAM    SOURCE    CHAT      05/01/13    00:28:05     5004
      SUBROUTINE ICGFAM(P,A,IA,JA,NEL)
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  morse. 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 morse        ! C
C +----------+------+---------------------------------------------+ C
C ! IA       ! <--- ! Le tableau des pointeurs de dbut de ligne  ! C
C +----------+------+---------------------------------------------+ C
C ! JA       ! <--- ! Le tableau d'indexage correspondant         ! C
C +----------+------+---------------------------------------------+ C
C ! NEL      ! <--- ! Nombre de lignes de la matrice              ! 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 JA(*),IA(NEL+1)
      DIMENSION P(*),A(*)

      DO 1 I=1,NEL
         DO 3 JKA=IA(I)+1,IA(I+1)-1
            J=JA(JKA)
            IF(J.LT.I) THEN
               S=0.D0
               DO 4 KKA=IA(J)+1,IA(J+1)-1
                  K=JA(KKA)
                  IF(K.LT.J) THEN
                     IKA=NORDRM(I,K,IA,JA)
                     IF(IKA.NE.0) S=S+P(IKA)*P(KKA)*P(IA(K))
                  ENDIF
 4             CONTINUE
               P(JKA)=(A(JKA)-S)/P(IA(J))
            ENDIF
 3       CONTINUE
         S=0.D0
         DO 2 KKA=IA(I)+1,IA(I+1)-1
            K=JA(KKA)
            IF(K.LT.I) S=S+P(KKA)*P(KKA)*P(IA(K))
 2       CONTINUE
         P(IA(I))=A(IA(I))-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=IA(I)+1,IA(I+1)-1
            J=JA(JKA)
            IF(J.LT.I) THEN
               IKA=NORDRM(J,I,IA,JA)
               P(IKA)=P(JKA)
            ENDIF
  6      CONTINUE
         P(IA(I))=1./P(IA(I))
  5   CONTINUE
C Sortie
C     do 4000 i=1,nel
C        write(60,60) (ka(i,j),j=1,9)
C4000 continue
C     do 4001 i=1,nel
C        write(60,61) ( a(i,j),j=1,9)
C4001 continue
C     do 4002 i=1,nel
C        write(60,61) ( p(ka),ka=ia(i),ia(i+1)-1)
C4002 continue
C60   format(9(1x,i4))
C61   format(9(1x,f7.4))

      RETURN
      END

