Moving Mesh Method and Its Application

This page is under construction.

2D Time Evolved Numerical Examples 2D Static Problem moving_mesh_3d_time_evolved_e moving_mesh_recent_work_e

Moving Mesh Method and Its Application

Co-Workers:

Introduction

移动网格方法是网格自适应方法的一种。网格自适应现在主要有三种方法:为

移动网格方法的框架是选取一个参考区域,构造参考区域和实际问题的物理区域 之间的某种映射,将参考区域上的均匀网格映射成为物理区域上的非均匀网格。 一个被称为控制函数的量,作为我们构造这个区域间映射的参量,从而,通过调 整控制函数,我们就可以操纵网格。

移动网格方法中的一个主要问题就是网格会发生缠绕。我们研究的方法主要是使 用调和映射来构造网格映射,调和映射的优秀性质保证了网格在理论上的存在唯 一性。进一步我们引进一个迭代过程来实现调和映射,消除数值原因可能造成的 网格缠绕。网格移动的过程和方程求解完全分开。

对于解函数从旧网格到新网格上的更新,我们构造了一个来源于解法的全局插值 方法,使得网格的移动和方程原有的求解格式完美配合,但是在实现上又是完全 分开的,有利于代码重用,使得我们能够开发出来一个通用的网格移动程序包。 这样的整体插值方案可以看出事实上是求解了一个人工对流方程,在不可压流体 和间断Gerlerkin方法中的运用得到了新颖的结果。

由于很多问题的奇异性往往出现在边界上,所以边界上的网格的移动是一个比较 重要的问题。以前的方法常常是将边界的网格和内部的网格分开来处理。我们提 出了一个新的能量泛函,在极小化这个能量泛函的情况下,构造了一个调和映射 的推广,使用这个映射来构造参考区域和物理区域之间的网格变换,使得边界上 的网格和内部网格耦合移动,网格的质量得到进一步的提高,并能够顺利使用到 三维的情况。

基于调和映射的移动网格方法

下面我们介绍基于调和映射的移动网格方法,我们简单的只是考虑内部的网格点 进行移动,在后面的部分我们要将这个方法扩展到边界上的网格和内部网格点 耦合移动的情况。

一般的算法框架

我们的算法的基本框架如下:假设我们求解一个发展偏微分方程

\[ u_t = L(u),\qquad\mathrm{in\ }\Omega \]

加上合适的初值和边值。假设对于这个问题已经有了一个现成的求解格式为

\[ u_h^{(n+1)} = u_h^{(n)} + \Delta t L_h(u_h^{(n)}) \]

我们将不考虑此问题的求解方法的细节,仅仅是对其求解方法做一些必要的假定,并给出一些记号 以便与网格移动部分的算法相结合。问题的解${\vec u}$所处的空间记为$V$,求解方法将在有限维 空间$V_h$中来对$V$进行逼近,空间$V_h$依赖于区域$\Omega$(我们假设这是一个多面体) 上的一个剖分,也就是说, 给定区域$\Omega$上满足某些特定要求的一个剖分,空间$V_h$就可以根据事先确定的方式唯一 的给出。对于我们的数值例子具体的来说,需要先给定一个所谓的“逻辑区域”$\Omega_c$(对应 于“逻辑区域”的名称,我们将$\Omega$叫做“物理区域”),在 $\Omega_c$上有一个确定的单纯形剖分(我们用到的剖分需要能够使节点自由移动而不破坏网格 的结构,象单纯形剖分,二维的任意四边形剖分,三维的任意六面体剖分,对于象矩形的剖分这样的 节点不具有自由度的剖分,就目前我们看来,是不能进行网格移动自适应的)记为${\mathcal T}_c$, 其节点记为$\Xi^i_c$,单元 记为$E^j_c$,对于每个从区域$\Omega$$\Omega_c$的同胚$\xi$,我们可以得到物理区域 $\Omega$上的剖分${\mathcal T}$,以$X^i = \xi^{-1}(\Xi^i_c)$作为其节点,并且具有剖分 ${\mathcal T}_c$的节点间的拓扑关系。由于$\xi$是一个同胚,从而有$\det \nabla_x \xi > 0$, 于是我们可以保证${\mathcal T}$确实是给出了一个剖分。相对应的,我们把这两个区域上的两套 剖分分别叫做“逻辑剖分”和”物理剖分“。移动网格所要研究的就是给出一个比较恰当的同胚 $\xi$,来作为区域变换函数,从而得到计算区域上的逻辑剖分和物理区域上的物理剖分之间的一个 对应。我们将这个同胚离散为一个分片线性的映射(如果是二维上的任意四边形剖分,这将会是一个 分片双线性映射,对于三维的任意六面体剖分,则是一个分片的三线性映射,这个离散方式随着要求 和单元的变化可以做不同的选取,但至少要保证在单元的边界上能使单元保持形状,然后我们要求 这个映射必须是只依赖于节点的位置的,也就是说,如果给定所有的节点的位置,那么这个映射是 唯一确定的,因为至少在目前,我们的网格移动最终是要依靠节点的移动来实现的,是否有其他的 实现网格移动的途径,我们还没有考虑)。 由于物理网格${\mathcal T}$和区域之间的变换$\xi$将会依赖于时间$t$,我们在以后的讨论中会 将它们都加上一个脚标$t$,成为${\mathcal T}_t$$\xi_t$,表示是时刻$t$的物理网格和区域 变换,并用$X^i_t$表示${\mathcal T}_t$的节点。相应的,我们将时刻$t$的解空间$V_h$也记为 $V_{h,t}$。于是我们在这个格式的基础上加入移动网格的部分后整个求解的算法的轮廓如下:

调和映射

我们通过调和映射来构造区域之间的变换,这个想法在 Brackbill 和 Dvinsky.1 都有使用。所以我们先来介绍一下调和映射的概念。

调和映射(Harmonic Mapping)的理论在数学中是一个相对比较新的概念。1944年, Fuller 给出了调和映射的定义。直到1964年,Eell和Tompson's建立了调和映射的 奠基性理论工作以后,调和映射才在几何中得到了比较充分的重视。Hamilton, Schoen,Yau(丘成桐)等建立了比较完善的存在性和唯一性的结果。关于调和映 射的研究一方面是理论上的关于其存在性(Existence),唯一性(Uniqueness), 正则性(Regularity)的探讨,另一方面是关于调和映射在不同的数学领域中的应 用。我们只需要用到关于其存在性和物理意义的基本内容。由于这个概念首先来 自于 Rieman 几何学,我们需要用到一些几何的概念来描述调和映射的理论。给 定两个 $ n $ 维Rieman流形 $ \Omega $$ \Omega_c $ ,他 们上面关于局部坐标系(Local Coordinates) $ x^n $$ \xi^n $ 的 Rieman 度量分别为 $ G_{ij} $$ g_{ij} $ 。对给定的映射 $ \xi \in C^1(\Omega, \Omega_c) $ ,我们定义一个能量密度(Energy Density):

