fpma3d
C FPMA3D SOURCE JK148537 24/11/05 21:15:04 12066 + ,netn1,ietn1) C C____________________________________________________________________ C C CALCULE LES FORCES DE PRESSIONS SUR LES FACES D ELEMENTS C MASSIFS TRIDIMENSIONNELS C C ENTREES : C --------- C C IPTVPR POINTEUR SUR UN MELVAL CONTENANT LES PRESSIONS APPLIQUEES C 0 SI ON A DONNE UNE PRESSION 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 MELVAL CONTENANT LES FORCES C NODALES RESUL 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 SMCHAML -INC SMELEME -INC SMINTE -INC SMCOORD -INC PPARAM -INC CCOPTIO C segment netn(nbpts+1) segment ietn(letn) C C SEGMENT MPTVAL INTEGER IPOS(NS),NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT C SEGMENT WORK REAL*8 XE(3,NBNN) ENDSEGMENT real*8 V(3) C * pour daire plaisir a l'optimiseur melva1=iptint IF(IPTVPR.NE.0) THEN MELVA1=IPTVPR SEGACT MELVA1 ENDIF C MINTE=IPTINT NBPGAU=POIGAU(/1) C idimp1 = IDIM +1 netn = netn1 ietn = ietn1 C ipt1 = ipmaim MELEME=IPMAIL NBNN =NUM(/1) NBELEM=NUM(/2) C SEGINI WORK SEGACT,MCOORD 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 ZG=0.D0 DO INM=1,NBM IREFM=(IPT1.NUM(INM,IEM)-1)*idimp1 XG=XG+XCOOR(IREFM+1) YG=YG+XCOOR(IREFM+2) ZG=ZG+XCOOR(IREFM+3) ENDDO XG=XG/NBM YG=YG/NBM ZG=ZG/NBM XK=0.D0 YK=0.D0 ZK=0.D0 DO INF=1,NBMA1 IREFF=(NUM(INF,IB)-1)*idimp1 XK=XK+XCOOR(IREFF+1) YK=YK+XCOOR(IREFF+2) ZK=ZK+XCOOR(IREFF+3) ENDDO XK=XK/NBMA1 YK=YK/NBMA1 ZK=ZK/NBMA1 V(1)=XG-XK V(2)=YG-YK V(3)=ZG-ZK VN=SQRT(V(1)**2+V(2)**2+V(3)**2) V(1)=V(1)/VN V(2)=V(2)/VN V(3)=V(3)/VN endif C C C BOUCLE SUR LES POINTS DE GAUSS C xflot = 1d0 DO 10 IGAU=1,NBPGAU VNQSI1=0.D0 VNQSI2=0.D0 VNQSI3=0.D0 VNETA1=0.D0 VNETA2=0.D0 VNETA3=0.D0 C T3=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) VNQSI3=VNQSI3+SHPTOT(2,I,IGAU)*XE(3,I) VNETA1=VNETA1+SHPTOT(3,I,IGAU)*XE(1,I) VNETA2=VNETA2+SHPTOT(3,I,IGAU)*XE(2,I) VNETA3=VNETA3+SHPTOT(3,I,IGAU)*XE(3,I) 20 CONTINUE c if (igau.eq.1.and.netn1.ne.0) then vnn1=vnqsi2*vneta3-vnqsi3*vneta2 vnn2=vnqsi3*vneta1-vnqsi1*vneta3 vnn3=vnqsi1*vneta2-vnqsi2*vneta1 vnnn =sqrt( vnn1*vnn1+vnn2*vnn2+vnn3*vnn3) vnn1 = vnn1 / vnnn vnn2 = vnn2 / vnnn vnn3 = vnn3 / vnnn endif C IF(IPTVPR.NE.0) THEN IGMN=MIN(IGAU,MELVA1.VELCHE(/1)) IBMN=MIN(IB ,MELVA1.VELCHE(/2)) 1 MELVA1.VELCHE(IGMN,IBMN) 1 MELVA1.VELCHE(IGMN,IBMN) T3=POIGAU(IGAU)*(VNQSI1*VNETA2-VNQSI2*VNETA1)* 1 MELVA1.VELCHE(IGMN,IBMN) ELSE T3=POIGAU(IGAU)*(VNQSI1*VNETA2-VNQSI2*VNETA1)*XP ENDIF C MPTVAL=IVAFOR MELVAL=IVAL(1) DO J=1,NBNN ENDDO MELVAL=IVAL(2) DO J=1,NBNN ENDDO MELVAL=IVAL(3) DO J=1,NBNN VELCHE(J,IB)=VELCHE(J,IB)+xflot*SHPTOT(1,J,IGAU)*T3 ENDDO 10 CONTINUE 1 CONTINUE SEGDES,MCOORD SEGSUP WORK END
© Cast3M 2003 - Tous droits réservés.
Mentions légales