張亞超 鄭珊


[摘 要] 以H2分子勢(shì)能曲線的密度泛函理論計(jì)算為實(shí)踐教學(xué)案例,探討腳本語(yǔ)言Python在“計(jì)算材料學(xué)”教學(xué)中的可能應(yīng)用。由于該課程實(shí)踐性較強(qiáng),傳統(tǒng)教學(xué)方式既需要兼顧基礎(chǔ)理論內(nèi)容,又需要花費(fèi)很大精力講授各種計(jì)算軟件的使用,無(wú)形中增大了學(xué)習(xí)難度。提出一種基于Python的計(jì)算材料學(xué)實(shí)驗(yàn)方案,引導(dǎo)學(xué)生通過(guò)實(shí)際材料計(jì)算和提問(wèn)學(xué)習(xí)理論方法。Python語(yǔ)法簡(jiǎn)單、容易上手,且具備膠水語(yǔ)言的優(yōu)勢(shì),可以無(wú)縫整合材料建模、理論計(jì)算、數(shù)據(jù)分析與可視化等全部過(guò)程,大大降低了教學(xué)復(fù)雜度,有助于提升學(xué)生的學(xué)習(xí)興趣。
[關(guān)鍵詞] 密度泛函理論;Python;實(shí)踐教學(xué);材料模擬
[作者簡(jiǎn)介] 張亞超(1985—),男,河南葉縣人,博士,貴州師范學(xué)院貴州省納米材料模擬與計(jì)算重點(diǎn)實(shí)驗(yàn)室副教授,主要從事計(jì)算材料學(xué)研究;鄭 珊(1990—),女,貴州貴陽(yáng)人,碩士,貴州師范學(xué)院化學(xué)與材料學(xué)院實(shí)驗(yàn)師,主要從事藥物分子篩選與設(shè)計(jì)研究。
[中圖分類號(hào)] G642.0? ?[文獻(xiàn)標(biāo)識(shí)碼] A? ?[文章編號(hào)] 1674-9324(2021)37-0137-04? ? [收稿日期] 2021-04-16
隨著理論方法的發(fā)展與計(jì)算能力的提升,在物質(zhì)科學(xué)相關(guān)研究領(lǐng)域,理論、實(shí)驗(yàn)與計(jì)算已經(jīng)形成了三足鼎立的局面。為了適應(yīng)這種學(xué)科發(fā)展需求,材料科學(xué)與工程專業(yè)的教學(xué)工作也不斷與時(shí)俱進(jìn),逐步吸納現(xiàn)代計(jì)算機(jī)技術(shù)[1],將其應(yīng)用范圍從傳統(tǒng)的實(shí)驗(yàn)數(shù)據(jù)處理與可視化擴(kuò)大到材料模擬與設(shè)計(jì)、材料基因工程等前沿領(lǐng)域。部分高校開設(shè)了“計(jì)算材料學(xué)”課程[2],致力于介紹前沿材料計(jì)算技術(shù)[3],培養(yǎng)學(xué)生的計(jì)算思維和動(dòng)手能力。遺憾的是,該課程涉及多學(xué)科交叉和大量的專業(yè)軟件使用[4],內(nèi)容龐雜,操作極其煩瑣,學(xué)生很容易在初期就失去信心和興趣。本文提出一種基于Python腳本語(yǔ)言的計(jì)算材料實(shí)驗(yàn)設(shè)計(jì)方案,希望能通過(guò)實(shí)踐帶動(dòng)理論課的學(xué)習(xí)。這種實(shí)踐教學(xué)方案的實(shí)施,一方面為學(xué)生提供一個(gè)便利的計(jì)算材料工具箱,顯著降低上機(jī)實(shí)踐操作的復(fù)雜性,使學(xué)生能通過(guò)簡(jiǎn)單程序編寫完成一般的材料模擬與設(shè)計(jì)工作,增強(qiáng)課程的趣味性與吸引力;另一方面鼓勵(lì)學(xué)生通過(guò)實(shí)際材料模擬“發(fā)現(xiàn)”計(jì)算方法存在的問(wèn)題,以更深入地理解該課程所涉及的基礎(chǔ)理論知識(shí)。
一、“計(jì)算材料學(xué)”課程特點(diǎn)與教學(xué)改革
“計(jì)算材料學(xué)”涵蓋較多的理論基礎(chǔ),涉及凝聚態(tài)物理、理論化學(xué)、數(shù)值分析、計(jì)算機(jī)編程等多個(gè)學(xué)科方向,教學(xué)難度較大。以作者所在的高校貴州師范學(xué)院為例,該課程開設(shè)在材料科學(xué)與工程專業(yè)大三下學(xué)期,教學(xué)內(nèi)容包括從頭算波函數(shù)理論、密度泛函理論、固體電子結(jié)構(gòu)計(jì)算、贗勢(shì)平面波方法、經(jīng)典分子動(dòng)力學(xué)、第一性原理分子動(dòng)力學(xué)及蒙特卡羅模擬等,共48學(xué)時(shí),其中理論講授32學(xué)時(shí),上機(jī)實(shí)踐16學(xué)時(shí)。這要求學(xué)生在前五個(gè)學(xué)期必須系統(tǒng)學(xué)習(xí)一些必備的基礎(chǔ)理論課程,包括高等數(shù)學(xué)、線性代數(shù)、C語(yǔ)言程序設(shè)計(jì)、量子力學(xué)、材料物理等。然而,在實(shí)際教學(xué)過(guò)程中發(fā)現(xiàn),由于先修課程并未扎實(shí)掌握,學(xué)生在一個(gè)學(xué)期內(nèi)很難完成這樣的高強(qiáng)度學(xué)習(xí)。該課程的理論方法講授部分涉及大量的公式推導(dǎo),學(xué)生往往會(huì)因?yàn)橐粫r(shí)跟不上進(jìn)度而失去興趣。上機(jī)實(shí)踐環(huán)節(jié)又要求學(xué)生掌握較多的專業(yè)軟件。例如,材料建模過(guò)程依賴商業(yè)軟件如GaussView、Materials Studio等,這類軟件往往安裝于Windows系統(tǒng),而大部分材料計(jì)算軟件如SIESTA、Quantum Espresso、VASP等卻在Linux環(huán)境下運(yùn)行。在這種情況下,學(xué)生需要同時(shí)熟悉不同的操作系統(tǒng),并需要頻繁完成不同系統(tǒng)之間的數(shù)據(jù)傳遞。熟練掌握這些操作本身就需要一定的學(xué)習(xí)時(shí)間,學(xué)生短時(shí)間內(nèi)極容易在計(jì)算環(huán)境搭建或命令行操作上遇到困難而陷入迷茫。
針對(duì)這種情況,筆者探索一種實(shí)踐主導(dǎo)的教學(xué)模式,不再花費(fèi)大量時(shí)間集中講授理論方法,而是以一系列實(shí)驗(yàn)項(xiàng)目為切入點(diǎn),通過(guò)開展計(jì)算機(jī)模擬和集體討論來(lái)推進(jìn)理論課學(xué)習(xí)。舉例來(lái)說(shuō),通過(guò)“H2分子勢(shì)能曲線的第一性原理計(jì)算”了解以Hartree-Fock理論為基礎(chǔ)的從頭算波函數(shù)方法的精度和計(jì)算量,熟悉分子體系計(jì)算所常用的原子軌道線性組合(LCAO)框架;通過(guò)“銳鈦礦TiO2(101)表面電子結(jié)構(gòu)計(jì)算”學(xué)習(xí)固體能帶理論,掌握平面波(PW)展開和倒空間積分等重要概念,了解第一性原理贗勢(shì);通過(guò)“N2分子在Cu(111)表面的吸附解離”認(rèn)識(shí)第一性原理分子動(dòng)力學(xué)對(duì)化學(xué)過(guò)程模擬的重要性;通過(guò)“二維磁性材料相變的蒙特卡羅模擬”熟悉蒙特卡羅方法的基本原理。
這些實(shí)驗(yàn)項(xiàng)目全部通過(guò)Python腳本直接在遠(yuǎn)程Linux工作站上完成,容易引起學(xué)生的學(xué)習(xí)興趣。Python運(yùn)行環(huán)境和必備的計(jì)算模塊已經(jīng)事先在Linux工作站上部署好,學(xué)生在實(shí)驗(yàn)過(guò)程中可以專注于材料計(jì)算本身,而不必分心去解決技術(shù)困難。學(xué)生在動(dòng)手編程調(diào)用計(jì)算模塊的過(guò)程中,能夠?qū)τ?jì)算參數(shù)的選擇和收斂性測(cè)試有更細(xì)致的了解。通過(guò)比較不同方法的計(jì)算精度能夠?qū)碚摲椒ㄋ婕暗慕朴懈羁痰恼J(rèn)識(shí),這有助于激發(fā)學(xué)生的求知欲。這種化被動(dòng)為主動(dòng)的實(shí)踐教學(xué)方式,將會(huì)提升學(xué)生的整體學(xué)習(xí)效率。
二、Python在材料模擬中的優(yōu)勢(shì)
Python作為一種簡(jiǎn)潔卻強(qiáng)大、實(shí)用的腳本語(yǔ)言,特別適合于化學(xué)、物理和材料類專業(yè)的科研教學(xué)工作[5]。此處選用Python作為編程語(yǔ)言主要是基于它的以下幾點(diǎn)明顯優(yōu)勢(shì):(1)語(yǔ)法簡(jiǎn)單,前期學(xué)過(guò)C語(yǔ)言的學(xué)生可以快速完成簡(jiǎn)單Python腳本的編寫,學(xué)習(xí)成本很低。(2)完全免費(fèi),不用擔(dān)心版權(quán)問(wèn)題。(3)科學(xué)計(jì)算庫(kù)比較豐富,如NumPy、SciPy、pandas、scikit-learn等,利于開展常規(guī)的數(shù)值分析工作,如插值與擬合、數(shù)值積分、微分方程求解、矩陣運(yùn)算、數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等。另外,采用matplotlib庫(kù)可以直接實(shí)現(xiàn)計(jì)算結(jié)果的可視化,從圖中分析結(jié)果的變化趨勢(shì)比直接看數(shù)據(jù)直觀得多。(4)Python是“膠水語(yǔ)言”,可將材料建模、電子/分子結(jié)構(gòu)計(jì)算、材料性質(zhì)提取與數(shù)據(jù)分析整合到一個(gè)腳本,一次運(yùn)行便可獲得結(jié)果,大大降低了材料模擬復(fù)雜度。例如,調(diào)用原子模擬環(huán)境軟件包ASE(Atomic Simulation Environment),可以在統(tǒng)一框架下輕松實(shí)現(xiàn)原子尺度的材料模擬,包括結(jié)構(gòu)優(yōu)化、分子動(dòng)力學(xué)模擬、研究化學(xué)過(guò)程勢(shì)壘的NEB(Nudged Elastic Band)計(jì)算等。這類計(jì)算模塊的開發(fā)為實(shí)現(xiàn)高通量材料模擬奠定了良好的基礎(chǔ)。(5)Python有非常強(qiáng)大的軟件包管理工具pip,僅用一個(gè)命令即可完成計(jì)算模塊的在線安裝或升級(jí),自動(dòng)解決各種計(jì)算庫(kù)的依賴問(wèn)題。
值得一提的是,盡管Python的計(jì)算速度與編譯型語(yǔ)言C/C++和FORTRAN相比差距明顯,這個(gè)問(wèn)題很大程度上可以通過(guò)C語(yǔ)言擴(kuò)展來(lái)解決:將速度較慢的模塊用C語(yǔ)言實(shí)現(xiàn),然后封裝成庫(kù)供Python調(diào)用。這種Python與C語(yǔ)言的有機(jī)結(jié)合既保證了計(jì)算速度,又保留了腳本語(yǔ)言的靈活性,有助于開展復(fù)雜的材料模擬。另外,基于Python面向?qū)ο蟮恼Z(yǔ)言特性,更容易設(shè)計(jì)出可維護(hù)性強(qiáng)的計(jì)算程序。
三、具體教學(xué)案例
本部分以“H2分子勢(shì)能曲線的密度泛函理論計(jì)算”為具體教學(xué)案例,展示這種教學(xué)方式的優(yōu)勢(shì)與可行性。根據(jù)實(shí)驗(yàn)?zāi)康模枰玫紿2分子的結(jié)合能隨H-H鍵長(zhǎng)的變化關(guān)系。為了計(jì)算結(jié)合能Eb,必須先求出孤立H原子與H2分子的電子能量。此時(shí),Eb=E(H2)-2E(H),其中原子能量E(H)與分子能量E(H2)通過(guò)密度泛函理論(DFT)計(jì)算獲取。在Python腳本中,計(jì)算Eb的過(guò)程可以通過(guò)定義一個(gè)函數(shù)來(lái)方便地實(shí)現(xiàn)。此項(xiàng)目所用的Python代碼如圖1所示。該腳本僅僅利用30行代碼就實(shí)現(xiàn)了H原子與H2分子的超胞模型構(gòu)建、0.2~3.5A(步長(zhǎng)0.05A)鍵長(zhǎng)范圍的DFT計(jì)算(采用三種不同泛函:LDA, PBE和PBE0),以及勢(shì)能曲線作圖。計(jì)算結(jié)果表明,無(wú)論(半)局域泛函還是雜化泛函,均無(wú)法正確描述H2分子的解離行為(圖2)。當(dāng)鍵長(zhǎng)大于2.25A時(shí),三種泛函所得勢(shì)能曲線均越過(guò)零線(Eb=0水平線),意味著原子之間存在排斥作用。從物理上講,當(dāng)兩個(gè)H原子相距足夠遠(yuǎn)時(shí),H-H之間化學(xué)鍵被打斷,原子之間不再有相互作用,因此勢(shì)能曲線應(yīng)該趨近于零線。
通過(guò)這個(gè)項(xiàng)目,可以引導(dǎo)學(xué)生思考以下兩個(gè)問(wèn)題:(1)擬合勢(shì)能曲線,計(jì)算H2分子的平衡鍵長(zhǎng)re及解離能De,與實(shí)驗(yàn)結(jié)果(re=0.74A,De=4.52 eV)進(jìn)行比較,討論不同泛函的計(jì)算精度;(2)造成勢(shì)能曲線尾部越過(guò)零線的原因是什么,如何改進(jìn)?第二個(gè)問(wèn)題實(shí)質(zhì)上是理論化學(xué)領(lǐng)域著名的靜態(tài)電子關(guān)聯(lián)問(wèn)題,根源在于DFT框架下多電子波函數(shù)的單Slater行列式表達(dá)。在實(shí)際計(jì)算中,針對(duì)這類問(wèn)題往往需要采用高精度波函數(shù)方法,如多參考態(tài)組態(tài)相互作用(MRCI)方法[6]。
學(xué)生通過(guò)這個(gè)實(shí)驗(yàn)項(xiàng)目能學(xué)到什么東西呢?首先,在技術(shù)層面,學(xué)生通過(guò)練習(xí)可以學(xué)會(huì)如何調(diào)用ASE模塊搭建分子模型、控制特定的結(jié)構(gòu)參數(shù),如原子間距,學(xué)習(xí)如何調(diào)用GPAW程序進(jìn)行DFT計(jì)算,并利用Python提取計(jì)算結(jié)果完成結(jié)合能的計(jì)算,以及如何調(diào)用matplotlib庫(kù)進(jìn)行作圖。其次,通過(guò)分析計(jì)算結(jié)果,了解DFT目前在處理靜態(tài)相關(guān)問(wèn)題上的局限,由此認(rèn)識(shí)到在復(fù)雜材料計(jì)算中也可能存在這樣的誤差。另外,還可以借此理解波函數(shù)方法的優(yōu)勢(shì),即通過(guò)增大多電子波函數(shù)基組,提高對(duì)電子相關(guān)的描述精度。學(xué)有余力的學(xué)生甚至可以通過(guò)查閱文獻(xiàn),思考如何在DFT框架下解決這個(gè)問(wèn)題。一個(gè)常用的辦法是引入對(duì)稱性破缺波函數(shù):控制兩個(gè)H原子的自旋取向,一個(gè)向上,另一個(gè)向下,這實(shí)際上是一種單重態(tài)與三重態(tài)的混合態(tài)。然后采用自旋極化的DFT計(jì)算將能夠得到趨近零線的勢(shì)能曲線。
四、結(jié)論與展望
本文以H2分子勢(shì)能曲線的DFT計(jì)算為例探討了Python腳本語(yǔ)言在“計(jì)算材料學(xué)”實(shí)踐教學(xué)中的應(yīng)用。由于材料模擬的復(fù)雜性與前沿交叉特點(diǎn),傳統(tǒng)的理論講授為主、上機(jī)實(shí)踐為輔的教學(xué)模式不再適用于該課程的教學(xué)。本研究提出一種實(shí)踐教學(xué)方案,將整個(gè)課程分解為一系列實(shí)驗(yàn)項(xiàng)目,引導(dǎo)學(xué)生在Linux工作站上編寫Python腳本來(lái)完成實(shí)驗(yàn)。Python的“膠水語(yǔ)言”特點(diǎn),有助于整合材料建模、計(jì)算與數(shù)據(jù)可視化,在材料模擬領(lǐng)域優(yōu)勢(shì)巨大。基于Python的編程實(shí)踐有助于激發(fā)學(xué)生進(jìn)一步的探索熱情,為系統(tǒng)學(xué)習(xí)相關(guān)理論方法打下良好的基礎(chǔ)。這種教學(xué)方式同樣也適用于“計(jì)算化學(xué)”“計(jì)算生物學(xué)”等需要具備一定編程經(jīng)驗(yàn)的課程。
參考文獻(xiàn)
[1]高慧玲,李蕓玲,劉露,等.《計(jì)算機(jī)在材料科學(xué)中的應(yīng)用》課程教學(xué)探索[J].廣東化工,2021,48(6):197-198.
[2]江建軍,繆靈,梁培,等.計(jì)算材料學(xué):設(shè)計(jì)實(shí)踐方法[M].北京:高等教育出版社,2010:1-44.
[3]張躍,谷景華,尚家香,等.計(jì)算材料學(xué)基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2007:160-190.
[4]戴振翔,鄭贛鴻,馬永青.《材料結(jié)構(gòu)設(shè)計(jì)與計(jì)算》課程的教學(xué)改革[J].教育教學(xué)論壇,2018(29):130-131.
[5]王浩,劉紅瑜,韋淼今.Python在分析化學(xué)實(shí)驗(yàn)設(shè)計(jì)中的應(yīng)用[J].大學(xué)化學(xué),2020,35(9):198-204.
[6]楊傳路,黃鈺珺,張?chǎng)危?MRCI方法研究H2分子基態(tài)勢(shì)能曲線和解析勢(shì)能函數(shù)[J].魯東大學(xué)學(xué)報(bào)(自然科學(xué)版),2004,20(1):10.
Application of Python in Computational Materials Science Teaching
ZHANG Ya-Chaoa, ZHENG Shanb
(a. Guizhou Provincial Key Laboratory of Computational Nano-Material Science; b. School of Chemistry and Materials Science, Guizhou Education University, Guiyang,Guizhou 550018, China)
Abstract: This paper explores possible application of Python scripting in computational materials science teaching, using density functional calculations of potential curve for H2 as a practical case. Due to strong practice orientation of this course, traditional training process is largely devoted to cover both theoretical methods and the usage of various computational packages, making it difficult to understand. Here, we propose a Python based experiment scheme, to encourage students to learn about theoretical methods through experience and by asking proper questions. Python is simple and easy to pick up. As a glue language, it is easily adapted for an seamless integration of materials model setup, computation, as well as data analysis and visualization. Thus, it will considerably simplify the complicated teaching activities and would also improve student interests.
Key words: density functional calculations; Python; practice teaching; materials simulations