当前位置: 首页 > news >正文

使用pyevtk导出结构化VTK网格以供后处理

pyevtk简介

在计算流体力学CFD中,通常需要处理三维网格数据,为了可视化,需要将其输出。本文介绍使用python的pyevtk库输出结构化网格,以供paraview进一步后处理。

代码

# **************************************************************
# * Example of how to use the high level gridToVTK function.   *
# * This example shows how to export a structured grid.        *
# **************************************************************from pyevtk.hl import gridToVTK
import numpy as np# 尺寸参数
lx, ly, lz = 3.0, 4.0, 5.0 #立方体的长宽高
nx_points, ny_points, nz_points = 3, 4, 5 #边上的节点数
n_points= nx_points*ny_points*nz_points #节点总数
nx_cells, ny_cells, nz_cells = nx_points-1, ny_points-1, nz_points-1 #边上的单元数
n_cells= nx_cells*ny_cells*nz_cells #单元总数
dx,dy,dz=lx/nx_cells,ly/ny_cells,lz/nz_cells #节点间距# 节点坐标
x_vector = np.linspace(0,lx,nx_points) #x方向节点分布,向量
y_vector = np.linspace(0,ly,ny_points) #y方向节点分布,向量
z_vector = np.linspace(0,lz,nz_points) #z方向节点分布,向量
x_field,y_field,z_field=np.meshgrid(x_vector,y_vector,z_vector, indexing='ij',sparse=False) #x场,y场,z场张量,注意:indexing务必选择'ij'# 物理量
pressure = np.random.rand(n_cells).reshape((nx_cells, ny_cells, nz_cells)) #随机压力场(存储在体心)
temp = np.random.rand(n_points).reshape((nx_points, ny_points, nz_points)) #随机温度场 (存储在节点)
velocity=(x_field**2+y_field**2+z_field**2, x_field**2+y_field**2+z_field**2,x_field**2+y_field**2+z_field**2) #自定义速度场(存储在节点)# 输出VTK文件
gridToVTK("./structured",x_field,y_field,z_field,cellData={"pressure": pressure},pointData={"temp": temp,"velocity":velocity},
)

gridToVTK函数用于将np数组转换为vtk文件并输出,x_field表示一个三层深的张量,描述了每个节点的x坐标。第一层表示x方向,第二层表示y方向,第三层表示z方向。x_field如下:

[[[0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0.]][[1. 1. 1. 1. 1. 1.][1. 1. 1. 1. 1. 1.][1. 1. 1. 1. 1. 1.][1. 1. 1. 1. 1. 1.][1. 1. 1. 1. 1. 1.]][[2. 2. 2. 2. 2. 2.][2. 2. 2. 2. 2. 2.][2. 2. 2. 2. 2. 2.][2. 2. 2. 2. 2. 2.][2. 2. 2. 2. 2. 2.]][[3. 3. 3. 3. 3. 3.][3. 3. 3. 3. 3. 3.][3. 3. 3. 3. 3. 3.][3. 3. 3. 3. 3. 3.][3. 3. 3. 3. 3. 3.]]]

y_field如下:

[[[0. 0. 0. 0. 0. 0.][1. 1. 1. 1. 1. 1.][2. 2. 2. 2. 2. 2.][3. 3. 3. 3. 3. 3.][4. 4. 4. 4. 4. 4.]][[0. 0. 0. 0. 0. 0.][1. 1. 1. 1. 1. 1.][2. 2. 2. 2. 2. 2.][3. 3. 3. 3. 3. 3.][4. 4. 4. 4. 4. 4.]][[0. 0. 0. 0. 0. 0.][1. 1. 1. 1. 1. 1.][2. 2. 2. 2. 2. 2.][3. 3. 3. 3. 3. 3.][4. 4. 4. 4. 4. 4.]][[0. 0. 0. 0. 0. 0.][1. 1. 1. 1. 1. 1.][2. 2. 2. 2. 2. 2.][3. 3. 3. 3. 3. 3.][4. 4. 4. 4. 4. 4.]]]

z_field如下:

[[[0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.]][[0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.]][[0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.]][[0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.][0. 1. 2. 3. 4. 5.]]]

cellData指保存在体心的数据,pointData指保存在节点的数据。这些数据既可以所标量(如pressure和temp)也可以是矢量(如velocity)

结果

运行代码后会输出structured.vts文件,可用paraview打开查看

速度场:在这里插入图片描述

温度场:

在这里插入图片描述

压力场:

在这里插入图片描述


http://www.mrgr.cn/news/6370.html

相关文章:

  • 每日一问:深入探讨TCP与UDP的区别
  • MVCC 详解
  • 第二十六届中国机器人及人工智能大赛(智能驾驶)思路
  • Chromium编译指南2024 - Android篇:安装其他构建依赖项(七)
  • Java语言程序设计——篇十七(1)
  • RTOS实战项目之实现多任务系统
  • Vue3开始
  • Linux随记(十一)(部署flink-1.16.3、jdk-11.0.19、zookeeper-3.4.13、kafka_2.12-2.2.2)
  • 软件开发者的首选:最佳Bug测试工具Top 10
  • Tensorboard
  • 【机器学习】4. 相似性比较(二值化数据)与相关度(correlation)
  • 责任链模式 和 状态模式
  • EKS开源系列之XF_UTILS工具库
  • Linux远程访问控制
  • Openstack 与 Ceph集群搭建(中): Ceph部署
  • 数据库;SQL语言; 数据库编程
  • 【在Linux世界中追寻伟大的One Piece】IO基础
  • 如何对 GitLab 中文版进行升级?
  • 大语言模型私有化部署和个性化调优的技术实践
  • 以FLV解复用为例详解开源库FFmpeg中解复用器的源码逻辑及处理流程