% Copyright (c) 2014,2016 Casper Ti. Vector
% Public domain.

\chapter{多面体网格上线性精确的顶点插值算法}

\section{引言}



据我们所知, 在三维空间中, 二阶插值公式是最小二乘法, 该方法在二维和三维中已被\parencite{Gao2015}使用.
数值实验表明, 在各向异性扩散系数存在的情况下, 最小二乘法可能会退化为一阶精度.
为了处理这种情况或更复杂的扩散情况, 我们通过将一种特殊的极限过程应用于MPFA方法\parencite{Aavatsmark1998, Edwards1998}来构建一个新的插值算法.
请注意, 由于其构造过程, 我们的插值公式是二阶的, 并且适用于非结构化网格.



近几十年来, 人们针对精确顶点插值算法的设计进行了大量研究, 并提出了许多算法.
我们注意到线性精确准则(例如参见\parencite{Gao2011}), 该准则要求对于具有分段线性解和分段常数扩散张量的问题,
推导的每一步都是精确的.
在\parencite{Gao2011}中, 作者提出了两种线性精确的显式插值算法,
其中第二种称为LPEW2, 已在许多研究中进行了检验\parencite{Contreras2021,Queiroz2014,TRHD2015,Gao2015,Yao2012}.
然而, 将此算法扩展到三维空间较为困难.
最近, 文献\parencite{Ricardo2021}的作者通过类似于LPEW2的技术,
在四面体网格上推导出了一种具有显式权重的插值算法, 称为LPEW3.
LPEW3对四面体网格上的大部分多种多样的各向异性扩散问题表现出准确的数值性能,
但对某些强各向异性扩散张量的问题则失效.
另一种常用的顶点插值算法是\parencite{Coudiere1999}中提出的最小二乘插值算法.
对于扩散系数连续的问题, 最小二乘插值法表现出色, 并且可以直接扩展到三维情况\parencite{Bertolazzi2004}.
然而, 对于扩散系数不连续的问题, 由于该方法未考虑扩散系数, 可能会导致精度较低.
文献\parencite{Dong2022}的作者将解和通量的连续性引入最小二乘问题, 以克服这一障碍, 并推导出一种称为GLS的顶点插值算法,
该算法可应用于多面体网格上的任何不连续扩散问题.
然而, 为每个顶点求解与最小二乘问题相关的局部线性系统会导致GLS计算量增加.
我们注意到, 最近文献\parencite{Miao2022}对于二维问题提出了一种名为eLSW(extended Least Square Weight)的扩展最小二乘插值算法, 适用于二维任意多边形网格, 适合扩散系数不连续的情况.
该方法可获得二阶精度, 并且对于扩散系数连续的问题, 它自然退化为经典的最小二乘插值算法.
我们打算将此算法扩展到三维情况, 这将在本文后面进行讨论.

在本章中, 我们研究了三维非均匀各向异性扩散问题的菱形格式.
首先, 在菱形区域内定义分段线性近似, 并利用解和通量的连续性获得相邻单元的梯度变换关系.
然后, 利用高斯-格林公式获得单元面两侧的梯度, 并得到该面上的法向通量表达式. 最后, 基于最小二乘技术和图搜索算法,
我们提出了一种适用于任意多面体网格的简单且二阶精度的顶点插值算法, 这可以视为\parencite{Miao2022}的三维扩展.
数值示例表明, 即使在扩散张量强各向异性以及不连续的情况下, 使用新的顶点插值算法的线性菱形格式也能达到近乎最优的精度,
尽管它不是单调有限体积格式.
可参考\parencite{Potier2020,Miao2022}获得线性格式的最新单调修正技术.

% 本章其余部分安排如下. 第2节介绍模型问题、一些符号和假设.
% 第3节给出菱形格式的推导.
% 第4节讨论三维情况下的扩展最小二乘插值算法eLSW.
% 第5节给出一系列测试以说明该格式和顶点插值算法的数值精度.
% 最后, 第6节给出一些结论, 并在本文的附录中给出eLSW的可选的图搜索算法.



\section{基于MPFA取极限逼近的顶点插值算法}

我们在这里提出一种新的方法获得线性精确插值, 该方法包含两个步骤: (1)通过法向流连续获得单元面的辅助未知量的插值; (2)对前一步骤应用某种极限过程, 从而获得顶点未知量的插值公式.

如图\ref{fig3:notation}所示,
假设顶点$\bm x_v$周围的单元为$K_i$($1\leq
i\leq N_{C}$).
单元$K_i$的单元中心为$\bm x_{K_i}$.
假设顶点$\bm x_v$被$N_f$个面共享,
令$\mathcal{S}_{v}=\{\sigma_1, \sigma_2, \cdots, \sigma_{N_f}\}$表示顶点周围的面的集合.
单元$K_i$中包含顶点$\bm x_v$的三个面记为$\sigma_{i_1}$, $\sigma_{i_2}$, $\sigma_{i_3}$, 以下对这三个面的标号使用周期指标, 即规定$\sigma_{i_0}=\sigma_{i_3}$, $\sigma_{i_4}=\sigma_{i_1}$.
网格面$\sigma_j$的面心记为$\bm x_{\sigma_j}$,
令$\bm m_{j}$为$\sigma_{j}$上的连续点,
定义为
\begin{equation}\label{facep}
 \bm m_{j} = (1-\tau)\bm x_v + \tau \bm x_{\sigma_j},\quad j=1,2,\cdots,N_f,
\end{equation}
其中$\tau\in (0,1)$.

\begin{figure}[!htbp]
\centering
\includegraphics[width=2.5in]{../img/cor.eps}
\caption{顶点周围的局部结构和记号.}\label{fig3:notation}
\end{figure}

