Télécharger inver4.eso

Retour à la liste

Numérotation des lignes :

inver4
  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.  
  37. -INC PPARAM
  38. -INC CCOPTIO
  39. -INC SMELEME
  40. -INC SMLENTI
  41. *
  42. PARAMETER (NLINVE=22)
  43. PARAMETER (NLNOIN=214)
  44. * Tableau donnant la liste des types d'elements susceptibles d'etre
  45. * traites. Ce tableau devrait etre sensiblement identique a celui de
  46. * orient.eso
  47. INTEGER LTYINV(NLINVE)
  48. * Pour chaque element susceptible d'etre traite, ce tableau donne
  49. * l'adresse dans le tableau LNOINV
  50. INTEGER LADINV(NLINVE)
  51. * Ce tableau donne les nbnne noeuds de chaque element apres
  52. * inversion. Pour chaque element, c'est une permutation
  53. INTEGER LNOINV(NLNOIN)
  54. *
  55. * SEG2 SEG3 TRI3 TRI4 TRI6 TRI7 QUA4 QUA5 QUA8 QUA9 10
  56. DATA LTYINV/ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
  57. C CUB8 CU20 PRI6 PR15 TET4 TE10 PYR5 PY13 18
  58. $ 14, 15, 16, 17, 23, 24, 25, 26,
  59. C CU27 PR21 TE15 PY19 22
  60. $ 33, 34, 35, 36/
  61. * SEG2 SEG3 TRI3 TRI4 TRI6 TRI7 QUA4 QUA5 QUA8 QUA9 10
  62. DATA LADINV/ 1, 3, 6, 9, 13, 19, 26, 30, 35, 43,
  63. C CUB8 CU20 PRI6 PR15 TET4 TE10 PYR5 PY13 18
  64. $ 52, 60, 80, 86, 101, 105, 115, 120,
  65. C CU27 PR21 TE15 PY19 22
  66. $ 133, 160, 181, 196/
  67. * SEG2 SEG3 TRI3 TRI4 TRI6 18
  68. DATA LNOINV/ 2,1, 3,2,1, 1,3,2, 1,3,2,4, 1,6,5,4,3,2,
  69. C TRI7 QUA4 QUA5 QUA8 24
  70. $ 1,6,5,4,3,2,7, 1,4,3,2, 1,4,3,2,5, 1,8,7,6,5,4,3,2,
  71. C QUA9 CUB8 17
  72. $ 1,8,7,6,5,4,3,2,9, 1,4,3,2, 5,8,7,6,
  73. C CU20 20
  74. $ 1,8,7,6,5,4,3,2, 9,12,11,10, 13,20,19,18,17,16,15,14,
  75. C PRI6 PR15 21
  76. $ 1,3,2,4,6,5, 1,6,5,4,3,2,7,9,8,10,15,14,13,12,11,
  77. C TET4 TE10 14
  78. $ 1,3,2,4, 1,6,5,4,3,2, 7,9,8, 10,
  79. C PYR5 PY13 18
  80. $ 1,4,3,2,5, 1,8,7,6,5,4,3,2, 9,12,11,10, 13,
  81. C CU27 27
  82. $ 1,8,7,6,5,4,3,2, 9,12,11,10, 13,20,19,18,17,16,15,14,
  83. $ 24,23,22,21, 25,26,27,
  84. C PR21 21
  85. $ 1,6,5,4,3,2, 7,9,8, 10,15,14,13,12,11, 18,17,16, 19,20,21,
  86. C TE15 (pas la meme logique que CU27 et PR21 pour les faces !)
  87. $ 1,6,5,4,3,2, 7,9,8, 10, 11, 14,13,12, 15,
  88. C PY19 (comme TE15)
  89. $ 1,8,7,6,5,4,3,2, 9,12,11,10, 13, 14, 18,17,16,15, 19/
  90. *
  91. * Executable statements
  92. *
  93.  
  94. C CB215821 : Ajout de controles sur les donnees d'entree
  95. IF ((ICLE .EQ. 3 .AND. MLENTI .EQ. 0) .OR.
  96. & (ICLE .NE. 3 .AND. MLENTI .NE. 0) .OR.
  97. & (ICLE .LT. 1 .OR. ICLE .GT. 3)) THEN
  98. CALL ERREUR(5)
  99. RETURN
  100. ENDIF
  101.  
  102.  
  103. * Sait-on inverser l'element ?
  104. ILINVE=0
  105. ITY=IPT1.ITYPEL
  106. DO I=1,NLINVE
  107. IF (ITY.EQ.LTYINV(I)) THEN
  108. ILINVE=I
  109. GOTO 666
  110. ENDIF
  111. ENDDO
  112. 666 CONTINUE
  113. IF (ILINVE.EQ.0) THEN
  114. IPT2=IPT1
  115. RETURN
  116. ENDIF
  117. *
  118. NBREF =IPT1.LISREF(/1)
  119. NBSOUS=0
  120. NBNN =IPT1.NUM(/1)
  121. NBELEM=IPT1.NUM(/2)
  122. IF (ICLE .EQ. 3) THEN
  123. JG=LECT(/1)
  124. IF (JG .NE. NBELEM) THEN
  125. CALL ERREUR(5)
  126. RETURN
  127. ENDIF
  128. ENDIF
  129. *
  130. C On choisit d'oublier le contour suite a l'inversion.
  131. IF (NBREF .EQ. 1) NBREF=0
  132. SEGINI,MELEME
  133. IF (NBREF .GT. 0) THEN
  134. DO I=1,NBREF
  135. LISREF(I)=IPT1.LISREF(I)
  136. ENDDO
  137. ENDIF
  138. ITYPEL=IPT1.ITYPEL
  139. IADR=LADINV(ILINVE)-1
  140. DO IL=1,NBELEM
  141. IF (ICLE.EQ.1) THEN
  142. IK=NBELEM+1-IL
  143. ELSE
  144. IK=IL
  145. ENDIF
  146.  
  147. DO IN=1,NBNN
  148. IF (ICLE .NE. 3) THEN
  149. IO=LNOINV(IADR+IN)
  150. ELSE
  151. IF (LECT(IL) .EQ. -1) THEN
  152. IO=LNOINV(IADR+IN)
  153. ELSE
  154. IO=IN
  155. ENDIF
  156. ENDIF
  157. NUM(IO,IK)=IPT1.NUM(IN,IL)
  158. ENDDO
  159. ICOLOR(IK)=IPT1.ICOLOR(IL)
  160. ENDDO
  161. IPT2=MELEME
  162. *
  163. * Normal termination
  164. *
  165. RETURN
  166. *
  167. * End of subroutine INVER4
  168. *
  169. END
  170.  
  171.  
  172.  

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