-
Notifications
You must be signed in to change notification settings - Fork 6
igor-1982/rest_workspace
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Installation ------------------ * Preparation - download this repository ========================================================= -> git clone https://github.com/igor-1982/rest_workspace.git -> cd rest_workspace -> mkdir lib include -> export REST_EXT_DIR="$(pwd)/lib" -> export REST_EXT_INC="$(pwd)/include" ========================================================= - install RUST ========================================================= The REST package is built on the Rust programming language. Therefore, installing Rust is the initial step in setting up REST. 1. Add environment paths: ```bash export CARGO_HOME=/path/to/your/custom/location/cargo export RUSTUP_HOME=/path/to/your/custom/location/rustup # For users in China, you may want to set a mirror environment to speed up export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup ``` You can run these commands one by one in the terminal now. Please ensure to add them to your default environment, like the `.bashrc` file, in any case. 2. Install from official scripts: ```bash RUSTUP_HOME=$RUSTUP_HOME CARGO_HOME=$CARGO_HOME bash -c 'curl https://sh.rustup.rs -sSf | sh' ``` - Running `curl https://sh.rustup.rs` will download the official script, which can determine your system and then install Rust. - If you can download the scripts from other sources, you can run the scripts directly: `RUSTUP_HOME=$RUSTUP_HOME CARGO_HOME=$CARGO_HOME bash rustup-init.sh ` 3. (optional) If you use `LMOD: module` to manage your applications, you may need the following setting in the file `rust.lua` ```lua local help_message = [[ rust ]] help(help_message,"\n") whatis("Name: rust") whatis("Version: 1.74.0") whatis("Keywords: rust 1.74.0") whatis("Description: A shell environment.") family("rust") local prefix="/path/to/your/custom/location" setenv("RUSTUP_HOME", prefix .. "/rustup") setenv("CARGO_HOME", prefix .. "/cargo") setenv("RUSTUP_DIST_SERVER", "https://mirrors.ustc.edu.cn/rust-static") setenv("RUSTUP_UPDATE_ROOT","https://mirrors.ustc.edu.cn/rust-static/rustup") prepend_path("PATH", prefix .. "/cargo" .. "/bin") ``` 4. Activate your Rust installation: - for `bash` ```bash source $RUSTUP_HOME/cargo/env ``` - for `module` ```bash module load rust ``` 5. Test the installation: ```bash cargo --version cargo 1.74.0 (ecb9851af 2023-10-18) ``` Installation is complete. ========================================================= * Prerequisites - libopenssl.so/libssl.so/libcrypto.so ========================================================= -> yum install openssl install openssl using the package manager, for example yum for CentOS, apt for Ubuntu ========================================================= - libopenblas.so ========================================================= -> git clone https://github.com/xianyi/OpenBLAS.git OpenBLAS -> cd OpenBLAS -> make -jN DYNAMIC_ARCH=1 The variable "N" represents a integer value that indicates the number of CPUs you wish to use for the compilation process. DYNAMIC_ARCH=1 is needed for the use of dftd, also make it compatible with various situations. -> cp libopenblas.so* $REST_EXT_DIR/libopenblas.so* ========================================================= - libcint.so ========================================================= -> git clone https://github.com/sunqm/libcint.git libcint -> cd libcint -> mkdir build; cd build -> cmake -DWITH_RANGE_COULOMB=1 .. -> make -jN The variable "N" represents a integer value that indicates the number of CPUs you wish to use for the compilation process. -> cp libcint.so* $REST_EXT_DIR/ ========================================================= - libxc.so ========================================================= -> based on your os, download the installation file from https://www.tddft.org/programs/libxc/download/ -> tar xf libxc-* -> cd libxc-* -> ./configure --prefix=$(pwd) --enable-shared `--enable-shared` is needed to produce the share library "libxc.so", otherwise only libxc.a is generated. -> make -jN The variable "N" represents a integer value that indicates the number of CPUs you wish to use for the compilation process. -> make install -> cp lib/libxc.so* $REST_EXT_DIR -> cp lib/libxc.a $REST_EXT_DIR ========================================================= - libhdf5.so ========================================================= -> download the source code from https://www.hdfgroup.org/downloads/hdf5 DO NOT DOWNLOAD the .zip file, if you are using a Linux system. Please consider downloading version 1.8.x since REST calls the older version of HDF5 functions. The APIs of v1.14 only contain H5L_iterate, and REST calls the function H5Literate, resulting in an error "undefined reference to 'H5Literate'". Although the latest HDF5 offers the 1.8 APIs, specify --with-default-api-version=v18 when building. However, please note that this flag may not be effective in practice. You can run `nm -D lib/libhdf5.so | grep H5Literate` after making hdf5 compilation to check the function existance. -> tar -zcvf hdf5-*.tar.gz -> cd hdf5-* -> ./configure --prefix=$(pwd) -> CC=`your mpicc path/mpicc` ./configure --with-default-api-version=v18 --enable-parallel --prefix=$(pwd) [optional] use of parallel HDF5. -> make -jN The variable "N" represents a integer value that indicates the number of CPUs you wish to use for the compilation process. -> make -jN install -> cp lib/libhdf5.so* $REST_EXT_DIR/ -> cp include/* $REST_EXT_INC/ ========================================================= - librest2fch.so ========================================================= -> git clone https://gitlab.com/jeanwsr/MOKIT -b for-rest -> cd MOKIT/src -> make rest2fch -f Makefile.gnu_openblas -> cp MOKIT/mokit/lib/librest2fch.so $REST_EXT_DIR/ ========================================================= - libs-dftd3.so ========================================================= -> git clone https://github.com/dftd3/simple-dftd3.git Also, you can compile the DFTD3 library using the way in this repository. Here we show the cmake way. Aside from cmake (version 3.14 or newer), you also need a ninja build system (version 1.10 or newer). Get it from https://ninja-build.org/ or install it via your package manager. NOTE:: if no cmake with proper version installed in your OS, try other build systems, e.g. meson or fpm. More details can be found on https://github.com/dftd3/simple-dftd3 -> cd simple-dftd3 -> cmake -B build -G Ninja -DBUILD_SHARED_LIBS=1 -> cmake --build build -> cp build/libs-dftd3.so.* $REST_EXT_DIR/ -> mkdir -f $REST_EXT_INC/dftd3 -> find build -name *.mod | xargs -I {} cp {} $REST_EXT_INC/dftd3 This step is rather important to finish building the system. Wherever your $REST_EXT_INC is, you should always put your mods in the dftd3 directory. =========================================================== - libdftd4.so =========================================================== -> git clone https://github.com/dftd4/dftd4.git The process is almost the same as the build of libs-dftd3. Similiarly, you can compile the DFTD4 library using the cmake build system. NOTE:: if no cmake with proper version installed in your OS, try other build systems, e.g. meson and fpm. More details can be found on https://github.com/dftd4/dftd4 -> cd dftd4 -> cmake -B build -G Ninja -DBUILD_SHARED_LIBS=1 -> cmake --build build -> mkdir -f $REST_EXT_INC/dftd4 -> cp build/libdftd4.so.* $REST_EXT_DIR/ -> find build -name *.mod | xargs -I {} cp {} $REST_EXT_INC/dftd4 =========================================================== * Build REST 1) -> ./Config [OPTION...] [OPTARG] a) prepare the relevant global environment variables heading with "REST", including: "REST_HOME", "REST_EXT_DIR", "REST_EXT_INC", and "REST_FORTRAN_COMPILER" b) download the required sub-projects: "rest", "rest_tensors", "rest_libcint", "rest_regression" from either github or local repository For more details, please use the help option: -> ./Config -h 2) Source $HOME/.bash_profile 3) -> cargo build (debug version: compile fast and run slowly) or -> cargo build --release (release version: compile slowly and run fast) 4) check installation a) check executable file generated -> cd $REST_HOME/target/release # for cargo build --release -> cd $REST_HOME/target/debug # for cargo build -> ls rest b) check all `lib` files are linked properly -> ldd target/debug/rest ... libxc.so.12 => /..your...rest...path/lib/libxc.so.12 (0x00002b4cdfa32000) librest2fch.so => /..your...rest...path/lib/librest2fch.so (0x00002b4cdde4a000) libcint.so.6 => /..your...rest...path/lib/libcint.so.6 (0x00002b4ce0f50000) librestmatr.so => /..your...rest...path/lib/librestmatr.so (0x00002b4cdde9b000) libc.so.6 => /...system path.../libc.so.6 (0x00002b4ce283f000) libgfortran.so.5 => /...system path.../libgfortran.so.5 (0x00002b4ce2c0d000) libquadmath.so.0 => /...system path.../libquadmath.so.0 (0x00002b4ce3085000) ... c) run a regression test with `rest` -> $REST_HOME/target/debug/rest_regression -p $REST_HOME/target/release/rest for more details about `rest_regression`, please type: -> $REST_HOME/target/debug/rest_regression -h * To use REST as a module in the python environment 1) cargo build [--release] 2) cp target debug/[release]/libpyrest.so $pyfolder/pyrest.so 3) import pyrest as a standard python module
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published