此外, 令$u_i$,
$\bar{u}_j$, $\Lambda_i$以及${\bm n}_{i,i_j}$($j=1,2,3$)分别表示$u$在单元中心$\bm x_{K_i}$处的近似值,
$u$在连续点$\bm m_j$处的近似值,
单元$K_i$上的扩散张量以及单元$K_i$在面$\sigma_{i_j}$($j=1,2,3$)上的单位外法向量.

基于MPFA-O方法, 我们有如下分解
\begin{equation}\label{nomaldecomp1}
 \Lambda_i^T \bm n_{i,i_j} =
\disp \sum_{l=1}^{3}
c_{j,l}^{(i)} (\bm x_{K_i} - \bm m_{i_l}),
\quad j=1,2,3,
\end{equation}
其中
\begin{equation}\label{nCoeDecomp}
\begin{array}{cc}
\disp c_{j,l}^{(i)} =
\frac{
(\bm x_{k} - \bm m_{i_{l+1}},\bm x_{k} - \bm m_{i_{l-1}}, \Lambda_i^T \bm n_{i,i_j})}
{(\bm x_{K_i} - \bm m_{i_1},\bm x_{K_i} - \bm m_{i_2},\bm x_{K_i} - \bm m_{i_3})},
\quad j,l=1,2,3.
\end{array}
\end{equation}
这里使用了三个向量的混合积, 定义为
$(\bm a, \bm b, \bm c)=(\bm a \times \bm b) \cdot \bm c $.

接着, 方程\eqref{nomaldecomp1}两边乘以$-\nabla u$, 我们得到单侧法向流
\begin{equation}\label{FKK1}
F_{i,i_j} =
\disp \sum_{l=1}^{3}
c_{j,l}^{(i)} (\bar{u}_{i_l} - u_i ),
\quad j=1,2,3.
\end{equation}

利用法向流连续我们有
\begin{equation}
F_{i,j}+F_{k,j}=0, \quad j=1,2,\cdots,N_f.
\end{equation}
上式有$N_f$个法向流连续的约束方程, 同时有$N_f$个面上的未知量,可以求解上述方程将面上未知量用单元中心量表示.
为了更清晰地描述算法,
我们引入两个矩阵
\begin{equation}
\begin{array}{ccc}
\mathbb T_i = (\bm e_{i_1}, \bm e_{i_2}, \bm e_{i_3}),\quad
\mathbb S_i = (\bm f_{i}, \bm f_{i}, \bm f_i),
\end{array}
\end{equation}
其中$\bm e_{l}$表示$N_f \times N_f$单位矩阵的第$l$列($ 1 \leq l \leq n_f$).
$\bm f_{i}$表示$N_C \times N_C$单位矩阵的第$i$列($ 1 \leq i \leq N_C$).
我们定义两个向量${\bar{ \textbf{U}} }=(\bar{u}_1,\cdots,\bar{u}_{N_f})^T,
\textbf{U}=(u_1,\cdots,u_{N_C})^T$.
那么我们有
\begin{equation}\label{cornerm}
\mathbb T_i^T \bar{ \textbf{U}} =
\left(
\begin{array}{l}
\bar{u}_{i_1} \\
\bar{u}_{i_2} \\
\bar{u}_{i_3}
\end{array}
\right), \quad
\mathbb S_i^T  \textbf{U} =
\left(
\begin{array}{l}
u_i \\
u_{i}\\
u_i
\end{array}
\right).
\end{equation}
通过\eqref{cornerm}, 我们将\eqref{FKK1}中的三个法向流写成矩阵形式
\begin{equation}
\label{cornerm1} \left(
\begin{array}{l}
F_{i,i_1}\\
F_{i,i_2} \\
F_{i,i_3}
\end{array}
\right) = \left(
\begin{array}{lll}
c_{1,1}^{(i)} & c_{1,2}^{(i)} & c_{1,3}^{(i)} \\
c_{2,1}^{(i)} & c_{2,2}^{(i)} & c_{2,3}^{(i)} \\
c_{3,1}^{(i)} & c_{3,2}^{(i)} & c_{3,3}^{(i)}
\end{array}
\right)
(\mathbb T_i^T \bar{ \textbf{U}}  -
\mathbb S_i^T  \textbf{U} ),
\end{equation}
将法向流连续方程改写为矩阵形式, 我们有
\begin{equation}\label{fluxcontm}
\disp \sum_{i=1}^{N_C} \sum_{j=1}^{3}
F_{i,i_j} \bm e_{i_j} = \bm 0
\end{equation}
其中$\bm 0$表示所有分量都为0的向量, 上式可以改写为
\begin{equation}\label{fluxcontm2}
\disp \sum_{i=1}^{N_C}
\mathbb T_i \left(
\begin{array}{l}
F_{i,i_1}\\
F_{i,i_2} \\
F_{i,i_3}
\end{array}
\right) = \bm 0,
\end{equation}
这就得到如下线性系统
\begin{equation}
 \label{linearsys}
 {\mathbb M} \bar{ \textbf{U}}={\mathbb N}  \textbf{U},
