C FCOUL1    SOURCE    OF166741  25/02/21    21:16:23     12166          
      SUBROUTINE FCOUL1(DEPSI,IPMODL,IPCHE1,IPCHE2,IPCAR,TIME0,TIMEF,
     &                  SIGMA,IPCHE7,IPCHE8,IRETO,NSTRS2)
**********************************************************************
*
*     ECOULEMENT INELASTIQUE POUR LES MODELE A SECTION
*     Boucle sur les ss-zone du modele de section
*
**********************************************************************
*     Pierre Pegon (ISPRA) Juillet/Aout 1993
**********************************************************************
*
*  ENTREES:
*
*  DEPSI(6) INCREMENT DE DEFORMATION POUR LA FIBRE CENTRALE
*  IPMODL = POINTEUR SUR UN OBJET MMODEL
*  IPCHE1 = POINTEUR SUR UN MCHAML DE CONTRAINTES INITIALES
*  IPCHE2 = POINTEUR SUR UN MCHAML DE VARIABLES INTERNES INITIALES
*  IPCAR  = POINTEUR SUR UN MCHAML DE CARACTERISTIQUES
*  TIME0  = INSTANT INITIAL
*  TIMEF  = INSTANT FINAL
*
* SORTIES:
*
*  SIGMA(6) ELEMENT DE REDUCTION DES EFFORT POUR LA FIBRE CENTRALE
*  IPCHE7 = POINTEUR SUR UN MCHAML DE CONTRAINTES
*  IPCHE8 = POINTEUR SUR UN MCHAML DE VARIABLES INTERNES
*
************************************************************************
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)

-INC PPARAM
-INC CCOPTIO
-INC CCHAMP

-INC SMCHAML
-INC SMELEME
-INC SMCOORD
-INC SMMODEL
-INC SMINTE

-INC TMPTVAL

      SEGMENT NOTYPE
        CHARACTER*16 TYPE(NBTYPE)
      ENDSEGMENT

c*      DIMENSION DEPSI(NSTRS2),SIGMA(NSTRS2)
      DIMENSION DEPSI(*),SIGMA(*)

      CHARACTER*8 CMATE
      CHARACTER*(NCONCH) CONM
      CHARACTER*16 MOMODL(10)
      PARAMETER ( NINF=3 )
      INTEGER INFOS(NINF)
      LOGICAL lsupva,lsupco,lsupma,lsupca

      lsupva=.false.
      lsupco=.false.
      lsupma=.false.
      lsupca=.false.
C
      IRETO=0
      NHRM=NIFOUR
C
C     VERIFICATION DU LIEU SUPPORT DU MCHAML DE CONTRAINTES
C
      CALL  QUESUP(IPMODL,IPCHE1,5,0,ISUP1,IRET1)
      IF (ISUP1.GT.1) RETURN
*
*     VERIFICATION DU LIEU SUPPORT DU MCHAML DE VARIABLES INTERNES
*
      CALL  QUESUP(IPMODL,IPCHE2,5,0,ISUP2,IRET2)
      IF (ISUP2.GT.1) RETURN
C
C     VERIFICATION DU LIEU SUPPORT DU MCHAML DE CARACTERISTIQUES
C
      CALL  QUESUP(IPMODL,IPCAR,5,0,ISUP5,IRET5)
      IF (ISUP5.GT.1) RETURN
C
C     ACTIVATION DU MODELE
C
      MMODEL=IPMODL
      SEGACT MMODEL
      NSOUS=KMODEL(/1)
C
C     CREATION DES 2 MCHELMS
C
      N1=NSOUS
      L1=11
      N3=6
      SEGINI MCHELM
      TITCHE='CONTRAINTES'
      IFOCHE=IFOUR
      IPCHE7=MCHELM
      L1=18
      SEGINI MCHEL1
      MCHEL1.TITCHE='VARIABLES INTERNES'
      MCHEL1.IFOCHE=IFOUR
      IPCHE8=MCHEL1