\[ e(\xi) = \displaystyle\frac{1}{2} G^{ij} g_{\alpha \beta}{\displaystyle\frac {\partial \xi^\alpha} {\partial x^i}}{\displaystyle\frac {\partial \xi^\beta} {\partial x^j}} \]

其中,我们引进标准求和约定(同一个指标如果同时在上标和下标中出现,则表 示对该指标从 $ 1 $$ n $ 进行求和)。从而,映射 $ \xi $ 的能量是能量密度的积分

\[ E(\xi) = \int_\Omega e(\xi) dx. \]

如果 $ \xi \in C^2 $ ,能量就小于无穷。如果 $ \xi $ 是能量泛函 的极小点,那么 $ \xi $ 就是调和映射。能量泛函的Euler-Lagrange方程是

\[ \Delta_{L-B} \xi^k + G^{ij} \Gamma^k_{\alpha \beta} {\displaystyle\frac {\partial \xi^\alpha} {\partial x^i}}{\displaystyle\frac {\partial \xi^\beta} {\partial x^j}}= 0 \]

其中, $ \Delta_{L-B} $ 是 Laplace-Beltrimi 算子, $ \Gamma^k_{\alpha \beta} $$ \Omega $ 上的第二类 Christoffel 符号。定理保证,如果

那么,对于任意的从 $ \Omega $$ \Omega_c $ 的同胚 $ \phi $ , 都存在唯一的一个调和映射 $ \xi $$ \Omega $$ \Omega_c $ 满足 $ \xi |_{\partial \Omega} = \phi |_{\partial \Omega} $ 。这是 在 Dirichlet 边界条件下的存在唯一性的结果。Hamilton 还给出了在 Neumann 边界条件 和混合边界条件下的存在唯一性结果。在我们的应用中,逻辑区域 $ \Omega_c $ 上的度量采用的就是 Euclid 度量,所以第一个条件自然是满足的,我们将逻辑区域选 为凸区域就是为了满足第二个条件。这导致我们只能够给出单连通区域上的数值例子, 对于多连通区域,只能够期望通过区域分解或者是其他特殊技巧来处理。

在 Eells 和 Thompson's 的研究中,给出了对任意给定的同胚,构造出收敛到调和 映射的同伦的方法,那就是通过解热传导方程

\[ \xi_t = \Delta_{L-B} \xi^k + G^{ij} \Gamma^k_{\alpha \beta} {\displaystyle\frac {\partial \xi^\alpha} {\partial x^i}}{\displaystyle\frac {\partial \xi^\beta} {\partial x^j}} \]

$ \xi|_{t=0}=\phi $ 作为初值。这个方法得到的同伦类将会一致的收敛到 调和映射,并且连同 $ \xi(\cdot,t) $ 的梯度也会一致的收敛。由于对于我们 的特殊情形,也就是 $ \Omega_c $ 上的度量是欧氏的情形, $ \Gamma^k_ {\alpha \beta} = 0 $ ,上面的 Euler 方程成为一个线性椭圆型方程,我们不 需要用到这个方法。

逻辑区域和逻辑网格

从最朴素的观点来看,我们当然会希望逻辑区域就是物理区域,但是由于实现过程中,如果物理区域 非凸,为了保证两个区域之间的调和映射的存在性,我们就需要选取和物理区域不一样的逻辑区域。 不同的区域将会引进一些几何度量上的差异带来的因素,但是调和映射本身会将这个因素的影响消除。

我们来讨论具体的实现方法。首先我们将物理区域$\Omega$上事先给定一个一致剖分${\mathcal T}$,它的 节点是$X^i$。在选定了逻辑区域$\Omega_c$以后,我们先确定在边界上的映射的情况。一般的, 我们选择的逻辑区域和物理区域有相同的边界结构,也就是说,对物理区域的每一个顶点,棱,和面 来说,逻辑区域的边界上都有相对应的元素,并且,这些元素之间的归属关系也都保持(但并非一定 要这样),从而我们可以方便的事先人工的给出边界上的映射。我们将这个边界上的映射记为给定 的一个同胚$\phi$在边界上的限制,从而通过解 Possion 方程组

\[ \begin{array}{rcl} \Delta \xi^k &=& 0 \\ \xi^k|_{\partial \Omega} &=& \phi^k|_{\partial \Omega} \end{array} \]

其中$1 \le k \le n$,我们就可以得到一个逻辑网格。这个方程的解将$\Omega$上的Euclid度量变成$\Omega_c$上 的诱导度量$\displaystyle\sum_{i=1}^n {\displaystyle\frac {\partial \xi^\alpha} {\partial x^i}} {\displaystyle\frac {\partial \xi^\beta} {\partial x^i}}y$。我们可以看到, 这个度量在逻辑区域上导致了一个非均匀的网格,但是这个网格在单元上具有将诱导度量平均化的 作用,所以,我们可以将逻辑区域上的逻辑网格看作为物理区域上的物理网格的一个代替品,而 不会有太大的偏差。通过对相同的物理区域,不同的逻辑区域上生成的逻辑网格的比较,我们可以看出, 逻辑区域 的选取对于逻辑网格平均化诱导度量的影响是非常小的。这个事实说明,我们对逻辑区域的选取 并不会使逻辑网格对物理区域上的物理网格的逼近程度受到很大的影响,从而可以比较自由的选择 逻辑区域。我们选取不同的逻辑区域进行的计算结果没有明显差别的事实也说明,逻辑区域的选取 并不会对计算的效果造成明显的影响。 Huang 对这个问题也有一些讨论,并有相似的 观点。

逻辑区域是凸区域的要求使得我们的方法的应用范围受到很多限制,因为在欧氏度量下,凸区域 只能是单连通区域。我们现在仅仅能够考虑使用区域分解方法来对付多连通区域,我们可以在那些 事先知道不会有大幅度的网格调整的位置将区域分割成几个单连通区域,然后在每个单连通区域上 使用我们现在的移动网格方法,但是需要事先知道问题的一些性质,并且在区域之间 的边界上会引进一些人工的因素,使得实现上比较麻烦一些。另一个可能的方法是在逻辑区域 上引进一个非欧度量,使得多连通区域的边界也是凸的,但是这样会导致 Euler 方程不能够化为 线性形式。