\end{equation}
其中
\begin{equation}\label{defmn}
{\mathbb M} = \sum_{i=1}^{N_C} \mathbb T_i \left(
\begin{array}{lll}
c_{1,1}^{(i)} & c_{1,2}^{(i)} & c_{1,3}^{(i)} \\
c_{2,1}^{(i)} & c_{2,2}^{(i)} & c_{2,3}^{(i)} \\
c_{3,1}^{(i)} & c_{3,2}^{(i)} & c_{3,3}^{(i)}
\end{array}
\right) \mathbb T_i^T, \quad
{\mathbb N} =
\sum_{i=1}^{N_C} \mathbb T_i \left(
\begin{array}{lll}
c_{1,1}^{(i)} & c_{1,2}^{(i)} & c_{1,3}^{(i)} \\
c_{2,1}^{(i)} & c_{2,2}^{(i)} & c_{2,3}^{(i)} \\
c_{3,1}^{(i)} & c_{3,2}^{(i)} & c_{3,3}^{(i)}
\end{array}
\right) \mathbb S_i^T,
\end{equation}
求解\eqref{linearsys}, 我们得到
\begin{equation}
\label{relationuu}
 \bar{\textbf{U}}={\mathbb M}^{-1}{\mathbb N}\textbf{U}.
\end{equation}
根据\eqref{relationuu}, 单元面上的未知量可以通过单元中心量消去.


\subsection{取极限过程}\label{sec4.2}
由\eqref{facep}可得
$$
\lim_{\tau\rightarrow 0} {\bm m}_j=\bm x_v,\ \ j=1,2,\cdots,n_f.
$$
因此, 我们通过应用上述极限过程来构造顶点未知量的插值算法是很自然的.

为了更清晰地描述算法, 我们首先研究\eqref{nCoeDecomp}中的系数$c_{j,l}^{(i)}(\tau)$和参数$\tau$的关系.
在接下来的讨论中,
我们只需对于单元$K_i$进行讨论.
记$\bm s_i = \bm x_{K_i}-\bm x_v$, $\bm q_j = \bm x_{i_j} - \bm x_v$, $j=1,2,3$.
由于
\begin{align}
\bm x_{K_i} - \bm m_{i_j} &=
(\bm x_{K_i} - \bm x_v) +(\bm x_v - \bm m_{i_j}),  \nonumber \\
&=
\bm s_i - \tau\bm q_j,\quad j=1,2,3.
\end{align}
我们有
\begin{align}\label{nCoeDecomp1}
\disp c_{j,l}^{(i)}(\tau) &=
\disp \frac{
(\bm x_{K_i} - \bm m_{i_{l+1}},\bm x_{K_i} - \bm m_{i_{l-1}}, \Lambda_i^T \bm n_{i,i_j})}
{(\bm x_{K_i} - \bm m_{i_{l+1}},\bm x_{K_i} - \bm m_{i_{l-1}},\bm x_{K_i} - \bm m_{i_l})} \nonumber\\
& =
\disp \frac{
(\bm s_i - \tau\bm q_{l+1},\bm s_i - \tau\bm q_{l-1}, \Lambda_i^T \bm n_{i,i_j})}
{(\bm s_i - \tau\bm q_{l+1},\bm s_i - \tau\bm q_{l-1},\bm s_i - \tau\bm q_{l})} \nonumber\\
& =
\disp \frac{
\tau (\bm s_i, \Lambda_i^T \bm n_{i,i_j},\bm q_{l-1}-\bm q_{l+1})
 + \tau^2 (\bm q_{l+1},\bm q_{l-1}, \Lambda_i^T \bm n_{i,i_j})}
{\disp \tau^2 \sum_{m=1}^{3}(\bm s_i,\bm q_{m-1},\bm q_{m}) -
\tau^3 (\bm q_1,\bm q_2,\bm q_3)} \nonumber\\
& =
\disp \frac{1}{\tau}
\left[
\begin{array}{lll}
\frac{ \disp
 (\bm s_i, \Lambda_i^T \bm n_{i,i_j},\bm q_{l-1}-\bm q_{l+1})
 }
{\disp  \sum_{m=1}^{3}(\bm s_i,\bm q_{m-1},\bm q_m) -\tau (\bm q_1,\bm q_2,\bm q_3)}
+ \tau
\disp \frac{
  (\bm q_{l+1},\bm q_{l-1}, \Lambda_i^T \bm n_{i,i_j})}
{\disp  \sum_{m=1}^{3}(\bm s_i,\bm q_{m-1},\bm q_m) -\tau (\bm q_1,\bm q_2,\bm q_3)}
\end{array}
\right].
\end{align}

因此我们可以改写等式\eqref{nCoeDecomp}为
\begin{equation}\label{coeSplit}
\disp c_{j,l}^{(i)}(\tau)= \frac{1}{\tau} \left( c_{j,l}^{(i,1)}(\tau)
+ \tau c_{j,l}^{(i,2)}(\tau) \right),
\end{equation}
其中
\begin{align}\label{nCoeDecomp3}
c_{j,l}^{(i,1)}(\tau) =
\frac{ \disp
 (\bm s_i, \Lambda_i^T \bm n_{i,i_j},\bm q_{l-1}-\bm q_{l+1})
 }
{\disp  \sum_{m=1}^{3}(\bm s_i,\bm q_{m-1},\bm q_m) -\tau (\bm q_1,\bm q_2,\bm q_3)}, \nonumber \\
c_{j,l}^{(i,2)}(\tau) =
\frac{
  (\bm q_{l+1},\bm q_{l-1}, \Lambda_i^T \bm n_{i,i_j})}
{\disp  \sum_{m=1}^{3}(\bm s_i,\bm q_{m-1},\bm q_m) -\tau (\bm q_1,\bm q_2,\bm q_3)},
\end{align}
并且我们有
\begin{equation}\label{nCoeRelation}
\sum_{l=1}^{3} c_{j,l}^{(i,1)}(\tau) =
\disp \frac{
  \disp \sum_{l=1}^{3}
 (\bm s_i, \Lambda_i^T \bm n_{i,i_j},\bm q_{l-1}-\bm q_{l+1})
 }
{\disp \sum_{m=1}^{3}(\bm s_i,\bm q_{m-1},\bm q_m) -\tau (\bm q_1,\bm q_2,\bm q_3)}
=0.
\end{equation}
那么, 我们可以得到
\begin{equation}\label{msplit}
{\mathbb M} = \frac{1}{\tau} ({\mathbb M_1} + \tau
{\mathbb M_2} ), \quad
{\mathbb N} = \frac{1}{\tau} ({\mathbb N_1} + \tau
{\mathbb N_2} ),
\end{equation}
以及
\begin{equation}\label{mrelat}
{\mathbb M_1} \bm 1 =\bm 0, \quad
{\mathbb N_1} = {\mathbb O},
\end{equation}
其中$\bm 1$表示所有分量都是1的向量, $\bm 0$表示所有分量都是0的向量,
$\mathbb O$表示所有分量都是0的方阵.
根据\eqref{msplit}以及\eqref{mrelat},
我们发现\eqref{relationuu}等价于
\begin{equation}\label{msplit2}
( {\mathbb M_1} + \tau {\mathbb M_2} )\bar{ \textbf{U}}
=\tau {\mathbb N_2}  \textbf{U}.
\end{equation}
这里注意到${\mathbb M_1}$, ${\mathbb M_2}$以及${\mathbb N_2}$都是与$\tau$有关的矩阵.

