ABINIT 编译安装及使用
ABINIT是一个软件包,其主程序允许用户在密度泛函理论(DFT)框架下,通过赝势和平面波基组,计算由电子和原子核(分子和周期性固体)组成的系统的总能量、电荷密度和电子结构。ABINIT还包括根据DFT力和应力优化几何结构的选项,或者使用这些力进行分子动力学模拟,或生成动力学矩阵、Born有效电荷和介电张量。激发态可以通过时间依赖密度泛函理论(用于分子)或多体微扰理论(GW近似)进行计算。除了主要的ABINIT代码外,还提供了不同的实用程序。
本教程将介绍在SonmiHPC集群系统上使用Intel oneAPI套件编译安装ABINIT,并提供给集群内用户进行使用。
安装前准备
由于ABINIT编译时需要很多依赖,因此需要提前进行安装。
- Fortran 编译器:本教程中使用Intel oneAPI自带的编译器。
- Python 解释器:python版本需要大于3.7,本教程使用系统自带的python版本。
- MPI 并行库:本教程使用Intel oneAPI自带的MPI并行库。
- 线性代数库:本教程使用Intel oneAPI自带的MKL库。
源码下载
ABINIT的源码包可以从Github上直接下载上传到集群或者使用git克隆到本地。本教程中先在本地从其Github仓库中下载源码压缩包后,再上传到集群系统中。
本教程直接使用wget从官网下载,然后解压缩,进源码文件夹中。
wget https://www.abinit.org/sites/default/files/packages/abinit-9.0.4.tar.gz
tar xzvf abinit-9.0.4.tar.gz
cd abinit-9.0.4/
wget https://www.abinit.org/sites/default/files/packages/abinit-9.0.4.tar.gz
tar xzvf abinit-9.0.4.tar.gz
cd abinit-9.0.4/
编译安装
- 先激活 Intel oneAPI 环境:
source /opt/intel/oneapi/setvars.sh
source /opt/intel/oneapi/setvars.sh
- 进入创建并进入 build 目录下,并执行下面的命令进行配置:
mkdir build && cd build
../configure --prefix=/share/apps/abinit CC=mpicc FC=mpif90
mkdir build && cd build
../configure --prefix=/share/apps/abinit CC=mpicc FC=mpif90
- 进 fallbacks 文件夹中,安装相关依赖:
./build-abinit-fallbacks.sh
./build-abinit-fallbacks.sh
安装完成之后在最后,会提示各个依赖的路径,如下所示:
The fallbacks are now ready to use.
You can link these fallbacks with Abinit by copying the following options to your ac9 file.
with_libxc=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/libxc/4.3.4
with_hdf5=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/hdf5/1.10.6
with_netcdf=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/netcdf4/4.6.3
with_netcdf_fortran=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/netcdf4_fortran/4.5.2
The fallbacks are now ready to use.
You can link these fallbacks with Abinit by copying the following options to your ac9 file.
with_libxc=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/libxc/4.3.4
with_hdf5=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/hdf5/1.10.6
with_netcdf=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/netcdf4/4.6.3
with_netcdf_fortran=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/netcdf4_fortran/4.5.2
- 返回上级目录 build,并重新执行下面的配置命令,各个模块的依赖直接复制粘贴上一步的结果即可:
cd ../
../configure --prefix=/share/apps/abinit CC=mpicc FC=mpif90 --with-mpi \
with_libxc=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/libxc/4.3.4 \
with_hdf5=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/hdf5/1.10.6 \
with_netcdf=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/netcdf4/4.6.3 \
with_netcdf_fortran=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/netcdf4_fortran/4.5.2
cd ../
../configure --prefix=/share/apps/abinit CC=mpicc FC=mpif90 --with-mpi \
with_libxc=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/libxc/4.3.4 \
with_hdf5=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/hdf5/1.10.6 \
with_netcdf=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/netcdf4/4.6.3 \
with_netcdf_fortran=/root/abinit-9.0.4/build/fallbacks/install_fb/gnu/11.4/netcdf4_fortran/4.5.2
- 执行make命令并安装:
make -j && make install
make -j && make install
- 为方便集群内其他共同使用该程序,修改该安装路径权限:
chmod -R 755 /share/apps/abinit
chmod -R 755 /share/apps/abinit
Modulefile编写
编译好的程序可以通过Module模块的方式提供给集群上面的其他用户使用,可以编写如下的Modulefile文件:
mkdir -p /share/apps/modulefiles/abinit
mkdir -p /share/apps/modulefiles/abinit
在该路径下创建一个新的文件:
cd /share/apps/modulefiles/abinit && vim 9.0.4
cd /share/apps/modulefiles/abinit && vim 9.0.4
新增文件内容如下:
#%Module###########################################
set modulefilename "ABINIT"
set modulefilever "9.0.4"
set min_tcl_ver 8.4
if { $tcl_version < $min_tcl_ver } {
puts stderr " "
puts stderr "ERROR: This modulefile requires tcl $min_tcl_ver or greater."
puts stderr "Your system reports that tclsh version $tcl_version is installed."
exit 1
}
if { [ module-info mode load ] } {
puts stderr "Loading $modulefilename version $modulefilever"
}
if { [ module-info mode ] == "unload" || [ module-info mode ] == "remove" } {
puts stderr "Removing $modulefilename version $modulefilever"
puts stderr "Use to view any remaining dependent modules."
}
prepend-path PATH /share/apps/abinit/bin
prepend-path PKG_CONFIG_PATH /share/apps/abinit/lib/pkgconfig
#%Module###########################################
set modulefilename "ABINIT"
set modulefilever "9.0.4"
set min_tcl_ver 8.4
if { $tcl_version < $min_tcl_ver } {
puts stderr " "
puts stderr "ERROR: This modulefile requires tcl $min_tcl_ver or greater."
puts stderr "Your system reports that tclsh version $tcl_version is installed."
exit 1
}
if { [ module-info mode load ] } {
puts stderr "Loading $modulefilename version $modulefilever"
}
if { [ module-info mode ] == "unload" || [ module-info mode ] == "remove" } {
puts stderr "Removing $modulefilename version $modulefilever"
puts stderr "Use to view any remaining dependent modules."
}
prepend-path PATH /share/apps/abinit/bin
prepend-path PKG_CONFIG_PATH /share/apps/abinit/lib/pkgconfig
保存后,设置一下权限:
chmod -R 755 /share/apps/modulefiles
chmod -R 755 /share/apps/modulefiles
用户使用如下的命令就可以看到该模块:
[root@sonmi abinit]# module avail
--------------------------------------- /share/apps/modulefiles ----------------------------------------
abinit/9.0.4
[root@sonmi abinit]# module avail
--------------------------------------- /share/apps/modulefiles ----------------------------------------
abinit/9.0.4
集群上其他用户需要加载该模块的时候执行如下的命令即可:
module load abinit/9.0.4
module load abinit/9.0.4
使用示例
下面以官方仓库中 Benchmark 的 Ti dense kmesh 为例子,简单讲解。
将下载的压缩包上传到用户目录中,然后解压:
tar xvf benchmark_Ti_dense_kmesh.tar
tar xvf benchmark_Ti_dense_kmesh.tar
创建一个示例目录,如abinit-example:
mkdir abinit-example && cd abinit-example
mkdir abinit-example && cd abinit-example
复制所需的文件到示例目录中:
cp ~/benchmark_Ti_dense_kmesh/pseudos/Ti.xml .
cp ~/benchmark_Ti_dense_kmesh/n_cpus_32/run.abi .
cp ~/benchmark_Ti_dense_kmesh/pseudos/Ti.xml .
cp ~/benchmark_Ti_dense_kmesh/n_cpus_32/run.abi .
使用vim编辑run.abi文件,并修改赝势文件目录:
vim run.abi
vim run.abi
修改的内容,将赝势路径改为示例目录的绝对路径,如下:
pp_dirpath "/share/home/sonmi/abinit-example"
pp_dirpath "/share/home/sonmi/abinit-example"
创建一个提交脚本:
vim submit.sh
vim submit.sh
内容如下:
#!/bin/bash
#SBATCH --job-name=abinit
#SBATCH --partition=sonmi
#SBATCH --output=%j.out
#SBATCH --error=%j.err
#SBATCH --nodelist=compute-0-0
#SBATCH --exclusive
#SBATCH --time=02:00:00
ulimit -s unlimited
ulimit -l unlimited
module load abinit/9.0.4
source /opt/intel/oneapi/setvars.sh
cd $SLURM_SUBMIT_DIR
mpirun -n 8 abinit run.abi
#!/bin/bash
#SBATCH --job-name=abinit
#SBATCH --partition=sonmi
#SBATCH --output=%j.out
#SBATCH --error=%j.err
#SBATCH --nodelist=compute-0-0
#SBATCH --exclusive
#SBATCH --time=02:00:00
ulimit -s unlimited
ulimit -l unlimited
module load abinit/9.0.4
source /opt/intel/oneapi/setvars.sh
cd $SLURM_SUBMIT_DIR
mpirun -n 8 abinit run.abi
提交脚本任务:
sbatch submit.sh
sbatch submit.sh