C EPSI2 SOURCE OF166741 23/04/25 21:15:07 11608 SUBROUTINE EPSI2(IPMAIL,IPMINT,MELE,IELE, & 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 SMCHAML -INC SMCHPOI -INC SMELEME -INC SMCOORD -INC SMMODEL -INC SMINTE -INC SMLREEL SEGMENT WRK1 REAL*8 DDHOOK(NSTRS,NSTRS),XDDL(LRE),XSTRS(NSTRS) REAL*8 XE(3,NBBB),DDHOMU(NSTRS,NSTRS) REAL*8 SHPWRK(6,NBNO),BGENE(LHOOK,LRE) REAL*8 XE1(3,NBBB),XE2(3,NBBB),xstrs2(NSTRS) REAL*8 xjac(3,3),valmat(20) ENDSEGMENT SEGMENT WRK2 REAL*8 BGR(NGRA,LRE),BB(2,NGRA),gradi(ngra),R(ngra),u(ngra) REAL*8 TENS(9),tentra(9),xddls2(lre) ENDSEGMENT C SEGMENT WRK3 REAL*8 BPSS(3,3),XEL(3,NBBB) REAL*8 XNTH(LPP,LPP),XNTB(LPP,LPP),XNTT(LPP) ENDSEGMENT C SEGMENT WRK5 REAL*8 XGENE(NSTN,LRN) ENDSEGMENT C SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT C SEGMENT MPTVAL INTEGER IPOS(NS),NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT C SEGMENT MTRACE REAL*8 TRACE(NBPTEL) ENDSEGMENT CHARACTER*(NCONCH) CONM PARAMETER (NINF=3) INTEGER INFOS(NINF) 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) C DATA IN/1,2,3,1,1,2/ DATA JN/1,2,3,2,3,3/ C 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/ C real*8 s(2) s(1)=0.d0 s(2)=0.d0 kerr=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 C SEGACT,MCOORD 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' call erreur(5) return ENDIF ELSE NDPGE=0 UDPGE(1)=UZDPG UDPGE(2)=XZero UDPGE(3)=XZero XDPGE=XZero YDPGE=XZero ENDIF C MELEME=IPMAIL NBNN=NUM(/1) NBELEM=NUM(/2) C NHRM=NIFOUR MINTE=IPMINT NBBB=NBNN C 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 IF( ideri.le.2.or.ideri.eq.5 ) then C ideri le 2 est pour lineaire et quadratique et =5 pour utlisateur C Elements massifs en FORMULATION 'MECANIQUE' C ------------------------------------------- NBNO=NBNN NDDD=NDEP-NDPGE C C Donnees liees a l'element de reference C SEGINI,WRK1 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 CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) if( ideri.eq.5) then C on se met a mi-pas do iyu=1,nbnn i_z = (iyu-1)*nddd do iou=1,idim XE(iou,iyu)= xe(iou,iyu) + xddl( iou + 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 CALL BBCALC(MELE,NBNN,MFR,IDIM,XE, 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 CALL BMATST(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU, 1 MELE,MFR,NBNN,LRE,IFOUR,NSTRS,NHRM,1.D0,XE, 2 SHPTOT,SHPWRK,BGENE,DJAC,XDPGE,YDPGE) IF (DJAC.EQ.0.D0) THEN INTERR(1)=IB if (noer.eq.0) CALL ERREUR(259) kerr=259 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 CALL BBAR(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU, & MELE,NBNN,LRE,IFOUR,NSTRS,XE,DJAC,A,BBX,BGENE) ENDIF C CALL BST(BGENE,XDDL,LRE,NSTRS,XSTRS) C C calcul des eps 2 C IF (Ideri.eq.2) & CALL BST2(SHPWRK,XDDL,XE,NBNO,IFOUR,XSTRS,TRACE, & IGAU,XDPGE,YDPGE,UDPGE,NHRM) C C remplissage du segment contenant les deformations C MPTVAL=IVAEPS DO ICOMP=1,NSTRS MELVAL=IVAL(ICOMP) IBMN=MIN(IB,VELCHE(/2)) VELCHE(IGAU,IBMN)=XSTRS(ICOMP) ENDDO C ENDDO C C fin de la boucle sur les points de gauss C IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN if (noer.eq.1) then kerr=195 else INTERR(1)=IB CALL ERREUR(195) 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 CALL BBST2(TRACE,NBPTEL,IFOUR,MELE,POIGAU,QSIGAU, & ETAGAU,DZEGAU,SHPTOT,NBNO,SHPWRK,XE,PP) L=2 IF (IDIM.EQ.3 .OR. IFOUR.EQ.0) L=3 DO ICOMP=1,L MELVAL=IVAL(ICOMP) IBMN=MIN(IB ,VELCHE(/2)) DO IGAU=1,NBPTEL VELCHE(IGAU,IBMN)=VELCHE(IGAU,IBMN)+TRACE(IGAU) ENDDO ENDDO ENDIF ENDIF 3004 CONTINUE C C fin de la boucle sur les elements C 9904 CONTINUE SEGSUP WRK1 IF (IREPS2.EQ.1) SEGSUP MTRACE C cas de la dérivée de Truesdell elseif( ideri.eq.3) then NBNO=NBNN NDDD=NDEP-NDPGE SEGINI,WRK1 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 segact mptval nbgmat=0 nelmat=0 DO IM=1,NMATT VALMAT(IM) = 0.D0 IF (IVAL(IM).NE.0) THEN MELVAL=IVAL(IM) nelmat=Max(nelmat ,VELCHE(/2)) nbgmat=Max(nbgmat,VELCHE(/1)) ENDIF 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 CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) C on ajoute aux coordonnées la moitié du deplacements pour faire C la configuration à mi-pas do iyu=1,idim i_z = (iyu-1)*nddd do iou=1,nbnn 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 DO 54 IGAU=1,NBPTEL CALL BMATST(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU, 1 MELE,MFR,NBNN,LRE,IFOUR,NSTRS,NHRM,1.D0,XE, 2 SHPTOT,SHPWRK,BGENE,DJAC,XDPGE,YDPGE) C IF (DJAC.EQ.0.D0) THEN INTERR(1)=IB if (noer.eq.0) CALL ERREUR(259) kerr=259 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 IF (IVAL(IM).NE.0) THEN MELVAL=IVAL(IM) IBMN=MIN(IB ,VELCHE(/2)) IGMN=MIN(IGAU,VELCHE(/1)) VALMAT(IM)=VELCHE(IGMN,IBMN) ELSE VALMAT(IM)=0.D0 ENDIF ENDDO kcas=2 CALL HOOKIS(VALMAT,VALCAR,VAR,MFR,IB,IGAU,EXCEN,EPAIST, + INAT,MELE,NPINT,IFOUR,KCAS,NBGMAT,Nelmat, + S,SECT,LHOOK,DDHOMU,DDHOOK, + COBMA,XMOB,IRETOU) endif do iou=1,nstrs do iyu=1,nstrs ddhomu(iyu,iou)=ddhook(iyu,iou) enddo enddo CALL DBST(BGENE,DDHomu,XDDL,LRE,NSTRS,XSTRS) 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 iou=1,3 XJAC(iou,iyu)=0.D0 enddo enddo CALL HPRIME(XE1,NBNN,IDIM,SHPtot,IGAU,SHpwrk,DJAC) 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 CALL INVALM(DDHOMU,LHOOK,LHOOK,KERRE,0.D0) DO I=1,LHOOK R1 = 0.D0 DO J=1,LHOOK R1 = R1 + DDHOMU(I,J)*xstrs2(J) ENDDO xstrs(I)= R1 ENDDO C C remplissage du segment contenant les deformations C MPTVAL=IVAEPS DO ICOMP=1,NSTRS MELVAL=IVAL(ICOMP) IBMN=MIN(IB,VELCHE(/2)) VELCHE(IGAU,IBMN)=XSTRS(ICOMP) ENDDO 54 continue IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN if (noer.eq.1) then kerr=195 else INTERR(1)=IB CALL ERREUR(195) GOTO 994 endif ENDIF 34 CONTINUE 994 CONTINUE SEGSUP WRK1 C fin du truesdell C debut du jaumann elseif(ideri.eq.4) then C========================== NBNO=NBNN C* NDDD=NDEP C* IF (IFOUR.EQ.-3) NDDD=NDEP-3 NDDD=NDEP-NDPGE C SEGINI,WRK1,MTRACE,wrk2 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 CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) C C on se met sur la config à 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 CALL BBCALC(MELE,NBNN,MFR,IDIM,XE, 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 CALL BMATST(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU, 1 MELE,MFR,NBNN,LRE,IFOUR,NSTRS,NHRM,1.D0,XE, 2 SHPTOT,SHPWRK,BGENE,DJAC,XDPGE,YDPGE) IF (DJAC.EQ.0.D0) THEN INTERR(1)=IB if (noer.eq.0) CALL ERREUR(259) kerr=259 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 CALL BBAR(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU, & MELE,NBNN,LRE,IFOUR,NSTRS,XE,DJAC,A,BBX,BGENE) ENDIF C CALL BST(BGENE,XDDL,LRE,NSTRS,XSTRS) 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 CALL BGRMAS(iGau,NOELE,NBNO,LRE,IFOUR,NGRA,NIFOUR,XE1, . r_z,SHPTOT,SHPWRK,BB,BGR,DJAC,IIPDPG) do iou=1,lre xddls2(iou)= 0.5D0 * xddl(iou) enddo CALL BGRDEP(BGR,NGRA,XDDLs2,LRE,GRADI) C on ajoute l'identité 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 CALL POLA2(gradi,R,U,IDIM) 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 CALL MULMAT(tentra,tens,U,IDIM,IDIM,IDIM) CALL MULMAT(tens,R,Tentra,IDIM,IDIM,IDIM) 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) IBMN=MIN(IB,VELCHE(/2)) VELCHE(IGAU,IBMN)=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 CALL ERREUR(195) GOTO 9964 endif ENDIF 394 CONTINUE C C fin de la boucle sur les elements C 9964 CONTINUE SEGSUP WRK1,wrk2,MTRACE endif C GOTO 510 C Elements massifs en FORMULATIONs 'ELECTROSTATIQUE' et 'DIFFUSION' C ----------------------------------------------------------------- 97173 CONTINUE NBNO = NBNN NDDD = NDEP SEGINI,WRK1 C------------------------- C Boucle sur les elements C------------------------- DO IEL = 1, NBELEM C - Recuperation des coordonnees des noeuds de l element IEL CALL DOXE(XCOOR,IDIM,NBNN,NUM,IEL,XE) 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 CALL BELEC(XE,SHPTOT(1,1,IGAU),NBNN,LHOOK,-1, & SHPWRK,BGENE,DJAC) ELSE IF (MFR.EQ.73) THEN CALL BDIFF(XE,SHPTOT(1,1,IGAU),NBNN,LHOOK,-1, & SHPWRK,BGENE,DJAC) ENDIF IF (DJAC.EQ.0.D0) THEN INTERR(1) = IEL if (noer.eq.0) CALL ERREUR(259) kerr=259 GOTO 98173 ENDIF IF (DJAC.LT.0.D0) ISDJC = ISDJC+1 CALL BST(BGENE,XDDL,LRE,NSTRS,XSTRS) C -- Remplissage du segment contenant les "deformations" = -grad(.) MPTVAL = IVAEPS DO ICOMP = 1, NSTRS MELVAL = IVAL(ICOMP) IEMN = MIN(IEL,VELCHE(/2)) VELCHE(IGAU,IEMN) = XSTRS(ICOMP) ENDDO C-- -- -- -- -- -- -- -- -- ENDDO C-- -- -- -- -- -- -- -- -- IF (ISDJC.NE.0 .AND. ISDJC.NE.NBPGAU) THEN INTERR(1) = IEL if (noer.eq.1) then kerr=195 else CALL ERREUR(195) GOTO 98173 endif ENDIF C------------------------- ENDDO C------------------------- 98173 CONTINUE SEGSUP,WRK1 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 WRK1,WRK5 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 CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) 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 CALL BNPORE(IGAU,NBNO,NBBB,LRE,IFOUR,LHOOK,NSTN,NHRM, & 1.D0,XE,SHPTOT,SHPWRK,BGENE,XGENE,DJAC,1) C IF (DJAC.EQ.0.D0) THEN INTERR(1)=IB if (noer.eq.0) CALL ERREUR(259) kerr=259 GOTO 9979 ENDIF IF (DJAC.LT.0.D0) ISDJC=ISDJC+1 C CALL BST(BGENE,XDDL,LRE,LHOOK,XSTRS) C C calcul des eps 2 C IF (IREPS2.EQ.1) & CALL BST2(SHPWRK,XDDL,XE,NBNN,IFOUR,XSTRS,TRACE, & 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) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) VELCHE(IGMN,IBMN)=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 CALL ERREUR(195) GOTO 9979 endif ENDIF C 3079 CONTINUE C C fin de la boucle sur les elements C 9979 CONTINUE SEGSUP WRK1,WRK5 IF (IREPS2.EQ.1) SEGSUP MTRACE 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 WRK1,WRK5 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 CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) 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 CALL BNQORE(IGAU,NBNO,NBBB,LRE,IFOUR,NSTB,NSTN,NHRM, & 1.D0,XE,SHPTOT,SHPWRK,BGENE,XGENE,DJAC,IDECAP,LHOOK,1) C IF (DJAC.EQ.0.D0) THEN INTERR(1)=IB if (noer.eq.0) CALL ERREUR(259) kerr=259 GOTO 9173 ENDIF IF (DJAC.LT.0.D0) ISDJC=ISDJC+1 C CALL BST(BGENE,XDDL,LRE,LHOOK,XSTRS) C C calcul des eps 2 C IF (IREPS2.EQ.1) & CALL BST2(SHPWRK,XDDL,XE,NBNN,IFOUR,XSTRS,TRACE, & 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) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) VELCHE(IGMN,IBMN)=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 CALL ERREUR(195) GOTO 9173 endif ENDIF C 3173 CONTINUE C C fin de la boucle sur les elements C 9173 CONTINUE SEGSUP WRK1,WRK5 IF (IREPS2.EQ.1) SEGSUP MTRACE 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 NFAC=(3*NBBB-NBNO)/2 C SEGINI WRK1,WRK3,WRK5 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 CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) C C calcul des exes locaux et des coordonnees locales C CALL JOPLOC(XE,SHPTOT,NBBB,NBNO,IFOUR,XEL,BPSS) C CALL INTDEL(XNTH,XNTB,XNTT,LRN,MELE) C C boucle sur les points de gauss C ISDJC=0 C DO 5080 IGAU=1,NBPTEL C CALL BNPORJ(IGAU,NBNO,NBBB,LRE,IFOUR,LHOOK,NSTN,XE,XEL, & SHPTOT,SHPWRK,BPSS,BGENE,XGENE,DJAC,1) C IF (DJAC.EQ.0.D0) THEN INTERR(1)=IB if (noer.eq.0) CALL ERREUR(259) kerr=259 GOTO 9980 ENDIF IF (DJAC.LT.0.D0) ISDJC=ISDJC+1 C CALL BST(BGENE,XDDL,LRB,LHOOK,XSTRS) 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) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) VELCHE(IGMN,IBMN)=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 CALL ERREUR(195) GOTO 9980 endif ENDIF C 3080 CONTINUE C 9980 CONTINUE SEGSUP WRK1,WRK3,WRK5 C 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 C NBNO=IPORE NSTN=IDECAP NSTB=2 IF(IFOUR.EQ.1.OR.IFOUR.EQ.2) NSTB=3 C LPP=(NBNO-NBBB)*3/2 LRN=IDECAP*LPP LRB=LRE-LRN NFAC=(3*NBBB-NBNO)/2 C SEGINI WRK1,WRK3,WRK5 C 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 CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE) C C calcul des exes locaux et des coordonnees locales C CALL JOPLOC(XE,SHPTOT,NBBB,NBNO,IFOUR,XEL,BPSS) C CALL INTDEL(XNTH,XNTB,XNTT,LPP,MELE) C C boucle sur les points de gauss C ISDJC=0 C DO 5185 IGAU=1,NBPTEL C CALL BNPQRJ(IGAU,NBNO,NBBB,LRE,IFOUR,LHOOK,NSTN,XE,XEL, & SHPTOT,SHPWRK,BPSS,BGENE,XGENE,DJAC,IDECAP,NSTB,1) C IF (DJAC.EQ.0.D0) THEN INTERR(1)=IB if (noer.eq.0) CALL ERREUR(259) kerr=259 GOTO 9985 ENDIF IF (DJAC.LT.0.D0) ISDJC=ISDJC+1 C CALL BST(BGENE,XDDL,LRB,LHOOK,XSTRS) 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) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) VELCHE(IGMN,IBMN)=XSTRS(ICOMP) 7185 CONTINUE C 5185 CONTINUE C IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN INTERR(1)=IB if (noer.eq.1) then kerr=195 else CALL ERREUR(195) GOTO 9985 endif ENDIF C 3185 CONTINUE C 9985 CONTINUE SEGSUP WRK1,WRK3,WRK5 C GOTO 510 C____________________________________________________________________ 99 CONTINUE MOTERR(1:4)=NOMTP(MELE) MOTERR(9:12)='EPSI' CALL ERREUR(86) 510 CONTINUE c RETURN END