现在, 记$u_0$表示$u$在顶点$\bm x_v$处的近似值.
由于单元面上解连续, 根据Taylor级数展开, 我们有
$$
\bar{ \textbf{U}} =u_0 \bm 1 + \tau \bm \Gamma +\bm O(\tau^2),
$$
其中$\bm \Gamma = (\gamma_1, \cdots , \gamma_{n_f})$是常数向量与$\tau$无关,
$\bm O(\tau^2)$表示所有分量都是$O(\tau^2)$数量级的向量.
将上式代入\eqref{msplit2}, 再使用\eqref{mrelat}的第一个等式, 我们得到
\begin{equation}\label{mequation0}
u_0 \tau {\mathbb M_2} \bm 1 +
\tau {\mathbb M_1}(\bm \Gamma - \gamma_1 \bm 1) +
\tau^2 {\mathbb M_2} \bm \Gamma +
({\mathbb M_1}  + \tau {\mathbb M_2} ) \bm O(\tau^2)
=\tau {\mathbb N_2} \textbf{U}.
\end{equation}
最后, 上式两边除以$\tau$, 然后令$\tau \rightarrow 0$, 我们得到一个与$\tau$无关的线性系统
\begin{equation}\label{mequation1}
u_0 {\mathbb M_2^0} \bm 1 +
{\mathbb M_1^0}(\bm \Gamma - \gamma_1 \bm 1)
={\mathbb N_2^0} \textbf{U},
\end{equation}
其中${\mathbb M_1^0}$, ${\mathbb M_2^0}$以及${\mathbb N_2^0}$分别表示${\mathbb M_1}$, ${\mathbb M_2}$以及${\mathbb N_2}$在$\tau=0$时的值.
令$\tilde {\mathbb M}$表示将${\mathbb M_1^0}$的第一列替换成${\mathbb M_2^0} \bm 1$的矩阵.
那么, \eqref{mequation1}可以重新改写为
\begin{equation}\label{mequation}
\tilde {\mathbb M} ( u_0, \gamma_2 -\gamma_1,
\cdots , \gamma_{n_0}-\gamma_1 )^T
= {\mathbb N_2^0} \textbf{U}.
\end{equation}
求解以上线性系统, 我们得到顶点$\bm x_v$的插值公式
\begin{equation}\label{uweight0}
u_0 = (1,0,\cdots, 0)
\tilde {\mathbb M}^{-1} {\mathbb N_2^0} \textbf{U}.
\end{equation}



\section{扩展最小二乘顶点插值算法}
\label{ch2:sec:vtxintrp}
在这里, 我们将文献\parencite{Miao2022}的思想推广到三维情形,
推导扩展最小二乘顶点加权算法(extended least square weight, eLSW).
如图\ref{ch2:fig:viinner}所示,
$\bm{x}_{v}$是一个一般的内部顶点,
顶点处的未知量记为$u_{v}$.
令$\mathcal{M}_{v} = \{K_{i}\in \mathcal{M},i=1,2,\cdots ,N_{C}\}$以及$\mathcal{S}_{v}=\{\sigma _{j}\in \mathcal{S},j=1,2,\cdots ,N_{S}\}$,
分别表示顶点周围的单元集合以及顶点周围的面集合.
单元$K_{i}$的中心记为$\bm{x}_{K_{i}}$,
单元上的未知量和扩散张量分别记为$u_{i}$与$\Lambda _{i}$.
我们的目标是确定权重$\omega _{i}$使得
\begin{equation}
\label{ch2:eq:vertexwt}
u_{v} = \sum _{i=1}^{N_{C}} \omega _{i} u_{i}.
\end{equation}
\begin{figure}[!htbp]
  \centering
  \def\mpgw{0.40\textwidth}
  \begin{minipage}[b]{\mpgw}
      \centering
      \includegraphics[width=0.8\textwidth]{../img/tkz-vii-arnd.eps}
  \end{minipage}
  \caption{内部顶点$\bm{x}_{v}$周围的局部结构和记号.}
  \label{ch2:fig:viinner}
\end{figure}

