C DIRICH    SOURCE    CB215821  23/07/12    21:15:04     11704          
      SUBROUTINE DIRICH

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

-INC PPARAM
-INC CCOPTIO
-INC CCNOYAU
-INC SMTABLE
-INC SMLREEL

       LOGICAL LOGRE,LOGIN
       REAL*8 TEMPS(0:1000),YOUNG(0:1000)
       REAL*8 TREL(0:10),EVO(0:1000,0:10)
       CHARACTER*8  CHARIN,CHARRE
       CHARACTER*(8) CHARA,TYPIND,TYPOBJ
C
      CHARACTER*4 MOUNIT,MOCODE(3)

C
      DATA MOCODE/'EURO','BPEL','LCPC'/

      XVALIN=0.D0
      CHARIN='        '
      LOGIN =.FALSE.
      IOBIN=0
      IVALRE=0
      XVALRE=0.D0
      IOBRE=0

C
C     ON LIT LE MOT UNITE
C
      CALL LIRCHA(MOUNIT,1,IRETOU)
      IF(IERR.NE.0) RETURN
      CALL LIRREE(TMAXA,1,IRETOU)
      IF(IERR.NE.0) RETURN
      CALL LIRENT(NB,1,IRETOU)
      IF(IERR.NE.0) RETURN
      CALL LIRMOT(MOCODE,3,IMLU,0)
*
*      MOT CLE EURO PAR DEFAUT
*
      IF(IMLU.EQ.0) IMLU=1
*
*     CAS EUROCODE
*

      IF(IMLU.EQ.1) THEN
        CALL LIRREE(HO,1,IRETOU)
        IF(IERR.NE.0) RETURN
        CALL LIRREE(ROH,1,IRETOU)
        IF(IERR.NE.0) RETURN
        CALL LIRREE(S,1,IRETOU)
        IF(IERR.NE.0) RETURN
        CALL LIRREE(FCM,1,IRETOU)
        IF(IERR.NE.0) RETURN
*
*     CAS BPEL
*
      ELSE IF(IMLU.EQ.2) THEN
        CALL LIRREE(RM,1,IRETOU)
        IF(IERR.NE.0) RETURN
        CALL LIRREE(RH,1,IRETOU)
        IF(IERR.NE.0) RETURN
        CALL LIRREE(FC28,1,IRETOU)
        IF(IERR.NE.0) RETURN
*
*     CAS LCPC
*
      ELSE
          CALL LIRREE(H0,1,IRETOU)
          IF(IERR.NE.0) RETURN
          CALL LIRREE(RHOS,1,IRETOU)
          IF(IERR.NE.0) RETURN
          CALL LIRREE(E1AN,1,IRETOU)
          IF(IERR.NE.0) RETURN
      ENDIF
*
*      TESTS SUR LES DONNEES
*
      TMAX=TMAXA
      IF (MOUNIT.EQ.'SECO') THEN
        TMAX=TMAXA/3600./24.
      ELSE IF (MOUNIT.EQ.'ANNE')   THEN
        TMAX=TMAXA*365.
      ELSE IF (MOUNIT.NE.'JOUR') THEN
        MOTERR = MOUNIT
        CALL ERREUR(7)
        RETURN
      ENDIF

      IF (NB.GT.8) THEN
         NB=8
      ENDIF

*
*   ICI APPEL AUX ROUTINES DE CALCUL
*
      IF(IMLU.EQ.1) THEN
*
*     ENTREES :  HO en mm
*     EUROCODE   ROH en valeur reelle (  entre 0 et 1 )
*                FCM en MPa
*                Temps en jours
*
         HO=HO*1000.D0
         ROH=ROH/100.D0
         CALL EURODI(HO,ROH,FCM,S,TMAX,NB,TEMPS,
     &               TREL,EVO,YOUNG,LIDIM)
*
      ELSE IF (IMLU.EQ.2) THEN
