为二维域的二次基函数重新编号节点

计算科学 有限元 网格生成
2021-12-16 15:05:58

我有一个简单的二维域三角剖分,由连接矩阵和点矩阵描述。TP

出于教学目的,我使用参考三角形有了基函数,一切都很容易,因为那里的所有梯度都是恒定的。Δu=fP1

现在我正在尝试使用基函数。在这种情况下,我们有 6 个节点用于参考元素:3 个用于顶点,3 个用于中点。实际上,局部刚度矩阵必须是 6 x 6,这里是龙。我不知道如何更改矩阵以描述网格。P2TP

你对一些代码有什么好的参考吗?或者,更好的是,给定两个矩阵的 Python 片段返回新矩阵,同时考虑中点?P,T

1个回答

一个好的抽象会意识到一方面网格的顶点与另一方面有限元的节点之间存在差异。如果您在概念上将它们分开,那么您使用的元素对您的矩阵没有影响。相反,您必须有额外的数组来指示每个单元格上存在哪些节点索引,以及这些单元格的位置。不过,您不必存储它们的位置,因为可以计算出来。TP

例如,如果您在每个单元格上有一个长度为 6 的整数数组,您将采用前三个索引对应于位于单元格三个顶点上的节点的约定(按此顺序,您可以查找这些顶点数组索引,然后通过数组进行位置),其余三个是位于单元格边缘的节点(您可以根据该单元格上顶点的位置获取位置)。TP

这是一个更一般的设计原则的例子:概念上不同的东西应该分开存储。某些情况下,人们可以少花钱这一事实,这实际上意味着,如果你想实现一个更一般的情况,你必须更加努力地工作。