Télécharger sens1.eso

Retour à la liste

Numérotation des lignes :

sens1
  1. C SENS1 SOURCE CB215821 23/01/25 21:15:34 11573
  2. SUBROUTINE SENS1
  3. c
  4. c sous routine castem 2000
  5. c
  6. c utilisée pour l'opérateur SENS
  7. c determine dans quel sens tourne un contour en 2 D
  8. c
  9. c synthaxe de l'opérateur TAB2 = SENS TAB1 ;
  10. c
  11. c tab1 est issue de CCON et contient des maillages indicé par
  12. c des entiers. ces maillages doivent etre des contours fermes
  13. c orientes.
  14. c
  15. c tab2 contient des entiers (+/-1) indice par les meme entiers
  16. c +1 indique que le contour est dans le sens trigonometrique
  17. c -1 indique que le contour est dans le sens inverse
  18. c
  19. c langage Fortran 77 + esope
  20. c auteur A de Gayffier
  21. c
  22. IMPLICIT INTEGER(I-N)
  23. IMPLICIT REAL*8 (A-H,O-Z)
  24. CHARACTER CHARI,CHARR
  25. LOGICAL LOGII,LOGIR
  26. c
  27. -INC CCREEL
  28. -INC SMTABLE
  29. -INC SMELEME
  30.  
  31. -INC PPARAM
  32. -INC CCOPTIO
  33. -INC SMCOORD
  34. c
  35. c declaration du segment INCR
  36. c
  37. SEGMENT INCR
  38. INTEGER NUM0(NBELEM)
  39. ENDSEGMENT
  40. c
  41. IOBIN=0
  42. c operateur disponible seulement den dimension 2
  43. IF (IDIM .NE. 2 ) THEN
  44. CALL ERREUR(19)
  45. RETURN
  46. ENDIF
  47. c
  48. CALL LIROBJ ('TABLE',MTABLE,1,IRET)
  49. IF (IRET .EQ. 0) RETURN
  50. SEGACT ,MTABLE
  51. c
  52. c compte combien d'indice entier
  53. NBENT = 0
  54. DO 5 I=1,MTABTI(/2)
  55. IF (MTABTI(I) .EQ. 'ENTIER' ) NBENT = NBENT +1
  56. 5 CONTINUE
  57. c
  58. M = 0
  59. SEGINI ,MTAB1
  60. c
  61. c boucle sur tous les contours
  62. c
  63. SEGACT,MCOORD
  64. DO 10 INDTAB=1,NBENT
  65. c
  66. CALL ACCTAB(MTABLE,'ENTIER',INDTAB,XVALI,CHARI,LOGII,0,
  67. & 'MAILLAGE',IVALR,XVALR,CHARR,LOGIR,IRETR)
  68. IF (IERR .NE. 0 ) RETURN
  69. c
  70. c
  71. MELEME = IRETR
  72. SEGACT MELEME
  73. c
  74. c quelques controles sur le maillage
  75. c
  76. IF (LISOUS(/1) .NE. 0 .OR. (ITYPEL .NE. 2
  77. & .AND. ITYPEL .NE. 3)) THEN
  78. CALL ERREUR(26)
  79. SEGDES MELEME
  80. SEGSUP MTAB1
  81. RETURN
  82. ENDIF
  83. c
  84. c initialisation de la boucle sur les segments2
  85. c
  86. NBELEM = NUM(/2)
  87. SEGINI INCR
  88. I = 1
  89. IF (ITYPEL .EQ. 2 ) THEN
  90. I1 = NUM(1,1)
  91. I2 = NUM(2,1)
  92. ELSE IF ( ITYPEL .EQ. 3 ) THEN
  93. I1 = NUM(1,1)
  94. I2 = NUM(3,1)
  95. ENDIF
  96. STHETA = 0.D0
  97. ISEG2 = 0
  98. c
  99. c Initialisation du tableau NUM0
  100. c
  101. DO 9 J=1,NBELEM
  102. NUM0(J) = NUM(1,J)
  103. 9 CONTINUE
  104. c
  105. c debut de la boucle sur les segments seg2 du maillage
  106. c
  107. 15 CONTINUE
  108. c
  109. DO 20 J=1,NBELEM
  110. IF ( NUM0(J) .EQ. I2 ) THEN
  111. c on a trouve le segment suivant
  112. ISEG2 = J
  113. NUM0(J) = 0 ;
  114. IF (ITYPEL .EQ. 2 ) THEN
  115. I3 = NUM(2,J)
  116. ELSE IF ( ITYPEL .EQ. 3 ) THEN
  117. I3 = NUM(3,J)
  118. ENDIF
  119. GOTO 30
  120. ENDIF
  121. 20 CONTINUE
  122. c
  123. c on n'est pas parvenu a boucler le contour
  124. c
  125. c
  126. c dans le cas axisymmetrique le contour n'est pas necessairement fermé
  127. c
  128. IF (IFOUR .EQ. 0) THEN
  129. c
  130. c on verifie que le point est sur l'axe OZ
  131. c
  132. XI1 = ABS(XCOOR((I2-1)*(IDIM+1) +1 ))
  133. DENS = MAX(XCOOR((I2-1)*(IDIM+1)),1.D-10)
  134. c print *,'i2=',i2,'r=',xi1,'dens=',dens
  135. IF ( XI1 .GT. (DENS/100.d0)) GOTO 25
  136. c
  137. c on cherche l'autre point sur l'axe
  138. c
  139. DO 23 J=1,NBELEM
  140. c
  141. XI2 =ABS(XCOOR((NUM(1,J)-1)*(IDIM+1) +1 ))
  142. DENS =MAX(XCOOR((NUM(1,J)-1)*(IDIM+1)),1.D-10)
  143. c
  144. IF (XI2.LT.(DENS/100.d0)) THEN
  145. I3 = NUM(1,J)
  146. * print *, 'on a trouvé le second point',i3,'r=',xi2
  147. GOTO 30
  148. ENDIF
  149. 23 CONTINUE
  150. * print *, 'pas trouvé le second point sur l axe'
  151. c
  152. ENDIF
  153. C
  154. 25 CONTINUE
  155. c
  156. c gestion de l'erreur contour non ferme
  157. c
  158. CALL ERREUR(28)
  159. SEGSUP MTAB1
  160. SEGDES MELEME,MTABLE
  161. RETURN
  162. c
  163. 30 CONTINUE
  164. c
  165. c I sert a compter le nombre de segments pris en compte
  166. c
  167. I = I + 1
  168. c
  169. c calcul de l'angle entre les deux segments
  170. c
  171. XI1 = XCOOR((I1-1)*(IDIM+1) +1 )
  172. YI1 = XCOOR((I1-1)*(IDIM+1) +2 )
  173. XI2 = XCOOR((I2-1)*(IDIM+1) +1 )
  174. YI2 = XCOOR((I2-1)*(IDIM+1) +2 )
  175. XI3 = XCOOR((I3-1)*(IDIM+1) +1 )
  176. YI3 = XCOOR((I3-1)*(IDIM+1) +2 )
  177. X12 = XI2-XI1
  178. Y12 = YI2-YI1
  179. X23 = XI3-XI2
  180. Y23 = YI3-YI2
  181. D12 = SQRT( X12*X12+Y12*Y12)
  182. D23 = SQRT ( X23*X23+Y23*Y23)
  183. SITHET = ( X12*Y23 - X23*Y12 ) / D12 / D23
  184. COTHET = ( X12*X23 + Y12*Y23 ) / D12 / D23
  185. IF ( (ABS(SITHET)) .LT. 1.D-10 ) THEN
  186. THETA = 0.D0
  187. ELSE
  188. IF ( ABS(SITHET) .GT. 1.D0 ) THEN
  189. THETA = SIGN((XPI/2.D0),SITHET)
  190. ELSE
  191. THETA = ASIN( SITHET )
  192. ENDIF
  193. ENDIF
  194. IF (COTHET.LT.0.D0 .AND. SITHET.GT.0.D0) THETA=XPI-THETA
  195. IF (COTHET.LT.0.D0 .AND. SITHET.LT.0.D0) THETA=-XPI-THETA
  196. STHETA = STHETA + THETA
  197. I1 = I2
  198. I2 = I3
  199. c
  200. c recherche du point suivant si on n'est pas parvenu
  201. c au point initial
  202. c
  203. IF ( ISEG2 .NE. 1 ) GOTO 15
  204. c
  205. c on controle que tous les segments ont ete examinés
  206. c
  207. IF (I.NE.(NBELEM+1) .AND. I.NE.(NBELEM+2)) THEN
  208. c nbelem+2 correspond au cas axis avec un contour non fermé
  209. CALL ERREUR(28)
  210. SEGSUP MTAB1
  211. SEGDES MELEME,MTABLE
  212. RETURN
  213. ENDIF
  214. c
  215. c determination du sens du contour la somme vaut +/- XPI
  216. c
  217. IF ( ABS(STHETA - XPI*2.D0 ) .LT. 1.D-3 ) THEN
  218. IVALR = 1
  219. ELSE IF ( ABS(STHETA + XPI*2.D0 ) .LT. 1.D-3 ) THEN
  220. IVALR = -1
  221. ELSE
  222. IVALR = 0
  223. c il y un problème: c'est sur!
  224. c print *, 'somme des angles en radian',stheta
  225. INTERR(1)=INDTAB
  226. CALL ERREUR(718)
  227. ENDIF
  228. c
  229. c ecriture dans la table du resultat
  230. c
  231. CALL ECCTAB(MTAB1,'ENTIER',INDTAB,XVALI,CHARI,LOGII,IOBIN,
  232. & 'ENTIER',IVALR,XVALR,CHARR,LOGIR,IRETR)
  233. SEGDES MELEME
  234. SEGSUP INCR
  235. c
  236. 10 CONTINUE
  237. SEGDES,MCOORD
  238. c
  239. c il n'y a plus rien dans la table
  240. CALL ECROBJ('TABLE',MTAB1)
  241. SEGDES MTABLE,MTAB1
  242. RETURN
  243. c
  244. END
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  

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