C
C     MISE A ZERO DES CONTRAINTES
C
      DO IE1=1,NSTRS2
        SIGMA(IE1)=0.D0
      ENDDO
C____________________________________________________________________
C
C     DEBUT DE LA BOUCLE SUR LES DIFFERENTES ZONES
C____________________________________________________________________
C
*-DC-
      EPSUP=-1.0D10
      EPINF= 1.0D10
*
      DAMAG= 0.0D0
      ETIQE= 0.0D0
*-DC-

      DO 1000 ISOUS=1,NSOUS
*
*   INITIALISATION
*
         NSTR=0
         MOSTRS=0
         IVASTR=0
         MOVARI=0
         NVARI=0
         NVARF=0
         IVARI=0
         NMATF=0
         NMATR=0
         MOMATR=0
         IVAMAT=0
         NCARA=0
         NCARF=0
         MOCARA=0
         IVACAR=0
         IVASTF=0
         IVARIF=0
C
C     ON RECUPERE L INFORMATION GENERALE
C
         IMODEL=KMODEL(ISOUS)
         SEGACT IMODEL
         IPMAIL=IMAMOD
         CONM  =CONMOD
         IMACHE(ISOUS)=IPMAIL
         CONCHE(ISOUS)=CONMOD
         MCHEL1.IMACHE(ISOUS)=IPMAIL
         MCHEL1.CONCHE(ISOUS)=CONMOD
*
         MELE=NEFMOD
         MELEME=IMAMOD
         SEGACT MELEME
         NBNN=NUM(/1)
         NBELEM=NUM(/2)
C+PPf
C     ON EVACUE LE CAS DU SEGS EN 3D
         IF(MELE.EQ.166.AND.IDIM.EQ.3)THEN
            CALL ERREUR(832)
            GOTO 888
         ENDIF
C+PPf
C
C     TRAITEMENT DU MODELE
C
         NFOR=FORMOD(/2)
         NMAT=MATMOD(/2)
C
C     NATURE DU MATERIAU
C
         CALL NOMATE(FORMOD,NFOR,MATMOD,NMAT,CMATE,MATE,INFIBR)
         IF (CMATE.EQ.' ')THEN
            CALL ERREUR(251)
            GOTO 888
         ENDIF
         IF(MATE.NE.1)THEN
            CALL ERREUR(635)
            GOTO 888
         ENDIF
         CALL TEMANF(INFIBR,NIFIBR)
         IF((NIFIBR.EQ.0).AND.(INFIBR.NE.0))THEN
            CALL ERREUR(636)
            GOTO 888
         ENDIF
         INFIBR=NIFIBR
*
C____________________________________________________________________
C
C     INFORMATION SUR L'ELEMENT FINI
C____________________________________________________________________
C
         MFR  =INFELE(13)
         IPPORE=0
         IF(MFR.EQ.33) IPPORE=NBNN
         IF (MFR.NE.47)THEN
            CALL ERREUR(637)
            SEGSUP MCHELM,MCHEL1
            RETURN
         ENDIF
         NBG  =INFELE(6)
         NBGS =INFELE(4)
         NSTRS=INFELE(16)
         LRE  =INFELE(9)
         LHOOK=INFELE(10)
         LHOO2=LHOOK*LHOOK
*         MINTE=INFELE(11)
         MINTE=infmod(7)
        IPMINT=MINTE
        SEGACT,MINTE
*
*   REMPLISSAGE DES TABLEAUX INFCHE
*
         INFCHE(ISOUS,1)=0
         INFCHE(ISOUS,2)=0
         INFCHE(ISOUS,3)=NHRM
         INFCHE(ISOUS,4)=IPMINT
         INFCHE(ISOUS,5)=0
         INFCHE(ISOUS,6)=5