我们首先假设每个单元$K_{i}\in \mathcal{M}_{v}$上的解是线性函数, 那么梯度是分片常数, 定义为$\bm{g}_{i}$,
在顶点$\bm{x}_{v}$周围建立分片线性逼近:
\begin{equation}
u_{h}(\bm x) = u_{v} + \bm g_{i} \cdot (\bm x -
\bm x_{v}), \quad \bm x \in K_{i}.
\end{equation}
假设我们取定某个主单元$K_{r_{0}} \in \mathcal{M}_{v}$,
那么推导eLSW的关键步骤是寻找一系列矩阵$\mathbb{T}_{1,r_{0}}$,
$\mathbb{T}_{2,r_{0}}$, $\cdots $, $\mathbb{T}_{N_{C},r_{0}}$,
使得
\begin{equation}
\label{ch2:eq:finalgradrelation}
\bm{g}_{i} = \mathbb{T}_{i,r_{0}}\bm{g}_{r_{0}} ,\quad i=1,2,\cdots ,N_{C},
\end{equation}
并且满足线性精确准则.
我们将利用命题\ref{ch2:eq:gradtransexp0}达到这个目的.
为此, 我们必须确保对于任意$K_{i} \in \mathcal{M}_{v}$,
在$\mathcal{M}_{v}$中存在一个单元序列$K_{i_{0}},K_{i_{1}},\cdots ,K_{i_{m}}$,
使得$K_{i_{0}}=K_{r_{0}}$, $K_{i_{m}}=K_{i}$并且$K_{i_{l-1}}$和$K_{i_{l}}$有公共面($1\leq l \leq m$).
其充分条件是对于任意两个点$\bm{x}_{i} \in K_{i}$和$\bm{x}_{r_{0}} \in K_{r_{0}}$,
在集合$\bigcup \limits _{K \in \mathcal{M}_{v}} \bar{K}$中存在一条曲线$\mathcal{C}_{i,r_{0}}$连接这两个点,
并且这条曲线不与所有边相交.
为了寻找这样的曲线, 我们介绍以下关于有限点集的性质.
\begin{proposition}
\label{ch2:lem:foqlhgoq}
假设$P$是球面上的有限点集. 那么对$P$中任意两个点,
存在一条球面上的圆弧, 连接这两个点, 使得圆弧不经过$P$中的其他点.
\end{proposition}
{\bf 证明:\ }注意到球面上经过两个给定点的大圆弧是无限多的, 但若它还经过另一点, 则是唯一确定的.
又因为$P$是有限点集, 显然, 从无限多的大圆弧中寻找一条圆弧不经过$P$中的其他点是存在的. \qed

那么我们给出以下连通性结论.
\begin{theorem}
\label{ch2:th:connecting}
给定一个主单元$K_{r_{0}} \in \mathcal{M}_{v}$,
那么, 对任意单元$K_{i}\in \mathcal{M}_{v}$,
在$\mathcal{M}_{v}$中存在单元序列$K_{i_{0}},K_{i_{1}},\cdots ,K_{i_{m}}$,
使得$K_{i_{0}}=K_{r_{0}}$, $K_{i_{m}}=K_{i}$并且$K_{i_{l-1}}$和$K_{i_{l}}$有公共面($1\leq l \leq m$).
\end{theorem}
{\bf 证明:\ }我们以顶点$\bm x_{v}$为球心, 取一个半径为$\varepsilon $的小球$\mathcal B_{v}(\varepsilon )$,
使得$\mathcal B_{v}(\varepsilon ) \subset \bigcup \limits _{K \in
\mathcal{M}_{v}} \bar{K}$.
那么球面$\partial \mathcal{B}_{v}(\varepsilon )$和所有边的交点是有限点集.
根据命题\ref{ch2:lem:foqlhgoq}, 对任意$\bm{x}_{i}\in \partial \mathcal B_{v}(\varepsilon ) \cap K_{i}$与$\bm{x}_{r_{0}}\in \partial
\mathcal{B}_{v}(\varepsilon )\cap K_{r_{0}}$,
存在一条圆弧$\mathcal C_{i,r_{0}}$满足
\begin{equation}
\mathcal{C}_{i,r_{0}} \cap e = \varnothing , \quad \forall e \in
\mathcal{E}_{v},
\end{equation}
其中$\mathcal{E}_{v}$表示顶点$\bm{x}_{v}$周围的边.
进而, 沿着圆弧, 从$K_{r_{0}}$到$K_{i}$经过的单元即为所需的单元序列. \qed

注意到连接$K_{i}$与$K_{r_{0}}$的单元序列不唯一.
假设我们确定了一个单元序列$K_{i_{0}}$, $K_{i_{1}}$, $\cdots$, $K_{i_{m}}$,
那么我们可以利用命题\ref{ch2:eq:gradtransexp0}计算矩阵序列$\tilde{\mathbb{T}}_{i_{l},i_{l-1}}$,
使得
\begin{equation*}
\bm{g}_{i_{l}} = \tilde{\mathbb{T}}_{i_{l},i_{l-1}}\bm{g}_{i_{l-1}} ,
\quad l=1, \cdots ,m,
\end{equation*}
其中
\begin{equation*}
\tilde{\mathbb{T}}_{i_{l},i_{l-1}} =
\begin{pmatrix}
\bm{t}_{\sigma ,1}^{T}
\\
\bm{t}_{\sigma ,2}^{T}
\\
\bm{n}_{K_{i_{l}}, \sigma }^{T}\Lambda _{i_{l}}
\end{pmatrix}
^{-1}
\begin{pmatrix}
\bm{t}_{\sigma ,1}^{T}
\\
\bm{t}_{\sigma ,2}^{T}
\\
\bm{n}_{K_{i_{l}}, \sigma }^{T}\Lambda _{i_{l-1}}
\end{pmatrix}
,
\end{equation*}
这里$\sigma \in \mathcal{S}_{v}$是$K_{i_{l-1}}$和$K_{i_{l}}$的公共面.
那么我们有
\begin{equation}
\label{ch2:eq:finalgradtrans}
\mathbb{T}_{i,r_{0}} = \mathbb{T}_{i_{m},i_{0}} = \tilde{\mathbb{T}}_{i_{m},i_{m-1}}
\cdots \tilde{\mathbb{T}}_{i_{1},i_{0}}.
\end{equation}

