Skip to content

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从官网下载,然后解压缩,进源码文件夹中。

shell
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/

编译安装

  1. 先激活 Intel oneAPI 环境:
shell
source /opt/intel/oneapi/setvars.sh
source /opt/intel/oneapi/setvars.sh
  1. 进入创建并进入 build 目录下,并执行下面的命令进行配置:
shell
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
  1. 进 fallbacks 文件夹中,安装相关依赖:
shell
./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
  1. 返回上级目录 build,并重新执行下面的配置命令,各个模块的依赖直接复制粘贴上一步的结果即可:
shell
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
  1. 执行make命令并安装:
shell
make -j && make install
make -j && make install
  1. 为方便集群内其他共同使用该程序,修改该安装路径权限:
shell
chmod -R 755 /share/apps/abinit
chmod -R 755 /share/apps/abinit

Modulefile编写

编译好的程序可以通过Module模块的方式提供给集群上面的其他用户使用,可以编写如下的Modulefile文件:

shell
mkdir -p /share/apps/modulefiles/abinit
mkdir -p /share/apps/modulefiles/abinit

在该路径下创建一个新的文件:

shell
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

保存后,设置一下权限:

shell
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 为例子,简单讲解。

将下载的压缩包上传到用户目录中,然后解压:

shell
tar xvf benchmark_Ti_dense_kmesh.tar
tar xvf benchmark_Ti_dense_kmesh.tar

创建一个示例目录,如abinit-example:

shell
mkdir abinit-example && cd abinit-example
mkdir abinit-example && cd abinit-example

复制所需的文件到示例目录中:

shell
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文件,并修改赝势文件目录:

shell
vim run.abi
vim run.abi

修改的内容,将赝势路径改为示例目录的绝对路径,如下:

pp_dirpath "/share/home/sonmi/abinit-example"
pp_dirpath "/share/home/sonmi/abinit-example"

创建一个提交脚本:

shell
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

提交脚本任务:

shell
sbatch submit.sh
sbatch submit.sh

参考链接

  1. ABINIT 官网
  2. ABINIT Github 仓库
  3. ABINIT Benchmark

本站内容未经授权禁止转载
联系邮箱: [email protected]