Télécharger prepa.eso

Retour à la liste

Numérotation des lignes :

  1. C PREPA SOURCE CHAT 05/01/13 02:25:48 5004
  2. C****************************************************************************
  3. C****************************************************************************
  4. C*************PREPA....PREPAration des donnees*******************************
  5. C****************************************************************************
  6. C****************************************************************************
  7.  
  8.  
  9.  
  10. C Cette procedure transforme les sous espaces crees par la nested disection
  11. C pour en faire une gestion de donnees.chaque sous espace est considere
  12. C comme un point, de plus la structure de donnees est triee pour l'utilisation
  13. C plus rapide du minimum degre avec multifrontale.
  14.  
  15.  
  16.  
  17.  
  18. SUBROUTINE PREPA(IPOS,NPVOIS,NVOIS,NBENS,NUMERO,NODES,IADJ,IVOIS)
  19.  
  20. IMPLICIT INTEGER(I-N)
  21. SEGMENT NPVOIS(2*NBENS)
  22. SEGMENT NVOIS(0)
  23. INTEGER NBENS,NODES
  24. SEGMENT NUMERO(NODES)
  25. SEGMENT IPOS(0)
  26. SEGMENT IADJ(0),IVOIS(0)
  27.  
  28.  
  29. SEGMENT IENS(0)
  30. SEGMENT IPELEM(0),NPELEM(NBENS+1)
  31. SEGMENT IELEM(ND)
  32. LOGICAL BOOL
  33.  
  34.  
  35. NBENS=1
  36. SEGINI IPELEM
  37. SEGINI IENS
  38. IENS(**)=IPOS(NODES+1)
  39. NUMERO(1)=1
  40. IPELEM(**)=1
  41.  
  42.  
  43. C NUMERO(i) donne le nouveau numero du sous espace auquel appartient
  44. C le noeud i
  45. C IPELEM(i) donne le nombre de noeuds de l'element i
  46.  
  47. DO 10 I=2,NODES
  48. DO 20 J=1,NBENS
  49. IF (IPOS(I+NODES).EQ.IENS(J)) THEN
  50. NUMERO(I)=J
  51. IPELEM(J)=IPELEM(J)+1
  52. GOTO 10
  53. ENDIF
  54. 20 CONTINUE
  55. NBENS=NBENS+1
  56. NUMERO(I)=NBENS
  57. IENS(**)=IPOS(I+NODES)
  58. IPELEM(**)=1
  59. 10 CONTINUE
  60.  
  61. SEGINI NPELEM,NPVOIS,NVOIS
  62.  
  63. NPELEM(1)=1
  64. DO 50 I=2,NBENS+1
  65. NPVOIS(I-1)=1
  66. NPVOIS(I-1+NBENS)=0
  67. NPELEM(I)=NPELEM(I-1)+IPELEM(I-1)
  68. IPELEM(I-1)=0
  69. 50 CONTINUE
  70.  
  71. C NPELEM(i) pointe sur le premier noeud de l'element i dans ELEM
  72.  
  73. ND=NPELEM(NBENS+1)
  74. SEGINI IELEM
  75. DO 60 I=1,NODES
  76. DO 70 J=1,NBENS
  77. IF (IPOS(I+NODES).EQ.IENS(J)) THEN
  78. IELEM(NPELEM(J)+IPELEM(J))=I
  79. IPELEM(J)=IPELEM(J)+1
  80. GOTO 60
  81. ENDIF
  82. 70 CONTINUE
  83. 60 CONTINUE
  84.  
  85.  
  86. C construction d'une nouvelle base de donnees pour les elements,
  87. C c'est a dire on recherche les voisins de chaque element.
  88.  
  89.  
  90. DO 100 I=1,NBENS-2
  91. DO 110 J=NPELEM(I),NPELEM(I+1)-1
  92. DO 120 K=IADJ(IELEM(J)),IADJ(IELEM(J)+1)-1
  93. IF(NUMERO(IVOIS(K)).NE.I) THEN
  94. DO 130 IK=NPVOIS(I),NPVOIS(I+NBENS)
  95. IF(NUMERO(IVOIS(K)).EQ.NVOIS(IK)) GOTO 120
  96. 130 CONTINUE
  97. NPVOIS(I+NBENS)=NPVOIS(I+NBENS)+1
  98. NPVOIS(I+1)=NPVOIS(I+1)+1
  99. NVOIS(**)=NUMERO(IVOIS(K))
  100. ENDIF
  101. 120 CONTINUE
  102. 110 CONTINUE
  103. NPVOIS(I+1+NBENS)=NPVOIS(I+NBENS)
  104. NPVOIS(I+2)=NPVOIS(I+1)
  105. 100 CONTINUE
  106.  
  107. DO 140 J=NPELEM(NBENS-1),NPELEM(NBENS)-1
  108. DO 150 K=IADJ(IELEM(J)),IADJ(IELEM(J)+1)-1
  109. IF(NUMERO(IVOIS(K)).NE.(NBENS-1)) THEN
  110. DO 160 IK=NPVOIS((NBENS-1)),NPVOIS(2*NBENS-1)
  111. IF(NUMERO(IVOIS(K)).EQ.NVOIS(IK)) GOTO 150
  112. 160 CONTINUE
  113. NPVOIS(2*NBENS-1)=NPVOIS(2*NBENS-1)+1
  114. NPVOIS(NBENS)=NPVOIS(NBENS)+1
  115. NVOIS(**)=NUMERO(IVOIS(K))
  116. ENDIF
  117. 150 CONTINUE
  118. 140 CONTINUE
  119.  
  120. NPVOIS(2*NBENS)=NPVOIS(2*NBENS-1)
  121. DO 170 J=NPELEM(NBENS),NPELEM(NBENS+1)-1
  122. DO 180 K=IADJ(IELEM(J)),IADJ(IELEM(J)+1)-1
  123. IF(NUMERO(IVOIS(K)).NE.NBENS) THEN
  124. DO 190 IK=NPVOIS(NBENS),NPVOIS(2*NBENS)
  125. IF(NUMERO(IVOIS(K)).EQ.NVOIS(IK)) GOTO 180
  126. 190 CONTINUE
  127. NPVOIS(2*NBENS)=NPVOIS(2*NBENS)+1
  128. NVOIS(**)=NUMERO(IVOIS(K))
  129. ENDIF
  130. 180 CONTINUE
  131. 170 CONTINUE
  132.  
  133. C tri de cette nouvelle base de donnees NVOIS.
  134. C on range les elements voisins par ordre croissant.
  135.  
  136. DO 200 I=1,NBENS
  137. DO 210 J=1,NPVOIS(I+NBENS)-NPVOIS(I)+1
  138. BOOL=.FALSE.
  139. DO 220 K=NPVOIS(I),NPVOIS(I+NBENS)-J
  140. IF(NVOIS(K).GT.NVOIS(K+1)) THEN
  141. NGINT=NVOIS(K)
  142. NVOIS(K)=NVOIS(K+1)
  143. NVOIS(K+1)=NGINT
  144. BOOL=.TRUE.
  145. ENDIF
  146. 220 CONTINUE
  147. IF(.NOT.BOOL) GOTO 200
  148. 210 CONTINUE
  149. 200 CONTINUE
  150.  
  151. SEGSUP IPELEM,NPELEM,IELEM,IENS
  152.  
  153.  
  154. RETURN
  155. END
  156.  
  157.  

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