C GRAF      SOURCE    CB215821  23/11/02    21:15:04     11779          

      SUBROUTINE GRAF

      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)

*--------------------------------------------------------------------*
*                                                                    *
*                     Opérateur GRADIENT DE FLEXION                  *
*                     ________________________________               *
*                                                                    *
*          Syntaxe :  GRAF1 = GRAF MOD1 DEP1 ( CAR1 ) ;              *
*                                                                    *
*     Entrees:                                                       *
*                                                                    *
*        MOD1      objet MMODEL                                      *
*        DEP1      CHPOINT ou MCHAML de déplacements                 *
*        CAR1      MCHAML de sous-type CARACTERISTIQUES              *
*                                                                    *
*     Sortie:                                                        *
*                                                                    *
*       GRAF1      MCHAML de sous-type GRADIENT DE FLEXION           *
*                                                                    *
*      passage aux nouveaux MCHAMLs par P.DOWLATYARI le 28/03/91     *
*                                                                    *
*--------------------------------------------------------------------*

-INC PPARAM
-INC CCOPTIO
*
      IPCHL1=0
      IPCHE1=0
      IRET1=0
      IRET2=0
      IRET3=0
*
*     LECTURE D'UN MMODEL
*
      CALL LIROBJ('MMODEL',IPMODL,1,IRET)
      IF (IERR.NE.0) RETURN
      CALL ACTOBJ('MMODEL  ',IPMODL,1)   
*
*       LECTURE D'UN CHPOINT
*
      CALL LIROBJ('CHPOINT',IPCHP1,0,IRET1)
      IF(IERR.NE.0) RETURN
*
*    CHPOINT DE DEPLACEMENT ---> MCHAML AUX NOEUDS
*
      IF (IRET1.NE.0) THEN
         CALL ACTOBJ('CHPOINT',IPCHP1,1)
         CALL CHAME1(0,IPMODL,IPCHP1,' ',IPCHE2,1)
         IF (IERR.NE.0) RETURN
*
*     LECTURE D'UN PREMIER MCHAML (DEPLACEMENTS)
*
      ELSE
         CALL LIROBJ('MCHAML',IPIN,1,IRET2)
         IF (IERR.NE.0) RETURN
         CALL ACTOBJ('MCHAML  ',IPIN,1)   
         CALL REDUAF(IPIN,IPMODL,IPCHE2,0,IR,KER)
         IF(IR   .NE. 1) CALL ERREUR(KER)
         IF(IERR .NE. 0) RETURN
      ENDIF
*
*     LECTURE D'UN DEUXIEME MCHAML (CARACTERISTIQUE)
*
      CALL LIROBJ('MCHAML',IPIN,0,IRET3)
      IF (IERR.NE.0) RETURN      
      IPCHE1=0
      IF (IRET3 .EQ. 1) THEN
        CALL ACTOBJ('MCHAML  ',IPIN,1)   
        CALL REDUAF(IPIN,IPMODL,IPCHE1,0,IR,KER)
        IF(IR   .NE. 1) CALL ERREUR(KER)
        IF(IERR .NE. 0) RETURN
      ENDIF
      
      IF (IRET3.NE.0.AND.IRET2.NE.0) THEN
        CALL RNGCHA (IPCHE1,IPCHE2,'CARACTERISTIQUES',
     1               'DEPLACEMENTS',IPCHA1,IPCHA2)
        IF(IPCHA1.EQ.0.OR.IPCHA2.EQ.0)THEN
           CALL ERREUR(805)
           RETURN
        ENDIF
        IPCHE1=IPCHA1
        IPCHE2=IPCHA2
      ENDIF
*
*     GESTION DES OPERANDES
*
      CALL GRAF1(IPMODL,IPCHE2,IPCHE1,IPCHL1,IRET)
      IF(IERR .NE. 0) RETURN
*
      IF (IRET.EQ.1) THEN
          CALL ACTOBJ('MCHAML',IPCHL1,1)
          CALL ECROBJ('MCHAML',IPCHL1)
      ENDIF

      RETURN
      END
 
