SAPT是个著名的能量分解分析方法。如果有人想做SAPT能量分解,需要安装Psi4程序包。这个软件包需要下载下来编译、连接各种库以及配置环境变量。当然也可以选择二进制版本,不过不是每个程序都提供二进制版本。
现在有了更方便的技术,叫做Docker。简而言之,Docker技术是将应用封装成一个包,封装的时候把应用需要的环境也包进来了。这个打好的包被称为镜像(image),基于镜像可以开启一个容器(container),容器与操作系统底层直接交互并且可以执行。有个这个技术,我们就可以拿过来容器直接用,免去了编译、链接库等等的劳顿。重要的是能快速出结果。
需要满足的前提
- 机器上有Docker,并且账户有执行Docker的权限。
- 机器能正常速度连接DockerHub。(教育网很快)
快速上手
如果满足上述两点要求,SAPT能量分解分析可以被快速实现。
1. 案例准备
我们先创建一个工作目录SAPT,并在目录中创建输入文件(参考Psi4手册)SAPT_test.dat,以水二聚体SAPT0能量分解分析为例:
代码语言:javascript复制molecule water_dimer {
0 1
O -1.551007 -0.114520 0.000000
H -1.934259 0.762503 0.000000
H -0.599677 0.040712 0.000000
--
0 1
O 1.350625 0.111469 0.000000
H 1.680398 -0.373741 -0.758561
H 1.680398 -0.373741 0.758561
units angstrom
no_reorient
symmetry c1
}
set basis aug-cc-pvdz
energy('sapt0')
2. 完成计算
如果满足上述两个条件,一条指令便可完成能量分解计算。
代码语言:javascript复制docker run -v $(pwd)/SAPT:/SAPT paesanilab/psi4conda psi4 /SAPT/SAPT_test.dat /SAPT/SAPT_test.out
如果第一次使用psi4,电脑会自动从DockerHub拉取paesanilab/psi4conda这个镜像,psi4conda大约1.5G。运行结束后在$(pwd)/SAPT文件夹下输出SAPT_test.out,里面有计算结果。分子相互作用能被分解为:静电、交换、诱导、色散能四个部分。在SAPT_test.out后面的表中。
3. 指令的解读
docker run 基于一个镜像(paesanilab/psi4conda)去创建一个容器,这个容器可以执行Psi4任务。
-v 表示挂载一个目录或文件。-v $(pwd)/SAPT:/SAPT 表示把当前目录下的SAPT文件夹挂载到容器里的根目录下/SAPT。这样SAPT_test.dat就跟随自己的目录挂载到了容器里。
容器创建后,我们要告诉容器执行 psi4 /SAPT/SAPT_test.dat /SAPT/SAPT_test.out这个指令。这是psi4的标准执行命令。
关于Docker的其他说明
- 需要把非root用户加入Docker组才能让普通用户有Docker权限。
sudo groupadd docker
sudo usermod -aG docker [non-root user]
- 大陆地区,除了教育网之外的网络,难以链接DockerHub库,需要用国内的镜像库进行加速。推荐用阿里云的。
- 如果服务器没有网络,或者网络很差。可以用docker load把其他电脑下载好并且压缩成tar包的镜像载入。
- Docker的缺点是,镜像通常很大,基本到GB级别。
- 从原理上讲,在容器里运行程序不应该比亲自编译、链接的程序运行慢。这还需要实测。