Installation¶
For Linux users we suggest installing with anaconda. For Windows and macOS machines, we suggest using the docker instructions, which are relatively straightforward. If desired, you can also compile the code from the source for Linux.
Install and use edrixs via Anaconda¶
A conda package has been built for Linux. To use edrixs via Anaconda, you need first to install Anaconda in your system.
We recommend installing edrixs into a separate environment, for example, called edrixs_env
, together with any other packages you might want to use like this:
conda create --name edrixs_env -c conda-forge python=3.10 edrixs matplotlib
We endeavor to keep the conda-forge release up to date, but note that these builds will usually not correspond to the latest version of edrixs, which is available in the master branch of edrixs.
edrixs will also run on Google Colaboratory, but does not come installed as default. Installing it requires a you to install conda and then edrixs, which can be done by executing a cell:
!pip install -q condacolab
import condacolab
condacolab.install()
!conda install -c conda-forge edrixs
from within a notebook cell.
Requirements¶
Several tools and libraries are required to build and install edrixs,
Fortran compiler: gfortran and ifort are supported
MPI environment: openmpi and mpich are tested
MPI Fortran and C compilers: mpif90, mpicc
BLAS and LAPACK libraries: OpenBLAS with gfortran and MKL with ifort
ARPACK library: arpack-ng with mpi enabled
Only Python3 is supported
numpy, scipy, sympy, matplotlib, sphinx, numpydoc
mpi4py with the same MPI implementation libraries (
openmpi
ormpich
) as building edrixs
Build from source¶
We will show how to build edrixs from source on Ubuntu Linux 20.04 and macOS Mojave (OSX 10.14) as examples. We will use gcc, gfortran, openmpi and OpenBLAS in these examples. Building edrixs on other versions of Linux or macOS, or with Intel’s ifort+MKL will be similar.
Ubuntu Linux 20.04¶
Install compilers and tools:
sudo apt-get update
sudo apt-get install build-essential gfortran gcc
sudo apt-get install git wget
sudo apt-get install python3 libpython3-dev python3-pip python3-venv
Create and activate a python virtual environment for edrixs:
python3 -m venv VIRTUAL_ENV
source VIRTUAL_ENV/bin/activate
where VIRTUAL_ENV
should be replaced by the directory where you wish to install edrixs.
Alternatively create and activate a conda environment for edrixs:
conda create --name edrixs_env python=3.8
conda activate edrixs_env
We will assume python
and pip
are pointing to the activated environment from now on.
Check we are using the expected python and pip:
which python
which pip
python --version
Fetch the latest version of pip
:
pip install --upgrade pip
openmpi, OpenBLAS, ARPACK can be installed by apt-get
, but their versions are old and may not work properly.
However, they can also be compiled from source easily. In the following, we will show both ways, but we always recommend to build newer ones from source.
openmpi can be installed by:
sudo apt-get install libopenmpi-dev
or from newer version of source, for example v3.1.4:
wget https://download.open-mpi.org/release/open-mpi/v3.1/openmpi-3.1.4.tar.bz2
tar -xjf openmpi-3.1.4.tar.bz2
cd openmpi-3.1.4
./configure CC=gcc CXX=g++ FC=gfortran
make
sudo make install
the compiling process will take a while.
OpenBLAS can be installed by:
sudo apt-get install libopenblas-dev
or from a newer version of source:
wget https://github.com/xianyi/OpenBLAS/archive/v0.3.6.tar.gz
tar -xzf v0.3.6.tar.gz
cd OpenBLAS-0.3.6
make CC=gcc FC=gfortran
sudo make PREFIX=/usr/local install
ARPACK can be installed by:
sudo apt-get install libarpack2-dev libparpack2-dev
or from a newer version of source:
wget https://github.com/opencollab/arpack-ng/archive/3.6.3.tar.gz
tar -xzf 3.6.3.tar.gz
cd arpack-ng-3.6.3
./bootstrap
./configure --enable-mpi --with-blas="-L/usr/local/lib/ -lopenblas" FC=gfortran F77=gfortran MPIFC=mpif90 MPIF77=mpif90
make
sudo make install
mpi4py can be installed by:
export MPICC=/usr/local/bin/mpicc
sudo pip install --no-cache-dir mpi4py
or from source:
wget https://github.com/mpi4py/mpi4py/archive/3.0.1.tar.gz
tar xzf 3.0.1.tar.gz
cd mpi4py-3.0.1
edit mpi.cfg to set MPI paths as following:
[mpi]
mpi_dir = /usr/local
mpicc = %(mpi_dir)s/bin/mpicc
mpicxx = %(mpi_dir)s/bin/mpicxx
include_dirs = %(mpi_dir)s/include
libraries = mpi
library_dirs = %(mpi_dir)s/lib
runtime_library_dirs = %(mpi_dir)s/lib
and comment all other contents. Then, build and install by:
python setup.py build
sudo pip install .
Check whether the MPI paths are correct by:
python
>>> import mpi4py
>>> mpi4py.get_config()
{'mpicc': '/usr/local/bin/mpicc',
'mpicxx': '/usr/local/bin/mpicxx',
'include_dirs': '/usr/local/include',
'libraries': 'mpi',
'library_dirs': '/usr/local/lib',
'runtime_library_dirs': '/usr/local/lib'}
Now, we are ready to build edrixs:
git clone https://github.com/NSLS-II/edrixs.git
cd edrixs
pip install -v .
Start to play with edrixs by:
python
>>> import edrixs
>>> edrixs.some_functions(...)
or go to examples
directory to run some examples:
cd examples/more/ED/14orb
./get_inputs.py
mpirun -np 2 ed.x
mpirun -np 2 ./run_fedsolver.py
cd ../../RIXS/LaNiO3_thin
mpirun -np 2 ./run_rixs_fsolver.py
if no errors, the installation is successful.
macOS Mojave (OSX 10.14)¶
Install newest Xcode through App store.
Use MacPorts¶
Download and install MacPorts. Update MacPorts by:
sudo port -v selfupdate
Install gcc8, arpack, openblas and openmpi:
sudo port -v install gcc8
sudo port select gcc mp-gcc8
sudo port -v install openmpi-default +gcc8
sudo port -v install openblas +gcc8
sudo port -v install arpack +openblas +openmpi
sudo port select --set mpi openmpi-mp-fortran
Install Python, pip, numpy, scipy, sympy, matplotlib:
sudo port -v install python37 py37-pip
sudo port -v install py37-numpy +gcc8 +openblas
sudo port -v install py37-scipy +gcc8 +openblas
sudo port -v install py37-sympy
sudo port -v install py37-matplotlib
Notes:
DO NOT use pip to install numpy because it will use
clang
as default compiler, which has a strange bug when usingf2py
withmpif90
compiler. If you cannot solve this issue bysudo port install py37-numpy +gcc8
, you can compile numpy from its source withgcc
compiler. Always use gcc to compile numpy if you want to build it from source.You can also try
gcc9
if it is already available, but be sure to change allgcc8
togcc9
in the above commands.
We will assume python
pointing to python3.7
and pip
pointing to pip3.7
from now on. If this is not the case, you can make links explicitly.
Check we are using the expected python and pip:
which python
python --version
which pip
pip --version
Add the following two lines into ~/.bash_profile
:
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
export PATH=/opt/local/Library/Frameworks/Python.framework/Versions/3.7/bin:$PATH
Close current terminal and open a new one.
Install mpi4py:
export MPICC=/opt/local/bin/mpicc
sudo pip install --no-cache-dir mpi4py
Please be sure to check whether the MPI paths of mpi4py are correct by:
python
>>> import mpi4py
>>> mpi4py.get_config()
{'mpicc': '/opt/local/bin/mpicc'}
Now, we are ready to build edrixs:
git clone https://github.com/NSLS-II/edrixs.git
cd edrixs
make -C src F90=mpif90 LIBS="-L/opt/local/lib -lopenblas -lparpack -larpack"
make -C src install
python setup.py config_fc --f77exec=mpif90 --f90exec=mpif90 build_ext --libraries=openblas,parpack,arpack --library-dirs=/opt/local/lib
sudo pip install .
You can add edrixs/bin
to the environment variable PATH
in ~/.bash_profile.
Go to examples
directory to run some examples:
cd examples/more/ED/14orb
./get_inputs.py
mpirun -np 2 ../../../../src/ed.x
mpirun -np 2 ./run_fedsolver.py
cd ../../RIXS/LaNiO3_thin
mpirun -np 2 ./run_rixs_fsolver.py
if no errors, the installation is successful.
All done, enjoy!
Use Homebrew¶
Install Homebrew:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Add following line to ~/.bash_profile
:
export PATH="/usr/local/bin:$PATH"
Install gcc9:
brew install gcc@9
Install openblas and arpack:
brew install openblas
brew install arpack
openmpi has been automatically installed when installing arpack.
Install python3.7:
brew install python
We will assume python
pointing to python3.7
and pip
pointing to pip3.7
from now on. If this is not the case, you can make link explicitly.
Check we are using the expected python and pip:
which python
python --version
which pip
pip --version
Make links if gcc, g++ and gfortran are not pointing to gcc-9, g++-9, gfortran-9, for example:
ln -s /usr/local/Cellar/gcc/9.1.0/bin/gcc-9 /usr/local/bin/gcc
ln -s /usr/local/Cellar/gcc/9.1.0/bin/g++-9 /usr/local/bin/g++
ln -s /usr/local/Cellar/gcc/9.1.0/bin/gfortran-9 /usr/local/bin/gfortran
DO NOT install numpy through pip
because it uses clang
as default compiler, which will cause problems.
We will build numpy from source with gcc:
wget https://github.com/numpy/numpy/archive/v1.16.3.tar.gz
tar xzf v1.16.3.tar.gz
cd numpy-1.16.3
export CC=gcc CXX=g++
python setup.py build
pip install .
You might need to do brew install wget
if it is not already installed.
If you have BLIS or MKL installed, you will need to tell numpy to compile with
openblas. Create a file in the numpy directory called site.cfg and put the
following text in it:
[openblas]
libraries = openblas
library_dirs = /usr/local/Cellar/openblas/0.3.9/lib
include_dirs = /usr/local/Cellar/openblas/0.3.9/include
runtime_library_dirs = /usr/local/Cellar/openblas/0.3.9/lib
Now we are ready to install scipy, sympy, matplotlib:
pip install scipy sympy matplotlib
export MPICC=/usr/local/bin/mpicc
pip install --no-cache-dir mpi4py
Please be sure to check whether the MPI paths of mpi4py are correct by:
python
>>> import mpi4py
>>> mpi4py.get_config()
{'mpicc': '/usr/local/bin/mpicc'}
Now, we are ready to build edrixs:
git clone https://github.com/NSLS-II/edrixs.git
cd edrixs
make -C src F90=mpif90 LIBS="-L/usr/local/opt/openblas/lib -lopenblas -L/usr/local/lib -lparpack -larpack"
make -C src install
python setup.py config_fc --f77exec=mpif90 --f90exec=mpif90 build_ext --libraries=openblas,parpack,arpack --library-dirs=/usr/local/lib:/usr/local/opt/openblas/lib
pip install .
You can add edrixs/bin
to the environment variable PATH
in ~/.bash_profile
.
Go to examples
directory to run some examples:
cd examples/more/ED/14orb
./get_inputs.py
mpirun -np 2 ../../../../src/ed.x
mpirun -np 2 ./run_fedsolver.py
cd ../../RIXS/LaNiO3_thin
mpirun -np 2 ./run_rixs_fsolver.py
if no errors, the installation is successful.
All done, enjoy!