epsi1
C EPSI1 SOURCE OF166741 24/10/21 21:15:09 12042 1 IMAT,IPEPSI,IRET,ipchp2,noer,kerr) C_______________________________________________________________________ C C OPERATEUR DEFORMATIONS APPELE PAR EPSI C C ENTREES : C _________ C c IDERI = | 1 si deformations LINEaires c | 2 si QUADratiques c | 3 si TRUEsdell, c | 4 si JAUMann c | 5 si UTILisateur C MODORI POINTEUR SUR UN MMODEL C IPCHP1 POINTEUR SUR UN CHAMPOINT DEPLACEMENT C IPCHA1 POINTEUR SUR UN MCHAML DE CARACTERISTIQUE (FACULTATIF) C IPCHA2 POINTEUR SUR UN MCHAML DE HOOKE (FACULTATIF) C IMAT Flag de HOOKE (2 si oui, 1 sinon) C C SORTIES : C _________ C C IPEPSI POINTEUR SUR UN MCHAML DE DEFORMATION C IRET 1 OU 0 SUIVANT SUCCES OU PAS C C----------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCREEL -INC CCHAMP C==DEB= FORMULATION HHO == INCLUDE ===================================== -INC CCHHOPA C==FIN= FORMULATION HHO ================================================ -INC SMCHAML -INC SMCHPOI -INC SMELEME -INC SMCOORD -INC SMMODEL -INC SMINTE -INC SMLREEL SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT SEGMENT MPTVAL INTEGER IPOS(NS),NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT CHARACTER*8 CMATE CHARACTER*16 MO16 CHARACTER*(NCONCH) CONM PARAMETER (NINF=3) INTEGER INFOS(NINF) INTEGER ISUP1 LOGICAL LDPGE,lsupma,dcmate ISUP1=0 IRET = 0 IPEPSI = 0 kerr = 0 c on calcule les termes quadratiques seulement si deformations QUAD IF(IDERI.EQ.2) THEN IREPS2=1 ELSE IREPS2=0 ENDIF NHRM=NIFOUR C C ON VERIFIE QUE LE MCHAML DE CARACTERISTIQUES EST SUR SON SUPPORT C IF (IPCHA1.NE.0) THEN IF (ISUP1.GT.1) RETURN ELSE C SI massif jaumann et truesdel ==> manque un argument C IF() THEN C CALL ERREUR(404) C RETURN C ENDIF ENDIF C C ON VERIFIE QUE LE MCHAML DE HOOKE EST SUR SON SUPPORT C IF (IPCHA2.NE.0) THEN IF (ISUP2.NE.0) RETURN ENDIF C C ACTIVATION DU MODELE C C MODORI = Modele initial complet C IPMODL = Modele "deroule" (uniquement "MECANIQUE", "LIQUIDE" ou "POREUX") IF (IPMODL.EQ.0) RETURN C IPMODL est ACTIF en retour MMODEL=IPMODL NSOUS = KMODEL(/1) c*dbg write(ioimp,*) 'EPSI1=',MODORI,IPMODL,MAILDG,NSOUS C==DEB= FORMULATION HHO ================================================ IF (IDERI.NE.1) THEN DO IJKL=1,NSOUS imodel = KMODEL(IJKL) IF (imodel.NEFMOD.EQ.HHO_NUM_ELEMENT) THEN write(ioimp,*) 'HHO EPSI: IDERI not compatible' return END IF END DO END IF C==FIN= FORMULATION HHO ================================================ C_______________________________________________________________________ C C ON CONVERTIT LE CHAMP POINT EN CHAMP PAR ELEMENT idem pour le 2eme C_______________________________________________________________________ IF (IERR.NE.0) RETURN ipch2=0 IF (ipchp2.ne.0) then IF (IERR.NE.0) RETURN ENDIF C C CREATION DU MCHELM C N1=NSOUS DO IJKL=1,NSOUS IMODEL=KMODEL(IJKL) IF (NEFMOD.EQ.22.OR.NEFMOD.EQ.259) N1 = N1 - 1 END DO L1=12 N3=6 SEGINI MCHELM mchelm.TITCHE='DEFORMATIONS' mchelm.IFOCHE=IFOUR C Un petit segment utile : NBTYPE = 1 SEGINI NOTYPE TYPE(1)='REAL*8' MOTYR8 = NOTYPE C_______________________________________________________________________ C C DEBUT DE LA BOUCLE SUR LES DIFFERENTES SOUS ZONES C_______________________________________________________________________ C ISOUS=0 DO 500 KISOUS=1,NSOUS C C INITIALISATION C IVAMAT=0 IVACAR=0 IVADEP=0 IVADE2=0 IVAEPS=0 IPMINT=0 MOCARA=0 MOMATR=0 lsupma=.true. C C ON RECUPERE L INFORMATION GENERALE C IMODEL = KMODEL(KISOUS) IPMAIL = IMAMOD CONM = CONMOD MELE = NEFMOD IF (MELE.EQ.22.OR.MELE.EQ.259) GOTO 502 C C CREATION DE TABLEAU INFOS C IF (IRTD.EQ.0) GOTO 9993 C C TRAITEMENT DU MODELE C if (formod(1).eq.'MELANGE'.and.CMATEE.EQ.'PARALLEL') then IF (IVAMOD(/1).GE.1) THEN DO j = 1,IVAMOD(/1) IF (TYMODE(j).EQ.'IMODEL ') THEN IMODE1 = IVAMOD(j) IF (IMODE1.FORMOD(1)(1:10).EQ.'MECANIQUE ' .OR. & IMODE1.FORMOD(1)(1:10).EQ.'POREUX ' .OR. & IMODE1.FORMOD(1)(1:16).EQ.'ELECTROSTATIQUE ' .OR. & IMODE1.FORMOD(1)(1:10).EQ.'LIQUIDE ' ) THEN imodel = imode1 goto 30 ENDIF ENDIF ENDDO ENDIF endif 30 continue C C NATURE DU MATERIAU C CMATE = CMATEE MATE = IMATEE INAT = INATUU dcmate = .false. do im = 1, matmod(/2) C Pour optimisation et eviter _gfortran_compare_string inefficace MO16=matmod(im) if (MO16 .eq. 'IMPEDANCE ') dcmate =.true. enddo C_______________________________________________________________________ C C INFORMATION SUR L ELEMENT FINI C_______________________________________________________________________ C NPINT = INFMOD(1) MFR = INFELE(13) IELE = INFELE(14) IPORE = INFELE(8) NBGS = INFELE(4) NEPSI = INFELE(16) LRE = INFELE(9) LW = INFELE(7) LHOOK = INFELE(10) c? IPGRAV=INFMOD(2+2) IPMINT=INFMOD(2+5) C IPMINT =INFELE(11) IPMIN1=INFELE(12) C IPMIN1=INFMOD(8) <- Pas toujours defini MELEME = IPMAIL NBNN = NUM(/1) NBELEM = NUM(/2) ccc mele = imodel.nefmod if (dcmate) then if (itypel.eq.1) mele = 45 if (itypel.eq.2) mele = 2 endif IPPORE=0 IF(MFR.EQ.33.OR.MFR.EQ.57.OR.MFR.EQ.59) IPPORE=NBNN IF((MFR.NE.1.AND.IPPORE.NE.1).AND.(IDERI.EQ.3.OR.IDERI.EQ.4))THEN return endif C C EXTRACTION DES DEPLACEMENTS DU NOEUD SUPPORT DE LA C DEFORMATION PLANE GENERALISEE (MECANIQUE) SI BESOIN C IF (LDPGE) THEN IIPDPG = imodel.IPDPGE IF (IERR.NE.0) GOTO 9993 ELSE IIPDPG = 0 UZDPG=XZero RXDPG=XZero RYDPG=XZero ENDIF C C INITIALISATION DE MINTE C MINTE = IPMINT NBPGAU= minte.POIGAU(/1) if (NBGS.ne.NBPGAU) then write(ioimp,*) 'EPSI1 : Incoherence NBGS & NBPGAU',NBGS,NBPGAU endif C_______________________________________________________________________ C C RECHERCHE DES NOMS COMPOSANTES C_______________________________________________________________________ C MOEPSI = lnomid(5) if (MOEPSI.eq.0) then write(ioimp,*) 'EPSI1 : moepsi=0',imodel endif nomid = MOEPSI NDEFO = nomid.lesobl(/2) ndefac= nomid.lesfac(/2) C Cas particulier : if (ifomod.eq.6) then NEPSI = NDEFO + ndefac endif MODEPL = lnomid(1) if (modepl.eq.0) then write(ioimp,*) 'EPSI1 : modepl=0',imodel endif nomid = MODEPL ndep = nomid.lesobl(/2) nfac = nomid.lesfac(/2) C_______________________________________________________________________ C C VERICIATION DE LA PRESENCE DES COMPOSANTES DE DEPLACEMENT C_______________________________________________________________________ C C==DEB= FORMULATION HHO ================================================ IF (MELE .EQ. HHO_NUM_ELEMENT) GOTO 2750 C==FIN= FORMULATION HHO ================================================ MOTYPE = MOTYR8 IF (IERR.NE.0) GOTO 9993 C traitement du 2e champ par point if (ipch2.ne.0) then IF (IERR.NE.0) GOTO 9993 ENDIF c-dbg : tests de verification if (iimpi.eq.1972) then NUPT = 0 NUEL = 0 MPTVAL = IVADEP DO ICOMP = 1, NDEP MELVAL = IVAL(ICOMP) NUPT = MAX(NUPT,VELCHE(/1)) NUEL = MAX(NUEL,VELCHE(/2)) ENDDO c-dbg IF (NUPT.EQ.1) THEN if (NUEL.EQ.1) then write(ioimp,*) 'DEPLACEMENT UNIFORME IVADEP',IVADEP,NUPT,NUEL else write(ioimp,*) 'DEPLACEMENT CST/ELT IVADEP',IVADEP,NUPT,NUEL endif ENDIF if (NUPT.EQ.1 .and. NBGS.ne.1) then write(ioimp,*) 'NUPT != NBGS',NUPT,NBGS,NUEL endif endif C==DEB= FORMULATION HHO == Etiquette speciale ========================== 2750 CONTINUE C==FIN= FORMULATION HHO ================================================ C_______________________________________________________________________ C C TAILLE DES MELVAL DU CHAMP DE DEFORMATIONS A ALLOUER C ON CONSIDERE LE CAS GENERAL (CHAMP VARIABLE EN TOUT POINT) C COMRED SE CHARGERA DE COMPACTER LES COMPOSANTES SI BESOIN C_______________________________________________________________________ C N1PTEL = NBGS N1EL = NBELEM NBPTEL = N1PTEL c NEL = N1EL C C CREATION DU MPTVAL CORRESPONDANT AU MCHAML DE LA SOUS ZONE C NS=1 NCOSOU=NEPSI SEGINI MPTVAL N2PTEL = 0 N2EL = 0 DO ICOMP = 1, NEPSI SEGINI MELVAL IVAL(ICOMP) = MELVAL ENDDO IVAEPS = MPTVAL C en cas de derivee de truesdell et de Jaumann il faudra calculer C des contraintes donc on a besoin de la loi de hooke ou des C caracteristiques materiau ( young ...) C____________________________________________________________________ C C RANGEMENT DE LA MATRICE DE HOOKE DANS UN TABLEAU DE TRAVAIL * C____________________________________________________________________ C NGRA = 0 IF (IDERI.EQ.3.or.IDERI.eq.4) THEN C Cas de la derivee de Truesdell ou Jaumann IF (IPCHA1 .EQ. 0) THEN RETURN ENDIF MOGRAD = imodel.LNOMID(3) if (MOGRAD.eq.0) then write(ioimp,*) 'EPSI - IDERI=3 ou 4 - MOGRAD = lnomid(3) = 0' endif nomid = MOGRAD NGRA = nomid.LESOBL(/2) nfac = nomid.lesfac(/2) nbrobl=0 nbrfac=0 nomid = 0 C Sauf cas particuliers, les composantes sont de type REAL*8. notype = MOTYR8 IF (IMAT.EQ.2) THEN IF(MELE.EQ.93.AND.CMATE.NE.'ISOTROPE')THEN NBROBL=3 SEGINI NOMID LESOBL(1)='MAHO' LESOBL(2)='V1X ' LESOBL(3)='V1Y ' NBTYPE=3 SEGINI NOTYPE TYPE(1)='POINTEURLISTREEL' TYPE(2)='REAL*8' TYPE(3)='REAL*8' ELSE NBROBL=1 SEGINI NOMID LESOBL(1)='MAHO' NBTYPE=1 SEGINI NOTYPE TYPE(1)='POINTEURLISTREEL' ENDIF NMATR=NBROBL NMATF=NBRFAC NMATT=NMATR+NMATF MOMATR=NOMID MOTYPE=NOTYPE SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9990 MPTVAL=IVAMAT MELVAL=IVAL(1) NBGMAT=IELCHE(/1) NELMAT=IELCHE(/2) ELSE C____________________________________________________________________ C C SINON TRAITEMENT DES CHAMPS DE MATERIAU C aussi obligatoire en massif pour truesdell et jaumann C____________________________________________________________________ C C Pour optimisation et eviter _gfortran_compare_string inefficace MO16=FORMOD(1) IF (MO16.EQ.'MECANIQUE '.AND.CMATE.EQ.'ISOTROPE') THEN NBROBL=2 SEGINI NOMID IF (MFR.EQ.35.or.mfr.eq.78) THEN LESOBL(1)='KS ' LESOBL(2)='KN ' ELSE IF(MFR.EQ.53) THEN NBROBL=1 SEGADJ,NOMID LESOBL(1)='KS ' ELSE LESOBL(1)='YOUN' LESOBL(2)='NU ' ENDIF ELSEIF(MO16.EQ.'MECANIQUE '.AND.CMATE.EQ.'UNIDIREC')THEN IF (MFR.EQ.1.AND.IDIM.EQ.3) THEN NBROBL=7 SEGINI NOMID LESOBL(1)='YOUN' LESOBL(2)='V1X ' LESOBL(3)='V1Y ' LESOBL(4)='V1Z ' LESOBL(5)='V2X ' LESOBL(6)='V2Y ' LESOBL(7)='V2Z ' ELSE NBROBL=3 SEGINI NOMID LESOBL(1)='YOUN' LESOBL(2)='V1X ' LESOBL(3)='V1Y ' ENDIF ELSEIF(MO16.EQ.'POREUX '.AND.CMATE.EQ.'ISOTROPE')THEN IF (MELE.GE.79.AND.MELE.LE.83) THEN NBROBL=4 SEGINI NOMID LESOBL(1)='YOUN' LESOBL(2)='NU ' LESOBL(3)='COB ' LESOBL(4)='MOB ' ELSE IF (MELE.GE.108.AND.MELE.LE.110) THEN NBROBL=4 SEGINI NOMID LESOBL(1)='KS ' LESOBL(2)='KN ' LESOBL(3)='COB ' LESOBL(4)='MOB ' ELSE IF (MELE.GE.173.AND.MELE.LE.177) THEN NBROBL=10 SEGINI NOMID LESOBL(1)='YOUN' LESOBL(2)='NU ' LESOBL(3)='COP1' LESOBL(4)='COP2' LESOBL(5)='CPP1' LESOBL(6)='CPP2' LESOBL(7)='KK11' LESOBL(8)='KK12' LESOBL(9)='KK21' LESOBL(10)='KK22' ELSE IF (MELE.GE.178.AND.MELE.LE.182) THEN NBROBL=17 SEGINI NOMID LESOBL(1)='YOUN' LESOBL(2)='NU ' LESOBL(3)='COP1' LESOBL(4)='COP2' LESOBL(5)='COP3' LESOBL(6)='CPP1' LESOBL(7)='CPP2' LESOBL(8)='CPP3' LESOBL(9)='KK11' LESOBL(10)='KK12' LESOBL(11)='KK13' LESOBL(12)='KK21' LESOBL(13)='KK22' LESOBL(14)='KK23' LESOBL(15)='KK31' LESOBL(16)='KK32' LESOBL(17)='KK33' ELSE IF (MELE.GE.185.AND.MELE.LE.187) THEN NBROBL=10 SEGINI NOMID LESOBL(1)='KS ' LESOBL(2)='KN ' LESOBL(3)='COP1' LESOBL(4)='COP2' LESOBL(5)='CPP1' LESOBL(6)='CPP2' LESOBL(7)='KK11' LESOBL(8)='KK12' LESOBL(9)='KK21' LESOBL(10)='KK22' ELSE IF (MELE.GE.188.AND.MELE.LE.190) THEN NBROBL=17 SEGINI NOMID LESOBL(1)='KS ' LESOBL(2)='KN ' LESOBL(3)='COP1' LESOBL(4)='COP2' LESOBL(5)='COP3' LESOBL(6)='CPP1' LESOBL(7)='CPP2' LESOBL(8)='CPP3' LESOBL(9)='KK11' LESOBL(10)='KK12' LESOBL(11)='KK13' LESOBL(12)='KK21' LESOBL(13)='KK22' LESOBL(14)='KK23' LESOBL(15)='KK31' LESOBL(16)='KK32' LESOBL(17)='KK33' ENDIF C ELSEIF(INAT.EQ.67.AND.CMATE.EQ.'ORTHOTRO') THEN NBROBL=6 SEGINI NOMID LESOBL(1)='YG1 ' LESOBL(2)='YG2 ' LESOBL(3)='NU12' LESOBL(4)='G12 ' LESOBL(5)='V1X ' LESOBL(6)='V1Y ' C Autres cas : ELSE nomid = lnomid(6) if(nomid.ne.0) then nbrobl=lesobl(/2) nbrfac=lesfac(/2) lsupma=.false. else lsupma=.true. endif ENDIF NMATR=NBROBL NMATF=NBRFAC NMATT=NMATR+NMATF MOMATR=NOMID MOTYPE=NOTYPE IF (MOTYPE.NE.MOTYR8) SEGSUP,NOTYPE IF (IERR.NE.0) GOTO 9990 IF(ISUP1.EQ.1)THEN IF(IERR.NE.0)THEN ISUP1=0 GOTO 9990 ENDIF ENDIF MPTVAL=IVAMAT NBGMAT = 0 NELMAT = 0 DO IM=1,NMATT MELVAL=IVAL(IM) IF (MELVAL.NE.0)THEN IF (CMATE.EQ.'SECTION ') THEN NBGMAT=MAX(NBGMAT,IELCHE(/1)) NELMAT=MAX(NELMAT,IELCHE(/2)) ELSE NBGMAT=MAX(NBGMAT,VELCHE(/1)) NELMAT=MAX(NELMAT,VELCHE(/2)) ENDIF ENDIF ENDDO ENDIF nmattd=nmatt ivamtd=ivamat ENDIF C_______________________________________________________________________ C C TRAITEMENT DES CHAMP CARACTERISTIQUES C_______________________________________________________________________ C NBROBL=0 NBRFAC=0 NOMID = 0 C Sauf cas particuliers, toutes les composantes sont de type REAL*8. notype = MOTYR8 C C EPAISSEUR ET EXCENTREMENT DANS LE CAS DES COQUES C IF (MFR.EQ.3.OR.MFR.EQ.5.OR.MFR.EQ.9) THEN NBROBL=1 NBRFAC=1 SEGINI NOMID LESOBL(1)='EPAI' LESFAC(1)='EXCE' C C SECTION POUR LES BARRES C ELSE IF (MFR.EQ.27) THEN IF(.NOT.dcmate) THEN NBROBL=1 SEGINI NOMID LESOBL(1)='SECT' ENDIF C C section, excentrements et orientation pour les barres excentrees C ELSE IF (MFR.EQ.49) THEN NBROBL=6 SEGINI NOMID LESOBL(1)='SECT' LESOBL(2)='EXCZ' LESOBL(3)='EXCY' LESOBL(4)='VX ' LESOBL(5)='VY ' LESOBL(6)='VZ ' C C raideurs locales et orientation pour l'element LIA2 C de liaison a 2 noeuds C ELSE IF (MFR.EQ.51) THEN NBROBL=9 SEGINI NOMID LESOBL(1)='RLUX' LESOBL(2)='RLUY' LESOBL(3)='RLUZ' LESOBL(4)='RLRX' LESOBL(5)='RLRY' LESOBL(6)='RLRZ' LESOBL(7)='VX ' LESOBL(8)='VY ' LESOBL(9)='VZ ' C C CARACTERISTIQUE POUR LES POUTRES C ELSE IF (MFR.EQ.7) THEN IF(.NOT.dcmate) THEN IF (CMATE.EQ.'SECTION ') THEN NBRFAC=3 SEGINI NOMID LESFAC(1)='VX' LESFAC(2)='VY' LESFAC(3)='VZ' ELSE IF(IFOUR.EQ.2) THEN NBROBL=4 NBRFAC=5 SEGINI NOMID LESOBL(1)='TORS' LESOBL(2)='INRY' LESOBL(3)='INRZ' LESOBL(4)='SECT' LESFAC(1)='SECY' LESFAC(2)='SECZ' LESFAC(3)='VX' LESFAC(4)='VY' LESFAC(5)='VZ' ELSEIF(IFOUR.EQ.-1.OR.IFOUR.EQ.-2.OR.IFOUR.EQ.63) THEN NBRFAC=1 NBROBL=2 SEGINI NOMID LESOBL(1)= 'SECT' LESOBL(2)= 'INRZ' LESFAC(1)= 'SECY' ENDIF ENDIF ENDIF C C TIMO 2D C C ELSE IF ((MFR.EQ.7).AND. C & (IFOUR.EQ.-2.OR.IFOUR.EQ.-1.OR.IFOUR.EQ.-3)) THEN C C IF (CMATE.NE.'SECTION') THEN C ENDIF C C CARACTERISTIQUE POUR LES TUYAUX C ELSE IF (MFR.EQ.13) THEN NBROBL=2 NBRFAC=5 SEGINI NOMID LESOBL(1)='EPAI' LESOBL(2)='RAYO' LESFAC(1)='RACO' LESFAC(2)='CISA' LESFAC(3)='VX' LESFAC(4)='VY' LESFAC(5)='VZ' C C CARACTERISTIQUE POUR LES LINESPRING C ELSE IF (MFR.EQ.15) THEN NBROBL=5 SEGINI NOMID LESOBL(1)='EPAI' LESOBL(2)='FISS' LESOBL(3)='VX ' LESOBL(4)='VY ' LESOBL(5)='VZ ' C C CARACTERISTIQUE POUR LES TUYAUX FISSURES C ELSE IF (MFR.EQ.17) THEN NBROBL=9 SEGINI NOMID LESOBL(1)='RAYO' LESOBL(2)='EPAI' LESOBL(3)='VX ' LESOBL(4)='VY ' LESOBL(5)='VZ ' LESOBL(6)='VXF ' LESOBL(7)='VYF ' LESOBL(8)='VZF ' LESOBL(9)='ANGL' C C CARACTERISTIQUE POUR LES ELEMENTS HOMOGENEISES C ELSE IF (MFR.EQ.37) THEN IF (IFOUR.EQ.1.OR.IFOUR.EQ.0) THEN NBROBL=4 SEGINI NOMID LESOBL(1)='SCEL' LESOBL(2)='SFLU' LESOBL(3)='EPS ' LESOBL(4)='XINE' ELSE NBROBL=3 SEGINI NOMID LESOBL(1)='SCEL' LESOBL(2)='SFLU' LESOBL(3)='EPS ' ENDIF C C CARACTERISTIQUE POUR LES JOINTS GENE C ELSE IF (MFR.EQ.55) THEN NBRFAC=1 SEGINI NOMID LESFAC(1)='EPAI' C C==DEB= FORMULATION HHO ================================================ ELSE IF (MFR.EQ.HHO_MFR_ELEMENT) THEN IF (MELE.EQ.HHO_NUM_ELEMENT) THEN nbrobl = 1 nbrfac = 0 SEGINI,nomid nomid.LESOBL(1) = 'BHHO' nbtype = 1 SEGINI,NOTYPE notype.TYPE(1) = 'POINTEURLISTREEL' END IF C==FIN= FORMULATION HHO ================================================ ENDIF C NCARA=NBROBL NCARF=NBRFAC NCARR=NCARA+NCARF MOCARA = nomid MOTYPE = notype IF (MOCARA.NE.0) THEN IF (IPCHA1.EQ.0) THEN MOTERR(1:8)='CARACTER' MOTERR(9:12)=NOMTP(MELE) MOTERR(13:20)='EPSI' GOTO 9990 ENDIF & ,3,IVACAR) IF (IERR.NE.0) GOTO 9990 IF(ISUP1.EQ.1)THEN IF(IERR.NE.0)THEN ISUP1=0 GOTO 9990 ENDIF ENDIF ENDIF IF (MOTYPE.NE.MOTYR8) SEGSUP,notype C____________________________________________________________________ C C RANGEMENT DE LA MATRICE DE HOOKE DANS UN TABLEAU DE TRAVAIL * C UNIQUEMENT DANS LE CAS DE L'ELEMENT COQUE DST C____________________________________________________________________ C NMATR=0 NMATF=0 NMATT=0 NBGMAT=0 NELMAT=0 IF(MELE.EQ.93.and.IMAT.EQ.2) THEN IF(CMATE.NE.'ISOTROPE')THEN NBROBL=3 NBRFAC=0 SEGINI NOMID LESOBL(1)='MAHO' LESOBL(2)='V1X ' LESOBL(3)='V1Y ' ELSE NBROBL=1 NBRFAC=0 SEGINI NOMID LESOBL(1)='MAHO' ENDIF MOMATR=NOMID NMATR=NBROBL NMATF=NBRFAC NMATT=NMATR+NMATF IF(CMATE.NE.'ISOTROPE')THEN NBTYPE=3 SEGINI NOTYPE TYPE(1)='POINTEURLISTREEL' TYPE(2)='REAL*8' TYPE(3)='REAL*8' ELSE NBTYPE=1 SEGINI NOTYPE TYPE(1)='POINTEURLISTREEL' ENDIF MOTYPE=NOTYPE SEGSUP NOTYPE IF (IERR.NE.0) GOTO 9990 MPTVAL=IVAMAT MELVAL=IVAL(1) NBGMAT=IELCHE(/1) NELMAT=IELCHE(/2) ENDIF C____________________________________________________________________ C C SINON TRAITEMENT DES CHAMPS DE MATERIAU C____________________________________________________________________ C IF((MELE.EQ.93.and.IMAT.ne.2).or. $ (mfr.eq.7.and.CMATE.NE.'SECTION '.and.(.not.dcmate)) $.or.mfr.eq.13)THEN C Pour optimisation et eviter _gfortran_compare_string inefficace MO16=FORMOD(1) IF ((MO16.EQ.'MECANIQUE '.AND.CMATE.EQ.'ISOTROPE') $ .or.mfr.eq.7) THEN NBROBL=2 NBRFAC=0 SEGINI NOMID MOMATR=NOMID LESOBL(1)='YOUN' LESOBL(2)='NU ' NMATR=NBROBL NMATF=NBRFAC ELSEIF(MO16.EQ.'MECANIQUE '.AND.(CMATE.EQ.'ORTHOTRO'))THEN IF(INAT.EQ.67) THEN NBROBL=6 NBRFAC=0 SEGINI NOMID MOMATR=NOMID LESOBL(1)='YG1 ' LESOBL(2)='YG2 ' LESOBL(3)='NU12' LESOBL(4)='G12 ' LESOBL(5)='V1X ' LESOBL(6)='V1Y ' NMATR=NBROBL NMATF=NBRFAC ELSE if(lnomid(6).ne.0) then lsupma=.false. nomid=lnomid(6) segact nomid momatr=nomid nmatr=lesobl(/2) nmatf=lesfac(/2) else nomid=MOMATR endif ENDIF ELSE GOTO 9990 ENDIF NMATT=NMATR+NMATF C Les composantes sont toutes de type 'REAL*8'. MOTYPE=MOTYR8 C IF (IERR.NE.0) GOTO 9990 C IF(ISUP1.EQ.1)THEN IF(IERR.NE.0)THEN ISUP1=0 GOTO 9990 ENDIF ENDIF C MPTVAL=IVAMAT NBGMAT = 0 NELMAT = 0 DO IM=1,NMATT IF(IVAL(IM).NE.0)THEN MELVAL=IVAL(IM) IF (CMATE.EQ.'SECTION ') THEN NBGMAT=MAX(NBGMAT,IELCHE(/1)) NELMAT=MAX(NELMAT,IELCHE(/2)) ELSE NBGMAT=MAX(NBGMAT,VELCHE(/1)) NELMAT=MAX(NELMAT,VELCHE(/2)) ENDIF ENDIF ENDDO ENDIF C================================================ C C CAS D'UN JOINT UNIDIMENSIONNEL JOI1 C Chargement des vecteurs situes dans les caracteristiques materiau C C================================================ IF(MFR.EQ.75) THEN IF(IDIM.EQ.3) THEN NBROBL=6 NBRFAC=0 SEGINI NOMID MOMATR=NOMID LESOBL(1)='V1X' LESOBL(2)='V1Y' LESOBL(3)='V1Z' LESOBL(4)='V2X' LESOBL(5)='V2Y' LESOBL(6)='V2Z' NMATR=NBROBL NMATF=NBRFAC ELSE IF(IDIM.EQ.2) THEN NBROBL=2 NBRFAC=0 SEGINI NOMID MOMATR=NOMID LESOBL(1)='V1X' LESOBL(2)='V1Y' NMATR=NBROBL NMATF=NBRFAC ENDIF NMATT=NMATR+NMATF MOTYPE = MOTYR8 C IF (IERR.NE.0) GOTO 9990 C C IF(ISUP1.EQ.1)THEN IF(IERR.NE.0)THEN ISUP1=0 GOTO 9990 ENDIF ENDIF MPTVAL=IVAMAT NBGMAT = 0 NELMAT = 0 DO IM=1,NMATT IF(IVAL(IM).NE.0)THEN MELVAL=IVAL(IM) IF (CMATE.EQ.'SECTION ') THEN NBGMAT=MAX(NBGMAT,IELCHE(/1)) NELMAT=MAX(NELMAT,IELCHE(/2)) ELSE NBGMAT=MAX(NBGMAT,VELCHE(/1)) NELMAT=MAX(NELMAT,VELCHE(/2)) ENDIF ENDIF ENDDO nmattd=nmatt ivamtd= ivamat ENDIF c*dbg write(ioimp,*) 'EPSI1',imodel,ISOUS,kisous,formod(1),mele,mfr C C======================================================================= C NUMERO DES ETIQUETTES : C ETIQUETTES DE 1 A 98 POUR TRAITEMENT SPECIFIQUE A L ELEMENT C ON DIRIGE DANS 3 SOUS-PROGRAMMES SELON LES ELEMENTS C C - massif, poreux, joints poreux ------------------> epsi2 C - coq3,dkt,coq4,coq8,coq2,joints -----------------> epsi3 C - poutre,tuyau,linespring,tuyau fissure,barre ----> epsi4 C - elements XFEM (mfr = 63) -----------------------> epsix C C======================================================================= IF(MELE.GE.1.AND.MELE.LE.100) THEN C CABL SEG2 SEG3 TRI3 TRI4 TRI6 TRI7 QUA4 QUA5 QUA8 GOTO ( 99, 29, 99, 4, 99, 4, 99, 4, 99, 4 C QUA9 RAC2 RAC3 CUB8 CU20 PRI6 PR15 LIA3 LIA4 LIA6 1 , 99, 99, 99, 4, 4, 4, 4, 99, 99, 99 C LIA8 MULT TET4 TE10 PYR5 PY13 COQ3 DKT POUT LISP 2 , 99, 99, 4, 4, 4, 4, 27, 27, 27, 29 C FAC3 FAC4 FAC6 FAC8 LTR3 LQU4 LCU8 LPR6 LTE4 LPY5 3 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C COQ8 TUYA TUFI COQ2 POI1 BARR RACO LSU2 COQ4 LISM 4 , 27, 27, 29, 27, 29, 29, 99, 99, 27, 29 C COF3 RES2 LSU3 LSU4 LICO COQ6 CVS2 CVS3 CVT3 CVT6 5 , 99, 99, 99, 99, 99, 27, 99, 99, 99, 99 C CVQ4 CVQ8 THP5 TH13 THP6 TH15 THC8 TH20 ICT3 ICQ4 6 , 99, 99, 99, 99, 99, 99, 99, 99, 4, 4 C ICT6 ICQ8 ICC8 ICT4 ICP6 IC20 IC10 IC15 TRIP QUAP 7 , 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 C CUBP TETP PRIP TIMO JOI2 JOI3 JOT3 JOI4 JOI6 JOI8 8 , 4, 4, 4, 27, 27, 27, 27, 27, 99, 99 C LISC TRIH DST LIC4 CERC TUYO LSE2 LITU HYT3 HYQ4 9 , 99, 99, 27, 99, 29, 29, 99, 99, 99, 99) c cccccc . ,MELE ELSEIF(MELE.GE.101.AND.MELE.LE.200) THEN C HYT4 HYP6 HYC8 TRIS QUAS POIS FOR3 JOP3 JOP6 JOP8 GOTO ( 99, 99, 99, 99, 99, 99, 99, 4, 4, 4 C POL3 POL4 POL5 POL6 POL7 POL8 POL9 PO10 PO11 PO12 1 , 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 C PO13 PO14 BAR3 BAEX LIA2 QUAH CUBH ROT3 SEF2 TRF3 2 , 4, 4, 29, 29, 29, 34, 34, 34, 34, 34 C QUF4 CUF8 PRF6 TEF4 PYF5 MSE3 MTR6 MQU9 MC27 MP18 3 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C MT10 MP14 SEF3 TRF7 QUF9 CF27 PF21 TF15 PF19 SEG6 4 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C TR21 QU36 C216 P126 TE56 PY91 TRH6 BSE2 BTR4 BQU5 5 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C BCU9 BPR7 BTE5 BPY6 FRO4 SEGS POJS JCT3 JCI4 JGI2 6 , 34, 34, 34, 34, 34, 34, 34, 27, 27, 27 C JGT3 JGI4 TRIQ QUAQ CUBQ TETQ PRIQ TRIR QUAR CUBR 7 , 27, 27, 4, 4, 4, 4, 4, 4, 4, 4 C TETR PRIR Q4RI Q8RI JOQ3 JOQ6 JOQ8 JOR3 JOR6 JOR8 8 , 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 C T1D2 T1D3 M1D2 M1D3 LC03 LC07 LC09 LC27 LC21 LC15 9 , 34, 34, 4, 4, 34, 34, 34, 34, 34, 34) c cccccc . ,MELE-100 ELSEIF(MELE.GE.201.AND.MELE.LE.300) THEN C LC19 LS03 LS07 LS09 LS27 LS21 LS15 LS19 BS03 BS07 GOTO ( 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C BS09 BS27 BS21 BS15 BS19 MC03 MC07 MC09 MC27 MC21 1 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C MC15 MC19 M103 M107 M109 M127 M121 M115 M119 MS03 2 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C MS07 MS09 MS27 MS21 MS15 MS19 QC03 QC07 QC09 QC27 3 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C QC21 QC15 QC19 Q103 Q107 Q109 Q127 Q121 Q115 Q119 4 , 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 C QS03 QS07 QS09 QS27 QS21 QS15 QS19 CIFL SURE SHB8 5 , 34, 34, 34, 34, 34, 34, 34, 27, 34, 27 C CAF2 CAF3 XQ4R XC8R JOI1 ZCO2 ZCO3 ZCO4 TUY2 TUY3 6 , 34, 34, 63, 63, 29, 29, 29, 29, 99, 99 C COS2 COA2 ICY5 IC13 CU27 PR21 TE15 PY19 C20R P15R 7 , 29, 29, 4, 4, 4, 4, 4, 4, 4, 4 C HHO .... .... .... .... .... .... .... .... .... 8 , 281, 99, 99, 99, 99, 99, 99, 99, 99, 99 C .... .... .... .... .... .... .... .... .... .... 9 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99) c cccccc . ,MELE-200 ENDIF C 34 CONTINUE 99 CONTINUE MOTERR(1:4) =NOMTP(MELE) MOTERR(5:12)='EPSI' GOTO 9990 C_______________________________________________________________________ C C massifs, poreux et joints poreux C_______________________________________________________________________ C 4 CONTINUE & MFR,NDEP,IPORE,IREPS2,NBPGAU,IVAEPS,UZDPG,RYDPG,RXDPG,IIPDPG, & IDERI,IVAMTD,ivade2,mate,nmattD,cmate,NGRA,noer,kerr) GOTO 9990 C_______________________________________________________________________ C C poutres,tuyau,coq3,dkt,coq4,coq8,coq2,dst,joint 3D,joints 2D C_______________________________________________________________________ C 27 CONTINUE if (dcmate) goto 29 & IVAMAT,LHOOK,IMAT,MATE,CMATE,NMATT,NEPSI,MFR,IPMINT, & NCARR,NDEP,NBPGAU,NBPTEL,MELE,LRE,LW,IREPS2,IVAEPS, & IPMIN1,UZDPG,RYDPG,RXDPG,NPINT,IIPDPG) GOTO 9990 C_______________________________________________________________________ C C linespring,tuyau fissure,barre,joi1,zone cohesive C_______________________________________________________________________ C 29 CONTINUE & MELE,LHOOK,IREPS2,NBPTEL,NEPSI,MFR, & NBPGAU,LRE,LW,IVAEPS,UZDPG,RYDPG,RXDPG,KISOUS,IIPDPG,cmate) GOTO 9990 C_______________________________________________________________________ C C Elements XFEM (MFR = 63) C_______________________________________________________________________ C 63 CONTINUE & UZDPG,RYDPG,RXDPG,IIPDPG,IRETER) IF (IRETER.NE.0) RETURN GO TO 9990 C==DEB= FORMULATION HHO ================================================ 281 CONTINUE CALL HHOEPS('EPSI', IMODEL, IPCHP1,MODEPL, & IIPDPG,UZDPG,RYDPG,RXDPG, & IVACAR, NCARA, IPMINT,NBPTEL, & IVAEPS,NEPSI, iret) IF (iret.NE.0) THEN RETURN END IF GO TO 9990 C==FIN= FORMULATION HHO ================================================ C_______________________________________________________________________ C C DESACTIVATION DES SEGMENTS PROPRES A LA ZONE GEOMETRIQUE IA C_______________________________________________________________________ 9990 CONTINUE IF (IMAT.NE.2.AND.ISUP1.EQ.1) THEN ELSE ENDIF IF (ISUP1.EQ.1) THEN ELSE ENDIF 9993 CONTINUE nomid = MOMATR IF (nomid.NE.0 .AND. lsupma) SEGSUP,nomid nomid = MOCARA IF (nomid.NE.0) SEGSUP,nomid C SORTIE PREMATUREE EN CAS D'ERREUR IF (IERR.NE.0) THEN GOTO 888 ENDIF C C REMPLISSAGE DU MCHAML DE LA SOUS-ZONE ISOUS C MPTVAL = IVAEPS NOMID = MOEPSI c* On doit avoir : ival(/1) = NEPSI = N2 N2 = NEPSI SEGINI MCHAML DO ICOMP = 1, NEPSI if (ifomod.eq.6) then if (icomp.le.NDEFO) then NOMCHE(ICOMP)=LESOBL(ICOMP) else NOMCHE(ICOMP)=LESFAC(ICOMP - NDEFO) endif else NOMCHE(ICOMP)=LESOBL(ICOMP) endif TYPCHE(ICOMP)='REAL*8' melval = IVAL(ICOMP) IELVAL(ICOMP) = melval ENDDO ISOUS=ISOUS+1 IMACHE(ISOUS) = IPMAIL CONCHE(ISOUS) = CONM ICHAML(ISOUS) = MCHAML INFCHE(ISOUS,1) = 0 INFCHE(ISOUS,2) = 0 INFCHE(ISOUS,3) = NHRM INFCHE(ISOUS,4) = IPMINT INFCHE(ISOUS,5) = 0 INFCHE(ISOUS,6) = 5 502 CONTINUE 500 CONTINUE C- FIN DU TRAITEMENT 888 CONTINUE mmodel = IPMODL SEGDES,mmodel meleme = MAILDG IF (meleme.NE.0) SEGDES,meleme notype = MOTYR8 SEGSUP,notype IF(IERR.NE.0)THEN IRET = 0 SEGSUP MCHELM IPEPSI = 0 ELSE IRET = 1 IPEPSI = MCHELM ENDIF c return END
© Cast3M 2003 - Tous droits réservés.
Mentions légales