C RELR11    SOURCE    PV        20/03/30    21:23:55     10567          
      SUBROUTINE RELR11(MLIN,
     $     KJSPGP,KJSPGD,
     $     IMPR,IRET)
      IMPLICIT REAL*8 (A-H,O-Z)
      IMPLICIT INTEGER (I-N)
C***********************************************************************
C NOM         : RELR11
C DESCRIPTION : Assemblage d'un rigidité
C Construction de :
C - l'ensemble des points sur lesquels il y a au moins une inconnue
C   primale : KJSPGP
C - l'ensemble des points sur lesquels il y a au moins une inconnue
C   duale : KJSPGD
C
C
C
C LANGAGE     : ESOPE
C AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
C               mél : gounand@semt2.smts.cea.fr
C***********************************************************************
C APPELES          :
C APPELES (E/S)    :
C APPELES (BLAS)   :
C APPELES (CALCUL) :
C APPELE PAR       : RELR10
C***********************************************************************
C SYNTAXE GIBIANE    :
C ENTREES            :
C ENTREES/SORTIES    :
C SORTIES            :
C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
C***********************************************************************
C VERSION    : v1, 26/06/2003, version initiale
C HISTORIQUE : v1, 26/06/2003, 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***********************************************************************

-INC PPARAM
-INC CCOPTIO
-INC SMCOORD
-INC SMRIGID
      POINTEUR MLIN.MRIGID
      POINTEUR DES.DESCR
-INC SMELEME
      POINTEUR MEL.MELEME
-INC SMLENTI
      POINTEUR KJSPGP.MLENTI
      POINTEUR KLSPGP.MLENTI
      POINTEUR KJSPGD.MLENTI
      POINTEUR KLSPGD.MLENTI
*
      INTEGER IMPR,IRET
*
* Executable statements
*
      IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans relr11.eso'
*
      SEGACT MLIN
      NRIG=MLIN.IRIGEL(/2)
*
* Primale
*
      JG=nbpts
      SEGINI KLSPGP
*   degré et fin de la liste chaînée
      LDG=0
      LAST=-1
      DO IRIG=1,NRIG
         MEL=MLIN.IRIGEL(1,IRIG)
         SEGACT MEL
         NEL=MEL.NUM(/2)
         DES=MLIN.IRIGEL(3,IRIG)
         SEGACT DES
         NDDL=DES.NOELEP(/1)
         DO IEL=1,NEL
            DO IDDL=1,NDDL
               NUMNO=MEL.NUM(DES.NOELEP(IDDL),IEL)
               IF (KLSPGP.LECT(NUMNO).EQ.0) THEN
                  LDG=LDG+1
                  KLSPGP.LECT(NUMNO)=LAST
                  LAST=NUMNO
               ENDIF
            ENDDO
         ENDDO
         SEGDES DES
         SEGDES MEL
      ENDDO
*   transfert de la liste chainee dans KJSPGP
      JG=LDG
      SEGINI KJSPGP
      DO IDG=1,LDG
         IPREC=KLSPGP.LECT(LAST)
         KJSPGP.LECT(IDG)=LAST
         LAST=IPREC
      ENDDO
      SEGSUP KLSPGP
      SEGDES KJSPGP
*
* Duale (copie conforme du dessus)
*
      JG=nbpts
      SEGINI KLSPGD
*   degré et fin de la liste chaînée
      LDG=0
      LAST=-1
      DO IRIG=1,NRIG
         MEL=MLIN.IRIGEL(1,IRIG)
         SEGACT MEL
         NEL=MEL.NUM(/2)
         DES=MLIN.IRIGEL(3,IRIG)
         SEGACT DES
         NDDL=DES.NOELED(/1)
         DO IEL=1,NEL
            DO IDDL=1,NDDL
               NUMNO=MEL.NUM(DES.NOELED(IDDL),IEL)
               IF (KLSPGD.LECT(NUMNO).EQ.0) THEN
                  LDG=LDG+1
                  KLSPGD.LECT(NUMNO)=LAST
                  LAST=NUMNO
               ENDIF
            ENDDO
         ENDDO
         SEGDES DES
         SEGDES MEL
      ENDDO
*   transfert de la liste chainee dans KJSPGD
      JG=LDG
      SEGINI KJSPGD
      DO IDG=1,LDG
         IPREC=KLSPGD.LECT(LAST)
         KJSPGD.LECT(IDG)=LAST
         LAST=IPREC
      ENDDO
      SEGSUP KLSPGD
      SEGDES KJSPGD
      SEGDES MLIN
*
* Normal termination
*
      IRET=0
      RETURN
*
* Format handling
*
*
* Error handling
*
 9999 CONTINUE
      IRET=1
      WRITE(IOIMP,*) 'An error was detected in subroutine relr11'
      RETURN
*
* End of subroutine RELR11
*
      END


 
