C MANUEL    SOURCE    OF166741  23/06/30    21:15:06     11696          
      SUBROUTINE MANUEL
C
C   FABRICATION MANUELLE D OBJETS DIVERS ET VARIES
C   DE TYPE ELEMENT,CHAMPOIN,SOLUTION, RIGIDITE, CHAMELEM
C
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)

-INC PPARAM
-INC CCOPTIO
-INC CCGEOME

-INC SMELEME
      SEGMENT MTRT
         INTEGER MTT(NTT)
      ENDSEGMENT

      PARAMETER (LMOOPT=6)
      CHARACTER*4 MOOPT(LMOOPT)
      DATA MOOPT/'CHPO','MODE','RIGI','CHAM','CHML','OBJE'/

      CALL LIRMOT(NOMS,NOMBR,I,0)
      IF (I.NE.0) GOTO 2

      CALL LIRMOT(MOOPT,LMOOPT,IMOT,1)
      IF (IERR.NE.0) RETURN
      GO TO (100,200,300,500,600,700),IMOT
      CALL ERREUR(21)
      RETURN

 100  CALL MANUCH
      GO TO 30
 200  CALL MANUMO
      GO TO 30
 300  CALL MANURI
      GO TO 30
 500  CALL MAMANU
      GO TO 30
 600  CALL MANUC5
      GO TO 30
 700  CALL MANUOB
      GO TO 30
c
c==== Cas des Objets MAILLAGES ====================================
   2  CONTINUE
      ITYP=I
      CALL LIRMOT(NCOUL,NBCOUL,ICOUL,0)
      IF (ICOUL.EQ.0) ICOUL=IDCOUL+1
      ICOUL=ICOUL-1
      NBSOUS=0
      NBREF=0
      NBELEM=1
c---- SUPERELEMENT ---------------
      IF(NOMS(ITYP).EQ.'SUPE') THEN
         CALL LIROBJ('MAILLAGE',IPT1,0,IRETOU)
         IF (IRETOU.EQ.0) GO TO 25
         SEGACT IPT1
         IF(IPT1.ITYPEL.NE.1) THEN
            CALL CHANGE (IPT1,1)
            IF (IERR.NE.0) RETURN
            SEGACT IPT1
         ENDIF
         NBNN = IPT1.NUM(/2)
         SEGINI MELEME
         ICOLOR(1)=ICOUL
         ITYPEL=ITYP
         DO I=1,NBNN
           NUM(I,1)=IPT1.NUM(1,I)
         ENDDO
         GO TO 11
   25    NTT=50
         SEGINI MTRT
         NBNN=0
   28    CONTINUE
         CALL LIROBJ('POINT   ',IP,0,IRETOU)
         IF(IRETOU.EQ.0)GO TO 29
         NBNN=NBNN + 1
         IF(NBNN.GT.NTT) THEN
            NTT=NTT+50
            SEGADJ MTRT
         ENDIF
         MTT(NBNN) = IP
         GO TO 28
   29    CONTINUE
         SEGINI MELEME
         ICOLOR(1)=ICOUL
         ITYPEL=ITYP
         DO I=1,NBNN
           NUM(I,1)=MTT(I)
         ENDDO
         SEGSUP MTRT
c---- AUTRE TYPE D'ELEMENTS ---------------
      ELSE
         NBNN=NBNNE(ITYP)
c        dans le cas POLYgone et MULtiplicateur le nbre de noeuds par
c        element est indefini d'ou la lecture facultative des points
         IF (NOMS(ITYP).EQ.'POLY') THEN
           NBNN = 14
           IDOBL = 0
         ELSE IF (NOMS(ITYP).EQ.'MULT') THEN
           NBNN = 9999
           IDOBL = 0
         ELSE
           IDOBL = 1
         ENDIF
         SEGINI MELEME
         ICOLOR(1)=ICOUL
         ITYPEL=ITYP
C SG On ajoute la possibilite de generer un element a partir
C des premiers points d'un maillage de 'POI1'
         CALL LIROBJ('MAILLAGE',IPT1,0,IRETOU)
         IF (IERR.NE.0) RETURN
         IF (IRETOU.NE.0) THEN
            SEGACT IPT1
            IF(IPT1.ITYPEL.NE.1) THEN
               CALL CHANGE(IPT1,1)
               IF (IERR.NE.0) RETURN
               SEGACT IPT1
            ENDIF
            NBNN1=IPT1.NUM(/2)
            IF (NBNN1.EQ.0) THEN
               NBELEM=0
               SEGADJ MELEME
               GOTO 11
            ENDIF
            IF (IDOBL.EQ.0) NBNN=NBNN1
            SEGINI MELEME
            ICOLOR(1)=ICOUL
            ITYPEL=ITYP
            DO I=1,NBNN
               NUM(I,1)=IPT1.NUM(1,(MOD(I-1,NBNN1))+1)
            ENDDO
         ELSE
            DO I=1,NBNN
c          on donne ici la possibilite de creer un meleme avec 0 element
               IF(I.EQ.1) THEN
                  CALL LIROBJ('POINT   ',IP,0,IRETOU)
               ELSE
                  CALL LIROBJ('POINT   ',IP,IDOBL,IRETOU)
               ENDIF
               IF (IRETOU.NE.1) THEN
                  IF (I.EQ.1) THEN
                     NBELEM = 0
                     SEGADJ MELEME
                     if(iimpi.ge.1) write(ioimp,*
     $                    )'MAILLAGE DE 0 ELEMENT CREE'
                  ENDIF
                  IF (IDOBL.EQ.0) THEN
C              CAS DU POLYGONE ou du MULT
                     NBNN = I-1
                     SEGADJ MELEME
                  ENDIF
                  GOTO 11
               ENDIF
               NUM(I,1)=IP
            ENDDO
         ENDIF
      ENDIF
  11  CONTINUE
      IF (IERR.NE.0) THEN
        SEGSUP MELEME
      ELSE
        CALL ECROBJ('MAILLAGE',MELEME)
        SEGDES MELEME
      ENDIF

 30   CONTINUE
c      RETURN
      END

 
