我有一个跨越几个表面的不连续位移的数据集(到目前为止,我在2D工作,所以这些是线,1D)。 它是作为PVDReader输入的(以防它对问题产生任何影响,我怀疑)。
有没有办法以编程方式创建一个新的Source,并沿着这些行跳转? 请注意,可能必须在具有较低维度的域上定义此新字段,请参阅上文。
到目前为止,我创建了过滤器PlotOverLine,位于略低于规定线的上方和略高于规定线的线上。 但是我不知道如何减去这两个并将它们放在线上的一个字段中。
备注:
数学描述:
不连续字段: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轴)上定义。
答案 0 :(得分:1)
根据我的理解,使用数据集进行重新采样应该可以解决问题。
如果您需要对其进行一些计算,则可以使用计算器或可编程滤波器。
答案 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)