1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

cMPS-HS-HL (MPSの高精度化について)

Last updated at Posted at 2022-03-01

概要

 土木の分野において、粒子法の研究が盛んにおこなわれています。前回の記事でMPSについて説明しました。

 今回の記事では、保存則を満たすように圧力項と修正する方法(cMPS)、ポアソン方程式の高精度生成項(HS)、高精度ラプラシアン(HL)について紹介したいと思います。

以下の書籍の内容を参考にしています。

保存則

 質点系の全運動量 $G$ と全角運動量 $H$ は、

\begin{align}
 G = \sum_i m_iu_i \ \ , \ \ H = \sum_i r_i \times m_i u_i
\end{align}

とかける。$m_i$ は粒子 $i$ の質量、$u_i$ は粒子 $i$ の速度、$r_i$ は粒子 $i$ の半径である。

 ここでは、外力はゼロとして、粒子 $i$ の内力を $T_i$

\begin{align}
T_i = \sum_j T_{ij}
\end{align}

とすれば、ニュートンの第2法則より

\begin{align}
m_ia_i=m_i\frac{du_i}{dt} = -T_i
\end{align}

と書ける。全運動量または全角運動量が保存するとは、それらが時間変化しないこと、つまり、微分してゼロになる必要がある。

\begin{align}
\frac{dG}{dt} &=  \sum_i m_i \frac{du_i}{dt} = -\sum_i T_i = 0 \\
\frac{dH}{dt} &=  \sum_i r_i \times m_i \frac{du_i}{dt} = -\sum_i r_i \times T_i = 0 \\
\end{align}

つまり、

\begin{align}
&\sum_i T_i =\sum_i \sum_j T_{ij} = 0 \\
&\Rightarrow T_{ij}+T_{ji} = 0 
\end{align}
\begin{align}
&\sum_i r_i \times T_i =\sum_i \sum_j r_i \times T_{ij} = 0 \\
&\Rightarrow r_i \times T_{ij}+ r_j \times T_{ji} = -(r_j-r_i)\times T_{ij}=
-r_{ij}\times T_{ij}= 0 
\end{align}

を満たす必要がある。

 これを満たすには、$T_{ij}$ が $i$ と $j$ に関して反対称であること

\begin{align}
T_{ij} = -T_{ji} 
\end{align}

$T_{ij}$ が $r_{ij}$ に比例すること(同じベクトル同士の外積はゼロなので)

\begin{align}
T_{ij}  \propto r_{ij}
\end{align}

である。

MPS の圧力項について

 MPSの圧力項は、内力 $T_{ij}$ で書くと

\begin{align}
T_{ij}= - \frac{D}{n_0} \omega(|r_{ij}|) \frac{P_j^{k+1}-\hat{P}_i^{k+1}}{|r_{ij}|^2} r_{ij}
\end{align}

と書ける。$T_{ij}$ が $r_{ij}$ に比例しているが、

\begin{align}
P_j^{k+1}-\hat{P}_i^{k+1} \neq -( P_i^{k+1}-\hat{P}_j^{k+1})
\end{align}

であるので反対称でない。

 今回の記事では、粘性項が保存則を満たすようには修正はしないが(修正の仕方を勉強していない)、粘性項も内力 $T_{ij}$ で書くと

\begin{align}
T_{ij}= - \frac{2D}{\lambda n_0}  \omega(|r_{ij}|) (u_j^k  - u_i^k ) 
\end{align}

と書ける。、$T_{ij}$ が $i$ と $j$ に関して反対称であるが、$T_{ij}$ が $r_{ij}$ に比例していないため保存則を満たさない。

 この記事では、保存則を満たすように圧力項を修正する。この方法をcMPSと呼ばれる。

cMPS

 cMPSについて説明する。cMPSは、粒子 $i,j$ の間に仮想粒子 $k$ を考えることにより、MPSで満たされていなかった反対称性を満たすように修正を行う。

 粒子 $i,j$ の間にある仮想粒子 $k$ は、

