• Multiwfn的計算靜電勢的內部代碼速度得到了巨幅提升!

    2021-Aug-31補充:本文提及的Multiwfn采用的新的靜電勢計算方法已經正式發表于Phys. Chem. Chem. Phys.期刊,請閱讀《Multiwfn使用的高效的靜電勢算法的介紹文章已于PCCP期刊發表!》(http://www.shanxitv.org/614),里面包含更多測試數據和相關事項的說明。


    Multiwfn的計算靜電勢的內部代碼速度得到了巨幅提升!

    文/Sobereva@北京科音  2020-Jul-11


    1 前言

    Multiwfn是如今已非常流行的量子化學波函數分析工具,主頁見http://www.shanxitv.org/multiwfn。Multiwfn最早版本計算靜電勢的代碼速度很慢,為了使得靜電勢分析相關的功能盡可能有實用性,后來Multiwfn的大部分涉及靜電勢分析的功能中都支持了調用cubegen算靜電勢,在《Multiwfn現已可以調用cubegen使靜電勢分析耗時有飛躍式的下降!》(http://www.shanxitv.org/435)中做了專門介紹,這使得靜電勢計算占大頭的分析的耗時甚至降低兩個數量級,在速度上非常理想,但是這樣做仍有不足:
    1 用戶的機子必須裝了Gaussian。然而很多人沒錢買Gaussian,或者被Gaussian給ban了,想買也買不了。
    2 輸入文件必須含有基函數信息。具體來說,fch/fchk可以直接用,如果是molden/mwfn/gms格式,也可以先用Multiwfn的主功能100的主功能2轉成fch再當輸入文件,這樣也能調用cubegen算靜電勢。但如果輸入文件是wfn、wfx這樣的只含GTF信息的格式,就沒法用cubegen加速了

    最近壇友coolrainbow與我聯系,提供了一套基于他開發的LIBRETA電子互斥積分庫的高效的靜電勢計算代碼,比之前版本Multiwfn內部的靜電勢計算代碼快非常多。從2020-Jul-11版更新的Multiwfn開始,這套新代碼已經植入Multiwfn用于靜電勢計算。Multiwfn支持的任何含有波函數信息的格式(wfn/wfx/mwfn/fch/molden/gms)都可以基于這套代碼計算靜電勢。


    2 速度測試

    下面通過幾個例子對新的、舊的Multiwfn的內部靜電勢計算代碼,以及調用cubegen計算靜電勢時的計算耗時進行對比。使用2*XEON-E5 2696v3(共36核)在CentOS 7下進行測試。

    RESP電荷的計算是Multiwfn中非常常用的功能,見《RESP擬合靜電勢電荷的原理以及在Multiwfn中的計算》(http://www.shanxitv.org/441)。這里計算18-輪烯(C18H18)在def2-TZVP基組下的波函數(1062個GTF)的RESP電荷。

    新的靜電勢計算代碼比老的快約40倍!在個人的4、6核機子上,如果是老版本Multiwfn,對這樣大小的波函數算RESP電荷幾乎算不動,得等半個小時左右,而使用新版本后就輕輕松松了,半分多鐘就能算完。

    還是上面的體系和任務,下面再與調用cubegen時的耗時對比一下

    雖然核數少的時候沒有調用cubegen快,但對于十幾核的服務器,新代碼和cubegen計算速度就基本沒差別了,在幾十核的服務器上速度甚至比cubegen還要明顯更快!注:G16的cubegen計算靜電勢名義上是支持并行的,但計算擬合靜電勢電荷時,擬合點的位置是不規則排布的,這種情況下cubegen基本沒并行效果,在筆者來看這是Gaussian開發者考慮不周所致,沒有把這種場合并行化做好。

    對于用主功能12做分子表面靜電勢分析,加速的效果和上面也是相同的。

    下面是用主功能5計算靜電勢格點數據速度的對比,對象是多巴胺(22個原子,6-311G(d,p) 基組,440 GTF),共計算53.8萬個點

    由于Multiwfn老版本的計算靜電勢格點數據的功能專門對這種任務做了格點排布層面的特殊優化,而新的靜電勢計算代碼是對每個點獨立計算的(即沒有根據格點的矩形分布特征做額外特殊優化),所以速度提升幅度沒擬合靜電勢電荷的情況那么夸張,但仍快了兩倍左右。由于cubegen在計算格點數據時應該是針對格點分布做了充分的優化,而且考慮了殼層/基函數的收縮來提升代碼效率(而Multiwfn的靜電勢代碼是純粹基于GTF做的),因此耗時明顯更低,并且此時有并行效果(4核時30秒,16核15秒)。


    3 總結&其它

    目前Multiwfn新版本對于靜電勢計算對規則是這樣的:
    1 如果輸入文件是fch/fchk/chk,并且settings.ini里如實定義了本機里cubegen的位置,cubegen會被自動調用算靜電勢(不是所有算靜電勢的情況都會調用,支持的任務類型在http://www.shanxitv.org/435里說了)

    2 對于其它情況,Multiwfn自動使用coolrainbow開發的新的代碼計算靜電勢。但如果想改為老版本代碼,把settings.ini里的iESPcode參數從默認的2改為1即可。

    如果你是Gaussian用戶且使用的是核數較多的服務器,而且做的和靜電勢有關的分析不涉及計算靜電勢格點數據(比如不是用主功能5,或者做靜電勢盆分析之類),那么沒必要調用cubegen,直接用Multiwfn自己的靜電勢代碼計算即可。

    重要提示:測試發現,Windows版Multiwfn做靜電勢相關的計算時,當并行核數(settings.ini里的nthreads控制)超過10左右,繼續增加核數會導致耗時不降反升,核數特別多的話甚至卡住不動。因此若設的nthreads大于10,Multiwfn會自動把計算靜電勢部分的并行核數降為10。如果你的機子有更多核且想充分發揮性能,應當改用Linux版。Multiwfn的其它功能沒這個問題。

    調用cubegen計算靜電勢、基于Multiwfn的新的和舊的靜電勢計算代碼這三種情況下靜電勢計算結果會有細微差別,但完全是可忽略程度,因此和老版本結果仍然完全有可比性。

    如果大家發現新版本Multiwfn有任何bug,歡迎反饋。

    由于這部分新代碼的引入,Multiwfn的編譯方式略有改變。目前Multiwfn源代碼包里關于新的靜電勢計算代碼有兩個版本:
    (1)較快的版本:這是Multiwfn官網上預編譯版在編譯時用的,上面的測試也是對于這個版本而言的。缺點是編譯耗時很高,基于這個版本的Multiwfn完整編譯需要20分鐘左右。
    (2)較慢的版本:計算靜電勢速度不到上面的一半,但編譯耗時低幾倍。
    用戶可以自行決定基于哪個靜電勢代碼編譯Multiwfn。如果你不怎么需要計算靜電勢,編譯時可以基于較慢的版本編譯。默認是編譯較慢的版本,要編譯較快的版本請注意閱讀源代碼包里的說明文件。


    4 致謝

    在此文最后,筆者誠摯感謝coolrainbow提供基于LIBRETA庫的新的靜電勢計算代碼。如果靜電勢分析不是調用的cubegen,且iESPcode是默認的2,即使用的是這套新的代碼算的靜電勢,在寫文章的時候,在引用Multiwfn原文及How to cite Multiwfn.pdf文檔里提到的相關文章的同時,也建議引用coolrainbow開發的LIBRETA電子積分庫的原文:Jun Zhang, J. Chem. Theory Comput., 14, 572-587 (2018)。

    2021-Aug-31更改:由于介紹此靜電勢算法以及在Multiwfn中的實現的文章已專門發表在Phys. Chem. Chem. Phys. DOI: 10.1039/d1cp02805g,因此目前請按照《用Multiwfn使用的高效的靜電勢算法的介紹文章已于PCCP期刊發表!》(http://www.shanxitv.org/614)文末的要求引用Phys. Chem. Chem. Phys.上的文章。

    久久精品国产99久久香蕉