*
         MCHEL1.INFCHE(ISOUS,1)=0
         MCHEL1.INFCHE(ISOUS,2)=0
         MCHEL1.INFCHE(ISOUS,3)=NHRM
         MCHEL1.INFCHE(ISOUS,4)=IPMINT
         MCHEL1.INFCHE(ISOUS,5)=0
         MCHEL1.INFCHE(ISOUS,6)=5
C
C     CREATION DU TABLEAU INFOS
C
         CALL IDENT(IPMAIL,CONM,IPCHE1,IPCHE2,INFOS,IRTD)
         IF (IRTD.EQ.0)THEN
*            INFO=IPINF
*            SEGSUP INFO
            GOTO 888
         ENDIF
*
*       TRAITEMENT DU CHAMP DE CONTRAINTES
*
        if(lnomid(4).ne.0) then
         nomid=lnomid(4)
         segact nomid
         mostrs=nomid
         nstr=lesobl(/2)
         nfac=lesfac(/2)
         lsupco=.false.
        else
         lsupco=.true.
         CALL IDCONT(IMODEL,IFOUR,MOSTRS,NSTR,NFAC)
        endif
         IF (MOSTRS.EQ.0) THEN
            MOTERR(1:4)='CONT'
            MOTERR(5:8)=NOMTP(MELE)
            CALL ERREUR (76)
*            INFO=IPINF
*            SEGSUP INFO
            GOTO 888
         ENDIF
*
         NBTYPE=1
         SEGINI NOTYPE
         MOTYPE=NOTYPE
         TYPE(1)='REAL*8'
         CALL KOMCHA(IPCHE1,IPMAIL,CONM,MOSTRS,MOTYPE,1,INFOS,3,IVASTR)
         IF(IERR.NE.0)THEN
            SEGSUP NOTYPE
            GOTO 9990
         ENDIF
*
        IF (ISUP1.EQ.1) THEN
           CALL VALCHE(IVASTR,NSTR,IPMINT,IPPORE,MOSTRS,MELE)
           IF(IERR.NE.0)THEN
             SEGSUP NOTYPE
             ISUP1=0
             GOTO 9990
            ENDIF
        ENDIF
*
*       TRAITEMENT DU CHAMP DE VARIABLES INTERNES
*
       if(lnomid(10).ne.0) then
         nomid=lnomid(10)
         segact nomid
         movari=nomid
         nvari=lesobl(/2)
         nvarf=lesfac(/2)
         lsupva=.false.
       else
         lsupva=.true.
         CALL IDVARI(MFR,IMODEL,MOVARI,NVARI,NVARF)
       endif
*       write(6,*) ' lnomid(10) nvari nvarf ', lnomid(10),nvari,nvarf
         IF (MOVARI.EQ.0) THEN
            MOTERR(1:4)='VARI'
            MOTERR(5:8)=NOMTP(MELE)
            CALL ERREUR (76)
            SEGSUP NOTYPE
            GOTO 9990
         ENDIF
*
         CALL KOMCHA(IPCHE2,IPMAIL,CONM,MOVARI,MOTYPE,1,INFOS,3,IVARI)
         IF(IERR.NE.0)THEN
            SEGSUP NOTYPE
            GOTO 9990
         ENDIF
*
        NVART=NVARI+NVARF
        IF (ISUP2.EQ.1) THEN
           CALL VALCHE(IVARI,NVART,IPMINT,IPPORE,MOVARI,MELE)
           IF(IERR.NE.0)THEN
             SEGSUP NOTYPE
             ISUP2=0
             GOTO 9990
            ENDIF
        ENDIF
*
*   TRAITEMENT DU CHAMP DE CARACTERISTIQUES MATERIELLES
*
        if(lnomid(6).ne.0) then
         nomid=lnomid(6)
         segact nomid
         momatr=nomid
         nmatr=lesobl(/2)
         nmatf=lesfac(/2)
         lsupma=.false.
        else
         lsupma=.true.
         CALL IDMATR(MFR,IMODEL,MOMATR,NMATR,NMATF)
        endif
        IF (MOMATR.EQ.0) THEN
           MOTERR(1:4)='MATE'
           MOTERR(5:8)=NOMTP(MELE)
           CALL ERREUR (76)
           GOTO 9990
        ENDIF
