跳轉到內容

Potopt 分子動力學套件

0% developed
來自華夏公益教科書

Potopt 是一個用分子動力學軟體,用ISO C11實現,並利用MPI進行並行處理。

本手冊記錄了該軟體的預釋出版本,釋出於 2014 年 2 月 26 日。實現和使用者介面的詳細資訊尚未確定,並且在第一個版本釋出之前很可能發生重大變化。

$ perl yaml2pob.perl \
      < Initial-state.yaml > Initial-state.pob 
$ mpirun -n N \
      potopt Split [Iterations [Step [Tau2]]] \
      < Initial-state.pob > Output.log 2>&1 

Potopt 是一個基於 ISO C11 和 MPI 的程式碼(分別用 GCC 4.8.2 和 Open MPI 1.6.5 測試),它可以求解使用者指定質量、初始位置和速度的粒子系統運動方程。這些方程基於Morse 勢,每個相互作用的粒子對(可能是共享化學鍵或以其他方式相關的粒子)都指定了引數。

給定於 mpirun(1)-n N 引數指定要執行的程序數。有關更多資訊,請參閱所用 MPI 實現的文件。

Split 引數當前是必需的,它是一個用空格分隔的正整數字符串,用於指定每個程序要模擬的粒子數。當然,這些數字應該加起來等於所考慮系統中的粒子總數,例如,在單個程序 (-n 1) 內模擬 22 個原子的石墨烯樣本系統,可以使用 22,兩個程序 (-n 2) 可以使用 '11 11',三個程序 (-n 3) 可以使用 '7 8 7',等等。

Iterations 是要執行的迭代次數,預設為 64。65536 或更大的值可能更實際。

Step 是初始時間步長(以秒為單位),預設為 1e-18(或 1 as),但約為 2e-19 的值可能是更合適的選擇。然而,該軟體將持續嘗試找到最佳的時間步長,基於 main_loop () 中設定的約束條件(檢視那裡的 redo_p 區域性變數)。

Tau2 是系統應失去一半動能的特徵時間,預設為 4e-18(或 4 as)。

基於 YAML 的輸入格式

[編輯 | 編輯原始碼]

模擬程式碼需要一個特定於應用程式(並且可能依賴於平臺)的二進位制編碼流,該流由使用輔助 yaml2pob.perl Perl 指令碼從YAML 流中生成。

輸入 YAML 流可能如下所示(對於單個六元碳環,忽略原子)。

---
xyz:
  - { a: 0, xyz: [ 0.0, 7.104999999999999e-11, 0 ] }
  - { a: 1, xyz: [ 1.2306220987776874e-10, 0.0, 0 ] }
  - { a: 2, xyz: [ 2.461244197555375e-10, 7.104999999999999e-11, 0 ] }
  - { a: 3, xyz: [ 0.0, 2.1315e-10, 0 ] }
  - { a: 4, xyz: [ 1.2306220987776874e-10, 2.842e-10, 0 ] }
  - { a: 5, xyz: [ 2.461244197555375e-10, 2.1315e-10, 0 ] }
bonds:
  - { a: 0, b: 1 }
  - { a: 0, b: 3 }
  - { a: 1, b: 2 }
  - { a: 2, b: 5 }
  - { a: 3, b: 4 }
  - { a: 4, b: 5 }

xyz 部分指定了粒子(原子),而 bonds 指定了用於模擬化學鍵w:Morse 勢的引數。

引數如下。

粒子
  • a – 唯一的粒子識別符號(可以是任何字串);
  • xyz – 粒子的初始位置;
  • v(可選) 粒子的初始速度;預設為零向量;
  • m(可選) 粒子的質量;預設為 1.660539e-27,或 1.660539 × 10⁻²⁷ g,這可能是單個w:碳原子的質量近似值。
  • a, b – 共享鍵的粒子的識別符號;
  • aa, r, D(可選) Morse 勢引數;預設為 2.625e10, 1.421e-10, 和 6.03105e-19,這些是 C─C 單鍵的可能值。[1]

請注意,除了表示轉換之外,所描述的 Perl 輔助程式將稍微改變粒子的初始位置和速度,根據程式碼中的 $perturb$pert_v 變數(指定相應變化的標準差)。這是作為測試措施一種可能的方式來推動系統脫離區域性最小值,如果初始狀態對應於區域性最小值。

結果系統狀態將傳送到stdout,格式為用空格分隔的值。這些值是質量位置(3 個值)和速度(3 個值)。

Potopt 可執行檔案可以用GNU C 編譯器構建,在GNU Make下執行,如下所示。(不需要 Makefile)。

$ cp -- ns8xrqxiojtkiin4drpx4ne19y.c potopt.c 
$ LC_ALL=C make CC=mpicc CFLAGS='-g -O2 -Wall -std=gnu11' \
      LDFLAGS=-lm   potopt 

或者,可以使用以下簡單的 GNUmakefile 檔案,GNU Make 呼叫變為 $ LC_ALL=C make potopt

VPATH   = $(srcdir)
CC      = mpicc
CFLAGS  = -g -O2 -Wall -std=gnu11
LDFLAGS = -lm

all: potopt

Split 引數應該被設定為可選。

模擬程式碼以特定於應用程式(並且可能依賴於平臺)的編碼讀取二進位制檔案。使用X.690(DER 或 BER)中指定的編碼,或者可能是NetCDF,可能是一個更好的選擇。

更糟糕的是,雖然模擬程式碼從二進位制檔案讀取初始系統狀態(該檔案可以從YAML 基文字流建立),但結果狀態改為儲存為AwkGnuplot 友好的用空格分隔的值形式,這需要一個單獨的程式(在此未提供)將其轉換為適合繼續模擬的東西。

一些詳細資訊以某種冗長且不易解析(例如,使用 Awk 或 Gnuplot)的文字格式報告到stderr 上的每次迭代。對於數萬次迭代,結果流的大小最終可能達到數十兆位元組

沒有適當的錯誤報告。該程式碼改為依賴於一堆 assert () 宏呼叫。

也沒有適當的命令列介面。

還請檢視程式碼中的 FIXME: 註釋。

可用性

[編輯 | 編輯原始碼]

此處記錄的 Potopt 元件的預釋出版本可從以下位置獲得

Potopt 由 Ivan Shmakov 編寫。

Potopt 是自由軟體:您可以在 BSD 類 許可證(包含在程式碼中)的條款下重新分發和/或修改其當前版本請注意,但是,許可證可能會在 0.1 版本釋出之前或時更改為 GNU 通用公共許可證 版本 3。

此文件是 Wikibooks 上正在進行的免費協作專案,並且根據 知識共享署名-相同方式共享許可證 (CC BY-SA) 版本 3.0 提供。

此頁面內容基於作者早期的 帖子,該帖子釋出在 news:alt.sources 上,似乎沒有傳播開來。

另請參閱

[編輯 | 編輯原始碼]

參考文獻

[編輯 | 編輯原始碼]
  1. Avinash Parashar (2012-10-26). "多尺度模型研究石墨烯對石墨烯/聚合物奈米複合材料斷裂特性的影響". 奈米尺度研究快報. 7 (1): 595. doi:10.1186/1556-276X-7-595. 檢索於 2014-02-08. {{cite journal}}: 未知引數 |coauthors= 被忽略 (|author= 建議) (幫助)
華夏公益教科書