• 雜談Multiwfn從1.0到3.0版的開發經歷

    雜談Multiwfn從1.0到3.0版的開發經歷

    文/Sobereva @北京科音   2013-Mar-29

     

    在Multiwfn 3.0發布后,在疲憊、激動之余,回想起從Multiwfn 1.0到3.0版這三年多斷斷續續且艱苦的開發歷程,頗有點感慨。當初只是一個很小的念頭,臥在床上寫了幾百行的程序,想不到這個小程序如今成為了Multiwfn 3.0,有了約三萬行代碼,被近百篇文章所使用,用戶覆蓋中國、歐洲各國、美國、印度甚至伊朗。這段開發歷程是個珍貴的回憶,不禁想寫個帖子零零碎碎地閑談一下,寫寫自己當時的想法,等以后很可能就淡忘了。詳細介紹某量子化學軟件的開發歷史,特別是記錄開發者自己每個階段想法的文章我未曾見到,但如果有,我認為一定會很有趣很值得一讀。等再過幾十年,有人嘗試總結一次中國量化軟件發展史的時候,說不定本文的一些閑雜內容還能當做素材呢。

    Multiwfn是波函數分析軟件,所以,這篇閑談自然要上溯到筆者什么時候開始對波函數分析開始有興趣。

    筆者開始自學量化大抵是從大二的時候。后來聽說到有AIM這么個理論,貌似很有趣,但不明內容。大概在大三的時候,在網上偶然看到一個23頁的Bader寫的綜述AIM的pdf文檔,是總共有五卷售價奇高的Encyclopedia of Computational Chemistry中的一節。當時無聊的課程、實驗多得很,我把那23頁打印出來,擠出時間在上課時間看、在做實驗時等著反應完成的時間看。雖然當時尚沒法完全讀懂,但是起碼那些讀懂的內容,比如鍵徑,令我覺得應該用fascinating來形容,相當令我著迷。當時還萌生了個念頭,想把AIM和前線軌道理論給融合起來來更好地解釋反應如何進行。不過,我現在已經對前線軌道理論有點嗤之以鼻了,大抵是后來接觸了概念密度泛函的緣故吧。接觸AIM,應該說是我對波函數分析感興趣的最初契機。我最早接觸的AIM程序則是AIM2000。記得是在一個酷熱的夏天,在宿舍里熱得難以入睡,將AIM2000 demo版對照著幫助文件把玩了一晚上,基本都玩通了。好不容易把電子密度的等值線+梯度線圖做出來,看著挺欣喜的,之后還專門寫了個簡單的AIM2000中文教程。Multiwfn的拓撲分析模塊的操作方式的設計,有很多方面都是借鑒了AIM2000。

    GsGrid如今早已停止開發,其功能已經全部融入進了Multiwfn,或許有人還記得這個程序。這個程序,和Multiwfn后來的開發有很微妙的聯系。開發GsGrid的動機是因為,在那個時候,網上有人問怎么做出諸如電子密度之類實空間函數的平面圖。雖說這種圖在文獻里到處都是,可是,起碼對于高斯來說,當時要想做出這種圖還真是沒有好法子。雖然gview已經可以直接做出截面的等值線圖了,但這也是后來的事了(當時還是以gview 3.0.7版本為主)。雖然我那時候倒不需要做平面圖,但是為了給大家帶來方便,用了好像是一個通宵就寫出了最初的GsGrid程序(然后當天發布到網上,中午我就給我親戚修電腦去了)。它用來讀取高斯生成的cube文件,然后提取其中指定平面上的數據,以便用sigmaplot等程序作圖。GsGrid中的gs代表Gaussian。(后來在google學術搜索中發現已經有其它程序叫這個名字了,早知道如此可能當初就換個名字了)

    后來逐漸給GsGrid加入了更豐富的功能,版本號也一直在提升。其中對格點文件相互運算的功能很有用,比高斯自帶的cubman好很多。zhou2009對GsGrid的開發給予了熱情的鼓勵,他的的帖子很多都用了GsGrid,特別是用來做密度差平面圖。最初GsGrid只是在論壇上發布,后來建了個主頁,不過我朝的免費網絡服務歷來都很不靠譜,說停就停,一點責任心都沒有,記得是換了兩三次主頁空間,最后,終于在微軟提供的開源項目codeplex上定居下來,地址為GsGrid.codeplex.com,到現在依然能訪問。

    AIM2000讀取的是wfn文件,它包含了波函數信息。在2009年11月,我萌生一個念頭,想寫個教學目的的帖子,介紹怎么利用wfn文件中的信息計算出不同位置的電子密度值。于是,就試著寫了個小程序來實現此目的。沒有費多少時間就完成了,也就幾百行代碼。不過,我卻違背了我的初衷,那個教學貼子沒有寫,原因是,我對著個小程序產生了極其濃厚的興趣!想進一步擴展它的功能而懶得寫那個帖子了!我發現,很多我想實現的目的,利用wfn文件,都可以憑借我自己的能力不費太多力氣就能實現出來。我最初就想到以前搞量化的人遇到的難題:繪制平面圖沒有便利的工具。雖然GsGrid確實能達到這個目的,但是畢竟步驟還是稍微繁瑣,得讀入格點文件,導出平面數據,然后再弄到sigmaplot里。而且只是繪制一個平面,卻要計算一個三維空間里一大堆點的數值,這明顯劃不來,浪費了很多計算時間。再有,如果要繪制的平面是斜著的,那么只能將格點數據投影到那個平面上,由于GsGrid并沒有利用插值方法,所以投影出來的斜面數據質量有限,在sigmaplot里做出的圖有鋸齒,除非格點精度頗高才不明顯。為了能給大家一個更便利的工具來做出平面圖,Multiwfn第一個版本就加入了平面圖的繪制功能。只要敲幾個鍵,很漂亮的圖形就能很快地直接輸出到屏幕上,真是解決了繪制平面圖這個老大難問題。

    Multiwfn用的是DISLIN圖形庫來繪制圖像。當初為實現繪制平面圖的功能,在網上搜了搜能給Fortran提供接口的圖形庫,索性沒怎么費勁就找到了DISLIN。當初還考慮是否用MathGL圖形庫,雖然我到現在也沒用過它,不過我想肯定不如DISLIN。而且,幸好DISLIN提供了簡單的制作圖形界面的功能,后來直接把Multiwfn的圖形界面也用DISLIN給做了。DISLIN最令人頭疼的是手冊寫得不好,全都是子程序的解釋,而教程、例子很少,總得靠自己摸索。包括到現在,調用DISLIN來實現新的繪圖功能,我還是得拿以前些的代碼做參考才行。記得最初嘗試調用DISLIN是一天晚上,在Multiwfn里計算了類似卟啉的平面大體系的平面上的電子密度數據,然后DISLIN立刻將圖像輸出出來,雖然那幅圖現在看起來沒什么,但那時感覺真是驚艷無比!十分興奮!(那圖還留著,如下所示)

    Multiwfn 1.0在2009年11月27日正式發布到論壇上。好像是2010年3月,給Multiwfn在codeplex上建了project,也就是現在的Multiwfn官網http://multiwfn.codeplex.com。(我很納悶,明明這官網上就能下載所有版本,速度也不慢,怎么偶爾還會有人向我索要程序。有人上不了外網而無法訪問,翻一下wall不就得了)

    2017-Apr-5注:由于微軟的codeplex開源項目已經停止運營,Multiwfn主頁已變更為http://www.shanxitv.org/multiwfn

    Multiwfn的全稱是Multifunctional wavefunction analyzer。名字主要來自于wavefunction analysis這個概念。其實,wavefunction analysis這個叫法即便是到現在,在學術界里用得也不多,但是我覺得這個叫法很貼切。這個叫法大抵是我從Introduction to Computational Chemistry(2ed,Jensen)那本書里的第9章的標題最初學來的。后來看到Cioslowski在Encyclopedia of Computational Chemistry中的一節的標題也用了wavefunction analysis這個名字,而且內容也正是我所感興趣的那些(雖然Jensen和Cioslowski的文中對波函數分析方法總結得都并不全面),于是我就堅定了用wavefunction analysis這個詞描述Multiwfn的功能,并由此命名程序。

    后來,對Multiwfn的開發逐漸有些上癮,不斷擴充、完善功能,版本號一路升至1.5:
    1.0 Release date: 2009-NOV-27
    1.1 Release date: 2010-JAN-17
    1.2 Release date: 2010-FEB-9
    1.3 Release date: 2010-APR-24
    1.4 Release date: 2010-JUL-8
    1.5 Release date: 2010-OCT-2
    不斷更新程序的同時也在不斷更新手冊。1.x版本的手冊其實內容很簡單,純中文,就是給了一大堆例子,不怎么系統、詳細,沒什么理論上的介紹,那些例子也沒有什么物理意義。不過到了1.5版,手冊還是達到了兩萬七千字。

    最初寫這個程序的動機其實并不復雜,一方面是自己的興趣,另一方面是給大家解決實際問題。這兩個目的到現在依舊沒變,但如今的目的則不止于此。后面會談到。

    Multiwfn的開發從一開始就是很耗費精力和時間的。名義上我是“忙里抽閑”來開發Multiwfn,但實際上,Multiwfn的開發可能占了我約一半的科研時間。由于開發Multiwfn名義上不算“正事”,所以,每當拿出大把時間開發Multiwfn的時候,總覺得背負著一些壓力,有點負罪感。可是,不花時間是絕對做不好的,譬如有的很小的bug往往就得花一兩天時間調試才能揪出來。然而,凡是發現任何bug,特別是會導致計算結果錯誤(而非導致報錯)的bug,我一定會立刻不惜代價去解決,否則用戶拿著我的程序得到了錯誤的結果,審稿人也沒發現,最后卻誤導了文章讀者,那真是誤人子弟,Multiwfn成了禍害。尤其是當Multiwfn的用戶逐漸變多之后,必須抱有更強的責任心才行。

    其實原本想花一兩年時間寫一個從頭算程序,名字叫saint,寫了快一千行了,但是由于Multiwfn的開發繁忙,saint夭折了。

    2010年底,某日晚上大概10點多歸宅,得知Multiwfn終于第一次被正經的學術刊物的文章所引用(J. Phys. Chem. A, 114, 13257),當時很高興,這也標志著,Multiwfn不再只是流傳于網上,而是終于在學術界露頭了。

    Multiwfn的logo算是妙手偶得。在Multiwfn里繪制Li6的ELF圖的時候,在某種調節色彩刻度下,我發現造型、整體顏色挺雅致,也充分體現了我追求的科學與藝術相融合的理念。由于之前也沒考慮過Multiwfn的logo,看到這圖我就定下來將它用作logo了,并且放在了之后2.0版的封面上。

    1.x系列最后一個版本是1.6,當時還做了個ppt給幾個人大體介紹了一下1.6版,這ppt在Multiwfn主頁的other resource一欄里能找到。不過1.6并沒有正式發布,因為我決定一口氣將1.6做得更強。隨著代碼的開發,逐漸我覺得已經夠資格稱為2.0版了,于是2.0版于2011年3月9日發布。

    如果說1.x版本只是序曲、還只是憑興趣做著玩的階段,那么Multiwfn 2.0的發布,就標志著Multiwfn正式進入學術同行的視野了。Multiwfn 2.0相對于1.5做了無數的改進,更新內容能列出一大長串。那時我在計算化學界有名的郵件列表CCL上發了個Multiwfn 2.0發布的消息。我的blog(www.shanxitv.org)上也相應地發了消息,其中用了一張四老外的圖,很能表達我當時的心情

    那時我決心讓Multiwfn成為世界級的波函數分析程序,而不僅僅只在華人的圈子里流傳。于是,我下定決心將Multiwfn的手冊重寫,寫成詳細的英文版。手冊編寫過程很辛苦,花了大概一個月,終于寫完了90頁左右的手冊。手冊的編寫模式受到了我之前讀過的AOMix的手冊的一些影響。AOMix是一個很難用的、功能少而且還收費的波函數分析程序,雖然我不怎么待見AOMix,不過它的手冊寫得令我受到很大啟發。因為它不光講程序操作(其實程序操作沒講清楚,挺亂的),而且還花了至少一半篇幅介紹理論,特別是Stout-politzer劃分、SCPA劃分、DOS圖、CDA這些內容的介紹我很感興趣,從這手冊中學了很多知識。于是,我在編寫Multiwfn手冊的過程中不像絕大部分程序手冊那樣只是介紹怎么用,還特意將所有Multiwfn涉及到的理論都進行講解。在后來,我還逐漸追求讓Multiwfn手冊里的實例都展現出一定物理意義。這樣,看了手冊,不僅學了理論,掌握了操作,還知道這些功能能起到什么實際價值,我想這樣是最好的。手冊的編寫和開發Multiwfn程序一樣,本著精益求精的態度來做。寫手冊的時間,估計是我開發程序時間的大概1/3。

    2.0版之前都是在compaq visual fortran 6.5環境下開發的,這個編譯器很好用,對代碼兼容性很強,產生的代碼運行速度也還不錯。但是最大的缺點就是不支持OpenMP。那時多核早已普及,包括我自己的臺式機和筆記本也都是四核,所以決定從2.0版開始用OpenMP來并行化,這對于提升格點數據的計算速度來說尤為重要。這就使我不得已舍棄了CVF6.5而改用intel visual fortran了。我本來是很不情愿移植到IVF上的,一方面因為這東西依賴于臃腫的visual studio 2008,還因為IVF不僅收費還得單獨裝。不過最終還是遷移到了IVF,用慣了發現還是挺好的用的,即便是串行代碼速度也比CVF快。從1.5到2.0的升級使得Multiwfn運行速度有了質的飛躍。不過,考慮到很多用戶還是在用CVF6.5作為編譯環境,所以Multiwfn的windows版源代碼包里至今依然有CVF6.5的編譯方法,只要對現有代碼稍加改動就能順利地編譯并且使用。

    手冊從2.0起沒有了中文版,導致后來很多人很想要中文手冊,甚至還去讀1.x的中文手冊去(1.x版就在Multiwfn官網的download頁面里就可以下,手冊就是readme.txt,在壓縮包里),其實根本沒必要,我也很反對這樣。1.x版的手冊內容很少,寫得也遠不如2.0及以后的好。而且搞量化的基本都是研究生或以上的級別,學術向的英文看不懂我覺得不可能,真若如此那還怎么搞量化?。實際上,對于Multiwfn的大部分應用我也都寫過專門的中文的帖子發在網上,對原理和操作進行了往往比手冊里更詳細的說明,這些帖子都列在了Multiwfn官網的other resource一欄里,也發到了筆者的百度blog上,總共有近20篇,共17多萬字。我一直以來有個很頭疼的事,就是用戶總是不看費盡心血寫的手冊!我已經盡力將手冊的門檻弄得盡可能低、編排盡可能合理,但是經常還是有人問那些手冊里寫得很清楚很淺顯、稍微動一下頭腦看一下手冊就明白的問題(有些問題在手冊前三頁就能找到答案!)。這些人對于我寫的那些Multiwfn相關帖子也往往不認真看,還抱怨沒中文手冊(很多人只是在回帖中叫好湊熱鬧,帖子連讀都沒讀)。

    Multiwfn 2.0發布后我開始撰寫Multiwfn程序的介紹文章,這樣對程序未來發展有好處,畢竟一個私人的來路不明的程序總不如一個發在正經刊物上的程序讓人覺得用起來放心。最初投到了JCTC去,被拒(實話說我對JCTC很無語。特別是看到比Multiwfn的其中一個子功能都差得甚遠的NCIplot的文章發在上面之后)。然后就投到了JCC去。編輯讓大修,一個審稿人比較友善,另一個故意找茬,態度模棱兩可,其中吐槽點之一是嫌Multiwfn程序沒有Linux版。之前Multiwfn一直都是基于Windows的,雖然先前也考慮過發布Linux版,但只是實驗性的。既然審稿人這么說,得去對付,而DISLIN圖形庫也恰好有Linux版,我就干脆花了大概兩三天時間主要對Multiwfn的圖形界面部分的代碼進行調整,使得在Linux環境下用起來也正常(不過,我一直沒有自信用戶能否在Linux下順利使用Multiwfn,因為用了DISLIN庫,所以程序就得依賴于其它一堆零碎的庫文件,雖然那些庫在我用的RHEL系統都自帶了,但是對于其它系統的用戶可能就不得不自己裝缺失的庫之后才能用了。Linux系統下的程序老是三天兩頭地提示缺庫,這是我對Linux不爽的最主要原因之一)。這樣,在回復審稿人的時候Linux版就已經搞好了。稿件返回后就接受了,后來發表在J. Comp. Chem. 33, 580-592 (2012)上。我希望使用Multiwfn的用戶都引這一篇,同時引Multiwfn的網址也好,但不要只引網址。主要原因是因為引用網址的話引用次數很難統計。可惜目前還是有小一半的用戶在發文章時只引了網址。JCC這篇介紹文章對應的是Multiwfn 2.1.2版,后來加入的無數重要功能都沒有出現在文中。可能以后會再單獨寫一篇文章投出去介紹Multiwfn又有了哪些重要的擴充改進。

    值得一提的是我十分尊敬的AIM理論的創始人Bader于2012年1月15日因肺病與世長辭,這是波函數分析領域的不可估量的損失。為此,我在Multiwfn的主頁上掛了一個月的訃告消息。

    中國量子化學軟件的發展實在令人覺得很遺憾。Zork曾寫了篇《國產量子化學程序覆滅記》,其實國產量化程序曾經還是有不少的,就算不能做到世界級軟件那么強大,但起碼堅持發展下去,總會在個別方面富有特色,因而能夠具有價值。可惜的是,眼下,國產量化軟件一片荒涼。雖然也有有一定影響力的,但屈指可數,特別是,那幾個軟件對絕大部分量化工作者沒什么用處,太過于學術化、復雜了。在2011年11月的時候,我去廣州參加了一趟宏劍ICTCLS'11大會。當時老黎做大會報告,當時具體說什么已經不記得了,我記得最清楚的,就是他說中國用的量化軟件基本全靠進口,國內的軟件開發都是由各個課題組各自為陣,也不公開(至少也沒商品化),難成氣候。雖然對目前國產量化軟件的這種形勢早已認識得很清楚,但晚上從會場回到賓館,想起老黎的話,不禁又嘆起氣起來。當時決心,要讓Multiwfn打破國產量化軟件的僵局。同時,也決心將Multiwfn“擴大化”,也就是決不滿足于Multiwfn的現狀,而是使勁努力對它不斷擴充和完善,讓它變成最強的波函數分析軟件。從而有朝一日,將Multiwfn做到NBO的影響力,成為中國量子化學軟件的標桿。

    我開發Multiwfn的原因不僅之前提到的那些,其實還有個人欲望的驅使,以及對現有波函數分析方向的學術軟件的強烈不滿,意圖去徹底取代它們。這里個人欲望是指,我想把一切我感興趣、我認為有用的波函數分析方法全都納入Multiwfn當中去,使得Multiwfn成為終極、無與倫比的波函數分析程序。但唯獨NBO程序涉及的功能我不打算納入Multiwfn,因為NBO程序已經做得足夠好,重新把它們實現也很費精力,而且NBO4之前的版本也都免費且已經嵌入了高斯里。而我所謂的對現有學術軟件不滿,具體來說是,絕大部分波函數分析軟件都很糟糕,然而由于沒有什么可選擇的余地,導致千千萬萬的量化工作者不得不很辛苦地鼓搗那些糟糕的程序,這令我很看不慣。糟糕分為好幾類原因:(1)收費。就那么點功能(比如AOMix),還好意思厚臉皮收費。 (2)超級難用。比如DGrid,手冊看得我頭疼,寫輸入文件很麻煩。再比如TopMod,那么點分析卻要反復敲一大堆命令,設計得簡直匪夷所思。 (3)速度慢,比如aim2000,搜索臨界點速度很慢,對盆積分就更別提了。 (4)程序功能單一。每種波函數分析往往只能做一種分析,十分缺乏整合性。 (5)程序不公開。有的程序還好,能向作者免費索取。然而很多程序,作者根本不提供,根本就沒打算讓別人能用上,這是最最糟糕的。如果我沒誤會的話,AdNDP程序就是如此,刻意不公開。Multiwfn的推出,徹底解決了這些糟糕的問題,目前已經令好幾十個波函數分析程序沒有任何存在的價值了。

    開發Multiwfn也有我個人的學術需求的原因在內。要想提出一些新的理論方法,就必須通過程序來實現、檢驗。如果只是用別人的程序,在別人的程序基礎上改會非常累。對我來說讀別人的代碼遠遠不如自己寫代碼愉快。當有一個自己的完善的程序,想實現什么新思路,基于現有的程序架構,實現起來會比憑空寫一個程序容易得多得多。有很多篇筆者的文章都是基于Multiwfn才實現的,其中的大量計算沒有其它任何現成程序可以做到。

    Multiwfn一直承諾著向大眾免費、開源。也有人想跟我合伙把程序弄成商業化賺錢,但我還是回絕了。Multiwfn的開發很耗精力和時間,目前沒有申請什么基金項目之類的世俗的東西,雖然筆者也憑借Multiwfn或許獲得了些許的影響力,但實話說,一直堅持三年多的Multiwfn的開發基本上是沒得到好處的,至少回報比起付出來說是很少的。但由于上述諸多因素,以及筆者目前對波函數分析和對Multiwfn程序自身的熱忱,以及懷著雷鋒精神,Multiwfn的繼續開發是不會停止的。不過,想到“賺錢是為了吃飯,吃飯是為了活著,活著是為了搞科研”,所以前些日子在Multiwfn主頁上增加了一個捐贈的鏈接,如果是真心喜愛Multiwfn且確實是有錢沒處使,倒是可以考慮捐贈。

    最初我在主頁上寫希望使用Multiwfn發文章的用戶能將自己發表的文章通過郵件發給我,這樣就方便我統計被引用次數,不過極少有人這么做。后來我發現google的學術搜索快訊挺好用的,每當Multiwfn在學術搜索上有新結果就會自動用郵件通知。所以我的郵箱里會時不時收到以“學術搜索快訊 - [ multiwfn ]”為標題的郵件,每當看到這樣的郵件就會有一絲愉悅感。然后會將郵件里的文章添加到Multiwfn主頁上,并且下載一份文章pdf文檔存著。

    再回到時間軸上。大概從ICTCLS'11之后,我逐漸定下來了Multiwfn 2.x系列版本的主體開發計劃。雖然Multiwfn每個版本都有一大堆改進,但是每當版本號增加0.1,一定會有一個重大的功能(主功能)會被加入。那一系列開發計劃包括ELF/LOL/拉普拉斯函數的拓撲分析、AdNDP、CDA、定量分子表面分析、盆分析。

    最先把ELF/LOL/拉普拉斯函數的拓撲分析加了進去,成為了2.2版(2011-Nov-28),而電子密度的拓撲分析在之前的2.1版(2011-Jun-26)里已經有了。記得當時寫ELF/LOL的導數公式、電子密度的三階導數推了好幾頁紙,好不容易才調試到代碼徹底沒有錯誤。然后,在2012年學生們放寒假期間將定量分子表面分析功能加了進去,并且把GsGrid全部功能整合了進去,成為了2.3版(2012-Feb-18)。從此之后GsGrid不再做任何更新,而原屬于GsGrid范疇的功能則在Multiwfn的主功能13里進行了后續的擴充和改進。之后,同年五六月份花了小一個月時間將AdNDP功能加了進去,成為了2.4版(2012-May-6)。然后,在暑期有個念頭,想提出一種基于模糊重疊空間的定義鍵級的方法,順帶著寫了個模糊空間分析的主功能,成為了2.5版(2012-Aug-1)。然后,10月份左右不務正業一口氣把CDA功能加了進去,成為了2.6版(2012-Nov-6)。2012年對于Multiwfn的進一步壯大真是很重要,代碼總行數不斷增加。從一萬多行不知不覺地增長到近兩萬六千行。而在這一年,Multiwfn被引用次數暴增,出乎了我的意料。

    我發現有人在百度百科上創建了Multiwfn的詞條,創建日期是2011年12月04日。這是好事,后來我也適當地更新這個詞條,但是百度百科本身實在很惡心,和wiki比不僅很山寨,而且內容的改動總是很容易通不過審核。居然連自己的程序的介紹都沒法隨意修改。所以百度百科上的Multiwfn詞條內容很少,我也不打算大規模擴充了,否則,若是寫了好多到時候還是莫名其妙地不給理由地審核不通過那真是浪費時間。以后可能到wiki上創建一個Multiwfn的詞條。

    在2012年四月13~16日在四川大學召開的中國化學會第28屆年會上,我做了個墻報貼在展板上,意外地看見我斜對面的墻報上的圖就是拿Multiwfn做的,沒記錯的話是電子密度填色圖。當時也有不少用戶和我相互交流了一下。那個墻報的制作花了我一整天的時間。Multiwfn的程序設計是帶有藝術思想的,我也一直倡導科學和藝術的結合,所以我不想把墻報做得很普通,僅僅是文字和圖片的簡單排列。由于筆者喜歡黑色,所以黑色就確定為了背景基調,黑色作為墻報的背景實在是很少見,但是我還是大膽地這么做了。在photoshop里把標題的文字效果調好之后,已經隱約開始覺得有整體氣勢了。后來將文字和圖片細致地填上、排布好,還特別注意了細節,比如避免圖片邊緣顯得突兀,特意做了半透明的勾邊效果。最后,想把黑色的背景上做些襯托效果,就想到了宇宙,這樣可以表現出包容、宏大和震撼力,襯托Multiwfn的價值。然后就在硬盤上找了找以前存的宇宙圖片,發現一個大概是X3那個太空游戲游戲的官方宣傳圖,圖片底色就是宇宙的漆黑,和墻報底色正搭配,于是就把這圖挪到墻報上了,看起來效果極好!整體效果十分符合筆者的審美,雖說對于學術的墻報來說,或許太個性了。充滿藝術感的墻報只用一次就丟掉太可惜,或者說,如果只用一次之后就沒有價值的話,那么墻報只是平庸的墻報,而不是art。目前這墻報一直掛在家里的睡房,一睜眼就能看見。墻報的高清圖可以在Multiwfn主頁上下載到,小圖如下

    那次去開化學會的前幾個月,恰好用Multiwfn的logo印了件T恤,于是那次開會時也穿上了,算是給Multiwfn打了打隱性廣告。T恤見下(衣服對我來說有些肥)


    2.6版發布后,就差一個盆分析功能還沒實現了。盆分析很重要,其實原本2012年上半年就想將它加入,但是這東西涉及到的算法著實比較復雜,有點覺得深不可測,所以先把比較有把握的功能都實現了。盆分析在2012年可以算是我的一個心病,這是必須實現的極其重要的功能,然而總擔心能否有能力實現好。最后終于在2013年的春節期間,一口作氣,拼盡全力奮戰寫了近兩個禮拜代碼,總算是把盆分析功能基本搞完了。然后就跑米國度假半個月去了,之后回來繼續奮戰盆分析代碼,花了幾天徹底搞完后又花了一個禮拜把手冊寫好,之后,3.0終于出爐了!此時Multiwfn約有三萬行代碼,是最初版本的50倍。手冊已有257頁,是2.0版本的近三倍。

    2.x版本每當版本號增加0.1,當發布的時刻,都感覺很疲憊,同時感覺大功告成,非常有成就感和快感,甚至有一點點死而無憾的感覺。當3.0發布,心中長久的頑疾徹底解除,這種感覺更是強烈。終于一步一個腳印,將之前規劃的數個大型的功能成功地、以完美的方式逐一完成了,微微覺得有點不可思議。3.0的推出,可以說意味著Multiwfn的主體結構都已經完成,因為除了NBO以外最重要最有用的波函數分析方法Multiwfn都已經能做了。就像大樓已經建好,未來只需要進一步擴建和裝修了。

    很多波函數分析程序開發完了就再也不更新了,特別是個人的免費的程序,畢竟不像商業軟件那樣更新了之后用戶得升級,從而還有利可圖。Multiwfn的開發絕對不會那樣。Multiwfn還有很多進一步發展完善的計劃,包括:(1)支持基于平面波的程序 (2)支持ADF (3)支持Crystal09程序 (4)改進等值面顯示速度和效果 (5)支持分布多極分析(DMA) (6)加快靜電勢計算速度 (7)支持AOSB鍵級分解 (8)電荷轉移積分 等等。

    Multiwfn 4.0什么時候會發布,這目前是很難想象的。實際上,從3.x到4.0的發展計劃還完全沒有具體想法。我只是打算將Multiwfn盡力做得更好。如果有朝一日4.0真的發布了,那么那時的Multiwfn的影響力應該已經很大(起碼是目前的三倍),在波函數分析領域已經具有了很重要地位,在國內量化工作者的研究中已經普及開來,程序在各個方面都已經幾乎完美無缺。

    Multiwfn目前有個明顯的弊病是顯示等值面圖的時候(除非用mesh方式顯示)少數情況下顏色要么對比度很低,要么有塊狀黑影,看著不舒服,而且顯示速度不理想,只能說是湊合用。尤其是在Linux版中,不管什么時候都有黑塊。顯示等值面圖目前是依靠DISLIN庫,無奈這個庫在這方面比較弱,我也沒有好辦法。估計3.x版會改進。但是改進起來很困難,如果靠OpenGL,寫起來估計得花一些力氣,而且程序估計就不止這么幾個文件了,會帶著一堆亂七八糟的零碎文件,而且Linux版到時候在用戶那里肯定又是一堆缺庫文件的提示,我很討厭這樣。還有人建議我用java或python給Multiwfn寫個殼之類的,我也拒絕了。因為到了用戶那里又要裝java、python運行環境。我很不愿意給用戶增添任何麻煩、任何負擔。

    前一陣子一個挪威的合作者問我能不能搞個Multiwfn在線版運行在他們服務器上,這個想法一開始覺得意思不大,而且太費時間。但仔細琢磨了一下,感覺到也是個好點子。想必,絕大多數有一定基礎的Multiwfn用戶是不想用在線服務器的,因為這也根本沒必要,因為在單機上運行得已經很好。所以,在線版本打算主要面向一些量化還沒入門者、結構化學的老師和學生、其它領域的研究者。在這個在線版本中只將Multiwfn最常用最核心的功能實現。在線版本將使得沒有任何經驗的用戶,乃至于中學生,都能很容易地使用。比如說,只要在網頁上畫個分子結構,點幾個復選框,在線服務器就自動調用量化程序對之優化,然后產生波函數文件,然后傳遞到Multiwfn里計算ELF數據,然后用戶就直接在網頁上可以看到ELF等值面、平面圖、曲線圖了,用起來沒有任何門檻,甚至不會用任何量子化學軟件的人都能用上Multiwfn。這樣一來,Multiwfn的影響力或許會沖破量化研究的圈子,普及到整個化學界。在線版還有一個好處,也就是不管在任何系統上,只要能上網就都可以用Multiwfn了,甚至在ipad上、在智能手機上都能做波函數分析。不過建立在線版Multiwfn還只停留在設想階段,什么時候有空去做它真是未知數。

    波函數分析是極其重要的,然而,在教科書里總是提及得甚少,絕大部分量化工作者對波函數分析不怎么懂。然而,從網上的帖子,明顯看得出大家很需要這方面知識來使自己研究的體系能被認識得更深入。還有一些人,根本就幾乎一點都不知道波函數分析是什么,有什么意義和用處。實際上,搞波函數分析方法的人很多,主要集中在歐美,但是很多重要的成果都只在相對較小的圈子里使用,其價值完全沒有得到應有的體現。主要原因之一是沒有好用的程序,這個問題Multiwfn基本已經解決了,但是,另一個主要原因依舊,也就是,廣大量子化學工作者不怎么懂波函數分析。特別是在我國,搞和波函數分析有關的理論的人幾乎沒幾個,做應用方面研究的人用的波函數分析方法大多也就基本僅限于AIM和NBO,或者根據分子軌道圖討論討論。很多研究文章如果加入更合適的波函數分析,明顯能使結論更充實、文章的結論更有說服力、理論意義更強。我深感我有責任在量化研究圈子里倡導和推廣波函數分析方法,讓研究者普遍對波函數分析方法有個系統、清醒的認識,并進而廣泛應用到自己的實際工作中。我覺得這個任務非得由我來做不可,我不做的話未來肯定也不會有人做,波函數分析的價值將永遠被冷落被忽視。特別是有一次,令我覺得波函數分析的普及程度之差簡直是到了可悲的地步。那次,我和一個北京某大學有些名氣的搞理論化學的有點自以為是的教授(波函數分析的外行)中午吃飯,一路上,他問我現在研究什么,我簡單說了說近期的波函數分析方法方面的研究工作,結果他馬上就急著說:你搞的這些都過時啦!幾十年前就已經研究得差不多了!現在都沒什么人搞啦!你搞的都是冷門啦!勸我不要繼續研究。繼續交談過程中,我發現他根本就沒讀過什么和波函數分析有關的東西,對近年來的發展現狀一概不知,充其量也就是知道Bader和他的原子盆這點概念,以為這點東西就是波函數分析的全部,對波函數分析能干什么完全不懂。我真是懶得和他繼續爭下去。那時我有點氣憤,我也更加認清楚,我需要做的,就是將波函數分析方法的概念、原理、意義、價值傳播給國內的研究者們,當波函數分析不再受忽視,諸如ELF、Mayer鍵級、福井函數這樣的最重要的概念都能普遍出現在量化教材當中,我想,那個教授也就只能收聲了。

    那次吃飯后,本來想寫個擬定為《波函數分析:被忽視的熱門領域》的帖子,但是當時有點事情耽擱了,待火氣消了,也懶得寫了。其實波函數分析領域一直在發展,新的概念層出不窮,其中不乏很多很有用的方法,例如2010年楊偉濤他們組提出的RDG分析方法普及得相當快(在中國的普及,我想主要還是多虧了我的《使用Multiwfn圖形化研究弱相互作用》一文)。特別是JPCA上,與波函數分析相關的文章總是接連不斷。若有誰說波函數分析已經冷門了,那么他已經out了。可惜,這些新進展基本都是圈子里的人熟悉。推廣得很不好。或者說,大部分這方面的研究者要么是缺根筋,要么是別有用心,根本就沒想要去推廣自己的方法。就連個現成的程序都不提供給大家,誰來用?

    Multiwfn的功能極其豐富,用法十分靈活,所以,即使我寫了很多帖子,手冊也編纂得極為詳細,但肯定依然沒有用戶能完全掌握Multiwfn的全部。(有時候,我看到引用Multiwfn的文章中,明明是Multiwfn支持的很好的功能,作者卻用了別的更難用的程序來做,覺得一定是作者沒有認清Multiwfn的功能和優勢所致)。同時,我也很想親自給用戶們多講講波函數分析方面的知識,包括最新的進展等等。所以,筆者很早就有計劃開Multiwfn用戶培訓班,但是以前時機還不夠成熟,因為Multiwfn的主體功能那時都還沒完全實現,特別是盆分析功能沒有實現。3.0版發布之后,就可以開始正式謀劃開辦培訓班了。這絕對不像很多黑心的軟件公司那樣,一個培訓班動輒上千乃至四五千。我打算今年7月下旬或8月上旬開,但是一切還都是未知數,反正最晚2014年內也絕對開了。培訓班不會只辦一次,可能比如一年辦一次。除了波函數分析和Multiwfn的介紹,也會借助培訓班的機會給廣大使用者進行答疑。

    筆者也一直籌劃著動筆寫一本波函數分析的書籍。雖然國外已經有不少和波函數分析相關的書,比如AIM方面的就有四五本,NBO也有兩本,但都屬于專著型。無論是國內還是國外,迄今都沒有一本以波函數分析為主題的書將廣泛的波函數分析方法進行系統的、簡明易懂的講解。而且,理論結合實際操作的書也是少之又少。我打算明年或者后年動筆,屆時會把各類波函數分析方法進行系統的介紹,會突出重點,深入淺出,盡量少用一些復雜的概念,使得非量子化學專業的人就算沒法100%讀懂,但肯定也能明白方法的目的、用處、價值何在,不會看得一頭霧水。而對于量子化學專業者,只要具備最基本的知識,肯定能完全讀懂。書里不僅講方法,也會結合Multiwfn程序給出大量計算實例,將理論和應用有機地結合起來。而市面上絕大部分書,都是講一大堆空泛的理論,雖然有的也給了具體應用來說明其可靠性和用處,但都沒講具體怎么實際操作,導致讀者很難將方法直接應用到自己的研究中去。我覺得,只有我才擁有這樣的條件,去寫一本貫穿理論+應用+操作的全面的波函數分析的書。書肯定是中文版,如果受到歡迎,說不定以后再寫成英文版讓世界上更廣泛的讀者們讀到。

    做具體應用的量化研究者們總是面臨一個困境就是“會算不會分析”,實際上文章的一半以上的價值就在于分析,而非去算。這里的“算”主要是指計算單點能、做幾何優化、算光譜。把Multiwfn弄通之后,這個困境就徹底擺脫了。甚至于,對于一些想湊文章的人,都能夠靠Multiwfn來灌文章了。例如,文章題目叫做《xxx的理論研究》、《xxx的從頭算研究》、《xxx:a DFT study》,內容就是gview里搭個新奇的分子(以及它的衍生物),然后拿高斯做個優化,討論一下幾何結構,算算紅外、紫外、NMR,之后就把Multiwfn支持的各類波函數分析往上套,比如ELF/LOL/拉普拉斯的平面圖或等值面圖分析、電荷分析、軌道成分分析、鍵級分析、芳香性分析、盆分析、RDG弱相互作用分析、AIM分析、分子表面靜電勢分析、福井函數/ALIE/雙描述符做活性位點分析等等等等,再結合NBO分析、AICD做感應電流密度圖分析,對于CTC及以下檔次的期刊,靠這么“堆分析”得到的分子體系的研究文章要想發表足夠了,若是對于非SCI期刊,那么這樣灌水猶如囊中取物般簡單。當然,這里聲明,筆者堅決反對這樣大量灌水!如果實在是畢不了業要救急,這么灌一篇也就得了,如果反復灌數篇、乃至十幾篇、幾十篇,那真是作孽,是學術界的禍害。我已經看到有數篇用Multiwfn發的文章確實這樣做了。

    雖然對于讓Multiwfn賣錢的建議一直以來我是拒絕的,不過有提議將Multiwfn做成一個“解決方案”,保持對于學術用戶免費、開源但對于非學術用戶適當收費,如今我倒是覺得可以,這不會扭曲Multiwfn的發展,不會動搖我學術的純粹性,而會讓它得到更多的外界支持,以至于最終可以變得更好,使學術用戶受益。具體來說,也就不是光讓Multiwfn這個程序來單打獨斗,也不只靠博客、論壇來推廣,而是類似于material studio這樣的成熟的大型商業軟件進行全方位的包裝、宣傳,提供穩健的服務支持。如今Multiwfn程序主體已經完工,打算將它和前面提到的培訓、配套書籍結合起來,然后可以再試圖申請點名頭,逐漸讓那些位于管理層的非量子化學工作者也能知道并重視有這個程序,最終使得Multiwfn的潛在價值能夠最大化地展現出來。

    其實老早老早以前就開始盤算將Multiwfn娘化,并出個本子,而且連繪圖板也買了,但是一直沒有如愿。主要還是沒有足夠時間精力。希望有朝一日能如愿在漫展上賣Multiwfn娘化本吧。不只包括Multiwfn娘,其中還會出現高斯娘、NBO娘之類的,將具有濃厚的百合味。Multiwfn娘是特立獨行的黑長直,有點曉美焰的感覺。

    Multiwfn開發過程中寫代碼的時候其實往往很愉悅,有時候會很享受那種霹靂拍啦敲鍵盤的感覺,手指在鍵盤上飛速滑動。但這必須得是筆記本鍵盤,要是鍵程長的臺式機鍵盤可沒有這份快感。開發Multiwfn最累的莫過于調試代碼并調整程序了,調試的時間是寫代碼時間的幾倍多。之所以搞得這么累,還有一個原因是我對程序盡善盡美的要求,哪怕連輸出的信息中,是否應該在某個地方空一行、是否文字標簽應該往右挪一點、屏幕上的提示是否足以讓用戶不看手冊也能理解這類微小的細節問題都堅決不放過。我寫代碼的時候也對于代碼的緊湊性、藝術性有著執著的要求,總力圖在用最簡短、最易讀懂的代碼實現最多的功能、達到最高的計算效率、最低的內存占用。我有自信,如果是別人來寫Multiwfn 3.0的全部功能,得寫5萬行以上,而且讀起來還絕對不如Multiwfn的代碼容易理解。

    Multiwfn的程序設計一直堅持著一下三點原則
    (1)令計算速度最大化。Multiwfn的計算代碼不是寫出來能用就完了,而是反復琢磨怎么讓計算速度達到最高。凡是計算量大的代碼一律用OpenMP做了并行化。記得曾經為了優化計算平面上靜電勢的代碼,花了大概五天吧,反復琢磨各種寫法,終于使得最后計算時間比最初低了一個數量級。雖說目前計算靜電勢的速度和高斯比還是要慢,這沒辦法,因為wfn文件里能利用的信息有限,沒法以殼層方式運算以最大程度優化性能,但是比起同樣利用wfn文件來產生靜電是格點數據的Checkden,那速度已經不是一個境界了(而且Checkden靜電勢計算結果有誤)。不過,個別情況下優化得過度也帶來了問題。也是靜電勢的計算,為了節省計算指數的時間(計算一次指數函數是挺費的),一度做得優化有點過度,忽略的指數函數有點過多,導致有那么幾個版本在計算離分子稍遠區域的靜電勢計算有問題,好在后來被用戶指出錯誤,然后改成了更穩健可靠的優化方式。自此我對優化變得更為謹慎,以免再出現優化過度導致bug。
    (2)使界面設計得盡可能容易理解,不看手冊也能用明白。為此,每次當用戶需要輸入時,屏幕上的信息就會給出輸入例子(也就是e.g.后面的內容)。每當輸出信息時,凡是有必要解釋的我都盡量在輸出信息中作出解釋(然而很多用戶實在令我有點惱火,明明屏幕上提示寫得清清楚楚,可就是不去看、稍稍動一丁點腦子)。同時我也追求界面設計得使得簡潔,沒必要的選項就不加上,但是又不失靈活性,也就是比如讓計算時重要的參數盡可能都可調、結果能夠修改、導出,以滿足各種各樣目的不同的用戶們的需求。界面設計還特別注意將操作流程縮短,使得在Multiwfn中做任何一種分析,只需要敲入極少的命令就能實現目的。將以上這幾點統籌好,真是很難!所以設計Multiwfn的界面真是費了很多心思,反復琢磨怎么讓以上要求盡可能同時滿足,這真是煞費苦心全心全意為用戶著想。如果程序只是自己用的話,根本不用動這些腦筋。很多程序界面做得很爛,都是因為根本沒考慮用戶的感受。寫一個給自己用的程序,和寫一個給其他人,特別是菜鳥用的程序,在難度和耗費的時間上真是有天壤之別。
    (3)力圖使結果能直接可視化。學術軟件,特別是免費軟件,普遍存在一個很大的弊病,就是只能算,卻沒法直接可視化,而商業化程序這點則做得比較好。我一直倡導可視化分析,所以我盡可能將可視化的過程簡化,讓Multiwfn盡可能將結果都能直接輸出成圖,而不是只輸出一堆數據,然后再由用戶折騰到第三方可視化程序去看。但是由于DISLIN圖形庫的局限性,不可能直接顯示出的效果總能滿足各種用戶的要求,所以我總是留出選項讓結果能以便于第三方程序作圖的格式導出來,使用戶能通過第三方繪圖程序細致調節參數得到想要的效果。

    Multiwfn的更新一直都比較勤快,除了努力增加新功能外,也把之前版本發現的各種bug都盡力解決,我總是只對最新版本的結果有絕對正確的自信。所以我總是希望盡用戶能及時將Multiwfn更新到最新版本,這樣我比較踏實,其實用戶用沒用上耗費心血寫的新功能是小事,萬一用了帶有bug的版本得到了錯誤的結果那才是大事。可無奈的是,當我查看最新引用Multiwfn的文章時,我總是看到文中在用著很舊的版本。


    以上亂七八糟寫了一萬五千字,基本上把從Multiwfn 1.0到3.0開發過程的任何感受、瑣碎的想法都凌亂、毫無條理地寫了一遍。等很久很久很久以后我想應該還會寫一篇這樣的雜談文章,寫Multiwfn 3.0之后的故事。

    總之,Multiwfn一定會成為世界上最好的波函數分析程序!(我敢說,3.0版已經達到這目標的至少一半了。如果不信,就當作寡人是自賣自夸吧)

    久久精品国产99久久香蕉