36
37
38
39
40
41
42
43
44
45
46
47
48
49
51
52
53
54#include "implicit_f.inc"
55#include "com04_c.inc"
56
57
58
59
60 INTEGER, INTENT(IN) :: NUMSPH,NISP
61 INTEGER, INTENT(IN) :: (NISP,NUMSPH)
62 INTEGER, INTENT(IN),DIMENSION(NUMELS) :: IPARTS
63 INTEGER, INTENT(IN),DIMENSION(NUMELQ) :: IPARTQ
64 INTEGER, INTENT(IN),DIMENSION(NUMELC) :: IPARTC
65 INTEGER, INTENT(IN),DIMENSION(NUMELTG):: IPARTTG
66 INTEGER, INTENT(IN),DIMENSION(NUMELR) :: IPARTR
67 INTEGER, INTENT(IN),DIMENSION(NUMELT) :: IPARTT
68 INTEGER, INTENT(IN),DIMENSION(NUMELP) :: IPARTP
69 INTEGER, INTENT(IN),DIMENSION(NUMSPH) :: IPARTSP
70
71 TYPE(INVERTGROUP_STRUCT_) :: INV_GROUP
72
73
74
75
76 INTEGER I,J,EL,NCOUNT,PART,IND,FIRST,LAST
77 INTEGER, DIMENSION (:), ALLOCATABLE :: PART_COUNT
78
79
81
83
84 ALLOCATE(part_count(npart))
85
86
87
88
89
90 part_count(1:npart)=0
91
92 DO i=1,numels
93 part=iparts(i)
94 part_count(part)=part_count(part)+1
95 ENDDO
96
97 inv_group%INDPARTS(1)=1
98 DO i=2,npart+1
99 inv_group%INDPARTS(i)=inv_group%INDPARTS(i-1)+part_count(i-1)
100 ENDDO
101
102 part_count(1:npart)=0
103 DO i=1,numels
104 part=iparts(i)
105
106 ind=inv_group%INDPARTS(part) + part_count(part)
107 inv_group%PARTS(ind)=i
108 part_count(part)=part_count(part)+1
109 ENDDO
110
111
112
113 part_count(1:npart)=0
114
115 DO i=1,numsph
116 part=ipartsp(i)
117 part_count(part)=part_count(part)+1
118 ENDDO
119
120 inv_group%INDPARTSPH(1)=1
121 DO i=2,npart+1
122 inv_group%INDPARTSPH(i)=inv_group%INDPARTSPH(i-1)+part_count(i-1)
123 ENDDO
124
125 part_count(1:npart)=0
126 DO i=1,numsph
127 part=ipartsp(i)
128 ind=inv_group%INDPARTSPH(part) + part_count(part)
129 inv_group%PARTSPH(ind)=kxsp(3,i)
130 part_count(part)=part_count(part)+1
131 ENDDO
132
133
134
135 part_count(1:npart)=0
136
137 DO i=1,numelq
138 part=ipartq(i)
139 part_count(part)=part_count(part)+1
140 ENDDO
141
142 inv_group%INDPARTQ(1)=1
143 DO i=2,npart+1
144 inv_group%INDPARTQ(i)=inv_group%INDPARTQ(i-1)+part_count(i-1)
145 ENDDO
146
147 part_count(1:npart)=0
148 DO i=1,numelq
149 part=ipartq(i)
150
151 ind=inv_group%INDPARTQ(part) + part_count(part)
152 inv_group%PARTQ(ind)=i
153 part_count(part)=part_count(part)+1
154 ENDDO
155
156
157
158 part_count(1:npart)=0
159
160 DO i=1,numelc
161 part=ipartc(i)
162 part_count(part)=part_count(part)+1
163 ENDDO
164
165 inv_group%INDPARTC(1)=1
166 DO i=2,npart+1
167 inv_group%INDPARTC(i)=inv_group%INDPARTC(i-1)+part_count(i-1)
168 ENDDO
169
170 part_count(1:npart)=0
171 DO i=1,numelc
172 part=ipartc(i)
173
174 ind=inv_group%INDPARTC(part) + part_count(part)
175 inv_group%PARTC(ind)=i
176 part_count(part)=part_count(part)+1
177 ENDDO
178
179
180
181 part_count(1:npart)=0
182
183 DO i=1,numelt
184 part=ipartt(i)
185 part_count(part)=part_count(part)+1
186 ENDDO
187
188 inv_group%INDPARTT(1)=1
189 DO i=2,npart+1
190 inv_group%INDPARTT(i)=inv_group%INDPARTT(i-1)+part_count(i-1)
191 ENDDO
192
193 part_count(1:npart)=0
194 DO i=1,numelt
195 part=ipartt(i)
196
197 ind=inv_group%INDPARTT(part) + part_count(part)
198 inv_group%PARTT(ind)=i
199 part_count(part)=part_count(part)+1
200 ENDDO
201
202
203
204 part_count(1:npart)=0
205
206 DO i=1,numelp
207 part=ipartp(i)
208 part_count(part)=part_count(part)+1
209 ENDDO
210
211 inv_group%INDPARTP(1)=1
212 DO i=2,npart+1
213 inv_group%INDPARTP(i)=inv_group%INDPARTP(i-1)+part_count(i-1)
214 ENDDO
215
216 part_count(1:npart)=0
217 DO i=1,numelp
218 part=ipartp(i)
219 ind=inv_group%INDPARTP(part) + part_count(part)
220 inv_group%PARTP(ind)=i
221 part_count(part)=part_count(part)+1
222 ENDDO
223
224
225
226 part_count(1:npart)=0
227
228 DO i=1,numeltg
229 part=iparttg(i)
230 part_count(part)=part_count(part)+1
231 ENDDO
232
233 inv_group%INDPARTTG(1)=1
234 DO i=2,npart+1
235 inv_group%INDPARTTG(i)=inv_group%INDPARTTG(i-1)+part_count(i-1)
236 ENDDO
237
238 part_count(1:npart)=0
239 DO i=1,numeltg
240 part=iparttg(i)
241
242 ind=inv_group%INDPARTTG(part) + part_count(part)
243 inv_group%PARTTG(ind)=i
244 part_count(part)=part_count(part)+1
245 ENDDO
246
247
248
249 part_count(1:npart)=0
250
251 DO i=1,numeltria
252 part=iparttg(i)
253 part_count(part)=part_count(part)+1
254 ENDDO
255
256 inv_group%INDPARTTRIA(1)=1
257 DO i=2,npart+1
258 inv_group%INDPARTTRIA(i)=inv_group%INDPARTTRIA(i-1)+part_count(i-1)
259 ENDDO
260
261 part_count(1:npart)=0
262 DO i=1,numeltria
263 part=iparttg(i)
264
265 ind=inv_group%INDPARTTRIA(part) + part_count(part)
266 inv_group%PARTTRIA(ind)=i
267 part_count(part)=part_count(part)+1
268 ENDDO
269
270
271
272
273 part_count(1:npart)=0
274
275 DO i=1,numelr
276 part=ipartr(i)
277 part_count(part)=part_count(part)+1
278 ENDDO
279
280 inv_group%INDPARTR(1)=1
281 DO i=2,npart+1
282 inv_group%INDPARTR(i)=inv_group%INDPARTR(i-1)+part_count(i-1)
283 ENDDO
284 part_count(1:npart)=0
285 DO i=1,numelr
286 part=ipartr(i)
287
288 ind=inv_group%INDPARTR(part) + part_count(part)
289 inv_group%PARTR(ind)=i
290 part_count(part)=part_count(part)+1
291 ENDDO
292
293 DEALLOCATE(part_count)
294
295 inv_group%ALREADY_DONE = .true.
296 RETURN
subroutine inverted_group_alloc(inv_group)
subroutine inverted_group_init(mode, inv_group, numsph)