[这个贴子最后由周华在 2003/03/18 00:59am 编辑]
【转贴】 作者:liuhuafei
结构化网格和非结构化网格主要针对网格的拓朴特性(或者说网格的构造)来说的。
结构化网格:
一般有单块的结构化网格和多块结构化网格(分块结构化)两种。任意节点的位置可以通过一定的规则来命名。 如某节点编号(i,j,k),你就可以很快判断出它的E,W,S,N,T,B节点的编号,也就是说节点之间的连接关系就隐含在节点的编号中,不需要另外的数据结构来存储这种节点之间的连接关系。 所以结构化网格的程序,节点可采用(i,j)和(i,j,k)编号,这与编程语言中的数组有很好的对应关系。但是现在一些著名的计算的源程序都采用一维数组的存储结构,一方面是计算效率的考虑,采用一维数组可以减少计算中数组的位置的计算时间;另一方面也是结构化网格的程序能够容易改动以适应非结构化网格的计算,非结构化网格要采用一维数组来存储。
结构化网格还有一个特性是每个控制体的邻居节点的个数是一定的,如果我没有理解错的化应该是2,4,6(边界除外)。实际上在多块的结构化网格中,这个性质不一定对,我刚做完一个不连续多块结构化网格的编程,在块界面两侧的节点的邻居节点个数就可以是“任意的”,所以在块界面处网格的存储利用了类似非结构网格的存储方法。
结构化网格程序一般对应高效的适用结构化的线性代数方程的求解器,如SIP法。
非结构化网格:
节点的位置无法用一个国定的法则来有序的命名。 控制体的邻居节点的个数是任意的,需要有专门的数据结构来存储节点之间的连接关系。 在程序中,需要用一维数组来存储网格数据,这一点非常重要 。
非结构化网格程序的线性代数方程的求解器在计算效率上一般比结构化网格上的差一些,因为它所形成的线性代数方程组没有象结构化网格上的规则的3对角,5对角等矩阵。
我觉得大家只要区别它们在网格拓朴特性、 编号特性 、邻居节点个数 、线性代数方程组的求解的不同就可以了。
我认为一个好的源程序,应该能适应上面的结构和非结构网格,即能适应混合网格的需要,不管网格的拓朴特性如何,非结构网格或者一些混合网格编程的困难在于找到节点间的互相联系的关系,如果这解决了,其它和结构化网格的编程上是一样的,当然一定要选一个高效的代数方程的求解器。
这是一本英文文章上的,应该比我说的好
There are two mesh types, characterised by the connectivity of the points. Structured meshes have a regular connectivity, which means that each point has the same number of neighbours (for some grids a small number of points will have a different number of neighbours). Unstructured meshes have irregular connectivity: each point can have a different number of neighbours. Figure 1 gives an example of each type of grid. In some cases part of the grid is structured and part unstructured (e.g., in viscous flows where the boundary layer could be structured and the rest of the flow unstructured).
|