控制函数

控制函数(Monitor Function)是确定物理区域到计算区域的关键因素,通过选择控制函数,可以控制网格加密和稀疏化 的区域,网格的质量等关系到计算效果的性态。所谓控制函数,是在计算区域上给定的一个正定的 函数矩阵,在等分布原则的讨论中我们可以知道控制函数应该可以指示局部的计算的质量。现在, 我们事实上是要将物理区域上的度量用控制函数来构造,将物理区域上的度量矩阵取为控制函数的 逆。我们以后总是将控制函数记为$M=(M_{ij})$,而将物理区域上的度量记为$G=(G^{ij})=M^{-1}$。 由于在二维的情形,调和映射是比较特殊的,我们还要详细讨论。由于控制函数的概念由一个 函数扩展为一个矩阵,Cao,Huang和Russell在{Huang.6}中研究了网格加密的情况和控制函数的特征 向量、特征值之间的关系(二维情形,但是可以推广到高维的情况)。对于控制函数是一个函数乘以 一个单位矩阵的情形,事实上等价于是一个函数的情形,我们可以看到网格是在控制函数比较大的 区域被加密,在控制函数比较小的区域变得稀疏,在各个方向上的变化情况都是基本相同的。如果 控制函数是矩阵,并且特征值不相等,那么在不同的特征方向,网格的变化将是不同的。在特征值 大的方向,网格会比较的稠密,特征值小的方向上,网格比较稀疏,从而,从发展的观点来看,对于 特征值变大的方向,网格会加密,特征值变小的方向,网格会变稀疏。网格变化的速度和特征值 变化的速度是正相关的。

我们在选取控制函数的时候,一般的希望它仅仅依赖于解和物理区域上的坐标,也就是说,希望能够 具有形式$M=M({\vec u}, x)$。在这样的情况下,可以保证网格的求解过程是收敛的。在一些研究 中,有作者甚至将$M$取得和区域变换本身有关系,在这样的情况下,网格的收敛是没有理论的 保证的。

在以前的大部分研究中,控制函数被取为

\[ M = \sqrt{1 + \alpha |{\vec u}|^2 + \beta |\nabla {\vec u}|^2 + \gamma |\nabla^2 {\vec u}|^2} \]

这样的形式,其中$\alpha$$\beta$$\gamma$是正的参数。在一维情形下,如果$\alpha=0$$\beta=1$$\gamma=0$,这个控制函数将会导致弧长坐标系,这可能是对于一维问题最令人钟情 的自适应网格了。一般的来说,在函数值比较大,函数的梯度比较大,甚至是二次导数比较大的位置 将会是函数本身比较奇异,或者函数的变化比较大的地方,所以,这个形式的控制函数可以满足一大批 问题的需要。

我们尝试了使用后验误差估计来构造控制函数的方法,对于变分不等式,最优控制问题都获得了不错 的计算结果。

通过解构造出来的控制函数在解本身比较奇异的情况下,一般的也比较奇异,数值结果表明,对 控制函数进行磨光可以极大的提高计算的精度。事实上,磨光是为了保证网格在尺度的过度上比较 连续。1980年代的一些文献中,开始意识到磨光的重要性,并且有很多关于磨光方法的研究。这些 磨光方法都是一维的方法,对于高维的问题,尤其是对于有限元网格,不好直接推广使用。而且现在 看来,这些方法都没有普遍的意义,已经很少有人再使用,而且网格移动对磨光本身并没有太严格 的要求,仅仅是要求磨光能够保持控制函数的主要轮廓,单调性这样一些主要的性质,我们就不具体讨论 这些磨光的方法了。尽管调和映射本身也具有一定的磨光的效果,但我们还是需要对控制函数进行 一些磨光的操作。我们要求的磨光方法希望能够保持控制函数的一些主要特点,最好是易于实现, 就认为是比较合适的了。控制函数在离散的计算出来以后,常常是一个分片常数的函数,我们使用的 磨光方法是将它从分片常数的空间投影到分片线性的空间中,然后再插值到分片常数的空间中,反复 做这个操作就能够将控制函数有效的磨光。这个投影算子$\pi_h$在分片常数函数$f_h=f_i \chi^i$ 上实现方式为

\[ \pi_h (f_h)|_{X^i} := {\displaystyle\frac {\sum_{T^j: X^i {\mathrm{\ is\ the\ vertex\ of\ }} T^j} f_j |T^j|} {\sum_{T^j: X^i {\mathrm{\ is\ the\ vertex\ of\ }} T^j} |T^j|}} \]

其中,$|T^j|$表示单元$T^j$的体积。有结果表明,这个投影算子是依测度收敛的。插值算子 $\pi^{-1}_h$在分片线性函数$f_h=f_i \lambda^i$上的实现方式为

\[ \pi^{-1}_h (f_h)|_{T^i} := {\displaystyle\frac {\sum_{X^j: X^j {\mathrm{\ is\ the\ vertex\ of\ }} T^i} f_j} {\sum_{X^j: X^j {\mathrm{\ is\ the\ vertex\ of\ }} T^i} 1}} \]

其中,分母事实上就是空间的维数$n$加上1,整个表达式是单元的各个节点上的值的平均值。

初值的物理网格

我们在处理实际的发展问题时经常遇到这样的情况:问题的初值是个很奇异的函数,我们在初始的网格上 对这个初值进行逼近时就已经有了很大的误差,以致于得到很精确的解的期望成为泡影,比如对于一个 Riemann问题这样的间断初值,对初值的逼近就不会好,能够有一阶的精度就是极限了。从而, 我们希望对于这种情况,能够用非均匀的网格对初始值做一个比较好的逼近,使整个计算能够有一个 比较乐观的开始。由于我们现在已经有了一个物理区域上的均匀网格的替代品,也就是逻辑网格, 所以我们已经不需要最初给定的物理区域上的均匀网格了。我们仅仅考虑初值相当奇异时的处理方法, 对比较平淡的初值,不需要如此麻烦。我们主要的想法是利用一个线性同伦,将初值从零逐渐变化到 这个比较奇异的初值。将给定的初值记为${\vec u}_0$,我们考虑如下的问题:

\[ \begin{array} {rcl} {\vec u}_t &=& {\vec u}_0 \\ {\vec u}|_{\partial \Omega} &=& t \times {\vec u}_0|_{\partial \Omega} \\ {\vec u}|_{t=0} &=& {\vec 0} \end{array} \]

