Télécharger cq4loc.eso

Retour à la liste

Numérotation des lignes :

cq4loc
  1. C CQ4LOC SOURCE CB215821 26/08/24 21:15:50 12622
  2. SUBROUTINE CQ4LOC (XE, XEL,BPSS,NOQUAL, IVRF)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8(A-H,O-Z)
  5. ************************************************************************
  6. *
  7. * C Q 4 L O C
  8. * -----------
  9. *
  10. * FONCTION:
  11. * ---------
  12. *
  13. * Calcul de caract{ristiques d'un {l{ment COQ4.
  14. *
  15. * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN)
  16. * -----------
  17. *
  18. * XE (E) Coordonn{es des 4 noeuds.
  19. * IVRF (E) = 1 si demande de v{rification de l'{l{ment,
  20. * = 0 sinon.
  21. * XEL (S) Coordonn{es locales des 4 noeuds.
  22. * BPSS (S) Matrice de passage.
  23. * NOQUAL (S) Indice de non-qualit{:
  24. * = 0 si OK,
  25. * = 1 si noeuds trop voisins,
  26. * = 3 SI NOEUDS NON COPLANAIRES.
  27. * (fourni si demande de v{rification d'{l{ment)
  28. *
  29. REAL*8 XE(3,4),XEL(3,4),BPSS(3,3)
  30. INTEGER NOQUAL,IVRF
  31. *
  32. * CONSTANTES:
  33. * -----------
  34. *
  35. * IND4 = indi\age circulaire de 1 @ 4.
  36. *
  37. INTEGER IND4(0:5)
  38. *
  39. * VARIABLES:
  40. * ----------
  41. *
  42. * QSI1 = vecteur norm{ de la m{diane allant de 4-1 vers 2-3.
  43. * ETA1 = vecteur norm{ de la m{diane allant de 1-2 vers 3-4.
  44. * X1, Y1 = vecteurs du rep}re local, dans le plan moyen de
  45. * l'{l{ment.
  46. * Z1 = vecteur du rep}re local, normal au plan moyen de
  47. * l'{l{ment.
  48. *
  49. REAL*8 QSI1(3),ETA1(3),X1(3),Y1(3),Z1(3)
  50. REAL*8 XD(3,4),U1(3),V1(3)
  51. *
  52. * MODE DE FONCTIONNEMENT:
  53. * -----------------------
  54. *
  55. * Pour le calcul du rep}re local et de la matrice de passage, on
  56. * fait une estimation du plan moyen.
  57. *
  58. * AUTEUR, DATE DE CREATION:
  59. * -------------------------
  60. *
  61. * PASCAL MANIGOT 09 JUILLET 1991
  62. *
  63. * LANGAGE:
  64. * --------
  65. *
  66. * FORTRAN77
  67. *
  68. ************************************************************************
  69. *
  70. DATA IND4/4,1,2,3,4,1/
  71. *
  72. NOQUAL=0
  73. C
  74. C VERIFICA DISTANZA MINIMA DEI PUNTI DELL ELEMENTO
  75. C CALIBRE PAR RAPPORT AU PERIMETRE
  76. *+* A virer ?
  77. IF (IVRF.NE.1) GO TO 6
  78. PP=0.D0
  79. DO 2 I=1,4
  80. II=I+1
  81. IF(II.EQ.5) II=1
  82. C1 = ABS(XE(1,I)-XE(1,II))
  83. C2 = ABS(XE(2,I)-XE(2,II))
  84. C3 = ABS(XE(3,I)-XE(3,II))
  85. C1 = C1*C1+C2*C2+C3*C3
  86. PP = PP + SQRT(C1)
  87. 2 CONTINUE
  88. DMIN=PP/50.D0
  89. DO 103 I=1,3
  90. I1=I+1
  91. DO 3 N=I1,4
  92. IF(ABS(XE(1,I)-XE(1,N)).LE.DMIN.AND.
  93. $ ABS(XE(2,I)-XE(2,N)).LE.DMIN.AND.
  94. $ ABS(XE(3,I)-XE(3,N)).LE.DMIN) THEN
  95. NOQUAL=1
  96. RETURN
  97. ENDIF
  98. 3 CONTINUE
  99. 103 CONTINUE
  100. 6 CONTINUE
  101. *
  102. * Calcul du rep}re local
  103. * ----------------------
  104. *
  105. * Y
  106. * 4 | 3
  107. * *---|---------*
  108. * | | |
  109. * | | |
  110. * | | |
  111. * | +------------X
  112. * | |
  113. * *-------------*
  114. * 1 2
  115. *
  116. *
  117. * Calcul des m{dianes:
  118. QSI1(1) = XE(1,2)+XE(1,3) - XE(1,1)-XE(1,4)
  119. QSI1(2) = XE(2,2)+XE(2,3) - XE(2,1)-XE(2,4)
  120. QSI1(3) = XE(3,2)+XE(3,3) - XE(3,1)-XE(3,4)
  121. CALL NORMER (QSI1)
  122. ETA1(1) = XE(1,3)+XE(1,4) - XE(1,1)-XE(1,2)
  123. ETA1(2) = XE(2,3)+XE(2,4) - XE(2,1)-XE(2,2)
  124. ETA1(3) = XE(3,3)+XE(3,4) - XE(3,1)-XE(3,2)
  125. CALL NORMER (ETA1)
  126. *
  127. * Normale = Normale aux 2 m{dianes.
  128. Z1(1)= QSI1(2)*ETA1(3) - QSI1(3)*ETA1(2)
  129. Z1(2)= QSI1(3)*ETA1(1) - QSI1(1)*ETA1(3)
  130. Z1(3)= QSI1(1)*ETA1(2) - QSI1(2)*ETA1(1)
  131. CALL NORMER (Z1)
  132. *
  133. * Axes dans le Plan = bissectrices des bissectrices des m{dianes
  134. * = m{dianes pour un {l{ment rectangulaire
  135. U1(1) = QSI1(1) - ETA1(1)
  136. U1(2) = QSI1(2) - ETA1(2)
  137. U1(3) = QSI1(3) - ETA1(3)
  138. CALL NORMER (U1)
  139. V1(1) = QSI1(1) + ETA1(1)
  140. V1(2) = QSI1(2) + ETA1(2)
  141. V1(3) = QSI1(3) + ETA1(3)
  142. CALL NORMER (V1)
  143. *
  144. X1(1) = U1(1) + V1(1)
  145. X1(2) = U1(2) + V1(2)
  146. X1(3) = U1(3) + V1(3)
  147. CALL NORMER (X1)
  148. *
  149. Y1(1)=X1(3)*Z1(2)-X1(2)*Z1(3)
  150. Y1(2)=X1(1)*Z1(3)-X1(3)*Z1(1)
  151. Y1(3)=X1(2)*Z1(1)-X1(1)*Z1(2)
  152. CALL NORMER (Y1)
  153. *
  154. * Coordonn{es locales
  155. * -------------------
  156. *
  157. DO 104 J=1,4
  158. DO 5 I=1,3
  159. XD(I,J)=XE(I,J)-XE(I,1)
  160. 5 CONTINUE
  161. 104 CONTINUE
  162. *
  163. DO 10 J=1,4
  164. XEL(1,J) = XD(1,J)*X1(1)+XD(2,J)*X1(2)+XD(3,J)*X1(3)
  165. XEL(2,J) = XD(1,J)*Y1(1)+XD(2,J)*Y1(2)+XD(3,J)*Y1(3)
  166. XEL(3,J) = 0.D0
  167. 10 CONTINUE
  168. *
  169. * Matrice de passage
  170. * ------------------
  171. *
  172. DO 15 I=1,3
  173. BPSS(1,I)=X1(I)
  174. BPSS(2,I)=Y1(I)
  175. BPSS(3,I)=Z1(I)
  176. 15 CONTINUE
  177. *
  178. IF(IVRF.NE.1) RETURN
  179. *
  180. * Test de plan{it{
  181. * ----------------
  182. *
  183. * Calcul des 4 "normales" locales:
  184. DO 102 K=1,4
  185. KP1 = IND4(K+1)
  186. KM1 = IND4(K-1)
  187. DO 100 J=1,3
  188. U1(J) = XE(J,KP1) - XE(J,K)
  189. V1(J) = XE(J,KM1) - XE(J,K)
  190. 100 CONTINUE
  191. XD(1,K) = U1(2)*V1(3) - U1(3)*V1(2)
  192. XD(2,K) = U1(3)*V1(1) - U1(1)*V1(3)
  193. XD(3,K) = U1(1)*V1(2) - U1(2)*V1(1)
  194. XXD = (XD(1,K)**2) + (XD(2,K)**2) + (XD(3,K)**2)
  195. XXD = SQRT(XXD)
  196. DO 101 J=1,3
  197. XD(J,K) = XD(J,K) / XXD
  198. 101 CONTINUE
  199. 102 CONTINUE
  200. *
  201. * Calcul de la non-plan{it{:
  202. COS13 = XD(1,3)*XD(1,1) + XD(2,3)*XD(2,1) + XD(3,3)*XD(3,1)
  203. COS24 = XD(1,4)*XD(1,2) + XD(2,4)*XD(2,2) + XD(3,4)*XD(3,2)
  204. IF (MIN(COS13,COS24) .LT. 0.99999) THEN
  205. * Non-plan{it{ de 0.25 degr{ ou plus:
  206. NOQUAL = 3
  207. * Rq: 0.9999 , qui {quivaut @ 1 degr{, est insuffisant.
  208. END IF
  209. *
  210. END
  211.  
  212.  
  213.  
  214.  

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