pkuthss/doc/example/chap/chap3.tex
2025-05-28 07:49:09 +08:00

705 lines
31 KiB
TeX

% Copyright (c) 2014,2016,2018 Casper Ti. Vector
% Public domain.
\chapter{线性精确有限体积方法在油藏模拟中的应用}
% \section{引言}
\section{数学模型}\label{notations}
我们简要介绍非均匀各向异性油藏模拟中的油-水两相流的数学模型(更全面的描述见文献\parencite{Bear2013, Peaceman1977, Chen2006}).
两相流质量平衡方程为
\begin{equation}\label{eq:mass}
\frac{\partial (\phi \rho_{\alpha} S_{\alpha})}{\partial t}
+
\nabla \cdot (\rho_{\alpha} \boldsymbol v_{\alpha})=q_{\alpha},\quad \alpha=w,o,
\end{equation}
其中$\alpha=w$表示水相, $\alpha=o$表示油相, $\phi$是孔隙率,
$\rho_{\alpha}$, $S_{\alpha}$, $\boldsymbol v_{\alpha}$以及$q_{\alpha}$分别表示相密度, 相饱和度(即体积分数), 相速度以及介质的源项.
油和水的饱和度满足归一化条件:
\begin{equation}\label{eq:conser}
S_w+S_o=1.
\end{equation}
这说明油藏基质仅充满油和水.
方程\eqref{eq:mass}中的相速度$\boldsymbol v_{\alpha}$由达西定律给出\parencite{Darcy1856}
\begin{equation}\label{eq:darcy}
\boldsymbol v_{\alpha}
=
-\frac{k_{r\alpha}}{\mu_{\alpha}} \Lambda (\nabla p_{\alpha} - \rho_{\alpha} \boldsymbol{g}),\quad \alpha=w,o,
\end{equation}
其中$\Lambda$是基质的绝对渗透率张量, 该张量满足椭圆条件.
$p_{\alpha}$, $\mu_{\alpha}$以及$k_{r\alpha}$分别表示压力, 粘性系数以及相对渗透率.
$\boldsymbol{g}$表示重力加速度.
定义相流度为$\lambda_{\alpha} = k_{r\alpha}/\mu_{\alpha}$,
那么总流度定义为$\lambda = \lambda_w + \lambda_o$.
相对渗透率是关于饱和度的强非线性函数,
具体的函数关系与特定的多孔介质和特定的流体相关, 并且通常通过特定的本构模型获得.
接下来对模型进行简化.
我们假定, 基质和流体都是不可压, 因此相密度$\rho_{\alpha}$和孔隙率$\phi$都假定为常数.
方程\eqref{eq:mass}两边除以$\rho_{\alpha}$, 并对油水两相求和, 再结合\eqref{eq:conser}, 我们得到
\begin{equation}\label{eq:divv}
\nabla \cdot \boldsymbol v = Q,
\end{equation}
其中$\boldsymbol v = \boldsymbol v_{w} + \boldsymbol v_o$是总速度, 并且总源项(注水率和产出率)记为$Q=Q_w+Q_o$,
其中$Q_{\alpha} = q_{\alpha}/\rho_{\alpha}$, $\alpha=w,o$.
进一步, 我们假设毛细管压力$p_c = p_o-p_w$为零, 那么我们记$p_o=p_w:=p$.
接着, 对方程\eqref{eq:darcy}中的油水两相求和, 忽略重力项, 我们得到
\begin{equation}\label{eq:totalv}
\boldsymbol v = - \lambda \Lambda \nabla p.
\end{equation}
在上述假定条件下, 方程\eqref{eq:divv}\eqref{eq:totalv}构成压力的椭圆方程.
接下来推导饱和度的方程, 再次使用方程\eqref{eq:darcy}, 我们得到
\begin{equation}\label{eq:vw}
\boldsymbol v_w = - \lambda_w \Lambda \nabla p = f_w(S_w) \boldsymbol{v},
\end{equation}
其中
\begin{equation}\label{eq:fw}
f_w(S_w) = \frac{\lambda_w}{\lambda} = \frac{k_{rw}/\mu_{w}}{k_{rw}/\mu_{w}+k_{ro}/\mu_{o}}.
\end{equation}
这里, $f_w(S_w)$称为水的分流函数, 这是一个关于饱和度的非线性函数.
\eqref{eq:vw}\eqref{eq:fw}代入\eqref{eq:mass}, 两边同时除以$\rho_{w}$, 我们得到关于饱和度的双曲方程:
\begin{equation}\label{eq:advec}
\phi \frac{\partial S_w}{\partial t} + \nabla \cdot (\boldsymbol F(S_w))
=
Q_w,
\end{equation}
其中通量向量定义为
\begin{equation}\label{eq:advecflux}
\boldsymbol F(S_w)=f_w(S_w) \boldsymbol v.
\end{equation}
在上述假定条件下, \eqref{eq:divv}, \eqref{eq:totalv}, \eqref{eq:advec}\eqref{eq:advecflux}构成简化的数学模型:
\begin{equation}
\begin{cases}
\displaystyle \nabla \cdot \boldsymbol v = Q, \\
\displaystyle \boldsymbol v = - \lambda \Lambda \nabla p, \\
\displaystyle \phi \frac{\partial S_w}{\partial t} + \nabla \cdot (\boldsymbol F(S_w))
=
Q_w, \\
\displaystyle \boldsymbol F(S_w)=f_w(S_w) \boldsymbol v.
\end{cases}
\end{equation}
当我们采用一组恰当的初始条件和边界条件时,
这个数学模型就完全确定了.
假设$\Gamma = \partial \Omega$$\Gamma_D$$\Gamma_N$构成,
满足$\Gamma=\Gamma_D \cup \Gamma_N$以及$\Gamma_D \cap \Gamma_N = \emptyset$,
其中$\Gamma_D$, $\Gamma_N$分别表示Dirichlet边界和Neumann边界.
我们也介绍$\Gamma$的另外一种分割, 即$\Gamma=\Gamma_I \cup \Gamma_P$(见\parencite{Chen2021,Chueh2010}).
这里, $\Gamma_I = \{ \boldsymbol{x} \in \Gamma: \boldsymbol v \cdot \boldsymbol n <0 \}$表示入流边界,
$\Gamma_P = \{ \boldsymbol{x} \in \Gamma: \boldsymbol v \cdot \boldsymbol n \ge 0 \}$表示出流边界,
其中$\boldsymbol n$表示边界的单位外法向量.
在本文中, 我们使用下列边界条件和初值\parencite{Chen2021}:
\begin{align}
p = g_D, & \mbox{} \Gamma_D \times [0,T] \mbox{} , \\
\boldsymbol v \cdot \boldsymbol n = g_N, & \mbox{} \Gamma_N \times [0,T] \mbox{} , \\
S_w = \bar S_w, & \mbox{} \Gamma_I \times [0,T] \mbox{} , \\
S_w(\boldsymbol x, 0) = S_w^0, & \mbox{} \Omega \mbox{} ,
\end{align}
其中$\bar S_w$表示入流边界的给定的水的饱和度,
$S_w^0$表示初始时刻$t=0$时, 油藏中的水的饱和度分布.
\section{数值算法的记号}
为了对区域进行离散化以及构建离散格式, 我们引入一些符号.
$\Omega$的有限体积离散记为$\md$, 定义为一个四元组$\md=(\mm,\mme,\mo,\mmp)$, 其中
\begin{itemize}
\item $\mm =\{K\}$表示单元的集合, 每个网格单元是$\Omega$中的开连通多边形, 满足$\bar\Omega=\cup_{K\in\mm}{\bar K}$. 对$K\in\mm$, 令$\partial K$, $|K|$$h_K$分别表示单元边界, 单元测度(体积)以及单元直径. 定义$h=\max_{K\in\mm}\{h_K\}$表示网格尺寸.
\item $\mme{ =\{\sigma\}}$表示边的集合, 对于每一条边$\sigma\in\mme$, 它都是线段, 并且长度记为$|\sigma|$. 令$\mme^{int}=\mme\cap\Omega$以及$\mme^{ext}=\mme\cap \partial \Omega$. 对于$K\in\mm$, 存在$\mme$的子集$\mme_K$使得$\partial K=\cup_{\sigma\in\mme_K}\bar\sigma$. 对于$\sigma\in \mme_K$, 在不引起混淆的情况下, 符号$\sigma$表示一条边或者表示这条边的编号, 取决于上下文. 令$\bm n_{K,\sigma}$表示单元$K$在边$\sigma$上的单位外法向量. 令$\bm t_{K,\sigma}$表示边$\sigma$的单位切向量, 方向规定为沿着单元$K$的边界的逆时针方向.
\item ${\mo=\{\bm x_K, {K\in\mm}\}}$表示单元中心的点集, 其中${\bm x}_K\in K$.
\item 定义$\mmp=\cup_{K\in\mm}\mmp_K$, 其中$\mmp_K$表示单元$K$的顶点集合.
\end{itemize}
\section{压力方程的一个线性精确格式}
在本节中, 我们详细介绍压力方程\eqref{eq:divv}\eqref{eq:totalv}的一个线性精确单元中心型有限体积格式.
在单元$K$上对压力方程\eqref{eq:divv}积分, 应用高斯散度定理, 我们将单元中心型有限体积格式描述为: 寻找${\{p_K, {K\in\mm}\}}$, 使得
\begin{equation}\label{eq:balance}
\sum\limits_{\sigma\in\mme_K} \int_{\sigma}\boldsymbol v \cdot \boldsymbol n_{K,\sigma} \diff s=\int_K Q \diff \bm x,\ \ \forall\; K\in\mm.
\end{equation}
这里, $\bm v$是总速度, 由方程\eqref{eq:totalv}给出, 因此\eqref{eq:balance}是一个关于压力$p$的有限体积方程.
$F_{K,\sigma}$表示法向流$\int _{\sigma}\bm{v}\cdot \bm{n}_{K,\sigma}\,\mathrm{d}s$的单侧逼近, 仅用单元$K$单侧的信息.
\subsection{单侧流的构造}
\begin{figure}[htbp]
\centering
\def\mpgw{0.48\textwidth}
\begin{minipage}[b]{\mpgw}
\centering
\includegraphics[width=\textwidth]{../img/lsdiamond2d-figure2.eps}
\end{minipage}
\caption{内部边$\sigma$周围的局部结构和记号.}
\label{fig:diamondstructure}
\end{figure}
对于$\sigma \in \mme_K \cap \mme_L$, $i=1,2$.
$\bm N_{K,\sigma,i}$表示与$(\bm x_{\sigma,i} - \bm x_{K})$垂直的向量,
指向三角形$\triangle \bm x_{K}\bm x_{\sigma,1}\bm x_{\sigma,2}$外面, 长度为$\left\| \bm x_{\sigma,i} - \bm x_K \right\|$.
$\bm N_{L,\sigma,i}$表示与$(\bm x_{\sigma,i} - \bm x_{L})$垂直的向量,
指向三角形$\triangle \bm x_{L}\bm x_{\sigma,1}\bm x_{\sigma,2}$外面, 长度为$\left\| \bm x_{\sigma,i} - \bm x_L \right\|$.
此外, 引入以下记号
$$
\begin{array}{l}
\disp\eta_{K,\sigma}^{(n)} = \left| \sigma \right| \bm n_{K,\sigma}^T {\Lambda_K} \bm n_{K,\sigma},\
\eta_{K,\sigma}^{(1)} = \bm n_{K,\sigma}^T \Lambda_K \bm N_{K,\sigma,1},\
\eta_{K,\sigma}^{(2)} = \bm n_{K,\sigma}^T \Lambda_K \bm N_{K,\sigma,2}{,} \\[0.3cm]
\disp\eta_{L,\sigma}^{(n)} = \left| \sigma \right| \bm n_{L,\sigma}^T \Lambda_L \bm n_{L,\sigma},\
\eta_{L,\sigma}^{(1)} = \bm n_{L,\sigma}^T \Lambda_L \bm N_{L,\sigma,1},\
\eta_{L,\sigma}^{(2)} = \bm n_{L,\sigma}^T \Lambda_L \bm N_{L,\sigma,2},
\end{array}
$$
其中$\Lambda_K=\lambda(\bm x_K) \Lambda(\bm x_K)$, $\Lambda_L=\lambda(\bm x_L) \Lambda(\bm x_L)$.
对于联合法向量$\Lambda_K^T \bm n_{K,\sigma}$, 我们有如下分解
\begin{equation}\label{step2:a2}
\left| \sigma \right| \Lambda_K^T \bm n_{K,\sigma} = \alpha_{K,\sigma}(\bm x_{\sigma,1} -
\bm x_{K}) + \beta_{K,\sigma}(\bm x_{\sigma,2} - \bm
x_{K}){,}
\end{equation}
其中
\begin{eqnarray}\label{step2:a3}
&&\alpha_{K,\sigma} =
- \frac{\eta_{K,\sigma}^{(2)}} { {d_{K,\sigma } }}
, \quad
\beta_{K,\sigma} =
- \frac{\eta_{K,\sigma}^{(1)}} { {d_{K,\sigma } }}
\end{eqnarray}
这里, $d_{K,\sigma}$表示${\bm x}_{K}$$\sigma$的距离.
由于
$$
\bm N_{K,\sigma,1} + \bm
N_{K,\sigma,2} =-\left| \sigma \right| \bm n_{K,\sigma},
$$
我们有
\begin{equation}\label{step2:a4}
\eta_{K,\sigma}^{(1)} +\eta_{K,\sigma}^{(2)} = -\eta_{K,\sigma}^{(n)},\quad \alpha_{K,\sigma} + \beta_{K,\sigma} =
\frac{\eta_{K,\sigma}^{(n)}} {d_{K,\sigma }}.
\end{equation}
等式\eqref{step2:a2}两边乘以$- \nabla p$并且在$\sigma$上积分, 我们得到
\begin{equation}\label{step2:a5}
- \int_{\sigma} (\Lambda_K \nabla p) \cdot \bm n_{K,\sigma} ds \simeq
\alpha_{K,\sigma}(p_K - p_{\sigma,1})
+ \beta_{K,\sigma}(p_K - p_{\sigma,2}) := F_{K,\sigma},
\end{equation}
其中符号$\simeq$表示当扩散张量在每个单元内为分片常数且精确解在每个单元内为分片线性时,
截断误差为零, 即在相应的推导中保持了线性精确准则.
类似地,
\begin{equation}\label{step2:a6}
- \int_{\sigma} (\Lambda_L \nabla p) \cdot \bm n_{L,\sigma} ds \simeq
\alpha_{L,\sigma}(p_L - p_{\sigma,1})
+ \beta_{L,\sigma}(p_L - p_{\sigma,2}) := F_{L,\sigma},
\end{equation}
其中
\begin{equation}\label{step2:a7}
\alpha_{L,\sigma} =
- \frac{\eta_{L,\sigma}^{(2)}} { {d_{L,\sigma } }}
, \quad
\beta_{L,\sigma} =
- \frac{\eta_{L,\sigma}^{(1)}} { {d_{L,\sigma } }}
,
\end{equation}
满足
\begin{equation}\label{step2:a8}
\eta_{L,\sigma}^{(1)} +\eta_{L,\sigma}^{(2)} = -\eta_{L,\sigma}^{(n)},\quad \alpha_{L,\sigma} + \beta_{L,\sigma} =
\frac{\eta_{L,\sigma}^{(n)}} {d_{L,\sigma }},
\end{equation}
这里, $d_{L,\sigma}$表示${\bm x}_{L}$$\sigma$的距离.
\subsection{唯一定义的法向流}
根据法向流局部守恒条件唯一确定流的表达式.
对于一条内部边$\sigma\in \mme_K\cap \mme_L$, 我们用两侧的单侧流定义唯一的法向流
\begin{equation}\label{step3:a1}
\tilde F_{K,\sigma}={ \mu_{K,\sigma}}F_{K,\sigma}-{
\mu_{L,\sigma}}F_{L,\sigma}, \quad \tilde F_{L,\sigma}={
\mu_{L,\sigma}}F_{L,\sigma}-{ \mu_{K,\sigma}}F_{K,\sigma},
\end{equation}
其中, $\mu_{K,\sigma}$$\mu_{L,\sigma}$是两个正的待定的参数, 满足
\begin{equation}
\label{unitmu}
\mu_{K,\sigma}+\mu_{L,\sigma}=1.
\end{equation}
显然, 这样定义的法向流满足局部守恒条件
\begin{equation*}\label{fluxcont}
\tilde
F_{K,\sigma}+\tilde F_{L,\sigma}=0, \ \ \sigma\in \mme_K\cap \mme_L.
\end{equation*}
\eqref{step2:a5}\eqref{step2:a6}代入\eqref{step3:a1}的第一个等式, 我们得到
\begin{align}
\tilde F_{K,\sigma}
=&
\frac{\eta_{K,\sigma}^{(n)}} {d_{K,\sigma }} \mu_{K,\sigma} p_K -
\frac{\eta_{L,\sigma}^{(n)}} {d_{L,\sigma }} \mu_{L,\sigma} p_L + \left(\frac{ \eta_{L,\sigma}^{(n)} } { {d_{L,\sigma } }} \mu_{L,\sigma} - \frac{ \eta_{K,\sigma}^{(n)} } { {d_{K,\sigma } }} \mu_{K,\sigma} \right) p_{\sigma,1} \nonumber \\
&+ \left( \frac{\eta_{K,\sigma}^{(1)}} { {d_{K,\sigma } }} \mu_{K,\sigma} - \frac{\eta_{L,\sigma}^{(1)}} { {d_{L,\sigma } }} \mu_{L,\sigma} \right) (p_{\sigma,2} - p_{\sigma,1}),
\end{align}
我们声明, 满足\eqref{unitmu}的任何一对参数都可以使用, 并且都满足线性精确准则.
特别地, 我们令
\begin{equation}
\frac{\eta_{K,\sigma}^{(n)}} {d_{K,\sigma }} \mu_{K,\sigma} = \frac{\eta_{L,\sigma}^{(n)}} {d_{L,\sigma }} \mu_{L,\sigma},
\end{equation}
并且使用\eqref{unitmu}我们得到
\begin{equation} \label{fluxweight}
{\mu_{K,\sigma}}=
\frac{\frac{d_{K,\sigma}}{{\eta_{K,\sigma}^{(n)}}}}
{\frac{d_{K,\sigma}}{{\eta_{K,\sigma}^{(n)}}}+\frac{d_{L,\sigma}}{{\eta_{L,\sigma}^{(n)}}}},\qquad
{\mu_{L,\sigma}}=
\frac{\frac{d_{L,\sigma}}{{\eta_{L,\sigma}^{(n)}}}}
{\frac{d_{K,\sigma}}{{\eta_{K,\sigma}^{(n)}}}+\frac{d_{L,\sigma}}{{\eta_{L,\sigma}^{(n)}}}}.
\end{equation}
那么我们得到一种流的表达式
\begin{equation}
\tilde F_{K,\sigma}
=
\frac{1}
{\frac{d_{K,\sigma}}{{\eta_{K,\sigma}^{(n)}}}+\frac{d_{L,\sigma}}{{\eta_{L,\sigma}^{(n)}}}} p_K -
\frac{1}
{\frac{d_{K,\sigma}}{{\eta_{K,\sigma}^{(n)}}}+\frac{d_{L,\sigma}}{{\eta_{L,\sigma}^{(n)}}}} p_L - \frac{ \frac{\eta_{L,\sigma}^{(2)}}{{\eta_{L,\sigma}^{(n)}}} - \frac{\eta_{K,\sigma}^{(2)}} {{\eta_{K,\sigma}^{(n)}}} }
{\frac{d_{K,\sigma}}{{\eta_{K,\sigma}^{(n)}}}+\frac{d_{L,\sigma}}{{\eta_{L,\sigma}^{(n)}}}} p_{\sigma,1}
+ \frac{ \frac{\eta_{K,\sigma}^{(1)}}{{\eta_{K,\sigma}^{(n)}}} - \frac{\eta_{L,\sigma}^{(1)}}{{\eta_{L,\sigma}^{(n)}}}}
{\frac{d_{K,\sigma}}{{\eta_{K,\sigma}^{(n)}}}+\frac{d_{L,\sigma}}{{\eta_{L,\sigma}^{(n)}}}} p_{\sigma,2},
\end{equation}
经过直接的代数计算, 我们得到了基于两个单元中心未知量和两个单元顶点未知量的边法向通量的唯一定义:
\begin{equation}\label{fluxoneside3}
\tilde F_{K,\sigma}={\cal K}_{K,\sigma}\left[p_K-p_L - {\cal D}_{K,\sigma}(p_{\sigma,1}-p_{\sigma,2})\right],
\end{equation}
其中
\begin{eqnarray*}
{\cal K}_{K,\sigma}&=&\frac{\eta_{K,\sigma}^{(n)}\eta_{L,\sigma}^{(n)}}
{d_{K,\sigma}\eta_{L,\sigma}^{(n)}+d_{L,\sigma}\eta_{K,\sigma}^{(n)}},\\[0.5cm]
{\cal D}_{K,\sigma}&=&
\frac{ \eta_{L,\sigma}^{(2)} } { \eta_{L,\sigma}^{(n)} }
-
\frac{ \eta_{K,\sigma}^{(2)} } { \eta_{K,\sigma}^{(n)} }.
\end{eqnarray*}
对于边界边$\sigma\in\mme_K\cap \mme^{ext}$, 我们简单地设置为
\begin{equation} \label{boundmu}
\tilde
F_{K,\sigma}=\mu_{K,\sigma}F_{K,\sigma}\ \ \hbox{其中}\ \
\mu_{K,\sigma}=1.
\end{equation}
\subsection{顶点辅助未知量的插值}
我们应用菱形格式中的扩展最小二乘插值算法eLSW.
假设$\bm{x}_{v}$是一个一般的内部顶点, 该顶点处的未知量为$u_{v}$.
$\mathcal{M}_{v} = \{K_{i}\in \mathcal{M},i=1,2,\cdots ,N_{C}\}$表示顶点周围的单元集合,
单元逆时针排列, 记$\sigma_{i}$表示$K_i$$K_{i-1}$的公共边.
我们的目标是确定权重$\omega _{i}$使得
\begin{equation}
\label{eq:vertexwt}
p_{v} = \sum _{i=1}^{N_{C}} \omega _{i} p_{i}.
\end{equation}
我们首先假设每个单元$K_{i}\in \mathcal{M}_{v}$上的解是线性函数, 那么梯度是分片常数, 定义为$\bm{g}_{i}$,
在顶点$\bm{x}_{v}$周围建立分片线性逼近:
\begin{equation}\label{eq:linearrecon}
p_{h}(\bm x) = p_{v} + \bm g_{i} \cdot (\bm x -
\bm x_{v}), \quad \bm x \in K_{i}.
\end{equation}
根据扩散方程的法向流连续以及解连续可以推出
\begin{equation}
\label{eq:gradrelation}
\begin{pmatrix}
\bm{t}_{K_i,\sigma_{i+1}}^{T}
\\
\bm{n}_{K_i,\sigma_{i+1}}^{T}\Lambda _{K_i}
\end{pmatrix}
\bm{g}_{i} =
\begin{pmatrix}
\bm{t}_{K_i,\sigma_{i+1}}^{T}
\\
\bm{n}_{K_i,\sigma_{i+1}}^{T}\Lambda _{K_{i+1}}
\end{pmatrix}
\bm{g}_{i+1},
\end{equation}
其中$\bm{t}_{K_i,\sigma_{i+1}}$表示边$\sigma_{i+1}$的切向量.
我们可以求解方程\eqref{eq:gradrelation}得到
\begin{equation}
\label{eq:gradtrans}
\bm{g}_{i+1} = \mathbb{T}_{i+1,i}\bm{g}_{i},
\end{equation}
其中
\begin{equation}
\label{gradtransmatrix}
\mathbb{T}_{i+1,i} =
\begin{pmatrix}
\bm{t}_{K_i,\sigma_{i+1}}^{T}
\\
\bm{n}_{K_i,\sigma_{i+1}}^{T}\Lambda _{K_{i+1}}
\end{pmatrix}
^{-1}
\begin{pmatrix}
\bm{t}_{K_i,\sigma_{i+1}}^{T}
\\
\bm{n}_{K_i,\sigma_{i+1}}^{T}\Lambda _{K_i}
\end{pmatrix}
.
\end{equation}
递归地使用上式我们得到
\begin{equation}
\bm g_i = (\mathbb T_{i,i-1} \cdots \mathbb T_{2,1}) \bm g_1,\quad i=1,2,\cdots,N_C.
\end{equation}
将这个等式代入\eqref{eq:linearrecon}并且令$\bm x = \bm x_{K_i}$, 我们得到
\begin{equation}
p_{h}(\bm{x}_{K_{i}}) = p_{v} + \bm{g}_{1} \cdot \bm y_{i},
\end{equation}
其中
\begin{equation}\label{eq:coordtrans}
\bm y_i = (\mathbb T_{i,i-1} \cdots \mathbb T_{2,1})^T (\bm x_{K_i} - \bm x_v)
:= (\xi_i, \eta_i)^T.
\end{equation}
上式定义了一种坐标变换, 将$\bm x_{K_i}$映射到相空间的$(\xi_i, \eta_i)^T$.
现在, 我们在相空间求解以下最小二乘问题以获得$p_{v}$的表达式:
\begin{equation}
\label{eq:vilseq}
\operatorname{argmin}_{ (p_{v},\bm{g}_{1}^{T})^{T} \in \mathbb R^{3}
} \left (\sum _{i=1}^{N_{C}}(p_{i} -
p_{h}(\bm{x}_{K_{i}}))^{2}\right ).
\end{equation}
此时, 我们介绍一些长度为$N_C$的辅助向量
\begin{equation}
\bm 1 =
\begin{bmatrix}
1
\\
\vdots
\\
1
\end{bmatrix}
,\quad \bm \xi =
\begin{bmatrix}
\xi _{1}
\\
\vdots
\\
\xi _{N_{C}}
\end{bmatrix}
,\quad \bm \eta =
\begin{bmatrix}
\eta _{1}
\\
\vdots
\\
\eta _{N_{C}}
\end{bmatrix}
,
\end{equation}
以及$N_{C} \times 3$的矩阵$\mathbb Q_{v} = [\bm 1, \bm \xi , \bm \eta]$.
然后我们引入以下假定.
\begin{assumption}
\label{A1}
$\mathcal{M}_{v}$中, 至少有3个单元, 其单元中心映射到相空间$(\xi , \eta)$中不共线.
\end{assumption}
在假定\ref{A1}条件下, $\mathbb Q_{v}$是满秩矩阵, 这意味着矩阵$\mathbb Q_{v}^{T} \mathbb Q_{v}$非奇异.
根据\eqref{eq:vilseq}, 顶点插值\eqref{eq:vertexwt}的权重为
\begin{equation}
\label{eq:finalweight}
(\omega _{1},\cdots ,\omega _{N_{C}}) = (1,0,0) (\mathbb{Q}_{v}^{T}
\mathbb{Q}_{v})^{-1}\mathbb{Q}_{v}^{T}.
\end{equation}
求解这个$3\times 3$代数系统, 我们得到
\begin{equation}\label{eq:finalweightEX}
\omega_i = \frac{1+\lambda_x \xi_i + \lambda_y \eta_i}{N_C+\lambda_x R_x + \lambda_y R_y},
\end{equation}
其中
\begin{equation}
\lambda_x = \frac{I_{xx} R_y - I_{yy} R_x}{D},\quad
\lambda_y = \frac{I_{xy} R_x - I_{xx} R_y}{D},\quad
D = I_{xx} I_{yy} -I_{xy}^2,
\end{equation}
\begin{equation}
R_x = \sum_{i=1}^{N_C} \xi_i, \quad
R_y = \sum_{i=1}^{N_C} \eta_i, \quad
I_{xx} = \sum_{i=1}^{N_C} \xi_i^2, \quad
I_{xy} = \sum_{i=1}^{N_C} \xi_i \eta_i, \quad
I_{yy} = \sum_{i=1}^{N_C} \eta_i^2.
\end{equation}
从上述推导可知, 对于扩散系数连续的问题, eLSW自然退化为经典的最小二乘插值(LSW)\parencite{Coudiere1999}.
实际上, 从\eqref{gradtransmatrix}式中我们发现所有过渡矩阵都退化为单位矩阵,
因此坐标变换\eqref{eq:coordtrans}\parencite{Coudiere1999}中的相同.
\begin{remark}
\label{rmk:fail}
当假定\ref{A1}不成立时,
矩阵$\mathbb Q_{v}^{T} \mathbb Q_{v}$是奇异的,
则插值算法\eqref{eq:finalweight}不再成立.
这种情况下有一些策略可以使用:
(1)扩展最小二乘问题\eqref{eq:vilseq}的模板, 例如使用第二层邻接单元$\mathcal{M}_{v}^{(2)} = \{L | \mathcal{E}_{L} \cap \mathcal{E}_{K}
\neq \varnothing , K\in \mathcal{M}_{v}\}$;
(2)使用逆距离加权当以上策略失效的情况.
\end{remark}
\subsection{压力的有限体积方程}\label{sec:step5}
我们将压力扩散方程的单元中心型有限体积格式描述为:
寻找${\{p_K, {K\in\mm}\}}$使得
\begin{equation}\label{step4:scheme}
\sum\limits_{\sigma\in\mme_K}\tilde F_{K,\sigma}=\int_K Q \diff \bm x,\ \ \forall\; K\in\mm,
\end{equation}
其中法向流$\tilde F_{K,\sigma}$可以使用\eqref{fluxoneside3}, \eqref{boundmu}, \eqref{eq:vertexwt}以及\eqref{eq:finalweightEX}计算.
\section{饱和度方程的一个线性精确离散}
为了获得饱和度方程的离散格式, 我们对方程\eqref{eq:advec}积分, 积分的空间区域为单元$K$, 时间区间为$[t^n, t^{n+1}]$,
得到
\begin{equation}
\int_{t^n}^{t^{n+1}} \int_K \phi \frac{\partial S_w}{\partial t} \diff \bm x \diff t
+
\int_{t^n}^{t^{n+1}} \int_K \nabla \cdot \boldsymbol F(S_w) \diff \bm x \diff t
=
\int_{t^n}^{t^{n+1}} \int_K Q_w \diff \bm x \diff t.
\end{equation}
使用微积分中值定理, 高斯散度定理, 以及显式向前欧拉方法, 方程\eqref{eq:advec}的离散逼近为
\begin{equation}
|K| \phi \frac{S_w^{n+1} - S_w^{n}}{\Delta t}
+
\sum\limits_{\sigma\in\mme_K} \int_{\sigma}\boldsymbol F(S_w) \cdot \boldsymbol n_{K,\sigma} \diff s
=
\int_K Q_w \diff \bm x.
\end{equation}
这里$\boldsymbol F(S_w)$是由\eqref{eq:advecflux}给出的对流通量向量.
这里重点在于空间离散格式.
$F_{K,\sigma}^{C}$表示逼近$\frac{1}{|\sigma|} \int_{\sigma}\boldsymbol F(S_w) \cdot \boldsymbol n_{K,\sigma} \diff s$的数值通量.
$S_{w,K,\sigma}$$S_{w,L,\sigma}$表示边$\sigma$左侧和右侧重构出的水的饱和度.
数值通量需要使用黎曼求解器得到.
\subsection{黎曼求解器}
\subsubsection{一阶逼近}
文献\parencite{Contreras2016}的作者对于对流项使用一阶近似, 可以写为\parencite{Correa2013}:
\begin{equation}
F_{K,\sigma}^{C}
=
F_{LLF} \cdot \bm n_{K,\sigma},
\end{equation}
其中局部Lax-Friedrich通量定义为\parencite{Cockburn1989,Edwards2010}:
\begin{equation}\label{eq:llf}
F_{LLF} \cdot \bm n_{K,\sigma}
=
\frac{1}{2}[(\boldsymbol F(S_{w,K,\sigma})+ \boldsymbol F(S_{w,L,\sigma})) \cdot \boldsymbol n_{K,\sigma} - |\alpha| (S_{w,L,\sigma}-S_{w,K,\sigma})],
\end{equation}
上式最后一项对应于人为的耗散项, 对通量离散格式起到稳定的作用. 其中的波速定义为:
\begin{equation}
|\alpha| = \max_{K,L} \left| (\boldsymbol v \cdot \boldsymbol n_{K,\sigma}) \frac{\partial f_w}{\partial S_w} \right|.
\end{equation}
注意到, 通量向量表达式为
\begin{equation}
\boldsymbol F(S_w)=f_w(S_w) \boldsymbol v,
\end{equation}
其中水的分流函数为
\begin{equation}
f_w(S_w) = \frac{\lambda_w}{\lambda} = \frac{k_{rw}/\mu_{w}}{k_{rw}/\mu_{w}+k_{ro}/\mu_{o}},
\end{equation}
总速度为
\begin{equation}
\boldsymbol v = - \lambda \Lambda \nabla p.
\end{equation}
那么, 速度在法向上的投影即为压力扩散方程的法向流
\begin{equation*}
|\sigma| \boldsymbol v \cdot \boldsymbol n_{K,\sigma}
=
\tilde F_{K,\sigma}.
\end{equation*}
于是, 局部Lax-Friedrich通量可以写为
\begin{equation}
F_{LLF} \cdot \bm n_{K,\sigma}
=
\frac{1}{2}[(f_w(S_{w,K,\sigma}) + f_w(S_{w,L,\sigma}) )\boldsymbol v \cdot \boldsymbol n_{K,\sigma} - |\alpha| (S_{w,L,\sigma}-S_{w,K,\sigma})],
\end{equation}
\begin{equation}
|\sigma|F_{LLF} \cdot \bm n_{K,\sigma}
=
\frac{1}{2}[(f_w(S_{w,K,\sigma}) + f_w(S_{w,L,\sigma}) ) \tilde F_{K,\sigma} - |\sigma||\alpha| (S_{w,L,\sigma}-S_{w,K,\sigma})],
\end{equation}
其中
\begin{equation}
|\sigma| |\alpha| = \max_{K,L} \left| \tilde F_{K,\sigma} \frac{\partial f_w}{\partial S_w} \right|.
\end{equation}
对于入流边界$\sigma \subset \Gamma_I$,
我们简单地设置
\begin{equation}
|\sigma| F_{K,\sigma}^C = f_w(\bar S_w) \tilde F_{K,\sigma},
\end{equation}
其中$\bar S_w$表示注水边给定的水的饱和度.
对于出流边界$\sigma\in\mme_K\cap \mme^{ext}$, 我们简单地设置
\begin{equation}
|\sigma| F_{K,\sigma}^C = f_w(S_{w,K,\sigma}) \tilde F_{K,\sigma}.
\end{equation}
\subsubsection{高分辨黎曼求解器}
在油藏模拟两相流中, 双曲方程的通量函数通常是非凸的, 这就需要选择满足熵修正的Riemann 求解器.
文献\parencite{Contreras2021}的作者使用一种近似黎曼求解器, 这种方法是文献\parencite{Souza2018}\parencite{Serna2009}建议的.
这种近似黎曼求解器最早是在文献\parencite{Serna2009}中提出的, 用于磁流体.
在这种黎曼求解器中, 每当出现声速点或出现相点时就将数值通量切换为使用局部Lax-Friedrich通量, 其他情况使用迎风型黎曼求解器.
正如文献\parencite{Serna2009}所指出, 对于某些情况, 当左侧和右侧分流函数的二阶导数符号不同时, 就认为出现了相点, 此时必须使用局部Lax-Friedrich通量.
这种高分辨的近似黎曼求解器可以写为
\begin{equation}
F_{K,\sigma}^{C}
=
\begin{cases}
\mathcal{F}_{LLF} \cdot \boldsymbol n_{K,\sigma}, &
%\begin{cases}
\frac{\partial f_w}{\partial S_w}(S_{w,K,\sigma}) \cdot \frac{\partial f_w}{\partial S_w}(S_{w,L,\sigma}) < 0
\text{}
\frac{\partial^2 f_w}{\partial S_w^2}(S_{w,K,\sigma}) \cdot \frac{\partial^2 f_w}{\partial S_w^2}(S_{w,L,\sigma}) < 0,
%\end{cases}
\\
\mathcal{F}_{U} \cdot \boldsymbol n_{K,\sigma}, & \text{其他}
\end{cases}
\end{equation}
其中迎风与局部Lax-Friedrich通量分别为
\begin{equation}
\mathcal{F}_{U} \cdot \boldsymbol n_{K,\sigma}
=
\begin{cases}
\boldsymbol F_w(S_{w,K,\sigma}) \cdot \boldsymbol n_{K,\sigma}, & (\boldsymbol v \cdot \boldsymbol n_{K,\sigma}) \frac{\partial f_w}{\partial S_w} \ge 0\\
\boldsymbol F_w(S_{w,L,\sigma}) \cdot \boldsymbol n_{K,\sigma}, & (\boldsymbol v \cdot \boldsymbol n_{K,\sigma}) \frac{\partial f_w}{\partial S_w} < 0
\end{cases}
\end{equation}
\begin{equation}
\mathcal{F}_{LLF} \cdot \boldsymbol n_{K,\sigma}
=
\frac{1}{2}[(\boldsymbol F(S_{w,K,\sigma})+ \boldsymbol F(S_{w,L,\sigma})) \cdot \boldsymbol n_{K,\sigma} -|\alpha|(S_{w,L,\sigma}-S_{w,K,\sigma})],
\end{equation}
\begin{equation}
\alpha = \max_{\sigma} \left| (\boldsymbol v \cdot \boldsymbol n_{K,\sigma}) \frac{\partial f_w}{\partial S_w} \right|.
\end{equation}
在上式中, 参数$|\alpha|$表示特征波传播速度.
\subsection{重构}
现在我们考虑重构策略.
注意到$S_{w,K,\sigma}$表示使用单元$K$的信息重构边$\sigma$处的水的饱和度值.
\subsubsection{分片常数重构}
最简单的也是应用最广泛的重构格式是分片常数重构:
\begin{equation}
S_{w,K,\sigma} = S_{w,K}, \quad \forall K \in \mm.
\end{equation}
它假定在每个时间步长内, 饱和度值在整个单元内保持恒定, 从而得到的解在空间上是单调的, 但仅有一阶精度.
\subsubsection{单调的线性重构}
在构建高阶近似时, \parencite{Xie2017}中的作者使用了分段线性重构过程.
对于一个一般的单元$K \in \mm$,
首先使用无约束的高阶重构:
\begin{equation}
\hat S_{w,K,\sigma} = S_{w,K} + (\nabla S_w)_K \cdot (\bm x - \bm x_K),
\end{equation}
其中梯度$(\nabla S_w)_K$通过最小二乘方法得到.
然后对重构值加以限制, 限制器采用Barth和Jespersen在文献\parencite{Barth1989}中提出的限制器, 旨在确保重构值满足:
\begin{itemize}
\item 重构值不得低于相邻单元格平均值的最小值, 也不得高于其最大值, 即
\begin{equation}
\min_{\mm_K \cup \{K\}} \{S_{w}\} \le S_{w,K,\sigma} \le \max_{\mm_K \cup \{K\}} \{S_{w}\},
\end{equation}
其中$\mm_K$表示单元$K$的邻接单元集合.
\item 网格边两侧重构值的差与相应单元平均值的差值应具有相同的符号, 即
\begin{equation}
(S_{w,K,\sigma}-S_{w,L,\sigma})(S_{w,K}-S_{w,L})>0.
\end{equation}
\end{itemize}
这种Barth-Jespersen限制器通过两个步骤实现.
首先, 对任意单元$L \in \mm_K$, 令$\sigma = \mme_K \cap \mme_L$并且定义
\begin{equation}
\tilde \Pi_{L}
=
\begin{cases}
\displaystyle \min \left( 1, \frac{M_K-S_{w,K}}{\hat S_{w,K,\sigma}-S_{w,K}}\right), & \hat S_{w,K,\sigma}>S_{w,K}\\[0.35cm]
\displaystyle \min \left( 1, \frac{m_K-S_{w,K}}{\hat S_{w,K,\sigma}-S_{w,K}}\right), & \hat S_{w,K,\sigma}<S_{w,K}\\
1, & \hat S_{w,K,\sigma}=S_{w,K}
\end{cases}
\end{equation}
其中
\begin{equation}
m_K = \min_{\mm_K \cup \{K\}} \{S_{w}\},\quad
M_K = \max_{\mm_K \cup \{K\}} \{S_{w}\}.
\end{equation}
$\Pi_L$的等价定义为
\begin{equation}
\tilde \Pi_{L}
=
\begin{cases}
\displaystyle \frac{m_K-S_{w,K}}{\hat S_{w,K,\sigma}-S_{w,K}}, & \hat S_{w,K,\sigma}<m_K\\
1, & m_K \le \hat S_{w,K,\sigma} \le M_K \\
\displaystyle \frac{M_K-S_{w,K}}{\hat S_{w,K,\sigma}-S_{w,K}}, & \hat S_{w,K,\sigma}>M_K
\end{cases}
\end{equation}
第二步, 令
\begin{equation}
\Pi_K = \min_{L\in\mm_K} \{\tilde \Pi_L\}.
\end{equation}
此时, 使用相应的斜率限制器来定义更高阶的左、右状态值:
\begin{equation}
S_{w,K,\sigma} = S_{w,K} + \Pi_K (\nabla S_w)_K \cdot (\bm x - \bm x_K).
\end{equation}
遵循此过程可确保在面内的任何位置重构时, 线性重构的状态变量都满足单调性原则.
\subsection{时间步长策略}
\section{数值实验}
在本节中, 我们进行了若干数值实验以测试菱形格式搭配二阶单调MUSCL算法的精度和效率.
所有测试均采用双精度进行, 使用BICGSTAB求解由压力方程得出的线性方程组, 容差为1.0E-15.
\subsection{Buckley-Leverett问题}
这个经典问题源自文献\parencite{Bastian2003}, 其目的是检验算法的准确性.
Buckley-Leverett问题是一个常用于模拟一维多孔介质中无毛细压力效应的两相流测试算例. 其压力方程为
\begin{equation}
\nabla \cdot \boldsymbol v=0 \mbox{ 其中 } \boldsymbol v = -\lambda \Lambda \nabla p.
\end{equation}
相应的饱和度方程为
\begin{equation}
\phi \frac{\partial S_w}{\partial t} + \nabla \cdot (f_w(S_w) \boldsymbol v)
=0.
\end{equation}
多孔介质的绝对渗透率和孔隙率取为
\begin{equation}
\Lambda = \frac{1}{\lambda},\quad
\phi=1.
\end{equation}
那么压力扩散方程退化为拉普拉斯方程.
我们对压力扩散方程应用Dirichlet边界条件, 取压力扩散方程的解析解为
\begin{equation}
p(x,y,t)=1-x.
\end{equation}
那么速度的解析解为$\boldsymbol v=(1,0)^T$, 在整个计算域$\Omega=[0,1]^2$是一个常数.
水的分流函数为
\begin{equation}
f_w(S_w) = \frac{k_{rw}/\mu_{w}}{k_{rw}/\mu_{w}+k_{ro}/\mu_{o}}.
\end{equation}
油水的粘度比设置为$M \triangleq (\mu_o/\mu_w)=1$.
对于饱和度方程, 在$x=0$这条边的边界条件为$S_w(0,y,t)=1$, 其他的边不设置$S_w$的边界条件.
饱和度的初始条件为$S_w(x,y,0)=0$.
我们考虑以下不同的本构模型情形.
\subsubsection{线性相对渗透率}
相对渗透率与饱和度的关系设置为线性函数:
\begin{equation}
k_{rw}=S_{w},\quad
k_{ro}=1-S_{w}.
\end{equation}
在这种情形下, 饱和度方程退化为线性对流方程, 并且饱和度的解析解为
\begin{equation}
S_w(x,y,t)
=
\begin{cases}
1,&x<t, \\
0,&x>t.
\end{cases}
\end{equation}
数值结果表明, 误差已达到机器精度.
% vim:ts=4:sw=4