Skip to content

使用mathematica构建双层晶格

双层石墨烯晶格

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

石墨烯晶格:

1.构建元胞

假设晶格常数$a=1$,以元胞中心为原点。

ClearAll[ucellgra]
ucellgra = {{-1/2, 0}, {1/2, 0}};
ListPlot[ucellgra]
pALsZlV.jpg 可以看到代码在[-1/2,1/2]处画出了两个点,作为一个元胞。

2.构建基矢

ClearAll[vas, vascoeef]
vas = {{3/2, Sqrt[3]/2}, {3/2, -Sqrt[3]/2}};
pALy1Hg.png 按照晶格结构,构建了两个基矢。

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}]
pALyq2t.jpg 可以看到在各基矢的方向平移得到一部分晶格。

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]
pAL6HwF.jpg

双层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]
pAL6xQx.jpg

此处省略详细步骤,具体步骤和石墨烯晶格类似。