将非结构化网格转换为结构化

计算科学 非结构化网格
2021-12-07 07:05:27

我已经解决了 Openfoam 上的一个简单问题,它是一个 3D 矩形平行六面体,填充了矩形六面体作为网格元素。结构化的映射网格在 ICEM 中制作并在 OF 中求解。但是网格和数据是非结构化格式,即它们用连通性表示。我现在想将非结构化数据转换为无连接的结构化数据,即网格应该用循环表示

for(k=0;k<znocells;k++)
for(j=0;j<ynocells;j++)
for(i=0;i<xnocells;i++)
 { 
  //access elements...
 }

我曾尝试为此编写代码,但失败了。一个简单的解决方法涉及对元素数组进行排序,但这不适用于分叉之类的几何形状。是否有可用的代码或软件来导入 OF 网格并吐出结构化网格?

1个回答

我认为您可以像在 PETSc 中那样以一种相当简单的方式做到这一点。您会找到单元格之间的所有面,从而为您提供网格拓扑。要查找面,您循环遍历单元格,并且 6 个面中的每一个都按排序顺序使用 4 个顶点 (i,j,k,l) 的哈希值。然后你只需在最后读出哈希表。我的代码在这里

https://bitbucket.org/petsc/petsc/src/c99b676fdc4d0978b5621d138ceee2e1b7869aa6/src/dm/impls/plex/plexinterpolate.c?at=master&fileviewer=file-view-default#plexinterpolate.c-137

它有点长,因为我首先计算所有内容,以便我可以静态分配结构来保存它。