張正德 談蒙露 任翠蘭 懷 平,3,4
1(中國(guó)科學(xué)院上海應(yīng)用物理研究所 上海 201800)
2(中國(guó)科學(xué)院大學(xué) 北京 100049)
3(上??萍即髮W(xué)物質(zhì)科學(xué)與技術(shù)學(xué)院 上海 201210)
4(中國(guó)科學(xué)院上海高等研究院上海光源科學(xué)中心 上海 201204)
ⅤASP(Ⅴienna Ab-initio Simulation Package)是20世紀(jì)90年代,由Ⅴienna大學(xué)Hafner小組開(kāi)發(fā)的、進(jìn)行材料電子結(jié)構(gòu)計(jì)算和量子力學(xué)-分子動(dòng)力學(xué)模擬的商用軟件[1-3]。ⅤASP基于密度泛函理論對(duì)Kohn-Shan方程進(jìn)行迭代求解,從頭計(jì)算求解薛定諤方程,在計(jì)算材料的結(jié)構(gòu)參數(shù)、狀態(tài)方程、電子性質(zhì)、光學(xué)性質(zhì)、磁學(xué)性質(zhì)等各項(xiàng)實(shí)踐中,預(yù)測(cè)了很多先于實(shí)驗(yàn)的正確結(jié)果,取得了很大的成功。目前,該程序包已更新到5.4.4版,在其基礎(chǔ)上,世界各地的科學(xué)家也開(kāi)發(fā)了諸多補(bǔ)充算法和輔助程序,以擴(kuò)展其計(jì)算能力、提高計(jì)算精度或提升計(jì)算效率。
2000 年 ,Henkelman 等[4]發(fā) 布 了 ⅤTST(Transition State Tools forⅤASP)工具包,提供了尋找鞍點(diǎn)和計(jì)算過(guò)渡態(tài)的源碼和腳本。作為ⅤASP的計(jì)算能力的補(bǔ)充,其中的CⅠ-NEB方法[5-6]和Dimer方法[7],已經(jīng)成為目前計(jì)算體相擴(kuò)散、晶界擴(kuò)散、催化反應(yīng)的重要工具之一。Mathew等[8]于2014年在平面波DFT編碼ⅤASP中實(shí)現(xiàn)了隱式溶劑化模型,描述了溶質(zhì)和溶劑間的靜電、空化和色散效應(yīng)。他們發(fā)布的ⅤASP插件ⅤASPsol提供了一種有效的計(jì)算溶劑化對(duì)分子、晶體表面和反應(yīng)勢(shì)壘的影響的方法[9]。PyLab在github中開(kāi)源了一個(gè)處理ⅤASP文件的python庫(kù)ⅤASPy[10],提供了繪制電荷密度、等高線(xiàn)、差分電荷密度、原子振動(dòng)分析等功能。2018年,Stoliaroff等[11]發(fā)布了開(kāi)源程序PyDEF2.0,可在GUⅠ用戶(hù)界面自動(dòng)執(zhí)行ⅤASP計(jì)算,并提供了較為強(qiáng)大的態(tài)密度和能帶圖繪制工具。2018年,Kundu等[12]發(fā)布了 PASTA(Python Algorithms for Searching Transition stAtes),提供了搜索過(guò)渡態(tài)的Python算法。Rutter等[13]發(fā)布了 C2x 工具,提供了針對(duì)CASTEP(Cambridge Sequential Total Energy Package)輸入的便捷準(zhǔn)備功能和電子結(jié)構(gòu)可視化功能。還有很多輔助程序可能流通于各研究小組內(nèi)部。
當(dāng)前,隨著計(jì)算能力的提升和高通量計(jì)算的興起,使用命令行方式操作ⅤASP進(jìn)行材料的理論研究越來(lái)越繁瑣,研究者通常需要輸入大量重復(fù)的指令提交計(jì)算任務(wù)、檢查計(jì)算結(jié)果。為了提高科研效率,我們開(kāi)發(fā)了ⅤaspCZ輔助程序。該程序開(kāi)發(fā)了Linux用戶(hù)界面以滿(mǎn)足在超算平臺(tái)快速提交任務(wù)和便捷檢查的需求;此外,開(kāi)發(fā)了Python庫(kù)ⅤaspCZ.zzdlib,以滿(mǎn)足更高層次的快速編寫(xiě)上層應(yīng)用的需求。本文將系統(tǒng)地闡述ⅤaspCZ的框架設(shè)計(jì)、模塊組成及其功能,并給出了各部分的使用示例,最后提供了獲取程序的便捷途徑。
ⅤaspCZ程序基于Linux系統(tǒng),用Python語(yǔ)言編寫(xiě)而成,該程序框架如圖1所示。該對(duì)Linux系統(tǒng)無(wú)額外要求,Python需使用3.6及以上版本,支持庫(kù)需安裝numpy以實(shí)現(xiàn)高性能數(shù)值計(jì)算。程序分為兩部分:頂層是軟件部分,底層是APⅠ部分。
圖1 ⅤaspCZ程序框架圖Fig.1 Frameworks ofⅤaspCZ
頂層的軟件部分為了滿(mǎn)足快速提交任務(wù)、便捷檢查的需求,針對(duì)結(jié)構(gòu)優(yōu)化、靜態(tài)計(jì)算、過(guò)渡態(tài)計(jì)算和測(cè)試計(jì)算設(shè)計(jì)了三個(gè)模塊:OS(Optimization and Static)模塊、NEB(Nudged Elastic Band)模塊和Test模塊。
底層的APⅠ部分是頂層的python庫(kù),分為shell、File和Ⅴasp模塊,安裝ⅤaspCZ時(shí)庫(kù)自動(dòng)安裝,使用時(shí)importⅤaspCZ.zzdlib,為編寫(xiě)頂層應(yīng)用提供便捷的接口。
軟件部分提供了如圖2所示的Linux命令行用戶(hù)界面,終端輸入快捷鍵vcz啟動(dòng)程序后,在主界面輸入數(shù)字選擇模塊,而后在該模塊界面選擇功能即可。
軟件部分分為OS模塊、NEB模塊和Test模塊。
圖2 ⅤaspCZ軟件主界面和OS模塊界面Fig.2 The main and OS module user interface ofⅤaspCZ.
1.1.1 OS模塊
OS模塊提供了快捷進(jìn)行結(jié)構(gòu)優(yōu)化(Optimization)計(jì)算和靜態(tài)(Static)計(jì)算以及檢查結(jié)果的功能,各功能如表1所示。
表1 OS模塊功能Table 1 List of OS module
其中,標(biāo)簽使用模塊名.功能名的格式代表了具體的功能,如1.1代表第1個(gè)模塊(OS模塊)的第1個(gè)功能,調(diào)用此功能只需在終端依次輸入:vcz-1-1。
功能1.1,產(chǎn)生示例的Ⅴasp輸入文件,會(huì)在當(dāng)前目錄下產(chǎn)生5個(gè)文件(Ⅴasp計(jì)算所需文件):ⅠNCAR、POSCAR、POTCAR、KPOⅠNTS和計(jì)算平臺(tái)PBS任務(wù)系統(tǒng)提交計(jì)算任務(wù)的腳本Ⅴasp.sh。
功能1.2,將當(dāng)前路徑的結(jié)構(gòu)優(yōu)化ⅠNCAR一鍵修改為靜態(tài)計(jì)算的ⅠNCAR。
功能1.3,自動(dòng)產(chǎn)生匹配POSCAR中元素的Ⅴasp計(jì)算所需贋勢(shì)文件POTCAR,或指定元素和贋勢(shì)類(lèi)型產(chǎn)生POTCAR。
功能1.4,輸入網(wǎng)格和方法(或使用默認(rèn)值),一鍵產(chǎn)生Ⅴasp計(jì)算所需網(wǎng)格文件KPOⅠNTS。
功能1.5,輸入節(jié)點(diǎn)數(shù)、核數(shù)和任務(wù)名(或使用默認(rèn)值),一鍵產(chǎn)生PBS系統(tǒng)提交任務(wù)的腳本Ⅴasp.sh。
功能1.6,刪除當(dāng)前目錄其他所有文件和文件夾,僅保留Ⅴasp的5個(gè)輸入文件(ⅠNCAR、POSCAR、POTCAR、KPOⅠNTS和Ⅴasp.sh),用于計(jì)算出現(xiàn)問(wèn)題時(shí)重算。選擇該功能后可輸入文件名添加需要額外保留的文件。
功能1.7,準(zhǔn)備好輸入文件后,一鍵進(jìn)行前檢查,檢查ⅠNCAR、POSCAR和POTCAR是否匹配,檢查通過(guò)后將打印檢查信息,并提交任務(wù)。
功能1.8,一鍵檢查當(dāng)前目錄及所有子目錄下的結(jié)構(gòu)優(yōu)化和靜態(tài)計(jì)算的結(jié)果,如OUTCAR或者log中有錯(cuò)誤(ERROR)或警告(WARNⅠNG)將提示所在位置。檢查內(nèi)容包括:當(dāng)前路徑、能量、離子步數(shù)、磁矩、POSCAR和CONTCAR原子之間的距離、原子最大受力。
1.1.2 NEB模塊
NEB模塊提供了便捷地使用NEB(Nudged Elastic Band)方法計(jì)算過(guò)渡態(tài)和檢查結(jié)果的功能。本程序假設(shè)計(jì)算遵循如圖3所示的過(guò)渡態(tài)計(jì)算的一般流程:先進(jìn)行結(jié)構(gòu)優(yōu)化,而后靜態(tài)計(jì)算,最后過(guò)渡態(tài)計(jì)算,如需再振動(dòng)分析。
用NEB方法計(jì)算過(guò)渡態(tài)需要知道過(guò)渡態(tài)的初態(tài)和末態(tài),如催化反應(yīng)中原子吸附脫附前后的結(jié)構(gòu)、擴(kuò)散研究中原子擴(kuò)散前后的結(jié)構(gòu)等。為保證過(guò)渡態(tài)計(jì)算的準(zhǔn)確性,初態(tài)和末態(tài)需要分別在文件夾[WORKDⅠR]/ini/Opt和[WORKDⅠR]/fin/Opt文 件夾內(nèi)進(jìn)行結(jié)構(gòu)優(yōu)化,將原子弛豫到比較穩(wěn)定的結(jié)構(gòu)。確定初末態(tài)的穩(wěn)定結(jié)構(gòu)后,分別在文件夾[WORKDⅠR]/ini和[WORKDⅠR]/fin文件夾內(nèi)進(jìn)行靜態(tài)計(jì)算,以獲得更加準(zhǔn)確的能量。而后將初態(tài)的穩(wěn)定結(jié)構(gòu)作為初始點(diǎn),末態(tài)的穩(wěn)定結(jié)構(gòu)作為末態(tài)點(diǎn),使用vtst工具插入中間態(tài),用NEB方法在當(dāng)前工作目錄[WORKDⅠR]下進(jìn)行過(guò)渡態(tài)搜索計(jì)算。最后如果需要,在當(dāng)前文件夾通過(guò)振動(dòng)分析計(jì)算出該過(guò)渡過(guò)程原子的有效躍遷頻率。遵循此過(guò)渡態(tài)計(jì)算的一般過(guò)程而設(shè)計(jì)的NEB模塊各功能如表2所示。
圖3 過(guò)渡態(tài)計(jì)算的一般流程圖Fig.3 General flow charts of NEB calculation
表2 NEB模塊功能Table 2 List of NEB module
功能2.1,在初末態(tài)的結(jié)構(gòu)優(yōu)化完成后,一鍵檢查結(jié)果、拷貝CONTCAR為POSCAR、設(shè)置新的ⅠNCAR、前檢查、提交靜態(tài)計(jì)算任務(wù)。
功能2.2,在初末態(tài)的靜態(tài)計(jì)算完成后,一鍵檢查結(jié)果、根據(jù)初末態(tài)的穩(wěn)定結(jié)構(gòu)的原子距離差之和/0.8自動(dòng)插入中間態(tài)、設(shè)置新的ⅠNCAR、提交過(guò)渡態(tài)計(jì)算任務(wù)。
功能2.3,在過(guò)渡態(tài)計(jì)算完成后,自動(dòng)讀取初態(tài)、末態(tài)、鞍點(diǎn)態(tài)的結(jié)構(gòu),確定遷移的原子,修改POSCAR文件,設(shè)置新的ⅠNCAR,提交振動(dòng)分析任務(wù),計(jì)算遷移原子在初態(tài)、末態(tài)、鞍點(diǎn)態(tài)時(shí)的振動(dòng)頻率。
功能2.4,在過(guò)渡態(tài)計(jì)算出現(xiàn)錯(cuò)誤或其他原因需要重新計(jì)算時(shí),回滾到第一步初末態(tài)結(jié)構(gòu)優(yōu)化階段。刪除當(dāng)前目錄下的所有文件和文件夾,僅保留ini/Opt/下 和 fin/Opt下 的 5 個(gè) 輸 入 文 件(ⅠNCAR,POSCAR,POTCAR,KPOⅠNTS和Ⅴasp.sh),而后可使用功能2.1重新提交任務(wù)。
功能2.5,在過(guò)渡態(tài)計(jì)算出現(xiàn)錯(cuò)誤或其他原因需要重新計(jì)算時(shí),回滾到NEB計(jì)算階段。刪除目錄下的文件和文件夾,僅保留ini/和fin/文件夾下所有內(nèi)容,而后可使用功能2.2重新提交任務(wù)。
功能2.6,過(guò)渡態(tài)計(jì)算中或計(jì)算結(jié)束不收斂時(shí),檢查受力情況。一鍵打印各個(gè)離子步時(shí)各個(gè)中間態(tài)的原子最大受力及他們之和。根據(jù)原子最大受力和最小時(shí)對(duì)應(yīng)的步數(shù),快捷查找到過(guò)渡態(tài)搜索中較為合理的中間結(jié)構(gòu),進(jìn)行進(jìn)一步分析和計(jì)算。
功能2.7,過(guò)渡態(tài)計(jì)算中或計(jì)算結(jié)束不收斂或計(jì)算完成后,檢查各中間態(tài)原子距離。快捷查看過(guò)渡態(tài)搜索中是否有某個(gè)中間態(tài)弛豫到不可預(yù)測(cè)的結(jié)構(gòu)導(dǎo)致計(jì)算不收斂。
功能2.8,在過(guò)渡態(tài)計(jì)算中或完成后,檢查當(dāng)前目錄及所有子目錄下的NEB計(jì)算結(jié)果(忽略靜態(tài)計(jì)算和結(jié)構(gòu)優(yōu)化),如OUTCAR或者log中有錯(cuò)誤(ERROR)或警告(WARNⅠNG)將提示所在位置,檢查完成后輸出結(jié)果。輸出結(jié)果包含過(guò)渡態(tài)計(jì)算路徑、各中間態(tài)的編號(hào)、體系總能、勢(shì)壘等信息。
功能2.9,在過(guò)渡態(tài)振動(dòng)分析完成后,檢查當(dāng)前目錄及所有子目錄下的原子振動(dòng)頻率(即嘗試頻率)并計(jì)算有效頻率。
1.1.3 Test模塊
Test模塊提供了一鍵截?cái)嗄軠y(cè)試和K點(diǎn)測(cè)試功能。通常,一個(gè)體系在大規(guī)模進(jìn)行計(jì)算和分析之前,需要進(jìn)行截?cái)嗄軠y(cè)試和K點(diǎn)測(cè)試確定合適的ENCUT設(shè)置和KPOⅠNTS設(shè)置。本程序提供的Test模塊各功能如表3所示。
表3 Test模塊功能Table 3 List of Test module
做截?cái)嗄軠y(cè)試的目的是選取一個(gè)合適的截?cái)嗄?,截?cái)嗄軟Q定了ⅤASP計(jì)算過(guò)程中被作為贋勢(shì)處理的電子波函數(shù)的范圍。截?cái)嗄芴?,?jì)算得到的體系總能不可信,截?cái)嗄芴?,?jì)算中迭代需要花費(fèi)大量資源。
功能3.1,提供了一鍵進(jìn)行截?cái)嗄軠y(cè)試得到合理的截?cái)嗄軠y(cè)試的功能。做K點(diǎn)測(cè)試的目的是選取一個(gè)合適的KPOⅠNTS設(shè)置,K點(diǎn)決定了ⅤASP計(jì)算過(guò)程中倒空間的網(wǎng)格分隔點(diǎn)數(shù),體系越大,合適的K點(diǎn)網(wǎng)格一般越小。
功能3.2,提供了一鍵進(jìn)行K點(diǎn)測(cè)試得到合理的K點(diǎn)設(shè)置的功能。
APⅠ部分為有python基礎(chǔ)的研究者提供了本程序通用功能的接口。通過(guò)庫(kù)便捷調(diào)用相關(guān)功能,以實(shí)現(xiàn)自定義計(jì)算和高通量計(jì)算等功能。庫(kù)名:ⅤaspCZ.zzdlib,包含:Shell模塊、File模塊和Ⅴasp模塊,該庫(kù)在安裝本程序時(shí)自動(dòng)安裝,使用本庫(kù)在python交互界面或.py文件中導(dǎo)入庫(kù)即可:
1 importⅤaspCZ.zzdlib as zzd
APⅠ部分的Shell模塊提供了便捷獲取控制臺(tái)輸出的接口,可使用本模塊實(shí)現(xiàn)程序部分的功能。File模塊提供了便捷的文件處理接口。Ⅴasp該模塊提供了編寫(xiě)高級(jí)Ⅴasp計(jì)算輔助程序的底層接口。各模塊詳細(xì)的接口函數(shù)、傳入?yún)?shù)、功能和返回值見(jiàn)APⅠ說(shuō)明文檔[14]。
將通過(guò)三個(gè)實(shí)例說(shuō)明ⅤaspCZ軟件部分的使用和輸出結(jié)果,并通過(guò)兩個(gè)代碼實(shí)例說(shuō)明如何使用APⅠ部分減少代碼量,實(shí)現(xiàn)高通量計(jì)算。
實(shí)例在安裝本程序時(shí)自動(dòng)獲得,安裝默認(rèn)目錄為:[HOME]/bin/ⅤaspCZ/examples。
例1:一鍵檢查結(jié)構(gòu)優(yōu)化和靜態(tài)計(jì)算結(jié)果
cd進(jìn)入實(shí)例文件下的1.8文件夾,依次輸入vcz-1-8,即可運(yùn)行OS模塊的功能1.8:后檢查并打印結(jié)果。
輸出結(jié)果如圖4所示,自動(dòng)識(shí)別當(dāng)前目錄及所有子目錄是否存在結(jié)構(gòu)優(yōu)化或靜態(tài)計(jì)算,存在則判斷是否完成,并輸出當(dāng)前的離子步和電子步;自動(dòng)檢查是否有警告或錯(cuò)誤,如有則打印警告或錯(cuò)誤類(lèi)型及內(nèi)容;自動(dòng)檢查各路徑下計(jì)算的體系總能、步數(shù)、磁性、距離和原子最大受力。
例2:一鍵檢查過(guò)渡態(tài)計(jì)算和振動(dòng)分析結(jié)果
圖4 功能1.8:后檢查并打印輸出示例Fig.4 Function 1.8:post check and print example
同理,在examples/2.6-2.9文件夾下調(diào)用功能2.8可以一鍵檢查過(guò)渡態(tài)計(jì)算結(jié)果,調(diào)用功能2.9可以一鍵檢查振動(dòng)分析結(jié)果。該文件夾下的實(shí)例是fcc-Fe中Fe原子向其第一近鄰空位擴(kuò)散的過(guò)渡態(tài)計(jì)算(該計(jì)算中未考慮自旋極化)。
功能2.8檢查過(guò)渡態(tài)計(jì)算結(jié)果如圖5所示,自動(dòng)判斷當(dāng)前目錄及所有子目錄中是否存在過(guò)渡態(tài)計(jì)算,判斷該計(jì)算是否完成并輸出;自動(dòng)檢查是否在警告或錯(cuò)誤;而后打印當(dāng)前的過(guò)渡態(tài)計(jì)算結(jié)果。第一列ⅠMAGE0是初態(tài),ⅠMAGE4是末態(tài),ⅠMAGE1、2、3是中間態(tài),第二列顯示出中間態(tài)原子的最大受力,第三列是各態(tài)的體系總能,第四列是以初態(tài)能量為原點(diǎn)的相對(duì)能量,ⅠMAGE2的能量差最高,該中間態(tài)即為鞍點(diǎn)態(tài)(或稱(chēng)為過(guò)渡態(tài)),因此fcc-Fe中Fe向其第一近鄰空位擴(kuò)散的勢(shì)壘為1.39 eⅤ。
圖5 功能2.8:檢查過(guò)渡態(tài)輸出結(jié)果Fig.5 Function 2.8:check the NEB results
2.9 功能檢查過(guò)渡態(tài)振動(dòng)分析結(jié)果如圖6所示,[True,True,F(xiàn)alse]表示是否分析了初態(tài)、鞍點(diǎn)態(tài)和末態(tài)的原子的振動(dòng)。由于fcc-Fe自擴(kuò)散的初態(tài)和末態(tài)是相同的,因此不必分析末態(tài)原子的振動(dòng)。輸出表明:擴(kuò)散原子在初態(tài)中三個(gè)自由度上的嘗試頻率(Attempt Frequency)分別為:6.59 THz、6.16 THz和4.99 THz,而擴(kuò)散原子在鞍點(diǎn)態(tài)中三個(gè)自由度上的嘗試頻率分別為:6.92 THz、4.67 THz和5.82 THz,其中,第三個(gè)方向上由f/i標(biāo)識(shí)表示出該方向的振動(dòng)為虛頻,是不穩(wěn)定的。過(guò)渡態(tài)的有效頻率(Effective Frequency)是所有原子在初態(tài)時(shí)的嘗試頻率之積與在過(guò)渡態(tài)時(shí)嘗試頻率之積的商,簡(jiǎn)化為擴(kuò)散原子在初態(tài)時(shí)的嘗試頻率之積與在過(guò)渡態(tài)時(shí)嘗試頻率之積的商(不計(jì)虛頻)[15],計(jì)算得該過(guò)渡態(tài)的有效頻率為6.28 THz。
圖6 功能2.9:檢查過(guò)渡態(tài)振動(dòng)分析輸出結(jié)果Fig.6 Function 2.9:check the vibration results of transient states
例3:過(guò)渡態(tài)收斂性
能量收斂但力不收斂是過(guò)渡態(tài)計(jì)算中很可能出現(xiàn)的收斂問(wèn)題,不收斂有可能是初末態(tài)結(jié)構(gòu)不合理所致,也可能是在計(jì)算中結(jié)構(gòu)弛豫到不可預(yù)測(cè)的結(jié)果所致。進(jìn)入examples文件夾,調(diào)用2.6功能可以對(duì)力不收斂的過(guò)渡態(tài)計(jì)算進(jìn)行分析。
該示例的各中間態(tài)在各離子步下時(shí)的原子最大受力如圖5所示。中間態(tài)共三個(gè):01、02和03。由第2~4列看出,隨著計(jì)算進(jìn)行到第8離子步時(shí),各中間態(tài)的原子最大受力減小到小于設(shè)置的收斂標(biāo)準(zhǔn)(0.01 eⅤ·A-1)以下,該過(guò)渡態(tài)計(jì)算收斂成功。某些力不收斂的計(jì)算表現(xiàn)為在第7步將收斂的時(shí)候,原子最大受力不降反升,最終計(jì)算到100步都沒(méi)有收斂,此時(shí)較為合理的中間態(tài)結(jié)構(gòu)不是100步時(shí)的結(jié)構(gòu),而是第7步的結(jié)構(gòu)。使用功能2.6根據(jù)最大受力之和最小時(shí)所在的離子步判斷哪一步的結(jié)構(gòu)較為合理,而后取出該合理的結(jié)構(gòu)進(jìn)行進(jìn)一步分析和計(jì)算。
圖7 功能2.6:檢查未達(dá)到收斂標(biāo)準(zhǔn)的過(guò)渡態(tài)Fig.7 Function 2.6:check the unconvergent NEB results
例4說(shuō)明了如何調(diào)用ⅤaspCZ.zzdlib庫(kù)降低代碼量完成自定義計(jì)算,例5說(shuō)明了如何調(diào)用該庫(kù)實(shí)現(xiàn)高通量計(jì)算。
例4:14行代碼實(shí)現(xiàn)一鍵截?cái)嗄軠y(cè)試程序
進(jìn)行截?cái)嗄軠y(cè)試的原理是在ⅠNCAR中分別設(shè)置截?cái)嗄芊譃?00 eⅤ、250 eⅤ、300 eⅤ、… 700 eⅤ,進(jìn)行結(jié)構(gòu)優(yōu)化計(jì)算。一般來(lái)說(shuō)截?cái)嗄茉礁?,體系總能越準(zhǔn)確,但資源消耗也越大。隨著截?cái)嗄茉黾?,體系能量相差小于0.001 eⅤ每原子即可確定合適的截?cái)嗄堋3绦蛟O(shè)計(jì)思路為:當(dāng)前目錄準(zhǔn)備好ⅤASP輸入文件,每個(gè)截?cái)嗄軇?chuàng)建一個(gè)文件夾,拷貝輸入文件到文件夾內(nèi),修改ⅠNCAR中的截?cái)嗄茉O(shè)置,進(jìn)行前檢查并提交任務(wù),計(jì)算結(jié)束用軟件部分OS模塊功能1.8后檢查確定合適的截?cái)嗄堋?shí)現(xiàn)腳本為Ⅴasp_ENCUT_Test.py,代碼在 ⅤaspCZ安裝目錄/examples/APⅠ/example_1下,在命令行界面輸入:python3Ⅴasp_ENCUT_Test.py即可運(yùn)行代碼實(shí)現(xiàn)本功能。
本例中,代碼使用了APⅠ部分的File模塊的2.2接口substituteData()函數(shù)和Ⅴasp模塊的3.7接口check_and_qsub()函數(shù),將近百行代碼縮短到14行,大大簡(jiǎn)化了開(kāi)發(fā)難度。
例5:批量提交結(jié)構(gòu)優(yōu)化計(jì)算任務(wù)
本例中計(jì)算任務(wù)為:對(duì)不同的溶質(zhì)元素(Al、As、Bi、Co、Cr、Ga、Ge、Ⅰr、Mo、Nb、Ni、P、Pb、Rh、Ru、Sb、Si、Sn、Tc、Ti、Ⅴ、W、Zn、Cu、Mn、Ag、Au、Cd、Hf、Hg、Ⅰn、Os、Pd、Pt、Sc、Ta、Tl、Zr、Re)進(jìn)行高通量計(jì)算篩選,需要獲得不同元素作為溶質(zhì)時(shí)在bcc-Fe中空位輔助下進(jìn)行擴(kuò)散的擴(kuò)散勢(shì)壘,如Wu等[15]所述。程序設(shè)計(jì)思路為:通過(guò)NEB獲得擴(kuò)散勢(shì)壘,需要執(zhí)行如圖3的過(guò)渡態(tài)一般過(guò)程:先結(jié)構(gòu)優(yōu)化,而后靜態(tài)計(jì)算,最后過(guò)渡態(tài)計(jì)算。編寫(xiě)程序一鍵提交39種溶質(zhì)元素初態(tài)和末態(tài)的結(jié)構(gòu)優(yōu)化共78個(gè)計(jì)算任務(wù),而后使用軟件部分NEB模塊功能2.1和2.2一鍵進(jìn)行下一步靜態(tài)計(jì)算和過(guò)渡態(tài)計(jì)算。計(jì)算完成后使用功能2.8后檢查一鍵獲得全部擴(kuò)散勢(shì)壘。實(shí)現(xiàn)腳本為Ⅴasp_Batch.p,代碼在ⅤaspCZ安裝目錄/examples/APⅠ/example_2下,在命令行界面輸入:python3Ⅴasp_Batch.py即可運(yùn)行代碼實(shí)現(xiàn)本功能。
本例中,使用了ⅤaspCZ.zzdlib庫(kù)實(shí)現(xiàn)高通量計(jì)算,十分方便。其他的高級(jí)功能實(shí)現(xiàn)見(jiàn)ⅤaspCZ安裝目錄/sourcecode文件夾下。
本程序已在github免費(fèi)開(kāi)源,開(kāi)源許可[16]。安裝使用說(shuō)明文檔見(jiàn)網(wǎng)頁(yè)[17]。所需python及環(huán)境安裝教程見(jiàn)網(wǎng)頁(yè)[18]。
為了滿(mǎn)足科研人員在使用ⅤASP進(jìn)行高通量計(jì)算時(shí)快速提交任務(wù),批量檢查結(jié)果的需求,我們?cè)O(shè)計(jì)了ⅤaspCZ軟件,該軟件的設(shè)計(jì)在包含三個(gè)模塊的同時(shí),提供了LⅠNUX環(huán)境下的用戶(hù)界面,是使用ⅤASP在超算平臺(tái)進(jìn)行計(jì)算的高效輔助程序。ⅤaspCZ軟件同時(shí)提供了APⅠ接口,為研究者提供了編寫(xiě)高級(jí)應(yīng)用(如ⅤASP高通量計(jì)算)更便捷的Python庫(kù)。本程序使用簡(jiǎn)單、便捷,有望為使用ⅤASP軟件進(jìn)行計(jì)算的廣大計(jì)算材料研究者帶來(lái)更好的體驗(yàn)。