首页/文章/ 详情

基于paraview的非结构化网格可视化

1月前浏览931
   

概述

       

ParaView 是一个开源的多平台数据分析与可视化应用,广泛应用于科学计算领域中的大规模数据集可视化。下面是paraview中一些模型的可视化效果,包括液体搅拌、波相关和医学扫描数据。

   
   
   

与此同时,ParaView 对有限元结果的可视化也有强大的支持,特别是在处理大型数据集和复杂的网格时。有限元分析通常生成包含节点、单元和物理场变量的数据,这些数据可以通过 ParaView 进行后处理和可视化。

在有限元结果可视化中,网格的可视化是重中之重,网格可大致分为结构化网格和非结构化网格,关于结构化网格的可视化,paraview的帮助文档有详细的说明,这里重点讲解非结构化网格的可视化,兼具标量数据和矢量数据的可视化

       

非结构化网格

     

非结构化网格在处理如汽车、飞机的气动设计、复杂地形的环境模拟、生物医学工程中的器官建模等领域中非常有用,因为这些应用往往涉及到复杂的几何形状和边界条件。尽管非结构化网格的计算成本可能相对较高,但其灵活性和适应性使其成为解决复杂问题的重要工具。

非结构化网格的主要特点包括

灵活性:可以很好地适应复杂的几何形状,不需要对计算域进行过多的简化或近似。

节点和单元的多样性:网格中的单元可以是三角形、四边形(在二维情况下),或者四面体、六面体、金字塔和楔形等(在三维情况下)。这种多样性使得网格可以针对特定区域进行细化,以提高计算精度。

局部细化:在需要更高精度的区域,可以局部增加网格密度,而不必在整个计算域中均匀细化网格,这样可以有效控制计算成本。

生成和处理的复杂性:由于非结构化网格的灵活性,其生成和处理通常比结构化网格复杂。需要使用专门的算法来生成网格,并且在进行数值计算时,如有限元分析或流体流动模拟,需要处理不同形状和大小的单元。

数据结构:非结构化网格的数据结构通常比结构化网格复杂,需要额外的数据结构来存储单元与节点之间的连接关系。

       

paraview的vtk文件格式

     

VTK(Visualization Toolkit)文件格式是 ParaView 中使用的一种重要数据格式,该文件记录了数据集的网格信息、节点坐标信息、标量、矢量和张量等信息,vtk文件有两种格式,分别为二进制和字符型(ASCII 型),ASCII VTK文件是一种文本格式的文件,用于存储和描述数据集,以便于可视化和分析。这种格式对于人类可读和编辑,但通常比二进制格式的文件更大,且读写速度较慢。ASCII VTK文件的结构通常包括以下几个部分

文件头部:以 # vtk DataFile Version 3.0 开头,指明文件是VTK格式,以及版本号。版本号之后通常会跟随一个描述性的字符串,用于说明数据集的内容或来源。

数据类型:接下来会指定数据集的类型,如 ASCII 或 BINARY。尽管文件是ASCII格式,但这里指明的是文件中数据的存储方式,对于ASCII文件,这一行会是 ASCII。

数据集描述:紧接着是数据集的描述,可以包含任意文本,用于描述数据集的特征或提供其他信息。

数据块(Data Blocks):数据部分开始于 DATASET 关键字,后面跟随数据集的类型,如 STRUCTURED_POINTS、UNSTRUCTURED_GRID、POLYDATA 等。之后是具体的数据定义,包括点(Points)和单元(Cells)的定义,以及可能的关联数据(如标量、向量等)。

点(Points):定义数据集中的几何点,通常以一系列的三元组(x, y, z坐标)表示。

单元(Cells):定义网格的拓扑结构,例如,对于非结构化网格,会列出构成每个单元的点的索引。

数据字段(Data Arrays):可以包含标量、向量或张量数据,这些数据与点或单元相关联。例如,对于一个标量数据,会列出每个点或单元的值。

结束标记:数据部分以 ENDDATA 结束。

下面是一个简单的ASCII VTK文件结构示例















