• NWChem的編譯方法

    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運行了。
    久久精品国产99久久香蕉