TL框架中,一切积分、核函数梯度、邻域几何关系都在初始构形 (参考构形 Ω 0 \Omega_0 Ω 0 )上表达。对TLSPH来说,
粒子间参考距离X i j = X i − X j \mathbf{X}_{ij} = \mathbf{X}_i - \mathbf{X}_j X ij = X i − X j 不随时间变
核函数W ( X i j , h 0 ) W(\mathbf{X}_{ij},h_0) W ( X ij , h 0 ) 与其梯度 ∇ 0 W \nabla_0 W ∇ 0 W 不随时间变 (除非自适应h h h )
与更新拉格朗日框架下的SPH相比,TLSPH可以避免邻域扭曲导致的核梯度噪声,并且更适合大变形固体。
每个粒子i i i 常存:
当前位置:x i \mathbf{x}_i x i ,速度 v i \mathbf{v}_i v i
质量m i m_i m i 、参考密度ρ 0 i \rho_{0i} ρ 0 i 、参考体积V 0 i = m i / ρ 0 i V_{0i}=m_i/\rho_{0i} V 0 i = m i / ρ 0 i
变形梯度F i \mathbf{F}_i F i (或位移梯度∇ 0 u i \nabla_0 \mathbf{u}_i ∇ 0 u i )
应力:P i \mathbf{P}_i P i 或S i \mathbf{S}_i S i
邻域由参考距离决定:
X i j = X i − X j , r i j = ∥ X i j ∥ . \mathbf{X}_{ij}=\mathbf{X}_i-\mathbf{X}_j,\quad r_{ij}=\|\mathbf{X}_{ij}\|. X ij = X i − X j , r ij = ∥ X ij ∥. 对任意矢量场v ( X ) \mathbf{v}(\mathbf{X}) v ( X ) ,其参考构型的梯度离散为(推导过程类似SPH梯度近似的强形式和弱形式 - 知乎arrow-up-right 中强形式A2):
⟨ ∇ 0 v ⟩ i = ∑ j V 0 j ( v j − v i ) ⊗ ∇ 0 W i j (1) \boxed{\langle\nabla_0 \mathbf{v}\rangle_i=\sum_{j} V_{0j}(\mathbf{v}_j - \mathbf{v}_i)\otimes\nabla_0 W_{ij}}\tag{1} ⟨ ∇ 0 v ⟩ i = j ∑ V 0 j ( v j − v i ) ⊗ ∇ 0 W ij ( 1 ) 重点:此处全部是 ∇ 0 \nabla_0 ∇ 0 (对参考坐标求导),这就是TL的核心。
由于模拟过程中粒子分布不均和边界截断的问题,SPH的粒子梯度近似可能与实际梯度相差较大。实践中,我们想着至少重构出线性(一阶)部分 ,也即保证梯度近似的一阶一致性。假设此标量场为
v ( X ) = a + M X + O ( X 2 ) . \mathbf{v}(\mathbf X)=a+\mathbf M\mathbf X+O(\mathbf X^2). v ( X ) = a + MX + O ( X 2 ) . 其梯度为
∇ 0 v = M . \nabla_0\mathbf{v}=\mathbf M. ∇ 0 v = M . 如果用一个修正矩阵B 0 \mathbf B_0 B 0 乘上梯度近似式(1),就能够恰好得到M \mathbf M M ,那可就太好了,完美近似了线性部分:
[ ∑ j V 0 j ( v j − v i ) ⊗ ∇ 0 W i j ] B 0 i = M \left[\sum_{j} V_{0j}\,(\mathbf{v}_j - \mathbf{v}_i)\otimes\nabla_0 W_{ij}\right]\mathbf B_{0i}=\mathbf M [ j ∑ V 0 j ( v j − v i ) ⊗ ∇ 0 W ij ] B 0 i = M 将v ( X ) \mathbf{v}(\mathbf X) v ( X ) 的线性部分代入:
M [ ∑ j V 0 j ( X j − X i ) ⊗ ∇ 0 W i j ] B 0 i = M \mathbf M\left[\sum_{j} V_{0j}\,(\mathbf X_j - \mathbf X_i)\otimes\nabla_0 W_{ij}\right]\mathbf B_{0i}=\mathbf M M [ j ∑ V 0 j ( X j − X i ) ⊗ ∇ 0 W ij ] B 0 i = M 记A 0 i = ∑ j V 0 j ( X j − X i ) ⊗ ∇ 0 W i j \mathbf A_{0i}=\sum_{j} V_{0j}\,(\mathbf X_j - \mathbf X_i)\otimes\nabla_0 W_{ij} A 0 i = ∑ j V 0 j ( X j − X i ) ⊗ ∇ 0 W ij 。得到B 0 i \mathbf B_{0i} B 0 i 的表达式:
B 0 i = A 0 − 1 = [ ∑ j V 0 j ( X j − X i ) ⊗ ∇ 0 W i j ] − 1 (2) \boxed{\mathbf B_{0i}=\mathbf A_0^{-1}=\left[\sum_{j} V_{0j}(\mathbf X_j - \mathbf X_i)\otimes\nabla_0 W_{ij}\right]^{-1}}\tag{2} B 0 i = A 0 − 1 = [ j ∑ V 0 j ( X j − X i ) ⊗ ∇ 0 W ij ] − 1 ( 2 ) 因此,我们对于任何一个矢量场v ( X ) \mathbf{v}(\mathbf{X}) v ( X ) ,只要用式(1)初步算出近似的梯度张量后右乘一个B 0 \mathbf B_0 B 0 ,就能够确保一阶一致性:
⟨ ∇ 0 v ⟩ i = [ ∑ j V 0 j ( v j − v i ) ⊗ ∇ 0 W i j ] B 0 i (3) \boxed{\langle\nabla_0 \mathbf{v}\rangle_i=
\left[\sum_{j} V_{0j}(\mathbf{v}_j - \mathbf{v}_i)\otimes\nabla_0 W_{ij}\right]\mathbf B_{0i}
}\tag{3} ⟨ ∇ 0 v ⟩ i = [ j ∑ V 0 j ( v j − v i ) ⊗ ∇ 0 W ij ] B 0 i ( 3 ) 前提是B 0 i \mathbf B_{0i} B 0 i 是可逆的。好在B 0 i \mathbf B_{0i} B 0 i 完全依赖于初始构型,因此只需在模拟开始时计算一次。实践中,一般来说,粒子均匀分布就能够存在逆矩阵。为了避免奇异矩阵的影响,SPHinXsys采取了一种稳健的做法。首先,计算A 0 i \mathbf A_{0i} A 0 i 的伪逆而不是直接求逆:
B 0 i † = ( A 0 i T A 0 i + ε I ) − 1 A 0 i T . \mathbf B_{0i}^{\dagger}=(\mathbf A_{0i}^T\mathbf A_{0i}+\varepsilon\mathbf I)^{-1}\mathbf A_{0i}^T. B 0 i † = ( A 0 i T A 0 i + ε I ) − 1 A 0 i T . 然后通过A 0 i \mathbf A_{0i} A 0 i 的行列式判断病态程度——当∣ A 0 i ∣ < α |\mathbf A_{0i}| < \alpha ∣ A 0 i ∣ < α 时,需对其进行修正,使其偏向恒等矩阵I \mathbf I I ;否则使用B 0 i † \mathbf B_{0i}^{\dagger} B 0 i † 进行后续修正:
B 0 i = { ∣ A 0 i ∣ α B 0 i † + α − ∣ A 0 i ∣ α I , ∣ A 0 i ∣ < α ; B 0 i † , ∣ A 0 i ∣ ≥ α . \mathbf B_{0i}=\begin{cases}
\dfrac{|\mathbf A_{0i}|}{\alpha}\mathbf B_{0i}^{\dagger}+\dfrac{\alpha-|\mathbf A_{0i}|}{\alpha}\mathbf I,&|\mathbf A_{0i}| < \alpha;\\
\mathbf B_{0i}^{\dagger},& |\mathbf A_{0i}| \geq\alpha.
\end{cases} B 0 i = ⎩ ⎨ ⎧ α ∣ A 0 i ∣ B 0 i † + α α − ∣ A 0 i ∣ I , B 0 i † , ∣ A 0 i ∣ < α ; ∣ A 0 i ∣ ≥ α . 变形梯度的连续定义是
F = ∂ x ∂ X = ∇ 0 x \mathbf{F} = \frac{\partial \mathbf{x}}{\partial \mathbf{X}}=\nabla_0\mathbf x F = ∂ X ∂ x = ∇ 0 x 也就是将v ( X ) = x \mathbf v(\mathbf X)=\mathbf x v ( X ) = x 代入式(3):
⟨ F ⟩ i = ⟨ ∇ 0 x ⟩ i = [ ∑ j V 0 j ( x j − x i ) ⊗ ∇ 0 W i j ] B 0 i \langle\mathbf{F}\rangle_i=\langle\nabla_0\mathbf x\rangle_i=\left[\sum_{j} V_{0j}(\mathbf{x}_j - \mathbf{x}_i)\otimes\nabla_0 W_{ij}\right]\mathbf B_{0i} ⟨ F ⟩ i = ⟨ ∇ 0 x ⟩ i = [ j ∑ V 0 j ( x j − x i ) ⊗ ∇ 0 W ij ] B 0 i 因为F = ∇ 0 u + I \mathbf F=\nabla_0\mathbf u+\mathbf I F = ∇ 0 u + I (u \mathbf u u 是位移矢量),所以变形梯度离散形式也常写为
⟨ F ⟩ i = ⟨ ∇ 0 u ⟩ i + I = [ ∑ j V 0 j ( u j − u i ) ⊗ ∇ 0 W i j ] B 0 i + I \langle\mathbf{F}\rangle_i=\langle\nabla_0\mathbf u\rangle_i+\mathbf I
=\left[\sum_{j} V_{0j}(\mathbf{u}_j - \mathbf{u}_i)\otimes\nabla_0 W_{ij}\right]\mathbf B_{0i}+\mathbf I ⟨ F ⟩ i = ⟨ ∇ 0 u ⟩ i + I = [ j ∑ V 0 j ( u j − u i ) ⊗ ∇ 0 W ij ] B 0 i + I 动量方程的连续形式为:
ρ 0 x ¨ = ∇ 0 ⋅ P + ρ 0 b \rho_0 \ddot{\mathbf{x}} = \nabla_0\cdot \mathbf{P} + \rho_0\mathbf{b} ρ 0 x ¨ = ∇ 0 ⋅ P + ρ 0 b 参考SPH梯度近似的强形式和弱形式 - 知乎arrow-up-right 中的弱形式B2,我们可以将∇ 0 ⋅ P \nabla_0\cdot \mathbf{P} ∇ 0 ⋅ P 离散成
⟨ ∇ 0 ⋅ P ⟩ i = ∑ j V j ( P i + P j ) ⋅ ∇ 0 W i j \langle\nabla_0\cdot\mathbf P\rangle_i=\sum_j V_j(\mathbf P_i+\mathbf P_j)\cdot\nabla_0 W_{ij} ⟨ ∇ 0 ⋅ P ⟩ i = j ∑ V j ( P i + P j ) ⋅ ∇ 0 W ij 有核梯度修正的版本为:
⟨ ∇ 0 ⋅ P ⟩ i = ∑ j V j ( P i B 0 i + P j B 0 j ) ⋅ ∇ 0 W i j \langle\nabla_0\cdot\mathbf P\rangle_i=\sum_j V_j(\mathbf P_i\mathbf B_{0i}+\mathbf P_j\mathbf B_{0j})\cdot\nabla_0 W_{ij} ⟨ ∇ 0 ⋅ P ⟩ i = j ∑ V j ( P i B 0 i + P j B 0 j ) ⋅ ∇ 0 W ij 因此完整的动量方程离散为:
ρ 0 i x ¨ i = ∑ j V j ( P i B 0 i + P j B 0 j ) ⋅ ∇ 0 W i j + ρ 0 i b i . \boxed{\rho_{0i} \ddot{\mathbf{x}}_i = \sum_j V_j(\mathbf P_i\mathbf B_{0i}+\mathbf P_j\mathbf B_{0j})\cdot\nabla_0 W_{ij} + \rho_{0i}\mathbf{b}_i.} ρ 0 i x ¨ i = j ∑ V j ( P i B 0 i + P j B 0 j ) ⋅ ∇ 0 W ij + ρ 0 i b i . 见Ye等(2025):
Ye, M. et al. DRLinSPH: an open-source platform using deep reinforcement learning and SPHinXsys for fluid-structure-interaction problems. Engineering Applications of Computational Fluid Mechanics 19 , 2460677 (2025).