自由边界和刚性边界的反射系数

以 P-SV 为例

[1]:
import sympy as sp

动态解

[2]:
# 定义基本变量
k, b, d, a, mu, Omg, kb, ka, w, Delta = sp.symbols(r'k b d, a mu \Omega k_{b} k_{a} \omega \Delta')
lam, rho = sp.symbols(r'\lambda \rho')
[3]:
D = sp.Matrix([
    [k,            b,             k,            -b],
    [a,            k,             -a,           k],
    [2*mu*Omg,     2*k*mu*b,      2*mu*Omg,     -2*k*mu*b],
    [2*k*mu*a,     2*mu*Omg,      -2*k*mu*a,    2*mu*Omg]
])
[4]:
def get_R(D, at_bottom:bool):
    if not at_bottom:
        return - (D[:, 2:])**(-1) * (D[:, :2])
    else:
        return - (D[:, :2])**(-1) * (D[:, 2:])

自由界面(z平面牵引力为0)

[5]:
# z+ 侧, 例如顶层顶界面
R = get_R(D[2:, :], False)
R.simplify()
R
[5]:
$\displaystyle \left[\begin{matrix}\frac{\Omega^{2} + a b k^{2}}{- \Omega^{2} + a b k^{2}} & \frac{2 \Omega b k}{- \Omega^{2} + a b k^{2}}\\\frac{2 \Omega a k}{- \Omega^{2} + a b k^{2}} & \frac{\Omega^{2} + a b k^{2}}{- \Omega^{2} + a b k^{2}}\end{matrix}\right]$
[6]:
# z- 侧, 例如底层底界面
R = get_R(D[2:, :], True)
R.simplify()
R
[6]:
$\displaystyle \left[\begin{matrix}\frac{\Omega^{2} + a b k^{2}}{- \Omega^{2} + a b k^{2}} & \frac{2 \Omega b k}{\Omega^{2} - a b k^{2}}\\\frac{2 \Omega a k}{\Omega^{2} - a b k^{2}} & \frac{\Omega^{2} + a b k^{2}}{- \Omega^{2} + a b k^{2}}\end{matrix}\right]$

刚性界面(位移为0)

[7]:
# z+ 侧
R = get_R(D[:2, :], False)
R.simplify()
R
[7]:
$\displaystyle \left[\begin{matrix}\frac{a b + k^{2}}{a b - k^{2}} & \frac{2 b k}{a b - k^{2}}\\\frac{2 a k}{a b - k^{2}} & \frac{a b + k^{2}}{a b - k^{2}}\end{matrix}\right]$
[8]:
# z- 侧
R = get_R(D[:2, :], True)
R.simplify()
R
[8]:
$\displaystyle \left[\begin{matrix}\frac{a b + k^{2}}{a b - k^{2}} & - \frac{2 b k}{a b - k^{2}}\\- \frac{2 a k}{a b - k^{2}} & \frac{a b + k^{2}}{a b - k^{2}}\end{matrix}\right]$

静态解

[9]:
# 在静态解中,矩阵 D 和相对深度 z-zj 有关, 因此 z+ 侧和 z- 侧需使用两种 D 矩阵
D1 = sp.Matrix([
    [1,         -(1 + 2*k*Delta*d),            1,            -(1 - 2*k*Delta*d)],
    [1,          (1 - 2*k*Delta*d),           -1,            -(1 + 2*k*Delta*d)],
    [2*mu*k,     2*mu*Delta*k*(1 - 2*k*d),   2*mu*k,      2*mu*Delta*k*(1 + 2*k*d)],
    [2*mu*k,    -2*mu*Delta*k*(1 + 2*k*d),  -2*mu*k,      2*mu*Delta*k*(1 - 2*k*d)],
])

z = 0
D2 = sp.Matrix([
    [1,         -(1 + 2*k*Delta*z),            1,            -(1 - 2*k*Delta*z)],
    [1,          (1 - 2*k*Delta*z),           -1,            -(1 + 2*k*Delta*z)],
    [2*mu*k,     2*mu*Delta*k*(1 - 2*k*z),   2*mu*k,      2*mu*Delta*k*(1 + 2*k*z)],
    [2*mu*k,    -2*mu*Delta*k*(1 + 2*k*z),  -2*mu*k,      2*mu*Delta*k*(1 - 2*k*z)],
])

自由界面(z平面牵引力为0)

[10]:
# z+ 侧
R = get_R(D2[2:, :], False)
R.simplify()
R
[10]:
$\displaystyle \left[\begin{matrix}0 & - \Delta\\- \frac{1}{\Delta} & 0\end{matrix}\right]$
[11]:
# z- 侧
R = get_R(D1[2:, :], True)
R.simplify()
R
[11]:
$\displaystyle \left[\begin{matrix}- 2 d k & \Delta \left(- 4 d^{2} k^{2} - 1\right)\\- \frac{1}{\Delta} & - 2 d k\end{matrix}\right]$

刚性界面(位移为0)

[12]:
# z+ 侧
R = get_R(D2[:2, :], False)
R.simplify()
R
[12]:
$\displaystyle \left[\begin{matrix}0 & 1\\1 & 0\end{matrix}\right]$
[13]:
# z- 侧
R = get_R(D1[:2, :], True)
R.simplify()
R
[13]:
$\displaystyle \left[\begin{matrix}2 \Delta d k & 4 \Delta^{2} d^{2} k^{2} + 1\\1 & 2 \Delta d k\end{matrix}\right]$