这是一个我们想要求解的问题的特例。它的初值是${\vec 0}$,当将这个问题求解到$t=1$时,就是原问题 的初始状态。我们可以将这个问题的初始物理网格取为均匀网格,然后将它求解到$t=1$, 并且在求解的过程中使用移动网格,就可以获得原问题的初值的物理网格。之所以要通过 这样一个同伦来实现这个过程,主要是因为对于比较奇异的初值,它的控制函数将也会比较奇异,我们 直接从均匀网格开始去获得很奇异的控制函数的网格,将会有比较大的网格移动步长,造成计算上 的一些困难,因为尽管理论上来说,解将会是个同胚,但是数值上,如果步长太大,还是可能造成网格的 缠绕,这正是我们要引进一个迭代过程来实现网格移动的原因。事实上我们可以通过如下的观点来看待这个同伦: 即对于从初值得到的控制函数$M$, 我们通过$t$从0变到1,逐步计算控制函数$t \times M$的网格,最后获得控制函数$M$的网格。 在解这个问题时的时间步长可以取地比较大,因为事实上我们不需要求解时间向前的方程(在时刻 $t$,直接代入$t \times u_0$作为解即可)。一般的来说,取时间步长为$0.1$左右就能够对付 非常奇异的初值了。

构造网格的移动向量场

假设已经得到时刻$t$解在物理网格${\mathcal T}_t$和网格上的解函数${\vec u}_h(t)$,我们 通过事先给定的方式计算出控制函数$M$,在网格${\mathcal T}_t$,求解椭圆型方程组

\[ \label{2.5.1} \begin{array} {rcl} {\displaystyle\frac {\partial}{\partial x^i}} \left( G^{ij} {\displaystyle\frac {\partial \xi^k} {\partial x^j}} \right) &=& 0 \\ \xi|_{\partial \Omega} &=& \xi_b \end{array} \]

在弱解空间$(H^1(\Omega))^n$中的解函数$\xi_h(t)$,事实上,我们首先得到的是物理网格的 节点$X^i_t$在调和映射下的像$\Xi^{i,*}_t$,我们得到它和逻辑网格之间的差别$\delta \Xi^{i,*} = \Xi^i - \Xi^{i,*}_t$,这是在逻辑网格上的一个分片线性的向量场$\delta \xi$,利用 逻辑网格到物理网格上的变换的一阶导数,我们将它插值为物理网格上的一个分片线性的向量场,

\[ \label{2.5.2} \delta x = \nabla_\xi x \delta \xi \]

其中,$\nabla_\xi x$在单元$T_c^i$上的值通过恒等式

\[ \label{2.5.3} \begin{array}{l} \left( X^{n_{T^i,2}}_t - X^{n_{T^i,1}}_t \cdots X^{n_{T^i,n+1}}_t - X^{n_{T^i,1}}_t \right) \nabla_\xi x |_{T_c^i} \\= \left( \Xi^{n_{T^i,2}}_t - \Xi^{n_{T^i,1}}_t \cdots \Xi^{n_{T^i,n+1}}_t - \Xi^{n_{T^i,1}}_t \right) \end{array} \]

得到,其中$n_{T^i,j}$表示$T^i$的第j个顶点的序号。从而,我们得到物理区域上的每个节点的 移动方向$\delta X^{i,*}$,我们将物理网格的节点更新为

\[ \label{2.5.4} X^i_t := X^i_t + \eta \delta X^{i,*} \]

其中,$\eta$是网格移动的步长,理论上来说,取为$1$是最佳的,但是为了避免网格的缠绕问题, 我们需要将它取得小一些。在我们的实际计算中,我们的网格移动步长的取法如下:对于单元$T^i$ 来说,存在一个正数$\eta^i \in (0,1]$,使得网格移动的步长为$\eta^i$时,单元$T^i$的定向不 发生改变,事实上,用$\Lambda^i$表示关于$\lambda$的代数方程

\[ \label{2.5.5} \det \left( X^{n_{T^i,1}}_t + \lambda \delta X^{n_{T^i,1},*} \ X^{n_{T^i,2}}_t + \lambda \delta X^{n_{T^i,2},*} \ \cdots \ X^{n_{T^i,n+1}}_t + \lambda \delta X^{n_{T^i,n+1},*} \right) = 0 \]

正解的集合,那么$\eta^i = \min \{\Lambda^i \cup \{1\}\}$。然后我们取$\eta = \lambda \min_{T^i} \eta^i, \lambda \in (0,1)$作为网格移动的步长, 在前面乘以一个$\lambda$是为了避免数值原因引起的网格缠绕,我们在计算中取$\lambda = \displaystyle\frac{1}{2}$。 我们是通过看$\delta \Xi^{i,*}$是否已经足够小来判断网格是否已经足够好。

如果我们使用有限差分法,可以通过等式

\[\label{2.5.6} \begin{array}{rcl} - {\displaystyle\frac {\partial x^l} {\partial \mu}} &=& {\displaystyle\frac {\partial \xi^k} {\partial \mu}} {\displaystyle\frac {\partial x^l} {\partial \xi^k}} \\ &=& {\displaystyle\frac {\partial}{\partial x^i}} G^{ij} {\displaystyle\frac {\partial \xi^k} {\partial x^j}} {\displaystyle\frac {\partial x^l} {\partial \xi^k}} + G^{ij} {\displaystyle\frac {\partial^2 \xi^k} {\partial x^i \partial x^j}} {\displaystyle\frac {\partial x^l} {\partial \xi^k}} \\ &=& {\displaystyle\frac {\partial}{\partial x^i}} G^{ij} \delta^l_j - G^{ij} {\displaystyle\frac {\partial \xi^k} {\partial x^\beta}} {\displaystyle\frac {\partial^2 x^\beta} {\partial \xi^\gamma \partial \xi^\delta}} {\displaystyle\frac {\partial \xi^\gamma} {\partial x^i}} {\displaystyle\frac {\partial \xi^\delta} {\partial x^j}} {\displaystyle\frac {\partial x^l} {\partial \xi^k}} \\ &=& {\displaystyle\frac {\partial}{\partial x^i}} G^{il} - G^{ij} {\displaystyle\frac {\partial^2 x^\beta} {\partial \xi^\gamma \partial \xi^\delta}} {\displaystyle\frac {\partial \xi^\gamma} {\partial x^i}} {\displaystyle\frac {\partial \xi^\delta} {\partial x^j}} \delta^l_\beta \\ &=& {\displaystyle\frac {\partial} {\partial x^i}} G^{il} - G^{ij} {\displaystyle\frac {\partial^2 x^l} {\partial \xi^\gamma \partial \xi^\delta}} {\displaystyle\frac {\partial \xi^\gamma} {\partial x^i}} {\displaystyle\frac {\partial \xi^\delta} {\partial x^j}} \end{array} \]

