Paraview使用字段中的跳转创建过滤器

时间:2018-01-31 06:51:14

标签: paraview

我有一个跨越几个表面的不连续位移的数据集(到目前为止,我在2D工作,所以这些是线,1D)。 它是作为PVDReader输入的(以防它对问题产生任何影响,我怀疑)。

有没有办法以编程方式创建一个新的Source,并沿着这些行跳转? 请注意,可能必须在具有较低维度的域上定义此新字段,请参阅上文。

到目前为止,我创建了过滤器PlotOverLine,位于略低于规定线的上方和略高于规定线的线上。 但是我不知道如何减去这两个并将它们放在线上的一个字段中。

备注

  1. 到目前为止,我正在2D工作(定义不连续的域是1D)。我的意思是在3D域(定义不连续的域是2D)的字段中也得到不连续性。
  2. 作为一个简单的例子(见下文),我选择了不连续的域:x轴,y = 0。我的意思是拥有一条任意线(在2D中)或平面(在3D中)。
  3. 如果不连续区域是任意曲线(2D)或曲面(3D),我会提供额外奖励。
  4. 数学描述

    不连续字段:u(x,y)

    不连续域:x轴,y = 0

    不连续域一侧的字段值:u(x +,0)

    不连续域另一侧的字段值:u(x - ,0)

    跳转到场:d(x)= u(x +,0) - u(x - ,0)

    字段u在2D域上定义。字段d在1D域(x轴)上定义。

3 个答案:

答案 0 :(得分:1)

根据我的理解,使用数据集进行重新采样应该可以解决问题。

  • 首先使用线源生成一行
  • 打开包含不连续U字段的2D数据集。
  • 在数据集上使用ressample和数据集,并使用行源作为源输入
  • 您现在拥有一条包含数据集中定义的字段的行

如果您需要对其进行一些计算,则可以使用计算器或可编程滤波器。

答案 1 :(得分:1)

如果我理解正确,您希望将u(x,y) 2D曲面中的不连续性绘制为一条线,并将u()中的跳转与d(x) = u(x+,0) - u(x-,0)

关联为一个字段

从理论上讲,应该可以使用可编程滤波器或开发一个ParaView滤波器,它可以利用您的滤波器PlotOverLine,并使用略高于和低于上下的线作为其第一个参数,并使用输出线作为最后一个参数(或创建它作为输出)。

不同的参数在数组inputs的PF脚本中公开。参数顺序的问题可以通过一个特殊的字段来解决' LineType'例如,表明哪个在上面,哪个在下面。

这样,您可以明确地计算字段u(x+,0)u(x-,0),然后跳转字段d(x)以最终将其与输出行相关联。

我很清楚,这更像是一个关于如何做到而不是真正答案的建议,但我想分享想法。

答案 2 :(得分:0)

我把一个可编程滤波器放在一起。 我不知道这是否是最有效的方法,但它确实有效。

programmableFilter1 = ProgrammableFilter(Input=[plotOverLineBot,plotOverLineTop])
programmableFilter1.Script = """
import vtk.util.numpy_support as ns
import numpy as np

input_bot = self.GetInputDataObject(0, 0);
input_top = self.GetInputDataObject(0, 1);
output = self.GetPolyDataOutput()
#output.ShallowCopy(input_bot)

npts_bot = input_bot.GetNumberOfPoints()
npts_top = input_top.GetNumberOfPoints()
if ( npts_bot == npts_top ) :
    print( "Number of points: " + str(npts_bot) )
    u_bot = input_bot.GetPointData().GetArray("displacement")
    u_top = input_top.GetPointData().GetArray("displacement")
    u_bot_np = ns.vtk_to_numpy(u_bot)
    u_top_np = ns.vtk_to_numpy(u_top)
    u_jump_np = np.subtract(u_top_np, u_bot_np)
    u_jump = ns.numpy_to_vtk(u_jump_np)
    u_jump.SetName("displacement jump");
    output.GetPointData().AddArray(u_jump)
else :
    pass
"""

programmableFilter1.RequestInformationScript = ''
programmableFilter1.RequestUpdateExtentScript = ''
programmableFilter1.PythonPath = ''
RenameSource("Programmable Filter - Jumps", programmableFilter1)