NWChem的編譯方法
本文介紹編譯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包。
編譯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后面是調用的核數。
運行以下命令添加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運行了。