1.声波传播方程程序
∇ 2 p + k 2 p = 0 (1) {\nabla ^2}p + {k^2}p = 0 \tag{1} ∇2p+k2p=0(1)
其中 ,
k
=
ω
/
c
,
ω
=
2
π
f
k = \omega /c,\omega = 2\pi f
k=ω/c,ω=2πf,采用中心差分格式:
∇
2
p
=
∂
2
p
∂
x
2
+
∂
2
p
∂
y
2
{\nabla ^2}p = {{{\partial ^2}p} \over {\partial {x^2}}} + {{{\partial ^2}p} \over {\partial {y^2}}}
∇2p=∂x2∂2p+∂y2∂2p ,其中:
∂
2
p
∂
x
2
=
p
i
+
1
,
j
+
p
i
−
1
,
j
−
2
p
i
,
j
(
Δ
x
)
2
{{{\partial ^2}p} \over {\partial {x^2}}} = {{{p_{i + 1,j}} + {p_{i - 1,j}} - 2{p_{i,j}}} \over {{{(\Delta x)}^2}}}
∂x2∂2p=(Δx)2pi+1,j+pi−1,j−2pi,j
∂
2
p
∂
y
2
=
p
i
,
j
+
1
+
p
i
,
j
−
1
−
2
p
i
,
j
(
Δ
y
)
2
(2)
{{{\partial ^2}p} \over {\partial {y^2}}} = {{{p_{i,j + 1}} + {p_{i,j - 1}} - 2{p_{i,j}}} \over {{{(\Delta y)}^2}}}\tag{2}
∂y2∂2p=(Δy)2pi,j+1+pi,j−1−2pi,j(2)
将(2)带入(1)式中得:
p
i
+
1
,
j
+
p
i
−
1
,
j
−
2
p
i
,
j
(
Δ
x
)
2
+
p
i
,
j
+
1
+
p
i
,
j
−
1
−
2
p
i
,
j
(
Δ
y
)
2
+
k
2
p
i
,
j
=
0
(3)
{{{p_{i + 1,j}} + {p_{i - 1,j}} - 2{p_{i,j}}} \over {{{(\Delta x)}^2}}} + {{{p_{i,j + 1}} + {p_{i,j - 1}} - 2{p_{i,j}}} \over {{{(\Delta y)}^2}}} + {k^2}{p_{i,j}} = 0\tag{3}
(Δx)2pi+1,j+pi−1,j−2pi,j+(Δy)2pi,j+1+pi,j−1−2pi,j+k2pi,j=0(3)
(3)式为Helmholtz方程差分计算的基本方程。因此将声压变量向量形式得到:
A
P
=
0
(4)
AP = 0\tag{4}
AP=0(4)
由于差分方程(3)中的变量数目为5,因此A是带宽为5的稀疏矩阵。
P
=
[
p
1
,
1
,
p
1
,
2
,
p
1
,
3
⋯
p
m
,
n
]
T
P = {[{p_{1,1}},{p_{1,2}},{p_{1,3}} \cdots {p_{m,n}}]^T}
P=[p1,1,p1,2,p1,3⋯pm,n]T为声压列向量。由于矩阵A是满秩的,因此方程(4)仅有0解。在实际频域计算时往往存在一些激励,比如平面波入射,单极子、偶极子点源等。
假设位置
r
0
r0
r0处含有单极子电源,此时方程(1)可表示如下形式:
∇
2
p
+
k
2
p
=
4
π
S
δ
(
r
−
r
0
)
(5)
{\nabla ^2}p + {k^2}p = 4\pi S\delta (r - r0)\tag{5}
∇2p+k2p=4πSδ(r−r0)(5)
其中
r
0
r0
r0处的激励为 , 此时(4)式右边存在与
r
0
r0
r0点对应非零项b,矩阵方程(4)转化为:
A
P
=
b
(6)
AP = b\tag{6}
AP=b(6)
其中
b
b
b为已知列向量,然后可以利用迭代求解得到未知量 。
2.边界条件
根据离散方程(3)的差分格式,我们注意到,角边界点只有三个变量,而非角边界只有4个变量。这是由于在形成矩阵的时候默认了最外层边界为0。实际上在单个点源激励时,无穷远处才会存在声压为0的现象,因此在计算区域限制的情况下,必然会出现反射问题。为了减小反射的影响,除了扩大计算域外,还可以添加吸收层,其中最常用的吸收层为完美匹配层(PML),其基本原理是将复数空间引入到Helmholtz方程之中,如同在边界上添加了一层阻尼,声压传递到外层时会呈指数下降,因此声压传递到最外层时已经大小趋近于0,反射对计算域产生的影响较小。
当然边界条件设定除了满足计算需求外,还可以简化计算,可以对称界面设定,比如以
p
1
,
j
{p_{1,j}}
p1,j为对称点即
p
2
,
j
+
p
0
,
j
−
2
p
i
,
j
(
Δ
x
)
2
+
p
1
,
j
+
1
+
p
1
,
j
−
1
−
2
p
i
,
j
(
Δ
y
)
2
+
k
2
p
1
,
j
=
0
{{{p_{2,j}} + {p_{0,j}} - 2{p_{i,j}}} \over {{{(\Delta x)}^2}}} + {{{p_{1,j + 1}} + {p_{1,j - 1}} - 2{p_{i,j}}} \over {{{(\Delta y)}^2}}} + {k^2}{p_{1,j}} = 0
(Δx)2p2,j+p0,j−2pi,j+(Δy)2p1,j+1+p1,j−1−2pi,j+k2p1,j=0可转化为:
2
p
2
,
j
−
2
p
i
,
j
(
Δ
x
)
2
+
p
1
,
j
+
1
+
p
1
,
j
−
1
−
2
p
i
,
j
(
Δ
y
)
2
+
k
2
p
1
,
j
=
0
(7)
{{2{p_{2,j}} - 2{p_{i,j}}} \over {{{(\Delta x)}^2}}} + {{{p_{1,j + 1}} + {p_{1,j - 1}} - 2{p_{i,j}}} \over {{{(\Delta y)}^2}}} + {k^2}{p_{1,j}} = 0\tag{7}
(Δx)22p2,j−2pi,j+(Δy)2p1,j+1+p1,j−1−2pi,j+k2p1,j=0(7)
p
2
,
j
{p_{2,j}}
p2,j对应系数增加一倍。
以上便是频域差分方程求解的整体思路,要注意的是与时域的求解方式link不同,椭圆形的频域方程无法采用递进计算的方式求解。交流学习请联系qq2862274738或邮箱dynyanhao@163.com