\begin{align}
P_k = \frac{P_i+P_j}{2}  \ \ , \ \ r_{ik}=r_k-r_i = \frac{r_{ij}}{2}
\end{align}

と計算できるとする。重み関数は、

\begin{align}
\omega(|r_{ik}|) = \frac{r_{eik}}{r_{ik}}-1=  \frac{r_{eij}/2}{r_{ij}/2}-1
=\omega(|r_{ij}|)
\end{align}

となるので、数密度は

\begin{align}
n_{ik} \equiv \sum_{k\neq i} \omega(|r_{ik}|) =\sum_{j\neq i} \omega(|r_{ij}|)=n_i
\end{align}

となり添え字を $k$ を $j$ に変えても、変化しない。

 MPSの圧力勾配を、添え字 $k$ で足し上げて、$P_k , r_{ik}$ を代入し、

\begin{align}
\langle \nabla P \rangle_{i}
&= \frac{D}{n_0} \sum_{k \neq i} \left\{  \omega(|r_{ik}|) \frac{P_k}{|r_{ik}|^2} r_{ik} - \omega(|r_{ik}|) \frac{\hat{P}_i }{|r_{ik}|^2} r_{ik} \right\} \\
&= \frac{D}{n_0} \sum_{j \neq i} \left\{  \omega(|r_{ij}|) \frac{P_i+P_j}{2}\frac{4r_{ij}}{2|r_{ij}|^2}  - \omega(|r_{ij}|) \frac{4\hat{P}_i }{|r_{ij}|^2} \frac{r_{ij}}{2} \right\} \\
\end{align}

圧力の最小値

\begin{align}
\hat{P}_i \rightarrow \frac{\hat{P}_i +\hat{P}_j}{2}
\end{align}

とすれば、

\begin{align}
\langle \nabla P \rangle_{i}
&= \frac{D}{n_0} \sum_{j \neq i} \omega(|r_{ij}|) \frac{\left(P_i+P_j \right)-\left(\hat{P}_i +\hat{P}_j\right) }{|r_{ij}|}\frac{r_{ij}}{|r_{ij}|} \\
\end{align}

圧力勾配が求まる。 $i$ と $j$ に関して反対称であり、$T_{ij}$ が $r_{ij}$ に比例しているので保存則を満たしている。

ポアソン方程式の復習

 上記でcMPSについて説明したが、圧力勾配の精度は、圧力 $P$ を求める精度、つまりポアソン方程式の解の精度に依ってくる。

 ポアソン方程式を再度導出すると、$\delta u^c$ における質量保存則は、

\begin{align}
\frac{1}{n_0}\left(\frac{Dn}{Dt} \right)^c+ \nabla\cdot \delta u^c = 0
\end{align}

であり、非圧縮条件より

\begin{align}
\nabla\cdot\delta u^c & =\nabla\cdot (u^{k+1} - u^*)=-\nabla\cdot u^*= -\nabla\cdot \left(\frac{1}{\rho} \langle \nabla P \rangle^{k+1}\right) \Delta t
\end{align}

が成立するため、ポアソン方程式は

\begin{align}
\nabla\cdot \left(\frac{1}{\rho} \langle \nabla P \rangle^{k+1}\right)  = \frac{1}{n_0 \Delta t} \left(\frac{Dn}{Dt} \right)^c
\end{align}

と書ける。ポアソン方程式の右辺の高精度化の方法を高精度生成項と呼ばれ、左辺の高精度化の方法を高精度ラプラシアンと呼ばれる。

 この記事では、高精度ラプラシアンの方法を粘性項の計算でも使う。

ポアソン方程式の高精度生成項(HS)

 ここでは、ポアソン方程式の高精度生成項、連立方程式の右辺の項の高精度化について説明する。

 数密度の微分は、重み関数の微分

\begin{align}
\frac{d}{d|r|}\omega(|r|)  = - \frac{r_e}{|r|^2}
\end{align}

