ParaView 5.10中涡量(Vorticity)无法显示的解决咨询
ParaView 5.10中3D场涡量可视化的正确方法
正确配置Compute Derivatives过滤器
- 选中你的3D场数据,添加
Compute Derivatives过滤器。 - 在过滤器属性面板里,将Derivative Type改为
Vorticity(不要使用默认选项)。 - 在Input Vector中选择你要计算涡量的目标矢量场(比如速度场)。
- 点击Apply,之后在左侧数据树的
Point Data或Cell Data下就能找到生成的Vorticity字段,直接在着色选项中选择它即可完成可视化。
- 选中你的3D场数据,添加
如果Compute Derivatives无效,用Programmable Filter手动计算
以下是适配结构化网格的手动计算脚本示例(假设矢量场名为Velocity,存储在点数据中):import vtk.util.numpy_support as ns from vtk.numpy_interface import dataset_adapter as dsa import numpy as np input_data = dsa.WrapDataObject(self.GetInputDataObject(0, 0)) vel = input_data.PointData['Velocity'] nx, ny, nz = input_data.GetDimensions() coords = input_data.Points # 计算网格步长 dx = coords[1][0] - coords[0][0] dy = coords[nx][1] - coords[0][1] dz = coords[nx*ny][2] - coords[0][2] # 将速度分量转为三维数组 u = vel[:,0].reshape(nx, ny, nz) v = vel[:,1].reshape(nx, ny, nz) w = vel[:,2].reshape(nx, ny, nz) # 计算旋度(涡量)的三个分量:ωx = ∂w/∂y - ∂v/∂z;ωy = ∂u/∂z - ∂w/∂x;ωz = ∂v/∂x - ∂u/∂y ωx = (np.diff(w, axis=1)[1:-1,:,1:-1] / dy) - (np.diff(v, axis=2)[1:-1,1:-1,:] / dz) ωy = (np.diff(u, axis=2)[1:-1,1:-1,:] / dz) - (np.diff(w, axis=0)[:,1:-1,1:-1] / dx) ωz = (np.diff(v, axis=0)[:,1:-1,1:-1] / dx) - (np.diff(u, axis=1)[1:-1,:,1:-1] / dy) # 补全边界值(用边缘值填充,可按需调整) ωx_full = np.zeros((nx, ny, nz)) ωx_full[1:-1,1:-1,1:-1] = ωx ωx_full[0,:,:] = ωx_full[1,:,:] ωx_full[-1,:,:] = ωx_full[-2,:,:] ωx_full[:,0,:] = ωx_full[:,1,:] ωx_full[:,-1,:] = ωx_full[:,-2,:] ωx_full[:,:,0] = ωx_full[:,:,1] ωx_full[:,:,-1] = ωx_full[:,:,-2] ωy_full = np.zeros((nx, ny, nz)) ωy_full[1:-1,1:-1,1:-1] = ωy ωy_full[0,:,:] = ωy_full[1,:,:] ωy_full[-1,:,:] = ωy_full[-2,:,:] ωy_full[:,0,:] = ωy_full[:,1,:] ωy_full[:,-1,:] = ωy_full[:,-2,:] ωy_full[:,:,0] = ωy_full[:,:,1] ωy_full[:,:,-1] = ωy_full[:,:,-2] ωz_full = np.zeros((nx, ny, nz)) ωz_full[1:-1,1:-1,1:-1] = ωz ωz_full[0,:,:] = ωz_full[1,:,:] ωz_full[-1,:,:] = ωz_full[-2,:,:] ωz_full[:,0,:] = ωz_full[:,1,:] ωz_full[:,-1,:] = ωz_full[:,-2,:] ωz_full[:,:,0] = ωz_full[:,:,1] ωz_full[:,:,-1] = ωz_full[:,:,-2] # 合并为涡量矢量 vorticity = np.stack([ωx_full.flatten(), ωy_full.flatten(), ωz_full.flatten()], axis=1) # 添加到输出数据 output.PointData.append(vorticity, 'Vorticity')- 添加
Programmable Filter,将上述代码粘贴到Script框中。 - 确认矢量场名称和你的数据匹配,点击Apply后就能生成
Vorticity字段,正常选择着色即可。
- 添加
关键注意点
确保你的输入数据是结构化网格格式(比如VTK StructuredGrid、NetCDF等),且矢量场的存储位置(点数据/单元数据)和脚本中的设置对应。
内容的提问来源于stack exchange,提问作者Siderius
相关产品推荐
相关产品推荐

