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 :
© Cast3M 2003 - All rights reserved.
Disclaimer