用途
本技能用于对计算流体力学(CFD)结果进行三维交互式可视化,典型对象包括速度场、压力等值线/等值面、流线以及泵体几何。底层使用 PyVista——一个构建在 VTK 之上的高层 3D 可视化库。
安装与配置
基础安装命令:
pip install pyvista numpy
可选的增强功能依赖:
# 用于网格处理和额外特性
pip install meshio vtk
# 用于 Jupyter notebook 支持
pip install trame jupyter-server-proxy ipywidgets
基础导入模式:
import pyvista as pv
import numpy as np
# 设置绘图主题
pv.set_plot_theme('document') # 或 'default', 'dark', 'paraview'
# 启用离屏渲染(用于无显示环境的脚本)
# pv.OFF_SCREEN = True
主要能力
三维网格可视化
支持 CFD 常用的多种网格类型:结构化网格(带曲线坐标的规则网格)、非结构化网格(任意单元类型,如四面体、六面体等)、PolyData(表面网格与点云)、均匀网格(规则笛卡尔网格,即体素)。示例中演示了创建 StructuredGrid 并可视化。
标量场可视化
可显示压力、温度、湍流强度等标量量,例如向网格添加压力场后,通过 add_mesh 配合 contour 绘制等值面,并设置颜色映射与标量条。
矢量场可视化(Glyphs)
使用箭头等字形可视化速度矢量,示例中通过 grid.glyph(orient='velocity', scale='velocity', factor=0.1) 创建箭头并着色。
流线
通过速度场追踪流线,示例中使用 grid.streamlines(vectors='velocity', source_center=..., source_radius=..., n_points=..., max_time=...),并用 streamlines.tube(radius=0.005) 生成管状流线。
体渲染
用透明度显示三维标量场(如密度或温度),使用 plotter.add_volume(grid, scalars='pressure', cmap='coolwarm', opacity='sigmoid')。
切片与裁剪
从三维域中提取二维切片或裁剪区域,例如 grid.slice_orthogonal(x=0.5, y=0.5, z=0.25) 与 grid.clip(normal='x', value=0.5)。
CFD 应用示例
正文给出多个完整示例,包括:速度场可视化(构造含旋流的管流速度场,用切片加流线展示)、压力等值线(构造障碍物周围压力分布并绘制等值面)、湍流可视化(构造湍动能 TKE 并做体渲染)、泵体几何显示(用圆柱与平面组合创建简化叶轮并配合光照渲染),以及综合可视化(轮廓、切片、流线、高压等值面组合并设置相机)。
交互特性
- 相机控制:可通过
plotter.camera_position设置相机位置、焦点与上方向,也支持 'xy'、'xz'、'yz'、'iso' 等预设视图。 - 多视口:使用
pv.Plotter(shape=(1, 2))创建并排对比,并通过link_views()同步相机。 - 动画:可生成环绕路径
generate_orbital_path并orbit_on_path,也可输出 GIF 或 MP4。
导出与保存
- 保存静态图像:
plotter.screenshot('cfd_pressure.png', ...),可指定分辨率。 - 导出网格:
grid.save('cfd_results.vtk'),也支持 .vtu、.vtp 等格式。 - 导出到 ParaView:PyVista 网格与 VTK 兼容,可直接在 ParaView 中打开做进一步后处理。
最佳实践
- 选择合适的颜色映射:速度用 'jet'、'viridis'、'plasma';压力/温度用 'coolwarm'、'RdBu_r';湍流用 'hot'、'inferno'。
- 使用一致的标度:设置 clim(颜色范围)以便在多工况间对比。
- 添加上下文:包含几何轮廓、坐标轴和比例条。
- 大数据集优化:抽稀(
mesh.decimate(0.5))、启用 LOD(enable_eye_dome_lighting())。 - 有效标注:添加标题、带单位的标量条标签。
- 注意光照:添加自定义光源以增强三维感知。
- 谨慎使用透明:将不透明表面与透明体渲染结合。
限制与说明
资料未提供本技能的收费、价格、平台限制或性能上限等信息,暂未提供。使用时需注意各依赖安装命令与代码示例均按原文保留,实际运行效果取决于本机环境与数据。