如何使用有限体积一阶迎风方案处理非恒定系数?


11

从守恒形式的平流方程开始。

ut=(a(x)u)x

其中是取决于空间的速度,而是守恒物种的浓度。ua(x)u

离散通量(在网格点之间的像元边缘上定义通量)给出 u t = 1f=a(x)u

ut=1h(fj12fj+12)

使用一阶迎风,我们将通量近似为

fj12=a(xj12)uj1fj+12=a(xj+12)uj
ut=1h(a(xj12)uj1a(xj+12)uj)

如果是常数,则将简化为熟悉的迎风方案,即 。u t = aa(x)ut=ah(uj1uj)

我的问题是,如何处理平流方程的非常数系数?速度是在细胞中心定义的,因此下面是一种简单的方法,

a(xj12)a(xj1)a(xj+12)a(xj)

这是我的首选方法,因为它非常容易实现。

但是,我们也可以使用(我猜是)平均方案来定义像元边缘的速度

a(xj12)12a(xj1)+12a(xj)a(xj+12)12a(xj)+12a(xj+1)

他在LeVeque的书中说:

到目前为止,我们已经假设可变速度由第j个网格单元内的常数指定。在某些情况下,更自然的是假设在每个单元界面上指定了速度。a j a j 1a(x)ajaj12

但是在那之后他并没有做太多的阐述。什么是常用方法?

我正在解决一个守恒问题(我使用对流方程作为连续性方程),所以我想确保在应用离散化之后能够保留守恒属性。我想避免有关这些可变系数的任何隐藏惊喜!有人有一些一般性的意见和指导吗?


更新下面有两个非常好的答案,我只能选择一个:(

Answers:


4

根据您要查看的系统类型,将速度视为每个单元中的分段常数,或者将其定义为单元接口可能更方便。例如,在气象学中,交错网格非常普遍,其中可能定义了单元内部的压力和单元界面的速度。您可以轻松地想到单元格中定义的速度。总而言之:只要您的离散化是稳定且一致的,表示的选择就不会影响方法的收敛*。a

最重要的(并且您已经在问题中提到了这一点)是离散化系统仍然是保守的。只要您的方案可以用以下形式编写

ujt=Fj12(uj1,uj)Fj+12(uj,uj+1)

那么应该保守一点,因为

tudx=jujtδx=j(Fj12Fj+12)δx=(F12FN+12)δx

您的简单方法应该可以很好地工作,只要将单元之间的速度平均以在单元界面上定义它即可,只要该速度始终为正。而且,我认为平均不会为您带来更高的准确度,因此您更喜欢简单的方法。

如果您也正在求解速度并且您拥有方程组,则可能需要格外小心。同样,如果要求解非线性双曲型PDE并使用通量限制器,则必须更加谨慎。

*但是,对于双曲PDE系统,使用交错网格可以大大改善人工分散/扩散。如果您想了解更多信息,请查阅Arakawa C-grids或查阅本书的第4章。


感谢您的解释。你的直觉是正确的;我正在求解一个方程组,其中一个方程是速度(其他变量的PDE)。方程组仅是一维的,我计划使用指数拟合的自适应一阶迎风方法(可以在二阶中心和迎风之间翻转)。我没有使用磁通限制器,但是系统是非线性的。在这种情况下,我需要“更加小心”吗?
boyfarrell

这全取决于您是否期望形成冲击波等,是否有可能在某些区域将速度降至零以下,或者速度是否可能变得足够高以至于会违反Courant-Friedrichs-Lewy条件在某一点。就是说,我将首先尝试使用简单的方法来查看它是否可行,并且很可能会做到。如果它将失败,它将毫不动摇地做到这一点,因此,我认为您不必担心在雷达下会出现一些错误。
Daniel Shapero

是的,我期望速度只有非零只在我区的中心,然后迅速接近零作为一个移动远离中心。我选择时间步长,以便满足CFL条件(使用最大速度),网格固定。冲击波的标准是什么?我不希望看到这种情况(但您永远不会知道)。
boyfarrell

5

a(x)

我的意思是一致的是,插值需要满足的唯一条件是

ai+1/2+=ai+1/2

换句话说,只要插值方法在像元边界上是连续的,离散化就可以保证保持保守。

在1D中,这似乎不是一个大问题(应该不会),但可能会在多级AMR网格上的粗精细接口上引起问题。


uj+12a(xj+12)a(xj+12)a(xj+1)uj+12

@boyfarrell从某种意义上讲,该方法仍应保持保守是可以的。但是,它确实会影响解决方案的准确性。通常,例如在ENO方案中,通常只近似整个通量函数,而不是近似地求解速度和解。
GradGuy

4

a(xj12)

要了解为什么会这样,请考虑对保守性的分析定义是:

tDu(x)dx=Da(x)u(x)dS,

D

如果我们的离散化形式为

ut(xj)=1h(a(xj12)uj12a(xj+12)uj+12)

x1,,xnD=[c,d]c=x12d=xn+12

1个HĴ=1个ñ一种XĴ-1个2üĴ-1个2-一种XĴ+1个2üĴ+1个2=一种X1个2ü1个2-一种Xñ+1个2üñ+1个2

üĴ-1个2=üĴ-1个üĴ+1个2=üĴ一种Xü

一种X一种XĴ-[R一种XĴ+s一种XĴ-1个2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.