グラフェンシートの構造を生成するプログラムを作成し、VMDで表示させてみよう。
グラフェンとは、C(炭素)が下図のような2次元6角形格子をなしたものである。a は格子定数 でa=2.461Åである。単位格子には2つのC原子(A,B)が含まれる。それぞれの原子の座標はA: (0, 0), B: (2/3, 2/3)である。

1. VC++で以下のプログラムを作成する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include "stdafx.h" int _tmain( int argc, _TCHAR* argv[]) { double a = 2.461; // lattice constant double a1[2], a2[2]; // basis vectors double A[2], B[2]; // atom positions; int L1, L2; // number of repitition double b[2], c[2]; // temporal memory int i,j; FILE *fp; a1[0] = a * 0.5 * 1.7320508; a1[1] = a * 0.5; a2[0] = a * 0.5 * 1.7320508; a2[1] = a * (-0.5); A[0] = 0.0; A[1] = 0.0; B[0] = 2.0/3.0; B[1] = 2.0/3.0; L1 = 10; L2 = 10; fopen_s(&fp, "graphen.xyz" , "wt" ); fprintf (fp, "%d\n" , 2*L1*L2); fprintf (fp, "graphen sheet\n" ); for (i=0; i<L1; ++i){ for (j=0; j<L2; ++j){ // put atom A b[0] = ( double )i + A[0]; b[1] = ( double )j + A[1]; c[0] = a1[0] * b[0] + a2[0] * b[1]; c[1] = a1[1] * b[0] + a2[1] * b[1]; fprintf (fp, "C %f %f 0.0\n" , c[0], c[1]); // put atom B b[0] = ( double )i + B[0]; b[1] = ( double )j + B[1]; c[0] = a1[0] * b[0] + a2[0] * b[1]; c[1] = a1[1] * b[0] + a2[1] * b[1]; fprintf (fp, "C %f %f 0.0\n" , c[0], c[1]); } } fclose (fp); return 0; } |
2. プログラムをビルド、実行
3. グラフェンの表示
- プロジェクト・ディレクトリの中の、プロジェクト名と同じディレクトリの中に “graphen.xyz”というファイルが生成されている。
- VMDでこの”graphen.xyz”を読み込み、分子構造を表示する。
- 下図のような構造が表示されたら成功。
