# Configure options for Yambo v4

#### NetCDF support

One of the most useful features of yambo is its ability to carry out all (or most of!) the database I/O using the NetCDF libraries. If NetCDF support is not possible, yambo will handle the database I/O using the native binary Fortran format. Many high-performance architectures already have the NetCDF libraries available, so make sure to check these out first. If not, you will have to download and compile the libraries from the link above. You might find it useful to consult the successful build outputs. Once NetCDF is compiled and installed on your system, you can use the configure script to compile yambo with NetCDF support using

./configure --with-netcdf-lib=<NetCDF LIB DIRECTORY> --with-netcdf-include=<NetCDF INCLUDE DIRECTORY>

#### NetCDF as underlying storage layer of HDF5

It is possible to configure NetCDF 4.x.x as underlying storage layer of the HDF5 library. Compile Yambo with NetCDF as described in the previous section and add the flag --enable-netcdf-hdf5. Notice that when NetCDF library is compiled with the HDF5 support it requires additional libraries in the linking process, see here for more details. Yambo automatically detects these libraries but if it doesn't work you can use the flag --with-netcdf-link=... to pass you own libraries list. FFTW support

The configure script should hopefully detect FFTW libraries if they are located in your $PATH. Otherwise, you can specify user-defined locations with ./configure --with-fftw=<FFTW LIB DIRECTORY> If you are running on the CINECA CRAY systems, the FFTW library is located in /cineca/prod/lib. Hence, try compiling with: ./configure --with-fftw=/cineca/prod/lib Of course, if the linking with FFTW doesn't work, the default Goedecker FFT routines will be used. #### IOTK support To import output from PWscf/Quantum-Espresso, the IOTK libraries (Input/Output ToolKit, bundled with the QE distribution) need to be linked. Provide the path to the IOTK directory in the compiled PWscf source, and specify the version of PWscf, e.g.: ./configure --with-iotk='/usr/local/src/espresso-4.0/iotk' --with-p2y=4.0 On some HPC systems you might have to compile PWscf yourself to make the IOTK libraries available. #### ETSF-IO support To import output from Abinit, you can compile abinit with the option --with-trio-flavor="none" and then compile the yambo interfaces with no additional options. However from yambo 3.4.1 we suggest to use the ETSF-IO support. Try to compile abinit with the netcdf+etsf_io IO/flavor. If you are in the$ABINIT_SOURCE_PATH directory, you may try something like that:

mkdir compile_tmp cd compile_tmp ../configure --with-trio-flavor="netcdf+etsf_io" --with-dft-flavor="libxc" --with-netcdf-incs="-I/usr/include/"

 --with-netcdf-libs="-L/usr/lib/ -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lcurl -lz"
MPI_RUNNER="mpirun"  CC="mpicc" FC="mpif90" --prefix="$ABINIT_INSTALL_PATH" --exec-prefix="$ABINIT_INSTALL_PATH"


and then compile yambo with the ETSF-IO support ./configure --with-etsf-io-lib="$ABINIT_SOURCE_PATH/compile_tmp/fallbacks/exports/lib"  --with-etsf-io-include="$ABINIT_SOURCE_LIB/compile_tmp/fallbacks/exports/include"


This is a minimal documentation about how to use the configure flags of Yambo version 4. (Thanks to Andrea Ferretti!)

## Blas & Lapack

MKL path available ./configure --with-blas-libs="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core" \

            --with-lapack-libs="-lmkl_intel_lp64  -lmkl_sequential -lmkl_core"


MKL path explicitly given ./configure --with-blas-libs="-L/opt/intel/lib/intel64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core" \

            --with-lapack-libs="-L/opt/intel/lib/intel64  -lmkl_intel_lp64  -lmkl_sequential -lmkl_core"


## Scalapack & Blacs

System compiled ./configure --with-scalapack-libs="-L/opt/scalapack/2.0.1-openmpi-intel/lib -lscalapack" \

            --with-blacs-libs="-L/opt/blacs/1.1-openmpi-intel/lib -lblacs"


-L option can be avoided if already in the ld_library_path var (eg if the related modules are loaded) ./configure --with-scalapack-libs="-lscalapack" --with-blacs-libs="-lblacs"

## iotk

Default is: ./configure --enable-iotk -L option can be avoided if already in the ld_library_path var (eg if the related modules are loaded) ./configure --with-iotk-path="/home/ferretti/espresso-5.0.2/S3DE/iotk" path to an installed version of the library ./configure --with-iotk-path="/home/ferretti/espresso-5.0.2/S3DE/iotk" for fine tuning (eg if the structure of the iotk install directory is non standard). This is usually not required. ./configure --with-iotk-libdir="/home/ferretti/espresso-5.0.2/S3DE/iotk/src"

           --with-iotk-includedir="/home/ferretti/espresso-5.0.2/S3DE/iotk/src"


