有限元法解偏微分方程(FEniCS)
有限元法求解牛顿流体(FEniCS)
这两篇笔记仅做入门之用。 为了深入掌握,建议阅读《Automated Solution of Differential Equations by the Finite Element Method》。 为此,我一边学习一边翻译权当笔记。
【章节目录】
有限元方法已经成为求解微分方程的通用方法。有限元方法的成功大部分可以归因于它的通用性和优雅性,它允许在一个通用框架内分析和求解来自科学所有领域的各种微分方程。有限元方法成功的另一个因素是公式的灵活性,可以通过选择近似的有限元空间来控制离散化的属性。
在本章中,我们回顾有限元方法,并总结整本书中使用的一些基本概念和符号。
在接下来的章节中,我们将更详细地讨论这些概念,并特别关注有限元方法的实现和自动化,这是FEniCS项目的一部分。
...
在Julia环境中,使用FenicsPy.jl调用FEniCS
库,求解偏微分方程。
纳维-斯托克斯方程组
纳维-斯托克斯方程:
\[
\color{red}{\frac{\partial \boldsymbol{u}}{\partial t}+(\boldsymbol{u} \cdot \nabla)\boldsymbol{u}=\frac{1}{\rho}\nabla\cdot \boldsymbol{\sigma}+\boldsymbol{f}}
\]
其中,张量
\(\boldsymbol{\sigma}\)
是应力张量
, 取决于具体流体的特性假设,比如:牛顿流体
。
连续性方程:
\[
\frac{\partial \rho}{\partial t}+\nabla \cdot (\rho \boldsymbol{u})=0
\]
...
在Julia环境中,使用FenicsPy.jl调用FEniCS
库,求解偏微分方程。
以泊松方程(第一边界条件)为例
\[
-\Delta u = f \qquad \boldsymbol{x} \in \Omega \\ u|_{\partial \Omega} =g
\]
范例而已, 本例提供的套路是通用的,大不了多看看文档。
关键的地方,我特意列出相关链接。
本文采用软件包: FEniCS。
...
上一篇笔记,讨论了一个单独的三角单元
。 本篇讨论,如何将任意给定平面区域刨分成三角单元序列
。
本文用到了 python库scipy.spatial.Delaunay
参考文献: https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.Delaunay.html
...
本文是有限元法基础之一:三角单元。
用
\(\color{red}{红色}\)
标注的公式,都给了完整的符号推导(基于Julia)。
参考文献: 微分方程数值解法(第4版)-李荣华&刘播-高等教育出版社-2009
...
有限元法可归结为如下几个步骤:
- 转换成变分问题(应该会用到边界条件)
2)对解域进行刨分(可以是不均匀)
3)构造基函数(本篇采用基于线性插值的基函数)
4)推导出有限元方程
5)求解有限元方程
6)收敛性和误差估计
...