RMG builds have been tested using the GNU and PGI compilers as well as MKL. Most development work is done using GNU which is the most reliable. Cmake is used for configuration and out of source builds are preferred. After cloning or downloading the repository the generic build instructions are to first change into the top level directory and make a build subdir.
cd rmgdft
mkdir build
cd build
cmake ..
make -jN target
In this case N is an integer used for a parallel build and target specifies the particular rmg module you wish to build. In the best case scenario things will just work and on standard linux distributions this is often the case. On non-standard clusters with complicated software stacks additional manual configuration is often required. In particular one may have to specify a particular set of modules to use and set some environment variables. For example on the xsede machine comet as of April 19,2020 the following works.
export CC=/opt/gnu/gcc/bin/gcc
export CXX=/opt/gnu/gcc/bin/g++
export FC=/opt/openmpi/gnu/ib/bin/mpif90
module load gnu
module load openmpi_ib
module load boost
module load fftw
module load cmake
module load mkl
module load hdf5
One can then execute
cmake ..
make -jN target
Additional configuration may be performed at the cmake step. For example to build with GPU support one should use.
cmake -DRMG_CUDA_ENABLED=1
Available targets include.
rmg-cpu Base code cpu only
rmg-gpu Base code with gpu support
rmg-on-cpu ON code cpu only
rmg-on-gpu ON code with gpu support
rmg-negf-cpu Non equilibrium greens function code cpu only
rmg-negf-gpu Non equilibrium greens function code with gpu support
RMG GPU support at the present time is limited to Nvidia hardware and requires Pascal or later hardware.
cmake/
Some additional cmake modules for finding specific libraries.
PlatformChecks/
Code for checking whether certain features are suppored by compilers/libs.
SubprojectIncludes/
Module specific cmake stuff.
RMG/
Standard DFT code module (rmg-cpu and rmg-gpu binaries).
ON/
Localized orbital DFT code module.
NEGF/
Non equilibrium greens function code module.
TDDFT/
Time dependent DFT code module.
RmgLib/
Base code used by all modules.
US_PP/
Code for working with pseudopotentials both US and NC.
Input/
Routines for reading and parsing input files.
Interfaces/
Interfaces to external programs. Still in progress.
InternalPseudo/
RMG includes a set of pseudopotentials built into the executable which
are included here as compressed header files.
Misc/
Miscellaneous code.
FiniteDiff/
Higher level driver routines for finite differencing.
Force/
Force routines.
MG/
Multigrid routines. All multigrid functionality has been moved into RmgLib and this
directory only has C bindings for the C++ class in RmgLib. Will eventually be deprecated.
Gpufuncs/
Cuda code.
XC/
XC_useLIBXC/
Interfaces for exchange correlation.
RMG_GUI/
Gui setup code.
zfp/
Compression library for floating point data.
scalapack/
Parallel linear algegra/eigensolvers.
spglib/
Symmetry routines.
Examples/ Various examples.
Testing/ Testing code. In development.