と $r$ に関する微分

\begin{align}
\frac{d}{dr}|r|  = - \frac{r}{|r|} \ \ , \ \ \frac{d}{dt}r_{ij}  = u_j-u_i \equiv u_{ij}
\end{align}

を使い、

\begin{align}
\frac{Dn_i}{Dt} &= \sum_{j \neq i} \frac{D}{Dt} \omega(|r_{ij}|) \\
& = \sum_{j \neq i} \frac{dr_{ij} }{dt} \frac{d|r_{ij}|}{dr_{ij}} \frac{d\omega(|r_{ij}|) }{d|r_{ij}|} \\
&=- \frac{r_e}{|r_{ij}|^3} r_{ij}\cdot u_{ij}
\end{align}

と求まる。(本来は式の途中でδ関数の和を取る。)

 質量保存から

\begin{align}
\frac{Dn}{Dt} &=\frac{D}{Dt}(n^p+n^c)= 0
\end{align}

であるので、

\begin{align}
\left(\frac{Dn}{Dt}\right)^c &= - \left(\frac{Dn}{Dt}\right)^p\\
& = - \sum_{j \neq i} \left(\frac{D\omega(|r^*_{ij}|) }{Dt}\right)^p \\
& = \sum_{j \neq i} \frac{r_e}{|r_{ij}^*|^3} r_{ij}^*\cdot u_{ij}^*
\end{align}

ともとまる。最終的に、ポアソン方程式の右辺は

\begin{align}
\nabla\cdot \left(\frac{1}{\rho} \langle \nabla P \rangle^{k+1}\right)  = \frac{1}{n_0 \Delta t} \sum_{j \neq i} \frac{r_e}{|r_{ij}^*|^3} r_{ij}^*\cdot u_{ij}^*
\end{align}

と書ける。

高精度ラプラシアン(HL)

 ここでは、ラプラシアンの高精度化、ポアソン方程式の左辺の項の高精度化について説明する。勾配モデルを

\begin{align}
\langle \nabla \phi\rangle_{i} &= \frac{1}{n_0}\sum_{j \neq i} \phi_{ij} \nabla\omega(|r_{ij}|)  
\end{align}

と書くことにする。(このモデルはSPHの勾配モデルであり、単純には本来のMPSの勾配モデルと異なる。)

 ラプラシアンは、

\begin{align}
\langle \nabla^2 \phi \rangle_i &= \nabla\cdot \langle \nabla \phi \rangle_i  \\
&= \frac{1}{n_0}\sum_{j \neq i} \left(\nabla\phi_{ij} \cdot \nabla\omega(|r_{ij}|) +\phi_{ij} \nabla^2 \omega(|r_{ij}|) \right)
\end{align}

と書ける。連鎖律を用いれば

\begin{align}
\nabla\phi &= \frac{\partial \phi}{\partial |r|} \nabla |r|  = \frac{\partial \phi}{\partial |r|} \frac{r}{|r|} \\
\nabla\omega(|r|) &= \frac{\partial \omega(|r|)}{\partial |r|} \nabla |r| = \frac{\partial \omega(|r|)}{\partial |r|} \frac{r}{|r|} \\
\nabla^2 \omega(|r|) &= \nabla \cdot \nabla \omega(|r|) \\
& = \nabla \cdot \left(\frac{\partial \omega(|r|)}{\partial |r|} \frac{r}{|r|} \right) \\
& = \nabla \left(\frac{\partial \omega(|r|)}{\partial |r|}\right) \cdot  \frac{r}{|r|} + \frac{\partial \omega(|r|)}{\partial |r|} \nabla \cdot \left( \frac{r}{|r|} \right) \\
& = \frac{\partial^2 \omega(|r|)}{\partial |r|^2} + \left(\frac{1}{|r|}  \nabla \cdot r - \frac{\partial \omega(|r|)}{\partial |r|}\frac{r}{|r|^2} \cdot \nabla |r| \right) \\
& = \frac{\partial^2 \omega(|r|)}{\partial |r|^2} + \frac{D-1}{|r|}\frac{\partial \omega(|r|)}{\partial |r|}
\end{align}

