You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现vtkLagrangianParticleTracker的粒子数据输入问题求助

vtkLagrangianParticleTracker粒子输入配置方法

LPT的粒子源需要携带积分模型要求的属性数组,你可以按照以下步骤生成带随机属性的粒子并接入LPT:

1. 粒子属性要求

你使用的vtkLagrangianMatidaIntegrationModel默认要求粒子源携带以下属性:

  • Diameter:粒子直径,单位m
  • Density:粒子密度,单位kg/m³
  • 可选配置InitialVelocity:粒子初始速度矢量,不配置则默认继承流场初始位置的速度

2. 完整实现代码示例

import vtk
import random

# ----- 原有代码保留:流场读取部分和kitchen示例一致 -----
# reader = ... 你的kitchen流场读取代码保持不变

# ----- 新增:生成带随机属性的粒子源 -----
# 生成初始位置随机分布的粒子点
particle_source = vtk.vtkPointSource()
particle_source.SetNumberOfPoints(100) # 自定义粒子数量
particle_source.SetCenter(0.05, 0.05, 0) # 初始位置中心,根据你的流场入口调整
particle_source.SetRadius(0.02) # 初始位置的分布半径
particle_source.Update()
particle_dataset = particle_source.GetOutput()

# 生成粒子直径随机数组:1μm~10μm
diameter_arr = vtk.vtkDoubleArray()
diameter_arr.SetName("Diameter")
# 生成粒子密度随机数组:900kg/m³~1100kg/m³
density_arr = vtk.vtkDoubleArray()
density_arr.SetName("Density")
# 生成初始速度随机数组:0~0.2m/s各方向随机
init_vel_arr = vtk.vtkDoubleArray()
init_vel_arr.SetName("InitialVelocity")
init_vel_arr.SetNumberOfComponents(3)

point_num = particle_dataset.GetNumberOfPoints()
for i in range(point_num):
    diameter_arr.InsertNextValue(random.uniform(1e-6, 1e-5))
    density_arr.InsertNextValue(random.uniform(900, 1100))
    init_vel_arr.InsertNextTuple3(
        random.uniform(0, 0.2),
        random.uniform(-0.05, 0.05),
        random.uniform(-0.05, 0.05)
    )

# 将属性数组写入粒子数据集
particle_dataset.GetPointData().AddArray(diameter_arr)
particle_dataset.GetPointData().AddArray(density_arr)
particle_dataset.GetPointData().AddArray(init_vel_arr)

# ----- LPT配置 -----
paths = vtk.vtkLagrangianParticleTracker()
paths.SetInputConnection(reader.GetOutputPort()) # 流场输入
paths.SetSourceData(particle_dataset) # 接入带属性的粒子源
matida = vtk.vtkLagrangianMatidaIntegrationModel()
# 配置流场介质属性,示例为常温空气参数
matida.SetFlowDensity(1.204)
matida.SetFlowViscosity(1.81e-5)
paths.SetIntegrationModel(matida)
# 可选:配置积分步长、最大跟踪时间等参数
paths.SetStepFactor(0.5)
paths.SetMaximumIntegrationTime(10)
paths.Update()

3. 常见配置说明

  • 如果你需要适配其他积分模型,只需要按照模型要求的属性名添加对应的数组即可,属性名必须和模型定义的完全一致
  • 如果你的流场速度数组名不是默认的Velocity,可以调用paths.SetInputArrayToProcess(0, 0, 0, vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS, "你的速度数组名")指定
  • 随机属性的取值范围可以根据你的实际仿真场景调整,比如水雾粒子、粉尘粒子的直径密度范围差异很大

内容的提问来源于stack exchange,提问作者kal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:18:04