来计算网格移动的向量场,这其中需要用到恒等式

\[ {\displaystyle\frac {\partial^2 \xi^k} {\partial x^i \partial x^j}} = - {\displaystyle\frac {\partial \xi^k} {\partial x^\beta}} {\displaystyle\frac {\partial^2 x^\beta} {\partial \xi^\gamma \partial \xi^\delta}} {\displaystyle\frac {\partial \xi^\gamma} {\partial x^i}} {\displaystyle\frac {\partial \xi^\delta} {\partial x^j}}. \]

这个形式,对于差分格式是比较方便的。当然,这个表达式也可以用于有限元方法计算网格 移动的方向。令$ {\tilde G}^{\gamma \delta} = G^{ij} {\displaystyle\frac {\partial \xi^\gamma} {\partial x^i}} {\displaystyle\frac {\partial \xi^\delta} {\partial x^j}}$,有

\[\label{2.5.7} {\displaystyle\frac {\partial x^l} {\partial \mu}}= {\tilde G}^{\gamma \delta} {\displaystyle\frac {\partial^2 x^l} {\partial \xi^\gamma \partial \xi^\delta}} - {\displaystyle\frac {\partial}{\partial x^i}} G^{il}, \]

写成弱形式

\[\label{2.5.8} \begin{array}{rl} & \left. \displaystyle\int_{\Omega_c} {\displaystyle\frac {\partial x^l} {\partial \mu}} v d\xi \right. \\ =& \left. \displaystyle\int_{\Omega_c} \left\{{\tilde G}^{\gamma \delta} {\displaystyle\frac {\partial^2 x^l} {\partial \xi^\gamma \partial \xi^\delta}} - {\displaystyle\frac {\partial}{\partial x^i}} G^{il} \right\} v d\xi \right. \\ =& - \left. \displaystyle\int_{\Omega_c} \left\{{\tilde G}^{\gamma \delta} {\displaystyle\frac {\partial x^l} {\partial \xi^\gamma}} {\displaystyle\frac {\partial v} {\partial \xi^\delta}} - G^{il} {\displaystyle\frac {\partial \xi^k} {\partial x^i}} {\displaystyle\frac {\partial v} {\partial \xi^k}} \right\} d\xi, \right. \\ \end{array} \]

其中检验函数$v \in H^1_0(\Omega_c)$。离散求解就得到网格节点移动的方向。这个格式的 好处在于求解的系数矩阵是逻辑网格上的质量矩阵,如果使用预优迭代法求解的话,只需要构造一次 预优矩阵,可以节约很多的计算量。如果进行一次质量集中,更是可以完全避免求解线性方程组。

将解函数更新到新网格上

假设我们现在有一个旧的网格$ {\mathcal T}_t $及其上的解函数$ u_h $,通过上面的操作又得到了 一个新的网格$ {\mathcal T}^*_t $,我们试图获得解函数在新网格上的表示。目前,我们还仅仅考虑 一个一般的插值方法,并没有将解函数限制在某个具有特殊要求的空间中。但是这样的问题是需要 考虑的,比如对于不可压流体的速度,需要满足连续性方程,或者是守恒律方程,解需要满足一定 的守恒条件, 关于这个问题,我们正在进行研究。这个插值的问题,是一直困扰移动网格方法的 问题。一般的多项式插值已经被考虑过了,线性的插值方法总是带来一个系统误差,事实上是解函数 被逐渐的抹平了,但是高阶的插值会带来振动。我们现在使用的方法主要有以下特点:(1)保持 解函数的$ L^2 $范数;(2)不会带来振动。我们主要的想法是将网格的移动看作为一个人工的流动, 而在这个流动之下,保持解函数不变。这样,事实上是引进了从旧网格到新网格上的一个同伦,我们 跟随这个同伦,将解函数逐渐过渡过来。用基函数将$ u_h $表示出来为$ u_h = u_i \phi^i $$ \phi^i $$ V_{h,t} $的基函数。两个网格之间的不同可以表示为分片线性的向量场$ \delta x = \delta X_i \lambda^i $$ \lambda^i $是线性基函数。我们使用节点之间的线性变化

\[\label{2.6.1} X^{i}(\tau)=X^i_t + \tau (X^{i,*}_t - X^i_t),\tau \in [0,1] \]

获得这个同伦。伴随着节点位置的变化,基函数也将发生相应的变化,成为$ \phi^i(\tau) $,由于 基函数完全被网格所确定,因此可以将它记为$ \phi^i(x(\tau)) $,其中

\[\label{2.6.2} x(\tau)= x_0 + \tau (x_1 - x_0),\tau \in [0,1] \]

其中$ x_0 $是物理区域上的恒等映射,$ x_1 $将物理区域中旧网格单元$ T^i $上的点映射到新网格 的相应单元上,并且保持点的面积坐标,于是$ x_0 - x_1 $恰好是网格之间的差异向量场$ \delta x $。 从而,在同伦路径上,我们有一系列的$ u_h $的近似 $ u_h(\tau) = u_i(\tau) \phi^i(\tau) $,为了使变换以后的$ u_h $的表示形式能够尽量保持不变, 我们要求$ u_h(\tau) $在离散空间里的弱意义下满足

\[\label{2.6.3} {\displaystyle\frac {\partial u_h} {\partial \tau}} = 0 \]

也就是

\[\label{2.6.4} \begin{array}{rcl} 0 &=& \displaystyle\int_\Omega {\displaystyle\frac {\partial u_h} {\partial \tau}} \omega dx \\ &=& \displaystyle\int_\Omega \left\{ {\displaystyle\frac {\partial u_i} {\partial \tau}} \phi^i + u_i {\displaystyle\frac {\partial \phi^i} {\partial \tau}} \right\} \omega dx \end{array} \]

其中$ \omega $是检验函数,

\[\label{2.6.5} \begin{array}{rcl} {\displaystyle\frac {\partial \phi^i} {\partial \tau}} &=& \nabla \phi^i \cdot {\frac {d x} {d\tau}} \\ &=& \nabla \phi^i \cdot (x_1(x) - x_0(x)) \\ &=& - \nabla \phi^i \cdot \delta x \end{array} \]

于是我们最后需要解方程

\[\label{2.6.6} \int_\Omega {\displaystyle\frac {\partial u_i} {\partial \tau}} \phi^i \omega dx = \int_\Omega u_i \nabla \phi^i \cdot \delta x \omega dx \]

