用飞天加速计划资源学习 ABINIT 计算(一)

简介: 简单(?)的 ABINIT 计算教程

没有听说过 ABINIT 的同学也大概都对 VASP (Vienna Ab initio Simulation Package,原子尺度材料模拟的计算机程序包)有所耳闻。以下是来自维基百科的对 VASP 的介绍:

原子尺度材料模拟的计算机程序包,更知名为 VASP,是用于执行从头计算量子力学的分子动力学(MD)使用 Vanderbilt 泛函,或投增强波的方法和一个平面波基组的程序包。理论基础是密度泛函理论(DFT),但该程序还允许使用后-DFT更正,如混合函数混合密度泛函理论和哈特里–福克交换,多体扰动理论(GW 近似)和随机相位近似方法内的动态电子相关。

以下则是 ABINIT 官网上(经本人渣翻)的介绍:

ABINIT 是可以计算材料的光学、力学、振动仪器其它可观测性质的软件包。从密度泛函理论(DFT)的量子方程出发,用基于 DFT 的扰动理论以及多体 Green 方程(GW 和 DMFT),你可以逐步建构起高级的应用。

下面的一些括号里的内容是为了保持严谨,不影响理解。

云服务器基本设置

  1. 你需要通过飞天加速计划的一些考核并获取一台 ECS 资源;
  2. 更改操作系统,因为 ABINIT 在 Ubuntu 系统上的安装简单一些,所以我们首先需要重装系统为 Ubuntu;
    1-Change-OS-Ubuntu.png
  3. 重装系统时你会需要一个创建一个密钥对,作用我们之后再说,创建时会有一个文件下载,一定要保存好!(否则就再重装一次系统吧。)确认重装系统。
    1-Change-OS-Ubuntu-1.png
    1-Change-OS-Ubuntu-2-Keys.png
  4. 下载 PuTTY、PuTTYgen
  5. 用 PuTTYgen 点 Import,把文件类型改为 *.* 之后找到之前下载的文件,导入后 PuTTYgen 会自动进行格式转换,点 Save Private Key 把文件(我们后面把它称为私钥)保存为 PuTTY 支持的格式;
  6. 打开 PuTTY 填入 IP,
    2-SSH-Intro-3.png
    2-SSH-Intro.png
    选中之前下载的文件,
    2-SSH-Intro-1-Keys.png
    root 用户名,
    2-SSH-Intro-2.png
    可以到 Appearance->Font 里改个大点的字体,填完之后可以填个名称点 Save 保存配置,不然每次都要重新输入;
  7. 连接,有警告的话 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

总结

  1. apt 更新软件;
  2. conda 架设 ABINIT 环境;
  3. 用 ABINIT 实现简单的计算。
相关文章
|
存储 XML 弹性计算
Zotero+阿里云盘文献同步
通过将阿里云盘映射为WebDav,作为Zotero的文献同步网盘,实现了多设备上的Zotero文献同步
Zotero+阿里云盘文献同步
|
JavaScript 前端开发 API
详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务
该文章详细讲解了队列数据结构在前端开发中的应用,并深入探讨了JavaScript的事件循环机制,区分了宏任务和微任务的执行顺序及其对前端性能的影响。
|
11月前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践
|
JSON 前端开发 数据格式
@RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)
文章详细讲解了在SpringMVC中如何使用`@RequestMapping`进行路由映射,并介绍了前后端参数传递的多种方式,包括传递单个参数、多个参数、对象、数组、集合以及JSON数据,并且涵盖了参数重命名和从URL中获取参数的方法。
1194 0
@RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)
|
存储 数据可视化 Java
单细胞|Signac 进行 Motif 分析
单细胞|Signac 进行 Motif 分析
|
存储 Ubuntu Shell
shell 用法入门
本文档详细介绍了Shell脚本的基础知识,包括基本写法、变量定义与使用、命令置换、环境变量、数组操作、算术运算、输入输出处理、控制语句及循环结构等内容。文档还提供了丰富的示例代码,帮助读者更好地理解和掌握Shell编程技巧。此外,还介绍了如何使用`if`语句进行条件判断、`case`语句进行模式匹配以及`while`、`for`循环等控制结构。最后,文档还涵盖了函数定义与调用的方法。适合初学者和有一定基础的开发者参考学习。
|
运维 安全 物联网
物联网设备的安全固件更新机制:保障设备安全的基石
【7月更文挑战第4天】物联网设备的安全固件更新机制是保障设备安全、稳定运行的重要基石。通过建立完善的更新管理制度、定期检查和更新计划、安全验证和兼容性测试、自动化分发和安装、详细的更新记录、数字签名技术、分阶段或分批更新策略、紧急响应计划及加密通信协议等措施,可以显著提高物联网设备固件更新的安全性和可靠性。未来,随着技术的不断进步和应用场景的拓展,物联网设备的安全固件更新机制将不断完善和发展,为物联网系统的稳定运行和数据安全提供更加坚实的保障。
|
机器学习/深度学习 人工智能 开发者
AI音效生成器概述
这篇文章介绍了AI音效生成器如何助力提升创作体验。AI音效生成器,如ElevenLabs、Audiogen和LOVO AI,利用深度学习创造和编辑音效,为电影制作、游戏开发及播客制作人提供高效、高质量且多样的声音效果。这些工具节省了时间和成本,具有用户友好的界面,方便各类型创作者使用。考虑功能、易用性、音质、成本等因素,选择合适的AI音效生成器能显著增强内容的专业性和吸引力。
|
Linux
Linux(CentOS 7_x64位)系统下安装Xmgrace
Linux(CentOS 7_x64位)系统下安装Xmgrace
2843 0
Linux(CentOS 7_x64位)系统下安装Xmgrace
|
监控 网络协议 iOS开发
Signal 13 was raised(SIGPIPE管道破裂)
Signal 13 was raised(SIGPIPE管道破裂)
274 0