FDTD方法中的完美匹配层(PML)研究(Matlab代码实现)

 👨‍🎓个人主页:研学社的博客   

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

基本原理

数学模型

参数优化

实现技巧

应用挑战

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现



💥1 概述

在FDTD方法中,我们截断了问题空间。但是在截断时,我们面临着在其边界上的反射问题。吸收边界条件(ABC)但很难在FDTD方法中制备二维ABC和使用。
这个问题由PML解决。假设一个波向外传播,它最终会到达允许空间的边缘,这是由矩阵在程序中的尺寸决定的。此概率由此 PML 解决。

完美匹配层(Perfectly Matched Layer,简称PML)是一种广泛应用于数值模拟领域的边界条件处理技术,特别是在有限差分时间域(Finite-Difference Time-Domain, FDTD)方法中尤为重要。PML的设计目的是为了在计算区域的边缘吸收所有入射波,从而模拟开放空间的效果,避免反射波对仿真结果造成干扰。下面是对PML在FDTD方法中应用的一些基本研究内容概述:

基本原理

PML的核心思想是通过在计算域的边界外引入一层人工介质,这层介质的电磁参数(如介电常数和磁导率)被设计成随位置逐渐变化,使得当电磁波到达PML边界时,其能量能够几乎完全被吸收而不会反射回计算域内。PML的参数设计确保了其内部的波传播速度逐渐减小至零,从而实现对外界波的完美吸收。

数学模型

PML的实现通常基于复数坐标变换或者复数材料参数的设定。在FDTD算法中,需要对Maxwell方程组进行修改,以引入描述PML特性的额外项。这些项通常与PML边界处的复数介电常数和磁导率相关,它们随着距离PML边界深度的增加而变化,确保了从计算域内部传出的波能在到达PML边界时迅速衰减。

参数优化

PML的性能很大程度上取决于其参数的选择,包括PML的厚度、吸收特性的斜率等。优化这些参数对于获得高效且准确的吸收效果至关重要。研究通常涉及如何根据特定的仿真频率范围和问题特性来调整这些参数,以最小化反射,同时保持计算效率。

实现技巧

  • 多级PML:为了更有效地吸收宽频带的电磁波,可以使用多级PML结构,每级具有不同的衰减特性,以适应不同频率的吸收需求。
  • 广义皮肤深度:通过调整PML参数,使得其吸收特性适应更广泛的频谱,减少高频或低频的反射。
  • 稳定性与精度平衡:优化PML参数的同时,还需要确保整个FDTD仿真在时间步长选择上的稳定性,并尽可能保持计算精度。

应用挑战

尽管PML是解决边界条件问题的有效手段,但在某些复杂场景下仍面临挑战,例如:

  • 在高频或宽频段仿真时,优化PML参数以保证全频段的良好吸收性能变得更为困难。
  • 对于非线性问题或多物理场耦合问题,PML的设计与实施可能更加复杂,需要更加精细化的模型调整。

综上所述,PML在FDTD方法中的研究不仅涉及理论上的数学建模与参数设计,还涵盖了实际应用中的优化策略与挑战克服,是推动电磁仿真技术发展的重要方向之一。

📚2 运行结果

运行视频:

FDTD方法中的完美匹配层(PML)(Matlab代码实现)

https://www.bilibili.com/video/BV1sh41157rf/

 FDTD方法中的完美匹配层(PML)(Matlab代码实现)_哔哩哔哩_bilibili

部分代码:

%%%%%_______________PML(Perfectly Matched Layer)_using_FDTD__________%%%%%%%
%_________________________SOUGATA_CHATTERJEE________________________________
%%%%%%%%%_________________SAMEER_KOLKATA_CENTER___________________%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%________02/03/2011_________%%%%%%%%%%%%%
ie=60;
je=60;
ic=fix(ie/2);
jc=fix(je/2);
epsz=8.8e-12;
ddx=0.1;
dt=ddx/6e8;
%%%%%%-----Time_interval-----------%%%%%%%%%%%%
nsteps=100;
%%%%%%-----Time_interval-----------%%%%%%%%%%%%
ez=zeros(ie,je);
dz=zeros(ie,je);
hy=zeros(ie,je);
ihx=zeros(ie,je);
ihy=zeros(ie,je);
hx=zeros(ie,je);
ga=ones(ie,je);
%%%%%%-----wave_specification-----------%%%%%%%%%%%%
t0=40.0;
spread=15.0;
%------------calculated the PML parameter--------------- 

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]尤双双,李孝坤.基于PML的FDTD法正演模拟[J].中国锰业,2018,36(06):191-194.DOI:10.14101/j.cnki.issn.1002-4336.2018.06.045.

[2]Sougata Chatterjee (2023). Perfectly Matched Layer(PML) in FDTD method. 

[3]李志. 基于FDTD的高阶PML算法及其在集成电路仿真中的应用[D].天津工业大学,2021.DOI:10.27357/d.cnki.gtgyu.2021.000394.

