没有听说过 ABINIT 的同学也大概都对 VASP (Vienna Ab initio Simulation Package,原子尺度材料模拟的计算机程序包)有所耳闻。以下是来自维基百科的对 VASP 的介绍:
原子尺度材料模拟的计算机程序包,更知名为 VASP,是用于执行从头计算量子力学的分子动力学(MD)使用 Vanderbilt 泛函,或投增强波的方法和一个平面波基组的程序包。理论基础是密度泛函理论(DFT),但该程序还允许使用后-DFT更正,如混合函数混合密度泛函理论和哈特里–福克交换,多体扰动理论(GW 近似)和随机相位近似方法内的动态电子相关。
以下则是 ABINIT 官网上(经本人渣翻)的介绍:
ABINIT 是可以计算材料的光学、力学、振动仪器其它可观测性质的软件包。从密度泛函理论(DFT)的量子方程出发,用基于 DFT 的扰动理论以及多体 Green 方程(GW 和 DMFT),你可以逐步建构起高级的应用。
下面的一些括号里的内容是为了保持严谨,不影响理解。
云服务器基本设置
- 你需要通过飞天加速计划的一些考核并获取一台 ECS 资源;
- 更改操作系统,因为 ABINIT 在 Ubuntu 系统上的安装简单一些,所以我们首先需要重装系统为 Ubuntu;
- 重装系统时你会需要一个创建一个密钥对,作用我们之后再说,创建时会有一个文件下载,一定要保存好!(否则就再重装一次系统吧。)确认重装系统。
- 下载 PuTTY、PuTTYgen;
- 用 PuTTYgen 点 Import,把文件类型改为
*.*
之后找到之前下载的文件,导入后 PuTTYgen 会自动进行格式转换,点 Save Private Key 把文件(我们后面把它称为私钥)保存为 PuTTY 支持的格式; - 打开 PuTTY 填入 IP,
选中之前下载的文件,
root 用户名,
可以到 Appearance->Font 里改个大点的字体,填完之后可以填个名称点 Save 保存配置,不然每次都要重新输入; - 连接,有警告的话 Accept 就可以了。
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-91-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Welcome to Alibaba Cloud Elastic Compute Service !
root@iZ0jl9j9dfuk4s5c3w60uhZ:~#
耶,你现在可以看到如上的信息(不需要一模一样,看到类似的 Welcome 就可以了)。我们这样就登录上了我们的服务器,以后进行的操作都要在服务器(也就是 PuTTY 的这个小窗口里,我们后面叫做终端)操作噢?
还需要说明的有一点,PuTTY 中只要用鼠标左键拖拉后再点击一次左键即可复制内容,请千万不要把 Ctrl+C 当作复制的快捷键,特别是在命令执行的途中——因为 Ctrl+C 在我们的服务器(的 shell)中其实是请求终止当前程序运行的意思。
安装 Conda
我们可以先来对我们服务器的操作进行一个简要说明:
- 我们在终端里输入文字来对服务器发出号令;
- 我们与服务器的号令(基本上)以回车作为“句号”(所以后面的命令文本在打完了之后不要忘了回车?)
那么我们对服务器的第一条命令是让它更新软件信息:
apt update
apt
是服务器(特指 Ubuntu 等 Debian 类的,看不懂请不要介意)上负责软件的管理器,我们在后面紧跟 update
来让它更新软件信息。很遗憾,这些软件名称以及它们所能理解的例如 update
等参数都需要记忆。
不出意料,你眼前会刷过一大片的程序输出,当 apt
程序完成我们分配的任务后,在终端里我们会看到:
root@iZ0jl9j9dfuk4s5c3w60uhZ:~#
标志这我们又可以指定新的命令了。(不需要一致,大体是 root@*************** #
的样子即可。)下面的每一个命令不加说明的话都需要等待这样的“命令提示符”出现。
下面我们来正式更新程序,因为上面只是类似“看看什么程序可以更新”而已:
apt upgrade
程序会在输出下面一行后停住:
Do you want to continue? [Y/n]
我们迎来了第一个有交互的程序!(准确来说是至少第二个了。)回车默认选中大写字母的 Y
,意思为 yes
继续进行。
我是不是忘了说一个很重要的辅助功能?在输入命令到一半的时候按下 Tab
键,我们的服务器会尽可能帮我们输入一些冗长的内容,现在试一试输入 apt upg
再按 Tab
?服务器会自动把 upgrade
补完。
另外,键盘上下箭头键可以获取历史命令,谁让程序员们懒呢?
安装 Conda
Conda 可以理解为一种方便搭建起科学计算环境的程序,在我们的例子里便是搭建起 ABINIT 的运行环境。
Conda 依赖 Python 3,我们需要用以下命令来查看 Python 3 版本:
python3 --version # verions 表示版本
# -- 或者 - 这种横杠是惯用用法,暂时不会解释
(例如我这里输出是 Python 3.8.10
。)
我们的服务器会把 #
号后面的内容全部忽略,这些内容便被称作注释。(如果你在复制粘贴的话,那这也意味着 #
以及 #
后面的内容你大可不必复制。有时候 \#
以及被英文引号括起来的 #
其实不会被忽略,但给人看的注释还是很明显的不是吗?)我们以后就把一些简单命令的解释写在注释里了。
看到后,去 这里 把对应的 64-bit 的安装器的链接复制下来。因为国内下载很慢,我们最好使用国内的一些“镜像”站点,例如把 https://repo.anaconda.com/miniconda/Miniconda3-py38_4.10.3-Linux-x86_64.sh
替换为 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py38_4.10.3-Linux-x86_64.sh
(即文件名不变,前面部分替换)。
我们使用一般系统会自带的 wget
作为下载器来下载这个“安装包”:(请用自己复制到的链接替换下面命令里的链接)
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py38_4.10.3-Linux-x86_64.sh
安装器链接页面右边还有一系列的 SHA256 hash
的形如
935d72deb16e42739d69644977290395561b7a6db059b316958d97939e9bdf3d
的代码。这些起校验码的作用,我们可以这样相应校验我们下载的文件:(善用 Tab 噢)
sha256sum Miniconda3-py38_4.10.3-Linux-x86_64.sh
检查输出的值和网页上的对应。(不对应就说明安装包下载错误,需要重下。)
安装包终于下好了!安装:(bash
是执行程序化脚本的程序,我们下载的安装包实际上包括记载了许许多多安装的操作“脚本”,需要使用专门的程序执行。)
bash Miniconda3-py38_4.10.3-Linux-x86_64.sh
安装时需要按回车看许可证,看完后输入 yes
回车确认。
接下来是安装路径(路径我们待会儿再讲),不妨输入 /opt/miniconda3
回车确认。
再输入 yes
初始化。
我们现在需要关掉 PuTTY 窗口,再打开一次 PuTTY 来使设置生效。
从 Conda 安装 ABINIT
现在你应该重新打开了一个 PuTTY 窗口并重新连接上了服务器。我们先来设置以下:
nano .condarc
这打开了一个名为 nano
的文本编辑器,编辑 .condarc
文件,这个文件是 conda 的配置文件,我们要让 conda 从国内的清华“镜像”下载软件,而不是从慢速的国外网站下。输入以下内容:
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
Ctrl+O 保存文件,Ctrl+X 退出。
再来看看 conda
:
conda --version
Conda 显示了自己的版本。我们说过 conda 是可以搭建环境的,其实在搭起环境时,它就担起了管理环境内部的软件的作用,所以它的部分功能和 apt
近似:(关键词以及参数组合方式有不同)
conda update conda
恩,这样可以让 conda 更新自己到最新版本。需要回车确认。
下面让 conda 可以自动到 conda-forge 上下载软件,因为 ABINIT 就在 conda-forge 上:
conda config --add channels conda-forge
conda config --set channel_priority strict
我们下面创建环境,并让 conda 往环境里装上 ABINIT:
conda create --name learn-abinit abinit
learn-abinit
是我们的新环境名称(你也可以选自己喜欢的名字),abinit
是我们想往这个环境里安装的软件。
让我们先理一理,我们现在的套娃有:
我们自己 (我们的电脑(1))
|
| PuTTY (SSH)
\|/
|-|-------------------------------|
| 我们的服务器(2) |
| |
| |-- Conda -------------| |
| | | |
| | Conda 管理的环境(3) | |
| | ABINIT 程序 | |
| |----------------------| |
| |
|---------------------------------|
我们现在 PuTTY 的窗口处在 (2),要进到 conda 的 ABINIT 环境 (3) 中去,我们需要:
conda activate learn-abinit
现在我们就在 (3) 里,ABINIT 触手可及:
abinit --version
(你会注意到我们这里很多程序都用到了 --version
命令。其实也就是因为很多程序都支持这个命令,所以它才被广泛用来确认程序安装正确。)
你现在已经熟悉基本操作了,让我们来实战演练一下吧!
ABINIT:第一个例子
(虽然我可能会把第二个鸽掉就是了……)
基于的是官网的教程:氢分子相关的简单计算
我们来创建目录:
mkdir ABINIT-1 # mkdir 是一个创建目录的命令
# 相当于创建文件夹并把其名字改为“ABINIT-1”
cd ABINIT-1
(这里可以用 Tab
快速输入 ABINIT-1
哟?)
我们的服务器有个当前(工作)目录的概念。打比方的话,就是我们只能打开一个文件浏览器窗口,要对某一个文件执行操作的话,最便捷但不是唯一的一种方法便是用文件浏览器打开到那个文件所在的文件夹(和目录是同一个概念)。这唯一的文件浏览器当前所在的文件夹便是当前目录。上面的命令相当于在文件浏览器里双击了 ABINIT-1
这个文件夹。(cd
意思是 Change Directory,改变目录。
你所熟知的目录路径可能是 C:\Program Files\
,我们用下面的命令来看一看我们现在的目录路径:
pwd # 意思是 Print Working Directory
输出 /root/ABINIT-1
。这里的斜杠,很明显,和你所熟知的路径的斜杠是反过来的。我们的服务器上没有“C盘”“D盘”的概念(非要打比方就是 C:\root\ABINIT-1
,但这不严谨)。总之,这意味着我们 cd
之前的路径是 /root
,在 cd
后,我们的当前目录便变为了 /root/ABINIT-1
。还记得我们前面 PuTTY 设置里输入了 root
吗?我们现在在服务器上的“身份”就是 root
,而这个 /root
目录便是我们这个 root
用户的“家”目录。每次登录后我们的当前目录都会变为 /root
。
我们的氢分子计算需要氢原子的赝势数据,下载之:
wget https://cdn.jsdelivr.net/gh/abinit/abinit@master/tests/Psps_for_tests/Pseudodojo_nc_sr_04_pw_standard_psp8/H.psp8
再下载一个 ABINIT 的输入文件:
wget https://cdn.jsdelivr.net/gh/abinit/abinit@master/tests/tutorial/Input/tbase1_1.abi
我们需要改动一下输入文件,顺便来看一下吧:
nano tbase1_1.abi
同样,每一行中 #
后面的均被程序忽略。没有被忽略的只有几行:
acell 10 10 10
ntyat 1
znucl 1
pp_dirpath "$ABI_PSPDIR"
pseudos "Pseudodojo_nc_sr_04_pw_standard_psp8/H.psp8"
natom 2
typat 1 1
xcart
-0.7 0.0 0.0
0.7 0.0 0.0
ecut 10.0
kptopt 0
nkpt 1
nstep 10
toldfe 1.0d-6
diemac 2.0
解释在注释里挺多的了,我们需要改掉一行,将 pseudos "Pseudodojo_nc_sr_04_pw_standard_psp8/H.psp8"
改为:
pseudos "H.psp8"
还记得在 nano 里怎么保存并退出吗?
保存退出后,用下面的命令开始计算:
ABI_PSPDIR=. abinit tbase1_1.abi >& log
(还是解释一下吧。ABINIT 需要找到赝势文件,它会把 pp_dirpath 和 pseudos 组合起来当作文件名。我们修改后让它到 $ABI_PSPDIR/H.psp8
去找文件,而当我们用 ABI_PSPDIR=.
在 abinit 程序前指定了 ABI_PSPDIR
为 .
(意味当前目录)后,ABINIT 最终便会去找 ./H.psp8
——也就是当前目录下的 H.psp8
文件。如果之后还有写第二个例子的话我会再说明的。)
ABINIT 会在我们当前目录下生成很多文件……等等,我们还不知道怎么查看当前目录的文件。
ls # 意思是 list
好的,我们看到以下输出:
H.psp8 tbase1_1.abo0001 tbase1_1o_DEN tbase1_1o_GSR.nc
log tbase1_1.abo0002 tbase1_1o_EBANDS.agr tbase1_1o_OUT.nc
tbase1_1.abi tbase1_1.abo0003 tbase1_1o_EIG tbase1_1o_WFK
tbase1_1.abo tbase1_1o_DDB tbase1_1o_EIG.nc
我们象征性地看一下输出文件:
nano tbase1_1.abo
例如,计算得的能量是这一行:
etotal -1.1171843463E+00
总结
- 用
apt
更新软件; - 用
conda
架设 ABINIT 环境; - 用 ABINIT 实现简单的计算。