README (5071B)
1 1. INTRODUCTION 2 3 TEBDOL [1] is a program for calculating time evolution of a system of 4 ultracold atoms in one-dimensional and two-dimensional optical 5 lattices. It utilizes the time-evolving block decimation algorithm 6 (TEBD). One-dimensional version is parallelized using MPI. 7 8 2. INSTALLATION 9 10 TEBDOL is written in Common Lisp and has the following dependencies: 11 12 * Steel Bank Common Lisp (SBCL) 13 14 SBCL is an ANSI Common Lisp compiler. Source and binaries are 15 available at http://sbcl.org/. TEBDOL was tested with version 1.2.4. 16 17 * Basic Linear Algebra Subprograms (BLAS) and Linear Algebra Package 18 (LAPACK) 19 20 BLAS and LAPACK libraries provide vector and matrix routines. There 21 are several vendor-provided implementations available. TEBDOL was 22 tested with OpenBLAS 0.2.12, which can be download at 23 http://www.openblas.net/. It also works with Intel MKL. 24 25 * Message Passing Interface (MPI) 26 27 MPI provides support for parallelization. TEBDOL was tested with 28 version 1.6.5. 29 30 * GNU Scientific Library (GSL) 31 32 GSL is used for random number generation. TEBDOL was tested with 33 version 1.16. 34 35 After installing SBCL, BLAS/LAPACK, MPI, and GSL, you'll need to edit 36 the parameters in the script "run" in the top-level directory: 37 38 * LD_LIBRARY_PATH Paths to directories containing the libraries. 39 * SBCL Path to the SBCL binary. 40 * DSS Maximum amount of memory allocated for a single 41 SBCL process. 42 43 You'll probably also need to edit the file "conf.lisp", where you can 44 specify the name of the BLAS/LAPACK library and switch MPI 45 implementation between OpenMPI and MPICH. 46 47 3. USAGE 48 49 There are several examples in the directory "examples": 50 51 * Test of the MPI communication ("mpi.lisp"). 52 53 The library is compiled by running it as a single process: 54 55 $ mpirun -n 1 ./run examples/mpi.lisp 56 57 MPI communication can be tested with a command: 58 59 $ mpirun -n 4 ./run examples/mpi.lisp 60 61 * Phase revivals in one dimension ("revivals.lisp"). 62 63 An initial state can be created with a command: 64 65 $ ./run inputs/revivals.lisp 66 67 Time evolution is then calculated with a command: 68 69 $ ./run examples/revivals.lisp 70 71 To run TEBDOL in 4 processes in parallel you can run the script 72 using mpirun: 73 74 $ mpirun -n 4 ./run examples/revivals.lisp 75 76 If you're running it on a single machine you should limit the number 77 of BLAS/LAPACK threads: 78 79 $ OMP_NUM_THREADS=1 mpiexec -n 4 ./run examples/revivals.lisp 80 81 * Load balancer example ("balancer.lisp"). 82 83 This is the same calculation as a previous one. The source code 84 shows how to use the load balancer. 85 86 * Equilibration example ("trotzky.lisp"). 87 88 This example simulates time evolution of a model from article 89 [2]. Usage is similar to previous examples: 90 91 $ ./run inputs/trotzky.lisp 92 $ ./run examples/trotzky.lisp 93 94 * Many-body localization in two dimensions ("mbl.lisp"). 95 96 This example is inspired by article [3]. Usage: 97 98 $ ./run inputs/mbl.lisp 99 $ ./run examples/mbl.lisp 100 101 The lattice size and the number of particles should be increased to 102 observe a proper crossover from thermalization to localization. 103 104 * Boson expansion in two dimensions ("expans.lisp"). 105 106 This example is inspired by article [4]. Usage: 107 108 $ ./run examples/expans.lisp 109 110 The sample outputs are in the directory "outputs". 111 112 4. FILES 113 114 asdf.conf: A configuration file for Another System Definition Facility. 115 conf.lisp: Basic program configuration. 116 run: Main execution script. 117 examples/*: Example calculations. 118 outputs/*: Sample outputs of the examples. 119 inputs/*: Input files and programs to create them. 120 tebdol/array.lisp: Array tensor routines. 121 tebdol/bhm.lisp: Bose-Hubbard model. 122 tebdol/blas.lisp: Interface to BLAS and LAPACK. 123 tebdol/exp.lisp: Tensor exponential. 124 tebdol/mpi.lisp: Interface to MPI. 125 tebdol/mps.lisp: Routines for working with matrix product states. 126 tebdol/part.lisp: Partitioning routines including a load balancer. 127 tebdol/serial.lisp: Serialization routines. 128 tebdol/tebd.lisp: Time-evolving block decimation algorithm. 129 tebdol/tebdol.asd: System definition. 130 tebdol/tensor.lisp: Symmetric tensor routines. 131 tebdol/ttns.lisp: Routines for working with tree tensor network states. 132 tebdol/util.lisp: Miscellaneous utilities. 133 134 5. AUTHOR 135 136 Miroslav Urbanek <miroslav.urbanek@mff.cuni.cz> 137 138 6. REFERENCES 139 140 [1] M. Urbanek and P. Soldán, "Parallel implementation of the 141 time-evolving block decimation algorithm for the Bose–Hubbard model", 142 Comput. Phys. Commun. 199, 170–177 143 (2016). doi:10.1016/j.cpc.2015.10.016 144 145 [2] S. Trotzky et al., "Probing the relaxation towards equilibrium in 146 an isolated strongly correlated one-dimensional Bose gas", Nature 147 Physics 8, 325–330 (2012). doi:10.1038/nphys2232 148 149 [3] J.-y. Choi et al., "Exploring the many-body localization 150 transition in two dimension", Science 352, 1547–1552 151 (2016). doi:10.1126/science.aaf8834 152 153 [4] J. Hauschild et al., "Sudden expansion and domain-wall melting of 154 strongly interacting bosons in two-dimensional optical lattices and on 155 multileg ladders", Physical Review A 92, 053629 156 (2015). doi:10.1103/PhysRevA.92.053629