我们来分析一下这个方程的求解本质上的意义。在网格的发生移动时,我们如果保持 节点的函数值,那么我们就引进了一个变化量

\[\label{2.6.7} \begin{array}{rcl} \dot{u}_h &:=& u_i {\displaystyle\frac {\partial \phi^i} {\partial \tau}}\\ &=& - u_i \nabla \phi^i \cdot \delta x \end{array} \]

将这个变化量在$ V_{h,t} $中的部分丢弃,保留下和$ V_{h,t} $垂直的部分。(2.6.6})就是将 $ u_h $的变化量取为$ \dot{u}_h $中和$ V_{h,t} $垂直的部分。

带边界的移动网格方法

我们常常看见问题奇异的部分出现区域的边界,因此,实际中非常有需要将边界的网格进行自适应 调整,甚至可以说,对于有些问题,如果不对边界上的网格进行调整,计算的效果几乎完全得不到改善. 但是,现在关于将边界的网格进行调整的方法基本上只有一个,而且仅仅是关于二维的 问题才有算例,那就是将边界当成一维的情况进行处理。一般的,可以在边界给定一个解析函数 作为控制函数(可以依赖时间)。Cao,Huang和Russell({Huang.2})进行了将区域上的控制函数,作为二维 的一个度量,限制在边界上作为边界上的控制函数,是一个一维的度量的方法,对一些算例给出 了比较好的结果。我们发展了一种新的将内部网格移动和边界网格移动相配合的框架,并且和对 边界上的网格移动当成一维问题的方法进行了比较。根据作者所获得的资料看,我们提出的这个新的 框架是迄今能够得到的第一个将边界和内部网格移动进行整体考虑的方法。在本章,我们只考虑 二维的问题,如果没有特别的说明,我们假设我们提到的问题的区域都是二维的,本章的主要内容 在{Li.5}中。

什么是最好的网格?

假设我们的物理区域是单连通多边形,逻辑区域是一个相对应的单连通的凸多边形,具有相同个数 的顶点。那么一个最好的网格,也就是从物理区域到逻辑区域的一个变换应该具备什么条件呢?首先, 这个变换必须能够保持区域的几何特性,也就是说,必须将顶点映射到顶点,将边映射到边。许多 实际的问题本身的要求和计算的效果都希望具有这样的性质。另外,这个变换必须能够在某个函数空间里 极小化能量泛函。于是,我们需要选择一个和前面的方法不同的空间来极小化能量泛函,获得我们 想要的区域变换。现在我们能够进行选择的自由的范围是边界上的节点的映射方式,我们现在采用 的方法是将泛函极小的函数空间扩大到一个比较合适的范围,为了能够得到更好的网格,在保证唯一 性的前提下,当然是这个空间越大越好,所以我们仅仅要求:

可以看出,这两个条件都是必要条件。第一个条件是为了保持几何特性,而第二个条件是为了 强制的避免产生边界网格上的网格缠绕。同时,我们将会看到,在合理的将这两个条件具体化 了以后,这样的条件也能够唯一的确定物理区域到逻辑区域的变换。

化归为优化问题

我们现在将前面的论述具体化。首先,用$ \Gamma_i $$ \Gamma_{c,i} $分别表示 物理区域和逻辑区域相应的边,我们来考虑如下的从$ \partial \Omega $$ \partial \Omega_c $ 的映射

\[ K = \{\xi_b \in C^0|\xi_b:\partial \Omega \rightarrow \partial \Omega_c,\xi_b(\Gamma_i) =\Gamma_{c,i},\mathrm{on\ every\ }\Gamma_i\mathrm{,\ it\ is\ segmentwise\ linear}\} \]

明显的$ K $是一个开集,它可以表示为可列个闭集的并集

\[ K = \bigcup_{M=1}^\infty K_M \]

其中,

\[ K_M = \{\xi_b \in K | {\displaystyle\frac 1 M} \leq \mathrm{ess\ inf} \xi^{'}_b,\mathrm{ess\ sup}\xi^{'}_b \leq M\}. \]

根据Eells和Thompson's的结果,Dirichlet边界条件下的从物理区域到逻辑区域的调和映射是存在 唯一的,我们将边界条件为$ \xi_b \in K_M $的唯一的调和映射记为$ \xi = P(\xi_b) $,于是考虑 优化问题

\[ \label{3.2.1} \begin{array}{rl} \min & E(P(\xi_b))\\ s.t. & \xi_b \in K_M \end{array} \]

由于能量泛函$ E(\cdot) $是凸的,对$ \forall \xi^{(1)}_b, \xi^{(2)}_b \in K_M $,我们有

\[ \begin{array}{rcl} \displaystyle\frac{1}{2} \left\{E(P(\xi^{(1)}_b)) + E(P(\xi^{(2)}_b)) \right\}& \ge & E\left(\displaystyle\frac{1}{2} \left\{P(\xi^{(1)}_b) + P(\xi^{(2)}_b) \right\}\right) \\ & \ge & E\left(P\left(\displaystyle\frac{1}{2} (\xi^{(1)}_b + \xi^{(2)}_b)\right)\right) \end{array} \]

易见,$ \displaystyle\frac{1}{2} (\xi^{(1)}_b + \xi^{(2)}_b) \in K_M $,从而,泛函在$ E(P(\cdot)) $$ K_M $ 中也是凸的,再由于$ K_M $是闭集,可知优化问题(3.2.1})存在唯一解。我们将算子$ P $表示为 一个约束,问题(3.2.1})具有如下的形式

\[ \label{3.2.2} \begin{array} {rl} \min & \displaystyle\sum_k \displaystyle\int_\Omega G^{ij} {\displaystyle\frac {\partial {\xi^k}} {\partial {x^i}}} {\displaystyle\frac {\partial {\xi^k}} {\partial {x^j}}} dx \\ [4mm] \mathrm{s.t.} & \xi_b \in K_M \end{array} \]

假设单元的尺度为$ h $,机器的精度为$ \epsilon $,那么,我们可以将$ M $取为$ {\displaystyle\frac h {(1+\delta) \epsilon}} $,其中$ \delta $是一个给定的小正整数。这是我们在给定的机器 精度下能够获得的最好结果了。

