fem 中的二维网格:从 P1 网格生成 P1、P2、P3、... 网格

计算科学 有限元 网格生成
2021-12-08 07:32:09

我有一个由三角形生成的二维网格(网格生成器软件不相关)。该软件生成一个完美的网格,通过分段线性函数(P1 网格)来近似解。

例如,对于 2D 中的单位正方形 [0,1]x[0,1],我有一个文件,其中包含其节点的坐标(例如,具有 5 个节点的网格):

1   0.0 0.0  # coordinates of node 1
2   1.0 0.0  # coordinates of node 2
3   1.0 1.0  # coordinates of node 3
4   0.0 1.0  # coordinates of node 4
5   0.5 0.5  # coordinates of node 5

称为coordinate.dat,它有 4 个元素(三角形),其连通性由名为 的文件给出element.dat

1   1 5 4  # vertices of triangle 1
2   1 2 5  # vertices of triangle 2
3   2 3 5  # vertices of triangle 3
4   5 2 4  # vertices of triangle 4

现在,我需要对有限元空间属于任意多项式次数的问题进行编程,例如,通过 2、3 等多项式来近似解。

为此,我需要构建一个带有新节点的新网格和一个带有更多节点的新连接文件。我需要的一般网格的一个例子:

在此处输入图像描述

我已经知道如何计算每个元素上所有新节点的坐标(它只是一个易于计算的凸组合),但我无法获得一种简单的方法来生成新的连接文件。

几天来我一直在考虑如何为此编写一个通用方法,但我想不出任何方法。

你知道一些从网格 P1 创建网格 P2、P3、...的方法吗? 或更准确地说,如何构建新的连接文件?

1个回答

Pk 单元的网格通常与 P1 完全相同。唯一的区别是,您还需要跟踪更高阶的边缘索引,并将自由度 (DOF) 与边缘(从 P2 开始)和元素(从 P3 开始)关联起来。这只是定义相对于参考元素的节点和边的局部索引、映射到实际网格元素并进行一些索引簿记的问题。如果你想通了,计算索引是非常简单的,并且不涉及使用细化的网格数据结构。这种技术的优点是您不依赖于网格节点上自由度的特定“放置”,并且可以轻松推广到更一般的有限元。我建议您从头开始,并查阅有关有限元方法实施的现有文献。Gockenbach 甚至有一本书的标题是“理解和实现有限元方法”。虽然我自己没有读过它,但我很确定他比我在这篇文章中更好地解释了这些基础知识。其他流行的介绍通常也有一个关于实现的章节。

但是,您打算做的并不是无用的练习。可视化高阶多项式的一种流行方法是使用细化网格,另请参见此问题在这种情况下,您需要处理细化网格的插值。如果您知道顶点,则插值很容易,并且通常以递归方式进行精炼,即精炼一次,然后再精炼,等等。这样,如果您有适合边缘的索引,则很容易跟踪连接性。设置它是一项简单的任务,因为边可以定义为节点索引的元组,您可以(再次)为您的参考元素一劳永逸地定义并映射到每个实际的网格元素。但是,由于您的问题与设置高阶元素有关,因此我不会在这里详细说明网格细化。