fpma2d
C FPMA2D SOURCE JK148537 24/11/05 21:15:03 12066 + ,netn1,ietn1) C C____________________________________________________________________ C CALCULE LES FORCES DE PRESSIONS SUR LES FACES D ELEMENTS C MASSIFS BIDIMENSIONNELS C C ENTREES : C --------- C C IPTVPR POINTEUR SUR UN MELVAL CONTENANT LES PRESSIONS APPLIQUEES C 0 SI ON A DONNE UNE VALEUR CONSTANTE C IPMAIL POINTEUR SUR UN OBJET GEOMETRIQUE C IPTINT POINTEUR SUR UN MINTE CONTENANT LES POINTS D INTEGRATION C (ACTIF EN ENTREE ET EN SORTIE SANS MODIFICATION) C IVAFOR POINTEUR SUR UN MPTVAL ET LES MELVALS CONTENANT LES FORCES C NODALE RESULTANTES C IVACAR POINTEUR SUR UN MELVAL DE CARACTERISTIQUES C C JACQUELINE BROCHARD AVRIL 85 C C PASSAGE AUX NOUVEAUX CHAMELEM PAR JM CAMPENON LE 17 09 90 C C____________________________________________________________________ C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C -INC CCREEL -INC SMCHAML -INC SMELEME -INC SMINTE -INC SMCOORD -INC PPARAM -INC CCOPTIO C C= Quelques constantes (2.Pi) PARAMETER (X2Pi=6.283185307179586476925286766559D0) C segment netn(nbpts+1) segment ietn(letn) C SEGMENT WORK REAL*8 XE(3,NBNN) ENDSEGMENT C SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT real*8 V(2) C * prob optimiseur il faut initialiser melva1 MELVA1=IVAFOR IF(IPTVPR.NE.0) THEN MELVA1=IPTVPR ENDIF MELVAL=MELVA1 C MINTE=IPTINT NBPGAU=POIGAU(/1) C C idimp1 = IDIM +1 netn = netn1 ietn = ietn1 C ipt1 = ipmaim MELEME=IPMAIL NBNN =NUM(/1) NBELEM=NUM(/2) SEGINI WORK DIM3=1.D0 C C BOUCLE SUR LES ELEMENTS C DO 1 IB=1,NBELEM if (netn1.ne.0) then do 160 inf=1,num(/1) ip=num(inf,ib) id=netn(ip)+1 if=netn(ip+1) do 165 itn=id,if iem=ietn(itn) jne=0 do 166 i0=1,num(/1) do 166 i1=1,ipt1.num(/1) if (num(i0,ib).eq.ipt1.num(i1,iem)) jne=jne+1 166 continue if (jne.eq.num(/1)) goto 170 165 continue 160 continue C IF(JPMAIL.EQ.0.AND.IPCHM1.EQ.0) CALL DTMODL(IPMOD1) C GOTO 9990 170 CONTINUE NBM=IPT1.NUM(/1) NBMA1=NUM(/1) XG=0.D0 YG=0.D0 DO INM=1,NBM IREFM=(IPT1.NUM(INM,IEM)-1)*idimp1 XG=XG+XCOOR(IREFM+1) YG=YG+XCOOR(IREFM+2) ENDDO XG=XG/NBM YG=YG/NBM XK=0.D0 YK=0.D0 DO INF=1,NBMA1 IREFF=(NUM(INF,IB)-1)*idimp1 XK=XK+XCOOR(IREFF+1) YK=YK+XCOOR(IREFF+2) ENDDO XK=XK/NBMA1 YK=YK/NBMA1 V(1)=XG-XK V(2)=YG-YK VN=SQRT(V(1)**2+V(2)**2) V(1)=V(1)/VN V(2)=V(2)/VN endif C C BOUCLE SUR LES POINTS DE GAUSS C xflot = 1d0 DO 10 IGAU=1,NBPGAU C C RECUPERATION DE L'EPAISSEUR C IF (IFOUR.EQ.-2) THEN MPTVAL=IVACAR IF (IVACAR.NE.0) THEN IF(IVAL(1).NE.0) THEN MELVAL=IVAL(1) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB,VELCHE(/2)) DIM3=VELCHE(IGMN,IBMN) ELSE DIM3=1.D0 ENDIF ENDIF ENDIF * VNQSI1=0.D0 VNQSI2=0.D0 R=0.D0 C C BOUCLE SUR LES NOEUDS C DO 20 I=1,NBNN VNQSI1=VNQSI1+SHPTOT(2,I,IGAU)*XE(1,I) VNQSI2=VNQSI2+SHPTOT(2,I,IGAU)*XE(2,I) R=R+SHPTOT(1,I,IGAU)*XE(1,I) 20 CONTINUE if (igau.eq.1.and.netn1.ne.0) then vnn1=-vnqsi2 vnn2=vnqsi1 vnnn =sqrt( vnn1*vnn1+vnn2*vnn2 ) vnn1 = vnn1 / vnnn vnn2 = vnn2 / vnnn endif IF (IFOUR.LT.0) THEN R=1.D0 ELSEIF (IFOUR.EQ.0.OR.(IFOUR.EQ.1 + .AND.NIFOUR.EQ.0)) THEN R=X2PI*R ELSEIF (IFOUR.EQ.1.AND.NIFOUR.NE.0) THEN R=XPI*R ENDIF IF (IFOUR.EQ.-2) R=R*DIM3 * IF(IPTVPR.NE.0) THEN IGMN=MIN(IGAU,MELVA1.VELCHE(/1)) IBMN=MIN(IB ,MELVA1.VELCHE(/2)) + *xflot ELSE ENDIF C MPTVAL=IVAFOR DO 30 J=1,NBNN MELVAL=IVAL(1) MELVAL=IVAL(2) 30 CONTINUE C 10 CONTINUE 1 CONTINUE SEGSUP WORK END
© Cast3M 2003 - Tous droits réservés.
Mentions légales