• Multiwfn在Linux下安裝的中文說明

    Multiwfn在Linux下安裝的中文說明

    文/Sobereva@北京科音   2023-Oct-22


    非常流行的波函數分析程序Multiwfn(http://www.shanxitv.org/multiwfn)在Linux下的安裝方法在Multiwfn手冊2.1.2節有充分的說明,但我發現老有人不仔細看,或者由于缺乏Linux最基本常識而無法正確follow,還有人因為那是英文就干脆不看而放棄安裝。鑒于此,這里用中文完整、詳細說一下Multiwfn在Linux環境下的安裝。如果對Multiwfn一無所知,參看《Multiwfn FAQ》(http://www.shanxitv.org/452)和《Multiwfn入門tips》(http://www.shanxitv.org/167)。Multiwfn的可執行文件、源代碼和手冊都可以在官網http://www.shanxitv.org/multiwfn中的Download頁面下載。本文介紹的情況適用于目前Multiwfn官網上最新版本。本文里涉及的命令里的空格必須看清楚,眼睛不好就直接從本文中復制粘貼命令。如果仔細看本文還是安裝不成功,可以去Multiwfn論壇http://bbs.keinsci.com/wfn發帖提問,必須把軟件環境和遇到的問題交代得盡可能具體。

    安裝Multiwfn非常簡單,本文文字多純粹是因為講解得詳細。


    0 關于Multiwfn的普通版與noGUI版

    首先要知道Multiwfn的Linux版有普通版和noGUI版兩種,前者在官網的下載頁面上是Multiwfn_[版本號]_bin_Linux.zip形式的文件名,后者在文件名里多了個noGUI字樣。普通版具有完整的功能,但運行時需要有motif圖形庫提供的libXm.so.4文件(這個文件本身是Multiwfn所用的dislin圖形庫所依賴的),否則無法啟動,安裝這個庫需要root權限。然而在超算或者公用的服務器上,普通用戶又拿不到root權限而沒法安裝motif庫。為了解決這個矛盾,Multiwfn在官網上特意提供了noGUI版,由于它在啟動時不需要motif庫,因此也就不需要弄到root權限來安裝它,故普通用戶都可以很容易地安裝。noGUI版的缺點在于沒法使用任何Multiwfn與圖形有關的功能,如無法顯示出圖形界面、沒法繪制各種曲線圖/平面圖/等值面圖、做拓撲分析后無法直接可視化結果等。由于特意放到高性能Linux服務器上運行Multiwfn通常是為了讓Multiwfn跑一些高耗時的任務,它們往往不直接涉及圖像顯示,所以這倒也不會帶來明顯問題。

    下面就開始講Multiwfn在Linux下的安裝流程。


    1 安裝motif庫(安裝noGUI版直接跳過此節)

    如果你用的是Redhat系操作系統,如Redhat Enterprise Linux,CentOS(包括stream)、Rocky Linux、Fedora等,在確保機子能正常訪問Internet的情況下,在終端(即命令行界面里)輸入yum install motif命令即可安裝motif庫。這需要root權限,要么以root方式登錄,要么在普通用戶下用sudo來執行此命令。

    如果你無法訪問Internet,可以自行去https://motif.ics.com/motif/downloads下載適合x86_64架構的最新的motif庫,比如https://motif.ics.com/sites/default/files/motif-2.3.4-1.x86_64_0.rpm,放到Linux服務器上后用rpm -i motif-2.3.4-1.x86_64_0.rpm命令手動安裝之。不過這樣安裝往往會提示缺一些亂七八糟的依賴庫,所以還是建議盡量用yum方式安裝。

    如果你不知道當前機子里已經裝了motif沒有,運行rpm -qa|grep motif命令,如果找到了,那就不用再裝了。

    上面說的都是Redhat系Linux的情況。如果你是Debian系Linux如Ubuntu的用戶,在連著Internet的情況下可以用sudo apt-get install libxm4 libgl1命令安裝motif和相關的libgl1庫。


    2 檢查SysV共享內存段

    運行cat /proc/sys/kernel/shmmax命令檢查SysV共享內存段的值,數值的單位為字節。有的系統這個值默認得非常小,比如就32MB,當Multiwfn做一些較耗內存的分析、載入較大波函數文件時會崩潰。發現需要增大的話,在/etc/sysctl.conf里加入比如kernel.shmmax = 2000000000然后重啟系統,就可以令上限提升到大約2GB。修改此文件需要有root權限。


    3 解壓Multiwfn

    去Multiwfn官網上下載同時帶著bin字樣(binary,即已編譯好的可執行文件)和Linux字樣的壓縮包,放在Linux系統下,用unzip [文件名] 命令將之解壓到當前目錄下。圖形界面里也可以在此文件上點右鍵后選擇解壓。

    下文假定解壓后的目錄是/home/sob/Multiwfn_[版本號]_bin_Linux/,在里面應當可以看到Multiwfn程序的各種文件。


    4 配置~/.bashrc文件

    每個用戶主目錄下都有一個.bashrc文件,記錄了每次進入終端后自動執行的命令。由于這是隱藏文件,所以默認情況下看不到。你可以輸入vi ~/.bashrc(看清楚vi后面的空格)用vi編輯器去編輯它,也可以在Linux圖形界面中要求顯示隱藏文件,然后通過操作系統自帶的有圖形界面的文本編輯器去編輯它。在此文件末尾加上以下內容
    ulimit -s unlimited
    export OMP_STACKSIZE=200M
    export Multiwfnpath=/home/sob/Multiwfn_[版本號]_bin_Linux
    export PATH=$PATH:/home/sob/Multiwfn_[版本號]_bin_Linux
    然后保存文件。

    下面解釋一下以上命令的意義。

    ulimit -s unlimited用來去除某些操作系統對堆棧內存使用的限制。某些系統默認的限制設置非常腦殘,不這么設一下的話用Multiwfn處理稍微大一點的波函數都會出現Segmentation fault報錯而終止。

    export OMP_STACKSIZE=200M用來將OMP_STACKSIZE環境變量設為200M。Multiwfn并行運算是通過OpenMP技術實現的,即計算會分攤到不同的線程上,往往有很多數組要儲存在每個線程的堆棧內存里。每個線程可以用的堆棧內存量上限就是通過OMP_STACKSIZE來設的,以上例子設成了200MB通常夠用了,如果不夠的話會導致計算崩潰。并行核數乘以OMP_STACKSIZE值必須顯著小于物理內存可用量。

    Multiwfn目錄下的settings.ini文件記錄了Multiwfn的配置信息。Multiwfn啟動時首先在當前目錄下尋找settings.ini,如果找不到,則會在Multiwfnpath環境變量設定的目錄下找settings.ini,如果還找不到,則會使用默認設定(和程序壓縮包里settings.ini里的原始設置相同)。由于在Linux下啟動Multiwfn時通常不是在Multiwfn目錄下啟動的,這是為什么上面要定義Multiwfnpath環境變量,用來避免Multiwfn找不到settings.ini。

    PATH是Linux系統的一個重要的環境變量,里可以包含一大堆目錄。如果將一個可執行文件所在目錄加入其中,那么在任意目錄下都可以直接輸入可執行文件名而不用帶著目錄名就可以啟動之。如上將Multiwfn所在目錄加入PATH環境變量就是為了這個目的。


    5 增加可執行權限

    Multiwfn的普通版的可執行文件是Multiwfn目錄下的Multiwfn,noGUI版是Multiwfn目錄下的Multiwfn_noGUI。現在給它們加上可執行權限使之可以被運行。

    對于普通版,在終端里運行chmod +x /home/sob/Multiwfn_[版本號]_bin_Linux/Multiwfn。如果是noGUI版,顯然把其中的Multiwfn替換成Multiwfn_noGUI。


    6 配置settings.ini

    編輯Multiwfn目錄下的settings.ini,搜索nthreads,將之數值改為計算時要用的并行核數,通常設為CPU的物理核心數即可。

    settings.ini里還有幾個其它設置想改的話可以根據需要修改一下
    ?formchkpath:定義的是Gaussian目錄下的formchk程序的路徑。formchk是干嘛的在《詳談Multiwfn支持的輸入文件類型、產生方法以及相互轉換》(http://www.shanxitv.org/379)里明確說了。如果把它設成了formchk的實際的路徑,Multiwfn就可以直接載入Gaussian的chk文件(在載入時會自動調用formchk轉換成fch文件后載入)。
    ?orca_2mklpath:如果設成了ORCA目錄下的orca_2mkl可執行文件的路徑,Multiwfn就可以直接載入ORCA計算產生的gbw文件(在載入時會自動調用orca_2mkl轉換成molden文件后載入)。
    ?gaupath和orcapath:當它們分別設成了Gaussian和ORCA的可執行文件的路徑,Multiwfn的一些功能才能自動調用Gaussian和ORCA進行計算,如《使用Multiwfn超級方便地計算出概念密度泛函理論中定義的各種量》(http://www.shanxitv.org/484)介紹的功能。


    7 測試

    退出終端(關閉終端窗口,或者斷開鏈接),然后重新進入終端,之后直接輸入Multiwfn(普通版)或Multiwfn_noGUI(noGUI版)應當就能進入Multiwfn了。之后可以隨便做簡單的測試,比如載入Multiwfn程序包自帶的examples目錄下的文件然后做簡單的計算。例如載入examples/CH3CONH2.fch,之后依次輸入
    9
    8
    屏幕上馬上就會輸出《Multiwfn支持的分析化學鍵的方法一覽》(http://www.shanxitv.org/471)里介紹的拉普拉斯鍵級。


    8 其它

    如果你是通過純文本界面連接遠程Linux服務器并在上面執行Multiwfn的普通版,并且發現啟動Multiwfn時會短暫卡住,在~/.bashrc文件末尾加入export DISPLAY=":0"可以避免。

    《在Linux系統下安裝Multiwfn 3.6的演示(CentOS 7.6)》(https://www.bilibili.com/video/av41402462/)是一個較老版本Multiwfn在Linux下的安裝演示,如果你在follow上文時遇到困難可以參考。里面有些流程和細節與本文不同,以本文為準。

    久久精品国产99久久香蕉