31
32
33
34
35
36
37
38#include "implicit_f.inc"
39
40
41
42#include "com04_c.inc"
43
44
45
46 INTEGER IRBY(*),SLN(*),NRSLN,NRB,NUMEL,NER
47 INTEGER RBYID,IRIG_NODE(*),CONNEC(NUMEL,*)
49 . stifn(*),stifr(*),rmstifn(*), rmstifr(*)
50
51
52
53 INTEGER ,J,II,JJ,NR,NR1,NR0,KK,NRC,IR,N,NREST,IE,
54 . NER1,NER0,IEL
55
56
57 INTEGER, DIMENSION(:), ALLOCATABLE ::
58 . IRN,INDX,INDX0,ITAG,IRE,
59 . INDXE, INDXE0, ITAGE
60
61
62
63 ALLOCATE (irn(numnod))
64 irn = 0
65 nr = 0
66 nrsln =0
67 DO i = 1, numnod
68 IF(irig_node(i) > 0) THEN
69 nr = nr + 1
70 irn(nr)= i
71 ENDIF
72 ENDDO
73
74
75
76 ALLOCATE (indx(nr),indx0(nr),itag(numnod))
77 ALLOCATE (indxe(ner),indxe0(ner),itage(ner))
78
79 itag = 0
80 itage = 0
81 indx = 0
82 indx0 = 0
83 indxe = 0
84 indxe0 = 0
85
86 nr1 = 0
87 nrb = 1
88 itage(1) = nrb
89 indxe(1) = 1
90
91 DO j=1,10
92 ie = indxe(1)
93 ii = connec(ie,j)
94 IF(ii > 0 ) THEN
95 itag(ii) = nrb
96 nr1 = nr1 + 1
97 indx(nr1) = ii
98 ENDIF
99 ENDDO
100
101 nrest = nr - nr1
102 ner1 = 0
103
104 DO i=2,ner
105 ner1 = ner1 + 1
106 indxe(ner1) = i
107 ENDDO
108
109 kk = 0
110 DO WHILE(nrest > 0 )
111 nr0 = 0
112 ner0 = 0
113 DO i=1,nr1
114 ii = indx(i)
115 DO ie =1 , ner1
116 iel = indxe(ie)
117 IF(itage(iel) == 0) THEN
118 DO j=1,10
119 IF(ii == connec(iel, j)) THEN
120 ner0 = ner0 + 1
121 indxe0(ner0) = iel
122 itage(iel) = nrb
123 ENDIF
124 ENDDO
125 ENDIF
126 ENDDO
127 ENDDO
128 nr1 = 0
129 IF(ner0 > 0) THEN
130 DO i=1,ner0
131 iel = indxe0(i)
132 DO j=1,10
133 ii= connec(iel,j)
134 IF(ii > 0) THEN
135 IF(itag(ii) == 0)THEN
136 itag(ii) = nrb
137 nr1 = nr1 + 1
138 indx(nr1) = ii
139 END IF
140 ENDIF
141 ENDDO
142 ENDDO
143 IF(nr1 > 0) THEN
144
145 ner0 = 0
146 DO ie = 1, ner1
147 iel = indxe(ie)
148 IF(itage(iel) == 0) THEN
149 ner0 = ner0 + 1
150 indxe0(ner0) = iel
151 ENDIF
152 ENDDO
153 ner1 = ner0
154 DO i=1,ner0
155 indxe(i) = indxe0(i)
156 ENDDO
157
158 nrest = nrest - nr1
159 ELSE
160 nrb = nrb + 1
161 ner0 = 0
162 DO ie =1 , ner1
163 iel = indxe(ie)
164 IF(itage(iel) == 0) THEN
165 ner0 = ner0 + 1
166 indxe0(ner0) = iel
167 ENDIF
168 ENDDO
169
170 ner1 = ner0
171 DO i=1,ner1
172 indxe(i) = indxe0(i)
173 ENDDO
174
175 iel = indxe(1)
176 nr1 = 0
177 DO j=1,10
178 iel = indxe(1)
179 ii = connec(iel,j)
180 itage(iel) = nrb
181 IF(ii > 0 ) THEN
182 itag(ii) = nrb
183 nr1 = nr1 + 1
184 indx(nr1) = ii
185 ENDIF
186 ENDDO
187
188 nrest = nrest - nr1
189 ENDIF
190 ELSE
191 nrb = nrb + 1
192
193 ner0 = 0
194 DO ie =1 , ner1
195 iel = indxe(ie)
196 IF(itage(iel) == 0) THEN
197 ner0 = ner0 + 1
198 indxe0(ner0) = iel
199 ENDIF
200 ENDDO
201
202 ner1 = ner0
203 DO i=1,ner1
204 indxe(i) = indxe0(i)
205 ENDDO
206 iel = indxe(1)
207 itage(iel) = nrb
208 nr1 = 0
209 DO j=1,10
210
211 ii = connec(iel,j)
212 IF(ii > 0 ) THEN
213 itag(ii) = nrb
214 nr1 = nr1 + 1
215 indx(nr1) = ii
216 ENDIF
217 ENDDO
218
219 nrest = nrest - nr1
220 ENDIF
221 ENDDO
222
223
224
225 kk = 0
226 DO ir =1,nrb
227 ii = 0
228 DO i=1,nr
229 n = irn(i)
230 IF(itag(n) == ir) THEN
231 ii = ii + 1
232 irby(ii + kk) = n
233 rmstifn(ii + kk) = stifn(n)
234 rmstifr(ii + kk) = stifr(n)
235 stifn(n) = em20
236 stifr(n) = em20
237 ENDIF
238 ENDDO
239 sln(ir) = ii
240 kk = kk + ii
241 nrsln = nrsln + ii
242 ENDDO
243
244 DEALLOCATE(itag,irn,indx,indx0)
245 DEALLOCATE(indxe,indxe0,itage)
246 RETURN