となるので、ラプラシアンは、

\begin{align}
\langle \nabla^2 \phi \rangle_i 
&= \frac{1}{n_0}\sum_{j \neq i} \left\{\frac{\partial \phi_{ij}}{\partial |r_{ij}|} \frac{\partial \omega(|r_{ij}|)}{\partial |r_{ij}|} + \phi_{ij}\left(\frac{\partial^2 \omega(|r_{ij}|)}{\partial |r_{ij}|^2} + \frac{D-1}{|r_{ij}|}\frac{\partial \omega(|r_{ij}|)}{\partial |r_{ij}|} \right) \right\}
\end{align}

と書ける。

密度が非一様な高精度ラプラシアン(HL)

 今までの説明は、密度が一様であることを前提であったが、固体と液体が混合状態で存在するとき、領域内の密度の変化も考慮する必要がある。
 そのとき、ラプラシアンは、

\begin{align}
\nabla\cdot \left(\frac{\nabla \phi}{\rho} \right)  
&= \frac{1}{\rho}\nabla\cdot \left( \nabla \phi \right) +  \nabla\left(\frac{1}{\rho} \right) \cdot  \nabla \phi
\end{align}

と書ける。1項目は、上記で説明した高精度ラプラシアン(HL)の結果を使う。2項目の計算は、連鎖律を用いて

\begin{align}
\nabla\left(\frac{1}{\rho} \right) &= \frac{\partial }{\partial |r|}\left(\frac{1}{\rho} \right) \nabla |r|  = \frac{\partial }{\partial |r|}\left(\frac{1}{\rho} \right) \frac{r}{|r|} \\
\nabla\omega(|r|) &= \frac{\partial \omega(|r|)}{\partial |r|} \frac{r}{|r|} 
\end{align}

粒子$i,j$ において、密度に作用する微分の離散化を

\begin{align}
\left\{ \frac{\partial }{\partial |r|}\left(\frac{1}{\rho} \right) \right\}_{ij} &= 
\frac{1}{r_{ij}} \left\{\frac{1}{\rho_j} - \frac{1}{\rho_i} \right\} \\
\end{align}

とすれば

\begin{align}
\left\langle \left\{\nabla\left(\frac{1}{\rho} \right) \right\} \cdot \nabla \phi  \right\rangle_i &= \frac{1}{n_0}\sum_{j \neq i} \phi_{ij}\left\{\nabla\left(\frac{1}{\rho} \right) \right\}_i \cdot \nabla\omega(|r_{ij}|) \\
&=  \frac{1}{n_0}\sum_{j \neq i} \phi_{ij}\frac{1}{r_{ij}} \left\{\frac{1}{\rho_j} - \frac{1}{\rho_i} \right\} \frac{\partial \omega(|r_{ij}|)}{\partial |r_{ij}|}\\
\end{align}

となるので、密度が非一様なラプラシアンは、

\begin{align}
&\left\langle \nabla\cdot \left(\frac{\nabla \phi}{\rho} \right) \right\rangle_i = \\
& \frac{1}{n_0}\sum_{j \neq i} \left\{ \frac{1}{\rho_i} \frac{\partial \phi_{ij}}{\partial |r_{ij}|} \frac{\partial \omega(|r_{ij}|)}{\partial |r_{ij}|} +\frac{\phi_{ij}}{\rho_i}\frac{\partial^2 \omega(|r_{ij}|)}{\partial |r_{ij}|^2} + \left(\frac{1}{\rho_j} + \frac{D-2}{\rho_i} \right) \frac{\phi_{ij}}{|r_{ij}|} \frac{\partial \omega(|r_{ij}|)}{\partial |r_{ij}|}\right\}
\end{align}