为了能够有效的求解这个优化问题,我们需要详细分析约束的性质。第一个约束和第二个约束明显 是线性等式约束,但是第三个约束比较复杂一些,首先,它要求将物理区域的某条边映射到逻辑区域 的某条边所在的直线上,这是一个线性等式约束,其次,它要求这个直线到直线的映射的导数在 某个给定的范围内,这是一个线性不等式约束。这个优化问题的非线性来源于这个线性不等式约束。 需要说明的是,如果不选定一个$ M $,将问题的解集限制在$ K_M $中的话,就不能够保证解在 $ K $中。即使物理区域上的度量是单位度量,如果区域不是凸的,解就可能不是一个同胚。 但根据我们的经验,如果物理区域是凸集的话,控制函数又不是非常奇异的话,非线性约束 (事实上可以化为线性不等式约束)将不是积极约束,从而这个优化问题将转化为一个线性方程组的求解 问题。尽管这个优化问题是一个标准的二次规划问题,有很多针对这个问题的现成的优化算法, 但由于我们对求解这个优化问题的效率有相当的要求,根据我们的数值实验,这些现成的算法 并不能满足我们在 效率上的要求,我们将只给出不等式约束不是积极约束的算例。由于这个优化问题是一个边界控制 问题,正是我们目前所感兴趣的问题之一,我们现在正在研究该问题的理论和算法,希望能够发展 一个针对这类特殊问题的,比一般的二次规划算法更好的算法。在我们给出的算例中,为了使 不等式约束是不积极的约束,我们将物理区域取为凸区域。事实上,即使物理区域是凸区域,也不能 确保不等式约束不是积极约束,但是对控制函数的选择范围应该是相当的广泛的,在我们的数值 例子中,控制函数已经比较奇异,却没有出现不等式约束是积极约束的情况。

优化问题的离散与求解

尽管最后我们的算例只是考虑不等式约束不积极情况下的求解,我们还是给出具有不等式约束的 离散形式。期望能够找到有效的方法来求解这个优化问题。我们先在有不等式约束的情况下,对 上面给出的优化问题进行离散,然后摈弃不等式约束,用引进Lagrange乘子 的方法将问题化为线性方程组求解。如同不考虑边界的情况,我们在线性的单纯形元上来离散这个 优化问题。为了方便起见,我们将内部节点的编号排在前面,为$ 1 $$ N_{inner} $,将边界节点 排在后面,为$ N_{inner}+1 $$ N $。首先,目标被离散为

\[\label{3.3.1} \sum_k \int_\Omega G^{ij} {\displaystyle\frac {\partial {\lambda^\alpha}} {\partial {x^i}}} {\displaystyle\frac {\partial {\lambda^\beta}} {\partial {x^j}}} dx \xi^k_\alpha \xi^k_\beta \]

对于边界上的约束,我们将它分为两个部分。一个是对一个边界上的节点$ X^i $来说,它被映射到了 一条给定的直线上,这是一个线性约束,为

\[\label{3.3.4} \Xi^i \cdot {\mathbf n}^i = b^i \]

其中,$ {\mathbf n}^i $是逻辑区域的边界在某条边上的法向,$ b^i $是一个事先确定的数,事实上 $ {\mathbf n}^i $$ b^i $共同唯一的确定了$ X^i $将要映到的这条边的几何状态,由于我们事先 就确定了$ X^i $将要映到哪条边上,所以$ {\mathbf n}^i $$ b^i $是已知的。另一个部分是关于边 界上的相邻的结点之间的距离的约束,对于边界上一对相邻的节点$ X^i $$ X^j $,我们要求它们 之间的距离既不能太大,也不能太小,从而这个约束是

\[\label{3.3.5} {\displaystyle\frac 1 M} \le {\displaystyle\frac {| \Xi^i - \Xi^j |} {| X^i - X^j|}} \le M \]

通过一些处理,这个约束可以化为线性的不等式约束。用矩阵形式将上述的离散表示出来,令

\[ H = \left(\int_\Omega G^{ij} {\displaystyle\frac {\partial {\lambda^\alpha}} {\partial {x^i}}} {\displaystyle\frac {\partial {\lambda^\beta}} {\partial {x^j}}} dx \right)_{\begin{array}{c} 1 \leq \alpha \leq N\\ 1 \leq \beta \leq N \end{array}} \]

$ X_{inner} $$ X_{bound} $$ \Xi_{inner} $$ \Xi_{bound} $分别表示物理区域和 逻辑区域,内部和边界上的节点的坐标排成的向量,则目标的矩阵表示为

\[ \left(\begin{array}{cc} \Xi^{1,T} & \Xi^{2,T} \end{array}\right) \left(\begin{array}{cc} H & 0 \\ 0 & H \end{array} \right)\left(\begin{array}{c} \Xi^1 \\ \Xi^2 \end{array}\right), \]

线性约束中的等式部分具有形式

\[ \left(\begin{array}{cc} A_1 & A_2 \end{array}\right) \left(\begin{array}{c} \Xi^1_{bound} \\ \Xi^2_{bound} \end{array}\right) = b, \]

不等式部分具有形式

\[ \left(\begin{array}{cc} B_1 & B_2 \end{array}\right) \left(\begin{array}{c} \Xi^1_{bound} \\ \Xi^2_{bound} \end{array}\right) \ge c, \]

这个不等式部分具有线性形式是二维问题的独有结果,对于三维的问题这个约束不可能化为 线性形式,这是我们只宣称在二维获得结果的原因。下面,我们假设这个不等式约束不是 积极约束,于是通过引进Lagrange乘子,我们可以将这个优化问题化为一个解线性方程组 的问题

\[\label{3.3.6} \left(\begin{array}{ccccc} H_{11} & H_{12} & 0 & 0 & 0 \\ H_{21} & H_{22} & 0 & 0 & A'_1 \\ 0 & 0 & H_{11} & H_{12} & 0 \\ 0 & 0 & H_{21} & H_{22} & A'_2 \\ 0 & A_1 & 0 & A_2 & 0 \end{array}\right) \left(\begin{array}{c} \Xi^1_{inner} \\ \Xi^1_{bound} \\ \Xi^2_{inner} \\ \Xi^2_{bound} \\ \lambda_3 \end{array}\right) = \left(\begin{array}{c} 0 \\ 0 \\ 0 \\ 0 \\ b \end{array}\right) \]

我们看到,由于最主要的非零元素都集中在矩阵$ H_{11} $中,从而,我们 可以采用迭代法来比较有效的求解这个方程组。如果仅仅是用抛弃不等式约束来求解的情形, 这个方法是可以被推广到三维的。

构造逻辑网格

和边界给定固定的映射方式有所不同,我们现在在构造初始的逻辑网格的时候也不能简单的给定 边界上的映射方式,然后对内部结点通过求解Possion方程组得到。为了能够最大限度取消由于 物理区域和逻辑区域的形状不同而带来的几何因素对网格的影响,我们最终是采用求解 优化问题

