44 SUBROUTINE sort_set (LSUBMODEL ,MAP_TABLES, SET_LIST ,SET,CLAUSE)
78#include "implicit_f.inc"
84 TYPE (SET_),
DIMENSION(NSETS),
INTENT(INOUT) :: SET
85 INTEGER SET_LIST(NSETS)
90 INTEGER IGS, IGS2, ID1, ID2, IG, I, J, SET_CLAUSE_SIZE, SET_ARRAY_SIZE, NEW_SIZE, IERROR, T, ID
91 INTEGER SET_ID, ISET_TYPE, CLAUSES_MAX, SETCOL_ARRAY_SIZE
92 INTEGER OPT_D,OPT_O,OPT_G,OPT_B,OPT_A,OPT_E,OPT_I,OPT_C
95 INTEGER,
DIMENSION(:),
ALLOCATABLE :: SET_ARRAY,SET_CLAUSE_ARRAY,RESULT,SETCOL_ARRAY
96 INTEGER,
DIMENSION(:),
ALLOCATABLE :: COLLECT_LIST,IS_COLLECT
101 CHARACTER(LEN=NCHARFIELD) :: KEYSET,SET_TYPE,KEY_TYPE
102 CHARACTER(LEN=NCHARTITLE) :: TITLE,TITLE2,SET_TITLE
103 CHARACTER(LEN=NCHARKEY) :: KEYPART,KEY
110 print*,
' -----------------------------------------------'
111 print*,
' SORTING SETS'
112 print*,
' -----------------------------------------------'
116 ALLOCATE(set_array(nsets))
117 ALLOCATE(setcol_array(nsets))
118 ALLOCATE(set_clause_array(nsets))
119 ALLOCATE(is_collect(nsets))
120 ALLOCATE(result(nsets))
121 ALLOCATE(collect_list(map_tables%NSET_COLLECT))
136 set(igs)%SET_ACTIV=-1
140 IF (map_tables%NSET_COLLECT > 0)
THEN
142 igs = map_tables%ISETCOLM(1,2)
146 DO i=2,map_tables%NSET_COLLECT
147 igs = map_tables%ISETCOLM(i,2)
148 igs2 = map_tables%ISETCOLM(i-1,2)
150 id1 = map_tables%ISETCOLM(i,1)
151 id2 = map_tables%ISETCOLM(i-1,1)
162 IF(is_collect(igs) == 0) set(igs)%SET_ACTIV=1
173 . option_id = set_id,
174 . option_titr = set_title,
179 CALL hm_get_intv (
'iset_Type', iset_type,is_available,lsubmodel)
181 CALL hm_get_intv(
'clausesmax',clauses_max,is_available,lsubmodel)
201 IF(trim(keyset) ==
'SET' )
THEN
208 . j ,opt_g ,is_available ,
209 . lsubmodel,clause,0)
211 IF( set_clause_size > 0 )
THEN
215 * set_clause_array, set_clause_size ,
216 * result , new_size ,
219 set_array(1:new_size) = result(1:new_size)
220 set_array_size = new_size
223 ELSEIF (trim(keyset) ==
'SETCOL' )
THEN
225 * map_tables%ISETCOLM,map_tables%NSET_COLLECT,
226 * j,opt_g ,is_available ,
229 IF(setcol_array_size > 0 )
THEN
233 * setcol_array , setcol_array_size ,
234 * result , new_size ,
237 set_array(1:new_size) = result(1:new_size)
238 set_array_size = new_size
248 IF(trim(key) ==
'COLLECT')
THEN
250 IF (set(igs)%SET_ACTIV==1 )
THEN
252 DO j=1,map_tables%NSET_COLLECT
254 id = map_tables%ISETCOLM(j,1)
255 ig = map_tables%ISETCOLM(j,2)
257 IF (id > set_id)
EXIT
260 IF( id == set_id .AND. set(ig)%SET_ACTIV==0)
THEN
261 set_array_size = set_array_size + 1
262 set_array(set_array_size)=ig
271 WRITE(6,
'(A,I8,A,I8,A,I8)')
'SET ',set_id,
'-> ',igs,
' Number of Child list : ',set_array_size
272 WRITE(6,
'(A, 100I8)')
'Child List ',( set_array(t), t=1,set_array_size)
277 CALL set_graph_add_set ( igs, set_array, set_array_size)
284 CALL set_graph_sort ( set_list , ierror)
287 print*,
'ERROR CIRCULAR DEPENDENCY ON SET ',-ierror
293 print*,
' -----------------------------------------------'
294 WRITE(6,
'(A)')
'SORTED SETS'
295 print*,set_list(1:nsets)
297 print*,
' -----------------------------------------------'
301 CALL set_graph_clean()