と書ける。
 次に、具体的にMPSの重み関数を代入すると

\begin{align}
&\frac{d}{d|r|}\omega(|r|) = - \frac{r_e}{|r|^2} \\
&\frac{d^2}{d|r|^2}\omega(|r|) = 2\frac{r_e}{|r|^3} \\
&\frac{d\phi_{ij}}{d|r_{ij}|}= -2\frac{\phi_{ij}}{|r_{ij}|} 
\end{align}

なので、

\begin{align}
&\left\langle \nabla\cdot \left(\frac{\nabla \phi}{\rho} \right) \right\rangle_i = \\
& \frac{1}{n_0}\sum_{j \neq i} \left\{ \frac{1}{\rho_i} \left(\frac{-2\phi_{ij}}{|r_{ij}|} \right) \left(\frac{-r_e}{|r_{ij}|} \right)
+\frac{\phi_{ij}}{\rho_i} \left(\frac{2r_e}{|r_{ij}|^3} \right)
+ \left(\frac{1}{\rho_j} + \frac{D-2}{\rho_i} \right) \frac{\phi_{ij}}{|r_{ij}|}  \left(\frac{-r_e}{|r_{ij}|} \right) \right\} \\
& = \frac{1}{n_0}\sum_{j \neq i}  \left(\frac{6-D}{\rho_i} -\frac{1}{\rho_j} \right) \frac{r_e}{|r_{ij}|^3}\phi_{ij}
\end{align}

と求まる。高精度ラプラシアンは、$i$ と $j$ に関して反対称であるが、$r_{ij}$ に比例していないため保存則を満たさない。

 一様な密度の場合、$\rho_i=\rho_j=\rho_0$ であるので、

\begin{align}
\frac{1}{\rho_0} \left\langle  \nabla^2 \phi \right\rangle_i = \frac{5-D}{\rho_0n_0}\sum_{j \neq i}  \frac{r_e}{|r_{ij}|^3}\phi_{ij} \\
\therefore  \left\langle  \nabla^2 \phi \right\rangle_i = \frac{5-D}{n_0}\sum_{j \neq i}  \frac{r_e}{|r_{ij}|^3}\phi_{ij}
\end{align}

と書ける。粘性項の計算ではこの式を使う。

ポアソン方程式のまとめ

 高精度生成項と高精度ラプラシアンを用いた場合、ポアソン方程式は

\begin{align}
\nabla\cdot \left(\frac{1}{\rho} \langle \nabla P \rangle^{k+1}\right) & = \frac{1}{n_0 \Delta t} \left(\frac{Dn}{Dt} \right)^c \\
\end{align}
\begin{align}
\therefore \ \  \frac{1}{n_0}\sum_{j \neq i}  \left(\frac{6-D}{\rho_i} -\frac{1}{\rho_j} \right) \frac{r_e}{|r_{ij}^*|^3}(P_j^{k+1} - P_i^{k+1}) &= \frac{1}{n_0 \Delta t} \sum_{j \neq i} \frac{r_e}{|r_{ij}^*|^3} r_{ij}^*\cdot u_{ij}^*
\end{align}

となる。

 連立方程式$Ax=b$ の形にすると

\begin{align}
&Ax=b \\
&x_i = P_i^{k+1} , \ \  b_i = \frac{1}{n_0 \Delta t} \sum_{j \neq i} \frac{r_e}{|r_{ij}^*|^3} r_{ij}^*\cdot u_{ij}^*
\end{align}
\begin{align}
A_{ij} = 
\begin{cases}
 -\frac{1}{n_0}\sum_{j \neq i}  \left(\frac{6-D}{\rho_i} -\frac{1}{\rho_j} \right) \frac{r_e}{|r_{ij}^*|^3}& (i=j)  \\
 \frac{1}{n_0}  \left(\frac{6-D}{\rho_i} -\frac{1}{\rho_j} \right) \frac{r_e}{|r_{ij}^*|^3} & (i\neq j)