*
*     ENTREES :  RM en cm
*     BPEL       RH en %  ( entre 0 et 100 )
*                FC28 en MPa
*                Temps en jours
*
         RM=RM*100.D0
         CALL BPELDI(RM,RH,FC28,TMAX,NB,TEMPS,
     &               TREL,EVO,YOUNG,LIDIM)

      ELSE
*
*     ENTREES :  H0 en mm
*     LCPC       RHOS taux d'armatures passives
*                dans une section de beton arme.
*                (0. < RHOS < 1.)
*
          H0 = H0*1000.D0
          CALL LCPCDI(H0,RHOS,E1AN,TMAX,NB,TEMPS,
     &                TREL,EVO,YOUNG,LIDIM)
*
      ENDIF
*
*     CREATION DES TABLES
*
       CALL CRTABL(IPT1)
       CALL CRTABL(IPT2)


*
*   CREATION DE DEUX PROGS
*
       JG=LIDIM+1
*
* AM 5/9/16  ON REMET LA SORTIE DANS LES UNITES ANNONCEES
*
      IF (MOUNIT.EQ.'SECO') THEN
        FAFAC= 3600.*24.
      ELSE IF (MOUNIT.EQ.'ANNE')   THEN
        FAFAC= 1./365.
      ELSE
        FAFAC= 1.
      ENDIF

*  ON CREE LES ABSCISSES
       SEGINI MLREEL
       IPRABS=MLREEL
       DO I=0,LIDIM
         PROG(I+1)=TEMPS(I)*FAFAC
       ENDDO
*
* AM 5/9/16  ON ETEND LES TEMPS A TMAX SI BESOIN 
*
       IF(PROG(JG).LT.TMAXA) PROG(JG)=TMAXA

       SEGDES MLREEL


*  ON CREE LE PROG DES MODULES D'YOUNG
       SEGINI MLREEL
       IPRMOD=MLREEL
       DO I=0,LIDIM
         PROG(I+1)=YOUNG(I)
       ENDDO
       SEGDES MLREEL

*
*   CREATION DE L'OBJET MODULE D'YOUNG
*

      CALL DIRIC1('TEMP',IPRABS,'YOUN',IPRMOD,IPEVYO)


       DO 10 IC=0,NB
*
*        ON CREE LES ORDONNEES
*
         SEGINI MLREEL
         IPRORD=MLREEL
         DO I=0,LIDIM
           PROG(I+1)=EVO(I,IC)
         ENDDO
*
* AM 5/9/16  ON REMET LES INVERSES DES TEMPS DE RELAXATION
*            DANS LES BONNES UNITES
*
         TREL(IC)=TREL(IC)/FAFAC
*
*
*   CREATION D'UN OBJET EVOLUTION
*

      CALL DIRIC1('TEMP',IPRABS,'MODU',IPRORD,IPEV)
      IF(IERR.NE.0) RETURN
*
*        DANS LA TABLE DES MODULES
*        A L'INDICE II ON MET L'EVOLUTION DE POINTEUR IPEV
*
      CALL ECCTAB(IPT2,'ENTIER  ',IC,XVALIN,CHARIN,LOGIN,IOBIN,
     &                 'EVOLUTIO',IVALRE,XVALRE,CHARRE,LOGRE,IPEV)


*
*        DANS LA TABLE DES TEMPS
*        A L'INDICE II ON MET LE TEMPS TREL(IC)
*
      CALL ECCTAB(IPT1,'ENTIER  ',IC,XVALIN,CHARIN,LOGIN,IOBIN,
     &                 'FLOTTANT',IVALRE,TREL(IC),CHARRE,LOGRE,IOBRE)


  10  CONTINUE



*
*     ECRITURE DES RESULTATS
*
      CALL ECROBJ('TABLE',IPT2)
      CALL ECROBJ('TABLE',IPT1)
      CALL ECROBJ('EVOLUTIO',IPEVYO)
      RETURN
      END


 
 
