寫好 H 吸附輸入檔產生器,把整批計算一鍵開出來
今天把 Co-Pt HEA slab 做 HER 氫吸附計算的輸入檔產生流程寫成兩支 Python 腳本,之後教授給新的面,我就能一鍵把整批計算開出來。
generate_H_inputs.py:自動掃所有吸附位點
吃一個 slab 的 POSCAR,自動枚舉 top / bridge / hollow 三種吸附位點,每個位點產生一個資料夾,內含 POSCAR / INCAR / KPOINTS / make_potcar.sh,另外附上兩個參考計算:clean_slab(乾淨表面)和 H2_molecule(算 ½E(H₂))。幾個刻意的設計:
- 只依賴 numpy:不用 pymatgen / scipy,這樣上國網 Taiwania 3 不必另外裝套件。
- 用幾何鄰居法枚舉位點:因為是隨機合金表面、沒有對稱可利用,不能靠對稱簡化,只能用鄰居距離判斷 top/bridge/hollow。
- 自動加 Selective Dynamics:固定底部 N 層、放鬆頂層 + H(
--nfix可調),固定底層是防止整片 slab 亂飄、也是防不收斂的關鍵。 - 產出
sites_summary.csv:記錄每個位點的類型,以及最近的表面原子是 Co 還是 Pt——之後分析哪類位點最利 HER 時會用到。 - 命名慣例
類型_最近表面原子_編號(例如top_Co_001、hollow_Pt_012),一看就知道 H 吸在哪。
踩到的坑:Windows 主控台印中文會炸
在 Windows 跑腳本時,主控台預設是 cp950 編碼,直接 print 中文或中文路徑會直接報錯中斷。解法是在程式開頭強制把 stdout 轉成 UTF-8(sys.stdout.reconfigure(encoding="utf-8", errors="replace")),這樣本機除錯和之後上國網跑都不會因為編碼掛掉。
distribute_potcar.py:一鍵分發贗勢
POTCAR 是官方授權檔不能自己生成,要照 POSCAR 的元素順序串接。這支腳本會自動讀每個資料夾 POSCAR 的元素列,處理三種組合:slab+H(Co Pt H)、clean_slab(Co Pt)、H₂(只有 H),並驗證 TITEL 對不對。
想通的工作流程
教授給面 → generate_H_inputs.py 產生輸入 → 放好 POTCAR、distribute_potcar.py 分發 → 上 Taiwania 3。上機前先送 5~10 個測收斂(含 clean_slab 和 H₂),確認 OK 再全批送,最後用 eV 對照 sites_summary.csv 找最佳位點。
目前這一步只是把輸入檔開出來,實際能不能收斂、ΔG_H* 是多少都還沒計算,要上機跑過才知道。
今日收穫:把「重複勞動」交給腳本,之後每個新的面都是同一套指令,錯誤也少;也更清楚為什麼隨機合金不能偷懶用對稱,只能老實枚舉。