epsi2
C EPSI2 SOURCE OF166741 24/10/21 21:15:10 12042 & IVADEP,NBPTEL,LRE,NSTRS,LHOOK, & MFR,NDEP,IPORE,IREPS2,NBPGAU,IVAEPS,UZDPG,RYDPG,RXDPG,IIPDPG, & IDERI,ivamat,ivade2,mate,nmatt,cmate,ngra,noer,kerr) C---------------------------------------------------------------------* C C calcul des deformations C C massif, poreux, joints poreux, incompressibles C---------------------------------------------------------------------* C * C entrees : * C ________ * C * C ipmail pointeur sur un segment meleme * C ipmint pointeur sur un segment minte * C mele numero de l'element fini * C iele numero geometrique de l'element * C nbpgau nombre de point d'integration pour la rigidite * C ivadep pointeur sur le chamelem de deplacements * C nbptel nombre de points par element * C lre nombre de ddl dans la matrice de rigidite * C nstrs nombre de composante de contraintes/deformations * C pour une matrice de hooke * C lhook dimension de la matrice de hooke * C mfr numero de la formulation de l'element fini * C ndep nombre de composantes de deplacements * C ipore nombre de fonctions de forme * C iresp2 flag pour indiquer si on veut les contraintes * C de piola-kirchhoff * C uzdpg = deformation au point nsdpge support de la * C rydpf = deformation plane generalisee * C rxdpg = * C * C sorties : * C ________ * C * C ivaeps pointeur sur un segment mptval contenant les * C les melvals de deformations * C---------------------------------------------------------------------* C Pour MEMOIRE : Si MELE element incompressible alors MFR = 31 C---------------------------------------------------------------------* IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCREEL -INC CCHAMP -INC CCGEOME -INC SMCOORD -INC SMCHAML -INC SMCHPOI -INC SMELEME -INC SMINTE SEGMENT MPTVAL INTEGER IPOS(NS),NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT SEGMENT MWRK1 REAL*8 DDHOOK(NSTRS,NSTRS),XDDL(LRE),XSTRS(NSTRS) REAL*8 XE(3,NBBB),DDHOMU(NSTRS,NSTRS) REAL*8 XE1(3,NBBB),XE2(3,NBBB),xstrs2(NSTRS) REAL*8 xjac(3,3),valmat(20) ENDSEGMENT SEGMENT MWRK2 REAL*8 TENS(9),tentra(9),xddls2(lre) REAL*8 BGR(NGRA,LRE),BB(2,NGRA),gradi(ngra),R(ngra),u(ngra) ENDSEGMENT SEGMENT MWRK3 REAL*8 BPSS(3,3),XEL(3,NBBB) REAL*8 XNTH(LPP,LPP),XNTB(LPP,LPP),XNTT(LPP) ENDSEGMENT SEGMENT MWRK5 REAL*8 XGENE(NSTN,LRN) ENDSEGMENT SEGMENT MTRACE ENDSEGMENT CHARACTER*8 CMATE DIMENSION A(4,60),BBX(3,60),UDPGE(3) DIMENSION IN(6),JN(6),ITAB(3,3),PP(4,4) real*8 valcar(12),var(3) real*8 cobma(lhook) DATA IN/1,2,3,1,1,2/ DATA JN/1,2,3,2,3,3/ DATA ITAB(1,1),ITAB(1,2),ITAB(1,3)/1,4,5/ DATA ITAB(2,1),ITAB(2,2),ITAB(2,3)/4,2,6/ DATA ITAB(3,1),ITAB(3,2),ITAB(3,3)/5,6,3/ real*8 s(2) s(1)=0.d0 s(2)=0.d0 kerr=0 MWRK1 = 0 MWRK2 = 0 MWRK3 = 0 MWRK5 = 0 MTRACE = 0 C Introduction du point autour duquel se fait le mouvement C de la section en defo plane generalisee C IIPDPG = numero du noeud/point support si defini pour le modele C NDPGE > 0 si prise en compte du point support IF (IIPDPG.GT.0) THEN IF (IFOUR.EQ.-3) THEN NDPGE=3 UDPGE(1)=UZDPG UDPGE(2)=RYDPG UDPGE(3)=RXDPG IREF=(IIPDPG-1)*(IDIM+1) XDPGE=XCOOR(IREF+1) YDPGE=XCOOR(IREF+2) ELSE IF (IFOUR.EQ.11) THEN NDPGE=2 UDPGE(1)=UZDPG UDPGE(2)=RXDPG UDPGE(3)=XZero XDPGE=XZero YDPGE=XZero ELSE IF (IFOUR.EQ. 7 .OR. IFOUR.EQ. 8 .OR. IFOUR.EQ. 9 .OR. & IFOUR.EQ.10 .OR. IFOUR.EQ.14) THEN NDPGE=1 UDPGE(1)=UZDPG UDPGE(2)=XZero UDPGE(3)=XZero XDPGE=XZero YDPGE=XZero else write(ioimp,*) 'EPSI2 : ERREUR NDPGE' return ENDIF ELSE NDPGE=0 UDPGE(1)=UZDPG UDPGE(2)=XZero UDPGE(3)=XZero XDPGE=XZero YDPGE=XZero ENDIF MELEME=IPMAIL NBNN =NUM(/1) NBELEM=NUM(/2) NHRM=NIFOUR MINTE=IPMINT NBBB=NBNN C Petite verification prealable (normalement inutile) mptval = IVAEPS if (NSTRS.ne.ival(/1)) then write(ioimp,*) 'EPSI3 : incoherence NSTRS & IVAEPS' return endif do icomp = 1, NSTRS melval = IVAL(ICOMP) if (melval.le.0) then write(ioimp,*) 'EPSI3 : incoherence IVAEPS ival(',icomp,')=0' return endif if (NBPTEL.NE.melval.velche(/1)) then write(ioimp,*) 'EPSI3 : incoherence NSTRS & IVAEPS' return endif if (NBELEM .NE. melval.velche(/2)) then write(ioimp,*) 'EPSI3 : incoherence NSTRS & IVAEPS' return endif enddo C_______________________________________________________________________ C C numero des etiquettes : C etiquettes de 1 a 98 pour traitement specifique a l element C dans la zone specifique a chaque element commencant par : C 5 continue C element 5 etiquettes 1005 2005 3005 4005 ... C 44 continue C element 44 etiquettes 1044 2044 3044 4044 ... C_______________________________________________________________________ C IF(MELE.GE.1.AND.MELE.LE.100) THEN C CABL SEG2 SEG3 TRI3 TRI4 TRI6 TRI7 QUA4 QUA5 QUA8 GOTO ( 99, 99, 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, 99, 99, 99, 99 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 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C COF3 RES2 LSU3 LSU4 LICO COQ6 CVS2 CVS3 CVT3 CVT6 5 , 99, 99, 99, 99, 99, 99, 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, 79, 79 C CUBP TETP PRIP TIMO JOI2 JOI3 JOT3 JOI4 JOI6 JOI8 8 , 79, 79, 79, 99, 99, 99, 99, 99, 99, 99 C LISC TRIH DST LIC4 CERC TUYO LSE2 LITU HYT3 HYQ4 9 , 99, 99, 99, 99, 99, 99, 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, 80, 80, 80 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, 99, 99, 99, 99, 99, 99, 99, 99 C QUF4 CUF8 PRF6 TEF4 PYF5 MSE3 MTR6 MQU9 MC27 MP18 3 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C MT10 MP14 SEF3 TRF7 QUF9 CF27 PF21 TF15 PF19 SEG6 4 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C TR21 QU36 C216 P126 TE56 PY91 TRH6 BSE2 BTR4 BQU5 5 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C BCU9 BPR7 BTE5 BPY6 FRO4 SEGS POJS JCT3 JCI4 JGI2 6 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C JGT3 JGI4 TRIQ QUAQ CUBQ TETQ PRIQ TRIR QUAR CUBR 7 , 99, 99, 173, 173, 173, 173, 173, 173, 173, 173 C TETR PRIR Q4RI Q8RI JOQ3 JOQ6 JOQ8 JOR3 JOR6 JOR8 8 , 173, 173, 4, 4, 185, 185, 185, 185, 185, 185 C T1D2 T1D3 M1D2 M1D3 LC03 LC07 LC09 LC27 LC21 LC15 9 , 99, 99, 4, 4, 99, 99, 99, 99, 99, 99) 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 ( 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C BS09 BS27 BS21 BS15 BS19 MC03 MC07 MC09 MC27 MC21 1 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C MC15 MC19 M103 M107 M109 M127 M121 M115 M119 MS03 2 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C MS07 MS09 MS27 MS21 MS15 MS19 QC03 QC07 QC09 QC27 3 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C QC21 QC15 QC19 Q103 Q107 Q109 Q127 Q121 Q115 Q119 4 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C QS03 QS07 QS09 QS27 QS21 QS15 QS19 CIFL SURE SHB8 5 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C CAF2 CAF3 XQ4R XC8R JOI1 ZCO2 ZCO3 ZCO4 TUY2 TUY3 6 , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 C COS2 COA2 ICY5 IC13 CU27 PR21 TE15 PY19 C20R P15R 7 , 99, 99, 4, 4, 4, 4, 4, 4, 4, 4) c cccccc . ,MELE-200 ENDIF GOTO 99 C C_______________________________________________________________________ C C elements massifs et elements incompressibles MECANIQUE C_______________________________________________________________________ C 4 CONTINUE IF (MFR.EQ.71 .OR. MFR.EQ.73) GOTO 97173 C IDERI <= 2 pour lineaire et quadratique et = 5 pour utilisateur C =============================================================== IF ( IDERI.LE.2.OR.IDERI.EQ.5 ) THEN C Elements massifs en FORMULATION 'MECANIQUE' C ------------------------------------------- NBNO=NBNN NDDD=NDEP-NDPGE C C Donnees liees a l'element de reference C SEGINI,MWRK1 IF (Ideri.eq.2) SEGINI,MTRACE C C boucle sur les elements C DO 3004 IB=1,NBELEM C C on cherche les deplacements C MPTVAL=IVADEP IE=1 DO IGAU=1,NBNN DO ICOMP=1,NDDD MELVAL=IVAL(ICOMP) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 ENDDO ENDDO IF (NDPGE.GT.0) THEN DO i=1,NDPGE XDDL(IE)=UDPGE(i) IE=IE+1 ENDDO ENDIF C C on cherche les coordonnees des noeuds de l element ib C C on se met a mi-pas if (ideri.eq.5) then do iyu=1,nbnn i_z = (iyu-1)*nddd do i=1,idim XE(i,iyu)= xe(i,iyu) + xddl( i + i_z )*0.5D0 enddo enddo endif C C boucle sur les points de gauss C ISDJC=0 C C Calcul des coeff de modification de b-barre (elts incompres) C= NOM : ICT3, ICQ4, ICT6, ICQ8, ICC8, ICT4, ICP6, IC20, IC10, IC15 C= MELE : 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 IF (MFR.EQ.31) THEN 1 NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU, 2 NSTRS,LRE,IFOUR,NHRM,A,BBX,SHPTOT,SHPWRK, 3 BGENE,XDPGE,YDPGE,PP) ENDIF DO IGAU=1,NBPTEL C 1 MELE,MFR,NBNN,LRE,IFOUR,NSTRS,NHRM,1.D0,XE, 2 SHPTOT,SHPWRK,BGENE,DJAC,XDPGE,YDPGE) IF (DJAC.EQ.0.D0) THEN kerr=259 if (noer.eq.0) THEN INTERR(1)=IB endif GOTO 9904 ENDIF IF (DJAC.LT.0.D0) ISDJC=ISDJC+1 C En cas d'elements incompressibles : BGENE selon la methode B-BARRE IF (MFR.EQ.31) THEN & MELE,NBNN,LRE,IFOUR,NSTRS,XE,DJAC,A,BBX,BGENE) ENDIF C C C calcul des eps 2 C IF (Ideri.eq.2) & IGAU,XDPGE,YDPGE,UDPGE,NHRM) C C remplissage du segment contenant les deformations C MPTVAL=IVAEPS DO ICOMP=1,NSTRS MELVAL=IVAL(ICOMP) VELCHE(IGAU,IB)=XSTRS(ICOMP) ENDDO C ENDDO C C fin de la boucle sur les points de gauss C C** IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN IF (ISDJC.NE.0.AND.ISDJC.NE.NBPTEL) THEN kerr=195 if (noer.eq.0) then INTERR(1)=IB endif GOTO 9904 ENDIF C C correction sur la partie quadratique de la deformation dans le cas C des elements incompressibles C IF (Ideri.eq.2) THEN IF (MFR.EQ.31) THEN MPTVAL=IVAEPS L=2 IF (IDIM.EQ.3 .OR. IFOUR.EQ.0) L=3 DO ICOMP=1,L MELVAL=IVAL(ICOMP) DO IGAU=1,NBPTEL ENDDO ENDDO ENDIF ENDIF 3004 CONTINUE C C fin de la boucle sur les elements C 9904 CONTINUE C =============================================================== C Cas de la derivee de Truesdell C =============================================================== ELSE IF (IDERI.EQ.3) THEN NBNO=NBNN NDDD=NDEP-NDPGE SEGINI,MWRK1 C IF (IREPS2.EQ.1) SEGINI,MTRACE C on cherche le max des variations des champs pour savoir s'il faut C appeler hookis plusieurs fois mptval=IVAMAT nbgmat=0 nelmat=0 DO IM=1,NMATT MELVAL=IVAL(IM) IF (MELVAL.NE.0) THEN nelmat=Max(nelmat,VELCHE(/2)) nbgmat=Max(nbgmat,VELCHE(/1)) ENDIF VALMAT(IM) = 0.D0 ENDDO C C boucle sur les elements C DO 34 IB=1,NBELEM C C on cherche les deplacements C MPTVAL=IVADEP IE=1 DO IGAU=1,NBNN DO ICOMP=1,NDDD MELVAL=IVAL(ICOMP) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 ENDDO ENDDO IF (NDPGE.GT.0) THEN DO i=1,NDPGE XDDL(IE)=UDPGE(i) IE=IE+1 ENDDO ENDIF C C on cherche les coordonnees des noeuds de l element ib C C on ajoute aux coordonnees la moitie du deplacement pour faire C la configuration a mi-pas do iyu=1,idim i_z = (iyu-1)*nddd do i=1,nbnn XE(i,iyu)= XE(i,iyu) + xddl(i+i_z)*0.5D0 enddo enddo C C boucle sur les points de gauss C ISDJC=0 C DO 54 IGAU=1,NBPTEL 1 MELE,MFR,NBNN,LRE,IFOUR,NSTRS,NHRM,1.D0,XE, 2 SHPTOT,SHPWRK,BGENE,DJAC,XDPGE,YDPGE) IF (DJAC.EQ.0.D0) THEN kerr=259 if (noer.eq.0) THEN INTERR(1)=IB endif GOTO 994 ELSE IF (DJAC.LT.0.D0) THEN ISDJC=ISDJC+1 ENDIF C C on cherche les matrices de Hooke C if(nbgmat+nelmat.gt.2 . or . ib+igau.eq.2) then mptval=ivamat DO IM=1,NMATT MELVAL=IVAL(IM) IF (MELVAL.NE.0) THEN IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) VALMAT(IM)=VELCHE(IGMN,IBMN) ELSE VALMAT(IM)=0.D0 ENDIF ENDDO kcas=2 + INAT,MELE,NPINT,IFOUR,KCAS,NBGMAT,Nelmat, + S,SECT,LHOOK,DDHOMU,DDHOOK, + COBMA,XMOB,IRETOU) endif do i=1,nstrs do iyu=1,nstrs ddhomu(iyu,i)=ddhook(iyu,i) enddo enddo C xstrs contient la contrainte on va faire pica xstrs zdep05 DO INO = 1, NBNN i_z = (ino-1)*nddd DO ID=1,IDIM XE1(ID,INO)=XE(ID,INO) XE2(ID,INO)=XE(ID,INO)-xddl( id + i_z )*0.5D0 ENDDO ENDDO DO IYU=1,3 DO i=1,3 XJAC(i,iyu)=0.D0 enddo enddo C C CALCUL DE LA MATRICE F C DO IF=1,IDIM DO IE=1,IDIM R1 = 0.D0 DO ID=1,NBNN R1 = R1 + SHPWRK(IF+1,ID)*XE2(IE,ID) ENDDO XJAC(IE,IF) = R1 ENDDO ENDDO IF(IDIM.EQ.2) THEN XJAC(3,3)=1.D0 IF(IFOUR.EQ.0) THEN C CC CAS AXISYMETRIQUE C R1=0.D0 R2=0.D0 DO 150 ID=1,NBNN R1=R1+SHPWRK(1,ID)*XE1(1,ID) R2=R2+SHPWRK(1,ID)*XE2(1,ID) 150 CONTINUE XJAC(3,3)=R2/(R1+1.D-20) ENDIF ENDIF CC CALCUL DE DETERMINANT DE F C IF(IDIM.EQ.3) THEN DETF=XJAC(1,1)*(XJAC(2,2)*XJAC(3,3)-XJAC(3,2)*XJAC(2,3)) DETF=DETF-XJAC(2,1)*(XJAC(1,2)*XJAC(3,3)-XJAC(3,2)*XJAC(1,3)) DETF=DETF+XJAC(3,1)*(XJAC(1,2)*XJAC(2,3)-XJAC(1,3)*XJAC(2,2)) ELSE IF(IDIM.EQ.2) THEN DETF=XJAC(1,1)*XJAC(2,2)-XJAC(1,2)*XJAC(2,1) DETF = DETF * XJAC (3,3) ENDIF DETF=1.D0/(DETF+1.D-20) C C CALCUL DES CONTRAINTES DE CAUCHY C DO ID=1,NSTRS IND=IN(ID) JND=JN(ID) R1=0.D0 DO IE=1,IDIM DO IF=1,IDIM ICO=ITAB(IE,IF) R1 = R1 + XSTRS(ICO)*XJAC(IND,IE)*XJAC(JND,IF) ENDDO ENDDO XSTRS2(ID)= R1 * DETF ENDDO C C PEGON : ON NE FAIT PAS LA TRANSFORMATION SUR LA 3-EME COMPOSANTE C IF(IDIM.EQ.2) THEN xstrs2(3)=xstrs(3)*XJAC(3,3)*XJAC(3,3)*DETF ENDIF C fin du calcul de capi dans dans xstrs2 la contrainte de kirchoff C on continu en calculant epsi sur config initiale DO INO=1,NBNN i_z = (ino-1) * nddd DO ID=1,IDIM XE(ID,INO)=XE2(ID,INO)+xddl( id + i_z )*0.5D0 ENDDO ENDDO C inversion loi de hooke DO ID=1,LHOOK R1 = 0.D0 DO J=1,LHOOK R1 = R1 + DDHOMU(ID,J)*xstrs2(J) ENDDO xstrs(ID)= R1 ENDDO C C remplissage du segment contenant les deformations C MPTVAL=IVAEPS DO ICOMP=1,NSTRS MELVAL=IVAL(ICOMP) VELCHE(IGAU,IB)=XSTRS(ICOMP) ENDDO 54 continue IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN kerr=195 if (noer.eq.0) then INTERR(1)=IB GOTO 994 endif ENDIF 34 CONTINUE 994 CONTINUE C fin du truesdell C =============================================================== C debut du jaumann C =============================================================== ELSE IF (IDERI.EQ.4) THEN NBNO=NBNN C* NDDD=NDEP C* IF (IFOUR.EQ.-3) NDDD=NDEP-3 NDDD=NDEP-NDPGE C SEGINI,MWRK1,MTRACE,MWRK2 C boucle sur les elements C DO 394 IB=1,NBELEM C C on cherche les deplacements C MPTVAL=IVADEP IE=1 DO IGAU=1,NBNN DO ICOMP=1,NDDD MELVAL=IVAL(ICOMP) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 ENDDO ENDDO IF (NDPGE.GT.0) THEN DO i=1,NDPGE XDDL(IE)=UDPGE(i) IE=IE+1 ENDDO ENDIF C C on cherche les coordonnees des noeuds de l element ib C C C on se met sur la config a mi pas (XE) xe1 est la config initiale C do iyu=1,nbnn i_z = (iyu-1)*nddd do iou=1,idim XE1(iou,iyu)= xe(iou,iyu) XE(iou,iyu)= xe(iou,iyu) + xddl( iou+ i_z )*0.5d0 enddo enddo C C boucle sur les points de gauss C ISDJC=0 C C Calcul des coeff de modification de b-barre (elts incompres) C= NOM : ICT3, ICQ4, ICT6, ICQ8, ICC8, ICT4, ICP6, IC20, IC10, IC15 C= MELE : 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 IF (MFR.EQ.31) THEN 1 NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU, 2 NSTRS,LRE,IFOUR,NHRM,A,BBX,SHPTOT,SHPWRK, 3 BGENE,XDPGE,YDPGE,PP) ENDIF C DO 594 IGAU=1,NBPTEL 1 MELE,MFR,NBNN,LRE,IFOUR,NSTRS,NHRM,1.D0,XE, 2 SHPTOT,SHPWRK,BGENE,DJAC,XDPGE,YDPGE) IF (DJAC.EQ.0.D0) THEN kerr=259 if (noer.eq.0) THEN INTERR(1)=IB endif GOTO 9964 ENDIF IF (DJAC.LT.0.D0) ISDJC=ISDJC+1 C En cas d'elements incompressibles : BGENE selon la methode B-BARRE IF (MFR.EQ.31) THEN & MELE,NBNN,LRE,IFOUR,NSTRS,XE,DJAC,A,BBX,BGENE) ENDIF C C dans xstrs on a les deformations II sur config mi pas C on va calculer grad u/2 puis decomposition polaire puis rtens C on retravaille sur config initiale r_z=XZero iipdpg=0 . r_z,SHPTOT,SHPWRK,BB,BGR,DJAC,IIPDPG) do iou=1,lre xddls2(iou)= 0.5D0 * xddl(iou) enddo C on ajoute l'identite au gradient if(idim.eQ.2) then gradi(1)=gradi(1)+1.D0 gradi(4)=gradi(4)+1.D0 ELSE IF(IDIM.EQ.3) THEN gradi(1)=gradi(1)+1.D0 gradi(5)=gradi(5)+1.D0 gradi(9)=gradi(9)+1.D0 ENDIF C fait le rtens Rt.A.R on utilise u pour mettre Rt C et on met le tenseur dans le tableau tens C attention vu le stockage R est en fait Rt if(idim.eq.2) then U(1)=r(1) u(2)=r(3) U(3)=R(2) u(4)=R(4) tens(1)=xstrs(1) tens(2)=xstrs(4)*0.5d0 tens(3)=xstrs(4)*0.5d0 tens(4)=xstrs(2) elseif(idim.eq.3) then U(1)=r(1) u(2)=r(4) U(3)=R(7) u(4)=R(2) u(5)=r(5) u(6)=r(8) u(7)=r(3) u(8)=r(6) u(9)=r(9) tens(1)=xstrs(1) tens(2)=xstrs(4)*0.5D0 tens(3)=xstrs(5)*0.5D0 tens(4)=tens(2) tens(5)=xstrs(2) tens(6)=xstrs(6)*0.5D0 tens(7)=tens(3) tens(8)=tens(6) tens(9)=xstrs(3) else write(6,*)' idim est ni 2 ni 3 stop' stop endif C tens contient le nouveau tenseur on va remplir xstrs C en 2 D epzz ne change pas if(idim.eq.2) then xstrs(1)=tens(1) xstrs(2)=tens(4) xstrs(4)=tens(2)*2.D0 else xstrs(1)=tens(1) xstrs(2)=tens(5) xstrs(3)=tens(9) xstrs(4)=tens(2)*2.D0 xstrs(5)=tens(3)*2.D0 xstrs(6)=tens(6)*2.D0 endif C C remplissage du segment contenant les deformations C MPTVAL=IVAEPS DO ICOMP=1,NSTRS MELVAL=IVAL(ICOMP) VELCHE(IGAU,IB)=XSTRS(ICOMP) ENDDO C 594 CONTINUE C C fin de la boucle sur les points de gauss C IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN INTERR(1)=IB if (noer.eq.1) then kerr=195 else GOTO 9964 endif ENDIF 394 CONTINUE C C fin de la boucle sur les elements C 9964 CONTINUE endif C GOTO 510 C Elements massifs en FORMULATIONs 'ELECTROSTATIQUE' et 'DIFFUSION' C ----------------------------------------------------------------- 97173 CONTINUE NBNO = NBNN NDDD = NDEP SEGINI,MWRK1 C------------------------- C Boucle sur les elements C------------------------- DO IEL = 1, NBELEM C - Recuperation des coordonnees des noeuds de l element IEL C - Recuperation des inconnues primales aux noeuds de l element IEL MPTVAL = IVADEP IE = 1 DO IGAU = 1, NBNN DO ICOMP = 1, NDDD MELVAL = IVAL(ICOMP) IGMN = MIN(IGAU,VELCHE(/1)) IEMN = MIN(IEL ,VELCHE(/2)) XDDL(IE) = VELCHE(IGMN,IEMN) IE = IE+1 ENDDO ENDDO C-- -- -- -- -- -- -- -- -- C - Boucle sur les points de Gauss C-- -- -- -- -- -- -- -- -- ISDJC=0 DO IGAU = 1, NBPTEL C -- Calcul de la matrice B et du jacobien au point de Gauss IGAU IF (MFR.EQ.71) THEN & SHPWRK,BGENE,DJAC) ELSE IF (MFR.EQ.73) THEN & SHPWRK,BGENE,DJAC) ENDIF IF (DJAC.EQ.0.D0) THEN kerr=259 if (noer.eq.0) THEN INTERR(1)=IEL endif GOTO 98173 ENDIF IF (DJAC.LT.0.D0) ISDJC = ISDJC+1 C -- Remplissage du segment contenant les "deformations" = -grad(.) MPTVAL = IVAEPS DO ICOMP = 1, NSTRS MELVAL = IVAL(ICOMP) VELCHE(IGAU,IEL) = XSTRS(ICOMP) ENDDO C-- -- -- -- -- -- -- -- -- ENDDO C-- -- -- -- -- -- -- -- -- IF (ISDJC.NE.0 .AND. ISDJC.NE.NBPGAU) THEN kerr=195 if (noer.eq.0) THEN INTERR(1)=IEL GOTO 98173 endif ENDIF C------------------------- ENDDO C------------------------- 98173 CONTINUE GOTO 510 C_______________________________________________________________________ C C milieux poreux C_______________________________________________________________________ C 79 CONTINUE C C pour ces elements nbbb = nombre de noeuds C nbno = nombre de fonctions de forme C NBNO=IPORE NSTN=1 LRN=NBNO-NBBB LRB=LRE-LRN C SEGINI,MWRK1,MWRK5 C Initialisation de MTRACE necessaire mais inutilise pour ces elements IF (IREPS2.EQ.1) SEGINI MTRACE C DO 3079 IB=1,NBELEM C C on cherche les coordonnees des noeuds de l element ib C C C on cherche les deplacements C MPTVAL=IVADEP IE=1 DO IGAU=1,NBNN DO ICOMP=1,NDEP-1 MELVAL=IVAL(ICOMP) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 ENDDO ENDDO C C puis les pressions C MELVAL=IVAL(NDEP) IBMN=MIN(IB,VELCHE(/2)) DO IGAU=1,LRN IGAUSO=IBSOM(NSPOS(IELE)+IGAU-1) IGMN=MIN(IGAUSO,VELCHE(/1)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 ENDDO C C boucle sur les points de gauss C ISDJC=0 C DO 5079 IGAU=1,NBPTEL C & 1.D0,XE,SHPTOT,SHPWRK,BGENE,XGENE,DJAC,1) C IF (DJAC.EQ.0.D0) THEN INTERR(1)=IB kerr=259 GOTO 9979 ENDIF IF (DJAC.LT.0.D0) ISDJC=ISDJC+1 C C C calcul des eps 2 C IF (IREPS2.EQ.1) & IGAU,XDPGE,YDPGE,UDPGE,NHRM) C C calcul de la pression C XP=0.D0 DO ID=1,LRN XP=XP+XGENE(1,ID)*XDDL(LRB+ID) ENDDO XSTRS(NSTRS)=XP C C remplissage du segment contenant les deformations C MPTVAL=IVAEPS DO 7079 ICOMP=1,NSTRS MELVAL=IVAL(ICOMP) VELCHE(IGAU,IB)=XSTRS(ICOMP) 7079 CONTINUE C 5079 CONTINUE C C fin de la boucle sur les points de gauss C IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN INTERR(1)=IB if (noer.eq.1) then kerr=195 else GOTO 9979 endif ENDIF C 3079 CONTINUE C C fin de la boucle sur les elements C 9979 CONTINUE C GOTO 510 C_______________________________________________________________________ C C milieux poreux - SUITE C_______________________________________________________________________ C 173 CONTINUE C C pour ces elements nbbb = nombre de noeuds C nbno = nombre de fonctions de forme C IF (MELE.GE.173.AND.MELE.LE.177) THEN IDECAP = 2 ELSE IF (MELE.GE.178.AND.MELE.LE.182) THEN IDECAP = 3 ENDIF C NBNO=IPORE NSTN=IDECAP NSTB=4 IF(IFOUR.EQ.1.OR.IFOUR.EQ.2) NSTB=6 C LPP=NBNO-NBBB LRN=IDECAP*LPP LRB=LRE-LRN C SEGINI,MWRK1,MWRK5 C Initialise de MTRACE necessaire mais inutilise pour cet element IF (IREPS2.EQ.1) SEGINI MTRACE C DO 3173 IB=1,NBELEM C C on cherche les coordonnees des noeuds de l element ib C C C on cherche les deplacements C MPTVAL=IVADEP IE=1 DO IGAU=1,NBNN DO ICOMP=1,NDEP-IDECAP MELVAL=IVAL(ICOMP) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 ENDDO ENDDO C C puis les pressions C DO IPR = 1,IDECAP MELVAL=IVAL(NDEP-IDECAP+IPR) DO IGAU=1,LPP IGAUSO=IBSOM(NSPOS(IELE)+IGAU-1) IGMN=MIN(IGAUSO,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 ENDDO ENDDO C C boucle sur les points de gauss C ISDJC=0 C DO 5173 IGAU=1,NBPTEL C & 1.D0,XE,SHPTOT,SHPWRK,BGENE,XGENE,DJAC,IDECAP,LHOOK,1) C IF (DJAC.EQ.0.D0) THEN INTERR(1)=IB kerr=259 GOTO 9173 ENDIF IF (DJAC.LT.0.D0) ISDJC=ISDJC+1 C C C calcul des eps 2 C IF (IREPS2.EQ.1) & IGAU,XDPGE,YDPGE,UDPGE,NHRM) C C calcul des pressions C IE=LRB DO IPR=1,IDECAP XP=0.D0 IPR1=(IPR-1)*LPP DO ID=1,LPP IE=IE+1 XP=XP+XGENE(IPR,ID+IPR1)*XDDL(IE) ENDDO XSTRS(NSTRS-IDECAP+IPR)=XP ENDDO C C remplissage du segment contenant les deformations C MPTVAL=IVAEPS DO 7173 ICOMP=1,NSTRS MELVAL=IVAL(ICOMP) VELCHE(IGAU,IB)=XSTRS(ICOMP) 7173 CONTINUE C 5173 CONTINUE C C fin de la boucle sur les points de gauss C IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN INTERR(1)=IB if (noer.eq.1) then kerr=195 else GOTO 9173 endif ENDIF C 3173 CONTINUE C C fin de la boucle sur les elements C 9173 CONTINUE C GOTO 510 C_______________________________________________________________________ C C joints poreux C_______________________________________________________________________ C 80 CONTINUE C C pour ces elements nbbb = nombre de noeuds C nbno = nombre de fonctions de forme C NBNO=IPORE NSTN=1 LRN=(NBNO-NBBB)*3/2 LPP = LRN LRB=LRE-LRN C SEGINI,MWRK1,MWRK3,MWRK5 C DO 3080 IB=1,NBELEM C C on cherche d'abord les deplacements C MPTVAL=IVADEP IE=1 DO 4180 IGAU=1,NFAC DO 4280 ICOMP=1,NDEP-1 MELVAL=IVAL(ICOMP) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 4280 CONTINUE 4180 CONTINUE C C puis les pressions C MELVAL=IVAL(NDEP) DO 4080 IGAU=1,NBNN DO 4190 INSOM=1,NBSOM(IELE) IF (IGAU.EQ.IBSOM(NSPOS(IELE)+INSOM-1)) GO TO 4191 4190 CONTINUE IF (IGAU.GT.NFAC) GO TO 4191 GO TO 4080 4191 CONTINUE IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 4080 CONTINUE C C on cherche les coordonnees des noeuds de l element ib C C C calcul des exes locaux et des coordonnees locales C C C C boucle sur les points de gauss C ISDJC=0 C DO 5080 IGAU=1,NBPTEL C & SHPTOT,SHPWRK,BPSS,BGENE,XGENE,DJAC,1) C IF (DJAC.EQ.0.D0) THEN INTERR(1)=IB kerr=259 GOTO 9980 ENDIF IF (DJAC.LT.0.D0) ISDJC=ISDJC+1 C C C calcul de la pression C XP=0.D0 DO 4480 ID=1,LRN XP=XP+XNTT(ID)*XGENE(1,ID)*XDDL(LRB+ID) 4480 CONTINUE XSTRS(NSTRS)=XP C C remplissage du segment contenant les deformations C MPTVAL=IVAEPS DO 7080 ICOMP=1,NSTRS MELVAL=IVAL(ICOMP) VELCHE(IGAU,IB)=XSTRS(ICOMP) 7080 CONTINUE C 5080 CONTINUE C IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN INTERR(1)=IB if (noer.eq.1) then kerr=195 else GOTO 9980 endif ENDIF C 3080 CONTINUE C 9980 CONTINUE GOTO 510 C_______________________________________________________________________ C C joints poreux - SUITE C_______________________________________________________________________ C 185 CONTINUE C C pour ces elements nbbb = nombre de noeuds C nbno = nombre de fonctions de forme C IF (MELE.GE.185.AND.MELE.LE.187) THEN IDECAP = 2 ELSE IF (MELE.GE.188.AND.MELE.LE.190) THEN IDECAP = 3 ENDIF NBNO=IPORE NSTN=IDECAP NSTB=2 IF(IFOUR.EQ.1.OR.IFOUR.EQ.2) NSTB=3 LPP=(NBNO-NBBB)*3/2 LRN=IDECAP*LPP LRB=LRE-LRN SEGINI,MWRK1,MWRK3,MWRK5 DO 3185 IB=1,NBELEM C C on cherche d'abord les deplacements C MPTVAL=IVADEP IE=1 DO 4185 IGAU=1,NFAC DO 4285 ICOMP=1,NDEP-IDECAP MELVAL=IVAL(ICOMP) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 4285 CONTINUE 4185 CONTINUE C C puis les pressions C DO 4785 IPR=1,IDECAP MELVAL=IVAL(NDEP-IDECAP+IPR) DO 4085 IGAU=1,NBNN DO 4195 INSOM=1,NBSOM(IELE) IF (IGAU.EQ.IBSOM(NSPOS(IELE)+INSOM-1)) GO TO 4891 4195 CONTINUE IF (IGAU.GT.NFAC) GO TO 4891 GO TO 4085 4891 CONTINUE IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) XDDL(IE)=VELCHE(IGMN,IBMN) IE=IE+1 4085 CONTINUE 4785 CONTINUE C C on cherche les coordonnees des noeuds de l element ib C C C calcul des exes locaux et des coordonnees locales C C C C boucle sur les points de gauss C ISDJC=0 C DO 5185 IGAU=1,NBPTEL C & SHPTOT,SHPWRK,BPSS,BGENE,XGENE,DJAC,IDECAP,NSTB,1) C IF (DJAC.EQ.0.D0) THEN INTERR(1)=IB kerr=259 GOTO 9985 ENDIF IF (DJAC.LT.0.D0) ISDJC=ISDJC+1 C C C calcul de la pression C IE=LRB DO 4985 IPR=1,IDECAP XP=0.D0 IPR1=(IPR-1)*LPP DO 4485 ID=1,LPP IE=IE+1 XP=XP+XNTT(ID)*XGENE(IPR,ID+IPR1)*XDDL(IE) 4485 CONTINUE XSTRS(NSTRS-IDECAP+IPR)=XP 4985 CONTINUE C C remplissage du segment contenant les deformations C MPTVAL=IVAEPS DO 7185 ICOMP=1,NSTRS MELVAL=IVAL(ICOMP) VELCHE(IGAU,IB)=XSTRS(ICOMP) 7185 CONTINUE C 5185 CONTINUE C IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN kerr=195 INTERR(1)=IB if (noer.eq.0) then GOTO 9985 endif ENDIF C 3185 CONTINUE C 9985 CONTINUE C GOTO 510 C____________________________________________________________________ 99 CONTINUE MOTERR(1:4)=NOMTP(MELE) MOTERR(9:12)='EPSI' 510 CONTINUE SEGSUP,MWRK1 IF (MWRK2.NE.0) SEGSUP,MWRK2 IF (MWRK3.NE.0) SEGSUP,MWRK3 IF (MWRK5.NE.0) SEGSUP,MWRK5 IF (MTRACE.NE.0) SEGSUP MTRACE c RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales