前回の投稿 の続きとして,reconstruct 演算子をもう少し詳しく見ていきます.前回の投稿で掲載した reconstruct 演算子の定義式は,数式では次式\eqref{eq:reconstruct}のように表現できます.
76 |
inv(surfaceSum(SfHat*mesh.Sf()))&surfaceSum(SfHat*ssf), |
$$ reconstruct(ssf) = \left(\sum_{f}^{}{\left({\bf n}_f \otimes {\bf S}_f\right)} \right)^{-1}\left(\sum_{f}^{} {\bf n}_f ssf\right) \tag{1} \label{eq:reconstruct} $$
ここで,\({\bf n}_f\) は,フェイスの単位法線ベクトルを,\({\bf S}_f\left(=|{\bf S}_f|{\bf n}_f\right)\) は,フェイスの面積を大きさとし,向きが \({\bf n}_f\) と等しい法線ベクトルをそれぞれ表します.また,surfaceSum 演算子は,各セルにおいてそのセルのフェイスの値の総和を計算します(fvcSurfaceIntegrate.C).
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
const labelUList& owner = mesh.owner(); const labelUList& neighbour = mesh.neighbour(); forAll(owner, facei) { vf[owner[facei]] += ssf[facei]; vf[neighbour[facei]] += ssf[facei]; } forAll(mesh.boundary(), patchi) { const labelUList& pFaceCells = mesh.boundary()[patchi].faceCells(); const fvsPatchField<Type>& pssf = ssf.boundaryField()[patchi]; forAll(mesh.boundary()[patchi], facei) { vf[pFaceCells[facei]] += pssf[facei]; } } |
事前準備 |
\eqref{eq:reconstruct}式中で使用されている2つのベクトル \(\bf a\) と \(\bf b\) の二項積\(\otimes\) (dyadic product) は次式\eqref{eq:dyad}のように計算されます.
$$ {\bf a} \otimes {\bf b} = \left(
\begin{array}{ccc}
a_1b_1 & a_1b_2 & a_1b_3 \\
a_2b_1 & a_2b_2 & a_2b_3 \\
a_3b_1 & a_3b_2 & a_3b_3
\end{array}
\right) \tag{2} \label{eq:dyad} $$
この二項積とベクトル \(\bf c\) との積を計算すると,次式\eqref{eq:D}のように変形できます.
\begin{align} \left({\bf a} \otimes {\bf b}\right) {\bf c} &= \left(
\begin{array}{ccc}
a_1b_1 & a_1b_2 & a_1b_3 \\
a_2b_1 & a_2b_2 & a_2b_3 \\
a_3b_1 & a_3b_2 & a_3b_3
\end{array}
\right)\left(
\begin{array}{c}
c_1 \\
c_2 \\
c_3
\end{array}
\right) \\
& = {\bf a}\left({\bf b} \cdot {\bf c}\right) \tag{3} \label{eq:D}
\end{align}
準備は以上です.
本題 |
では本題です.関係式\eqref{eq:D}を使用して,reconstruct 演算子を調べていきます.ここで,\eqref{eq:reconstruct}式中の以下の行列の部分を
$$ D \equiv \sum_{f}^{}{\left({\bf n}_f \otimes {\bf S}_f\right)} \tag{4} \label{eq:Dop} $$
として,密度 \(\rho\) の勾配 \(\nabla \rho\) にこれを作用させてみます.
\begin{align}
D \nabla \rho &= \sum_{f}^{} {\left({\bf n}_f\left({\bf S}_f \cdot \nabla \rho \right)\right)} \tag{5a}\\
&= \sum_{f}^{} {\left({\bf n}_f\left(|{\bf S}_f|{\bf n}_f \cdot \nabla \rho \right)\right)} \tag{5b}\\
&\approx \sum_{f}^{} {\left({\bf n}_f\left(|{\bf S}_f|{\bf n}_f \cdot \left(\nabla \rho\right)_f \right)\right)} \tag{5c}\\
& = \sum_{f}^{} {\left({\bf n}_f\left(|{\bf S}_f|snGrad\left(\rho\right)_f \right)\right)} \tag{5d} \label{eq:conversion}
\end{align}
ここで,1つ目の変形で関係式\eqref{eq:D}を使用しています.そして,3つ目の変形に近似が含まれています.これを\eqref{eq:reconstruct}式に合わせて書き直すと,次式が得られます.
$$ \nabla \rho \approx D^{-1}\left(\sum_{f}^{} {\left({\bf n}_f|{\bf S}_f|snGrad\left(\rho\right)_f \right)}\right) \tag{6} \label{eq:final} $$
参考資料 |