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,S,T,ID
91 INTEGER SET_ID,ISET_TYPE,CLAUSES_MAX,ITMP,ICODE,NCOLLECT,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,
96 INTEGER,
DIMENSION(:),
ALLOCATABLE :: COLLECT_LIST,IS_COLLECT
97 INTEGER CLAUSE_OPERATOR
102 CHARACTER(LEN=NCHARFIELD) :: KEYSET,SET_TYPE,KEY_TYPE
103 CHARACTER(LEN=NCHARTITLE) :: ,TITLE2,SET_TITLE
104 CHARACTER(LEN=NCHARKEY) :: ,KEY
111 print*,
' -----------------------------------------------'
112 print*,
' SORTING SETS'
113 print*,
' -----------------------------------------------'
117 ALLOCATE(set_array(nsets))
118 ALLOCATE(setcol_array(nsets))
119 ALLOCATE(set_clause_array(nsets))
120 ALLOCATE(is_collect(nsets))
121 ALLOCATE(result(nsets))
122 ALLOCATE(collect_list(map_tables%NSET_COLLECT))
137 set(igs)%SET_ACTIV=-1
141 IF (map_tables%NSET_COLLECT > 0)
THEN
143 igs = map_tables%ISETCOLM(1,2)
147 DO i=2,map_tables%NSET_COLLECT
148 igs = map_tables%ISETCOLM(i,2)
149 igs2 = map_tables%ISETCOLM(i-1,2)
151 id1 = map_tables%ISETCOLM(i,1)
152 id2 = map_tables%ISETCOLM(i-1,1)
163 IF(is_collect(igs) == 0) set(igs)%SET_ACTIV=1
174 . option_id = set_id,
175 . option_titr = set_title,
180 CALL hm_get_intv (
'iset_Type', iset_type,is_available,lsubmodel)
182 CALL hm_get_intv(
'clausesmax',clauses_max,is_available,lsubmodel)
202 IF(trim(keyset) ==
'SET' )
THEN
208 . map_tables%ISETM , map_tables%NSET_GENERAL,
209 . j ,opt_g ,is_available ,
210 . lsubmodel,clause,0)
212 IF( set_clause_size > 0 )
THEN
216 * set_clause_array, set_clause_size ,
217 * result , new_size ,
220 set_array(1:new_size) = result(1:new_size)
221 set_array_size = new_size
224 ELSEIF (trim(keyset) ==
'SETCOL' )
THEN
226 * map_tables%ISETCOLM,map_tables%NSET_COLLECT,
227 * j,opt_g ,is_available ,
230 IF(setcol_array_size > 0 )
THEN
234 * setcol_array , setcol_array_size ,
235 * result , new_size ,
238 set_array(1:new_size) = result(1:new_size)
239 set_array_size = new_size
249 IF(trim(key) ==
'COLLECT')
THEN
251 IF (set(igs)%SET_ACTIV==1 )
THEN
253 DO j=1,map_tables%NSET_COLLECT
255 id = map_tables%ISETCOLM(j,1)
256 ig = map_tables%ISETCOLM(j,2)
258 IF (id > set_id)
EXIT
261 IF( id == set_id .AND. set(ig)%SET_ACTIV==0)
THEN
262 set_array_size = set_array_size + 1
263 set_array(set_array_size)=ig
272 WRITE(6,
'(A,I8,A,I8,A,I8)')
'SET ',set_id,
'-> ',igs,
' Number of Child list : ',set_array_size
273 WRITE(6,
'(A, 100I8)')
'Child List ',( set_array(t), t=1,set_array_size)
278 CALL set_graph_add_set ( igs, set_array, set_array_size)
285 CALL set_graph_sort ( set_list , ierror)
288 print*,
'ERROR CIRCULAR DEPENDENCY ON SET ',-ierror
294 print*,
' -----------------------------------------------'
295 WRITE(6,
'(A)')
'SORTED SETS'
296 print*,set_list(1:nsets)
298 print*,
' -----------------------------------------------'
302 CALL set_graph_clean()