グラフェンシートの構造を生成するプログラムを作成し、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”を読み込み、分子構造を表示する。
- 下図のような構造が表示されたら成功。
