首页/文章/ 详情

vtk文件编制规则&Paraview后处理操作

8月前浏览9003

这一节为什么要讲使用Paraview进行有限元云图显示呢?当模型自由度规模不断增大时,使用绘图函数进行绘制时会出现渲染延迟,或者拖动起来没有那么丝滑,这时候就需要借助优秀的第三方工具咯 我选择Paraview,读者也可以基于同样的原理应用到别的软件中。

先来一个官方介绍吧:Paraview是一款优秀且开源的后处理软件,是一个用于可视化大型数据集的开源、跨平台的数据分析和可视化应用程序。它最初是由美国国家实验室管理的开源软件团队开发的,用于处理和可视化计算机模拟数据,特别是在科学和工程领域中生成的大规模数据集。ParaView支持并行处理和分布式计算,使其能够有效地处理大规模数据,从而使用户能够在可视化中探索复杂的数据集。

Paraview可接受众多数据格式,我以.vtk数据结构为例,介绍其有限元后处理过程中常用到的功能,官方参考手册可见:https://docs.vtk.org/en/latest/。

VTK语法

本小节只介绍VTK的基础语法,高级语法请移步官方文档进行学习。读者可先阅读以下的数据结构:

# vtk DataFile Version 3.0
Finite Element Results
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 节点数 float
x1 y1 z1
x2 y2 z2
...
CELLS 单元数 (每个单元的节点数+1)*单元数
每个单元的节点数 节点1 节点2 节点3 节点4
每个单元的节点数 节点1 节点2 节点3 节点4
...
CELL_TYPES 单元数
单元1类型
单元2类型
...
POINT_DATA 节点个数
SCALARS 节点场变量名字 float 分量个数
LOOKUP_TABLE default
分量1 分量2
分量1 分量2
...
SCALARS 节点场变量名字 float 分量个数
LOOKUP_TABLE default
分量1 分量2
分量1 分量2
...
CELL_DATA 单元个数
SCALARS 单元场变量名字 float 分量个数
LOOKUP_TABLE default
分量1 分量2
分量1 分量2
...
SCALARS 单元场变量名字 float 分量个数
LOOKUP_TABLE default
分量1 分量2
分量1 分量2
...

需要注意的是:

  1. 二维模型的节点坐标,第三列填充为0即可
  2. 节点编码[从0开始计数]
  3. 单元类型,vtk有自己的一套单元类型标准,可参考下图
  4. 有关节点的场变量都放在POINT_DATA下方数据行,如:位移、反力;有关单元的场变量都放在CELL_DATA下方数据行,如:应变、应力
  5. 绘制变形后的云图时,将变形后的节点坐标进行更新即可,其他的保持不变

数值实现

以等参四边形单元为例,编制相应的函数,将有限元场变量结果写入vtk文件中,其他单元相同的道理,读者可依葫芦画瓢。

function Q42vtk(filename,Node,Element,U,RF,Scale)
U = full(U);RF = full(RF);
element_info =Element;
node_coords = Node + Scale * reshape(U, 2size(Node, 1))';
num_nodes = size(node_coords, 1);
num_elements = size(element_info, 1);
filePath1 = fullfile('output', strcat(filename,'-Scale-',num2str(Scale),'.vtk'));
vtk_file = fopen(filePath1,'w');
fprintf(vtk_file, '# vtk DataFile Version 3.0\n');
fprintf(vtk_file, 'Finite Element Results\n');
fprintf(vtk_file, 'ASCII\n');
fprintf(vtk_file, 'DATASET UNSTRUCTURED_GRID\n');
fprintf(vtk_file, 'POINTS %d float\n', num_nodes);
for i = 1:num_nodes
 fprintf(vtk_file, '%f %f 0.0\n', node_coords(i1), node_coords(i2));
end

fprintf(vtk_file, 'CELLS %d %d\n', num_elements, num_elements * 5);
for i = 1:num_elements
 fprintf(vtk_file, '4 %d %d %d %d\n', element_info(i1) - 1, element_info(i2) - 1,element_info(i3) - 1,element_info(i4) - 1);
end

fprintf(vtk_file, 'CELL_TYPES %d\n', num_elements);
for i = 1:num_elements
 fprintf(vtk_file, '9\n'); 
end
%%%%%%%%%%%%%%%%%%%%%%%%POINT_DAT%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(vtk_file, 'POINT_DATA %d\n', num_nodes);
fprintf(vtk_file, 'SCALARS Displacement float 2\n');
fprintf(vtk_file, 'LOOKUP_TABLE default\n');
for i = 1:num_nodes
 fprintf(vtk_file, '%f %f \n', displacement_info(i * 2 - 1), displacement_info(i * 2));
end
fprintf(vtk_file, 'SCALARS RF float 2\n');
fprintf(vtk_file, 'LOOKUP_TABLE default\n');
for i = 1:num_nodes
 fprintf(vtk_file, '%f %f \n', RF(i * 2 - 1), RF(i * 2));
end
fclose(vtk_file);
end

软件基础绘图设置

将vtk文件导入Paraview中后,可能如下图所示:

 

这时以Abaqus的云图显示为例,我们将Paraview中的显示对标Abaqus。

经过上述的一系列操作就可初步修改云图显示啦,还有很多修改方法,读者可自行琢磨。


来源:易木木响叮当
AbaqusUM渲染ParaView
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-03-03
最近编辑:8月前
易木木响叮当
硕士 有限元爱好者
获赞 220粉丝 259文章 349课程 2
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