.OR. ./configure --with-iotk-includedir="/home/ferretti/espresso-5.0.2/S3DE/iotk/src"

## etsf-io

Internal version ./configure --enable-etsf-io path to an installed version of the library ./configure --with-etsf-io-path="/opt/etsf-io/1.0.4-intel" .OR. ./configure --with-etsf-io-libdir="/opt/etsf-io/1.0.4-intel/lib" --with-etsf-io-includedir="/opt/etsf-io/1.0.4-intel/include" direct list of flags to be used to link (being iotk a f90 library, the include dir has also to be provided) ./configure --with-etsf-io-libs="-L/opt/etsf-io/1.0.4-intel/lib -letsf_io"

           --with-etsf-io-includedir="/opt/etsf-io/1.0.4-intel/include"


## FFT

Internal FFT Goedeger ./configure --enable-internal-fftsg Internal FFTW [v 2.0] External libraries. Their type (FFTW, MKL-FFTW, ESSL) will be automatically detected. ./configure --with-fft-path="/opt/fftw/3.3.0-intel/"

          [ --with-fft-libdir="/opt/fftw/3.3.0-intel/lib"
--with-fft-includedir="/opt/fftw/3.3.0-intel/include" ]


[the libdir and includedir can be used to overwrite the defaults set on the basis of --with-fft-path] direct list of flags to be used to link: ./configure --with-fft-libdir="/opt/fftw/3.3.0-intel/lib"

            --with-fft-includedir="/opt/fftw/3.3.0-intel/include"


This is simplified it the path is given. As an example if the MKL FFTW3 path is given ./configure --with-fft-libs="-mkl"

## NetCDF

The internal netCDF 4 (compiled without HDF5, i.e. compatible with v3) ./configure --enable-netcdf This is the default. Note that is NOT compatible with any external hdf5 library. Path to an installed version of the libraries. ./configure --with-netcdf-path="/opt/netcdf/3.6.3-intel"

          [ --with-netcdf-libdir="/opt/netcdf/3.6.3-intel/lib"
--with-netcdf-includedir="/opt/netcdf/3.6.3-intel/include"  ]


[the libdir and includedir can be used to overwrite the defaults set on the basis of --with-fft-path] direct list of flags to be used to link to the include and library directories can be specified ./configure --with-netcdf-libdir="/opt/netcdf/3.6.3-intel/lib"\

            --with-netcdf-includedir="/opt/netcdf/3.6.3-intel/include"


if the library path is present in LD_LIBRARY_PATH and the same is true for the includedir (present in the INCLUDE env var) a simplified version of the instruction can be: ./configure --with-netcdf-libs="-lnetcdff -lnetcdf"

## HDF5

If HDF5 is is needed (e.g. because the external netcdf library requires it) the same options can be used. NO INTERNAL HDF5 exist, so the library must be linked externally. Path to an installed version of the libraries. As above, the include and library directories can be specified if they are not in the specified path. Usually this is not needed. ./configure --with-hdf5-path="/opt/hdf5/1.8.13-intel"

           [ --with-netcdf-libdir="/opt/hdf5/1.8.13-intel/lib"
--with-netcdf-includedir="/opt/hdf5/1.8.13-intel/include"  ]


since HDF5 requires the z library and sometimes the curl library, the paths of these libraries must be available through the LD_LIBRARY_PATH Alternatively the direct link to the clude and library directories can be specified ./configure --with-hdf5-libs="-L/opt/hdf5/1.8.13-intel/lib/ -lhdf5 -lhdf5_fortran -L/opt/zlib/1.2.8-intel/lib -lz"

            --with-hdf5-includedir="/opt/hdf5/1.8.13-intel/include"


If the LIB path is present in LD_LIBRARY_PATH and the same is true for the includedir (present in the INCLUDE env variable) a simplified version of the instruction can be: ./configure --with-hdf5-libs="-lhdf5 -lhdf5_fortran -lz" Large File Support can be switched on using the following ./configure --enable-netcdf-LFS combined netcdf/hdf5 support (useful for large files) can be used by setting ./configure --enable-netcdf-hdf5

## libXC

The internal libXC (2.0.3. hacked for Yambo): ./configure --enable-libxc this is the default. Path to an installed version of the libraries (only version 2.0.3 or above). As above, the include and library directories can be specified if they are not in the specified path. Normally this is not needed. ./configure --with-libxc-path="/opt/etsf/"

          [ --with-libxc-libdir="/opt/etsf/lib"
--with-libxc-includedir="/opt/etsf/include"]


## Yambo version 3

Useful configuration options

Here are some of the most commonly used configuration flags, for users and/or developers: Enable quick compiling of core code and projects ./configure --enable-debug Turn off parallel environment ./configure --without-mpi Turn off linking to NetCDF libraries ./configure --with-netcdf=no Turn off linking to BLACS ./configure --with-blacs=no Preinstalled Yambo