双层石墨烯晶格
石墨烯晶格是一个元胞中包含两个原子的晶格,整个晶格可以由一个元胞在基矢方向上的平移得到。因此在mathematica中也可以从构建元胞,构建基矢,平移元胞这个三步实现整个晶格的构建。
石墨烯晶格:

1.构建元胞
假设晶格常数$a=1$,以元胞中心为原点。
ClearAll[ucellgra]
ucellgra = {{-1/2, 0}, {1/2, 0}};
ListPlot[ucellgra]
可以看到代码在[-1/2,1/2]处画出了两个点,作为一个元胞。
2.构建基矢
ClearAll[vas, vascoeef]
vas = {{3/2, Sqrt[3]/2}, {3/2, -Sqrt[3]/2}};
3.平移得到晶格
vascoeef = {{0, 0}, {0, 1}, {1, 0}, {1, 1}};
lat = Table[
TranslationTransform[vascoeef[[i]] . vas][ucellgra], {i, 4}];
ListPlot[lat, AspectRatio -> {1, 1, 1}]
4.双层晶格
单层晶格到双层晶格的关键在于添加维度,给元胞添加维度,添加基矢和基矢维度。
ucellgra3d = {{-1/2, 0, 0}, {1/2, 0, 0}};
vasgra3d = {{3/2, Sqrt[3]/2, 0}, {3/2, -Sqrt[3]/2, 0}, {0, 0, 1}};
vascoeefgra3d = {{0, 0, 0}, {0, 1, 0}, {1, 0, 0}, {1, 1, 0}, {0, -1,
0}, {-1, 0, 0}, {-1, -1, 0}, {1, -1, 0}, {-1, 1, 0}, {0, 0,
1}, {0, 1, 1}, {1, 0, 1}, {1, 1, 1}, {0, -1, 1}, {-1, 0,
1}, {-1, -1, 1}, {1, -1, 1}, {-1, 1, 1}};
latgra3d =
Table[TranslationTransform[vascoeefgra3d[[i]] . vasgra3d][
ucellgra3d], {i, 18}];
ListPointPlot3D[latgra3d, BoxRatios -> Automatic]
双层Kagome晶格
Kagome晶格是一个元胞中包含三个原子的晶格,整个晶格可以由一个元胞在基矢方向上的平移得到。因此在mathematica中也可以从构建元胞,构建基矢,平移元胞这个三步实现整个晶格的构建。
双层kagome晶格和双层石墨烯晶格类似,只是将元胞换为三个原子,同时也更换基矢。
ucellkagome3d = {{-1/2, 0, 0}, {1/2, 0, 0}, {0, -1, 0}};
vaskagome3d = {{1, Sqrt[3], 0}, {1, -Sqrt[3], 0}, {0, 0, 1}};
vascoeefkagome3d = {{0, 0, 0}, {0, 1, 0}, {1, 0, 0}, {1, 1,
0}, {0, -1, 0}, {-1, 0, 0}, {-1, -1, 0}, {1, -1, 0}, {-1, 1,
0}, {0, 0, 1}, {0, 1, 1}, {1, 0, 1}, {1, 1, 1}, {0, -1, 1}, {-1,
0, 1}, {-1, -1, 1}, {1, -1, 1}, {-1, 1, 1}};
latkagome3d =
Table[TranslationTransform[vascoeefkagome3d[[i]] . vaskagome3d][
ucellkagome3d], {i, 18}];
ListPointPlot3D[latkagome3d, BoxRatios -> Automatic]
此处省略详细步骤,具体步骤和石墨烯晶格类似。



