CONTENT 1. Files 2. Program description 3. Compiling and running programs 4. References 1. FILES ======== 1.1 packages ------------ package (name) declaration (file) body (file) Ints ints.ads Mods mods.ads Sets1 sets1.ads sets1.ads Sets2 sets2.ads sets2.ads Reps reps.ads reps.adb Reps.Ops reps-ops.ads reps-ops.adb Reps.IO reps-io.ads reps-io.adb Lin lin.ads lin.adb Lin.Ops lin-ops.ads lin-ops.adb Lin.IO lin-io.ads lin-io.adb Lin.IO.Vinci lin-io-vinci.ads lin-io-vinci.adb Lattice lattice.ads lattice.adb Lattice.Ops lattice-ops.ads lattice-ops.adb Lattice.IO.VRML lattice-io-vrml.ads lattice-io-vrml.adb Messages messages.ads messages.adb Store store.ads store.adb Lass lass.ads lass.adb Volumes volumes.ads volumes.adb Note: Lin.IO.Vinci and Lattice.IO.VRML are not strictly needed. 1.2 Main programs ----------------- procedure (name) file comment Polymers polymers.adb generates .pol files for Polymervol Polymervol polymervol.adb computes volume of a polymer ShowEntropies showentropies.adb computes polymer entropies SumEntropies sumentropies.adb computes total entropies TestLass testlass.adb just for testing and illustration N_Balls n_balls.adb just for testing and illustration 1.3 Other procedures -------------------- procedure (name) files comment QSort qsort.ads qsort.adb generic quicksort 1.4 Other files --------------- showentropies.log-fcc output from ShowEntropies, with LP=3 showentropies.log-hcp output from ShowEntropies, with LP=2 sumentropies.log-fcc output from SumEntropies, with LP=3 sumentropies.log-hcp output from SumEntropies, with LP=2 NOTE this file 2. PROGRAM DESCRIPTION ====================== The following only describes the usage and input/output of our programs. See reference [1] for information about the goal of these computations. 2.1 Polymers The program Polymers generates the HCP polymers (if LP=2) or FCC polymers (if LP=3) of specified size NP, computes their multiplicities, and writes these data to .pol files. If the line WriteVRML(...) in polymers.adb is uncommented, then .wrl files are written as well (for viewing with a 3D viewer like freewrl). If the line WriteVinci(...) in polymers.adb is uncommented, then .ine files are written as well (for volume computations with the program vinci [3]). 2.2 Polymervol Polymervol takes as argument the name of a .pol file. Then the volume for the specified polymer is computed using the revised Lasserre method [2], and the result is saved in a .ada file. (This and other information is also shown on the standard output.) The amount of memory used by Polymervol is essentially fixed - adjust the constant Mods.Prim to your needs. The speed of such volume computations is determined mostly by how efficient volumes of sub-polytopes are stored and retrieved. Some special features of the procedure Lass.Vol are - A "forgetful" hash table is used for volume storage (as opposed e.g. to trees, as in the program vinci [3]). - For zero volumes, only the half-plane index set is stored. - Large translations are avoided. - Conversions between projections require no extra matrix inversions. 2.3 ShowEntropies ShowEntropies computes and displays the entropy correction for each HCP polymer (if LP=2) or FCC polymer (if LP=3) of size NP or less. Currently, NP cannot be larger than 5. Reason: The function Volumes.StoredVols uses the volumes produced by Polymervol. We computed and entered (by concatenating .ada files) only volumes for NP=1,2,3,4,5. 2.4 SumEntropies SumEntropies computes and displays the corrections to the total entropy due to all polymers of size up to NP (5 or less, as in ShowEntropies). 2.5 TestLass and N_Balls These are programs that were used for testing. They illustrate e.g. the usage of certain procedures and data types that are used only indirectly in the other programs. 3. COMPILING AND RUNNING PROGRAMS ================================= The programs are written in the programming language Ada95 and can be compiled e.g. with GNAT (GNu Ada Translator). Public versions of the GNAT compiler, and documentations, can be found easily on the web. To compile a program X with GNAT, simply type: gnatmake x For the program Polymervol, we added some additional arguments to optimize for speed: gnatmake -O3 -ffast-math -gnatp -gnatn polymervol -bargs -static Note: First adjust djust the constant Mods.Prim to your needs. Our computation of the volumes contained in the package Volumes was carried out on a cluster of 46 Sun Fire V20z servers [4], each containing two 2.2Ghz AMD Opteron processors and 4GB of RAM. Choosing Mods.Prim=53000011, the hash table size was about 1.8GB. The computation time for individual 5-polymers ranged between 7 and 160 hours on a single processor, with an average of 29 hours. (591 of these 5-polymers were computed.) For comparison, a 5-polymer that took 10 hours of CPU time with Polymervol seems to take several months with the program vinci [3]. 4. REFERENCES ============= [1] H. Koch, C. Radin, L. Sadun. Most Stable Structure for Hard Spheres. Preprint mp_arc 05-140 http://www.ma.utexas.edu/mp_arc-bin/mpa?yn=05-140 [2] B. Büeler, A. Enge, and K. Fukuda. Exact volume computation for polytopes: A practical study. In: Polytopes-Combinatorics and Computation, G. Kalai, and G.M. Ziegler, Eds., Birhäuser Verlag, Basel. [3] http://www.lix.polytechnique.fr/Labo/Andreas.Enge/Vinci.html [4] http://www.ma.utexas.edu/cluster/