# vtk DataFile Version 3.0ASCII exampleASCIIDATASET UNSTRUCTURED_GRIDPOINTS 3 float...CELLS 2 10...CELL_TYPES 2...CELL_DATA 2SCALARS cell_scalars float 1LOOKUP_TABLE default...
 

在这个例子中,定义了一个包含3个点的非结构化网格,由一个三角形单元组成。同时,还定义了一个名为 cell_scalars 的标量数据字段,包含两个值,分别对应于网格中的两个单元。

ASCII VTK文件的可读性使得它们在需要手动编辑或调试时非常有用,但因为文件较大且读写速度较慢,对于大规模数据集,二进制格式通常是更好的选择。

       

非结构化网格示例

     

下面采用手编的形式讲解非结构化网格在paraview中的显示,该例子包含两个多面体单元,如图所示

   

这两个正方体的边长均为2,边中间的点均为边中点,方便手编坐标。这一些点的坐标为

   

下面逐行讲解这两个非结构化单元的vtk文件(文末附有vtk全文)。首先是vtk文件头





# vtk DataFile Version 2.0vtk from mananulASCIIDATASET POLYDATA
 

第一行是涉及到paraview的版本。

第二行是注释信息,随便写,我这是手动生成的,因此写了:vtk from mananul,第三行的ASCII表示这是一个字符型的vtk文件,最后一行则代表着数据集的类型,这里表示的是多边形数据。

然后是非结构化网格的节点坐标信息。




POINTS 19 float2  0  0...
 

points表示下面的数据集是点,19代表非结构化网格的节点总数,后面的float说明坐标的数据类型,后面的每一行依次是19个节点的xyz坐标。

下面是非结构化网格的面信息。

















POLYGONS  15   824  0 1  6  4    5  1 2  8  7  6  4  9 8  2  3    4  0 4  9  3    4  0 3  2  1    6  4 5  6  7  8  94  4 5  18  17    5  5 6  10  13  18  4  6 7  11  10    4  7 8  12  11    4  10  11  14  13    4  11  12  15  14    4  4  17  16  9    6  13  14  15  16  17  185  16  15  12  8  9  
 

POLYGONS  代表下面的数据是非结构化网格的多边形表面信息,一共15个表面,后面的82是所有的表面节点数目总和加上多边形个数,即


82=15(多边形个数)+4(第1个多边形节点数目)+5(第2个多边形节点数目)+...+5(最后一个多边形节点数目)
 

后面每一行数据的第一个数字是该多边形的节点数目,后面是具体的节点编号,注意节点标号的索引是从零开始的

为了方便理解,下面给出15个表面的示意图(手指头累断了),三个为一组,一共五组,大家可以跟上面的POLYGONS  数据集对比着看。

   
   
   
   
   

上面是非结构化网格的15个多边形表面,下面开始定义节点上的数据,可以是标量,如密度和泊松比等,可以是矢量,如位移、速度和加速度等,在正式开始给节点赋数据之前,要先声明节点数据,如


POINT_DATA 19
 

19是我这个例子的节点数目,是可变的。下面首先给节点赋予标量数据,如





SCALARS name float 1LOOKUP_TABLE my_table1...
 

第一行的name是数据量的名称,在paraview中会显示,float说明数据的类型是浮点数,后面的1表示我们这个例子中只有一组标量数据。后面的数据行要和节点数目对应。

下面是两组矢量数据








FIELD FieldData 2 U 3 19 double 1  2  3...S 3 19 double 1  2  3...
 

这个例子设置了两组矢量数据,分别是:U和S,代表位移和应力。第一行的数据2,即表示有两组数据。第二行和第五行中的3表示该矢量有三个分量,19表示节点数目,double是矢量分量的数据类型。每组矢量后面的数据行行数都是节点数目。

       

非结构化网格可视化效果

     

上面的非结构化网格示例在paraview中显示为

   

上面的示例中,设置了一组标量场,两组矢量场,对于矢量场,paraview会给出自己设计的分量,并且自动计算矢量对应的大小,如U数据,分别给出了xyz分量,和magnitude

   

