二阶Mur吸收边界条件TE波代码实现
时间: 2023-08-31 10:06:31 浏览: 63
以下是使用二阶Mur吸收边界条件模拟TE波的代码实现,假设波在z方向传播,边界面位于z=0处:
```python
import numpy as np
# 定义模拟区域大小和网格数
Lx = 1.0 # x方向长度
Ly = 1.0 # y方向长度
Lz = 1.0 # z方向长度
Nx = 100 # x方向网格数
Ny = 100 # y方向网格数
Nz = 100 # z方向网格数
# 定义模拟参数
c0 = 3e8 # 真空中光速
dx = Lx / Nx # x方向网格步长
dy = Ly / Ny # y方向网格步长
dz = Lz / Nz # z方向网格步长
dt = dx / (2 * c0) # 时间步长
tau = 2 * dt # 吸收时间常数
T = 2000 # 总时间步数
# 定义场变量
Ex = np.zeros((Nx, Ny, Nz)) # 横向电场分量
Hy = np.zeros((Nx, Ny, Nz)) # 纵向磁场分量
# 二阶Mur吸收边界条件
def mur_abc_te(Ex, Hy):
# x方向吸收边界
for j in range(Ny):
for k in range(Nz):
Ex[0, j, k] = (1 - dt / tau) * Ex[1, j, k] + (dt / tau) * Ex[0, j, k] \
+ (dt / tau) * (Hy[0, j, k] - Hy[1, j, k]) / dx
Ex[Nx - 1, j, k] = (1 - dt / tau) * Ex[Nx - 2, j, k] + (dt / tau) * Ex[Nx - 1, j, k] \
- (dt / tau) * (Hy[Nx - 1, j, k] - Hy[Nx - 2, j, k]) / dx
# y方向吸收边界
for i in range(Nx):
for k in range(Nz):
Ex[i, 0, k] = (1 - dt / tau) * Ex[i, 1, k] + (dt / tau) * Ex[i, 0, k] \
+ (dt / tau) * (Hy[i, 0, k] - Hy[i, 1, k]) / dy
Ex[i, Ny - 1, k] = (1 - dt / tau) * Ex[i, Ny - 2, k] + (dt / tau) * Ex[i, Ny - 1, k] \
- (dt / tau) * (Hy[i, Ny - 1, k] - Hy[i, Ny - 2, k]) / dy
# z方向吸收边界
for i in range(Nx):
for j in range(Ny):
Hy[i, j, 0] = (1 - dt / tau) * Hy[i, j, 1] + (dt / tau) * Hy[i, j, 0] \
+ (dt / tau) * (Ex[i, j, 0] - Ex[i, j, 1]) / dz
Hy[i, j, Nz - 1] = (1 - dt / tau) * Hy[i, j, Nz - 2] + (dt / tau) * Hy[i, j, Nz - 1] \
- (dt / tau) * (Ex[i, j, Nz - 1] - Ex[i, j, Nz - 2]) / dz
# 初始化场
for i in range(Nx):
for j in range(Ny):
for k in range(Nz):
Ex[i, j, k] = np.sin(2 * np.pi * i * dx) * np.sin(2 * np.pi * j * dy) * np.sin(2 * np.pi * k * dz)
# 模拟主循环
for n in range(T):
# 求解Hy场
for i in range(1, Nx):
for j in range(1, Ny):
for k in range(1, Nz):
Hy[i, j, k] = Hy[i, j, k] - (dt / mu0) * (Ex[i, j, k] - Ex[i, j - 1, k]) / dy \
+ (dt / mu0) * (Ex[i, j, k] - Ex[i - 1, j, k]) / dx
# 更新边界
mur_abc_te(Ex, Hy)
# 求解Ex场
for i in range(Nx - 1):
for j in range(Ny - 1):
for k in range(Nz - 1):
Ex[i, j, k] = Ex[i, j, k] - (dt / eps0) * (Hy[i + 1, j, k] - Hy[i, j, k]) / dx \
+ (dt / eps0) * (Hy[i, j + 1, k] - Hy[i, j, k]) / dy \
+ (dt / eps0) * (Hy[i, j, k + 1] - Hy[i, j, k]) / dz
# 更新边界
mur_abc_te(Ex, Hy)
```
需要注意的是,该代码实现了二阶Mur吸收边界条件在TE波的模拟中的应用,但是其中的一些参数和变量定义需要根据具体情况进行调整。另外,还需要引入电介质常数$\epsilon_0$和磁介质常数$\mu_0$的定义。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)