Finite Difference Frequency Domain(FDFD) 算法和C++实现

本文介绍了Finite Difference Frequency Domain (FDFD) 算法,包括基本原理、Perfectly Matched Layer (PML) 边界条件、差分法以及使用C++实现线性方程组求解。应用了BICGSTAB算法解决大规模矩阵问题,展示了二维电磁场分布的模拟结果。
摘要由CSDN通过智能技术生成

@Finite Difference Frequency Domain(FDFD) 算法和C++实现

Finite Difference Frequency Domain(FDFD) 算法和C++实现

中文网站上目前有不少关于Finite Different Time Domain(FDTD) 的介绍和实现,但是有关FDFD的介绍非常少。因两者的核心方法都用到了差分方法,区别仅在于差分对象分别在时域和频域上。最近正好做到一个使用FDFD模拟电磁场分布的项目,顺便记录下来。本文中对object boundary使用PEC边界条件,对space boundary使用U-PML边界条件,使用Sparse Matrix储存稀疏矩阵信息,使用BICGSTAB进行矩阵计算。

FDFD基本算法

我们从最基本的麦克斯韦方程组开始,一步一步推导出FDFD计算公式。首先,我们有频域中无源媒质里的麦克斯韦旋度方程:

∇ × E ⃗ = − j ω μ H ⃗ ( 1 ) ∇ × H ⃗ = j ω ϵ E ⃗ ( 2 ) \nabla \times \vec{E} = -j\omega\mu\vec{H} \quad (1)\\ \nabla \times \vec{H} = j\omega\epsilon\vec{E} \qquad (2) ×E =jωμH (1)×H =jωϵE (2)
我们对 H ⃗ \vec{H} H 标准化后,公式变成:

∇ × E ⃗ = k 0 μ r H ~ ⃗ ( 3 ) ∇ × H ~ ⃗ = k 0 ϵ r E ⃗ ( 4 ) \nabla \times \vec{E} = k_{0}\mu_{r}\vec{\tilde{H}} \quad (3)\\ \nabla \times \vec{\tilde{H}} = k_{0}\epsilon_{r}\vec{E} \quad (4) ×E =k0μrH~ (3)×H~ =k0ϵrE (4)
其中
k 0 = ω / c 0 k_0 = \omega / c_0 k0=ω/c0

H ~ ⃗ = − j ϵ 0 μ 0 H ⃗ \vec{\tilde{H}} = -j\sqrt{\frac{\epsilon_0}{\mu_0}}\vec{H} H~ =jμ0ϵ0 H

Perfectly Matched Layer

为了防止遇到外边界而产生的反射波对结果的影响,我们使用PML边界条件模拟无限大空间的波传播方式,即波逐渐被媒质吸收不产生反射波。我们使用张量 s ˉ ˉ \bar{\bar{s}} sˉˉ来代表PML介质,那么公式(3)(4)就变成:

∇ × E ⃗ = k 0 μ r s ˉ ˉ H ~ ⃗ ( 5 ) ∇ × H ~ ⃗ = k 0 ϵ r s ˉ ˉ E ⃗ ( 6 ) \nabla \times \vec{E} = k_{0}\mu_{r}\bar{\bar{s}}\vec{\tilde{H}} \quad (5)\\ \nabla \times \vec{\tilde{H}} = k_{0}\epsilon_{r}\bar{\bar{s}}\vec{E} \quad (6) ×E =k0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值