113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
136
137
138
139#include "implicit_f.inc"
140
141
142
143#include "com04_c.inc"
144#include "scr17_c.inc"
145
146
147
148 INTEGER JCLAUSE
149 LOGICAL :: IS_AVAILABLE
150 INTEGER, INTENT(IN), DIMENSION(NSUBMOD,2) :: ISUBMM
151 INTEGER IPART(LIPART1,NPART)
152
153 TYPE (SET_) :: CLAUSE
154 TYPE(SUBMODEL_DATA),INTENT(IN):: LSUBMODEL(*)
155
156
157
158 INTEGER I,J,IDS,NINDX,LIST_SIZE,IDS_MAX,SUBMM,PARTM,ISUB,IP,SUB_INDEX,
159 . LIST_SIZE_S,LIST_SIZE_P,LIST_SIZE_N,NODE
160 INTEGER IWORK(70000)
161
162 INTEGER, ALLOCATABLE, DIMENSION(:) :: SUBM_READ_TMP,SORTED_SUBM,INDEXS,
163 . PART_READ_TMP,SORTED_PARTS,INDEXP,TAGNODSUB,NODE_READ_TMP,SORTED_NODES,INDEXN
164
165 INTEGER SET_USRTOS
167
168
170
171 ALLOCATE(subm_read_tmp(ids_max))
172 ALLOCATE(sorted_subm(ids_max))
173
174 ALLOCATE(part_read_tmp(npart))
175 ALLOCATE(sorted_parts(npart))
176
177 ALLOCATE(indexs(2*ids_max))
178 indexs = 0
179
180 ALLOCATE(indexp(2*npart))
181 indexp = 0
182
183 ALLOCATE(tagnodsub(numnod))
184
185 ALLOCATE(node_read_tmp(numnod))
186
187
188
189
190
191 nindx = 0
192 list_size_s = 0
193 list_size_p = 0
194 list_size_n = 0
195
196
197
198 DO i=1,ids_max
200
202 IF(submm == 0)THEN
203
204 CALL ancmsg(msgid=1902,anmode=aninfo,
205 . msgtype=msgwarning,
206 . i1 = clause%SET_ID,
207 . i2=ids,
208 . c1=trim(clause%TITLE),
209 . c2='SUBMODEL')
210 ELSE
211
212 submm=isubmm(submm,2)
213
214 nindx=nindx+1
215 subm_read_tmp(nindx) = submm
216 ENDIF
217
218 ENDDO
219
220
221
222
223
224 iwork(:) = 0
225 DO i=1,nindx
226 indexs(i) = i
227 ENDDO
228 CALL my_orders(0,iwork,subm_read_tmp,indexs,nindx,1)
229
230 DO i=1,nindx
231 sorted_subm(i) = subm_read_tmp(indexs(i))
232 ENDDO
233
234 CALL remove_duplicates(sorted_subm,nindx,list_size_s)
235
236
237
238
239
240 nindx = 0
241 DO i=1,list_size_s
242 isub = sorted_subm(i)
243 DO ip=1,npart
244 sub_index = ipart(9,ip)
245 IF (isub == sub_index) THEN
246
247 partm = ip
248
249 nindx=nindx+1
250 part_read_tmp(nindx) = partm
251
252 ENDIF
253 ENDDO
254 ENDDO
255
256
257
258
259
260 iwork(:) = 0
261 DO i=1,nindx
262 indexp(i) = i
263 ENDDO
264 CALL my_orders(0,iwork,part_read_tmp,indexp,nindx,1)
265
266 DO i=1,nindx
267 sorted_parts(i) = part_read_tmp(indexp(i))
268 ENDDO
269
270 list_size_p = 0
271 CALL remove_duplicates(sorted_parts,nindx,list_size_p)
272
273
274
275
276 clause%NB_PART = list_size_p
277 ALLOCATE( clause%PART( list_size_p ) )
278
279 DO i=1,list_size_p
280 clause%PART(i) = sorted_parts(i)
281 ENDDO
282
283
284
285
286
287 CALL cpp_node_sub_tag(tagnodsub)
288
289
290 nindx = 0
291 DO i=1,list_size_s
292 isub = sorted_subm(i)
293 DO j=1,numnod
294 sub_index = tagnodsub(j)
295 IF (isub == sub_index) THEN
296
297 node = j
298
299 nindx=nindx+1
300 node_read_tmp(nindx) = node
301
302 ENDIF
303 ENDDO
304 ENDDO
305
306
307
308
309
310 ALLOCATE(sorted_nodes(nindx))
311 ALLOCATE(indexn(2*nindx))
312 indexn = 0
313
314 iwork(:) = 0
315 DO i=1,nindx
316 indexn(i) = i
317 ENDDO
318 CALL my_orders(0,iwork,node_read_tmp,indexn,nindx,1)
319
320 DO i=1,nindx
321 sorted_nodes(i) = node_read_tmp(indexn(i))
322 ENDDO
323
324 list_size_n = 0
325 CALL remove_duplicates(sorted_nodes,nindx,list_size_n)
326
327
328
329
330 clause%NB_NODE = list_size_n
331 ALLOCATE( clause%NODE( list_size_n ) )
332
333 DO i=1,list_size_n
334 clause%NODE(i) = sorted_nodes(i)
335 ENDDO
336
337
338 DEALLOCATE(subm_read_tmp)
339 DEALLOCATE(sorted_subm)
340 DEALLOCATE(indexs)
341 DEALLOCATE(part_read_tmp)
342 DEALLOCATE(sorted_parts)
343 DEALLOCATE(indexp)
344 DEALLOCATE(tagnodsub)
345 DEALLOCATE(node_read_tmp)
346 DEALLOCATE(sorted_nodes)
347 DEALLOCATE(indexn)
348
349 RETURN
subroutine hm_get_int_array_2indexes(name, ival, index1, index2, is_available, lsubmodel)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
integer function set_usrtos(iu, ipartm1, npart)
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)