34 . arg_ListFIX, arg_SizeFIX, arg_ListVAR, arg_SizeVAR ,
35 . NINTP , ICODE , IDBLE , lvl ,
77#include "implicit_f.inc"
82#include "subvolumes.inc"
87 INTEGER,
INTENT(IN) :: arg_sizefix,arg_sizevar ,nintp,icode,idble
88 INTEGER,
INTENT(INOUT) :: result(8)
89 INTEGER,
INTENT(IN) :: arg_listfix(arg_sizefix),arg_listvar(arg_sizevar)
90 LOGICAL,
INTENT(INOUT) :: bfound
91 INTEGER,
INTENT(IN) :: itask
93 INTEGER :: sizefix,sizevar
94 INTEGER :: listfix(arg_sizefix),listvar(arg_sizevar)
98 INTEGER :: i,ii,j,k,l,count,countvar,countfix,ityp,pcode,lidble
99 INTEGER :: list(32+8),sizel
101 INTEGER :: llvar(arg_sizevar,arg_sizevar-1), sizellvar
102 INTEGER :: llfix(arg_sizevar,arg_sizefix+1), sizellfix
103 INTEGER :: sizellvar_bak
105 INTEGER :: tag(12),tag_nod(8),tag_edg(12), lnbit, lcode, ldble, nnod, nedg
106 INTEGER :: idouble(12),lvl
107 INTEGER :: tag_nod_fix(8),tag_edg_fix(12),tag_nod_bak(8),tag_nod_tmp(8)
124 sizefix = arg_sizefix
125 sizevar = arg_sizevar
126 listfix = arg_listfix
127 listvar = arg_listvar
138 pcode = iabs(listfix(i))
139 ityp = getpolyhedratype(pcode)
140 countfix = countfix + c_polyh(ityp)
145 ityp = getpolyhedratype(pcode)
146 countvar = countvar + c_polyh(ityp)
148 count = countfix + countvar
155 IF(count < nintp .OR. countfix > nintp)
THEN
162 ELSEIF(countfix == nintp)
THEN
165 list(1:sizel) = (/ listfix(1:sizefix) /)
167 ibin = bcode(iabs(list(1)))
169 ibin = ior(ibin,bcode(iabs(list(i))))
177 pcode = iabs(list(i))
178 ityp = getpolyhedratype(pcode)
181 k = iabs(gcorner(j, pcode))
182 tag_edg(k) = tag_edg(k) + 1
189 IF(tag_edg(j)>2)
RETURN
190 IF(tag_edg(j)==2) ldble = ibset(ldble,12-j)
191 IF(tag_edg(j)>=1)
THEN
192 lcode = ibset(lcode,12-j)
196 IF(icode /= lcode)
RETURN
197 IF(idble /= ldble)
RETURN
200 result(1:sizel)=list(1:sizel)
202#include "lockoff.inc"
208 IF(arg_sizevar==0)
RETURN
213 sizellfix = sizefix + 1
218 llfix(ii,1:sizellfix) = (/listfix(1:sizefix), ikeep /)
220 sizellvar = sizevar-ii
221 IF(sizellvar>=1)llvar(ii,1:sizellvar) = (/listvar(ii+1:sizevar)/)
224 sizellvar = sizevar-ii
235 pcode = iabs(llfix(ii,i))
236 ityp = getpolyhedratype(pcode)
237 countfix = countfix + c_polyh(ityp)
239 IF(countfix > nintp)cycle
245 IF(pcode<0) bcompl = .true.
247 ityp = getpolyhedratype(pcode)
250 tag_nod_bak(1:8) = tag_nod_fix(1:8)
258 IF( tag_nod_tmp(j)==0)cycle
259 tag_nod_fix(j) = tag_nod_fix(j)+1
260 IF(tag_nod_fix(j) >= 2)
GOTO 50
265 tag_nod_fix(k) = tag_nod_fix(k)+1
266 IF(tag_nod_fix(k) >= 2)bool=.true.
272 tag_nod_fix(1:8) = tag_nod_bak(1:8)
280 IF( tag_nod_tmp(j)==0)cycle
281 tag_nod_fix(j) = tag_nod_fix(j)+1
282 IF(tag_nod_fix(j) >= 2)
GOTO 50
285 llfix(ii,i) = -llfix(ii,i)
289 tag_edg_fix(1:12) = 0
291 pcode = iabs(llfix(ii,i))
292 ityp = getpolyhedratype(pcode)
295 tag_edg_fix(iabs(gcorner(j,pcode))) = tag_edg_fix(iabs(gcorner(j,pcode)))+1
296 IF(tag_edg_fix(iabs(gcorner(j,pcode))) > 2)
GOTO 50
300 IF(tag_edg_fix(iabs(gcorner(j,pcode)))==2 )
THEN
301 IF(btest(idble,12-iabs(gcorner(j,pcode))) .EQV. (.false.))
GOTO 50
312 DO WHILE(i < sizellvar)
313 tag_nod(:) = tag_nod_fix
315 ityp = getpolyhedratype(pcode)
319 tag_nod(k) = tag_nod(k)+1
320 IF(tag_nod(k) >= 2)
THEN
324 sizellvar = sizellvar - 1
325 tag_nod(k) = tag_nod(k)-1
327 DO WHILE(l<=sizellvar)
328 llvar(ii,l)=llvar(ii,l+1)
341 DO WHILE(i < sizellvar)
343 tag_edg(:) = tag_edg_fix
345 ityp = getpolyhedratype(pcode)
348 k = iabs(gcorner(j,pcode))
349 tag_edg(k) = tag_edg(k)+1
351 IF(tag_edg(k) > 2 .OR. (tag_edg(k)==2 .AND. .NOT.btest(idble,12-k)))
THEN
355 sizellvar = sizellvar - 1
356 tag_edg(k) = tag_edg(k)-1
358 DO WHILE (l <= sizellvar)
359 llvar(ii,l)=llvar(ii,l+1)
373 CALL int22listcombi(itask,llfix(ii,1:sizellfix),sizellfix,llvar(ii,1:sizellvar),sizellvar,nintp