离散单元法(Discrete Element Method,简称DEM)是颗粒流数值模拟的重要数值方法,被用于各种各样的颗粒流定量研究中。颗粒流的粗粒化(Coarse Graining),便是将颗粒流流场的大量数据转化为连续场数据的数值方法。
在开始介绍之前,先简要列出主要的参考资料:
- Breard, E. C. P., Dufek, J., Fullard, L., & Carrara, A. (2020). The Basal Friction Coefficient of Granular Flows With and Without Excess Pore Pressure: Implications for Pyroclastic Density Currents, Water‐Rich Debris Flows, and Rock and Submarine Avalanches. Journal of Geophysical Research: Solid Earth, 125(12), e2020JB020203. DOI:10.1029/2020JB020203.
- Lacaze, L., & Kerswell, R. R. (2009). Axisymmetric Granular Collapse: A Transient 3D Flow Test of Viscoplasticity. Physical Review Letters, 102(10), 108305. DOI:10.1103/PhysRevLett.102.108305.
- Weinhart, T., Labra, C., Luding, S., & Ooi, J. Y. (2016). Influence of coarse‐graining parameters on the analysis of DEM simulations of silo flow. Powder Technology, 293, 138–148. DOI:10.1016/j.powtec.2015.11.052
单种颗粒的粗粒化
为简单起见,先从仅存在单种球形颗粒的颗粒流开始说起,并且只考虑获取空间内一点 r \boldsymbol{r} r 在 t t t 时刻的粗粒化数据。
粗粒化函数
在这里,引入高斯函数
W ( r ) = { 1 V w exp ( − ∣ r ∣ 2 2 w ) , ∣ r ∣ < c 0 , otherwise W(\boldsymbol{r}) = \begin{cases} \frac{1}{V_w} \exp{\left(- \frac{\vert\boldsymbol{r}\vert^2}{2w} \right)} ,& {\vert\boldsymbol{r}\vert} < c \\ 0 ,& \text{otherwise} \end{cases} W(r)={Vw1exp(−2w∣r∣2),0,∣r∣<cotherwise
其中: w w w 为粗粒化宽度; c = 3 w c = 3 w c=3w 为粗粒化截断长度; V w V_w Vw 是确保其密度积分等于总质量的系数
V w = 2 2 ⋅ w 3 π 3 2 e r f ( c 2 2 w ) − 4 c w 2 π exp ( − c 2 2 w 2 ) V_w = 2 \sqrt{2} \cdot w^3 \pi^{\frac{3}{2}} \mathrm{erf}\left( \frac{c \sqrt{2}}{2 w} \right) - 4 c w^2 \pi \exp{\left( \frac{- c^2}{2 w^2} \right)} Vw=22⋅w3π23erf(2wc2)−4cw2πexp(2w2−c2)
Weinhart 等建议 w w w 的取值范围应在 [ 0.75 d m e a n , 1.25 d m e a n ] [0.75 d_{\mathrm{mean}}, 1.25 d_{\mathrm{mean}}] [0.75dmean,1.25dmean] 之间,其中 d m e a n d_{\mathrm{mean}} dmean 为平均颗粒直径。
密度和动量的计算
在 t t t 时刻,单种颗粒的集合为 q q q 。对于其中的第 i i i 个球,其位置矢量为 r i \boldsymbol{r}_i ri ,质量为 m i m_i mi ,速度为 u i \boldsymbol{u}_i ui。
密度的粗粒化表达式为:
ρ
(
r
,
t
)
=
∑
i
∈
q
m
i
W
(
r
−
r
i
(
t
)
)
\rho(\boldsymbol{r}, t) = \sum\limits_{i \in q} m_i W(\boldsymbol{r} - \boldsymbol{r}_{i}(t))
ρ(r,t)=i∈q∑miW(r−ri(t))
动量的粗粒化表达式为:
j
(
r
,
t
)
=
∑
i
∈
q
m
i
u
i
W
(
r
−
r
i
(
t
)
)
\boldsymbol{j}(\boldsymbol{r}, t) = \sum\limits_{i \in q} m_i \boldsymbol{u}_i W(\boldsymbol{r} - \boldsymbol{r}_{i}(t))
j(r,t)=i∈q∑miuiW(r−ri(t))
所以,速度的计算需要通过 j \boldsymbol{j} j 和 ρ \rho ρ 完成:
u ( r , t ) = j ( r , t ) / ρ ( r , t ) \boldsymbol{u}(\boldsymbol{r}, t) = \boldsymbol{j}(\boldsymbol{r}, t) / \rho(\boldsymbol{r}, t) u(r,t)=j(r,t)/ρ(r,t)
根据 W ( r ) W(\boldsymbol{r}) W(r) 的定义,当 ∣ r − r i ( t ) ∣ ≥ c \vert \boldsymbol{r} - \boldsymbol{r}_{i}(t) \vert \ge c ∣r−ri(t)∣≥c 时, W ( r − r i ( t ) ) = 0 W(\boldsymbol{r} - \boldsymbol{r}_{i}(t)) = 0 W(r−ri(t))=0。
因此在实际计算中可根据这一点跳过某些球的计算。
应力张量的计算
应力张量 [ σ ] = σ α β [\boldsymbol{\sigma}] = \sigma_{\alpha\beta} [σ]=σαβ 被表示为由接触作用产生的部分 σ α β ( c ) \sigma_{\alpha\beta}^{(c)} σαβ(c) ,以及由动能作用产生的部分 σ α β ( k ) \sigma_{\alpha\beta}^{(k)} σαβ(k) 。即:
σ α β = σ α β ( k ) + σ α β ( c ) \sigma_{\alpha\beta} = \sigma_{\alpha\beta}^{(k)} + \sigma_{\alpha\beta}^{(c)} σαβ=σαβ(k)+σαβ(c)
对于 σ α β ( k ) \sigma_{\alpha\beta}^{(k)} σαβ(k) ,有:
σ α β ( k ) ( r , t ) = ∑ i ∈ q m i v i , α ′ v i , β ′ W ( r − r i ( t ) ) \sigma_{\alpha\beta}^{(k)}(\boldsymbol{r}, t) = \sum\limits_{i \in q} m_i v_{i,\alpha}^{'} v_{i,\beta}^{'} W(\boldsymbol{r} - \boldsymbol{r}_{i}(t)) σαβ(k)(r,t)=i∈q∑mivi,α′vi,β′W(r−ri(t))
其中 v i , α ′ = u i , α − u α ( r , t ) v_{i,\alpha}^{'} = u_{i,\alpha} - u_{\alpha}(\boldsymbol{r}, t) vi,α′=ui,α−uα(r,t) 为第 i i i 个球的速度波动值。
对于 σ α β ( c ) \sigma_{\alpha\beta}^{(c)} σαβ(c) ,考虑第 i i i 个球的所有接触:
σ α β ( c ) ( r , t ) = ∑ i ∈ q ∑ j ∈ Q ˉ j ≠ i F i j , α l i j , β ∫ 0 1 W ( r − r i ( t ) + s l i j ) d s \sigma_{\alpha\beta}^{(c)}(\boldsymbol{r}, t) = \sum\limits_{i \in q} \sum\limits_{j \in \bar{Q}}^{j \neq i} F_{ij,\alpha} l_{ij,\beta} \int_{0}^{1} W(\boldsymbol{r} - \boldsymbol{r}_{i}(t) + s \boldsymbol{l}_{ij}) \mathrm{d}s σαβ(c)(r,t)=i∈q∑j∈Qˉ∑j=iFij,αlij,β∫01W(r−ri(t)+slij)ds
式中
- j j j 是整个颗粒系统 Q ˉ \bar{Q} Qˉ 中的一个球( j ≠ i j \neq i j=i),并且球 i i i 与球 j j j 发生接触;
- F i j \boldsymbol{F}_{ij} Fij 是球 i i i 所受到的来自球 j j j 接触的力, F i j , α F_{ij,\alpha} Fij,α 为其 α \alpha α 方向分量;
- l i j \boldsymbol{l}_{ij} lij 是球 i i i 与球 j j j 的接触矢量(从 i i i 向 j j j), l i j , α l_{ij,\alpha} lij,α 为其 α \alpha α 方向分量。
在实际操作中,对于
∫ 0 1 W ( r − r i ( t ) + s l i j ) d s \int_{0}^{1} W(\boldsymbol{r} - \boldsymbol{r}_{i}(t) + s \boldsymbol{l}_{ij}) \mathrm{d}s ∫01W(r−ri(t)+slij)ds
我选择使用复化 Simpson 积分计算其数值,以简化操作。
多种颗粒的粗粒化
假设一个颗粒流系统 Q ˉ \bar{Q} Qˉ 中有 Q Q Q 类颗粒,对于第 q q q 类颗粒 q ∈ Q q \in Q q∈Q, 可以使用单类颗粒粗粒化的公式计算出:第 q q q 类颗粒的粗粒化密度 ρ q ( r , t ) \rho^{q}(\boldsymbol{r}, t) ρq(r,t) 、速度 u q ( r , t ) \boldsymbol{u}^{q}(\boldsymbol{r}, t) uq(r,t) 和应力张量 σ α β q ( r , t ) \sigma_{\alpha\beta}^{q}(\boldsymbol{r}, t) σαβq(r,t)。
所以整个颗粒流系统 Q ˉ \bar{Q} Qˉ 的粗粒化结果为:
ρ ( r , t ) = ∑ q ∈ Q ρ q ( r , t ) u ( r , t ) = ∑ q ∈ Q u q ( r , t ) σ α β ( r , t ) = ∑ q ∈ Q σ α β q ( r , t ) \begin{aligned} \rho(\boldsymbol{r}, t) &= \sum_{q \in Q} \rho^{q}(\boldsymbol{r}, t) \\ \boldsymbol{u}(\boldsymbol{r}, t) &= \sum_{q \in Q} \boldsymbol{u}^{q}(\boldsymbol{r}, t) \\ \sigma_{\alpha\beta}(\boldsymbol{r}, t) &= \sum_{q \in Q} \sigma_{\alpha\beta}^{q}(\boldsymbol{r}, t) \\ \end{aligned} ρ(r,t)u(r,t)σαβ(r,t)=q∈Q∑ρq(r,t)=q∈Q∑uq(r,t)=q∈Q∑σαβq(r,t)
使用粗粒化数据提取颗粒流流变参数
这里以 μ ( I ) \mu(I) μ(I) 流变关系为例子,以上文的文献作为参照。
记速度剪切率张量 γ i j = ∂ u i ∂ x j + ∂ u j ∂ x i \gamma_{ij} = \frac{\partial u_i}{\partial x_j} + \frac{\partial u_j}{\partial x_i} γij=∂xj∂ui+∂xi∂uj ,其中 u i u_i ui 源自粗粒化速度场。令:
γ i j d = γ i j − δ i j 3 t r ( [ γ ] ) \gamma_{ij}^{d} = \gamma_{ij} - \frac{\delta_{ij}}{3} \mathrm{tr}([\gamma]) γijd=γij−3δijtr([γ])
其中 t r ( [ γ ] ) = γ x x + γ y y + γ z z \mathrm{tr}([\gamma]) = \gamma_{xx} + \gamma_{yy} + \gamma_{zz} tr([γ])=γxx+γyy+γzz 为 [ γ ] [\gamma] [γ] 的迹。
所以剪切应变率定义为:
∣ γ ˙ ∣ = 1 2 γ i j d γ i j d |\dot{\gamma}| = \sqrt{\frac{1}{2} {\gamma}_{ij}^{d} {\gamma}_{ij}^{d} } ∣γ˙∣=21γijdγijd
定义压强为
p
=
1
3
t
r
(
[
σ
]
)
=
(
σ
x
x
+
σ
y
y
+
σ
z
z
)
/
3
p = \frac{1}{3} \mathrm{tr}([\sigma]) = (\sigma_{xx} + \sigma_{yy} + \sigma_{zz}) / 3
p=31tr([σ])=(σxx+σyy+σzz)/3,偏应力张量为:
[
τ
]
=
τ
i
j
=
σ
i
j
−
p
⋅
δ
i
j
[\tau] = \tau_{ij} = \sigma_{ij} - p \cdot \delta_{ij}
[τ]=τij=σij−p⋅δij, 所以切应力为:
∣
τ
∣
=
1
2
τ
i
j
τ
i
j
|\tau| = \sqrt{\frac{1}{2} \tau_{ij} \tau_{ij} }
∣τ∣=21τijτij
简单的粗粒化代码示意
我用 Python 写了一份对单种颗粒系统进行粗粒化的代码,详情见此网页。