🌈4 Matlab代码实现

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CNDG-FDTD方法是一种求解电磁波问题的数值方法,其引入高斯源和PML吸收边界可以有效地模拟真实情况下的电磁波传播。下面介绍如何在Matlab实现CNDG-FDTD方法引入高斯源和PML吸收边界。 1. 高斯源的引入 在CNDG-FDTD方法,可以通过在计算区域的某个位置引入高斯源来模拟电磁波的发射和接收。假设我们要在计算区域的坐标为(x0,y0,z0)的位置引入高斯源,可以按照以下步骤进行操作: (1) 在计算区域建立一个三维数组,用于存储电磁场的值。 (2) 在坐标为(x0,y0,z0)的位置,将电磁场的初值设置为一个高斯函数,如下所示: ```matlab function E = gauss_source(x,y,z,t) E = exp(-((x-x0)^2+(y-y0)^2+(z-z0)^2)/(2*sigma^2))*sin(omega*t); end ``` 其,x、y、z分别为电磁场在各个方向上的坐标,t为时间,sigma和omega是高斯函数的两个参数,可以自行设置。 (3) 在计算过程,每个时间步长都需要更新电磁场的值。可以按照以下步骤进行操作: ```matlab for n=1:Nt % 更新电磁场的值 for i=1:Nx for j=1:Ny for k=1:Nz E(i,j,k) = E(i,j,k) + (dt/eps)*(Hx(i,j,k)-Hx(i,j-1,k)-Hy(i,j,k)+Hy(i-1,j,k)-Hz(i,j,k)+Hz(i,j,k-1)); end end end % 在高斯源处更新电磁场的值 E(x0,y0,z0) = gauss_source(x0,y0,z0,n*dt); end ``` 2. PML吸收边界的引入 PML吸收边界是一种有效的边界处理方法,可以在计算区域的边界处模拟吸收边界,从而减小边界对计算结果的影响。假设我们要在计算区域的x方向上引入PML吸收边界,可以按照以下步骤进行操作: (1) 在计算区域建立一个三维数组,用于存储电磁场的值。 (2) 在计算区域的边界处,设定一个PML吸收边界带。假设PML吸收边界的宽度为d,可以按照以下步骤进行操作: ```matlab % 在x方向上引入PML吸收边界 for i=1:d % 计算PML吸收边界处的sigma值 sigma_x = sigma_max*((i-0.5)/d)^m; % 更新PML吸收边界处的系数 kex(i) = exp(-sigma_x*dt/eps); khy(i) = exp(-sigma_x*dt/mu); % 更新PML吸收边界处的电磁场值 E(d-i+1,:,:) = kex(i)*E(d-i+2,:,:)+((kex(i)-1)/(sigma_x*dx))*Hx(d-i+1,:,:); E(Nx-d+i,:,:) = kex(i)*E(Nx-d+i-1,:,:)+((kex(i)-1)/(sigma_x*dx))*Hx(Nx-d+i,:,:); Hx(d-i+1,:,:) = khy(i)*Hx(d-i+2,:,:)+((khy(i)-1)/(sigma_x*dx))*E(d-i+1,:,:); Hx(Nx-d+i,:,:) = khy(i)*Hx(Nx-d+i-1,:,:)+((khy(i)-1)/(sigma_x*dx))*E(Nx-d+i,:,:); end ``` 其,sigma_max和m为PML吸收边界的两个参数,可以自行设置。 (3) 在计算过程,每个时间步长都需要更新电磁场的值。可以按照以下步骤进行操作: ```matlab for n=1:Nt % 更新电磁场的值 for i=1:Nx for j=1:Ny for k=1:Nz E(i,j,k) = E(i,j,k) + (dt/eps)*(Hx(i,j,k)-Hx(i,j-1,k)-Hy(i,j,k)+Hy(i-1,j,k)-Hz(i,j,k)+Hz(i,j,k-1)); end end end for i=1:Nx for j=1:Ny-1 for k=1:Nz-1 Hx(i,j,k) = Hx(i,j,k) - (dt/mu)*(E(i,j,k+1)-E(i,j,k)-E(i,j+1,k)+E(i,j,k)); Hy(i,j,k) = Hy(i,j,k) - (dt/mu)*(E(i+1,j,k)-E(i,j,k)-E(i,j,k+1)+E(i,j,k)); Hz(i,j,k) = Hz(i,j,k) - (dt/mu)*(E(i,j+1,k)-E(i,j,k)-E(i+1,j,k)+E(i,j,k)); end end end % 在PML吸收边界处更新电磁场的值 for i=1:d E(d-i+1,:,:) = kex(i)*E(d-i+2,:,:)+((kex(i)-1)/(sigma_x*dx))*Hx(d-i+1,:,:); E(Nx-d+i,:,:) = kex(i)*E(Nx-d+i-1,:,:)+((kex(i)-1)/(sigma_x*dx))*Hx(Nx-d+i,:,:); Hx(d-i+1,:,:) = khy(i)*Hx(d-i+2,:,:)+((khy(i)-1)/(sigma_x*dx))*E(d-i+1,:,:); Hx(Nx-d+i,:,:) = khy(i)*Hx(Nx-d+i-1,:,:)+((khy(i)-1)/(sigma_x*dx))*E(Nx-d+i,:,:); end end ``` 以上就是在Matlab实现CNDG-FDTD方法引入高斯源和PML吸收边界的步骤。需要注意的是,具体实现需要根据实际问题进行调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值