Télécharger topv4.eso

Retour à la liste

Numérotation des lignes :

topv4
  1. C TOPV4 SOURCE GOUNAND 26/01/09 21:16:02 12442
  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.4) then
  71. WRITE(IOIMP,*) ' ICAND=',ICAND,' XVCAND=',XVCAND,' XVCANS='
  72. $ ,XVCANS,' XVCANV=',XVCANV
  73. * àfaire CALL ECMAI1(imcand,0)
  74. endif
  75.  
  76. IF (IALGO.EQ.0) THEN
  77. IF (NKPVIR.GT.0) THEN
  78. IF (ABS(XVCANV).GE.XVTOL) THEN
  79. if(impr.ge.4) then
  80. WRITE(IOIMP,*) ' ICAND=',ICAND,' XVCANV=',XVCANV,'
  81. $ XVTOL=',XVTOL
  82. write(ioimp,*) ' Candidat non selectionne : ',
  83. $ 'un noeud virtuel nest plus coplanaire.'
  84. endif
  85. goto 10
  86. ENDIF
  87. ENDIF
  88. *
  89. IF (XVCAND.GT.-XVTOL.AND.XVCAND.LE.XVMIN+XVTOL) THEN
  90. IF (ABS(XVMIN-XVCAND).LE.XVTOL) THEN
  91. *
  92. NVOCOU=NVOCOU+1
  93. LOKVOL.LECT(NVOCOU)=ICAND
  94. ELSE
  95. XVMIN=XVCAND
  96. *
  97. NVOCOU=1
  98. LOKVOL.LECT(NVOCOU)=ICAND
  99. ENDIF
  100. ENDIF
  101. ELSEIF (IALGO.EQ.1) THEN
  102. * On ne retient pas les candidats qui ont des elements qui se replient
  103. * if (XVCAND.NE.XVCANS) THEN
  104. if (ABS(XVCAND-XVCANS).GE.XVTOL) THEN
  105. if(impr.ge.4) then
  106. WRITE(IOIMP,*) ' ICAND=',ICAND,' XVCAND=',XVCAND,'
  107. $ XVCANS=',XVCANS
  108. write(ioimp,*) ' Candidat non selectionne : ',
  109. $ 'il y a repliement.'
  110. endif
  111. elseif (ABS(XVCANV).GE.XVTOL) then
  112. if(impr.ge.4) then
  113. WRITE(IOIMP,*) ' ICAND=',ICAND,' XVCANV=',XVCANV,'
  114. $ XVTOL=',XVTOL
  115. write(ioimp,*) ' Candidat non selectionne : ',
  116. $ 'un noeud virtuel nest plus coplanaire.'
  117. endif
  118. else
  119. IF (ABS(XVMIN-XVCAND).LE.XVTOL) THEN
  120. NVOCOU=NVOCOU+1
  121. LOKVOL.LECT(NVOCOU)=ICAND
  122. ELSE
  123. if(impr.ge.4) then
  124. WRITE(IOIMP,*) ' ICAND=',ICAND,' XVCAND=',XVCAND,'
  125. $ XVMIN=',XVMIN
  126. write(ioimp,*) ' Candidat non selectionne : ',
  127. $ 'pas le bon volume.'
  128. endif
  129.  
  130. ENDIF
  131. endif
  132. ELSE
  133. WRITE(IOIMP,*) 'IALGO=',IALGO,' unknown'
  134. GOTO 9999
  135. ENDIF
  136. 10 CONTINUE
  137. if (impr.ge.4) then
  138. write(ioimp,*) 'Apres selection vol ncandidat=',nvocou
  139. Write(ioimp,*) (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