Installation and technical remarks

To run the WannierBerricode only python3 is required, independent of the operating system. The easy way of installation of the latest stable version maybe achieved via pip

pip install wannierberri[all]

This will install all needed dependencies. However, some dependencies are heavy and might be not necessary for your particular use. Moreover, some of them might fail to install on some systems. To try WannierBerri, one may use a bare installation pip install wannierberri (with minimal necessary dependencies), which will fail for some features, or you may specify which features you actually need.

  • parallel : enables parallel execution via ray

  • symmetry : enables symmetrization, setting symmetry form structure

  • fftw : use a faster implementation of FFT in FFTW

  • plot : use plotting routines

  • phonons : phonons interpolation

For example :

pip install wannierberri[parallel,fftw]

Parallelization

One note should be mentioned about the parallel run. numpy already includes parallelization over threads. However, if wannierberriis running with the number of processes equal to the number of physical cores, obviously extra threading may only slow down the calculation. Generally I recommend to switch off the threading in numpy by setting the corresponding environent variable. It can be done inside the python script by

import os
os.environ['OPENBLAS_NUM_THREADS'] = '1'

or

os.environ['MKL_NUM_THREADS'] = '1'

Depending whether numpy is linked with openblas or MKL libraries. Note, this should be done in the beginning of the script, before importing numpy or wannierberri for the first time.

Windows OS

On Windows the subprocesses, initated within WannierBerri will import (i.e. execute) the main module (the user’s python script) at start. Hence, to execute WannierBerri in parallel on Windows one has to start the script from a if __name__ == '__main__': guard to avoid creating subprocesses recursively :

if __name__ == '__main__'
    import wannierberri
    import numpy
    ..........

The solution was found in this answer: https://stackoverflow.com/a/18205006

known bug with pyfftw

Under some installations appears a bug with pyfftw:

  File "/home/stepan/github/wannier-berri-work/wannier-berri-master/examples/wannierberri/__utility.py", line 152, in fourier_q_to_R
    AA_q_mp = FFT(AA_q_mp, axes=(0, 1, 2), numthreads=numthreads, fft=fft, destroy=False)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/stepan/github/wannier-berri-work/wannier-berri-master/examples/wannierberri/__utility.py", line 138, in FFT
    return fft_W(inp, axes, inverse=inverse, destroy=destroy, numthreads=numthreads)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/stepan/github/wannier-berri-work/wannier-berri-master/examples/wannierberri/__utility.py", line 107, in fft_W
    fft_object = pyfftw.FFTW(
                 ^^^^^^^^^^^^
  File "pyfftw/pyfftw.pyx", line 1426, in pyfftw.pyfftw.FFTW.__cinit__
RuntimeError: The data has an uncaught error that led to the planner returning NULL. This is a bug.

As mentioned [here](https://github.com/spectralDNS/spectralDNS/issues/29#issuecomment-392537709), this can be avoided by importing pyfftw prior to numpy. This is the order of imports inside wannierberri, but to avoid this bug do not import numpy before wanierberri, always after

If the problem is not solved, you may switch to numpy for fft transforms.See