Télécharger cfltai.eso

Retour à la liste

Numérotation des lignes :

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

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