Télécharger fpma3d.eso

Retour à la liste

Numérotation des lignes :

fpma3d
  1. C FPMA3D SOURCE OF166741 25/02/21 21:16:43 12166
  2.  
  3. C____________________________________________________________________
  4. C CALCULE LES FORCES DE PRESSIONS SUR LES FACES D ELEMENTS
  5. C MASSIFS TRIDIMENSIONNELS
  6. C
  7. C ENTREES :
  8. C ---------
  9. C
  10. C IPTVPR POINTEUR SUR UN MELVAL CONTENANT LES PRESSIONS APPLIQUEES
  11. C 0 SI ON A DONNE UNE PRESSION CONSTANTE
  12. C IPMAIL POINTEUR SUR UN OBJET GEOMETRIQUE
  13. C IPTINT POINTEUR SUR UN MINTE CONTENANT LES POINTS D INTEGRATION
  14. C ACTIF EN ENTREE ET EN SORTIE SANS MODIFICATION
  15. C IVAFOR POINTEUR SUR UN MPTVAL ET LES MELVAL CONTENANT LES FORCES
  16. C NODALES RESUL
  17. C
  18. C JACQUELINE BROCHARD AVRIL 85
  19. C
  20. C PASSAGE AUX NOUVEAUX CHAMELEM PAR JM CAMPENON LE 17 09 90
  21. C
  22. C______________________________________________________________________
  23.  
  24. SUBROUTINE FPMA3D(IPTVPR,IPMAIL,ipmaim,IPTINT,IVAFOR,XP
  25. & ,netn1,ietn1)
  26.  
  27. IMPLICIT INTEGER(I-N)
  28. IMPLICIT REAL*8 (A-H,O-Z)
  29.  
  30. -INC PPARAM
  31. -INC CCOPTIO
  32.  
  33. -INC SMCHAML
  34. -INC SMELEME
  35. -INC SMINTE
  36. -INC SMCOORD
  37.  
  38. -INC TMPTVAL
  39.  
  40. segment netn(notn)
  41. segment ietn(letn)
  42.  
  43. SEGMENT WORK
  44. REAL*8 XE(3,NBNN)
  45. ENDSEGMENT
  46.  
  47. idimp1 = IDIM+1
  48. * prob optimiseur il faut initialiser melva1
  49. MELVA1=IVAFOR
  50. IF (IPTVPR.NE.0) THEN
  51. MELVA1=IPTVPR
  52. c* SEGACT,MELVA1 <- ACTIF EN E/S
  53. IG11 = MELVA1.VELCHE(/1)
  54. IB12 = MELVA1.VELCHE(/2)
  55. ENDIF
  56.  
  57. MINTE=IPTINT
  58. C* SEGACT,MINTE <- ACTIF EN E/S
  59. NBPGAU=POIGAU(/1)
  60.  
  61. MELEME = IPMAIL
  62. c* SEGACT,MELEME <- ACTIF EN E/S
  63. NBNN = meleme.NUM(/1)
  64. NBELEM = meleme.NUM(/2)
  65.  
  66. SEGINI,WORK
  67.  
  68. netn = netn1
  69. ietn = ietn1
  70. ipt1 = ipmaim
  71. IF (IPT1.GT.0) THEN
  72. if (netn.eq.0 .or. ietn.eq.0) then
  73. write(ioimp,*) 'FPMA3D : incompatibilite netn, ietn & IPMAIM'
  74. endif
  75. c* SEGACT,IPT1 <- ACTIF en E/S
  76. nbnn1 = ipt1.num(/1)
  77. nbel1 = ipt1.num(/2)
  78. ELSE
  79. if (netn.gt.0 .or. ietn.gt.0) then
  80. write(ioimp,*) 'FPMA2D : incompatibilite netn, ietn & IPMAIM'
  81. endif
  82. ENDIF
  83. C
  84. C BOUCLE SUR LES ELEMENTS
  85. C
  86. DO IB = 1, NBELEM
  87.  
  88. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
  89.  
  90. XFLOT = +1.D0
  91. IF (netn.GT.0) THEN
  92. DO inf = 1, nbnn
  93. ip = meleme.num(inf,ib)
  94. ideb = netn(ip)+1
  95. ifin = netn(ip+1)
  96. do itn = ideb, ifin
  97. IEM = ietn(itn)
  98. jne = 0
  99. do i = 1, nbnn
  100. ino = num(i,ib)
  101. do i1 = 1, nbnn1
  102. if (ino.eq.ipt1.num(i1,IEM)) jne=jne+1
  103. enddo
  104. enddo
  105. if (jne.eq.nbnn) goto 170
  106. enddo
  107. ENDDO
  108. CALL ERREUR(26)
  109. GOTO 9900
  110. 170 continue
  111. XG = 0.D0
  112. YG = 0.D0
  113. ZG = 0.D0
  114. DO I = 1, NBNN1
  115. ino = (IPT1.NUM(I,IEM)-1)*idimp1
  116. XG=XG+XCOOR(ino+1)
  117. YG=YG+XCOOR(ino+2)
  118. ZG=ZG+XCOOR(ino+3)
  119. ENDDO
  120. XG=XG / NBNN1
  121. YG=YG / NBNN1
  122. ZG=ZG / NBNN1
  123.  
  124. XK=0.D0
  125. YK=0.D0
  126. ZK=0.D0
  127. DO i = 1,NBNN
  128. XK=XK+XE(1,I)
  129. YK=YK+XE(2,I)
  130. ZK=ZK+XE(3,I)
  131. ENDDO
  132. XK=XK/NBNN
  133. YK=YK/NBNN
  134. ZK=ZK/NBNN
  135.  
  136. V_1 = XG - XK
  137. V_2 = YG - YK
  138. V_3 = ZG - ZK
  139. r_z = 1.D0 / SQRT(V_1*V_1+V_2*V_2+V_3*V_3)
  140. V_1 = V_1 * r_z
  141. V_2 = V_2 * r_z
  142. V_3 = V_3 * r_z
  143. ENDIF
  144. C
  145. C BOUCLE SUR LES POINTS DE GAUSS
  146. C
  147. DO IGAU = 1, NBPGAU
  148.  
  149. VNQSI1 = 0.D0
  150. VNQSI2 = 0.D0
  151. VNQSI3 = 0.D0
  152. VNETA1 = 0.D0
  153. VNETA2 = 0.D0
  154. VNETA3 = 0.D0
  155. DO I = 1, NBNN
  156. VNQSI1 = VNQSI1+SHPTOT(2,I,IGAU)*XE(1,I)
  157. VNQSI2 = VNQSI2+SHPTOT(2,I,IGAU)*XE(2,I)
  158. VNQSI3 = VNQSI3+SHPTOT(2,I,IGAU)*XE(3,I)
  159. VNETA1 = VNETA1+SHPTOT(3,I,IGAU)*XE(1,I)
  160. VNETA2 = VNETA2+SHPTOT(3,I,IGAU)*XE(2,I)
  161. VNETA3 = VNETA3+SHPTOT(3,I,IGAU)*XE(3,I)
  162. ENDDO
  163.  
  164. VNN1 = VNQSI2*VNETA3-VNQSI3*VNETA2
  165. VNN2 = VNQSI3*VNETA1-VNQSI1*VNETA3
  166. VNN3 = VNQSI1*VNETA2-VNQSI2*VNETA1
  167.  
  168. if (igau.eq.1.and.netn.gt.0) then
  169. vnnn = 1.D0 / SQRT(vnn1*vnn1+vnn2*vnn2+vnn3*vnn3)
  170. test = v_1*(vnn1*vnnn) + v_2*(vnn2*vnnn) + v_3*(vnn3*vnnn)
  171. if (test.lt.0d0) xflot = -1.d0
  172. endif
  173.  
  174. r_z = POIGAU(IGAU) * XFLOT
  175. IF (IPTVPR.NE.0) THEN
  176. IGMN=MIN(IGAU,IG11)
  177. IBMN=MIN(IB ,IB12)
  178. r_z = r_z * MELVA1.VELCHE(IGMN,IBMN)
  179. ELSE
  180. r_z = r_z * XP
  181. ENDIF
  182.  
  183. T1 = r_z * VNN1
  184. T2 = r_z * VNN2
  185. T3 = r_z * VNN3
  186.  
  187. MPTVAL=IVAFOR
  188. MELVAL=IVAL(1)
  189. DO i=1,NBNN
  190. VELCHE(i,IB) = VELCHE(i,IB) + SHPTOT(1,i,IGAU)*T1
  191. ENDDO
  192. MELVAL=IVAL(2)
  193. DO i=1,NBNN
  194. VELCHE(i,IB) = VELCHE(i,IB) + SHPTOT(1,i,IGAU)*T2
  195. ENDDO
  196. MELVAL=IVAL(3)
  197. DO i=1,NBNN
  198. VELCHE(i,IB) = VELCHE(i,IB) + SHPTOT(1,i,IGAU)*T3
  199. ENDDO
  200.  
  201. ENDDO
  202.  
  203. ENDDO
  204.  
  205. 9900 CONTINUE
  206. SEGSUP,WORK
  207.  
  208. c* SEGDES,MINTE <- ACTIF en E/S
  209. c* SEGDES,MELEME <- ACTIF en E/S
  210. c* IF (IPTVPR.NE.0) SEGDES,MELVA1 <- ACTIF en E/S
  211.  
  212. RETURN
  213. END
  214.  
  215.  
  216.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales