将网格划分为预定的子网格

计算科学 Python 非结构化网格 域分解 分区
2021-12-08 22:43:55

我有一个网格已经划分为不相交的单元组。我想要实现的是以下。

  1. 获取单元组的邻接图。
  2. 划分网格,即从单元组生成子网格,使得界面之间的单元(单元组的边界)不再连接。这导致新的节点号。

笔记:

  1. 我不需要知道网格单元的邻接图,而是单元组的邻接关系。
  2. 理想情况下,我正在寻找现成的软件解决方案,这样我就不需要重新发明轮子了。
  3. 首选 Python 解决方案。
  4. 我使用单一细胞类型(完全三角形或完全四边形)在两个空间维度上工作。
  5. 效率不是我最关心的问题。
  6. 通常,在我的应用程序中,单元格的数量最多为 100k,而单元格组的数量约为 250 个。
1个回答

对于您的第一个问题,构建“分区”(您称之为“单元组”)的邻接图:假设您有一个数组pK您为每个单元格存储的位置K哪个分区p它属于。还假设您有一个(稀疏)数组aKL其条目是trueif 单元格KL是邻居(“相邻”)。然后分区s与分区“相邻”t如果t在集合中

(K,pK=sL,aKL=true{pL}){s}.
(换句话说,我们循环遍历所有单元格K在分区中s,然后在所有邻居L这些K,并收集它们的分区索引。此联合包含分区的所有分区索引s毗邻,但可能包括s本身——所以我们扔掉s在末尾。

对于您的第二个问题,可视化 - 这通常通过以下方式完成:

  • 对于每个分区s, 计算其质心xs,例如通过取此分区中单元格中心的平均值。
  • 计算整个域的质心x^,例如通过取所有细胞中心的平均值。
  • 可视化网格时,您使用偏移量绘制每个三角形α(xsx^)用一个小α- 说,α=0.05. 本质上,这样做是将每个分区从全局质心向外移动一个距离,该距离与该分区距质心的距离成正比。一些可视化程序已经可以为您做到这一点——该选项通常称为“explode”。