To install the QUANTUM ESPRESSO source package, run the configure script. This is actually a wrapper to the true configure, located in the install/ subdirectory. configure will (try to) detect compilers and libraries available on your machine, and set up things accordingly. Presently it is expected to work on most Linux 32- and 64-bit PCs (all Intel and AMD CPUs) and PC clusters, SGI Altix, IBM SP and BlueGene machines, NEC SX, Cray XT machines, Mac OS X, MS-Windows PCs, and (for experts!) on several GPU-accelerated hardware. Detailed installation instructions for some specific HPC machines can be found in files install/README.sys, where sys is the machine name.
Instructions for the impatient:
cd espresso-X.Y.Z/ ./configure make allThis will (try to) produce parallel (MPI) executable if a proper parallel environment is detected, serial executables otherwise. For OpenMP executables, specify ./configure -enable-openmp. Symlinks to executable programs will be placed in the bin/ subdirectory. Note that both C and Fortran compilers must be in your execution path, as specified in the PATH environment variable. Additional instructions for special machines:
./configure ARCH=crayxt4 | for CRAY XT machines |
./configure ARCH=necsx | for NEC SX machines |
./configure ARCH=ppc64-mn | PowerPC Linux + xlf (Marenostrum) |
./configure ARCH=ppc64-bg | IBM BG/P (BlueGene) |
configure generates the following files:
make.inc | compilation rules and flags (used by Makefile) |
install/configure.msg | a report of the configuration run (not needed for compilation) |
install/config.log | detailed log of the configuration run (may be needed for debugging) |
include/fft_defs.h | defines fortran variable for C pointer (used only by FFTW) |
include/c_defs.h | defines C to fortran calling convention |
and a few more definitions used by C files |
You should always be able to compile the QUANTUM ESPRESSO suite of programs without having to edit any of the generated files. However you may have to tune configure by specifying appropriate environment variables and/or command-line options. Usually the tricky part is to get external libraries recognized and used: see Sec.2.4 for details and hints.
Environment variables may be set in any of these ways:
export VARIABLE=value; ./configure # sh, bash, ksh setenv VARIABLE value; ./configure # csh, tcsh ./configure VARIABLE=value # any shellSome environment variables that are relevant to configure are:
ARCH | label identifying the machine type (see below) |
F90, F77, CC | names of Fortran 90, Fortran 77, and C compilers |
MPIF90 | name of parallel Fortran 90 compiler (using MPI) |
CPP | source file preprocessor (defaults to $CC -E) |
LD | linker (defaults to $MPIF90) |
(C,F,F90,CPP,LD)FLAGS | compilation/preprocessor/loader flags |
LIBDIRS | extra directories where to search for libraries |
./configure MPIF90=mpif90 FFLAGS="-O2 -assume byterecl" \ CC=gcc CFLAGS=-O3 LDFLAGS=-staticinstructs configure to use mpif90 as Fortran 90 compiler with flags -O2 -assume byterecl, gcc as C compiler with flags -O3, and to link with flag -static. Note that the value of FFLAGS must be quoted, because it contains spaces. NOTA BENE: do not pass compiler names with the leading path included. F90=f90xyz is ok, F90=/path/to/f90xyz is not. Do not use environment variables with configure unless they are needed! try configure with no options as a first step.
If your machine type is unknown to configure, you may use the ARCH variable to suggest an architecture among supported ones. Some large parallel machines using a front-end (e.g. Cray XT) will actually need it, or else configure will correctly recognize the front-end but not the specialized compilation environment of those machines. In some cases, cross-compilation requires to specify the target machine with the -host option. This feature has not been extensively tested, but we had at least one successful report (compilation for NEC SX6 on a PC). Currently supported architectures are:
ia32 | Intel 32-bit machines (x86) running Linux |
ia64 | Intel 64-bit (Itanium) running Linux |
x86_64 | Intel and AMD 64-bit running Linux - see note below |
aix | IBM AIX machines |
solaris | PC's running SUN-Solaris |
sparc | Sun SPARC machines |
crayxt4 | Cray XT4/XT5/XE machines |
mac686 | Apple Intel machines running Mac OS X |
cygwin | MS-Windows PCs with Cygwin |
mingw32 | Cross-compilation for MS-Windows, using mingw, 32 bits |
mingw64 | As above, 64 bits |
necsx | NEC SX-6 and SX-8 machines |
ppc64 | Linux PowerPC machines, 64 bits |
ppc64-mn | as above, with IBM xlf compiler |
ppc64-bg | IBM BlueGene |
arm | ARM machines (with gfortran) |
-enable-parallel | compile for parallel (MPI) execution if possible (default: yes) |
-enable-openmp | compile for OpenMP execution if possible (default: no) |
-enable-shared | use shared libraries if available (default: yes; |
"no" is implemented, untested, in only a few cases) | |
-enable-debug | compile with debug flags (only for selected cases; default: no) |
-disable-wrappers | disable C to fortran wrapper check (default: enabled) |
-enable-signals | enable signal trapping (default: disabled) |
-with-internal-blas | compile with internal BLAS (default: no) |
-with-internal-lapack | compile with internal LAPACK (default: no) |
-with-scalapack=no | do not use ScaLAPACK (default: yes) |
-with-scalapack=intel | use ScaLAPACK for Intel MPI (default:OpenMPI) |
If configure has run till the end, you should need only to edit make.inc. A few sample make.inc files are provided in install/Make.system. The template used by configure is also found there as install/make.inc.in and contains explanations of the meaning of the various variables. Note that you may need to select appropriate preprocessing flags in conjunction with the desired or available libraries (e.g. you need to add -D__FFTW to DFLAGS if you want to link internal FFTW). For a correct choice of preprocessing flags, refer to the documentation in include/defs.h.README.
NOTA BENE: If you change any settings (e.g. preprocessing, compilation flags) after a previous (successful or failed) compilation, you must run make clean before recompiling, unless you know exactly which routines are affected by the changed settings and how to force their recompilation.