Télécharger inver4.eso

Retour à la liste

Numérotation des lignes :

  1. C INVER4 SOURCE CB215821 16/07/05 21:15:03 9005
  2. SUBROUTINE INVER4(ipt1,ipt2,icle,mlenti)
  3. IMPLICIT REAL*8 (A-H,O-Z)
  4. IMPLICIT INTEGER (I-N)
  5. C***********************************************************************
  6. C NOM : INVER4
  7. C DESCRIPTION :
  8. C
  9. C INVERSE UN OBJET MAILLAGE ELEMENTAIRE
  10. C
  11. C IPT1 (E) MAILLAGE A INVERSER (segment ACTIF)
  12. C IPT2 (S) MAILLAGE INVERSE (segment ACTIF)
  13. C ICLE 1 : on inverse les elements et aussi l'ordre
  14. C de parcours des elements dans le maillage
  15. C Ceci est indispensable pour les lignes.
  16. C 2 : on inverse juste les elements
  17. C 3 : on inverse une partie des elements en se basant sur le
  18. C mlenti (si +1, on garde tel quel, si -1 on inverse)
  19. C
  20. C MLENTI (E) LISTE DES ELEMENTS a INVERSER (segment ACTIF)
  21. C
  22. C ipt1 et ipt2 sont des maillages elementaires (nbsous=0)
  23. C Si le type de l'element n'est pas "inversable", on retourne le
  24. C maillage d'entree tel quel.
  25. C
  26. C
  27. C LANGAGE : ESOPE
  28. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  29. C mél : gounand@semt2.smts.cea.fr
  30. C***********************************************************************
  31. C VERSION : v1, 11/05/2016, version initiale
  32. C HISTORIQUE : v1, 11/05/2016, création (inspiration invers.eso)
  33. C HISTORIQUE :
  34. C HISTORIQUE :
  35. C***********************************************************************
  36. -INC CCOPTIO
  37. -INC SMELEME
  38. -INC SMLENTI
  39. *
  40. PARAMETER (NLINVE=22)
  41. PARAMETER (NLNOIN=214)
  42. * Tableau donnant la liste des types d'elements susceptibles d'etre
  43. * traites. Ce tableau devrait etre sensiblement identique a celui de
  44. * orient.eso
  45. INTEGER LTYINV(NLINVE)
  46. * Pour chaque element susceptible d'etre traite, ce tableau donne
  47. * l'adresse dans le tableau LNOINV
  48. INTEGER LADINV(NLINVE)
  49. * Ce tableau donne les nbnne noeuds de chaque element apres
  50. * inversion. Pour chaque element, c'est une permutation
  51. INTEGER LNOINV(NLNOIN)
  52. *
  53. * SEG2 SEG3 TRI3 TRI4 TRI6 TRI7 QUA4 QUA5 QUA8 QUA9 10
  54. DATA LTYINV/ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
  55. C CUB8 CU20 PRI6 PR15 TET4 TE10 PYR5 PY13 18
  56. $ 14, 15, 16, 17, 23, 24, 25, 26,
  57. C CU27 PR21 TE15 PY19 22
  58. $ 33, 34, 35, 36/
  59. * SEG2 SEG3 TRI3 TRI4 TRI6 TRI7 QUA4 QUA5 QUA8 QUA9 10
  60. DATA LADINV/ 1, 3, 6, 9, 13, 19, 26, 30, 35, 43,
  61. C CUB8 CU20 PRI6 PR15 TET4 TE10 PYR5 PY13 18
  62. $ 52, 60, 80, 86, 101, 105, 115, 120,
  63. C CU27 PR21 TE15 PY19 22
  64. $ 133, 160, 181, 196/
  65. * SEG2 SEG3 TRI3 TRI4 TRI6 18
  66. DATA LNOINV/ 2,1, 3,2,1, 1,3,2, 1,3,2,4, 1,6,5,4,3,2,
  67. C TRI7 QUA4 QUA5 QUA8 24
  68. $ 1,6,5,4,3,2,7, 1,4,3,2, 1,4,3,2,5, 1,8,7,6,5,4,3,2,
  69. C QUA9 CUB8 17
  70. $ 1,8,7,6,5,4,3,2,9, 1,4,3,2, 5,8,7,6,
  71. C CU20 20
  72. $ 1,8,7,6,5,4,3,2, 9,12,11,10, 13,20,19,18,17,16,15,14,
  73. C PRI6 PR15 21
  74. $ 1,3,2,4,6,5, 1,6,5,4,3,2,7,9,8,10,15,14,13,12,11,
  75. C TET4 TE10 14
  76. $ 1,3,2,4, 1,6,5,4,3,2, 7,9,8, 10,
  77. C PYR5 PY13 18
  78. $ 1,4,3,2,5, 1,8,7,6,5,4,3,2, 9,12,11,10, 13,
  79. C CU27 27
  80. $ 1,8,7,6,5,4,3,2, 9,12,11,10, 13,20,19,18,17,16,15,14,
  81. $ 24,23,22,21, 25,26,27,
  82. C PR21 21
  83. $ 1,6,5,4,3,2, 7,9,8, 10,15,14,13,12,11, 18,17,16, 19,20,21,
  84. C TE15 (pas la meme logique que CU27 et PR21 pour les faces !)
  85. $ 1,6,5,4,3,2, 7,9,8, 10, 11, 14,13,12, 15,
  86. C PY19 (comme TE15)
  87. $ 1,8,7,6,5,4,3,2, 9,12,11,10, 13, 14, 18,17,16,15, 19/
  88. *
  89. * Executable statements
  90. *
  91.  
  92. C CB215821 : Ajout de controles sur les donnees d'entree
  93. IF ((ICLE .EQ. 3 .AND. MLENTI .EQ. 0) .OR.
  94. & (ICLE .NE. 3 .AND. MLENTI .NE. 0) .OR.
  95. & (ICLE .LT. 1 .OR. ICLE .GT. 3)) THEN
  96. CALL ERREUR(5)
  97. RETURN
  98. ENDIF
  99.  
  100.  
  101. * Sait-on inverser l'element ?
  102. ILINVE=0
  103. ITY=IPT1.ITYPEL
  104. DO I=1,NLINVE
  105. IF (ITY.EQ.LTYINV(I)) THEN
  106. ILINVE=I
  107. GOTO 666
  108. ENDIF
  109. ENDDO
  110. 666 CONTINUE
  111. IF (ILINVE.EQ.0) THEN
  112. IPT2=IPT1
  113. RETURN
  114. ENDIF
  115. *
  116. NBREF =IPT1.LISREF(/1)
  117. NBSOUS=0
  118. NBNN =IPT1.NUM(/1)
  119. NBELEM=IPT1.NUM(/2)
  120. IF (ICLE .EQ. 3) THEN
  121. JG=LECT(/1)
  122. IF (JG .NE. NBELEM) THEN
  123. CALL ERREUR(5)
  124. RETURN
  125. ENDIF
  126. ENDIF
  127. *
  128. C On choisit d'oublier le contour suite a l'inversion.
  129. IF (NBREF .EQ. 1) NBREF=0
  130. SEGINI,MELEME
  131. IF (NBREF .GT. 0) THEN
  132. DO I=1,NBREF
  133. LISREF(I)=IPT1.LISREF(I)
  134. ENDDO
  135. ENDIF
  136. ITYPEL=IPT1.ITYPEL
  137. IADR=LADINV(ILINVE)-1
  138. DO IL=1,NBELEM
  139. IF (ICLE.EQ.1) THEN
  140. IK=NBELEM+1-IL
  141. ELSE
  142. IK=IL
  143. ENDIF
  144.  
  145. DO IN=1,NBNN
  146. IF (ICLE .NE. 3) THEN
  147. IO=LNOINV(IADR+IN)
  148. ELSE
  149. IF (LECT(IL) .EQ. -1) THEN
  150. IO=LNOINV(IADR+IN)
  151. ELSE
  152. IO=IN
  153. ENDIF
  154. ENDIF
  155. NUM(IO,IK)=IPT1.NUM(IN,IL)
  156. ENDDO
  157. ICOLOR(IK)=IPT1.ICOLOR(IL)
  158. ENDDO
  159. IPT2=MELEME
  160. *
  161. * Normal termination
  162. *
  163. RETURN
  164. *
  165. * End of subroutine INVER4
  166. *
  167. END
  168.  
  169.  
  170.  

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