赞
踩
@Finite Difference Frequency Domain(FDFD) 算法和C++实现
中文网站上目前有不少关于Finite Different Time Domain(FDTD) 的介绍和实现,但是有关FDFD的介绍非常少。因两者的核心方法都用到了差分方法,区别仅在于差分对象分别在时域和频域上。最近正好做到一个使用FDFD模拟电磁场分布的项目,顺便记录下来。本文中对object boundary使用PEC边界条件,对space boundary使用U-PML边界条件,使用Sparse Matrix储存稀疏矩阵信息,使用BICGSTAB进行矩阵计算。
我们从最基本的麦克斯韦方程组开始,一步一步推导出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 。
为了防止遇到外边界而产生的反射波对结果的影响,我们使用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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。