现在我们引入图论的概念, 以使搜索算法更加清晰明了.
本质上, 顶点$\bm x_{v}$周围的单元拓扑是一个无向图, 定义为$G_{v}$,
网格单元映射为图的节点, 两个单元如果有公共面, 则在图中相应节点连一条边.
在这样的观点下, 定理\ref{ch2:th:connecting}意味着$G_{v}$是连通图.
进一步, 根据\parencite{graphbook}中的定理4.6, $G_{v}$中存在以$K_{r_{0}}$为根节点的生成树.
我们可以通过搜索算法获得这样的生成树.
原则上, 任何一种搜索算法都可以使用.
这里, 我们特别介绍广度优先搜索算法(breadth-first search, BFS)和深度优先搜索算法(depth-first search, DFS)\parencite{algorithmbook}.
广度优先搜索之所以如此命名, 是因为它首先扫描最近添加顶点的邻接表以查找未被发现的邻居.
深度优先搜索顾名思义, 只要有可能就在图中进行更深入的搜索. 基于深度优先搜索计算过渡矩阵的算法在附录中给出.

现在, 基于\parencite{Miao2022,Coudiere1999}, 我们在相空间$(\xi , \eta , \zeta )$求解以下最小二乘问题以获得$u_{v}$的表达式:
\begin{equation}
\label{ch2:eq:vilseq}
\operatorname{argmin}_{ (u_{v},\bm{g}_{r_{0}}^{T})^{T} \in \mathbb R^{4}
} \left (\sum _{i=1}^{N_{C}}(u_{i} -
u_{h}(\bm{x}_{K_{i}}))^{2}\right ),
\end{equation}
其中
\begin{equation}
\label{ch2:eq:finalpla}
u_{h}(\bm{x}_{K_{i}}) = u_{v} + \bm{g}_{i} \cdot (
\bm{x}_{K_{i}} - \bm{x}_{v}) = u_{v} + \bm{g}_{r_{0}} \cdot \bm y_{i},
\end{equation}
\begin{equation}
\label{ch2:eq:coordtrans}
\bm y_{i} = \mathbb{T}_{i,r_{0}}^{T} (\bm{x}_{K_{i}} - \bm{x}_{v}) := (
\xi _{i}, \eta _{i}, \zeta _{i})^{T}.
\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}
,\quad \bm \zeta =
\begin{bmatrix}
\zeta _{1}
\\
\vdots
\\
\zeta _{N_{C}}
\end{bmatrix}
,
\end{equation}
以及$N_{C} \times 4$的矩阵$\mathbb Q_{v} = [\bm 1, \bm \xi , \bm \eta , \bm \zeta ]$.
然后我们引入以下假定.
\begin{assumption}
\label{ch2:A1}
在$\mathcal{M}_{v}$中, 至少有4个单元, 其单元中心映射到相空间$(\xi , \eta , \zeta )$中不共面.
\end{assumption}
在假定\ref{ch2:A1}条件下, $\mathbb Q_{v}$是满秩矩阵, 这意味着矩阵$\mathbb Q_{v}^{T} \mathbb Q_{v}$非奇异.
求解最小二乘问题\eqref{ch2:eq:vilseq}的法方程组, 顶点插值算法的权重为
\begin{equation}
\label{ch2:eq:finalweight}
(\omega _{1},\cdots ,\omega _{N_{C}}) = (1,0,0,0) (\mathbb{Q}_{v}^{T}
\mathbb{Q}_{v})^{-1}\mathbb{Q}_{v}^{T}.
\end{equation}

从上述推导可知, 对于扩散系数连续的问题, eLSW自然退化为经典的最小二乘插值(LSW)\parencite{Coudiere1999}.
事实上, 从命题\ref{ch2:eq:gradtransexp0}的第二个结论我们发现对于扩散系数连续的问题, 所有过渡矩阵都退化为单位矩阵,
因此坐标变换\eqref{ch2:eq:coordtrans}与\parencite{Coudiere1999}中的相同.
大量重要的研究数据表明, 保正的顶点插值算法十分重要\parencite{Gao2013,Xie2018,Contreras2021},
尤其是在某些单调格式的构造中; 然而, 通常情况下, 由\eqref{ch2:eq:finalweight}式给出的权重并不总是正的.
在大多数情况下, 构建二阶保持正性的插值算法是一项艰巨的任务\parencite{Gao2013}.

\begin{remark}
\label{ch2:rmk:fail}
当假定\ref{ch2:A1}不成立时,
矩阵$\mathbb Q_{v}^{T} \mathbb Q_{v}$是奇异的,
则插值算法\eqref{ch2:eq:finalweight}不再成立.
这种情况下有一些策略可以使用:
(1)改变搜索策略或者更换主单元获得新的最小二乘问题\eqref{ch2:eq:vilseq};
(2)扩展最小二乘问题\eqref{ch2:eq:vilseq}的模板, 例如使用第二层邻接单元$\mathcal{M}_{v}^{(2)} = \{L | \mathcal{S}_{L} \cap \mathcal{S}_{K}
\neq \varnothing , K\in \mathcal{M}_{v}\}$;
(3)使用逆距离加权当以上策略都失效的情况.
\end{remark}

