Ocotpus 是一款科学计算软件,可以对多种不同体系进行从头计算(ab initio)的模拟。在密度泛函理论(DFT)的理论框架下用量子力学来描述电子, 而核用经典的点粒子描述,电子-核相互作用以赝势近似来描述。Octopus可以进行基态计算,也可以利用时间密度泛函(TDDFT)进行时间依赖的模拟,。
Octopus 还支持MPI和OpenMP来进行并行计算,也支持OpenCL和CUDA利用GPU计算。Octopus是一款Linux系统下的免费软件,在GNU通用公共许可证框架下发布,你可以免费下载,使用,修改。
Octopus的安装过程比较复杂,因为它有很多依赖库。笔者根据octopus官网提供的详细安装指南,在此分享如何在个人计算机(武汉深之度公司发行的Deepin 20.3 社区版)系统中安装Octopus11.4并行(parallel)版本的全过程。
Octopus的代码使用标准 Fortran 2003写成,还有一些例程(routines)是使用C语言编写,所以我们需要一个C编译器和Fortran 2003 编译器。命令行下直接使用apt命令安装即可。
$ sudo apt install gcc #C 编译器
$ sudo apt install gfortran #fortran 编译器
很多人系统中可能已经安装过这两个编译器,以C编译器gcc为例,若检查是否已经安装过gcc,可以输入以下命令:
gcc --version
意为查看gcc的版本,如果已经安装,则会输出相应版本号:
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/11.3.0/lto-wrapper
目标:x86_64-pc-linux-gnu
配置为:../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
线程模型:posix
Supported LTO compression algorithms: zlib
gcc 版本 11.3.0 (GCC)
通常编译器标志(Compiler flags)为系统自动选择的优化标志,但在安装Octopus过程中,需要我们指定标志,笔者亲测使用不同标志会导致安装报错。这里,C编译器标志指定为 -O3 -march=native
(大写字母O),fortran编译器标志为 -O3 -ffree-line-length-none
,目前还不需要指定操作,在后面安装依赖库的时候才需要指定标志。
首先,make, automake, m4, libtool 这几个包是必要条件,可以直接用apt安装,包名–version 来检查是否安装成功。
sudo apt-get install make
sudo apt-get install automake
sudo apt-get install m4
sudo apt-get install libtool
其中make和automake是重要的编译工具,在linux环境下安装软件,一般都通过 配置->编译->安装
这个过程实现,即
./configure -> make -> make install
m4是是一个通用的宏处理器,大多数人需要 m4 仅仅是因为 GNU autoconf 中的 “configure” 脚本依赖它。
libtool是处理动态链接库的工具,可以解决库依赖的问题,将使用动态库的复杂性隐藏在统一、可移植的接口中。
接下来还有5个数学库:BLAS,LAPACK,GSL,FFTW3,LibXC
,下面逐一介绍。
在安装数学库之前,我们先创建一个文件夹来作为octopus和各种库的安装位置,我们假设这个文件夹路径为 basedir
,别忘了在后文对这个文件夹进行操作时要将它换成你自己的路径,想安装在哪里都可以,例如,我的 basedir
为 /home/chen/octopus/
BLAS (Basic Linear Algebra Subprograms)即基本线性代数子程序,提供用于执行基本矢量和矩阵运算的标准构建块的例程。
1级BLAS执行标量,矢量和矢量-矢量运算,2级BLAS执行矩阵矢量运算,3级BLAS执行矩阵运算。 由于BLAS高效,便携且广泛可用,因此它们通常用于开发高质量线性代数软件,例如LAPACK。
首先在网上下载压缩包:http://www.netlib.org/blas/blas-3.10.0.tgz
解压压缩包并进入新创建的 BLAS 文件夹
编辑 make.inc 文件,并修改fortran编译器的标志为:
FC = gfortran -m64
FFLAGS = -O3 -ffree-line-length-none
FFLAGS_DRV = $(FFLAGS)
FFLAGS_NOOPT =
LOADER = gfortran
LOADOPTS =
接下来使用 make 命令来进行编译,这会花费一段时间。
make
也可以使用2个或更多核同时编译来加速这一过程, lscpu
可以显示本机cpu核数。
make -j 2
然后在octopus安装路径下创建新文件夹 lib,注意将 basedir
换成你自己的安装路径。
mkdir basedir/lib
将make命令后新产生的文件 blas_LINUX.a 复制到 basedir/lib/
文件夹下并重命名
cp blas_LINUX.a basedir/lib/libblas.a
注:产生的新文件总是叫 blas_LINUX.a
,独立于你所用的操作系统,只是叫这个名字而已。
Lapack 即 Linear Algebra PACKage,是一个线性代数包,它提供了求解联立线性方程组,线性方程组最小二乘解,特征值问题和奇异值问题的例程,还提供了相关的矩阵因子分解(LU,Cholesky,QR,SVD,Schur,广义Schur),以及相关计算。
首先在网上下载压缩包:https://github.com/Reference-LAPACK/lapack/archive/refs/tags/v3.10.0.tar.gz
解压压缩包并进入新产生的 lapack 文件夹
复制 make.inc.example
文件为 make.inc
cp make.inc.example make.inc
编辑 make.inc
文件,并修改相应编译器的标志为:
FC = gfortran -m64
FFLAGS = -O3 -ffree-line-length-none
FFLAGS_DRV = $(FFLAGS)
FFLAGS_NOOPT =
LOADER = gfortran
LOADOPTS =
接下来使用 make lib
命令来进行编译,意为只编译部分功能如 lib, 不必编译全部功能。
将新产生的文件 lapack_LINUX.a
复制到 basedir/lib/
文件夹下并重命名
cp lapack_LINUX.a basedir/lib/liblapack.a
注
:产生的新文件可能叫 lapack_LINUX.a(官方教程产生的) ,也可能叫 lapack.a or liblapack.a(笔者电脑产生的)
这是一个GNU数学函数库,该库提供了广泛的数学例程,如随机数生成器,特殊函数和最小二乘拟合。
首先下载压缩包 https://mirror.ibcp.fr/pub/gnu/gsl/gsl-latest.tar.gz
解压压缩包并进入新产生的文件夹
运行配置文件:
./configure CC="gcc -m64" --prefix=basedir --disable-shared --enable-static
注:configure命令的参数解释之 --prefix
: 该参数指定了安装路径,这里我们把库安装在之前设好的 baseidr 下,并非是下载解压缩库后所形成的的新文件夹。
编译并安装
make
make install
这是一个密度泛函理论(DFT)的交换关联泛函库,其中你可以找到不同类型的泛函,例如:LDA, GGA, hybrids, 和 mGGA。 Libxc库也可以用于Abinit软件,目前最新版本为5.2.2。
首先下载压缩包 www.tddft.org/programs/libxc/down.php?file=5.2.2/libxc-5.2.2.tar.gz
解压压缩包并进入新产生的文件夹
配置
./configure --prefix=basedir CC="gcc -m64" CFLAGS="-O3 -march=native" FC="gfortran -m64" FCFLAGS="-O3 -ffree-line-length-none"
如果下载的不是稳定发行版,没有configure文件, 需要通过命令 autoreconf -i
来产生 configure
编译并安装
make
make install
Open MPI(Message Passing Interface)是一个开源的消息传递接口库项目, 用于处理并行计算。
首先下载压缩包 https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.3.tar.gz
解压压缩包并进入新产生的文件夹
配置
./configure --prefix=basedir CC="gcc -m64" CFLAGS="-O3 -march=native" F77="gfortran -m64" F77FLAGS="-O3 -ffree-line-length-none"
编译并安装
make
make install
FFTW(the Fastest Fourier Transform in the West)是一个C子程序库,用于计算一个或多个维度,任意输入大小,实数和复数数据的离散傅里叶变换(DFT).
首先下载压缩包 https://www.fftw.org/fftw-3.3.10.tar.gz
解压压缩包并进入新产生的文件夹
配置,别忘了更改 basedir
.
./configure --prefix=basedir CC="gcc -m64" CFLAGS="-O3 -march=native" \
F77="gfortran -m64" F77FLAGS="-O3 -ffree-line-length-none" \
--enable-mpi --enable-openmp --enable-threads \
--enable-shared --enable-static \
编译并安装
make
make install
编译完这些库后,我们可以开始编译Octopus了
首先下载最新版本的Octopus-11.4 : octopus-code.org/down.php?file=11.4/octopus-11.4.tar.gz
解压压缩包并进入新产生的文件夹
定义几个环境变量,用来写配置脚本, 别忘了改basedir
!
export LIBS_BLAS=basedir/lib/libblas.a
export LIBS_LAPACK=basedir/lib/liblapack.a
export LIBS_FFT=basedir/lib/libfftw3.a
接下来写配置脚本, 这里我们使用mpi版本的c和fortran编译器来编译:
autoreconf -i
./configure CC="mpicc -m64" CFLAGS="-O3 -march=native" FC="mpifort -m64" \
FCFLAGS="-O3 -ffree-line-length-none" --prefix=basedir \
--with-gsl-prefix=basedir --with-libxc-prefix=basedir --with-fftw-prefix=basedir \
--with-blas=basedir --enable-mpi --enable-openmp
注:configure命令的参数解释之 --with
:该参数指定了配置文件时去哪里寻找对应的库
注: 如果想编译更多功能,可以使用帮助命令查看具体细节 ./configure -h
编译并安装
make
make install
如果一切都进展顺利的话,Octopus应该会成功安装在你一开始设定的 basedir
文件夹内,可执行文件放在 basedir/bin/
文件夹内,接下来将其路径添加到环境变量里(临时设置),以便你可以只输入 octopus 就可运行, 而非 每次都要输入 basedir/bin/octopus
才行。
export PATH=$PATH:basedir/bin/octopus
也可以永久设置环境变量, 通过修改 ~/.bashrc
文件
cd ~
vim .bashrc
在里面加入:
export PATH="$PATH:basedir/bin/octopus"
或者使用alias
来重命名一些复杂命令:
alias octopus='basedir/bin/octopus'
两种方法均需重启才能生效
source .bashrc
新建一空文件夹并进入,建立一个文件,命名为 inp ,并将其内容编辑为:
CalculationMode = gs
%Coordinates
'H' | 0 | 0 | 0
%
注:文件只能命名为 inp, octopus 只识别这个输入文件名
接下来试运行:
octopus &> output
即可运行octopus, &>
意为将输出结果重定向到新建的 output 文件中。
若只运行:
octopus
则输出会在屏幕上实时显示。
接着测试多节点运行:
mpirun -np 2 octopus
若系统找不到mpirun命令,记得我们刚才将mpirun装在了basedir 里面,可以运行
basedir/bin/mpirun -np 2 octopus
输出信息中可以看到并行信息, 表示测试成功!
************************** Parallelization ***************************
Info: Octopus will run in *parallel*
Number of processes : 2
Number of threads per process : 1
Info: Number of nodes in ParDomains group: 2 ( 22119)
Info: Octopus will waste at least 0.00% of computer time.
**********************************************************************