当前位置:   article > 正文

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

fdfd

@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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/633981
推荐阅读
相关标签
  

闽ICP备14008679号