Télécharger topv4.eso

Retour à la liste

Numérotation des lignes :

topv4
  1. C TOPV4 SOURCE GOUNAND 26/06/09 21:15:20 12566
  2. SUBROUTINE TOPV4(TRAVL,IALGO,XVMIN,XVTOL,NKPVIR,impr)
  3. IMPLICIT REAL*8 (A-H,O-Z)
  4. IMPLICIT INTEGER (I-N)
  5. C***********************************************************************
  6. C NOM : TOPV4
  7. C DESCRIPTION : Amélioration d'une topologie autour d'un élément : sélection des
  8. C candidats de volume minimum mais non nul
  9. C
  10. C
  11. C
  12. C IJOB=0
  13. C Minimise le volume d'une topologie de maillage
  14. C en le maintenant supérieur à 0
  15. C IJOB=1
  16. C Minimise le volume, mais on a le droit d'ajouter des
  17. C noeuds internes
  18. C IJOB=2
  19. C La topologie de maillage est supposée être un maillage
  20. C On essaie de l'améliorer en conservant son volume
  21. C mais en augmentant sa qualité grace a l'adjonction
  22. C de noeuds internes
  23. C
  24. C
  25. C
  26. C LANGAGE : ESOPE
  27. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  28. C mél : gounand@semt2.smts.cea.fr
  29. C***********************************************************************
  30. C VERSION : v1, 05/02/2013, version initiale
  31. C HISTORIQUE : v1, 05/05/2013, création
  32. C HISTORIQUE :
  33. C HISTORIQUE :
  34. C***********************************************************************
  35. -INC PPARAM
  36. -INC CCOPTIO
  37. -INC CCREEL
  38. -INC TMATOP1
  39. POINTEUR LMCANS.MELEMX
  40. -INC SMLENTI
  41. POINTEUR LIDXCA.MLENTI
  42. POINTEUR LOKVOL.MLENTI
  43. -INC SMLREEL
  44. -INC SMCOORD
  45. POINTEUR KCOORD.MCOORD
  46. *
  47. INTEGER JCAND
  48. LOGICAL LCHANG
  49. LOGICAL LCHTOP
  50. *
  51. * Executable statements
  52. *
  53. * WRITE(IOIMP,*) 'entree topv4'
  54. *
  55. LMCANS=TRAVL.MCANS
  56. LIDXCA=TRAVL.IDXCA
  57. LOKVOL=TRAVL.OKVOL
  58. *
  59. TRAVL.NVOCOU=0
  60. JCAND=TRAVL.NCCOU
  61. DO 10 ICAND=1,JCAND
  62. * IMCAND=ITCAND(ICAND)
  63. *Erreur pour calculer le volume, il ne faut pas utiliser la métrique !
  64. *
  65. IELDEB=LIDXCA.LECT(ICAND)
  66. IELFIN=LIDXCA.LECT(ICAND+1)-1
  67. CALL VOMSI3(LMCANS,IELDEB,IELFIN,NKPVIR,XVCAND,XVCANS,XVCANV)
  68. IF (IERR.NE.0) RETURN
  69.  
  70. if (impr.ge.5) then
  71. WRITE(IOIMP,'(2(A,1X,I5),3(3X,A,1X,E10.3))')
  72. $ 'topv4 : candidat',ICAND,'nelem=',ielfin-ieldeb+1
  73. $ ,'xvcand=',XVCAND,'xvcans=',XVCANS,'xvcanv=',XVCANV
  74. * àfaire CALL ECMAI1(imcand,0)
  75. endif
  76. 128 format (A,1X,I3,1X,2A,3(1X,A,1X,E10.3))
  77. IF (IALGO.EQ.0) THEN
  78. IF (NKPVIR.GT.0) THEN
  79. IF (ABS(XVCANV).GE.XVTOL) THEN
  80. if(impr.ge.5) then
  81. write(ioimp,128)
  82. $ 'topv4 : candidat',icand,'non selectionne, '
  83. $ ,'un noeud virtuel n''est plus coplanaire :'
  84. $ ,'xvcanv=',XVCANV
  85. endif
  86. goto 10
  87. ENDIF
  88. ENDIF
  89. *
  90. IF (XVCAND.GT.-XVTOL.AND.XVCAND.LE.XVMIN+XVTOL) THEN
  91. IF (ABS(XVMIN-XVCAND).LE.XVTOL) THEN
  92. *
  93. NVOCOU=NVOCOU+1
  94. LOKVOL.LECT(NVOCOU)=ICAND
  95. ELSE
  96. XVMIN=XVCAND
  97. *
  98. NVOCOU=1
  99. LOKVOL.LECT(NVOCOU)=ICAND
  100. ENDIF
  101. ENDIF
  102. ELSEIF (IALGO.EQ.1) THEN
  103. * On ne retient pas les candidats qui ont des elements qui se replient
  104. * if (XVCAND.NE.XVCANS) THEN
  105.  
  106. IF (ABS(XVMIN-XVCAND).GE.XVTOL) THEN
  107. if(impr.ge.5) then
  108. write(ioimp,128)
  109. $ 'topv4 : candidat',icand,'non selectionne, '
  110. $ ,'pas le bon volume :'
  111. $ ,'xvcand=',XVCAND
  112. endif
  113. elseif (ABS(XVCANV).GE.XVTOL) then
  114. if(impr.ge.5) then
  115. write(ioimp,128)
  116. $ 'topv4 : candidat',icand,'non selectionne, '
  117. $ ,'un noeud virtuel n''est plus coplanaire :'
  118. $ ,'xvcanv=',XVCANV
  119. endif
  120. elseif (ABS(XVCAND-XVCANS).GE.XVTOL) THEN
  121. if(impr.ge.5) then
  122. write(ioimp,128)
  123. $ 'topv4 : candidat',icand,'non selectionne, '
  124. $ ,'il y a repliement :'
  125. $ ,'xvcand=',XVCAND,'.ne.xvcans=',XVCANS
  126. endif
  127. else
  128. NVOCOU=NVOCOU+1
  129. LOKVOL.LECT(NVOCOU)=ICAND
  130. endif
  131. ELSE
  132. WRITE(IOIMP,*) 'IALGO=',IALGO,' unknown'
  133. GOTO 9999
  134. ENDIF
  135. 10 CONTINUE
  136. if (impr.ge.4) then
  137. write(ioimp,'(A,1X,I5,1X,A,1000(I5,1X))')
  138. $ 'topv4 : apres selection volume',nvocou,'candidats='
  139. $ ,(lokvol.lect(iii),iii=1,nvocou)
  140. endif
  141. * write(ioimp,*) 'Sortie topv4'
  142. RETURN
  143. 9999 CONTINUE
  144. MOTERR(1:8)='TOPV4 '
  145. * 349 2
  146. *Problème non prévu dans le s.p. %m1:8 contactez votre assistance
  147. CALL ERREUR(349)
  148. RETURN
  149. *
  150. * End of subroutine TOPV4
  151. *
  152. END
  153.  
  154.  

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