\subsection{进一步讨论}
我们注意到eLSW算法依赖于主单元的选取和搜索策略, 所得的权重也不同.
为了研究这个问题, 我们首先定义两个概念.
考虑$G_{v}$中的一个序列$K_{i_{0}}$,$K_{i_{1}}$,$
\cdots $,$K_{i_{m}}$,$K_{i_{m+1}} \in \mathcal{M}_{v}$, 当任意两个编号相邻的单元有公共面则称为路径,
并且对于首尾相同的路径称为圈.
那么我们介绍以下引理.
\begin{lemma}
\label{ch2:thm:hpexcktekfrj}
假设
\begin{equation}
\label{ch2:eq:cyclegradtrans}
\mathbb{T}_{i_{0},i_{m}}\mathbb{T}_{i_{m},i_{m-1}}\cdots \mathbb{T}_{i_{2},i_{1}}
\mathbb{T}_{i_{1},i_{0}} = \mathbb{I}_{3},
\end{equation}
对$\mathcal{M}_{v}$中的任意一个圈$K_{i_{0}}$,$K_{i_{1}}$,$\cdots $,$K_{i_{m}}$,$K_{i_{0}}$都成立.
那么对$\mathcal{M}_{v}$中的任意两个单元$K_{i}$和$K_{j}$, 无论主单元和搜索策略如何选取, 其过渡矩阵是不变的.
\end{lemma}
{\bf 证明:\ }对$\mathcal{M}_{v}$中的任意两个路径$K_{j},K_{j_{1}},\cdots ,K_{j_{m}}$和$K_{j},K_{k_{1}},\cdots ,K_{k_{l}}$其中$j_{m} = k_{l} = i$, 根据\eqref{ch2:eq:finalgradtrans}, $K_{j}$到$K_{i}$的过渡矩阵可以表示为$\mathbb{T}_{i,j}^{(1)}=\mathbb{T}_{i,j_{m-1}}\cdots \mathbb{T}_{j_{1},j}$以及$\mathbb{T}_{i,j}^{(2)}=\mathbb{T}_{i,k_{l-1}}\cdots \mathbb{T}_{k_{1},j}$.
注意到序列$K_{j},K_{j_{1}},\cdots ,K_{j_{m-1}},K_{i},K_{k_{l-1}},\cdots ,K_{k_{1}},\allowbreak K_{j}$是一个圈.
我们根据命题\ref{ch2:eq:gradtransexp0}的第一个结论以及\eqref{ch2:eq:cyclegradtrans}推出
\begin{equation*}
\left (\mathbb{T}_{i,j}^{(2)}\right )^{-1} \mathbb{T}_{i,j}^{(1)} =
\mathbb{T}_{j,k_{1}}\cdots \mathbb{T}_{k_{l-1},i} \mathbb{T}_{i,j_{m-1}}
\cdots \mathbb{T}_{j_{1},j} = \mathbb{I}_{3},
\end{equation*}
这意味着$\mathbb{T}_{i,j}^{(1)}=\mathbb{T}_{i,j}^{(2)}$. \qed

接着, 我们得到如下结论.

\begin{theorem}
\label{ch2:thm:pfdogdsafhqosx}
假设扩散张量的间断面是一个平面, 且不穿过任何网格单元,
假设这个间断面恰好把$\mathcal{M}_{v}$分割为两个连通的子区域,
假设扩散张量是分片常数.
那么在假定\ref{ch2:A1}的条件下, 无论主单元和搜索策略如何选取, eLSW是唯一确定的.
\end{theorem}
{\bf 证明:\ }我们先证明对任意一个给定的主单元$K_{r_{0}}$, 无论搜索策略如何选取, eLSW是不变的.
这只要证明对于任意选取的单元$K_{i} \in \mathcal{M}_{v}$, 从$K_{r_0}$到$K_{i}$的过渡矩阵不变.
者只要验证引理\ref{ch2:thm:hpexcktekfrj}的条件.
记$\mathcal{M}_{v}$左右两侧的单元集合为$I_{L}$和$I_{R}$, 记两侧的扩散系数为$\Lambda _{L}$和$\Lambda _{R}$.
令$\bm n$表示间断面的单位法向量, 从左边指向右边.
考虑$\mathcal{M}_{v}$中的任意一个圈$K_{i_{0}},K_{i_{1}},\cdots ,K_{i_{m}},K_{i_{0}}$.
不失一般性, 我们假设$K_{i_{0}}\in I_{L}$. 根据命题\ref{ch2:eq:gradtransexp0}, 我们得到
\begin{equation}
\mathbb{T}_{i_{l},i_{l-1}} =
\begin{cases}
\mathbb{I}_{3}, & K_{i_{l}} \text{ 与 } K_{i_{l-1}}
\text{都落在 } I_{L} \text{ 或 } I_{R} \text{中},
\\
\mathbb{T}_{L,R}, & K_{i_{l-1}} \in I_{R}, K_{i_{l}} \in I_{L},
\\
\mathbb{T}_{R,L}, & K_{i_{l-1}} \in I_{L}, K_{i_{l}} \in I_{R},
\end{cases}
\end{equation}
其中
\begin{equation}
\mathbb{T}_{L,R} = \mathbb I_{3}+
\frac{ \bm{n} \bm{n}^{T} } {\bm{n}^{T} \Lambda _{L} \bm{n}} (\Lambda _{R}
- \Lambda _{L}),\quad \mathbb{T}_{R,L} = \mathbb I_{3}+
\frac{ \bm{n} \bm{n}^{T} } {\bm{n}^{T} \Lambda _{R} \bm{n}} (\Lambda _{L}
- \Lambda _{R}).
\end{equation}
根据命题\ref{ch2:eq:gradtransexp0}的第一个结论我们发现, $\mathbb{T}_{L,R}\mathbb{T}_{R,L} = \mathbb{I}_{3}$.
因此我们有
\begin{equation}
\mathbb{T}_{i_{0},i_{m}}\mathbb{T}_{i_{m},i_{m-1}} \cdots \mathbb{T}_{i_{2},i_{1}}
\mathbb{T}_{i_{1},i_{0}} = (\mathbb{T}_{L,R}\mathbb{T}_{R,L})\cdots (
\mathbb{T}_{L,R}\mathbb{T}_{R,L}) = \mathbb{I}_{3}.
\end{equation}
这里, $\mathbb{T}_{L,R}$和$\mathbb{T}_{R,L}$总是成对出现因为单元序列从$I_{L}$穿过间断面到达$I_{R}$后,
它必然再次从$I_{R}$穿过间断面到达$I_{L}$以到达$K_{i_{0}}$.
根据定理\ref{ch2:thm:hpexcktekfrj}, 我们推出$K_{r_0}$到$K_{i}$的过渡矩阵与搜索策略无关.
因此, 对于给定的主单元$K_{r_{0}}$, 无论采用何种搜索策略, eLSW是唯一确定的.

