两个 FEM 网格中的公共节点

计算科学 Python 非结构化网格 网格
2021-12-04 19:46:16

有两个独立的四面体 FEM 网格。第二个网格是第一个网格的子集。通过子集,我的意思是:来自第二个网格的节点与来自第一个网格的某些节点的位置完全相同。两个网格中的节点编号完全不同。我需要根据第一个网格中的节点对第二个网格中的节点重新编号,以正确传输解决方案。为此,我需要在节点 ID 之间创建某种映射。最天真的解决方案是创建一个字典,其中键包含节点位置,值是节点“id”。但是由于浮点数学(精度问题),使用双精度数组作为键并不是一个好主意。

1个回答

散列浮点数确实会导致奇怪的结果,特别是如果节点位置可能受到少量扰动或存在非规范化值。

你包含了 Python 标签,所以我假设这就是你正在使用的并且你有 scipy。一个快速而肮脏的解决方案是构建细网格点的kd 树,然后对于粗网格中的每个点,计算其在细网格中的最近邻居。这将适用于O(nlogn)而不是O(n2)一个天真的嵌套循环,没有浮点怪异的问题。可能有更快的方法来做同样的事情,但在这些应用程序中,您通常首先需要空间树数据结构。