\end{cases}
\end{align}

となる。密度が一様な場合は、対称行列になるが、非一様な場合は、非対称行列となり、連立方程式をBi-CGSTAB 法などの解法で解く必要がある。

MPS と cMPS-HS-HL の比較

 単純に、MPS と cMPS-HS-HL の比較を行う。

 以下は、MPS の damBreak の結果であり
anime.gif

以下は、cMPS-HS-HL の damBreak の結果である。
anime.gif

まとめ

 離散化されたナビエストークス方程式は

\begin{align}
u_i^{k+1} &= u_i^{k}-\frac{1}{\rho_0} \langle \nabla P \rangle_i^{k+1} \Delta t + \nu \langle \nabla^2 u  \rangle_i^k \Delta t + g \Delta t \\
\end{align}

である。

 以下、MPSとcMPS-HS-HLの差異をまとめる。

 粘性項は、MPSでは

\begin{align}
\langle \nabla^2 u \rangle_{i} ^k 
&= \frac{2D}{\lambda n_0} \sum_{j \neq i} \omega(|r_{ij}|) (u_j^k  - u_i^k ) 
\end{align}

であったが、高精度ラプラシアン(HL)を使えば

\begin{align}
\langle \nabla^2 u \rangle_{i} ^k  = \frac{5-D}{n_0}\sum_{j \neq i}  \frac{r_e}{|r_{ij}|^3}(u_j^k  - u_i^k )
\end{align}

と離散化される。

 MPSでは、$P_i^{k+1}$ の値を

\begin{align}
&Ax=b \\
&x_i = P_i^{k+1} , \ \  b_i = \frac{\rho_0}{\Delta t^2} \frac{n^*_i-n_0}{n_0} 
\end{align}
\begin{align}
A_{ij} = 
\begin{cases}
\frac{2D}{\lambda n_0}\sum_{j \neq i} \omega(|r_{ij}^*|)  & (i=j)  \\
-\frac{2D}{\lambda n_0} \omega(|r_{ij}^*|)             & (i\neq j)
\end{cases}
\end{align}

から計算したが、高精度生成項と高精度ラプラシアンを使うと(密度を一様として)

\begin{align}
&Ax=b \\
&x_i = P_i^{k+1} , \ \  b_i = \frac{\rho_0}{n_0 \Delta t} \sum_{j \neq i} \frac{r_e}{|r_{ij}^*|^3} r_{ij}^*\cdot u_{ij}^*
\end{align}
\begin{align}
A_{ij} = 
\begin{cases}
 -\frac{5-D}{n_0}\sum_{j \neq i}   \frac{r_e}{|r_{ij}^*|^3}& (i=j)  \\
 \frac{5-D}{n_0}   \frac{r_e}{|r_{ij}^*|^3} & (i\neq j)
\end{cases}
\end{align}

から計算する。

 MPSにおいて、圧力項は、ポアソン方程式から得られた $P_i^{k+1}$ の値を使い、

\begin{align}
\langle \nabla P \rangle_{i} ^{k+1}
&= \frac{D}{n_0} \sum_{j \neq i} \omega(|r_{ij}|) \frac{P_j^{k+1}-\hat{P}_i^{k+1}}{|r_{ij}|^2} r_{ij}
\end{align}

と離散化する。cMPSでは、

\begin{align}
\langle \nabla P \rangle_{i}
&= \frac{D}{n_0} \sum_{j \neq i} \omega(|r_{ij}|) \frac{\left(P_i+P_j \right)-\left(\hat{P}_i +\hat{P}_j\right) }{|r_{ij}|}\frac{r_{ij}}{|r_{ij}|} \\
\end{align}

と離散化する。MPSは、$i$ と $j$ に関して反対称であるが $r_{ij}$ に比例していないので保存則が成立しない。しかしCMPSは、それら両方を満たし保存則が成立する。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?