*
        IF (NIFIBR.NE.8) THEN
         NBTYPE=1
         SEGINI NOTYPE
         MOTYPE=NOTYPE
         TYPE(1)='REAL*8'
*
        ELSE
          NBTYPE=13
          SEGINI NOTYPE
          MOTYPE=NOTYPE
          DO I=1,NBTYPE
            TYPE(I)='REAL*8'
          ENDDO
          TYPE(10)='POINTEUREVOLUTIO'
          TYPE(11)='POINTEUREVOLUTIO'
*
        ENDIF
*
        CALL KOMCHA(IPCAR,IPMAIL,CONM,MOMATR,MOTYPE,1,
     &                                  INFOS,3,IVAMAT)
        SEGSUP NOTYPE
        IF(IERR.NE.0)THEN
           GOTO 9990
        ENDIF
        NMATT=NMATR+NMATF
*
        IF (ISUP5.EQ.1) THEN
           CALL VALCHE(IVAMAT,NMATT,IPMINT,IPPORE,MOMATR,MELE)
           IF(IERR.NE.0)THEN
              ISUP5=0
              GOTO 9990
           ENDIF
        ENDIF
*
*      TRAITEMENT DU CHAMP DE CARACTERISTIQUES GEOMETRIQUES
*
        if(lnomid(7).ne.0) then
         nomid=lnomid(7)
         segact nomid
         mocara=nomid
         ncara=lesobl(/2)
         ncarf=lesfac(/2)
         lsupca=.false.
        else
         lsupca=.true.
         CALL IDCARB(MELE,IFOUR,MOCARA,NCARA,NCARF)
        endif
*
*        write(6,*) ' lnomid(7) ncara ncarf ' , lnomid(7),ncara,ncarf
        NBTYPE=1
        SEGINI NOTYPE
        MOTYPE=NOTYPE
        TYPE(1)='REAL*8'
*
        CALL KOMCHA(IPCAR,IPMAIL,CONM,MOCARA,MOTYPE,1,
     &                                     INFOS,3,IVACAR)
        SEGSUP NOTYPE
        IF(IERR.NE.0)THEN
           GOTO 9990
        ENDIF
        NCARR=NCARA+NCARF
*
        IF (ISUP5.EQ.1.AND.MOCARA.NE.0) THEN
           CALL VALCHE(IVACAR,NCARR,IPMINT,IPPORE,MOCARA,MELE)
           IF(IERR.NE.0)THEN
              ISUP5=0
              GOTO 9990
           ENDIF
        ENDIF
*
*      CREATION DES MCHAMLS DE LA SOUS ZONE
*
         NBPTEL=NBGS
         NEL=NBELEM
         N1PTEL=NBPTEL
         N1EL=NEL
*
*   CONTRAINTES
*
         N2=NSTRS
         SEGINI MCHAML
         ICHAML(ISOUS)=MCHAML
         NSR=1
         NCOSOR=NSTRS
         SEGINI MPTVAL
         IVASTF=MPTVAL
         NOMID=MOSTRS
         SEGACT NOMID
         DO 1100 ICOMP=1,NSTRS
            NOMCHE(ICOMP)=LESOBL(ICOMP)
            TYPCHE(ICOMP)='REAL*8'
            N2PTEL=0
            N2EL=0
            SEGINI MELVAL
            IELVAL(ICOMP)=MELVAL
            IVAL(ICOMP)=MELVAL
1100     CONTINUE
*
*    VARIABLES INTERNES
*
         N2=NVART
         SEGINI MCHAM1
         MCHEL1.ICHAML(ISOUS)=MCHAM1
         NSR=1
         NCOSOR=NVART
         SEGINI MPTVAL
         IVARIF=MPTVAL
         NOMID=MOVARI
         SEGACT NOMID
         DO 1200 ICOMP=1,NVARI
            MCHAM1.NOMCHE(ICOMP)=LESOBL(ICOMP)
            MCHAM1.TYPCHE(ICOMP)='REAL*8'
            N2PTEL=0
            N2EL=0
            SEGINI MELVAL
            MCHAM1.IELVAL(ICOMP)=MELVAL
            IVAL(ICOMP)=MELVAL
