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