varile
C VARILE SOURCE OF166741 26/02/19 21:15:04 12437 SUBROUTINE VARILE(IPTABL,IPMODL,IPCH1,IPCH2,IPCH3,LESUP,CHARP, & IRET) C======================================================================= * * OBJET : * °°°°°°° * * ENTREES : * --------- * IPMODL Pointeur sur un MMODEL (=0 si syntaxe CHPOINT) * IPCH1 Pointeur sur un MCHAML ou CHPOINT (PARAMETRES finaux) * IPCH2 Pointeur sur un MCHAML ou CHPOINT (COEFFICIENTS) * IPCH3 Pointeur sur un MCHAML ou CHPOINT (ETAT initial) * LESUP Support de sortie pour le champ si MCHAML * CHARP Chaine definissant le sous type (facultatif) pour MCHAML * * * SORTIE : * °°°°°°°° * IRET Pointeur sur le MCHAML ou CHPOINT resultat * =0 si operation impossible * C======================================================================= IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCNOYAU -INC CCASSIS -INC CCREEL -INC SMCOORD -INC SMELEME -INC SMMODEL POINTEUR MOPARA.NOMID,MOPAVA.NOMID,MOCOEF.NOMID -INC SMCHAML -INC SMCHPOI POINTEUR IMETAF.MPOVAL,IMETAI.MPOVAL,IMCOEF.MPOVAL -INC SMLMOTS -INC SMTABLE -INC TMPTVAL POINTEUR IVPARF.MPTVAL,IVETAI.MPTVAL,IVCOEF.MPTVAL SEGMENT ICPR(nbpts) SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT POINTEUR MOTYR8.notype C Entrees/sorties de la routine UMAT SEGMENT WKUMAT REAL*8 TIME(2),DTIME, TEMP,DTEMP, PRED(NPRED),DPRED(NPRED), & STATEV(NSTATV), PROPS(NPROPS) REAL*8 PNEWDT, sse, spd, scd, rpl, drpldt, & sigt(ntens), epst(ntens), depst(ntens), & ddsdde(ntens,ntens), ddsddt(ntens), drplde(ntens) INTEGER ndi, nshr, lcarac, layer, kspt, kstep, KINC CHARACTER*16 CMNAME ENDSEGMENT CHARACTER*(*) CHARP CHARACTER*(NCONCH) CONM PARAMETER ( NINF=3 ) INTEGER INFOS(NINF) IRET = 0 JERR = 99 C------------------------------------------------- C- Vérification de la table & Preconditionnement : C------------------------------------------------- ip = 1 CALL SELLOI(IPTABL,MTAB1,ip) IF (MTAB1.LE.0 .OR. IERR.NE.0) RETURN ITROU1 = mtab1.MTABIV(1) LMEPTR = mtab1.MTABIV(2) MLMOT1 = mtab1.MTABIV(3) MLMOT3 = mtab1.MTABIV(4) MLMOT2 = mtab1.MTABIV(5) ITROUT = mtab1.MTABIV(6) SEGDES,mtab1 SEGACT,MLMOT1,MLMOT3 NETAT = NPARA + NVARI NCOEF = 0 IF (MLMOT2.GT.0) THEN SEGACT,MLMOT2 ENDIF IF (ITROU1.NE.1) THEN MOTERR = '(VARI LEXT) valeur ITROU1 inattendue !' GOTO 9900 ENDIF IF (NPARA.EQ.0) THEN MOTERR = '(VARI LEXT) PARA_LOI = 0 !' GOTO 9900 ENDIF IF (NVARI.EQ.0) THEN MOTERR = '(VARI LEXT) VARI_LOI = 0 !' GOTO 9900 ENDIF C- IPCH2 = 0 implique IPCH3 = 0 IF (NCOEF.GT.0) THEN IF (IPCH2.EQ.0 .AND. IPCH3.EQ.0) THEN MOTERR = 'COEF_LOI/COEFFICIENTS' GOTO 9900 ENDIF ENDIF IF (ITROUT .EQ. 11) THEN NPRED = NPARA - 2 ELSE IF (ITROUT .EQ. 01 .OR. ITROUT.EQ.10) THEN NPRED = NPARA - 1 ELSE NPRED = NPARA ENDIF NSTATV = NVARI NPROPS = MAX(1,NCOEF) ntens = 6 SEGINI,WKUMAT C- Initialisations arbitraires du segment wkumat C- Instant initial et pas de temps (iteration globale, TIME(1) = 0.D0 TIME(2) = 0.D0 DTIME = 0.D0 C- Temperature a t0 et increment TEMP = 0.0D0 DTEMP = 0.0D0 C- Parametres : DO i = 1, NPRED PRED(i) = 0.D0 DPRED(i) = 0.D0 ENDDO C- Variables : DO i = 1, NSTATV STATEV(i) = 0.D0 ENDDO C- Coefficients : DO i = 1, NPROPS PROPS(i) = 0.D0 ENDDO sse = 0.D0 spd = 0.D0 scd = 0.D0 rpl = 0.D0 drpldt = 0.D0 DO i = 1, ntens sigt(i) = 0.D0 epst(i) = 0.D0 depst(i) = 0.D0 DO j = 1, ntens ddsdde(j,i) = 0.D0 ENDDO ddsddt(i) = 0.D0 drplde(i) = 0.D0 ENDDO DO j = 1, 3 coorga(j) = 0.D0 DO i = 1, 3 DFGRD0(i,j) = 0.D0 DFGRD1(i,j) = 0.D0 ENDDO DFGRD0(j,j) = 1.D0 DFGRD1(j,j) = 1.D0 ENDDO PNEWDT = 1.0D+6 lcarac = 0.D0 NDI = IFOUR NSHR = 0 LAYER = 0 KSPT = 0 KSTEP = 1 KINC = 1 CMNAME = 'LOIEXT ' SEGACT,MCOORD C---------------------------------------------------------- C SYNTAXE 1 : MODELE MCHAML (MCHAML) (MCHAML) SUPPORT TYPE C---------------------------------------------------------- IF (IPMODL.NE.0) THEN MCHEL1 = 0 MCHEL2 = 0 MCHEL3 = 0 lesup1 = LESUP IF (iret.NE.0) THEN GOTO 1900 ENDIF IF (IPCH2.GT.0) THEN IF (iret.NE.0) THEN GOTO 1900 ENDIF ENDIF IF (IPCH3.GT.0) THEN IF (iret.NE.0) THEN GOTO 1900 ENDIF ENDIF IF (NCOEF.GT.0) THEN ierloc = 0 DO IN = 1, NCOEF IF (ip.NE.0) ierloc = ierloc + 1 ENDDO SEGSUP,mlmots C- Pas de composantes COEF dans IPCH2/MCHEL2 C- On permute MCHEL2 et MCHEL3 si possible IF (ierloc.EQ.0) THEN IF (IPCH3.EQ.0) THEN MOTERR = 'COEF_LOI/COEFFICIENTS' GOTO 1900 ENDIF ip = MCHEL2 MCHEL2 = MCHEL3 MCHEL3 = ip ENDIF ELSE MCHEL3 = MCHEL2 MCHEL2 = 0 ENDIF C- MCHEL1 = PARAmetres, MCHEL2 = COEFFicients, MCHEL3 = VARIables init NBROBL = NPARA NBRFAC = 0 SEGINI,MOPARA DO in = 1, NPARA ENDDO NBROBL = NETAT NBRFAC = 0 SEGINI,MOPAVA DO in = 1, NPARA ENDDO DO in = 1, NVARI ENDDO MOCOEF = 0 IF (NCOEF.GT.0) THEN NBROBL = NCOEF NBRFAC = 0 SEGINI,MOCOEF DO in = 1, NCOEF ENDDO ENDIF nbtype = 1 SEGINI,MOTYR8 motyr8.TYPE(1) = 'REAL*8 ' MMODEL = IPMODL NSOUS = mmodel.KMODEL(/1) C Creation du MCHAML N1 = NSOUS N3 = 6 IF (CHARP.EQ.' ') THEN L1 = mchel1.TITCHE(/1) ELSE L1 = LEN(CHARP) ENDIF SEGINI,MCHELM mchelm.IFOCHE = mchel1.IFOCHE IF (CHARP.EQ.' ') THEN mchelm.TITCHE = MCHEL1.TITCHE ELSE mchelm.TITCHE = CHARP ENDIF C Boucle sur les sous-zones du MMODEL ISOUS = 0 DO IS = 1, NSOUS IMODEL = mmodel.KMODEL(IS) C INITIALISATIONS MELE = imodel.NEFMOD IPMAIL = imodel.IMAMOD CONM = imodel.CONMOD c*? IF (MELE.EQ.259) GOTO 100 IVPARF = 0 IVCOEF = 0 IVETAI = 0 kerr = 99 ISOUS = ISOUS + 1 C CREATION DU TABLEAU INFOS (UTILITE ?) irtd = 1 IF (irtd.NE.1) GOTO 190 c*? IF (MELE.EQ.22) GOTO 100 C Recuperation du segment d'integration MINTE du modele associe a LESUP C Supports d'integration specifiques selon la formulation du modele IPMINT = 0 lesup1 = LESUP ithdm = 0 nfor = imodel.FORMOD(/2) IF (ichph.NE.0 .OR. icont.NE.0 .OR. icntr.NE.0 .OR. & iliai.NE.0) lesup1 = 1 IF (ither.NE.0 .OR. idiff.NE.0 .OR. imeta.NE.0) ithdm = 1 c? Peut-on avoir un support 6 en dehors des formulations listees ci-avant ? IF ( lesup1 .EQ. 6 ) ithdm = 1 C Cas des JOI1 ==> Ressorts THERMIQUES IF (MELE .EQ. 265) lesup1 = 1 IF (ithdm.NE.0) THEN C Support 6 SAUF pour le RAYONNEMENT... nmat = imodel.MATMOD(/2) IF (iray.EQ.0) THEN IF (lesup1.GT.2) lesup1 = 6 NLG = MELE ELSE IF (lesup1.GT.2) lesup1 = 3 ENDIF IF (lesup1.EQ.1) THEN ELSE IF (lesup1.EQ.2) THEN ELSE IF (lesup1.EQ.6) THEN ENDIF ELSE if (infmod(/1).lt.2+lesup1) then moterr = '(VARILE) ERREUR 5 - INFMOD(/1) inconsistent?' goto 190 endif IPMINT = INFMOD(2+lesup1) ENDIF if (ipmint.eq.0) then goto 190 endif NPINT = INFMOD(1) * On determine le support IPLACA de la zone du champ en entree : MINTE1 = MCHEL1.INFCHE(IS,4) IF (MINTE1.EQ.0) THEN IPLACA = 0 ELSE IPLACA = MCHEL1.INFCHE(ISOUS,6) ENDIF & IVPARF) IF (IERR.NE.0) GOTO 190 NBGETF = 0 NELETF = 0 DO in = 1, NPARA MELVAL = ivparf.IVAL(in) NBGETF = MAX(NBGETF,MELVAL.VELCHE(/1)) NELETF = MAX(NELETF,MELVAL.VELCHE(/2)) ENDDO IF (NCOEF.GT.0) THEN & IVCOEF) IF (IERR.NE.0) GOTO 190 DO in = 1, NCOEF MELVAL = ivcoef.IVAL(in) NBGETF = MAX(NBGETF,MELVAL.VELCHE(/1)) NELETF = MAX(NELETF,MELVAL.VELCHE(/2)) ENDDO ENDIF IF (MCHEL3.GT.0) THEN & IVETAI) IF (IERR.NE.0) GOTO 190 DO in = 1, NETAT MELVAL = ivetai.IVAL(in) NBGETF = MAX(NBGETF,MELVAL.VELCHE(/1)) NELETF = MAX(NELETF,MELVAL.VELCHE(/2)) ENDDO ENDIF N2 = NETAT SEGINI,MCHAML DO in = 1, NPARA mchaml.nomche(in) = mopara.LESOBL(in) mchaml.typche(in) = 'REAL*8 ' mchaml.ielval(in) = ivparf.IVAL(in) ENDDO N1PTEL = NBGETF N1EL = NELETF N2PTEL = 0 N2EL = 0 DO in = 1, NVARI mchaml.nomche(NPARA+in) = mopava.LESOBL(NPARA+in) mchaml.typche(NPARA+in) = 'REAL*8 ' SEGINI,MELVAL mchaml.ielval(NPARA+in) = MELVAL ENDDO mchelm.IMACHE(ISOUS) = IPMAIL mchelm.CONCHE(ISOUS) = CONM mchelm.ICHAML(ISOUS) = MCHAML DO ip = 1, N3 mchelm.INFCHE(ISOUS,ip) = mchel1.INFCHE(IS,ip) ENDDO mchelm.INFCHE(ISOUS,4) = IPMINT IF (lesup1.EQ.1) mchelm.INFCHE(ISOUS,4) = 0 mchelm.INFCHE(ISOUS,6) = lesup1 DO IELT = 1, NELETF DO IGAU = 1, NBGETF C Recuperation des coefficients IF (NCOEF.GT.0) THEN DO in = 1, NCOEF MELVAL = ivcoef.IVAL(in) IG = MIN(IGAU,melval.VELCHE(/1)) IE = MIN(IELT,melval.VELCHE(/2)) wkumat.PROPS(in) = melval.VELCHE(IG,IE) ENDDO ENDIF C Recuperation des parametres finaux IF (ITROUT .EQ. 11) THEN MELVAL = ivparf.IVAL(1) IG = MIN(IGAU,MELVAL.VELCHE(/1)) IE = MIN(IELT,MELVAL.VELCHE(/2)) wkumat.DTIME = melval.VELCHE(IG,IE) MELVAL = ivparf.IVAL(2) IG = MIN(IGAU,MELVAL.VELCHE(/1)) IE = MIN(IELT,MELVAL.VELCHE(/2)) wkumat.DTEMP = melval.VELCHE(IG,IE) ELSE IF (ITROUT .EQ. 10) THEN MELVAL = ivparf.IVAL(1) IG = MIN(IGAU,MELVAL.VELCHE(/1)) IE = MIN(IELT,MELVAL.VELCHE(/2)) wkumat.DTEMP = melval.VELCHE(IG,IE) ELSE IF (ITROUT .EQ. 01) THEN MELVAL = ivparf.IVAL(1) IG = MIN(IGAU,MELVAL.VELCHE(/1)) IE = MIN(IELT,MELVAL.VELCHE(/2)) wkumat.DTIME = melval.VELCHE(IG,IE) ENDIF MELVAL = ivparf.IVAL(in) IG = MIN(IGAU,MELVAL.VELCHE(/1)) IE = MIN(IELT,MELVAL.VELCHE(/2)) ENDDO C Recuperation de l'etat initial (si fourni) - Maj Increment IF (IVETAI.NE.0) THEN IF (ITROUT .EQ. 11) THEN MELVAL = ivetai.IVAL(1) IG = MIN(IGAU,MELVAL.VELCHE(/1)) IE = MIN(IELT,MELVAL.VELCHE(/2)) r_z = melval.VELCHE(IG,IE) wkumat.TIME(2) = r_z wkumat.DTIME = wkumat.DTIME - r_z MELVAL = ivetai.IVAL(2) IG = MIN(IGAU,MELVAL.VELCHE(/1)) IE = MIN(IELT,MELVAL.VELCHE(/2)) r_z = melval.VELCHE(IG,IE) wkumat.TEMP = r_z wkumat.DTEMP = wkumat.DTEMP - r_z ELSE IF (ITROUT .EQ. 10) THEN MELVAL = ivetai.IVAL(1) IG = MIN(IGAU,MELVAL.VELCHE(/1)) IE = MIN(IELT,MELVAL.VELCHE(/2)) r_z = melval.VELCHE(IG,IE) wkumat.TEMP = r_z wkumat.DTEMP = wkumat.DTEMP - r_z ELSE IF (ITROUT .EQ. 01) THEN MELVAL = ivetai.IVAL(1) IG = MIN(IGAU,MELVAL.VELCHE(/1)) IE = MIN(IELT,MELVAL.VELCHE(/2)) r_z = melval.VELCHE(IG,IE) wkumat.TIME(2) = r_z wkumat.DTIME = wkumat.DTIME - r_z ENDIF MELVAL = ivetai.IVAL(in) IG = MIN(IGAU,melval.VELCHE(/1)) IE = MIN(IELT,melval.VELCHE(/2)) r_z = melval.VELCHE(IG,IE) ENDDO DO in = 1, NVARI MELVAL = ivetai.IVAL(NPARA+in) IG = MIN(IGAU,melval.VELCHE(/1)) IE = MIN(IELT,melval.VELCHE(/2)) wkumat.STATEV(in) = melval.VELCHE(IG,IE) ENDDO ENDIF ** segprt,wkumat C Appel depuis CAST3M a la loi externe pointee par LMPETR CALL UMATEXT( LMEPTR, & sigt, STATEV, ddsdde, sse, spd, scd, & rpl, ddsddt, drplde, drpldt, & epst, depst, TIME, DTIME, & TEMP, DTEMP, PRED, DPRED, & CMNAME, ndi, nshr, ntens, NSTATV, & PROPS, NCOEF, coorga, & drot, PNEWDT, lcarac, dfgrd0, dfgrd1, & IELT, IGAU, layer, kspt, kstep, KINC ) IF (KINC.NE.1) THEN INTERR(1) = KINC GOTO 190 ENDIF C Recuperation de l'etat final calcule DO in = 1, NVARI MELVAL = mchaml.IELVAL(NPARA+in) melval.VELCHE(IGAU,IELT) = wkumat.STATEV(in) ENDDO ENDDO ENDDO kerr = 0 190 CONTINUE IF (IVPARF.NE.0) SEGSUP,IVPARF IF (IVCOEF.NE.0) SEGSUP,IVCOEF IF (IVETAI.NE.0) SEGSUP,IVETAI IF (kerr.NE.0) GOTO 1900 100 CONTINUE ENDDO C FIN de la boucle sur les sous-zones du MMODEL C ----------------------------------------------- C* Ajustement du champ de sortie : IF (ISOUS.NE.NSOUS) THEN N1 = ISOUS SEGADJ,mchelm ENDIF C* Compactage du champ de sortie : NSOUS = mchelm.ICHAML(/1) DO IS = 1, NSOUS MCHAML = mchelm.ICHAML(IS) DO im = 1, mchaml.IELVAL(/1) MELVAL = mchaml.IELVAL(im) mchaml.IELVAL(im) = MELVAL ENDDO ENDDO IRET = MCHELM JERR = 0 C Erreur lors du traitement 1900 CONTINUE IF (JERR.NE.0) THEN SEGSUP,MCHELM IRET = 0 ENDIF SEGSUP,MOPARA,MOPAVA,MOTYR8 C-------------------------------------- C SYNTAXE 2 : MCHPOI (MCHPOI) (MCHPOI) C-------------------------------------- ELSE ilm1 = 0 ilm2 = 0 ilm3 = 0 IMETAF = 0 IMCOEF = 0 IMETAI = 0 ICPR = 0 C- Composantes de IPCH1 C- Composantes de IPCH2 C- Composantes de IPCH3 C- Composantes du Champ final jgm = NETAT SEGINI,MLMOT4 DO in = 1, NPARA ENDDO DO in = 1, NVARI ENDDO C- Verification de la presence de PARAMETRES dans IPCH1 mlmots = ilm1 ierloc = 0 DO IN = 1, NPARA IF (ip.EQ.0) THEN MOTERR = 'ERROR: PARA_LOI/PARAMETRES "'// ierloc = ierloc + 1 ENDIF ENDDO IF (ierloc.NE.0) THEN GOTO 2900 ENDIF C- Verification de la presence de COEFFICIENTS dans IPCH2 IF (NCOEF.GT.0) THEN mlmots = ilm2 ierloc = 0 DO IN = 1, NCOEF IF (ip.NE.0) ierloc = ierloc + 1 ENDDO C- Pas de composantes COEF dans IPCH2 -> On permute IPCH2 et IPCH3 IF (ierloc.EQ.0) THEN IF (IPCH3.EQ.0) THEN MOTERR = 'COEF_LOI/COEFFICIENTS' GOTO 2900 ENDIF ip = IPCH2 IPCH2 = IPCH3 IPCH3 = ip ip = ilm2 ilm2 = ilm3 ilm3 = ip mlmots = ilm2 ierloc = 0 DO IN = 1, NCOEF IF (ip.EQ.0) THEN MOTERR = 'ERROR: COEF_LOI/COEFFICIENTS "'// ierloc = ierloc + 1 ENDIF ENDDO IF (ierloc.NE.0) THEN GOTO 2900 ENDIF ENDIF ELSE IPCH3 = IPCH2 IPCH2 = 0 ilm3 = ilm2 ilm2 = 0 ENDIF C- Verification de la presence de PARAMETRES/VARIABLES dans IPCHE3 IF (IPCH3.GT.0) THEN mlmots = ilm3 ierloc = 0 DO IN = 1, NPARA IF (ip.EQ.0) THEN MOTERR = 'ERROR: PARA_LOI/PARAMETRES "'// ierloc = ierloc + 1 ENDIF ENDDO DO IN = 1, NVARI IF (ip.EQ.0) THEN MOTERR = 'ERROR: VARI_LOI/VARIABLES "'// ierloc = ierloc + 1 ENDIF ENDDO IF (ierloc.NE.0) THEN GOTO 2900 ENDIF ENDIF C- IPCH1 = PARAmetres, IPCH2 = COEFF, IPCH3 = VARI init C- Maillage support de IPCH1 via ICPR : C- ICPR(i) = j (jeme noeud du support = noeud numero i) IMUL = 1 CALL EXTR21(IPCH1,IMUL,IPT1) IF (IERR.NE.0) RETURN nnnoe = ipt1.NUM(/2) mchpo1 = IPCH1 SEGINI,icpr nnnoe = 0 DO I = 1, mchpo1.IPCHP(/1) MSOUPO = mchpo1.IPCHP(I) IN = 0 DO J = 1, msoupo.NOCOMP(/2) c*? NHARMO = msoupo.NOHARM(J) IF (ip.NE.0) IN = IN + 1 ENDDO IF (IN.GT.0) THEN MELEME = msoupo.IGEOC DO K = 1, meleme.NUM(/2) inoe = meleme.num(1,K) IF (ICPR(inoe).EQ.0) THEN nnnoe = nnnoe + 1 ICPR(inoe) = nnnoe ENDIF ENDDO ENDIF ENDDO C- Recuperation des parametres finaux (imetaf) N = nnnoe NC = NETAT SEGINI,IMETAF mchpo1 = IPCH1 DO i = 1, mchpo1.IPCHP(/1) MSOUPO = mchpo1.IPCHP(i) MELEME = msoupo.IGEOC MPOVAL = msoupo.IPOVAL DO j = 1, msoupo.NOCOMP(/2) c*? NHARMO = msoupo.NOHARM(j) IF (ip.GT.0) THEN DO k = 1, meleme.NUM(/2) inoe = icpr(meleme.NUM(1,k)) imetaf.vpocha(inoe,ip) = mpoval.vpocha(k,j) ENDDO ENDIF ENDDO ENDDO ifo1 = MCHPO1.IFOPOI ifos = ifo1 C- Recuperation des coefficients (si besoin) IF (NCOEF.GT.0) THEN N = nnnoe NC = NCOEF SEGINI,IMCOEF mchpo2 = IPCH2 DO i = 1, mchpo2.IPCHP(/1) MSOUPO = mchpo2.IPCHP(i) MELEME = msoupo.IGEOC MPOVAL = msoupo.IPOVAL DO j = 1, msoupo.NOCOMP(/2) c*? NHARMO = msoupo.NOHARM(J) IF (ip.GT.0) THEN DO k = 1, meleme.NUM(/2) inoe = icpr(meleme.NUM(1,k)) if (inoe.gt.0) then imcoef.vpocha(inoe,ip) = mpoval.vpocha(k,j) endif ENDDO ENDIF ENDDO ENDDO ifo2 = MCHPO2.IFOPOI IF (ifo1 .NE. ifo2) THEN moterr(1:8)='CHPOINT' interr(1)=ifo1 interr(2)=ifo2 interr(3)=IFOUR ifos = IFOUR ENDIF ENDIF C- Recuperation de l'etat initial si fourni IF (IPCH3.GT.0) THEN N = nnnoe NC = NETAT SEGINI,IMETAI mchpo3 = IPCH3 DO i = 1, mchpo3.IPCHP(/1) MSOUPO = mchpo3.IPCHP(i) MELEME = msoupo.IGEOC MPOVAL = msoupo.IPOVAL DO j = 1, msoupo.NOCOMP(/2) c*? NHARMO = msoupo.NOHARM(J) IF (ip.GT.0) THEN DO k = 1, meleme.NUM(/2) inoe = icpr(meleme.NUM(1,k)) if (inoe.gt.0) then imetai.vpocha(inoe,ip) = mpoval.vpocha(k,j) endif ENDDO ENDIF ENDDO ENDDO ifo3 = MCHPO3.IFOPOI IF (ifo1 .NE. ifo3) THEN moterr(1:8)='CHPOINT' interr(1)=ifo1 interr(2)=ifo3 interr(3)=IFOUR ifos = IFOUR ENDIF ENDIF C- Calcul de la loi sur les neouds supports de IPCH1 DO IP = 1, nnnoe C Recuperation des parametres finaux IF (ITROUT .EQ. 11) THEN wkumat.DTIME = imetaf.vpocha(IP,1) wkumat.DTEMP = imetaf.vpocha(IP,2) ELSE IF (ITROUT .EQ. 10) THEN wkumat.DTEMP = imetaf.vpocha(IP,1) ELSE IF (ITROUT .EQ. 01) THEN wkumat.DTIME = imetaf.vpocha(IP,1) ENDIF ENDDO C Recuperation des coefficients IF (NCOEF.GT.0) THEN DO in = 1, NCOEF wkumat.PROPS(in) = imcoef.vpocha(IP,in) ENDDO ENDIF C Recuperation de l'etat initial (si fourni) - Maj Increment IF (IMETAI.NE.0) THEN IF (ITROUT .EQ. 11) THEN r_z = imetai.vpocha(IP,1) wkumat.TIME(2) = r_z wkumat.DTIME = wkumat.DTIME - r_z r_z = imetai.vpocha(IP,2) wkumat.TEMP = r_z wkumat.DTEMP = wkumat.DTEMP - r_z ELSE IF (ITROUT .EQ. 10) THEN r_z = imetai.vpocha(IP,1) wkumat.TEMP = r_z wkumat.DTEMP = wkumat.DTEMP - r_z ELSE IF (ITROUT .EQ. 01) THEN r_z = imetai.vpocha(IP,1) wkumat.TIME(2) = r_z wkumat.DTIME = wkumat.DTIME - r_z ENDIF r_z = imetai.vpocha(IP,in) ENDDO DO in = 1, NVARI wkumat.STATEV(in) = imetai.vpocha(IP,NPARA+in) ENDDO ENDIF C Appel depuis CAST3M a la loi externe pointee par LMPETR CALL UMATEXT( LMEPTR, & sigt, STATEV, ddsdde, sse, spd, scd, & rpl, ddsddt, drplde, drpldt, & epst, depst, TIME, DTIME, & TEMP, DTEMP, PRED, DPRED, & CMNAME, ndi, nshr, ntens, NSTATV, & PROPS, NCOEF, coorga, & drot, PNEWDT, lcarac, dfgrd0, dfgrd1, & IELT, IGAU, layer, kspt, kstep, KINC ) IF (KINC.NE.1) THEN INTERR(1) = KINC GOTO 2900 ENDIF C Recuperation de l'etat final calcule DO in = 1, NVARI imetaf.vpocha(IP,NPARA+in) = wkumat.STATEV(in) ENDDO ENDDO JERR = 0 CALL oooprl(1) NBNN = 1 NBELEM = nnnoe NBREF = 0 NBSOUS = 0 SEGINI,IPT1 DO ip = 1, nbpts inoe = icpr(ip) if (inoe.ne.0) ipt1.NUM(1,inoe) = ip ENDDO NSOUPO = 1 NAT = 2 SEGINI,MCHPOI mchpoi.IFOPOI = ifos mchpoi.JATTRI(1) = 1 mchpoi.JATTRI(1) = mchpo1.JATTRI(1) mchpoi.MTYPOI = ' ' mchpoi.MOCHDE = ' CHPOINT CREE PAR VARI LEXT' mchpoi.MCPCNF = mchpo1.MCPCNF NC = NETAT SEGINI,MSOUPO mchpoi.IPCHP(1) = MSOUPO DO in = 1, NETAT msoupo.NOHARM(in) = 0 ENDDO msoupo.IGEOC = IPT1 msoupo.IPOVAL = IMETAF IRET = MCHPOI 2900 CONTINUE mlmots = ilm1 IF (mlmots.NE.0) SEGSUP,mlmots mlmots = ilm2 IF (mlmots.NE.0) SEGSUP,mlmots mlmots = ilm3 IF (mlmots.NE.0) SEGSUP,mlmots IF (IMCOEF.EQ.0) SEGSUP,IMCOEF IF (IMETAI.EQ.0) SEGSUP,IMETAI IF (ICPR.EQ.0) SEGSUP,ICPR SEGSUP,MLMOT4 ENDIF C Fin de VARILE C ============= SEGSUP,WKUMAT SEGDES,MCOORD 9900 CONTINUE SEGDES,MLMOT1,MLMOT3 IF (MLMOT2.GT.0) SEGDES,MLMOT2 c return END
© Cast3M 2003 - Tous droits réservés.
Mentions légales