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則還需要加入溶劑化效應】:

G = E_{DFT} + ZPE - T	imes S + (E_{solv})

緊接著通過調整電極電勢將該反應:

H^++e^-
ightarrow frac{1}{2}H_2

的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。這兩個庫都是和建立模型有關的。

  • 今天就學到這裡了。。。去看看《權利的遊戲:第七季》~~

推薦閱讀:

舌頭白痴的東京異食錄 - 老闆,加10顆蛋
吃午飯的流派
歐陽 king 為什麼沒有女朋友

TAG:科研 | 化学 | 日记 |