接着, 我们证明插值算法与主单元的选取无关.
我们考虑任一其他主单元$K_{\widetilde{r}_{0}}$,
从$K_{r_{0}}$到$K_{\widetilde{r}_{0}}$也存在一条路径, 根据这个路径可以计算出$K_{\widetilde{r}_{0}}$到$K_{r_{0}}$的过渡矩阵.
那么我们有
\begin{equation}
\mathbb T_{i,\widetilde{r}_{0}} = \mathbb T_{i,r_{0}} \mathbb T_{r_{0},
\widetilde{r}_{0}} := \mathbb T_{i,r_{0}} \widetilde{\mathbb{T}},
\quad i=1,2,\cdots ,N_{C},
\end{equation}
并且权重为
\begin{equation}
\label{ch2:eq:weighteq}
(\widetilde{\omega}_{1}, \cdots , \widetilde{\omega}_{N_{C}}) = (1,0,0,0)
(\widetilde{\mathbb{Q}}_{v}^{T}\widetilde{\mathbb{Q}}_{v})^{-1}
\widetilde{\mathbb{Q}}_{v}^{T},
\end{equation}
其中
\begin{equation}
\widetilde{\mathbb{Q}}_{v} =
\begin{bmatrix}
1 & (\bm{x}_{K_{1}} - \bm{x}_{v})^{T}\mathbb{T}_{1,r_{0}}
\widetilde{\mathbb{T}}
\\
\vdots & \vdots
\\
1 & (\bm{x}_{K_{N_{C}}} - \bm{x}_{v})^{T}\mathbb{T}_{N_{C},r_{0}}
\widetilde{\mathbb{T}}
\end{bmatrix}
= \mathbb Q_{v}
\begin{bmatrix}
1 &
\\
& \widetilde{\mathbb{T}}
\end{bmatrix}
.
\end{equation}
注意到$\widetilde{\mathbb{T}}$是可逆的,
通过直接的代数计算可得
\begin{align}
\label{ch2:eq:weightrel}
&(1,0,0,0) (\widetilde{\mathbb{Q}}_{v}^{T}\widetilde{\mathbb{Q}}_{v})^{-1}
\widetilde{\mathbb{Q}}_{v}^{T}
\nonumber \\
& \quad  = (1,0,0,0) \left (
\begin{bmatrix}
1 &
\\
& \widetilde{\mathbb{T}}^{T}
\end{bmatrix} \mathbb{Q}_{v}^{T} \mathbb{Q}_{v}
\begin{bmatrix}
1 &
\\
& \widetilde{\mathbb{T}}
\end{bmatrix}\right )^{-1}
\begin{bmatrix}
1 &
\\
& \widetilde{\mathbb{T}}^{T}
\end{bmatrix}\mathbb{Q}_{v}^{T}
\nonumber
\\
&\quad  = (1,0,0,0)
\begin{bmatrix}
1 &
\\
& \widetilde{\mathbb{T}}
\end{bmatrix}^{-1} (\mathbb{Q}_{v}^{T}\mathbb{Q}_{v})^{-1}
\begin{bmatrix}
1 &
\\
& \widetilde{\mathbb{T}}^{T}
\end{bmatrix}^{-1}
\begin{bmatrix}
1 &
\\
& \widetilde{\mathbb{T}}^{T}
\end{bmatrix}\mathbb{Q}_{v}^{T}
\nonumber
\\
&\quad = (1,0,0,0)
\begin{bmatrix}
1 &
\\
& \widetilde{\mathbb{T}}^{-1}
\end{bmatrix} (\mathbb{Q}_{v}^{T}\mathbb{Q}_{v})^{-1} \mathbb{Q}_{v}^{T}
\nonumber
\\
&\quad = (1,0,0,0) (\mathbb{Q}_{v}^{T}\mathbb{Q}_{v})^{-1} \mathbb{Q}_{v}^{T}.
\end{align}
由\eqref{ch2:eq:weighteq}和\eqref{ch2:eq:weightrel}可以推出无论主单元如何选取, eLSW是唯一确定的. \qed

对于一般的情形, 由eLSW给出的权重可能与主单元的选取和搜索路径有关.
% vim:ts=4:sw=4
