$ echo "24 3 3 4 4 10" | class.x -f -po zbin # 3 minutes on 3GHz P4
...
800kR-1280 11MB 2461kIP 968kNF-12k 11_46 v17r17 f28r27 85b24 177s 177u 66n
24 3 3 4 4 10 R=798878 +1280sl hit=0 IP=2461059 NF=968137 (12612)
Writing zbin: 798878+1280sl 1181m+14s 9846494b ... # POLY_Dmax=4
Writing zbin: 798878+1308sl 1181m+14s 9847010b ... # POLY_Dmax=5
Writing zbin: 798878+1658sl 1181m+14s 9851469b ... # POLY_Dmax=6
...
Due to dimension-dependent optimizations in Find_Equations()
the path-dependent number of sl-polytopes depends on the setting
of POLY_Dmax at compilation time.
For extracting the sl-polytopes we need to convert the BIN-file:
$ class.x -pi zbin -do zzdb
Read zbin (798878poly +1280sl 9846494b) write zzdb.* (15 files) done (0s)
(for BIN-files only the h-polytopes are extracted by default).
The following has to be iterated until no sl-polytopes are left:
$ class.x -b -di zzdb |poly.x -fp| class.x -f -pi zbin -po zbinS
...
Writing zbinS: 4457+0sl 0m+0s 46913b u18 done: 0s
...
$ class.x -pi zbin -pa zbinS -po zbinHS
...
Writing zbinHS: 803335+0sl 1181m+14s 9877364b
$ class.x -b -pi zbinHS | class.x -f -pi zbinHS -sv -po zbinQ
...
Writing zbinQ: 9+0sl 0m+0s 75b
...
$ class.x -b -pi zbinQ |poly.x -fp| class.x -f -pi zbinHS -po zbinQS
...
Writing zbinQS: 9+0sl 0m+0s 75b ... # nothing new
$ class.x -b -pi zbinQ | class.x -f -pi zbinHS -sv -po zbinQQ
...
Writing zbinQQ: 4+0sl 0m+0s 31b ...
$ class.x -pi zbinQQ -ps zbinQ -po zbinQ2
...
Writing zbinQ2: 0+0sl 0m+0s 0b # nothing new / iteration finished
$ class.x -pi zbinHS -pa zbinQ -po zbinHSQ
...
Writing zbinHSQ: 803344+0sl 1181m+14s 9877439b # Final result.
Alternatively we may base the calculation on the data base zzdb
and first extract the q-polytopes (q for quotient, i.e. reflexive
polytopes on coarser lattice). The following procedure avoids
multiple updates of the h-polytopes (e.g. in case of large data):
$ class.x -b -di zzdb |poly.x -fp| class.x -f -di zzdb -po zbinS
...
Writing zbinS: 4457+0sl 0m+0s 46913b ...
$ class.x -di zzdb -sv -po zbinQ
...
Writing zbinQ: 805+0sl 0m+0s 7532b ...
$ class.x -pi zbinS -pa zbinQ -po zbinSQ
...
Writing zbinSQ: 4466+0sl 0m+0s 46988b
Check for termination of the iteration (sl is already 0):
$ class.x -b -pi zbinSQ |poly.x -fp| class.x -f -di zzdb -po zbinS2
...
Writing zbinS2: 4466+0sl 0m+0s 46988b ... # nothing new (zbinS2=zbinSQ)
$ class.x -b -pi zbinSQ | class.x -f -di zzdb -sv -po zbinQ2
...
Writing zbinQ2: 132+0sl 0m+0s 1232b ...
$ class.x -pi zbinQ2 -ps zbinSQ -po zbinQ2new
...
Writing zbinQ2new: 0+0sl 0m+0s 0b # nothing new / interation finished
$ class.x -di zzdb -pa zbinSQ
...
Writing zzdb: 803344+0sl 1181m+14s 9877439b # Same final result
$ class.x -pi zb.1 -ps zb.2 -po zb.1n # 1n=1-2=(H1=h1-A,S1=s1-C-D)
$ class.x -pi zb.2 -ps zb.1 -po zb.2n # 2n=2-1=(H2=h2-A,S2=s2-B-D)
$ class.x -pi zb.1 -ps zb.1n -po zb.1i # 1i=1-1n=(A,C+D)
$ class.x -pi zb.2 -ps zb.2n -po zb.2i # 2i=2-2n=(A,B+D)
$ class.x -pi zb.1i -ps zb.2n -po zb.AD1 # (A,D)
$ class.x -pi zb.2i -ps zb.1n -po zb.AD2 # (A,D)
$ class.x -pi zb.1i -ps zb.2i -po zb.0C # (0,C)
$ class.x -pi zb.2i -ps zb.1i -po zb.0B # (0,B)
$ class.x -pi zb.1 -pa zb.2 -po zb.12 # (H=H1+H2+A, S=S1+S2+D)
Data base operations are similarly defined: After conversion
from bin to db (direct back-conversion is not implemented):
$ class.x -pi zb.2 -do zzdb2; class.x -pi zb.1 -ds zzdb2 -po zb.1n
$ class.x -di zzdb2 -pa zb.1 -do zzdb.12