Télécharger skewns.eso

Retour à la liste

Numérotation des lignes :

skewns
  1. C SKEWNS SOURCE FD218221 20/06/17 21:15:09 10630
  2. SUBROUTINE SKEWNS(VAL,NUM,NN,NE,ITYP)
  3. C-----------------------------------------------------------------------
  4. C Calcul de la "pointicite" (skewness) des elements d'un maillage elementaire
  5. C Fonctionne pour les elements TET4
  6. C
  7. C Le skewness est definit ainsi :
  8. C (volume optimal - volume) / volume optimal
  9. C le volume optimal est celui du triangle/tetraedre equilateral place
  10. C dans la meme sphere circonscrite
  11. C
  12. C Ainsi, pour un triangle/tetraedre equilateral = 0
  13. C pour un triangle/tetraedre degenere = 1
  14. C bornes : 0 < SKEW < 1
  15. C
  16. C Entrees :
  17. C NUM(NN,NE) : tableau des numeros des elements du maillage
  18. C NN : nombre de noeuds par element
  19. C NE : nombre d'elements
  20. C ITYP : numero indiquant le type d'element
  21. C Sorties :
  22. C VAL(1,NE) : tableau des valeurs d'aspect ration pour les elements
  23. C du maillage (il s'agit du VELCHE d'un champ par elements)
  24. C-----------------------------------------------------------------------
  25. C
  26. IMPLICIT INTEGER(I-N)
  27. IMPLICIT REAL*8(A-H,O-Z)
  28. -INC PPARAM
  29. -INC CCOPTIO
  30. -INC SMCOORD
  31. -INC CCREEL
  32. C
  33. DIMENSION VAL(1,*),NUM(NN,NE)
  34. C Quelques nombres constants
  35. PARAMETER (UNDEMI=0.5D0,UN=1D0,DEUX=2D0,TROIS=3D0,QUATRE=4D0,
  36. & SIX=6D0,HUIT=8D0,SEIZE=16D0)
  37. R8S3=SQRT(HUIT/TROIS)
  38. SIXR2=SIX*SQRT(DEUX)
  39. R3=SQRT(TROIS)
  40. C La dimension de l'espace + 1
  41. IDIMP1=IDIM+1
  42. C Erreur si type d'element non prevu (normalement impossible de passer ici !)
  43. IF ((ITYP.NE.4).AND.(ITYP.NE.23)) THEN
  44. CALL ERREUR(16)
  45. RETURN
  46. ENDIF
  47. C Boucle sur les elements du maillage
  48. DO I=1,NE
  49. C Cas des elements TRI3
  50. IF (ITYP.EQ.4) THEN
  51. C Numeros des 3 sommets
  52. IA=NUM(1,I)
  53. IB=NUM(2,I)
  54. IC=NUM(3,I)
  55. C Coordonnees des 3 sommets
  56. XA=XCOOR((IA-1)*IDIMP1+1)
  57. YA=XCOOR((IA-1)*IDIMP1+2)
  58. XB=XCOOR((IB-1)*IDIMP1+1)
  59. YB=XCOOR((IB-1)*IDIMP1+2)
  60. XC=XCOOR((IC-1)*IDIMP1+1)
  61. YC=XCOOR((IC-1)*IDIMP1+2)
  62. IF (IDIM.EQ.3) THEN
  63. ZA=XCOOR((IA-1)*IDIMP1+3)
  64. ZB=XCOOR((IB-1)*IDIMP1+3)
  65. ZC=XCOOR((IC-1)*IDIMP1+3)
  66. ENDIF
  67. C Tailles des 3 aretes
  68. XBA=XB-XA
  69. YBA=YB-YA
  70. IF (IDIM.EQ.2) THEN
  71. AB=SQRT(XBA*XBA+YBA*YBA)
  72. ELSEIF (IDIM.EQ.3) THEN
  73. ZBA=ZB-ZA
  74. AB=SQRT(XBA*XBA+YBA*YBA+ZBA*ZBA)
  75. ENDIF
  76. XCA=XC-XA
  77. YCA=YC-YA
  78. IF (IDIM.EQ.2) THEN
  79. AC=SQRT(XCA*XCA+YCA*YCA)
  80. ELSEIF (IDIM.EQ.3) THEN
  81. ZCA=ZC-ZA
  82. AC=SQRT(XCA*XCA+YCA*YCA+ZCA*ZCA)
  83. ENDIF
  84. XCB=XC-XB
  85. YCB=YC-YB
  86. IF (IDIM.EQ.2) THEN
  87. BC=SQRT(XCB*XCB+YCB*YCB)
  88. ELSEIF (IDIM.EQ.3) THEN
  89. ZCB=ZC-ZB
  90. BC=SQRT(XCB*XCB+YCB*YCB+ZCB*ZCB)
  91. ENDIF
  92. C Aire du triangle (formule de Heron)
  93. P=UNDEMI*(AB+AC+BC)
  94. H2=P*(P-AB)*(P-AC)*(P-BC)
  95. H=SQRT(H2)
  96. C Aire du triangle optimal (c'est-a-dire celui regulier avec
  97. C le meme cercle circonscrit)
  98. RC2=AB*AB*AC*AC*BC*BC/(SEIZE*H2)
  99. AOPT=TROIS*R3*RC2/QUATRE
  100. C Indicateur SKEW, skewness
  101. SKEW=ABS((AOPT-H)/AOPT)
  102. C Cas des elements TET4
  103. ELSEIF (ITYP.EQ.23) THEN
  104. C Numeros des 4 sommets
  105. IA=NUM(1,I)
  106. IB=NUM(2,I)
  107. IC=NUM(3,I)
  108. ID=NUM(4,I)
  109. C Coordonnees des 4 sommets
  110. XA=XCOOR((IA-1)*IDIMP1+1)
  111. YA=XCOOR((IA-1)*IDIMP1+2)
  112. ZA=XCOOR((IA-1)*IDIMP1+3)
  113. XB=XCOOR((IB-1)*IDIMP1+1)
  114. YB=XCOOR((IB-1)*IDIMP1+2)
  115. ZB=XCOOR((IB-1)*IDIMP1+3)
  116. XC=XCOOR((IC-1)*IDIMP1+1)
  117. YC=XCOOR((IC-1)*IDIMP1+2)
  118. ZC=XCOOR((IC-1)*IDIMP1+3)
  119. XD=XCOOR((ID-1)*IDIMP1+1)
  120. YD=XCOOR((ID-1)*IDIMP1+2)
  121. ZD=XCOOR((ID-1)*IDIMP1+3)
  122. C Tailles des aretes AB, AC et AD
  123. XBA=XB-XA
  124. YBA=YB-YA
  125. ZBA=ZB-ZA
  126. AB=SQRT(XBA*XBA+YBA*YBA+ZBA*ZBA)
  127. XCA=XC-XA
  128. YCA=YC-YA
  129. ZCA=ZC-ZA
  130. AC=SQRT(XCA*XCA+YCA*YCA+ZCA*ZCA)
  131. XDA=XD-XA
  132. YDA=YD-YA
  133. ZDA=ZD-ZA
  134. AD=SQRT(XDA*XDA+YDA*YDA+ZDA*ZDA)
  135. C Quelques produits vectoriels
  136. C --> AB^AC
  137. XABAC=YBA*ZCA-ZBA*YCA
  138. YABAC=ZBA*XCA-XBA*ZCA
  139. ZABAC=XBA*YCA-YBA*XCA
  140. C --> AC^AD
  141. XACAD=YCA*ZDA-ZCA*YDA
  142. YACAD=ZCA*XDA-XCA*ZDA
  143. ZACAD=XCA*YDA-YCA*XDA
  144. C Normalisation
  145. XBAN=XBA/AB
  146. YBAN=YBA/AB
  147. ZBAN=ZBA/AB
  148. XABM=UNDEMI*(XA+XB)
  149. YABM=UNDEMI*(YA+YB)
  150. ZABM=UNDEMI*(ZA+ZB)
  151. XCAN=XCA/AC
  152. YCAN=YCA/AC
  153. ZCAN=ZCA/AC
  154. XACM=UNDEMI*(XA+XC)
  155. YACM=UNDEMI*(YA+YC)
  156. ZACM=UNDEMI*(ZA+ZC)
  157. XDAN=XDA/AD
  158. YDAN=YDA/AD
  159. ZDAN=ZDA/AD
  160. XADM=UNDEMI*(XA+XD)
  161. YADM=UNDEMI*(YA+YD)
  162. ZADM=UNDEMI*(ZA+ZD)
  163. C Point milieu de [AB]
  164. XS=XABM
  165. YS=YABM
  166. ZS=ZABM
  167. C Direction perpendiculaire a AB pointant C
  168. SCAL=XCA*XBAN+YCA*YBAN+ZCA*ZBAN
  169. XN=XCA-SCAL*XBAN
  170. YN=YCA-SCAL*YBAN
  171. ZN=ZCA-SCAL*ZBAN
  172. C Distance au plan mediateur de AC
  173. SCAL=(XACM-XS)*XCAN+(YACM-YS)*YCAN+(ZACM-ZS)*ZCAN
  174. SCALD=XN*XCAN+YN*YCAN+ZN*ZCAN+XPETIT
  175. COEF=SCAL/SCALD
  176. C Plan mediateur 1
  177. XS=XS+COEF*XN
  178. YS=YS+COEF*YN
  179. ZS=ZS+COEF*ZN
  180. C Direction normale a ABC
  181. XN=XABAC
  182. YN=YABAC
  183. ZN=ZABAC
  184. C Distance au plan mediateur de AD
  185. SCAL=(XADM-XS)*XDAN+(YADM-YS)*YDAN+(ZADM-ZS)*ZDAN
  186. SCALD=XN*XDAN+YN*YDAN+ZN*ZDAN+XPETIT
  187. COEF=SCAL/SCALD
  188. C Mediateur 2
  189. XS=XS+COEF*XN
  190. YS=YS+COEF*YN
  191. ZS=ZS+COEF*ZN
  192. C Rayon de la sphere circonscrite
  193. RC=SQRT((XS-XA)*(XS-XA)+(YS-YA)*(YS-YA)+(ZS-ZA)*(ZS-ZA))
  194. C Volume du tetraedre optimal (c'est-a-dire celui regulier avec
  195. C la meme sphere circonscrite)
  196. AOPT=RC*R8S3
  197. VOPT=AOPT*AOPT*AOPT/SIXR2
  198. C Volume du tetraedre = AB.(AC^AD) / 6
  199. PMIX=ABS(XBA*XACAD+YBA*YACAD+ZBA*ZACAD)
  200. V=PMIX/SIX
  201. C Indicateur SKEW, skewness
  202. SKEW=ABS((VOPT-V)/VOPT)
  203. ENDIF
  204. C Ecriture dans le tableau
  205. VAL(1,I)=SKEW
  206. ENDDO
  207. C
  208. RETURN
  209. END
  210.  
  211.  

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