Télécharger pb443.eso

Retour à la liste

Numérotation des lignes :

pb443
  1. C PB443 SOURCE CB215821 26/08/24 21:17:36 12622
  2. SUBROUTINE PB443(X,Y,Z,PG,FN,GR,FM,GM,ND,NP,MP,NGG,NPG,NOM2)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C************************************************************************
  6. C
  7. C CALCULE LES FONCTIONS DE FORME D'UN : Iso-Q2 (iso P1/P0 nc) TE10
  8. C
  9. C
  10. C
  11. C ^ zeta
  12. C |
  13. C |10
  14. C |
  15. C |
  16. C | 9
  17. C | /\ /^ eta
  18. C | / \ /
  19. C |/____\ /
  20. C |7 8 /
  21. C | /
  22. C | 5
  23. C | / \
  24. C | / \
  25. C | 6_____\4
  26. C | / \ /\
  27. C | / \ / \
  28. C |/_____\/____\ ____________________>ksi
  29. C 1 2 3
  30. C
  31. C
  32. C************************************************************************
  33. CHARACTER*4 NOM2
  34. REAL*8 AL,BE
  35. PARAMETER (AL=.5854101966249684D0)
  36. PARAMETER (BE=.1381966011250105D0)
  37. REAL*8 X(NPG),Y(NPG),Z(NPG)
  38. REAL*8 FN(NP,NPG),GR(ND,NP,NPG),PG(NPG)
  39.  
  40. REAL*8 FM(MP,NPG),GM(ND,MP,NPG)
  41. INTEGER CONEK(4,8),L,K,I,N,N1,N2,N3,N4,IGAU,IFN
  42. INTEGER ND,MP,NGG,NP,NPG
  43. REAL*8 KXYZ(3,10),AA(4)
  44. REAL*8 T1X,T1Y,T1Z,C1,P1C
  45. REAL*8 T2X,T2Y,T2Z,C2,P2C
  46. REAL*8 T3X,T3Y,T3Z,C3,P3C
  47. REAL*8 T4X,T4Y,T4Z,C4,P4C
  48. C
  49. C Donnees de la numerotation locale des 4 noeuds de chaque tetraedre
  50. C
  51. DATA CONEK/1,2,6,7,
  52. & 2,8,6,7,
  53. & 2,3,4,8,
  54. & 2,4,6,8,
  55. & 4,5,6,9,
  56. & 8,9,4,6,
  57. & 6,7,8,9,
  58. & 7,8,9,10/
  59. C
  60. C Donnees des coordonnees des points du tetraedre TE10
  61. C X Y Z
  62. DATA KXYZ/0.0, 0.0, 0.0,
  63. & 0.5, 0.0, 0.0,
  64. & 1.0, 0.0, 0.0,
  65. & 0.5, 0.5, 0.0,
  66. & 0.0, 1.0, 0.0,
  67. & 0.0, 0.5, 0.0,
  68. & 0.0, 0.0, 0.5,
  69. & 0.5, 0.0, 0.5,
  70. & 0.0, 0.5, 0.5,
  71. & 0.0, 0.0, 1.0/
  72.  
  73. C
  74. C On initialise les fonctions tests et les gradients a 0
  75. C
  76. DO 10 L=1,NPG
  77. C Poids de Gauss
  78. PG(L) = 0.1875D0
  79. DO 1009 K=1,MP
  80. FM(K,L)=0.0D0
  81. DO 22 I=1,ND
  82. GM(I,K,L)=0.0D0
  83. 22 CONTINUE
  84. 1009 CONTINUE
  85.  
  86. DO 1010 K=1,NP
  87. FN(K,L)=0.0D0
  88. DO 20 I=1,ND
  89. GR(I,K,L)=0.0D0
  90. 20 CONTINUE
  91. 1010 CONTINUE
  92.  
  93. 10 CONTINUE
  94. C
  95. C On traite chaque tetraedre elementaire
  96. C
  97. DO 40 K=1,8
  98. C
  99. C On travaille sur chacun des tetraedres composant le macro
  100. C
  101. N1=CONEK(1,K)
  102. N2=CONEK(2,K)
  103. N3=CONEK(3,K)
  104. N4=CONEK(4,K)
  105. C Calcul des equations de plans oppose a chaque point
  106. C
  107. C Plan 1
  108. T1X=(KXYZ(2,N3)-KXYZ(2,N2))*(KXYZ(3,N4)-KXYZ(3,N2))
  109. & -(KXYZ(3,N3)-KXYZ(3,N2))*(KXYZ(2,N4)-KXYZ(2,N2))
  110. T1Y=(KXYZ(3,N3)-KXYZ(3,N2))*(KXYZ(1,N4)-KXYZ(1,N2))
  111. & -(KXYZ(1,N3)-KXYZ(1,N2))*(KXYZ(3,N4)-KXYZ(3,N2))
  112. T1Z=(KXYZ(1,N3)-KXYZ(1,N2))*(KXYZ(2,N4)-KXYZ(2,N2))
  113. & -(KXYZ(2,N3)-KXYZ(2,N2))*(KXYZ(1,N4)-KXYZ(1,N2))
  114. C1=-(T1X*KXYZ(1,N2)+T1Y*KXYZ(2,N2)+T1Z*KXYZ(3,N2))
  115. P1C=T1X*KXYZ(1,N1)+T1Y*KXYZ(2,N1)+T1Z*KXYZ(3,N1)+C1
  116. T1X=T1X/P1C
  117. T1Y=T1Y/P1C
  118. T1Z=T1Z/P1C
  119. C1=C1/P1C
  120. C Plan 2
  121. T2X=(KXYZ(2,N4)-KXYZ(2,N3))*(KXYZ(3,N1)-KXYZ(3,N3))
  122. & -(KXYZ(3,N4)-KXYZ(3,N3))*(KXYZ(2,N1)-KXYZ(2,N3))
  123. T2Y=(KXYZ(3,N4)-KXYZ(3,N3))*(KXYZ(1,N1)-KXYZ(1,N3))
  124. & -(KXYZ(1,N4)-KXYZ(1,N3))*(KXYZ(3,N1)-KXYZ(3,N3))
  125. T2Z=(KXYZ(1,N4)-KXYZ(1,N3))*(KXYZ(2,N1)-KXYZ(2,N3))
  126. & -(KXYZ(2,N4)-KXYZ(2,N3))*(KXYZ(1,N1)-KXYZ(1,N3))
  127. C2=-(T2X*KXYZ(1,N3)+T2Y*KXYZ(2,N3)+T2Z*KXYZ(3,N3))
  128. P2C=T2X*KXYZ(1,N2)+T2Y*KXYZ(2,N2)+T2Z*KXYZ(3,N2)+C2
  129. T2X=T2X/P2C
  130. T2Y=T2Y/P2C
  131. T2Z=T2Z/P2C
  132. C2=C2/P2C
  133. C Plan 3
  134. T3X=(KXYZ(2,N1)-KXYZ(2,N4))*(KXYZ(3,N2)-KXYZ(3,N4))
  135. & -(KXYZ(3,N1)-KXYZ(3,N4))*(KXYZ(2,N2)-KXYZ(2,N4))
  136. T3Y=(KXYZ(3,N1)-KXYZ(3,N4))*(KXYZ(1,N2)-KXYZ(1,N4))
  137. & -(KXYZ(1,N1)-KXYZ(1,N4))*(KXYZ(3,N2)-KXYZ(3,N4))
  138. T3Z=(KXYZ(1,N1)-KXYZ(1,N4))*(KXYZ(2,N2)-KXYZ(2,N4))
  139. & -(KXYZ(2,N1)-KXYZ(2,N4))*(KXYZ(1,N2)-KXYZ(1,N4))
  140. C3=-(T3X*KXYZ(1,N4)+T3Y*KXYZ(2,N4)+T3Z*KXYZ(3,N4))
  141. P3C=T3X*KXYZ(1,N3)+T3Y*KXYZ(2,N3)+T3Z*KXYZ(3,N3)+C3
  142. T3X=T3X/P3C
  143. T3Y=T3Y/P3C
  144. T3Z=T3Z/P3C
  145. C3=C3/P3C
  146. C Plan 4
  147. T4X=(KXYZ(2,N2)-KXYZ(2,N1))*(KXYZ(3,N3)-KXYZ(3,N1))
  148. & -(KXYZ(3,N2)-KXYZ(3,N1))*(KXYZ(2,N3)-KXYZ(2,N1))
  149. T4Y=(KXYZ(3,N2)-KXYZ(3,N1))*(KXYZ(1,N3)-KXYZ(1,N1))
  150. & -(KXYZ(1,N2)-KXYZ(1,N1))*(KXYZ(3,N3)-KXYZ(3,N1))
  151. T4Z=(KXYZ(1,N2)-KXYZ(1,N1))*(KXYZ(2,N3)-KXYZ(2,N1))
  152. & -(KXYZ(2,N2)-KXYZ(2,N1))*(KXYZ(1,N3)-KXYZ(1,N1))
  153. C4=-(T4X*KXYZ(1,N1)+T4Y*KXYZ(2,N1)+T4Z*KXYZ(3,N1))
  154. P4C=T4X*KXYZ(1,N4)+T4Y*KXYZ(2,N4)+T4Z*KXYZ(3,N4)+C4
  155. T4X=T4X/P4C
  156. T4Y=T4Y/P4C
  157. T4Z=T4Z/P4C
  158. C4=C4/P4C
  159. C
  160. C Boucle sur les points de Gauss
  161. C
  162. DO 50 N=1,(NPG/8)
  163. IF (NPG.EQ.32) THEN
  164. DO 60 L=1,4
  165. AA(L)=BE
  166. 60 CONTINUE
  167. AA(N)=AL
  168. ELSE
  169. DO 70 L=1,4
  170. AA(L)=0.5D1
  171. 70 CONTINUE
  172. ENDIF
  173. C
  174. C Indice globale du point de Gauss
  175. C
  176. IGAU=(K-1)*(NPG/8)+N
  177. C
  178. C Coordonnees du point de Gauss (barycentre des 4 points du tetraedre)
  179. C
  180. X(IGAU)=AA(1)*KXYZ(1,N1)+AA(2)*KXYZ(1,N2)
  181. & +AA(3)*KXYZ(1,N3)+AA(4)*KXYZ(1,N4)
  182. Y(IGAU)=AA(1)*KXYZ(2,N1)+AA(2)*KXYZ(2,N2)
  183. & +AA(3)*KXYZ(2,N3)+AA(4)*KXYZ(2,N4)
  184. Z(IGAU)=AA(1)*KXYZ(3,N1)+AA(2)*KXYZ(3,N2)
  185. & +AA(3)*KXYZ(3,N3)+AA(4)*KXYZ(3,N4)
  186. C
  187. C Boucle sur les fonctions tests
  188. C
  189. C
  190. C Numerotation globale de la fonction test
  191. C
  192. IFN=(K-1)*4
  193. C
  194. C Calcul des fonctions tests et du gradient au point IGAU
  195. C
  196. FN((IFN+1),IGAU)=T1X*X(IGAU)+T1Y*Y(IGAU)
  197. & +T1Z*Z(IGAU)+C1
  198. GR(1,(IFN+1),IGAU)=T1X
  199. GR(2,(IFN+1),IGAU)=T1Y
  200. GR(3,(IFN+1),IGAU)=T1Z
  201. FN((IFN+2),IGAU)=T2X*X(IGAU)+T2Y*Y(IGAU)
  202. & +T2Z*Z(IGAU)+C2
  203. GR(1,(IFN+2),IGAU)=T2X
  204. GR(2,(IFN+2),IGAU)=T2Y
  205. GR(3,(IFN+2),IGAU)=T2Z
  206. FN((IFN+3),IGAU)=T3X*X(IGAU)+T3Y*Y(IGAU)
  207. & +T3Z*Z(IGAU)+C3
  208. GR(1,(IFN+3),IGAU)=T3X
  209. GR(2,(IFN+3),IGAU)=T3Y
  210. GR(3,(IFN+3),IGAU)=T3Z
  211. FN((IFN+4),IGAU)=T4X*X(IGAU)+T4Y*Y(IGAU)
  212. & +T4Z*Z(IGAU)+C4
  213. GR(1,(IFN+4),IGAU)=T4X
  214. GR(2,(IFN+4),IGAU)=T4Y
  215. GR(3,(IFN+4),IGAU)=T4Z
  216. C
  217. C Calcul des fonctions tests pour la pression
  218. C
  219. FM(((K+1)/2),IGAU)=1.0D0
  220. 50 CONTINUE
  221. 40 CONTINUE
  222.  
  223. IF(NOM2.EQ.'MCF1')THEN
  224. CO=6.D0 ** (1.D0/3.D0)
  225. UNSCO=1.D0/CO
  226. XXXX=-1.D0*UNSCO
  227. DO 51 L=1,NPG
  228. FM(1,L)=1.D0-(X(L)+Y(L)+Z(L))*UNSCO
  229. FM(2,L)=X(L)*UNSCO
  230. FM(3,L)=Y(L)*UNSCO
  231. FM(4,L)=Z(L)*UNSCO
  232. C
  233. GM(1,1,L)=XXXX
  234. GM(2,1,L)=XXXX
  235. GM(3,1,L)=XXXX
  236. C
  237. GM(1,2,L)=UNSCO
  238. GM(2,2,L)=0.D0
  239. GM(3,2,L)=0.D0
  240. C
  241. GM(1,3,L)=0.D0
  242. GM(2,3,L)=UNSCO
  243. GM(3,3,L)=0.D0
  244. C
  245. GM(1,4,L)=0.D0
  246. GM(2,4,L)=0.D0
  247. GM(3,4,L)=UNSCO
  248. C
  249. 51 CONTINUE
  250. ENDIF
  251.  
  252. C write(6,*)'X '
  253. C write(6,1008)X
  254. 1008 FORMAT(8(1X,1PE11.4))
  255.  
  256. RETURN
  257. END
  258.  
  259.  
  260.  
  261.  

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