NWChem的编译方法

NWChem的编译方法
Compilation method of NWChem

文/Sobereva @北京科音
First release:2014-Dec-22   Last update:2020-May-6


本文介绍编译NWChem 7.0的最简单的方法。笔者的操作系统是CentOS 7.4 64bit,用户是root。编译器用的gfortran。官方也有编译说明,见https://github.com/nwchemgit/nwchem/wiki/Compiling-NWChem,但里面的内容比较混乱。

编译OpenMPI库:
http://www.open-mpi.org下载OpenMPI 3.1.3(实测用4.0.3版也行),解压到/sob目录下,进入其目录,运行
./configure prefix=/sob/openmpi313
make all install -j
此时OpenMPI的可执行文件、库文件、头文件等就被装到了/sob/openmpi313里面的对应目录下。然后可以把OpenMPI解压的目录删掉。

在~/.bashrc中加入
export PATH=$PATH:/sob/openmpi313/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/sob/openmpi313/lib
保存后,输入bash命令使以上环境变量生效。

运行以下命令设置环境变量
export NWCHEM_TOP=/sob/nwchem7
export NWCHEM_TARGET=LINUX64
export NWCHEM_MODULES=all
export USE_MPI=y
export USE_MPIF=y
export USE_MPIF4=y
export USE_INTERNALBLAS=y
注:根据反复实测,至少对于用OpenMPI的情况,只需要设置以上内容就够了,如果设置了某些其它环境变量,反倒可能编译不成功,尤其是不建议自己设LIBMPI环境变量。

注:NWChem为了节约编译时间,许多不常用的模块默认是不编译的。如果你想编译它们,使用以下命令定义额外的环境变量,需要哪些就执行哪些
export MRCC_METHODS=y:编译多参考耦合簇代码
export CCSDTQ=y:编译TCE模块的CCSDTQ和EOM-CCSDTQ代码
export CCSDTLR=y:编译TCE模块的线性响应CCSDT、CCSDTQ代码,用于解析地算静态/动态极化率
export IPCCSD=y:编译TCE模块的IP-EOM-CCSD代码用于算电离能
export EACCSD=y:编译TCE模块的EA-EOM-CCSD代码用于算电子亲和能

把nwchem7.0压缩包解压到/sob/nwchem7,运行
cd /sob/nwchem7/src
make nwchem_config
make -j
这里用-j是为了并行编译,此时在笔者的Intel 36核机子下11分钟就编译完毕了(没有编译那些不常用的模块),不用-j的话会慢得多。但如果编译出现异常,去掉-j再试。

编译完成后可执行文件生成在了/sob/nwchem7/bin/LINUX64目录下。把下面的语句加入到~/.bashrc的末尾:
export PATH=$PATH:/sob/nwchem7/bin/LINUX64
保存后,输入bash命令使此环境变量生效。

现在进行测试。将以下内容写进test.nw:
title "Nitrogen cc-pvtz SCF geometry optimization"
geometry
n 0 0 0
n 0 0 1.08
end
basis
n library cc-pvtz
end
task scf optimize

然后运行nwchem test.nw查看输出是否正常。也运行mpirun -np 4 nwchem test.nw查看并行执行的输出是否正常,-np后面是调用的核数。


以下内容是NWChem老版本的情况,最后更新于2017-Apr-13




本文有两部分,第一部分是NWChem 6.6在Redhat Enterprise 6 Update 1 64bit下的安装,第二部分是NWChem 6.6在CentOS 7.2 64bit下的安装。后者过程更简单。编译器用的gfortran,用ifort也可以,但实测编译出的nwchem运行速度并不会更快,而且在编译耗时长得多,特别是CCSDTQ部分耗时极长,10个小时都编译不完。

编译条件:root, bash。将安装到/sob/nwchem-6.6。

本文的编译方法对nwchem 6.8经测试也完全适用,但是编译时必须能联网,因为会自动下载GlobalArray包。


===== NWChem 6.6 + Redhat Enterprise 6 Update 1 64bit ======

