外观
有限元方法详解:Lagrange 元、H(div) 元与 DG 元
有限元方法(Finite Element Method, FEM)是求解偏微分方程的重要数值方法。本文将简单介绍三种重要的有限元类型:Lagrange 元、H(div) 元和间断 Galerkin(DG)元。
有限元方法基础
基本思想
有限元方法的核心思想是:
- 区域离散:将求解区域划分为有限个单元(如三角形、四边形、四面体等)
- 函数逼近:在每个单元上用简单函数(多项式)逼近未知函数
- 弱形式:将微分方程转化为积分形式
- 代数方程组:得到线性或非线性代数方程组
标准流程
考虑 Poisson 方程:
−Δu=fin Ω,u=0on ∂Ω
弱形式为:Find u∈H01(Ω) such that
∫Ω∇u⋅∇vdx=∫Ωfvdx,∀v∈H01(Ω)
有限元离散:
uh=i=1∑Nuiϕi(x)
其中 ϕi 是基函数,ui 是待求系数,又叫自由度。
Lagrange 有限元
基本概念
Lagrange 有限元是最经典的有限元类型,其基函数在节点处取值为 1,在其他节点处为 0。
一维 Lagrange 元
线性元(P1):
在单元 [xi,xi+1] 上:
ϕi(x)=xi+1−xixi+1−x,ϕi+1(x)=xi+1−xix−xi
二次元(P2):
增加中点节点,使用二次多项式:
ϕi(x)=(xi−xm)(xi−xi+1)(x−xm)(x−xi+1)
二维 Lagrange 元
二维、三维有限元基函数都定义在参考元上。
三角形 P1 元:
ϕ1(ξ,η)=1−ξ−η,ϕ2(ξ,η)=ξ,ϕ3(ξ,η)=η
满足 ϕi(ξj,ηj)=δij(Kronecker delta)。
三角形 P2 元:
6 个节点(3 个顶点 + 3 个边中点),使用二次多项式。
四边形 Q1 元:
ϕ1ϕ2ϕ3ϕ4=(1−ξ)(1−η),=ξ(1−η),=ξη,=(1−ξ)η
其中 (ξ,η)∈[0,1]2 是参考单元坐标。
三维 Lagrange 元
- 四面体 P1 元:4 个节点,线性基函数
- 四面体 P2 元:10 个节点,二次基函数
- 六面体 Q1 元:8 个节点,三线性基函数
- 六面体 Q2 元:27 个节点,三次基函数
MFEM中的实现示例
// MFEM 中使用 Lagrange 元
#include "mfem.hpp"
// 创建 P2 有限元空间
FiniteElementCollection *fec = new H1_FECollection(2, dim); // 2 表示 P2
FiniteElementSpace *fespace = new FiniteElementSpace(mesh, fec);
// 定义网格函数
GridFunction u(fespace);H(div) 有限元
基本概念
H(div) 元(也称 Raviart-Thomas 元或 RT 元)是专门为向量场设计的有限元,其法向分量在单元边界上连续。
数学空间
H(div) 空间定义为:
H(div,Ω)={v∈[L2(Ω)]d:∇⋅v∈L2(Ω)}
RT 元的构造
二维 RT0 元(最低阶):
在三角形单元 K 上:
RT0(K)={v:v(x)=a+bx,a∈R2,b∈R}
自由度:每条边上的法向通量。
二维 RT1 元:
RT1(K)=RT0(K)⊕{xp(x):p∈P1(K)}
Nedelec 元(H(curl) 元)
类似地,Nedelec 元用于 H(curl) 空间:
H(curl,Ω)={v∈[L2(Ω)]d:∇×v∈[L2(Ω)]d}
切向分量在边界上连续。
应用场景
流体力学:
混合有限元方法求解 Darcy 方程:
u+K∇p∇⋅u=0=f
使用 RT 元离散速度 u,P0 元离散压力 p。
电磁场:
Maxwell 方程:
∇×E=−∂t∂B,∇×H=J+∂t∂D
使用 Nedelec 元离散电场和磁场。
实现示例
// MFEM 中使用 RT 元
FiniteElementCollection *fec = new RT_FECollection(0, dim); // RT0
FiniteElementSpace *fespace = new FiniteElementSpace(mesh, fec);
// 定义向量场
GridFunction u(fespace);
// 计算散度
BilinearForm *div_form = new BilinearForm(fespace);
div_form->AddDomainIntegrator(new VectorDivergenceIntegrator);优缺点
优点:
- 自动满足散度/旋度约束
- 适合混合有限元方法
- 物理量守恒性好
缺点:
- 实现较复杂
- 自由度较多
- 需要特殊的预条件子
间断 Galerkin(DG)元
基本概念
DG 方法允许解在单元边界上间断,通过数值通量连接相邻单元。
DG 方法的特点
- 局部性:每个单元独立,易于并行
- 灵活性:可以使用不同阶次的多项式
- 稳定性:自然处理对流占优问题
弱形式
考虑对流扩散方程:
∂t∂u+∇⋅(bu)−∇⋅(ϵ∇u)=f
DG 弱形式:
∫K∂t∂uhvhdx+∫K(buh)⋅∇vhdx+∫∂KF^⋅nvhds=∫Kfvhdx
其中 F^ 是数值通量。
数值通量
对流项:
- Upwind 通量:
F^upwind=b⋅nuupwind
- Lax-Friedrichs 通量:
F^LF=21(b⋅n(u++u−)−α(u+−u−))
扩散项:
- SIPG(Symmetric Interior Penalty):
F^SIPG={ϵ∇u}⋅n−σ[u]
- NIPG(Non-symmetric Interior Penalty)
- BR2(Bassi-Rebay)
DG 方法的变体
1. 标准 DG:
在每个单元上使用多项式基函数。
2. HDG(Hybridizable DG):
引入边界变量,减少全局自由度:
// MFEM HDG 示例
FiniteElementCollection *fec = new DG_FECollection(order, dim);
FiniteElementSpace *fespace = new FiniteElementSpace(mesh, fec);3. LDG(Local DG):
专门用于扩散问题。
实现示例
// MFEM 中使用 DG 元
FiniteElementCollection *fec = new DG_FECollection(2, dim); // P2 DG
FiniteElementSpace *fespace = new FiniteElementSpace(mesh, fec);
// DG 对流算子
BilinearForm *conv = new BilinearForm(fespace);
conv->AddDomainIntegrator(new ConvectionIntegrator(velocity, -1.0));
conv->AddInteriorFaceIntegrator(
new TransposeIntegrator(new DGTraceIntegrator(velocity, 1.0, -0.5)));
conv->AddBdrFaceIntegrator(
new TransposeIntegrator(new DGTraceIntegrator(velocity, 1.0, -0.5)));
// DG 扩散算子
BilinearForm *diff = new BilinearForm(fespace);
diff->AddDomainIntegrator(new DiffusionIntegrator);
diff->AddInteriorFaceIntegrator(new DGDiffusionIntegrator(sigma, kappa));
diff->AddBdrFaceIntegrator(new DGDiffusionIntegrator(sigma, kappa));应用场景
1. 双曲守恒律:
Euler 方程、浅水方程等:
∂t∂u+∇⋅F(u)=0
2. 对流占优问题:
高 Peclet 数的对流扩散方程。
3. 波动方程:
声波、电磁波传播。
4. 自适应网格:
DG 方法天然支持 hp-自适应。
优缺点
优点:
- 高度局部化,易于并行
- 支持 hp-自适应
- 适合双曲问题
- 可以处理复杂几何
缺点:
- 自由度多于连续 Galerkin
- 需要选择合适的数值通量
- 条件数较大
三种元的比较
| 特性 | Lagrange 元 | H(div) 元 | DG 元 |
|---|---|---|---|
| 连续性 | 全局连续 | 法向连续 | 完全间断 |
| 适用问题 | 椭圆、抛物 | 混合问题 | 双曲、对流占优 |
| 自由度 | 少 | 中等 | 多 |
| 实现难度 | 简单 | 中等 | 较复杂 |
| 并行性 | 一般 | 一般 | 优秀 |
| 守恒性 | 弱 | 强 | 强 |
实际应用建议
选择 Lagrange 元
- 标量椭圆问题(Poisson、热传导)
- 结构力学(位移场)
- 简单的抛物问题
选择 H(div) 元
- 流体力学(Darcy、Stokes)
- 电磁场(Maxwell 方程)
- 需要精确守恒的问题
选择 DG 元
- 双曲守恒律(Euler、浅水)
- 对流占优问题
- 需要局部自适应的问题
- 并行计算
总结
有限元方法提供了丰富的单元类型来适应不同的物理问题:
- Lagrange 元是最基础和通用的选择,适合大多数标量问题
- H(div) 元专门设计用于向量场,保证物理量的守恒性
- DG 元提供了最大的灵活性,特别适合双曲问题和并行计算
在实际应用中,需要根据问题的特性、精度要求和计算资源来选择合适的有限元类型。现代有限元软件(如 MFEM)提供了这些元的高效实现,使得研究者可以专注于物理问题本身。
理解这些不同有限元的特性和适用场景,是成功应用有限元方法的关键。
版权所有
版权归属:Guisong Wu