【问题标题】:writing plotOverline csv data from paraview for all time steps with python script使用 python 脚本从 paraview 为所有时间步骤编写 plotOverline csv 数据
【发布时间】:2015-05-14 14:46:10
【问题描述】:

我正在尝试使用 Paraview 中的 PlotOverLine 过滤器从一条线上提取所有时间步长的数据(作为 csv)。在 GUI 中,我加载了泡沫文件,使用 PlotOverLine 过滤器并将电子表格视图保存为 csv 文件,然后单击动画面板中的下一步按钮以加载下一个时间步,并对剩余的时间步重复上述操作线源的位置。(由于它的瞬态数据,我需要在固定位置的所有时间步长的数据。)我使用了以下脚本。

try: paraview.simple    
except: from paraview.simple import *
paraview.simple._DisableFirstRenderCameraReset()

my_foam = FindSource("case.foam") #loading my case file
SetActiveSource(my_foam)
tsteps = my_foam.TimestepValues # trying to read all time step directories
for TimeStepNum in range(0,len(tsteps)): # the loop?
  view = GetActiveView()
  view.ViewTime = tsteps[TimeStepNum]
  Render()

  PlotOverLine1 = PlotOverLine( Source="High Resolution Line Source" )
  DataRepresentation7 = Show()

  PlotOverLine1.Source.Point1 = [-0.052, 0.0, 0.0] #my fixed location
  PlotOverLine1.Source.Point2 = [0.0, 0.0, 0.0]
  source = PlotOverLine1
  writer = CreateWriter("file_%d.csv" %(TimeStepNum), source)
  writer.FieldAssociation = "Points"
  writer.UpdatePipeline()
  Render()
  del writer

假设如果我有 5 个时间步长,则脚本在 Paraview 上作为宏运行时会生成 file_0 到 file_5.csv,但是,file_1 到 file_4 的数据为“nan”,而不是实际值。其中,file_0 和 file_5 具有应有的值。我是新手,不知道哪里出错了!在绘制下一行数据之前不确定时间步长是否正在更新。任何帮助将不胜感激!应该有一种更简单的方法来更新时间步,然后在我猜的相同位置使用相同的过滤器。

【问题讨论】:

    标签: python csv scripting export-to-csv paraview


    【解决方案1】:

    我希望将输出数据作为单个 csv 文件,并且我希望获得速度“U”的单个分量。这需要更多的工作才能以数组格式获取数据,因此我将代码包含在此处以防它对任何人有用

    from paraview.simple import *
    import csv
    
    paraview.simple._DisableFirstRenderCameraReset()
    
    my_foam = FindSource("airFoil2D.OpenFOAM")
    SetActiveSource(my_foam)
    
    tsteps = my_foam.TimestepValues
    line = PlotOverLine( Source="High Resolution Line Source" )
    DataRepresentation7 = Show()
    
    line.Source.Point1 = [5, 4., 0.025]
    line.Source.Point2 = [18., 4.0, 0.025]
    line.Source.Resolution = 50
    component = 0
    
    with open('file.csv', 'w') as f:
        writer = csv.writer(f)
        for TimeStepNum in range(0,len(tsteps)):
            view = GetActiveView()
            view.ViewTime = tsteps[TimeStepNum]
            Render()
            fetchData = paraview.servermanager.Fetch(line)
            pointData = fetchData.GetPointData()
            fieldData = pointData.GetArray("U")
            U = [fieldData.GetComponent(i,component) for i in range(fieldData.GetSize()/3)]
            writer.writerow(U)
    

    【讨论】:

      【解决方案2】:

      我终于成功了。因此,上一个脚本的问题在于,一旦 PlotOverLine 完成,它就会进入下一个时间步,它试图在该行中选择一行。我只是通过最初创建一条固定线然后循环剩余的时间步来调整时间循环的发生方式(这应该是这样做的!)。 工作脚本:

      try: paraview.simple
      except: from paraview.simple import *
      paraview.simple._DisableFirstRenderCameraReset()
      
      my_foam = FindSource("case.foam")
      SetActiveSource(my_foam)
      
      tsteps = my_foam.TimestepValues
      PlotOverLine1 = PlotOverLine( Source="High Resolution Line Source" )
      DataRepresentation7 = Show()
      
      PlotOverLine1.Source.Point1 = [-0.052, 0.0, 0.0]
      PlotOverLine1.Source.Point2 = [0.0, 0.0, 0.0]
      
      source = PlotOverLine1
      
      for TimeStepNum in range(0,len(tsteps)):
          view = GetActiveView()
          view.ViewTime = tsteps[TimeStepNum]
          Render()
          writer = CreateWriter("file_%d.csv" %(TimeStepNum), source)
          writer.FieldAssociation = "Points"
          writer.UpdatePipeline()
          Render()
          del writer
      

      这很好用!

      【讨论】:

        【解决方案3】:

        我没有尝试查看您的脚本会发生什么,但如果您不需要在时间步骤之间更改任何内容,您只需设置一次管道,然后添加 writer.WriteAllTimeSteps = 1 。编写器将自行更新时间步长并保存结果(您不再需要 for 循环)。

        无论如何,您确定这不是数据问题吗?如果您将时间步长更新为 2,然后从 GUI 打开电子表格布局,预期的数据是那里还是 nan?

        【讨论】:

        • 是的,问题包含中间时间步长的数据。当我通过 GUI 执行相同操作并导出 csv 时,我可以看到它们。另外,我不确定在我的代码中插入writer.WriteAllTimeSteps = 1 的位置。
        猜你喜欢
        • 2015-10-31
        • 1970-01-01
        • 2019-08-26
        • 2020-09-11
        • 2013-05-10
        • 2020-09-25
        • 1970-01-01
        • 1970-01-01
        • 2010-11-12
        相关资源
        最近更新 更多