Télécharger cfltai.eso

Retour à la liste

Numérotation des lignes :

cfltai
  1. C CFLTAI SOURCE CB215821 17/11/30 21:15:27 9639
  2. SUBROUTINE CFLTAI(ITAILL,IPMAIL,MELE)
  3. *---------------------------------------------------------------------*
  4. *
  5. * calcul du pas de temps CFL
  6. * CFLTAI calcule le paramètre de taille
  7. *
  8. * entree :
  9. * ipmail maillage actif en entree et en sortie
  10. * mele numero de l'element fini dans nomtp
  11. * sortie
  12. * itaill pointeur sur segment melval : actif et vide en entree
  13. * et actif en sortie
  14. *
  15. *---------------------------------------------------------------------*
  16. IMPLICIT INTEGER(I-N)
  17. IMPLICIT REAL*8(A-H,O-Z)
  18. *
  19.  
  20. -INC PPARAM
  21. -INC CCOPTIO
  22. -INC SMELEME
  23. -INC SMCOORD
  24. -INC SMCHAML
  25. -INC CCHAMP
  26. *
  27. DIMENSION X(3),X1(2),X2(2)
  28. *
  29. DIMENSION V24(2),V34(2),V41(2)
  30. DIMENSION V35(2),V57(2),V71(2)
  31. DIMENSION V13(3),V12(3),V23(3), DELTA(3)
  32. *
  33. *
  34. MELEME = IPMAIL
  35. MELVAL = ITAILL
  36. *
  37. *
  38. * branchement en fonction de l'élément fini
  39. *
  40. * 1 5 0 5 0
  41. GOTO (99,99,99, 4,99, 6,99, 4,99,10,99,99,99,99,99,99,99,99,99,99,
  42. 2 99,99,99,99,99,99,27,27,46,99,99,99,99,99,99,99,99,99,99,99,
  43. 4 99,46,99,44,99,46,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
  44. 6 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
  45. 8 99,99,99,46,99,99,99,99,99,99,99,99,27,99,99,99,99,99,99,99,
  46. 1 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
  47. 2 99,99,99,99,99,99,99),MELE
  48. *
  49. * cas du triangle à trois noeuds
  50. *
  51. 4 CONTINUE
  52. NEL = NUM(/2)
  53. DO 402 I=1,NEL
  54. V13(1)=XCOOR((IDIM+1)*(NUM(3,I)-1)+1)-
  55. & XCOOR((IDIM+1)*(NUM(1,I)-1)+1)
  56. V13(2)=XCOOR((IDIM+1)*(NUM(3,I)-1)+2)-
  57. & XCOOR((IDIM+1)*(NUM(1,I)-1)+2)
  58. V12(1)=XCOOR((IDIM+1)*(NUM(2,I)-1)+1)-
  59. & XCOOR((IDIM+1)*(NUM(1,I)-1)+1)
  60. V12(2)=XCOOR((IDIM+1)*(NUM(2,I)-1)+2)-
  61. & XCOOR((IDIM+1)*(NUM(1,I)-1)+2)
  62. V23(1)=XCOOR((IDIM+1)*(NUM(3,I)-1)+1)-
  63. & XCOOR((IDIM+1)*(NUM(2,I)-1)+1)
  64. V23(2)=XCOOR((IDIM+1)*(NUM(3,I)-1)+2)-
  65. & XCOOR((IDIM+1)*(NUM(2,I)-1)+2)
  66. V12L=V12(1)*V12(1)+V12(2)*V12(2)
  67. V13L=V13(1)*V13(1)+V13(2)*V13(2)
  68. V23L=V23(1)*V23(1)+V23(2)*V23(2)
  69. XLON=MIN(V12L,V13L,V23L)
  70. VOL = ABS(V12(1)*V13(2) - V12(2)*V13(1))
  71. XL2 = VOL/MAX(V12L,V13L,V23L)
  72. VELCHE(1,I)=MIN(SQRT(XLON),XL2)
  73. 402 CONTINUE
  74. RETURN
  75. *
  76. * cas du triangle à six noeuds
  77. *
  78. 6 CONTINUE
  79. NEL = NUM(/2)
  80. DO 602 I=1,NEL
  81. * on reprend la formulation du tri3 en considérant les noeuds sommets
  82. * du triangle 1 3 5
  83. V13(1)=XCOOR((IDIM+1)*(NUM(5,I)-1)+1)-
  84. & XCOOR((IDIM+1)*(NUM(1,I)-1)+1)
  85. V13(2)=XCOOR((IDIM+1)*(NUM(5,I)-1)+2)-
  86. & XCOOR((IDIM+1)*(NUM(1,I)-1)+2)
  87. V12(1)=XCOOR((IDIM+1)*(NUM(3,I)-1)+1)-
  88. & XCOOR((IDIM+1)*(NUM(1,I)-1)+1)
  89. V12(2)=XCOOR((IDIM+1)*(NUM(3,I)-1)+2)-
  90. & XCOOR((IDIM+1)*(NUM(1,I)-1)+2)
  91. V23(1)=XCOOR((IDIM+1)*(NUM(5,I)-1)+1)-
  92. & XCOOR((IDIM+1)*(NUM(3,I)-1)+1)
  93. V23(2)=XCOOR((IDIM+1)*(NUM(5,I)-1)+2)-
  94. & XCOOR((IDIM+1)*(NUM(3,I)-1)+2)
  95. V12L=V12(1)*V12(1)+V12(2)*V12(2)
  96. V13L=V13(1)*V13(1)+V13(2)*V13(2)
  97. V23L=V23(1)*V23(1)+V23(2)*V23(2)
  98. XLON=MIN(V12L,V13L,V23L)
  99. VOL = ABS(V12(1)*V13(2) - V12(2)*V13(1))
  100. XL2 = VOL/MAX(V12L,V13L,V23L)
  101. * pour tenir compte des 3 autres noeuds on divise par 4.
  102. VELCHE(1,I)=MIN(SQRT(XLON),XL2)*0.5D0
  103. 602 CONTINUE
  104. RETURN
  105. *
  106. * cas du qua4 massif
  107. *
  108. 8 CONTINUE
  109. NEL = NUM(/2)
  110. DO 802 I=1,NEL
  111. V13(1)=XCOOR((IDIM+1)*(NUM(3,I)-1)+1)-
  112. & XCOOR((IDIM+1)*(NUM(1,I)-1)+1)
  113. V13(2)=XCOOR((IDIM+1)*(NUM(3,I)-1)+2)-
  114. & XCOOR((IDIM+1)*(NUM(1,I)-1)+2)
  115. V24(1)=XCOOR((IDIM+1)*(NUM(4,I)-1)+1)-
  116. & XCOOR((IDIM+1)*(NUM(2,I)-1)+1)
  117. V24(2)=XCOOR((IDIM+1)*(NUM(4,I)-1)+2)-
  118. & XCOOR((IDIM+1)*(NUM(2,I)-1)+2)
  119. V12(1)=XCOOR((IDIM+1)*(NUM(2,I)-1)+1)-
  120. & XCOOR((IDIM+1)*(NUM(1,I)-1)+1)
  121. V12(2)=XCOOR((IDIM+1)*(NUM(2,I)-1)+2)-
  122. & XCOOR((IDIM+1)*(NUM(1,I)-1)+2)
  123. V23(1)=XCOOR((IDIM+1)*(NUM(3,I)-1)+1)-
  124. & XCOOR((IDIM+1)*(NUM(2,I)-1)+1)
  125. V23(2)=XCOOR((IDIM+1)*(NUM(3,I)-1)+2)-
  126. & XCOOR((IDIM+1)*(NUM(2,I)-1)+2)
  127. V34(1)=XCOOR((IDIM+1)*(NUM(4,I)-1)+1)-
  128. & XCOOR((IDIM+1)*(NUM(3,I)-1)+1)
  129. V34(2)=XCOOR((IDIM+1)*(NUM(4,I)-1)+2)-
  130. & XCOOR((IDIM+1)*(NUM(3,I)-1)+2)
  131. V41(1)=XCOOR((IDIM+1)*(NUM(1,I)-1)+1)-
  132. & XCOOR((IDIM+1)*(NUM(4,I)-1)+1)
  133. V41(2)=XCOOR((IDIM+1)*(NUM(4,I)-1)+2)-
  134. & XCOOR((IDIM+1)*(NUM(1,I)-1)+2)
  135. V12L=V12(1)*V12(1)+V12(2)*V12(2)
  136. V23L=V23(1)*V23(1)+V23(2)*V23(2)
  137. V34L=V34(1)*V34(1)+V34(2)*V34(2)
  138. V41L=V41(1)*V41(1)+V41(2)*V41(2)
  139. V13L=V13(1)*V13(1)+V13(2)*V13(2)
  140. V24L=V24(1)*V24(1)+V24(2)*V24(2)
  141. XLON = MIN(V12L,V23L,V34L,V41L,V13L,V24L)
  142. VELCHE(1,I) = SQRT(XLON) * 0.8D0
  143. 802 CONTINUE
  144. RETURN
  145. *
  146. * cas du qua8
  147. *
  148. 10 CONTINUE
  149. NEL = NUM(/2)
  150. DO 1002 I=1,NEL
  151. * on cherche le plus petit des quatres coins
  152. V13(1) = XCOOR((IDIM+1)*(NUM(3,I)-1)+1)-
  153. & XCOOR((IDIM+1)*(NUM(1,I)-1)+1)
  154. V13(2) = XCOOR((IDIM+1)*(NUM(3,I)-1)+2)-
  155. & XCOOR((IDIM+1)*(NUM(1,I)-1)+2)
  156. V35(1) = XCOOR((IDIM+1)*(NUM(5,I)-1)+1)-
  157. & XCOOR((IDIM+1)*(NUM(3,I)-1)+1)
  158. V35(2) = XCOOR((IDIM+1)*(NUM(5,I)-1)+2)-
  159. & XCOOR((IDIM+1)*(NUM(3,I)-1)+2)
  160. V57(1) = XCOOR((IDIM+1)*(NUM(7,I)-1)+1)-
  161. & XCOOR((IDIM+1)*(NUM(5,I)-1)+1)
  162. V57(2) = XCOOR((IDIM+1)*(NUM(7,I)-1)+2)-
  163. & XCOOR((IDIM+1)*(NUM(5,I)-1)+2)
  164. V71(1) = XCOOR((IDIM+1)*(NUM(1,I)-1)+1)-
  165. & XCOOR((IDIM+1)*(NUM(7,I)-1)+1)
  166. V71(2) = XCOOR((IDIM+1)*(NUM(1,I)-1)+2)-
  167. & XCOOR((IDIM+1)*(NUM(7,I)-1)+2)
  168. DV71 = SQRT(V71(1)*V71(1) + V71(2)*V71(2))
  169. DV57 = SQRT(V57(1)*V57(1) + V57(2)*V57(2))
  170. DV35 = SQRT(V35(1)*V35(1) + V35(2)*V35(2))
  171. DV13 = SQRT(V13(1)*V13(1) + V13(2)*V13(2))
  172. XLON = MIN(DV71,DV57,DV35,DV13)
  173. * de plus on regarde les médianes pour considérer le 'cisaillement'
  174. * eventuel de l'élément
  175. XM1=(XCOOR((IDIM+1)*(NUM(3,I)-1)+1)+
  176. & XCOOR((IDIM+1)*(NUM(1,I)-1)+1))*0.5D0
  177. YM1=(XCOOR((IDIM+1)*(NUM(3,I)-1)+2)+
  178. & XCOOR((IDIM+1)*(NUM(1,I)-1)+2))*0.5D0
  179. XM2=(XCOOR((IDIM+1)*(NUM(5,I)-1)+1)+
  180. & XCOOR((IDIM+1)*(NUM(3,I)-1)+1))*0.5D0
  181. YM2=(XCOOR((IDIM+1)*(NUM(5,I)-1)+2)+
  182. & XCOOR((IDIM+1)*(NUM(3,I)-1)+2))*0.5D0
  183. XM3=(XCOOR((IDIM+1)*(NUM(7,I)-1)+1)+
  184. & XCOOR((IDIM+1)*(NUM(5,I)-1)+1))*0.5D0
  185. YM3=(XCOOR((IDIM+1)*(NUM(7,I)-1)+2)+
  186. & XCOOR((IDIM+1)*(NUM(5,I)-1)+2))*0.5D0
  187. XM4=(XCOOR((IDIM+1)*(NUM(1,I)-1)+1)+
  188. & XCOOR((IDIM+1)*(NUM(7,I)-1)+1))*0.5D0
  189. YM4=(XCOOR((IDIM+1)*(NUM(1,I)-1)+2)+
  190. & XCOOR((IDIM+1)*(NUM(7,I)-1)+2))*0.5D0
  191. AX=XM2-XM4
  192. AY=YM2-YM4
  193. BX=XM3-XM1
  194. BY=YM3-YM1
  195. AL=SQRT(AX*AX+AY*AY)
  196. BL=SQRT(BX*BX+BY*BY)
  197. ANX=-AY/AL
  198. ANY= AX/AL
  199. BNX=-BY/BL
  200. BNY= BX/BL
  201. H1=ABS(BX*ANX+BY*ANY)
  202. H2=ABS(AX*BNX+AY*BNY)
  203. XLON=MIN(XLON,H1)
  204. XLON=MIN(XLON,H2)
  205. * on divise par 2 pour prendre en compte le fait qu'il y a deux noeuds par coté
  206. * on prend un facteur de securité de 0.5
  207. VELCHE(1,I) = XLON * 0.25D0
  208. 1002 CONTINUE
  209. RETURN
  210. *
  211. * cas de la barre basé sur un seg2
  212. *
  213. 46 CONTINUE
  214. NEL = NUM(/2)
  215. DO 4602 I=1,NEL
  216. DO 4601 J=1,IDIM
  217. X(J)=XCOOR((IDIM+1)*(NUM(2,I)-1)+J)-
  218. & XCOOR((IDIM+1)*(NUM(1,I)-1)+J)
  219. VELCHE(1,I) = VELCHE(1,I) + X(J)*X(J)
  220. 4601 CONTINUE
  221. VELCHE(1,I) = SQRT(VELCHE(1,I))
  222. 4602 CONTINUE
  223. RETURN
  224. *
  225. * cas du coq2 basé sur un seg2 (en 2d: axisymétrique)
  226. * la taille diffère du cas barre lorsqu'on est proche de l'axe
  227. 44 CONTINUE
  228. NEL = NUM(/2)
  229. DO 4402 I=1,NEL
  230. XTEST1 = 0.D0
  231. XTEST2 = 0.D0
  232. DO 4401 J=1,IDIM
  233. X2(J)=XCOOR((IDIM+1)*(NUM(2,I)-1)+J)
  234. X1(J)=XCOOR((IDIM+1)*(NUM(1,I)-1)+J)
  235. X(J) = X2(J) - X1(J)
  236. VELCHE(1,I) = VELCHE(1,I) + X(J)*X(J)
  237. XTEST1 = XTEST1 + X1(J)*X1(J)
  238. XTEST2 = XTEST2 + X2(J)*X2(J)
  239. 4401 CONTINUE
  240. XTEST1 = MIN(XTEST1,XTEST2)
  241. IF ((XTEST1.LT.VELCHE(1,I)).AND.(IDIM.EQ.2)) THEN
  242. VELCHE(1,I) = VELCHE(1,I) / 4
  243. ENDIF
  244. VELCHE(1,I) = SQRT(VELCHE(1,I))
  245. 4402 CONTINUE
  246. RETURN
  247. *
  248. * cas du coq3 basé sur un seg3
  249. *
  250. 27 CONTINUE
  251. NEL = NUM(/2)
  252. DO 2705 I=1,NEL
  253. AIRE = 0.D0
  254. V12L = 0.D0
  255. V13L = 0.D0
  256. V23L = 0.D0
  257. DO 2701 J=1,IDIM
  258. V13(J)=XCOOR((IDIM+1)*(NUM(3,I)-1)+J)-
  259. & XCOOR((IDIM+1)*(NUM(1,I)-1)+J)
  260. V12(J)=XCOOR((IDIM+1)*(NUM(2,I)-1)+J)-
  261. & XCOOR((IDIM+1)*(NUM(1,I)-1)+J)
  262. V23(J)=XCOOR((IDIM+1)*(NUM(3,I)-1)+J)-
  263. & XCOOR((IDIM+1)*(NUM(2,I)-1)+J)
  264. V12L = V12L + V12(J)*V12(J)
  265. V13L = V13L + V13(J)*V13(J)
  266. V23L = V23L + V23(J)*V23(J)
  267. 2701 CONTINUE
  268. DO 2702 J=1,IDIM
  269. J0 = MOD(J,IDIM)
  270. J1 = MOD((J+1),IDIM)
  271. DELTA(J) = V12(J0+1)*V13(J1+1) - V12(J1+1)*V13(J0+1)
  272. IF (IDIM.EQ.3) THEN
  273. AIRE = AIRE + DELTA(J)*DELTA(J)
  274. ENDIF
  275. 2702 CONTINUE
  276. IF (IDIM.EQ.3) THEN
  277. AIRE = 0.5D0 * SQRT(AIRE)
  278. ELSE
  279. AIRE = 0.5D0 * DELTA(1)
  280. ENDIF
  281. VELCHE(1,I) = 2.D0 * AIRE / SQRT(MAX(V12L,V13L,V23L))
  282. 2705 CONTINUE
  283. RETURN
  284. *
  285. 99 CONTINUE
  286. MOTERR(1:4)=NOMTP(MELE)
  287. MOTERR(9:12)='CFLT'
  288. CALL ERREUR(86)
  289. *
  290. RETURN
  291. END
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  

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