1200     CONTINUE
         DO 1201 ICOMP=NVARI+1,NVART
            MCHAM1.NOMCHE(ICOMP)=LESFAC(ICOMP)
            MCHAM1.TYPCHE(ICOMP)='REAL*8'
            N2PTEL=0
            N2EL=0
            SEGINI MELVAL
            MCHAM1.IELVAL(ICOMP)=MELVAL
            IVAL(ICOMP)=MELVAL
1201     CONTINUE
*
*     APPEL A L'ECOULEMENT PROPREMENT DIT
*
         CALL FCOUL2(DEPSI,INFIBR,MELE,IPMAIL,IPMINT,NBPTEL,IVASTR,
     1        IVARI,IVAMAT,IVACAR,NSTRS,NVART,NMATT,NCARR,TIME0,TIMEF,
     2        SIGMA,IVASTF,IVARIF,EPSUP,EPINF,DAMAG,NSTRS2)
*
 9990    CONTINUE
*
ckich contraction eventuelle des melval
        MPTVAL = IVASTF
        do ICOMP=1,NSTRS
          ichin = ival(icomp)
          call comred(ichin)
          ielval(icomp) = ichin
C*        ival(icomp) = ichin
        enddo

        MPTVAL=IVARIF
        do ICOMP=1,NVARI
          ichin = ival(icomp)
          call comred(ichin)
          mcham1.ielval(icomp) = ichin
C*        ival(icomp) = ichin
        enddo
        do ICOMP=NVARI+1,NVART
          ichin = ival(icomp)
          call comred(ichin)
          mcham1.ielval(icomp) = ichin
C*        ival(icomp) = ichin
        enddo
*     DESACTIVATION DES SEGMENTS
*
         IF(ISUP1.EQ.1)THEN
            CALL DTMVAL (IVASTR,3)
         ELSE
            CALL DTMVAL (IVASTR,1)
         ENDIF
         IF(ISUP2.EQ.1)THEN
            CALL DTMVAL (IVARI,3)
         ELSE
            CALL DTMVAL (IVARI,1)
         ENDIF
         IF(ISUP5.EQ.1)THEN
            CALL DTMVAL (IVAMAT,3)
            CALL DTMVAL (IVACAR,3)
         ELSE
            CALL DTMVAL (IVAMAT,1)
            CALL DTMVAL (IVACAR,1)
         ENDIF
         IF (IERR.EQ.0) THEN
            CALL DTMVAL (IVASTF,1)
            CALL DTMVAL (IVARIF,1)
         ELSE
            CALL DTMVAL (IVASTF,3)
            CALL DTMVAL (IVARIF,3)
         END IF
*
         IF (MOCARA.NE.0) THEN
            NOMID=MOCARA
            if(lsupca)SEGSUP NOMID
         END IF
*
         IF (MOMATR.NE.0) THEN
            NOMID=MOMATR
            if(lsupma)SEGSUP NOMID
         END IF
*
         IF (MOVARI.NE.0) THEN
            NOMID=MOVARI
            if(lsupva)SEGSUP NOMID
         END IF
*
         IF (MOSTRS.NE.0) THEN
            NOMID=MOSTRS
            if(lsupco)SEGSUP NOMID
         END IF

         IF (IERR.NE.0) THEN
            SEGSUP MCHAML,MCHAM1
            GOTO 888
         ENDIF
1000  CONTINUE
*
 888  CONTINUE
      IF (IERR.EQ.0)THEN
         IRETO=1
      ELSE
         IRETO=0
         SEGSUP MCHELM,MCHEL1
      ENDIF
      END

 
