C LDMT1     SOURCE    MB234859  26/07/30    21:15:07     12609          
      SUBROUTINE LDMT1(KRIGI,PREC,IGRADJ)
C=======================================================================
C   ASSEMBLE LES PETITES MATRICES de RIGIDITE ET LES MET SOUS LA FORME
C        t
C   L.D.M
C   IL LE POINTEUR DE LA MATRICE RESULTANTE DANS ICHOLE (segment MRIGID)
C
C   Cette subroutine est équivalente à TRIANG dans le cas de
C   l'inversion des matrices symétrique
C
C   Appelée par : LDMT
C
C   Auteur : Michel BULIK
C
C   Date : Printemps '95
C
C   Langage : ESOPE + FORTRAN77
C
C=======================================================================
C
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
-INC SMRIGID
-INC SMELEME
-INC SMMATRI
-INC PPARAM
-INC CCOPTIO

C ... Ces variables ont pour but, de diriger le comportement de LDMT2 ...
C       TRSUP  - TRiangle SUPérieur
C       MENAGE - évident
C       LDIAG  - initialisation et remplissage de MDIAG et MDNOR demandés

      LOGICAL TRSUP,MENAGE,LDIAG

      IF (IIMPI.EQ.1)THEN
        CALL GIBTEM(XKT)
        INTERR(1)=INT(XKT)
        CALL ERREUR(-259)
        WRITE(IOIMP,10)
 10     FORMAT(' L''IMPRESSION PRECEDENTE EST AVANT ASNS1 ')
      ENDIF
C
C ... MMATRI est initialisé dans ASSEM1 et renvoyé en tant que résultat
C     dans la variable MMATRX, il est désactivé à la sortie ...
      CALL ASNS1(KRIGI,MMATRX,INUINX,ITOPOX,IMINIX,IPOX,INCTRX,INCTRZ,
     &     IITOPX,ITOPOD,IITOPD,IPODD)
      IF(IERR.NE.0) RETURN

      IF (IIMPI.EQ.1) THEN
        CALL GIBTEM(XKT)
        INTERR(1)=INT(XKT)
        CALL ERREUR(-259)
        WRITE(IOIMP,11)
   11   FORMAT(' L''IMPRESSION PRECEDENTE EST AVANT LDMT2')
      ENDIF

C ... On initialise IJMAX ici et non dans LDMT2, car celui-ci est
C     appelé deux fois ...
      MMATRI=MMATRX
      SEGACT,MMATRI*MOD
      IJMAX=0
      MFACT=IGRADJ
      SEGDES,MMATRI
C
      TRSUP =.FALSE.
      MENAGE=.FALSE.
      LDIAG =.TRUE.
      njtot=0
C      write(6,*) ' premier appel'
      CALL LDMT2(KRIGI,ITOPOX,INUINX,IMINIX,MMATRX,IPOX,INCTRX,INCTRZ,
     &           IITOPX,TRSUP,MENAGE,LDIAG,IITOPD,ITOPOD,IPODD,njtot,1)
      IF(IERR.NE.0) GOTO 5000
C
      TRSUP =.TRUE.
      MENAGE=.TRUE.
      LDIAG =.FALSE.
C      write(6,*) ' deuxieme appel'
      CALL LDMT2(KRIGI,ITOPOX,INUINX,IMINIX,MMATRX,IPOX,INCTRX,INCTRZ,
     &           IITOPX,TRSUP,MENAGE,LDIAG,IITOPD,ITOPOD,IPODD,njtot,1)
      IF(IERR.NE.0) GOTO 5000
C
      IF (IIMPI.EQ.1)THEN
        CALL GIBTEM(XKT)
        INTERR(1)=INT(XKT)
        CALL ERREUR(-259)
        WRITE(IOIMP,12)
  12    FORMAT(' L''IMPRESSION PRECEDENTE EST AVANT LDMT3')
      ENDIF
C
      nbnnma=0
      nligra=0
      xmatri=0
      istab =0
C
      CALL SHOLE(MMATRX,PREC,ISTAB,NBNNMA,NLIGRA,XMATRI,1)
CC    CALL LDMTS(MMATRX,PREC,istab,nbnnma,nligra,xmatri)
CC    CALL LDMT3(MMATRX,PREC)
      IF(IERR.NE.0) GOTO 5000

      IF (IIMPI.EQ.1)THEN
        CALL GIBTEM(XKT)
        INTERR(1)=INT(XKT)
        CALL ERREUR(-259)
        WRITE(IOIMP,13)
   13   FORMAT(' L''IMPRESSION PRECEDENTE EST APRES LDMT3')
      ENDIF
C
      MRIGID=KRIGI
      SEGACT,MRIGID*MOD
      ICHOLE=MMATRX
      SEGDES MRIGID
C
 5000 CONTINUE
      RETURN
      END
 
 
