改进版的平面波展开法计算二维声子晶体带隙特性
时间: 2023-08-01 19:13:09 浏览: 69
平面波展开法是计算周期性结构(如晶体)能带结构的一种常用方法。对于声子晶体,可以将其看作具有周期性结构的介质,因此也可以使用平面波展开法来计算其带隙特性。
在二维声子晶体中,声波的传播方向被限制在平面内,因此只需要考虑平面波在二维平面内的展开。假设晶体的基元周期为$a$,则可以将平面波表示为:
$$
e^{i\vec{k}\cdot\vec{r}}=e^{ik_xx}e^{ik_yy}
$$
其中$\vec{k}$为波矢,$x$和$y$为晶体平面内的坐标。将平面波代入声子晶体的动力学方程中,可以得到一个本征值问题,其解给出了声子晶体的能带结构。
在实际计算中,需要对波矢$\vec{k}$进行离散化,即将其分解为$k_x=2\pi n_x/L_x$和$k_y=2\pi n_y/L_y$,其中$L_x$和$L_y$为晶体的尺寸,$n_x$和$n_y$为整数。然后,可以将平面波展开为:
$$
e^{i\vec{k}\cdot\vec{r}}=\sum_{n_x,n_y}c_{n_x,n_y}e^{i\frac{2\pi}{L_x}n_xx}e^{i\frac{2\pi}{L_y}n_yy}
$$
其中$c_{n_x,n_y}$为系数,需要通过求解本征值问题来确定。将展开后的平面波代入动力学方程中,可以得到一个矩阵本征值问题,其解给出了声子晶体的能带结构和带隙特性。
需要注意的是,由于离散化导致的误差和计算量的增加,平面波展开法在计算大尺寸的声子晶体时可能会遇到困难。因此,一些改进方法,如Wannier函数和投影算子方法,已经被提出来用于加速计算。
相关问题
平面波展开法计算二维准零刚度声子晶体带隙特性matlab
在Matlab中,可以使用工具箱中的“Plane Wave Expansion (PWE)”函数来计算二维准零刚度声子晶体的带隙特性。具体步骤如下:
1. 定义晶格:确定二维晶格基向量和布拉吉格子矢量。
2. 定义材料:使用“Crystal”函数定义材料的密度分布。
例如,假设二维准零刚度声子晶体的晶格常数为a,定义材料的密度分布为正弦波形式:
```
a = 1; % 晶格常数
r = [0 0; 0.5 0.5]; % 原子位置
crystal = Crystal({a*eye(2), r}, 'Pnma', 'Density', @(x,y) sin(2*pi*x/a).*sin(2*pi*y/a));
```
其中,`Crystal`函数用于定义晶体结构,`Density`参数用于指定材料的密度分布,可以使用函数句柄来自定义密度函数。
3. 计算弹性常数矩阵:使用“ElasticMatrix”函数计算波矢空间中的弹性常数矩阵。
例如,假设声速为c,可以使用如下代码计算弹性常数矩阵:
```
c = 1; % 声速
C = ElasticMatrix(crystal, 'c', c);
```
其中,`ElasticMatrix`函数用于计算弹性常数矩阵,`'c'`参数用于指定声速大小。
4. 计算带隙:使用“BandStructure”函数计算声子晶体的带隙特性,并绘制能带结构图。
例如,假设带宽范围为[-0.5, 0.5],可以使用如下代码计算并绘制能带结构图:
```
k = [0 0; 0.5 0; 0.5 0.5; 0 0.5]; % 波矢路径
nk = 100; % 波矢路径离散化点数
[B, kx, ky] = BandStructure(crystal, C, k, nk, [-0.5 0.5]);
plot(B, 'k-', 'LineWidth', 2);
xlabel('Wave vector k');
ylabel('Phonon frequency \omega');
```
其中,`BandStructure`函数用于计算声子晶体的能带结构,`k`参数用于指定波矢路径,`nk`参数用于指定波矢路径的离散化点数,最后一行代码用于绘制能带结构图。
需要注意的是,具体的计算和绘图参数可以根据需要进行调整和优化,例如使用不同的材料、晶格和波矢路径等。
平面波展开法计算二维准零刚度声子晶体带隙特性matlab程序
平面波展开法可以用来计算二维准零刚度声子晶体的带隙特性。这里提供一个简单的Matlab程序供参考:
```
% 定义晶格
a = 1; % 晶格常数
r = [0 0; 0.25 0.25; 0.5 0; 0.75 0.25; 0 0.5; 0.25 0.75; 0.5 0.5; 0.75 0.75]; % 原子位置
crystal = Crystal({a*eye(2), r}, 'Pnma');
% 定义材料
eps = 0.1; % 偏差程度
h = @(x,y) sin(2*pi*x/a).*sin(2*pi*y/a).*(1+eps*cos(2*pi*x/a).*cos(2*pi*y/a));
crystal = set(crystal, 'Density', h);
% 计算弹性常数矩阵
c = 1; % 声速
C = ElasticMatrix(crystal, 'c', c);
% 计算带隙
k = [0 0; 0.5 0.5; 0 0.5; 0 0]; % 波矢路径
nk = 100; % 波矢路径离散化点数
[B, kx, ky] = BandStructure(crystal, C, k, nk, [-1 1]);
plot(B, 'k-', 'LineWidth', 2);
xlabel('Wave vector k');
ylabel('Phonon frequency \omega');
```
该程序先定义了一个晶格,然后定义了一个略有偏差的密度分布,并将其设置为晶格的密度分布。接着计算了弹性常数矩阵,并使用`BandStructure`函数计算并绘制了能带结构图。需要注意的是,由于准零刚度的假设,可能会出现一些误差和限制,需要根据具体情况进行评估和调整。