C DIMPMT    SOURCE    CHAT      05/01/12    22:51:09     5004
      SUBROUTINE DIMPMT(NTTDDL,NNZA,NNZB,
     $     IA,JA,IB,JB,
     $     IWORK,
     $     NNZC)
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
C***********************************************************************
C NOM         : DIMPMT
C DESCRIPTION : Profil Morse (non ordonné) de A + profil Morse (non
C               ordonné) de B => dimension (NNZ) du profil Morse de (A +
C               B)
C
C LANGAGE     : ESOPE
C AUTEUR      : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
C               mél : gounand@semt2.smts.cea.fr
C***********************************************************************
C APPELE PAR       : FUSPRM
C***********************************************************************
C ENTREES            : NTTDDL, NNZA, NNZB, IA, JA, IB, JB
C ENTREES/SORTIES    : IWORK
C SORTIES            : NNZC
C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
C***********************************************************************
C VERSION    : v1, 21/12/99, version initiale
C HISTORIQUE : v1, 21/12/99, création
C HISTORIQUE :
C HISTORIQUE :
C***********************************************************************
C Prière de PRENDRE LE TEMPS de compléter les commentaires
C en cas de modification de ce sous-programme afin de faciliter
C la maintenance !
C***********************************************************************
*
      INTEGER NTTDDL,NNZA,NNZB
      INTEGER IA(NTTDDL+1)
      INTEGER JA(NNZA)
      INTEGER IB(NTTDDL+1)
      INTEGER JB(NNZB)
      INTEGER IWORK(NTTDDL)
*
      INTEGER NNZC
*
      INTEGER LDG,ILDG,IPREC,LAST
      INTEGER ITTDDL
      INTEGER JNZA,JNZB,JACOL,JBCOL
*
* Executable statements
*
      NNZC=0
*
* Calculons le nombre de termes non nuls sur chaque ligne de C
*
      DO 1 ITTDDL=1,NTTDDL
         LDG=0
* Fin de la liste chaînée
         LAST=-1
* Parcourons la ligne de A
         DO 12 JNZA=IA(ITTDDL),IA(ITTDDL+1)-1
            JACOL=JA(JNZA)
* optimisation : on suppose unicité des colonnes dans le profil Morse
*                de A
*            IF (IWORK(JACOL).EQ.0) THEN
            LDG=LDG+1
            IWORK(JACOL)=LAST
            LAST=JACOL
*            ENDIF
 12      CONTINUE
* Parcourons la ligne de B
         DO 14 JNZB=IB(ITTDDL),IB(ITTDDL+1)-1
            JBCOL=JB(JNZB)
            IF (IWORK(JBCOL).EQ.0) THEN
               LDG=LDG+1
               IWORK(JBCOL)=LAST
               LAST=JBCOL
            ENDIF
 14      CONTINUE
*
         NNZC=NNZC+LDG
* Remise à zéro du segment de travail
         DO 16 ILDG=1,LDG
            IPREC=IWORK(LAST)
            IWORK(LAST)=0
            LAST=IPREC
 16      CONTINUE
 1       CONTINUE
*
* Normal termination
*
      RETURN
*
* Format handling
*
*
* End of subroutine DIMPMT
*
      END


