Télécharger elpgeo.eso

Retour à la liste

Numérotation des lignes :

elpgeo
  1. C ELPGEO SOURCE CHAT 05/01/12 23:37:32 5004
  2. SUBROUTINE ELPGEO(SBORD,SCOIN,SPOST,IPT1,IPT2,IPF0,PF0,IPP0,IPT3)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8(A-B,D-H,O-Z)
  5. IMPLICIT COMPLEX*16(C)
  6. ************************************************************************
  7. *
  8. * PLAQUES PAR EQUATION INTEGRALE:
  9. *
  10. * TRADUCTION DES CARACTERISTIQUES DU MAILLAGE EN GRANDEURS
  11. * UTILES DANS L'ALGORITHME
  12. *
  13. * CONTENU DES TABLEAUX:
  14. ***
  15. ** SBORD
  16. *
  17. * XBORD(1,I) NX N NORMALE EXTERNE AU SEGMENT DE BORD
  18. * XBORD(2,I) NY
  19. *
  20. * XBORD(3,I) TX T TANGENTE ORIENTEE AU SEGMENT DE BORD
  21. * XBORD(4,I) TY
  22. *
  23. * XBORD(5,I) AX A PREMIER POINT DU SEGMENT DE BORD
  24. * XBORD(6,I) AY
  25. *
  26. * XBORD(7,I) BX B DEUXIEME POINT DU SEGMENT DE BORD
  27. * XBORD(8,I) BY
  28. *
  29. * XBORD(9,I) PX P POINT MILIEU DU SEGMENT DE BORD
  30. * XBORD(10,I) PY
  31. *
  32. * XBORD(11,I) LAB LONGUEUR DU SEGMENT DE BORD
  33. * XBORD(12,I) CENTRE DU CERCLE
  34. * XBORD(13,I)
  35. * XBORD(14,I) TETA ANGLE AOP
  36. * XBORD(15,I) R RAYON DE COURBURE
  37. *
  38. * IBORD(K,I) NUMERO GIBI DU KEME POINT DU SEGMENT I
  39. *
  40. ***
  41. ** SCOIN
  42. *
  43. * XCOIN(1,I) AX A COIN
  44. * XCOIN(2,I) AY
  45. *
  46. * XCOIN(3,I) N1X N1 NORMALE AVANT LE COIN
  47. * XCOIN(4,I) N1Y
  48. *
  49. * XCOIN(5,I) T1X T1 TANGENTE AVANT LE COIN
  50. * XCOIN(6,I) T1Y
  51. *
  52. * XCOIN(7,I) N2X N2 NORMALE APRES LE COIN
  53. * XCOIN(8,I) N2Y
  54. *
  55. * XCOIN(9 ,I) T2X T2 TANGENTE APRES LE COIN
  56. * XCOIN(10,I) T2Y
  57. *
  58. * XCOIN(11,I) L1 LONGUEUR DES SEGMENTS AUTOUR DU COIN
  59. * XCOIN(12,I) L2 ( 2 AVANT ET 2 APRES)
  60. * XCOIN(13,I) L3
  61. * XCOIN(14,I) L4
  62. *
  63. *
  64. * ICOIN(K,I) NUMERO DES SEGMENTS AUTOUR DU COIN
  65. * ( 2 AVANT ET 2 APRES)
  66. *
  67. *
  68. ** SPOST
  69. *
  70. * PP0(1,I) X POSITION DES POINTS DE POSTTRAITEMENT
  71. * PP0(2,I) Y POSITION DES POINTS DE POSTTRAITEMENT
  72. *
  73. *
  74. ************************************************************************
  75.  
  76. -INC PPARAM
  77. -INC CCOPTIO
  78. -INC SMELEME
  79. -INC SMCOORD
  80. *
  81. SEGMENT SBORD
  82. real*8 XBORD(15,NS)
  83. integer IBORD (2 ,NS)
  84. ENDSEGMENT
  85. SEGMENT SPOST
  86. real*8 PP0(2,NP0)
  87. complex*16 CRP (NP0)
  88. complex*16 CPOST(NS4)
  89. ENDSEGMENT
  90. SEGMENT SCOIN
  91. real*8 XCOIN(14,NC)
  92. integer ICOIN(4 ,NC)
  93. ENDSEGMENT
  94. *
  95. DIMENSION PF0(2)
  96.  
  97. *
  98. *--0.A LIEU DE FORCE PONCTUELLE
  99. *
  100. PF0(1) = XCOOR (( IPF0 - 1) * (IDIM + 1) + 1)
  101. PF0(2) = XCOOR (( IPF0 - 1) * (IDIM + 1) + 2)
  102.  
  103. *
  104. *--0.B LIEU DE POSTRAITEMENT
  105. *
  106. NP0 = PP0(/2)
  107. IF (NP0 .EQ.1) THEN
  108. PP0(1,1) = XCOOR (( IPP0 - 1) * (IDIM + 1) + 1)
  109. PP0(2,1) = XCOOR (( IPP0 - 1) * (IDIM + 1) + 2)
  110.  
  111. ELSE
  112. DO 70 IP = 1,NP0
  113. IPP1 = IPT3.NUM(1,IP)
  114. PP0(1,IP) = XCOOR (( IPP1 - 1) * (IDIM + 1) + 1)
  115. PP0(2,IP) = XCOOR (( IPP1 - 1) * (IDIM + 1) + 2)
  116. 70 CONTINUE
  117. ENDIF
  118. *
  119. *--1. BOUCLE SUR LES ELEMENTS DE BORD
  120. *
  121. NS = IBORD (/2)
  122. DO 100 I=1,NS
  123. IP1=IPT1.NUM(1,I)
  124. IP2=IPT1.NUM(2,I)
  125. IP3=IPT1.NUM(3,I)
  126. IBORD(1,I) = IP1
  127. IBORD(2,I) = IP3
  128. XA = XCOOR (( IP1 - 1) * (IDIM + 1) + 1)
  129. YA = XCOOR (( IP1 - 1) * (IDIM + 1) + 2)
  130. XP = XCOOR (( IP2 - 1) * (IDIM + 1) + 1)
  131. YP = XCOOR (( IP2 - 1) * (IDIM + 1) + 2)
  132. XB = XCOOR (( IP3 - 1) * (IDIM + 1) + 1)
  133. YB = XCOOR (( IP3 - 1) * (IDIM + 1) + 2)
  134. XX =( ( XB - XA ) ** 2 + (YB - YA ) ** 2 ) ** .5
  135. XBORD(1,I) = (YB - YA )/XX
  136. XBORD(2,I) = (XA - XB )/XX
  137.  
  138. XBORD(3,I) = (XB - XA )/XX
  139. XBORD(4,I) = (YB - YA )/XX
  140.  
  141. XBORD(5,I) = XA
  142. XBORD(6,I) = YA
  143.  
  144. XBORD(7,I) = XB
  145. XBORD(8,I) = YB
  146.  
  147. XBORD(9 ,I) = XP
  148. XBORD(10,I) = YP
  149.  
  150. * ---------- CERCLE DE COURBURE
  151. XM1 = (XA + XP ) / 2
  152. YM1 = (YA + YP ) / 2
  153. XM2 = (XB + XP ) / 2
  154. YM2 = (YB + YP ) / 2
  155.  
  156. XAB = XB - XA
  157. YAB = YB - YA
  158. XAP = XP - XA
  159. YAP = YP - YA
  160. XBP = XP - XB
  161. YBP = YP - YB
  162.  
  163. S1 = XM1 * XAP + YM1 * YAP
  164. S2 = XM2 * XBP + YM2 * YBP
  165.  
  166. XDENO = XAP * YBP - XBP * YAP
  167. * ----------- SI L'ELEMENT EST TROP DROIT ON LE REND A PEINE COURBE
  168. IF ( ABS ( XDENO /(XX*XX) ) .LT. 1E-6) THEN
  169. X0 = XP - 1E3*YAB
  170. Y0 = YP + 1E3*XAB
  171. R = 1E3* XX
  172. ELSE
  173. X0 = ( S1 * YBP - S2* YAP ) / XDENO
  174. Y0 = ( S1 * XBP - S2* XAP ) / XDENO
  175. R = (( XA - X0) ** 2 + ( YA - Y0) ** 2 ) ** .5
  176. ENDIF
  177. TETA = ASIN ( XX / (2 * R ))
  178.  
  179. XBORD(11,I) = 2*TETA*R
  180. XBORD(12,I) = X0
  181. XBORD(13,I) = Y0
  182. XBORD(14,I) = TETA
  183. XBORD(15,I) = R
  184.  
  185. 100 CONTINUE
  186.  
  187.  
  188. *--2. BOUCLE SUR LES COINS
  189. *
  190. if ( ipt2 .ne. 0 ) then
  191. NC = ICOIN(/2)
  192. DO 200 I=1,NC
  193. IPC1=IPT2.NUM(1,I)
  194. DO 210 J=1,NS
  195. IPS1 = IBORD (1,J)
  196. IPS2 = IBORD (2,J)
  197. IF ( IPS2.EQ.IPC1) THEN
  198. IF ( J .EQ. 1 ) THEN
  199. ICOIN(1,I) = NS
  200. ELSE
  201. ICOIN(1,I) = J - 1
  202. ENDIF
  203. ICOIN(2,I) = J
  204. ENDIF
  205. IF ( IPS1.EQ.IPC1) THEN
  206. ICOIN(3,I) = J
  207. IF ( J .EQ. NS) THEN
  208. ICOIN(4,I) = 1
  209. ELSE
  210. ICOIN(4,I) = J + 1
  211. ENDIF
  212. ENDIF
  213. 210 CONTINUE
  214.  
  215. XA = XCOOR (( IPC1 - 1) * (IDIM + 1) + 1)
  216. YA = XCOOR (( IPC1 - 1) * (IDIM + 1) + 2)
  217.  
  218. XCOIN(1,I) = XA
  219. XCOIN(2,I) = YA
  220. * AVANT
  221. XCOIN(3,I) = XBORD (1 , ICOIN(2,I))
  222. XCOIN(4,I) = XBORD (2 , ICOIN(2,I))
  223. XCOIN(5,I) = XBORD (3 , ICOIN(2,I))
  224. XCOIN(6,I) = XBORD (4 , ICOIN(2,I))
  225. * APRES
  226. XCOIN(7,I) = XBORD (1 , ICOIN(3,I))
  227. XCOIN(8,I) = XBORD (2 , ICOIN(3,I))
  228. XCOIN(9,I) = XBORD (3 , ICOIN(3,I))
  229. XCOIN(10,I)= XBORD (4 , ICOIN(3,I))
  230. * LONGUEURS
  231. XCOIN(11,I) = XBORD (11, ICOIN(1,I))
  232. XCOIN(12,I) = XBORD (11, ICOIN(2,I))
  233. XCOIN(13,I) = XBORD (11, ICOIN(3,I))
  234. XCOIN(14,I) = XBORD (11, ICOIN(4,I))
  235.  
  236.  
  237. 200 CONTINUE
  238. endif
  239. *
  240. RETURN
  241. END
  242.  
  243.  

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