对于标量场,paraview直接给出数值,如v数据

   

上面就是这个简单非结构化网格示例的可视化效果。

       

非结构化网格vtk文件示例

     

下面给出了上面手编的非结构化网格示例,里面的标量和矢量数据都是随意设置的,仅仅为了展示文件结构和各关键词的含义,搞清楚了这些,就可以手写程序。vtk文件为








































































































# vtk DataFile Version 2.0vtk from mananulASCIIDATASET POLYDATAPOINTS 19 float2  0  02  2  00  2  00  0  02  0  22  1  22  2  21  2  20  2  20  0  22  2  31  2  30  2  32  2  41  2  40  2  40  0  42  0  42  1  4POLYGONS  15   824  0 1  6  4    5  1 2  8  7  6  4  9 8  2  3    4  0 4  9  3    4  0 3  2  1    6  4 5  6  7  8  94  4 5  18  17    5  5 6  10  13  18  4  6 7  11  10    4  7 8  12  11    4  10  11  14  13    4  11  12  15  14    4  4  17  16  9    6  13  14  15  16  17  185  16  15  12  8  9  POINT_DATA 19FIELD FieldData 2 U 3 19 double 1  2  33  4  55  6  77  8  99  10  1111  12  1313  14  1515  16  1717  18  1919  20  2121  22  2323  24  2525  26  2727  28  2929  30  3131  32  3333  34  3535  36  3737  38  39S 3 19 double 1  2  33  4  55  6  77  8  99  10  1111  12  1313  14  1515  16  1717  18  1919  20  2121  22  2323  24  2525  26  2727  28  2929  30  3131  32  3333  34  3535  36  3737  38  39SCALARS v float 1LOOKUP_TABLE my_table12345678910111213141516171819
 

paraview功能强大,上面只是非常简单的非结构化网格示例,仅仅涉及到paraview基本的功能,还有张量可视化等更加复杂的功能,大家可自行探索。

点击卡片 关注我们

     

来源:有限元先生
汽车控制ParaView
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-10-26
最近编辑:1月前
外太空土豆儿
硕士 我们穷极一生,究竟在追寻什么?
获赞 16粉丝 1文章 53课程 0
点赞
收藏
作者推荐

abaqus子程序编译加密

abaqus子程序二次开发有两种语言,分别是fortran和c++。有时候子程序里面的一些参数有保密的需要、有时候为了更加方便的运行子程序,如调用了lapack计算库的子程序,如果每次调试模型都编译一次,是很麻烦的。针对以上需求,abaqus提供了编译子程序的功能,编译之后的子程序为二进制机器码,不可读且更加方便计算。采用fortran语言搞二次开发比较广泛,这里以fortran子程序为例讲解具体的编译步骤。切换工作路径点击win徽标键+r,在桌面左下侧弹出“运行窗口”,如输入“cmd”,点击确定打开cmd窗口,如然后在cmd窗口中用“cd”命令切换路径,把路径切换到自己的for文件所在路径。如图第一行左侧的红框框是windows默认的路径,输入“cd路径”命令可切换工作路径,我这里输入的是C:\Users\nnn\Desktop\cps4再上图中下方的红框框里的路径已经切换。编译子程序将工作路径移动到for文件对应的文件后,在cmd窗口中输入:“abaqusmakelibrary=usersubroutine”,编译子程序之前,首先准备好自己的子程序,我的文件为然后在cmd窗口中输入abaqusmakelibrary=job.for编译之后,cmd窗口输出的内容为箭头指示的部位显示编译成功。编译之后,自己的文件夹为新增两个文件,如两个文件分别为job-std.objstandarddU.dll其中,第二个文件是动态链接库文件,第一个文件就是编译之后的二进制文件,用记事本打开,里面的内容为已经不可读,达到了保密子程序参数的目的,并且当子程序体量比较大,或者调用了第三方代码库的情况下,就不用在每次计算的时候都编译一次子程序,节省了一些时间。搞程序的都知道,写完程序要看计算结果的时候,一秒时间都不能等(手动狗头)。点击卡片关注我们来源:有限元先生

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