\[\label{3.4.1} \begin{array}{rl} \min & \displaystyle\sum_k \displaystyle\int_\Omega \sum_i \left( {\displaystyle\frac {\partial \xi^k} {\partial x^i}} \right)^2 dx \\ s.t. & \xi_b \in K_M \end{array} \]

来得到。在我们的算例中,我们由于只能将物理区域取为凸区域,并将逻辑区域取为和物理区域 相同,因此没有将这个方案实现,但是我们给出了一个例子来看这样的构造方式和边界上是给定 的映射的方式给出的网格有什么不一样。这个优化问题的离散和(3.2.2})相似。

几点技术细节

除去上面所讨论的内容,这个关于边界网格移动的方法和仅仅移动内部节点的方法是基本一致的, 例如从逻辑区域上的网格移动方向构造物理区域上的网格移动方向,将解函数从旧网格上更新到 新网格上,我们都采用了相同的方法。下面讨论的是一些不同的具体细节。

边界上网格点的移动:和仅仅移动内部的节点不同,我们现在要移动边界上的节点。尽管 在逻辑区域上,网格的移动方向是沿着边界的(事实上,由于数值误差的原因,也不是严格的沿着 边界的方向的),但是将这个移动方向插值到了物理区域上时,物理 区域上的网格移动方向可能并不是沿着边界的。因此为了保证边界上的节点被移动以后,还在边界 上,我们需要将物理区域上的网格移动方向在边界上的这些值向边界上作一个投影。

边界上不等式约束的处理:不等式约束本来具有(3.3.5})的形式,但是由于我们事先确定 了边的映射方式,于是我们根据边界映射的方式,首先可以确定相邻的两个点$ X_1 = (x_1, y_1) $, $ X_2 = (x_2,y_2) $的像在边$ V_1(\Omega_c)-V_2(\Omega_c) $上的顺序 是$ \Xi_1 = (\xi_1,\eta_1) $比较靠近顶点$ V_1(\Omega_c) $$ \Xi_2 = (\xi_2,\eta_2) $ 比较靠近顶点$ V_2(\Omega_c) $,于是我们可以确定有$ \xi_2 - \xi_1 > 0, \eta_2 - \eta_1 < 0 $,再通过考虑边$ V_1(\Omega_c)-V_2(\Omega_c) $的倾斜度,比如说可 以保证$ \alpha = {\displaystyle\frac {|\xi_2 - \xi_1|} {|\eta_2 - \eta_1|}} \ge 1 $,那 么我们就选取$ \xi $作为方向,将这个边界段上的约束写为

\[ {\displaystyle\frac 1 M} \le {\displaystyle\frac {\sqrt {1 + \alpha^{-2}}} {|X_1 - X_2|}} (\xi_2 - \xi_1) \le M. \]

边界作为一维问题的处理方法

如同我们在前面所提到,以前的方法都是将边界上的网格的移动作为一个一维的问题来处理,我们 来看一下这样的处理方式的实现方式,并在后面给出了这个方法的数值例子。我们没有考虑在边界 上按照事先给定的解析函数进行移动的方法(那实在是太原始了),只是考虑了将边界上通过内部 的控制函数的投影给出边界上的控制函数的方法。我们将会看到这样的方法对于一部分的问题的 效果还是比较好的,事实上,如果问题的本身使得控制函数作为度量投影到了边界上以后,和边界 上应该给的度量函数大致一致的话,这个方法就奏效了,如果问题本身不具有这样的特性,这个方法 甚至会给出比边界上什么都不做更差劲的结果。一维的问题和高维的情况不同,不需要迭代,我们 就可以给出满足等分布原则的网格,在一维的情形下,求解Possion方程

\[\label{3.6.1} {\displaystyle\frac {\partial} {\partial x}}\left({\displaystyle\frac 1 M} {\displaystyle\frac {\partial \xi} {\partial x}}\right) = 0 \]

边值为$ \xi(x_0)=\xi_0 $, $ \xi(x_1)=\xi_1 $,就是直接寻找等分布点

\[ x_0 = X_0 < X_1 < \cdots < X_{N-1} < X_N = x_1 \]

使得$ \displaystyle\int_{X_i}^{X_{i+1}} M dx = {\displaystyle\frac 1 N} \displaystyle\int_{x_0}^{x_1} M dx, 0 \le i < N $。因此,对于将边界作为 一维的方法,可以直接得到边界点的分布状况,然后就可以使用我们前面的方法调整内部节点的分布。 从而,这个方法可以改进的方面就是边界上的控制函数如何通过内部的控制函数投影得到。我们看到 至少有两个方案可以选择:一个是将控制函数的解析表达式投影到边界上,得到边界上的控制函数的 解析表达式,然后在计算时使用这个表达式计算控制函数的值;另一个方案是将控制函数在边界单元 上计算出来的值投影到单元位于边界的边上,作为边界上的控制函数的值。我们比较倾向于第二种 方案,因为它的计算用到了解在内部节点上的信息,蕴涵着一定的边界和内部耦合的因素,而第一 种方案仅仅根据解在边界节点上的信息计算控制函数,边界和内部是完全独立的。我们举一个例子 来看一看这两个方案的不同之处。假设控制函数具有形式

\[ \label{3.6.2} M = {\sqrt {1 + |\nabla u_h |^2}} \]

其中,离散解是分片线性函数,在一个三角形单元上,$ u_h $在节点$ X_i $ 上的取值是$ u_i,1\le i \le 3 $,那么,在第一种方案下,在边界上的控制函数的值是

\[ {\sqrt {1 + \left( {\displaystyle\frac {u_1 - u_2} {| X_1 - X_2|}} \right)^2}}, \]

而在第二种方案下,在边界上的控制函数的值是

\[ {\sqrt {1 + \left({\displaystyle\frac {\partial u_h} {\partial x}}\right)^2 + \left({\displaystyle\frac {\partial {u_h}} {\partial y}}\right)^2}}, \]

其中

\[ \left({\displaystyle\frac {\partial {u_h}} {\partial x}}\right)^2 + \left({\displaystyle\frac {\partial {u_h}} {\partial y}}\right)^2 \]

等于以$ (X_i, u_i) $为顶点的三维空间中的三角形的面积和单元面积的比值。 在这样的情况下,我们使用的算法的步骤是:

我们提到,这样的方法在{Huang.2}中实现过,但是由于文献中细节不是很清楚,我们不 知道其实现是否用的是上面的方式。


Generated on Fri Jun 29 16:17:00 2007 for Moving Mesh by  doxygen 1.4.7