用Docker快速实现SAPT能量分解分析

2020-07-27 15:29:44 浏览数 (1)

SAPT是个著名的能量分解分析方法。如果有人想做SAPT能量分解,需要安装Psi4程序包。这个软件包需要下载下来编译、连接各种库以及配置环境变量。当然也可以选择二进制版本,不过不是每个程序都提供二进制版本。

现在有了更方便的技术,叫做Docker。简而言之,Docker技术是将应用封装成一个包,封装的时候把应用需要的环境也包进来了。这个打好的包被称为镜像(image),基于镜像可以开启一个容器(container),容器与操作系统底层直接交互并且可以执行。有个这个技术,我们就可以拿过来容器直接用,免去了编译、链接库等等的劳顿。重要的是能快速出结果。


需要满足的前提

  1. 机器上有Docker,并且账户有执行Docker的权限。
  2. 机器能正常速度连接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权限。
代码语言:javascript复制
sudo groupadd docker
sudo usermod -aG docker [non-root user]
  • 大陆地区,除了教育网之外的网络,难以链接DockerHub库,需要用国内的镜像库进行加速。推荐用阿里云的。
  • 如果服务器没有网络,或者网络很差。可以用docker load把其他电脑下载好并且压缩成tar包的镜像载入。
  • Docker的缺点是,镜像通常很大,基本到GB级别。
  • 从原理上讲,在容器里运行程序不应该比亲自编译、链接的程序运行慢。这还需要实测。

0 人点赞