有限差分法和有限体积法的区别

有限差分法(Finite Difference Method, FDM)和有限体积法(Finite Volume Method, FVM)都是用数值解逼近微分方程的真实解的计算方法,其区别主要在于逼近思想、网格划分、格式类型和精度上有所不同。


  • 有限差分法(FDM)

将求解区域离散为差分网格,以有限个网格节点来代替连续的求解域,用网格上的差商来近似代替格点上的空间导数(整理后变为差分代替微分,故称之为差分格式),从而将原来的微分方程转化为以网格节点上的场值作为未知量的代数(差分)方程组,然后进行求解。

从是否对时间进行离散来划分,有半离散格式和全离散格式(前者只离散空间导数,原方程转化为大规模常微分方程组,于是时间推进可利用Runge-Kutta格式);从格式的精度来划分,有一阶、二阶和高阶格式;从导数的差分形式来划分,可分成中心格式和迎风格式;若考虑时间离散(即考虑全离散格式),差分格式还可以进一步分为显式格式、隐式格式、半隐式格式、显隐交替格式等;针对差分格式缺点(格式精度越高,差商依赖的节点越多,边界条件不好处理)进行改进,出现了所谓的紧致差分格式。

差分格式主要通过泰勒展开来构造,因此能很方便控制时间和空间上精度的阶数。目前,常见的差分格式是上述几种不同类型的组合,不同的组合构成不同的差分格式。

FDM主要适用于正交有序的网格,即结构化网格,因此特别适合结构简单、外形规整的计算域。对于外形不是特别复杂,但又不规则的计算域,仍可使用贴体和分块技术来转化为结构化网格。网格单元的尺寸一般需要适应流动情况(例如在有激波、边界层、涡等现象地方网格尺寸应该小)以及满足CFL(Courant-Friedrichs-Lewy)稳定性条件。

FDM数学概念直观,推导自然,是发展较早且比较成熟的数值方法。


  • 有限体积法(FVM)

FVM将求解区域离散为网格(可以是结构化也可以是非结构化类型),然后将其划分为一系列不重合的控制体,对待解的微分方程在单个控制体内进行体积分,利用斯托克斯定理得到微分方程相应的积分形式,然后对方程进行离散求解。

根据未知量所处的位置,离散格式类型可分为两种:一种是未知量处于网格单元中心(cell-centered);一种位于网格节点上(vertex-centered)。前者计算量较大,但精度也比后者高。为了方便,通常使用的是前者。

为了求出控制体内的积分,必须假定场值在网格内之间的变化规律,或者直接给出通量的近似表达式。这便是有FVM格式构造的核心。根据通量导数构造方式,也可以分为中心型格式和迎风型格式两大类。中心型较为特殊,需要使用交错网格,这里不谈。

迎风型格式根据其所用到的物理思想,又可分为通量矢量分裂(Flux Vector Splitting, FVS)、通量差分分裂(Flux Difference Splitting, FDS)、总变差衰减(Total Variation Diminishing, TVD)、波动分裂(Fluctuation Splitting, FS)等格式。其中最为经典的Godunov格式、加权本质无振荡(WENO)格式就是属于FDS一类,而ASUM家族类的格式以及经典的Steger-Warming格式,van Leer格式则属于FVS一类。

根据格式精度,也能分为一阶格式、二阶格式和高阶格式。同样,根据时间是否离散,可以分为半离散格式和全离散格式。对于时间进行离散的格式中,又可分为显式、隐式、显隐交替格式等。像前面的高阶精度格式(TVD、WENO)都喜欢与半离散方式结合,这样容易控制时间和空间精度,缺点是计算开销大。

可以说,FVM中上述格式也吸收借鉴了FDM中格式构造的思想,它们之间也是相互促进的,并非完全独立的。


从数学本质来说,FVM属于加权参量法家族中的子区域法(而限元法则是基于变分原理和加权残量法,可以说FVM是FDM和有限元法之间的结合物)。有限体积法的物理意义清晰,即守恒变量在任意大小的控制体积(乃至对整个计算区域)中满足守恒律,这是FVM的最大优点,而FDM仅当网格非常密时,离散方程才满足积分守恒。

总结二者的典型不同之处:

  1. FVM在复杂区域上容易进行,而FDM实施起来较困难;但FVM使用非结构化网格对复杂区域求解,解的质量与网格质量关系较大。
  2. 对于复杂计算域,若采用贴体网格,FDM中几何量和物理量是耦合运算的,故采用不同的差分格式,这些几何量对计算结果的影响不同,因而会产生所谓几何诱导误差。
  3. 对多维问题而言,高精度(高于二阶)FDM较为容易构造,而FVM的构造和实施比较困难,且多维的引入会带来几何源项。
  4. FDM适合光滑流动(低速流),但对网格光滑性要求较高;FVM适合流场有大梯度或间断的流动(如激波)。

上述文章收录自2018-11-14 15:36叶落无声的回答,具体请看

有限差分法和有限体积法的区别? - 知乎

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
有限体积(Finite Volume Method)是数值计算领域中常用的一种数值解,用于求解偏微分方程。在计算流体力学和传热学等领域,有限体积被广泛应用。 Python是一种简单易学、功能强大的编程语言。可以使用Python编写有限体积的数值计算程序,用于求解偏微分方程。以下是一个简单的有限体积的Python代码示例: ```python import numpy as np # 定义网格 N = 100 # 网格数 L = 1.0 # 区域长度 dx = L / N # 网格步长 x = np.linspace(0.0, L, num=N+1) # 网格节点 # 定义初始条件 u0 = np.sin(np.pi * x) # 定义其他参数 nu = 0.1 # 粘度系数 dt = 0.001 # 时间步长 t = 0.0 # 时间 # 迭代求解 while t < 1.0: u = u0.copy() for i in range(1, N): u[i] = u0[i] + nu * dt / dx**2 * (u0[i+1] - 2.0 * u0[i] + u0[i-1]) u0 = u.copy() t += dt # 输出结果 import matplotlib.pyplot as plt plt.plot(x, u) plt.xlabel('x') plt.ylabel('u') plt.title('Solution of the Heat Equation') plt.show() ``` 在这个示例中,我们使用有限体积求解了一个简单的热传导方程,并用matplotlib库将结果可视化。该程序使用了一个一维网格,并以差分格式更新网格上节点的值。最终得到的结果是温度随空间位置的分布。 有限体积是一种非常灵活和强大的数值解,可以用于求解各种不同的偏微分方程。使用Python编写有限体积的计算程序,可以方便地实现这一数值方,并进行模拟和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值