Télécharger isova1.eso

Retour à la liste

Numérotation des lignes :

isova1
  1. C ISOVA1 SOURCE CB215821 21/06/10 21:15:30 11029
  2. SUBROUTINE ISOVA1(MCHELM,XISO,XTOL,IOPT,MELEME)
  3. IMPLICIT REAL*8 (A-H,O-Z)
  4. IMPLICIT INTEGER (I-N)
  5. C***********************************************************************
  6. C NOM : ISOVA1
  7. C DESCRIPTION : Construit le maillage d'une isovaleur d'un champ par
  8. C éléments
  9. C
  10. * IOPT=-1 EGIN
  11. * IOPT=0 EGAL (par défaut)
  12. * IOPT=1 EGSU
  13. C
  14. C
  15. C LANGAGE : ESOPE
  16. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  17. C mél : gounand@semt2.smts.cea.fr
  18. C***********************************************************************
  19. C VERSION : v1, 17/12/2008, version initiale
  20. C HISTORIQUE : v1, 17/12/2008, création
  21. C HISTORIQUE : 30/07/2014, sg: ajout des options EGIN EGSU
  22. C ne pas créer de noeuds et d'éléments en multiples
  23. C exemplaires.
  24. C
  25. C
  26. C HISTORIQUE :
  27. C***********************************************************************
  28.  
  29. -INC PPARAM
  30. -INC CCOPTIO
  31. -INC CCGEOME
  32. -INC CCREEL
  33. -INC SMCOORD
  34. -INC SMELEME
  35. -INC SMCHAML
  36. -INC SMLENTI
  37. *
  38. * Segments ajustables 1D contenant les noeuds des éléments créés ainsi
  39. * que leur couleur
  40. * ELEM(1) contient des POI1
  41. * ELEM(2) contient des SEG2
  42. * ELEM(3) contient des TRI3
  43. * ELEM(4) contient des TET4
  44. * ELEM(5) contient des PYR5
  45. * ELEM(6) contient des PRI6
  46. * ELEM(7) contient des QUA4
  47. *
  48. PARAMETER (NTYEL=7)
  49. SEGMENT ELEMS
  50. POINTEUR ELEM(NTYEL).MLENTI
  51. ENDSEGMENT
  52. SEGMENT MELEMS
  53. POINTEUR IPT(NTYEL).MELEME
  54. ENDSEGMENT
  55. *
  56. * Pile des nouveaux noeuds
  57. SEGMENT NEWNOD
  58. INTEGER NNOD
  59. INTEGER NOEINF(MAXNOD)
  60. INTEGER NOESUP(MAXNOD)
  61. REAL*8 COEINF(MAXNOD)
  62. ENDSEGMENT
  63. *
  64. segment newnum(nnod)
  65. *
  66. SEGMENT ICPR(nbpts)
  67. segment inode(ino)
  68. segment jelnum(imaxel,ino)
  69. segment kelnum(imaxel,ino)
  70. segment xelnum(imaxel,ino)
  71. *
  72. CHARACTER*8 MCHA
  73. INTEGER IMPR,IRET
  74. LOGICAL LFOUND
  75. *
  76. INTEGER ITYPL(NTYEL)
  77. DATA ITYPL/1,2,4,23,25,16,8/
  78. *
  79. * Executable statements
  80. *
  81. IMPR=0
  82. IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans isova1.eso'
  83. *
  84. * Initialisation des objets possiblement créés et de la pile
  85. * des nouveaux noeuds
  86. *
  87. SEGINI ELEMS
  88. DO ITYEL=1,NTYEL
  89. JG=0
  90. SEGINI MLENTI
  91. ELEM(ITYEL)=MLENTI
  92. ENDDO
  93. MAXNOD=0
  94. SEGINI NEWNOD
  95. *
  96. * Parcours du CHAMELEM
  97. *
  98. SEGACT MCHELM
  99. N1=IMACHE(/1)
  100. DO I1=1,N1
  101. ITYCHA=INFCHE(I1,6)
  102. IF (ITYCHA.NE.1) THEN
  103. MOTERR(1:16)='NOEUDS '
  104. * 291 2
  105. *Pas de MCHAML de type %m1:16 trouvé
  106. CALL ERREUR(291)
  107. RETURN
  108. ENDIF
  109. MELEME=IMACHE(I1)
  110. SEGACT MELEME
  111. MCHAML=ICHAML(I1)
  112. SEGACT MCHAML
  113. CALL ISOVA2(MELEME,MCHAML,XISO,XTOL,IOPT,NEWNOD,ELEMS,ITYPL)
  114. IF (IERR.NE.0) RETURN
  115. ENDDO
  116. *
  117. * La pile NEWNOD contient généralement des noeuds géométriquement
  118. * confondus : on les élimine. Puis, on incrémente le segment MCOORD
  119. * avec le nouveaux noeuds non géométriquement confondus
  120. * et on met à jour les piles d'éléments.
  121. *
  122. CALL ISOVA5(NEWNOD,ELEMS,ITYPL)
  123. IF (IERR.NE.0) RETURN
  124. *
  125. * Les piles d'éléments peuvent contenir des informations redondantes :
  126. * - dans une pile d'éléments, plusieurs fois le même
  127. * - dans la pile des POI1, des noeuds déjà présents dans les piles
  128. * de SEG2, TRI3, TET4, PYR5, PRI6, QUA4
  129. * - dans la pile des SEG2, des segments déjà présents dans les piles
  130. * de TRI3, TET4, PYR5, PRI6, QUA4
  131. * - dans la pile des TRI3, des faces dèjà présentes dans la pile des
  132. * TET4
  133. * On réduit les piles de manière adéquate.
  134. *
  135. CALL ISOVA6(ELEMS,ITYPL)
  136. IF (IERR.NE.0) RETURN
  137. *
  138. * Transformation des segments ajustables en MELEME
  139. *
  140. SEGINI MELEMS
  141. NSOUT=0
  142. NBSOUS=0
  143. NBREF=0
  144. DO ITYEL=1,NTYEL
  145. MLENTI=ELEM(ITYEL)
  146. JG=LECT(/1)
  147. IF (JG.GT.0) THEN
  148. NSOUT=NSOUT+1
  149. ITYP=ITYPL(ITYEL)
  150. NBNN=NBNNE(ITYP)
  151. NBNN1=NBNN+1
  152. NBELEM=JG/NBNN1
  153. SEGINI MELEME
  154. ITYPEL=ITYP
  155. DO IELEM=1,NBELEM
  156. DO INN=1,NBNN
  157. NUM(INN,IELEM)=LECT((IELEM-1)*NBNN1+INN)
  158. ENDDO
  159. ICOLOR(IELEM)=LECT(IELEM*NBNN1)
  160. ENDDO
  161. MELEMS.IPT(ITYEL)=MELEME
  162. ENDIF
  163. SEGSUP MLENTI
  164. ENDDO
  165. SEGSUP ELEMS
  166. *
  167. IF (NSOUT.EQ.1) THEN
  168. DO ITYEL=1,NTYEL
  169. IPT1=IPT(ITYEL)
  170. IF (IPT1.NE.0) THEN
  171. MELEME=IPT1
  172. ENDIF
  173. ENDDO
  174. ELSE
  175. * Traite aussi le cas maillage vide (NSOUT=0)
  176. NBNN=0
  177. NBELEM=0
  178. NBREF=0
  179. NBSOUS=NSOUT
  180. NBREF=0
  181. SEGINI MELEME
  182. ISOUS=0
  183. DO ITYEL=1,NTYEL
  184. IPT1=IPT(ITYEL)
  185. IF (IPT1.NE.0) THEN
  186. ISOUS=ISOUS+1
  187. LISOUS(ISOUS)=IPT1
  188. ENDIF
  189. ENDDO
  190. ENDIF
  191. SEGSUP MELEMS
  192. RETURN
  193. *
  194. * End of subroutine ISOVA1
  195. *
  196. END
  197.  
  198.  

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