Télécharger deda.eso

Retour à la liste

Numérotation des lignes :

deda
  1. C DEDA SOURCE CB215821 23/01/25 21:15:10 11573
  2. SUBROUTINE DEDA
  3. C ******************************************************************
  4. C
  5. C LOG1 = DEDA PO1 MAIL1 (FLO1) ;
  6. C
  7. C OBJET :
  8. C _______
  9. C
  10. C L'OPERATEUR DEDA DETERMINE SI UN POINT PO1 EST SITUE A L'INTERIEUR
  11. C DU MAILLAGE D'UN CONTOUR (EN 2D) OU D'UNE ENVELOPPE (EN 3D)
  12. C
  13. C DATE : 25.07.14
  14. C ______
  15. C
  16. C AUTEURS : F. DI PAOLA
  17. C _________
  18. C
  19. C ******************************************************************
  20. IMPLICIT INTEGER(I-N)
  21. IMPLICIT REAL*8 (A-H,O-Z)
  22. C
  23.  
  24. -INC PPARAM
  25. -INC CCOPTIO
  26. -INC SMCOORD
  27. -INC SMELEME
  28. -INC CCGEOME
  29. -INC SMLENTI
  30. C
  31. C Un logique, resultat du programme
  32. LOGICAL BOOL1
  33. C
  34. C Une liste d'entiers ca sert toujours
  35. POINTEUR LV1.MLENTI
  36. C
  37. C Une structure pour decrire les elements adjacents du maillage
  38. C contour/enveloppe
  39. SEGMENT,MADJACEN
  40. INTEGER LEAC(NBL1,IDIM,2)
  41. ENDSEGMENT
  42. POINTEUR ILEA1.MADJACEN
  43. C
  44. C
  45. C ===============================
  46. C --- 1.LECTURE DES DONNEES ET TESTS ---
  47. C ===============================
  48. C
  49. C Acquisition du point
  50. CALL LIROBJ('POINT',NP1,1,IRETOU)
  51. IF (IERR.NE.0) THEN
  52. C ON A PAS TROUVE LE POINT
  53. CALL ERREUR(504)
  54. GOTO 999
  55. ENDIF
  56. C
  57. C Acquisition du maillage
  58. CALL LIROBJ('MAILLAGE',IPT1,1,IRETOU)
  59. IF (IERR.NE.0) THEN
  60. C ON A PAS TROUVE LE MAILLAGE
  61. CALL ERREUR(503)
  62. GOTO 999
  63. ENDIF
  64. SEGACT IPT1
  65. NBSZ=IPT1.LISOUS(/1)
  66. NTYP=IPT1.ITYPEL
  67. C
  68. C Acquisition d'une tolerance pour la mesure de l'angle solide
  69. C (facultative, 1E-9 par defaut)
  70. CALL LIRREE(XTOL,0,IRETOU)
  71. IF (IRETOU.EQ.0) XTOL=1D-9
  72. C
  73. C ====================================
  74. C --- 2.TESTS SUR LA VALIDITE DES DONNEES ---
  75. C ET AJUSTEMENTS EVENTUELS
  76. C ====================================
  77. C
  78. C Valeur de la dimension
  79. IF ((IDIM.LT.2).OR.(IDIM.GT.3)) THEN
  80. INTERR(1)=IDIM
  81. C FONCTION INDISPONIBLE EN DIMENSION %I1
  82. SEGDES IPT1
  83. CALL ERREUR(709)
  84. GOTO 999
  85. ENDIF
  86. C
  87. C Maillage elementaire
  88. IF (NBSZ.NE.0) THEN
  89. C OPERATION INTERDITE SUR UN OBJET COMPLEXE
  90. SEGDES IPT1
  91. CALL ERREUR(25)
  92. GOTO 999
  93. ENDIF
  94. C
  95. C Type d'elements
  96. IF (((IDIM.EQ.2).AND.(NTYP.NE.2)).OR.
  97. & ((IDIM.EQ.3).AND.(NTYP.NE.4))) THEN
  98. C TYPE D'ELEMENTS INCORRECT
  99. SEGDES IPT1
  100. CALL ERREUR(16)
  101. GOTO 999
  102. ENDIF
  103. C
  104. C Orientation des elements du maillage (appel a VERSENS)
  105. CALL ECROBJ('MAILLAGE',IPT1)
  106. CALL VERSEN
  107. CALL LIROBJ('MAILLAGE',IPT1,1,IRETOU)
  108. IF (IERR.NE.0) THEN
  109. GOTO 999
  110. ENDIF
  111. SEGACT IPT1
  112. C
  113. C Le maillage doit etre ferme, on le verifie en construisant la
  114. C table des elements adjacents
  115. C Le tableau ILEA1.LEAC comporte 3 dimensions : ILEA1.LEAC(I,J,K)
  116. C dimension 1 : I est le numero de l'element du contour/enveloppe
  117. C dimension 2 : J est le numero du noeud de l'element I
  118. C dimension 3 : K=1 --> renvoie le numero de l'element adjacent a
  119. C l'element I par rapport au noeud J
  120. C K=2 --> renvoie le numero du noeud de l'element
  121. C adjacent situe en vis a vis du noeud J
  122. C On a donc les symetries suivantes :
  123. C si ILEA1.LEAC(I,J,1) = I' et ILEA1.LEAC(I,J,2) = J'
  124. C alors ILEA1.LEAC(I',J',1) = I et ILEA1.LEAC(I',J',2) = J
  125. C
  126. C Initialisation de la table des elements adjacents
  127. NBL1=IPT1.NUM(/2)
  128. SEGINI ILEA1
  129. JG=IPT1.NUM(/1)
  130. SEGINI LV1
  131. C Nombre de noeuds en commun a trouver pour adjacence
  132. NNREF=IPT1.NUM(/1)-1
  133. C Somme des numeros des noeuds
  134. IF (IDIM.EQ.2) THEN
  135. NSREF=1+2
  136. ELSE
  137. NSREF=1+2+3
  138. ENDIF
  139. C Boucle sur les elements de IPT1
  140. DO I=1,IPT1.NUM(/2)
  141. C Numeros des noeuds de l'element I
  142. DO J=1,IPT1.NUM(/1)
  143. LV1.LECT(J)=IPT1.NUM(J,I)
  144. ENDDO
  145. C On va detrminer tous les voisins de l'element I
  146. C Deuxieme boucle sur les elements de numero superieurs a I
  147. DO II=I+1,IPT1.NUM(/2)
  148. NNC=0
  149. NSOMA=0
  150. NSOMB=0
  151. C Test si l'element II a des noeuds communs a l'element I
  152. DO J=1,IPT1.NUM(/1)
  153. NTEST=IPT1.NUM(J,II)
  154. DO K=1,IPT1.NUM(/1)
  155. IF (NTEST.EQ.LV1.LECT(K)) THEN
  156. NNC=NNC+1
  157. NSOMA=NSOMA+K
  158. NSOMB=NSOMB+J
  159. ENDIF
  160. ENDDO
  161. ENDDO
  162. C Si l'element II est bien adjacent a l'element I
  163. IF (NNC.EQ.NNREF) THEN
  164. NI=NSREF-NSOMA
  165. NII=NSREF-NSOMB
  166. ILEA1.LEAC(I,NI,1)=II
  167. ILEA1.LEAC(I,NI,2)=NII
  168. ILEA1.LEAC(II,NII,1)=I
  169. ILEA1.LEAC(II,NII,2)=NI
  170. ENDIF
  171. ENDDO
  172. C Test si on a bien trouve un voisin pour chaque cote de I
  173. DO J=1,IPT1.NUM(/1)
  174. IF (ILEA1.LEAC(I,J,1).EQ.0) THEN
  175. C Le contour n'est pas reconnu ferme
  176. SEGDES IPT1
  177. SEGSUP ILEA1
  178. CALL ERREUR(28)
  179. GOTO 999
  180. ENDIF
  181. ENDDO
  182. ENDDO
  183. C
  184. C
  185. C ==========================
  186. C --- 3.REALISATION DE LA TACHE ---
  187. C ==========================
  188. C
  189. SEGACT,MCOORD
  190. CALL DEDANS(NP1,IPT1,XTOL,BOOL1)
  191. SEGDES,MCOORD
  192.  
  193. IF (IERR.EQ.0) CALL ECRLOG(BOOL1)
  194. GOTO 999
  195. C
  196. 999 END
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  

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