总的来说,基于 fenics 的程序,可大致划分为 4 个部分:问题域、边界条件、问题描述、求解
1 - 问题域
首先,需要定义需要求解的问题域。通常,问题域可离散为网格单元。此外,为了准确表示问题域中的不同区域,如多种材料、边界等,常常在网格中加入标记。
一般来说,流程如下:
1> 创建网格,即 dolfin.Mesh 。一般来说,可以借助 mashr 从文件中读取,也可以借助内置函数创建简单/规则形状的网格。例如:
mesh = dolfin.UnitSquareMesh(8,8)
2> 创建函数空间,即 dolfin.FunctionSpace 。一般来说,如下定义:
V = dolfin.FunctionSpace(mesh, 'p', 1)
3> 子域 / 标记
在 fenics / dolfin 中,需要区分网格中的不用部分,如不同具有不同参数,或边界等,一般需涉及 子域 以及 标记 等
子域
dolfin.SubDomain
标记
标记则一般通过 dolfin.MeshFunction 来进行标记,或通过其他软件绘制网格的时候,可以提前加入标记
2 - 边界条件
一般,三种边界条件 dolfin.DirichletBC
、 dolfin.NeumannBC
和 xx
3 - 问题描述
通过变分后,描述需要求解的问题
4 - 求解
直接求解就可以了