42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 USE my_alloc_mod
66
67
68
69#include "implicit_f.inc"
70
71
72
73
74 INTEGER,INTENT(IN)::NSUBS
75 INTEGER,INTENT(IN)::NPART
76 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
77
78
79 TYPE (SUBSET_) , DIMENSION(NSUBS) :: SUBSET
80
81 INTEGER,INTENT(INOUT)::IPART(LIPART1,*)
82
83
84
85#include "scr17_c.inc"
86#include "units_c.inc"
87
88
89
90 INTEGER I,J,K,ID,IDV,IAD,IP,IS,ISU,NSU,NL,NC,NP,NTP,NS,
91 . CONT,NIVEAU,NIVMAX,LIST_IGR(NSUBS),UID,SUB_INDEX
92 INTEGER IFIX_TMP,TITLEN,ICHILD
93 INTEGER J10(10)
94 INTEGER, DIMENSION(NPART+NSUBS) :: BUFTMP
96 CHARACTER(LEN=NCHARTITLE) :: TITR
97 CHARACTER MESS*40
98 LOGICAL IS_AVAILABLE
99
100
101
102 INTEGER LISTCNT,SUBLVL
103
104 DATA mess/' SUBSET DEFINITION '/
105
106
107
108
109
110
111
112
113
114
115
116
117
118 is_available = .false.
119 sub_index = 0
120 uid = 0
121 isu = 0
122 buftmp(:) = 0
123
124
125
127
128
129
130 DO i=1,nsubs-1
131 titr = ''
132
133
134
135
138 . unit_id = uid,
139 . submodel_index = sub_index,
140 . option_titr = titr)
141 IF(len(titr)==0 .OR. len(trim(titr))==0 )titr(1:6)='noname'
142
143
144
145 CALL hm_get_intv(
'numberofassemblies',nsu,is_available,lsubmodel)
146 isu = isu+1
148 subset(isu)%LEVEL = 0
149 subset(isu)%PARENT = 0
150 subset(isu)%NPART = 0
151 subset(isu)%NCHILD = nsu
152 subset(isu)%TH_FLAG = 0
153 CALL my_alloc(subset(isu)%NVARTH,10)
154
155
156 subset(isu)%NVARTH(1:10) = 0
157 subset(isu)%THIAD = 0
158 CALL my_alloc(subset(isu)%CHILD,nsu)
159 DO k=1,nsu
160 subset(isu)%CHILD(k) = 0
161 ENDDO
162 subset(isu)%TITLE = titr
163
164
165
166 DO ns=1,nsu
168 subset(isu)%CHILD(ns) = ichild
169 ENDDO
170 ENDDO
171
172
173
174 list_igr(1:nsubs) = 0
175 DO isu=1,nsubs-1
176 list_igr(isu) = subset(isu)%ID
177 ENDDO
179
180
181
182 DO isu=1,nsubs-1
183 nsu = subset(isu)%NCHILD
184 DO i=1,nsu
185 id = subset(isu)%CHILD(i)
186 subset(isu)%CHILD(i) = 0
187 DO is=1,nsubs
188 idv = subset(is)%ID
190 subset(isu)%CHILD(i) = is
191 subset(is)%PARENT = isu
192 ENDIF
193 ENDDO
194 IF (subset(isu)%CHILD(i) == 0) THEN
196 . msgtype=msgwarning,
197 . anmode=aninfo,
198 . i1=subset(isu)%ID,
199 . c1=subset(isu)%TITLE,
202 ENDIF
203 ENDDO
204 ENDDO
205
206
207
208 DO isu=1,nsubs-1
209 ns = subset(isu)%NCHILD
210 nsu = 0
211 DO i=1,ns
212 id = subset(isu)%CHILD(i)
214 nsu = nsu + 1
215 subset(isu)%CHILD(nsu) =
id
216 ENDIF
217 ENDDO
218 subset(isu)%NCHILD = nsu
219 ENDDO
220
221
222
223 buftmp(:) = 0
224 titr = 'GLOBAL MODEL'
225 subset(nsubs)%TITLE = titr
226
227 subset(nsubs)%ID = 0
228 subset(nsubs)%LEVEL = 0
229 subset(nsubs)%PARENT = 0
230 subset(nsubs)%NCHILD = 0
231 subset(nsubs)%NPART = 0
232 subset(nsubs)%TH_FLAG = 0
233 CALL my_alloc(subset(nsubs)%NVARTH,10)
234
235 subset(nsubs)%NVARTH(1:10) = 0
236 subset(nsubs)%THIAD = 0
237
238 nsu = 0
239 DO isu=1,nsubs-1
240 IF (subset(isu)%PARENT == 0) THEN
241 subset(isu)%PARENT = nsubs
242 nsu = nsu+1
243 buftmp(nsu) = isu
244 ENDIF
245 ENDDO
246
247 subset(nsubs)%NCHILD = nsu
248 CALL my_alloc(subset(nsubs)%CHILD,nsu)
249 DO i=1,nsu
250 subset(nsubs)%CHILD(i) = buftmp(i)
251 ENDDO
252
253
254
255
256 DO isu=1,nsubs
258 buftmp(:) = 0
259 np = 0
260 DO k=1,npart
261 IF (
id == ipart(7,k))
THEN
262 ipart(3,k) = isu
263 np = np+1
264 buftmp(np) = k
265 ENDIF
266 ENDDO
267 subset
268 CALL my_alloc(subset(isu)%PART,np)
269 DO k=1,np
270 subset(isu)%PART(k) = buftmp(k)
271 ENDDO
272 ENDDO
273
274
275
276 DO k=1,npart
277 IF (ipartTHEN
278 CALL fretitl2(titr,ipart(lipart1-ltitr+1,k),ltitr)
280 . msgtype=msgwarning,
281 . anmode=aninfo,
282 . i1=ipart(4,k),
283 . c1=titr,
284 . i2=ipart(7,k))
285 ENDIF
286 ENDDO
287
288
289
290 nivmax = 0
291 cont = 1
292 DO WHILE (cont == 1)
293 cont = 0
294 DO isu=1,nsubs
295 id = subset(isu)%PARENT
297 niveau = subset(
id)%LEVEL + 1
298 IF (subset(isu)%LEVEL /= niveau) THEN
299 subset(isu)%LEVEL = niveau
300 nivmax =
max(nivmax,niveau)
301 cont = 1
302 ENDIF
303 ENDIF
304 ENDDO
305 ENDDO
306
307
308
309 DO isu = 1,nsubs
310 buftmp(:) = 0
311 ntp = 0
312 nc = subset(isu)%NCHILD
313 IF (nc == 0) nc = subset(isu)%NPART
314 DO WHILE (nc > 0)
315 nc =
sublvl(subset,nsubs,isu,ntp,buftmp)
316 ENDDO
317 subset(isu)%NTPART = ntp
318 CALL my_alloc(subset(isu)%TPART,ntp)
319 DO i=1,ntp
320 subset(isu)%TPART(i) = buftmp(i)
321 ENDDO
322 ENDDO
323
324
325
326 WRITE(iout,'(//A)')' HIERARCHICAL SUBSET ORGANIZATION'
327 WRITE(iout,'(A//)')' --------------------------------'
328 iad = 1
329 buftmp(:) = 0
330 DO isu=1,nsubs
331 IF (subset(isu)%LEVEL == 0) THEN
332 buftmp(iad) = isu
333 DO WHILE (iad > 0)
334 i = buftmp(iad)
335 nsu = subset(i)%NCHILD
336 iad = iad - 1
337 CALL ecrsub2(subset,nsubs,i,ipart,nivmax)
338 IF (nsu > 0) THEN
339 DO k = nsu,1,-1
340 iad = iad+1
341 buftmp(iad) = subset(i)%CHILD(k)
342 ENDDO
343 ENDIF
344 ENDDO
345 ENDIF
346 ENDDO
347
348 RETURN
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
recursive integer function sublvl(subset, nsubs, isu, np, buftmp)
subroutine ecrsub2(subset, nsubs, isu, ipart, nivmax)
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)
subroutine udouble_igr(list, nlist, mess, ir, rlist)