20170730-學習筆記
- 向大家推薦一個Youtube上的好頻道:Physics Videos by Eugene Khutoryansky。裡面對物理概念的描述非常精闢,而且簡單易懂。另外輔助3D動畫技術可以很直觀的描述所討論的物理概念。強烈推薦!!
- 在JACS官方網站上閑逛,偶然看到了JACS的投稿準則(JACS-Author-Guide),裡面有一小段是和理論計算有關的。粘貼到這裡,和大家分享一下:
在這裡說到「in addition to meeting the general requirements specified above all Articles」,那麼這些general requirements主要指的是什麼呢?我覺得可以用文中的這句話來表現:
並且在JACS上發表的文章必須滿足:
「pure" chemistry是JACS發表文章的前提條件。但什麼是pure chemistry?這個問題希望和大家討論一下。我個人認為pure chemistry包括以下幾條:
(1)新的實驗方法,可以帶來全新的數據/對原有物理量的測量更加準確
(2)提出新的模型,更好的解釋了之前的實驗現象。並給出了一定程度的預測。
(3)提出新的概念(Conceptual breakthroughs)。這和新的模型其實是互相呼應的。
(4)合成出新的物質(greatly expanded scope)。對新物質的研究可以為化學創造一片新的領域。
另外,在這篇指南中,還明確說明了哪類文章是不夠發表資格的:
在發表期刊的時候,一定要事先讀讀author guide。看看期刊編輯的要求有哪些。這樣也可以作為我們研究選題的參考標準。
- 文獻調研:(來自於ACS Editor"s Choice)
這篇文章作者通過在無定型Ti氧化物中進行金屬原子參雜,從而降低了ORR的活性。因為ORR對於金屬腐蝕(corrosion)過程有很大的促進作用,因此將其活性降低可以防止金屬的進一步腐蝕。如下是金屬腐蝕的示意圖:
作者不光通過理論計算說明了通過參雜金屬原子到無定型Ti氧化物中會製造出使ORR活性降低的催化劑,並且通過實驗手段證明了這一點。下面我們通過理論、實驗兩個部分來了解一下作者都做了些什麼。
【理論部分】:
軟體:VASP。泛函:PBE。贗勢:PAW。(幾乎已經成為主流的計算選擇了)
Encut Energy:450eV。K-Meshing:2*2*1(相對來說比較小啊)。
有關零點能(ZPE: Zero point energy)以及熵(T*S)修正。作者使用了別人的數據(其實這也是可以的,方便了自己的工作量)
另外作者還考察了溶劑化能的影響(使用VASPsol代碼,水的電介常數被設置成了78.4)。以及不同泛函的影響(HSE06 Hybrid,開啟自旋極化,但K-mesh選擇Gamma-Point)。這樣可以比較高級的泛函對結果有什麼樣的影響。同時在所有doping的體系當中,也都使用HSE06進行了計算。
【那麼HSE06如何在VASP中進行設置呢?】我們可以通過以下方法(來自VaspWiki):
對於無定型Ti氧化物的結構作者採用了較為複雜的處理方式:先使用LAMMPS模擬了晶體退火時的行為。再用VASP進行了幾何結構優化:
下面我們需要關心一下他們究竟計算了哪些體系?又得到了什麼樣的結果?
【1】首先它們比較了經過LAMMPS + VASP計算後得到的表面結果與實驗測量值之間的對比。可以發現兩者基本類似(計算值會比實驗值稍高一些)。
我們可以看看作者對這個模型的評價是怎樣的:
【2】ORR的超電勢(Overpotential)計算
在這裡,作者假設了質子-電子耦合轉移的步驟。通過計算每一步的Gibbs自由能就可以得到圖(b)。但是在計算自由能的時候應該記住要將DFT所求的能量進行ZPE和TS的修正【如果採用VaspSol則還需要加入溶劑化效應】:
緊接著通過調整電極電勢將該反應:
的Gibbs自由能調整。另外通過改變pH也可以改變質子的自由能。最後整個反應的超電勢就是升高最大的那一步能量。
通過這樣的計算,作者很好的重現了實驗數據:
【3】通過描述符(Descriptor)來對參雜金屬原子進行掃描(Screening)
他們的目的是希望通過增加ORR的超電勢來達到降低其活性的目的。
那麼將參雜原子加入到表面當中,究竟應該在哪個位置上呢?作者認為,當參雜體系的能量最低時,它對ORR的影響會最大。
最終Screening的結果如下:
圖標如下:
當計算完成後,對計算結果的判斷以及預期也很重要,我們看看作者的說法:
可以看到。作為理論計算的工作人員,必須分析自己模型的優劣程度。這樣才是比較完整的科學研究。
【4】理論與實驗的對照
關於實驗部分,因為本人也不是很了解。所以如果有感興趣的可以直接去看原文。
在這篇文章中,作者的思路十分清晰:
建立結構-->計算超電勢(無參雜時)-->通過改變參雜金屬進行Screening-->與實驗進行比較。每一步中有關的計算方法都已經在上面闡述清楚了。
在這裡不僅僅希望和大家分享一篇文章。也想和大家分享一下寫文章的思路以及文章中具體計算的方法(technique之類的東西)。希望大家會覺得有用。
- ACS期刊的影響因子:(來自鏈接)
- 一篇有關計算平衡電位的文章:
他們提出了一種全新的計算方法來計算氧化還原電勢。從TOC中可以看出,理論和實驗的結果符合的相對較好。(不過相差0.3V這也有點太大。。。不知道是不是只能算成這樣)
對這篇文獻的閱讀可以讓我們更好的了解電化學反應體系的複雜性:(1)溶液(2)電極電勢。有時可能還會有pH的改變。這篇文章的理論性較強,如果對此有感興趣的可以參見具體文章。
- 有時間想寫一些與COMSOL在電化學中應用有關的notes。大家有木有感興趣的?~~
- 現在是晚上19:51。快八點了。下面要看些什麼呢?我打算整理以下ASE的東西。
ASE的全稱是Atomic Simulation Environment,是DTU理論化學組寫的一個Python模塊。裡面有許多的函數可以幫助我們建立表面結構、以及建立計算文件。因為我本人用的比較多的是VASP,而且主要偏重於表面計算。因此下面講的都和建立表面有關係。
ASE的官方網站為:Atomic Simulation Environment。下載以及文檔、還有tutorial都在上面。那麼官方說法中ASE是個什麼呢?請看下面:
ASE是希望將自己做成一個平台。這個平台可以搭建計算體系、腳本化計算流程以及進行後續的結果分析。ASE所使用的語言是Python,而且ASE經常和numpy以及scipy兩個科學計算庫一起合用。
同時ASE也是一個開源平台:
但是我們如果想要學習ASE,那麼就必須有Python語言的基礎。下面我們用很少的篇幅來將Python的基礎語法複習一遍(如果對Python很有興趣的可以去看廖雪峰的這套網路教程:Python 2.7教程。
根據昨天學習C++的方式一樣。我們在Python中重點要學習這些寫法:(1)選擇語句【If else / switch】(2)循環語句(Python中的語法糖)(3)建立函數/過程。(4)讀/寫文件。
要記得一點,在Python中所有的結構塊都是用縮進來表示的。
【基礎語句】
在Python當中輸入一個量,並將這個量傳遞給一個函數:
var = raw.input()var = raw.input("Please input a number")
Python當中的輸出語句:
print "hello, world"print 100+200
Python中的注釋為#。
# This is a comment
【數據結構:list與tuple】
Python中list的生成以及其相關操作:
myList = ["a", "b", "c"] # build a listlen(myList) # length of a listmyList[0] # First item in the list, index start with 0myList[-1] # Last item in the listmyList.append("d") # Add "d" to the last of the myListmyList.insert(1, "e") # Add "e" to the 1st position (second item)myList.pop() # Delete the last item in myListmyList.pop(index) # Delete the item at index positionmat = [[1, 2, 3], [4, 5, 6]] # 2-dimensional matrix, mat[0][2] = 3
Python中tuple的生成以及相關操作:
其實Tuple的用處不是很大,因為它一旦生成之後就不能修改了。
myTuple = (1, 2, 3) # build a tuple
【選擇語句】:
if (condition): stats;elif (condition): stats;else: stats;
【循環語句】:
Python中循環有兩種。第一種是for ... in ...,第二種是while循環。
for i in range(n+1): # iteration from 1 to n statsmyList = ["a", "b", "c"]for item in myList: # iteration for all items in myList statswhile (condition): # iteration until condition is false stats
【函數與過程】:
在任何語言中,函數都必須有:(1)返回值類型(2)函數名稱(3)參數名稱。在Python中也不例外。
對於函數的調用,我們已經在上面看到了(raw_input())。那麼在Python語言中本身就有許多的定義好的函數:(參見2. Built-in Functions)
Python中自定義函數的寫法是:
def func_name(parameter): # definition of a function stats return variable # return value of the function
在Python中還有一個比較有趣的語句:pass。當你不知道要些什麼的時候,可以用pass來「佔位」,這樣可以保證程序正確運行:
def nowork(): pass # Notice, in here no ;
當我們想讓函數的返回值多於一個時,我們可以這麼來做:
def func(parameters): stats return nx, nyx, y = func(parameters) # x = nx, y = ny
【Python中的語法糖(Grammer sugar)】
切片操作:
myList[0:3] # choose index from 0 to 3myList[:3] # the same as abovemyList[-2:] # the second last item to the last onemyList[0:10:2] # choose from index 0 to 10, in between 2
一個String同時也可以看成是一個List。
【模塊Module的調用】
在Python當中有許多的模塊(Module)。例如ASE本身就是一個Module。那麼對於module的調用在Python中是用import來進行的:
import module1 # Now you can use module1import module1 as m1 # use m1.func()from x import y # x is big module, y is submodule
【文件讀寫】
在Python中讀文件和寫文件是非常簡單的事情。具體舉例如下:
f = open("filename.txt", "r") # "r" means the file is readablef.read() # read the whole file once as stringsf.close() # close the file / I/O stream# other way of read file (line by line)for line in f.readlines(): # read file line by line line.strip() # get rid of "
"
寫文件和讀文件有異曲同工之妙:
f = open("filename.txt", "w") # "w" means the file is writablef.write(something) # write something into the file
在這裡f.write()的寫法相當於將f看成了一個對象(object)。其中write是對象的方法。
由於正則表達式也是一個編程非常有效的工具。因此我們以後有機會還會慢慢介紹。
上面將Python的一些基礎知識介紹完了,下面我們就來介紹以下ASE的有關操作。
我們使用ASE是想搭建計算模型。那麼計算模型是由原子所組成的,因此我們的第一步就是:建立一個原子。關於這點我們可以用下面的Python語句來實現:
from ase import Atom # Build an atoma = Atom("H", (0,0,0)) # Build an hydrogen atom at (0,0,0)
最後我們輸出a的結果為:
在這裡a其實是一個Atom對象,那麼對於這個對象會有許多的參數(attribute)以及方法(methods),我們可以通過ASE的官網文檔對Atom對象進行了解(:
我們可以看到,一個Atom對象所擁有的參數為symbol, position, tag, momentum, mass, magmom, charge。那麼如果我們想看a的原子種類和坐標,我們可以這麼來做:
那麼下面我們從原子開始構建分子。這就是ASE中的Atoms模塊。
具體的使用方法如下:
from ase import Atomsd = 1.1 # bond length of CO moleculemol = Atoms("CO", [(0,0,0), (0,0,d)])
那麼我們自然也想知道Atoms有什麼參量以及方法:
在Atoms對象中所有的參數
接下來還有呢:
以及一些官方的例子:
上面僅僅是介紹了兩個module(Atom與Atoms),在ASE官方網站上我們還可以看到許多的module:
當然我們不可能在一天就把這些東西都了解完。學習ASE也需要長時間的努力以及不斷的試錯才行。明天可能會學到build, lattice。這兩個庫都是和建立模型有關的。
- 今天就學到這裡了。。。去看看《權利的遊戲:第七季》~~
推薦閱讀: