Weihong Zheng Personal Web Site

Source Code:

I. Complete set of source code for series expansions:

    I have been working on linked-cluster series expansions for more than 16 years. Here I provide a complete set of source codes to perform the linked-cluster series expansions, including:

   1. Universal programs to generate the linked-cluster data for any lattice. Sample input/output files for about 30 different lattices are included.
   2. Programs to perform series expansions for many different models, and the input matrix element files for them.
   3. Series analysis programs.
   4. Miscellaneous programs, including a program to solve the 2-particle Hamiltonian for bound states, etc.

You can download the above individual programs, or download all programs packed together into one file.

 

II. Source code for the book "Series Expansion Methods for Strongly Interacting Lattice Models". Here are also include a fortran 90 versions of the following codes:

You can download the following individual programs, or download all programs packed together into one file: Fortran 77 code, Fortran 90 code.
1. Graph Symmetry Number (symm, Fortran 77 code, Fortran 90 code):

A simple program to read in graphs from a file and compute their symmetry numbers. The input graphs are described in pair format. The symmetry number is computed by a subroutine symm which uses the "pegs in holes" algorithm.


2. Graph Generator (gen, Fortran 77 code, Fortran 90 code):

This program generates graphs without constraints, up to a maximum number of bonds and vertices, as described in Section 2.2. Subroutine symred checks for canonical labelling. The output is a list of graphs and a distribution table.

3. Graph Sorter (sort, Fortran 77 code, Fortran 90 code):

A simple program to take the output graph list from gen.f (or elsewhere) and sort in order of increasing number of bonds and number of vertices. For large lists (> 105), this program is inefficient and it is better to sort the data by writing into different files, the code is provided here.


4. Graph Counter (count, Fortran 77 code, Fortran 90 code):

This program obtains weak, strong, or free lattice constants of connected graphs on an arbitrary lattice.


5. Disconnected Graph Generator (disc, Fortran 77 code, Fortran 90 code):

A program to generate disconnected graphs up to a specific number of bonds, vertices, and components from an input list of connected graphs.

6. Graph Generator with Constraints (gensc, Fortran 77 code, Fortran 90 code):

A modified version of the graph generating program, with constraints for the simple cubic lattice (see Section 2.3).


7. Tree Graph Counter (treecnt, Fortran 77 code, Fortran 90 code):

A counting program for tree graphs using the efficient algebraic procedure discussed in Section 2.2. This version is for high-temperature (weak) lattice constants.


8. Disconnected Graph Counter (sepcnt, Fortran 77 code, Fortran 90 code):

A counting program for disconnected graphs, to obtain high-temperature lattice constants. An algebraic procedure, based on embedding into graphs with fewer vertices and components is used.


9. G-graph Generator for Free Graph Expansion (ggrafs, Fortran 77 code, Fortran 90 code):

A program to generate G graphs for the Free Graph Expansion method, as described in Section 3.3. The program "decorates" bonds of input bare graphs with multiplicities and identifies all inequivalent root points.


10. x-graph Generator for Free Graph Expansion (xgrafs, Fortran 77 code, Fortran 90 code):

A program to generate 2-rooted irreducible graphs for pair correlators/susceptibility for the Free Graph Expansion Method, as discussed in Section 3.3. The procedure is similar to that used in the ggrafs program.


11. Free Graph Expansion Program (free2, Fortran 77 code, Fortran 90 code):

Main program to implement the Free Graph Expansion method for the plane rotator (N = 2) model, as described in Section 3.3.


12. Computation of Subgraph Data (subgr, Fortran 77 code, Fortran 90 code):

A program to obtain subgraphs and their embedding factors, for use in linked-cluster perturbation expansions. The program given is for strong embeddings. The necessary modification for weak embeddings is straightforward.

13. Cluster Perturbation Theory (tim1, Fortran 77 code, Fortran 90 code):

Program to carry out matrix perturbation theory for finite clusters, following the procedure of Appendix 4. This particular program computes energy, magnetization and susceptibility series for single clusters, for the transverse field Ising model in the ordered phase, as described in Section 4.3. It can be used as a model for programs for other Hamiltonians.


14. Bulk Perturbation Series (tim2, Fortran 77 code, Fortran 90 code):

A generalization of the cluster perturbation theory program (tim1), to compute bare and reduced series for a list of clusters, and to compute series for the bulk lattice. This particular program is for the transverse field Ising model in the ordered phase. It can easily be adapted for other systems.


15. One-particle Excitation Series (tim3, Fortran 77 code, Fortran 90 code):

A program to compute the effective Hamiltonian and transition amplitudes for 1-particle excitations for individual clusters. The 2-block orthogonal transformation (TBOT) method is used, as described in Appendix 5. This particular program is for the transverse field Ising chain in the disordered phase. It can easily be modified for other systems, and generalized to include subtraction of subcluster terms and generation of bulk lattice excitation energy series.


16. Thermodynamic Perturbation Theory (tpert, Fortran 77 code, Fortran 90 code):

A program to compute a finite-T perturbation expansion for the partition function and free energy of individual clusters, for the alternating Heisenberg chain, as described in Section 8.5.1 (dimer expansion).

You can download the above individual programs, or download all programs packed together into one file: Fortran 77 code, Fortran 90 code.