尽可能简单的示例
Example 1 : As Simple as it Gets
问题陈述
该例子描述了创建基本输入文件以及利用MOOSE解决问题所需的六个部分。
考虑三维域\(\Omega\)中的稳态扩散方程:
\[\begin{equation}\label{M-1} -\nabla \cdot \nabla u = 0 \in \Omega \end{equation}\]
底部\(u=1\),顶部\(u=0\),其余边界则是\(\nabla u \cdot \hat{n}=0\)。
该方程的弱形式,用内部相乘符号表示为:\(\nabla \phi_i , \nabla u_h = 0 \ \forall \ \phi_i\),其中\(\phi_i\)是测试函数,\(u_h\)是有限元的解。
输入文件
基本的输入文件包含六部分:
网格
变量
内核(kernels)
边界条件(BCs)
Executioner
输出
网格
此处使用的是预生成的网格文件,如何生成后续教程会讲。
1 | [Mesh] |
变量
对于这个简单的问题,只有一个变量,“扩散”,which represents u from the continuous problem。 扩散变量近似是线性拉格朗日形状函数。
1 | [Variables] |
内核
问题陈述的弱形式is represented by 扩散内核对象。一般而言,用户使用的是基于MOOSE的客制化内核,但MOOSE已经有定义好的扩散内核。 为了使用特定的内核,需要在输入文件里定义一个sub-section,标记为"diff" (这是由用户任意定义的名字),这将利用扩散内核,并对之前定义的变量"diffused"起作用。
1 | [Kernels] |
边界条件
边界条件的定义类似于内核。对于这个问题,需要两个狄利克雷边界条件。在输入文件中,两个边界条件分别使用MOOSE提供的DirichletBC对象指定。
1 | [BCs] |
请注意,这个问题(左侧和右侧)的诺伊曼边界条件是隐含满足的,我们没有必要定义。然而,对于非零诺伊曼或其他边界条件,许多内置对象由MOOSE提供(例如NeumannBC)。您还可以创建从MOOSE中的现有对象派生的自定义边界条件。
Executioner
要解决的问题类型和解决方法在执行者块中定义。这个问题是稳态的,将使用稳态执行器,并将使用默认解决方法Preconditioned Jacobain Free Newton Krylov。
1 | [Executioner] |
输出
有两种输出的类型:输出到屏幕上(控制台)以及输出到Exodus II 文件(exodus)。 设定“file_base”参数是可选的,在本例中,它强制命名输出文件“out.e” ("e"是使用Exodus II格式的扩展名)。
1 | [Outputs] |
运行该问题
1 | cd ~/projects/moose/examples/ex01_inputfile |