Installation¶
The Quantum Package can be downloaded on GitHub as an archive or as a git repository.
git clone https://github.com/LCPQ/quantum_package
Before anything, go into your quantum_package
directory and run
./configure
This script will create the quantum_package.rc
bash script, which
sets all the environment variables required for the normal operation of the
Quantum Package.
Running this script will also tell you which external dependencies are missing and need to be installed.
When all dependencies have been installed, ( the configure will tell you)
source the quantum_package.rc
in order to load all environment variables and compile the Quantum Package.
Requirements¶
- Linux OS
- Fortran compiler : GNU Fortran, Intel Fortran or IBM XL Fortran
- GNU make
- Autoconf
- Python > 2.6
- IRPF90 : Fortran code generator
- EZFIO : Easy Fortran Input/Output library generator
- BLAS and LAPACK
- Zlib
- GNU Patch
- ZeroMQ : networking library
- OCaml compiler with OPAM package manager
- Ninja : a parallel build system
When all the dependencies have been installed, go into the config
directory, and copy the configuration file that corresponds to your
architecture. Modify it if needed, and run configure with
configure -c
.
cp ./config/gfortran.example config/gfortran.cfg
./configure -c config/gfortran.cfg
Note
The popcnt
instruction accelerates a lot the programs, so the
SSE4.2, AVX or AVX2 instruction sets should be enabled in the
configuration file if possible.
Help for installing external dependencies¶
Using the configure executable¶
The configure executable can help you in installing the minimal dependencies you will need to compile the Quantum Package. The command is to be used as follows:
./configure --install <package>
The following packages are supported by the configure installer:
- ninja
- irpf90
- zeromq
- f77zmq
- ocaml ( \(\approx\) 10 minutes)
- ezfio
- docopt
- resultsFile
- bats
Example:
./configure -i ezfio
Note
When installing the ocaml package, you will be asked the location of where it should be installed. A safe option is to enter the path proposed by the Quantum Package:
QP>> Please install it here: /your_quantum_package_directory/bin
So just enter the proposition of the Quantum Package and press enter.
If the configure executable fails to install a specific dependency¶
If the configure executable does not succeed to install a specific dependency, there are some proposition of how to download and install the minimal dependencies to compile and use the Quantum Package
Before doing anything below, try to install the packages with your package manager (apt, yum, etc)
Ninja¶
Ninja is a build system (like GNU make), with a focus on speed.
- Download the latest binary version of Ninja here : https://github.com/ninja-build/ninja/releases/latest
- Unzip the ninja-linux.zip file, and move the ninja binary into
the
$QP_ROOT/bin
directory.
IRPF90¶
IRPF90 is a Fortran code generator for programming using the Implicit Reference to Parameters (IRP) method.
- Download the latest version of IRPF90
here : https://github.com/scemama/irpf90/releases/latest and move
the downloaded archive in the
$QP_ROOT/external
directory - Extract the archive and go into the
irpf90-*
directory to run make
Note
The IRPF90_PATH
variable may need to be updated in the configuration
file $QP_ROOT/etc/irpf90.rc
.
ZeroMQ and its Fortran binding¶
ZeroMQ is a high-performance asynchronous messaging library.
- Download the latest stable version of ZeroMQ
here : https://github.com/zeromq/libzmq/releases/latest and move the
downloaded archive in the
$QP_ROOT/external
directory - Extract the archive, go into the
zeromq-*
directory and run the following commands
./configure --prefix="${QP_ROOT}" --without-libsodium
make
make install
- Download the Fortran binding
here : https://github.com/zeromq/f77_zmq/releases/latest and move
the downloaded archive in the
$QP_ROOT/external
directory - Extract the archive, go into the
f77_zmq-*
directory and run the following commands
export ZMQ_H=${QP_ROOT}/include/zmq.h
make
cp libf77zmq.a ${QP_ROOT}/lib
cp libf77zmq.so ${QP_ROOT}/lib
- Copy the
f77_zmq_free.h
file in theZMQ
module as follows:
cp f77_zmq_free.h ${QP_ROOT}/src/ZMQ/f77_zmq.h
Zlib¶
Zlib is the compression library used by gzip.
- Download the latest version of Zlib here:
https://www.zlib.net/zlib-1.2.11.tar.gz
and move it in the
$QP_ROOT/external
directory - Extract the archive, go into the
zlib-*
directory and run the following commands
./configure --prefix=${QP_ROOT}
make
make install
OCaml¶
OCaml is a general purpose programming language with an emphasis on expressiveness and safety.
Download the installer of the OPAM package manager here : https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh and move it in the
$QP_ROOT/external
directoryIf you use OCaml only with the Quantum Package, you can install the OPAM directory containing the compiler and all the installed libraries in the
$QP_ROOT/external
directory asexport OPAMROOT=${QP_ROOT}/external/opam
Run the installer
echo ${QP_ROOT}/bin ${QP_ROOT}/external/opam_installer.sh --no-backup --fresh
You the opam command can be installed in the
$QP_ROOT/bin
directory. To do this, take the output ofecho ${QP_ROOT}/bin
and use it as an answer to where opam should be installed.Install the OCaml compiler
opam init --disable-sandboxing --comp=4.07.0 eval `${QP_ROOT}/bin/opam env`
Install the required external OCaml libraries
opam install ocamlbuild cryptokit zmq core sexplib ppx_sexp_conv ppx_deriving getopt
EZFIO¶
EZFIO is the Easy Fortran Input/Output library generator.
- Download EZFIO here : https://gitlab.com/scemama/EZFIO/-/archive/master/EZFIO-master.tar.gz and move
the downloaded archive in the
$QP_ROOT/external
directory - Extract the archive, and rename it as
$QP_ROOT/external/ezfio
Docopt¶
Docopt is a Python package defining a command-line interface description language.
If you have pip for Python2, you can do
pip2 install --user docopt
Otherwise,
- Download the archive here : https://github.com/docopt/docopt/releases/tag/0.6.2
- Extract the archive
- Copy
docopt-0.6.2/docopt.py
in the$QP_ROOT/scripts
directory