编译openmpi:
去http://www.open-mpi.org下载OpenMPI 1.6.5(更新的版本大抵也可以,笔者没测试),解压到/sob目录下,进入其目录,运行
./configure prefix=/sob/openmpi165
make all install -j
此时openmpi的可执行文件、库文件、头文件等就被装到了/sob/openmpi165里面的对应目录下。然后可以把OpenMPI解压的目录删掉。

在~/.bashrc中加入
export PATH=$PATH:/sob/openmpi165/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/sob/openmpi165/lib
输入bash使环境变量生效。

运行以下命令设置环境变量
export NWCHEM_TOP=/sob/nwchem-6.6
export NWCHEM_TARGET=LINUX64
export NWCHEM_MODULES=all
export USE_MPI=y
export USE_MPIF=y
export USE_MPIF4=y
export USE_INTERNALBLAS=y
export MPI_LOC=/sob/openmpi165
export MPI_LIB=/sob/openmpi165/lib
export MPI_INCLUDE=/sob/openmpi165/include
export LIBMPI="-lmpi_f90 -lmpi_f77 -lmpi -ldl -Wl,--export-dynamic -lnsl -lutil"

NWChem为了节约编译时间,许多不常用的模块默认是不编译的。如果你想编译它们,使用以下命令定义额外的环境变量,需要哪些就执行哪些
export MRCC_METHODS=y:编译多参考耦合簇代码
export CCSDTQ=y:编译TCE模块的CCSDTQ和EOM-CCSDTQ代码
export CCSDTLR=y:编译TCE模块的线性响应CCSDT、CCSDTQ代码,用于解析地算静态/动态极化率
export IPCCSD=y:编译TCE模块的IP-EOM-CCSD代码用于算电离能
export EACCSD=y:编译TCE模块的EA-EOM-CCSD代码用于算电子亲和能

把nwchem6.6压缩包解压到/sob/nwchem-6.6,运行
cd /sob/nwchem-6.6/src
make nwchem_config
make
可执行文件生成在了/sob/nwchem-6.6/bin/LINUX64目录下。把下面的语句加入到~/.bashrc的末尾:
export PATH=$PATH:/sob/nwchem-6.6/bin/LINUX64

笔者在Intel i7-2630QM四核机子上花一刻钟编译完毕。如果把上述全部额外的功能都编译的话,耗时约一个小时。make时不需要写-j,而且写不写都会自动用双线程编译。

现在测试。将以下内容写进test.nw:
title "Nitrogen cc-pvtz SCF geometry optimization"
geometry
n 0 0 0
n 0 0 1.08
end
basis
n library cc-pvtz
end
task scf optimize

然后运行nwchem test.nw查看输出是否正常。也运行mpirun -np 4 nwchem test.nw查看并行执行的输出是否正常。-np后面是调用的核数。


===== NWChem 6.6 + CentOS 7.2 64bit ======

运行以下命令添加EPEL源和安装openMPI(机子需要能联外网)
yum install epel-release
yum install openmpi-devel openmpi

将以下内容复制到命令行窗口设置环境变量
export NWCHEM_TOP=/sob/nwchem-6.6
export NWCHEM_TARGET=LINUX64
export NWCHEM_MODULES=all
export USE_MPI=y
export USE_INTERNALBLAS=y
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/openmpi/lib/
export PATH=$PATH:/usr/lib64/openmpi/bin/
若要编译NWChem额外的功能,需要额外设定的环境变量和上文提到的一致。

把nwchem6.6压缩包解压到/sob/nwchem-6.6,运行
cd /sob/nwchem-6.6/src
make nwchem_config
make
可执行文件生成在了/sob/nwchem-6.6/bin/LINUX64目录下。

把下面的语句加入到~/.bashrc的末尾:
export PATH=$PATH:/sob/nwchem-6.6/bin/LINUX64:/usr/lib64/openmpi/bin/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/openmpi/lib/
alias mpirun='mpirun --allow-run-as-root'

重新进入终端后就可以用比如mpirun -np 4 nwchem test.nw运行了。