CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > OpenFOAM Paraview & paraFoam

Paraview slice type - cylinder?

Register Blogs Members List Search Today's Posts Mark Forums Read

Like Tree12Likes

Reply
 
LinkBack Thread Tools Display Modes
Old   July 11, 2013, 07:18
Default
  #21
New Member
 
Christian Weiß
Join Date: Jul 2013
Posts: 4
Rep Power: 5
Nephi is on a distinguished road
hi
thanks for your reply. I´m going to try this.
meanwhile i got a hint to use the calculator filter to add an radius column to each point an then use the contour filter for only showing data at a certain radius.
after i got that i flattened the "slice" with an caltulater doing something like this
Code:
0*iHat+(asin(coordsY/(coordsX^2+coordsY^2)^(1/2))*(coordsX^2+coordsY^2)^(1/2))*jHat+coordsZ*kHat
this works verry well for me while i will never analyse more than a half cylinder because i just look at one blade.
with best regards
Christian
wyldckat likes this.
Nephi is offline   Reply With Quote

Old   July 22, 2013, 23:56
Default
  #22
Senior Member
 
wayne.zhang
Join Date: Mar 2009
Location: Shanghai, Shanghai, P.R.China
Posts: 307
Rep Power: 10
waynezw0618 is on a distinguished road
Send a message via MSN to waynezw0618 Send a message via Skype™ to waynezw0618
p, li { white-space: pre-wrap; } Hi
it works for me here.
try this

Code:
from paraview import vtk 
import numpy as np  
 
pdi = self.GetPolyDataInput() 
 
c2p=vtkCellDataToPointData() 
c2p.SetInputData(pdi) 
c2p.Update() 
pdi.GetPointData().AddArray(c2p.GetOutput().GetPointData().GetArray(0)) 
 
pdo =  self.GetPolyDataOutput() 
newPoints = vtk.vtkPoints() 
numPoints = pdi.GetNumberOfPoints() 
 
for i in range(0, numPoints): 
    coord = pdi.GetPoint(i) 
    x, y, z = coord[:3] 
    if x > 0: 
      r = np.sqrt(x*x+y*y) 
      t = np.arctan(x/y) + 0.5 * np.pi 
      if y < 0: 
         t = t + 1* np.pi 
    else : 
      r = np.sqrt(x*x+y*y) 
      t = np.arctan(x/y) +  1.5* np.pi 
      if y > 0: 
        t = t - 1* np.pi 
    newPoints.InsertPoint(i, r, t, 12*z) 
pdo.SetPoints(newPoints) 
#pdo.GetCellData().AddArray(pdi.GetCellData().GetArray(0)) 
pdo.GetPointData().AddArray(pdi.GetPointData().GetArray(0))
here I export my result on a cyliner surface to a vtk file by "sample" utility. what I got is data in cell so I convert it to the point. so if you just load OF result directly, you just need to comment some of same
Attached Images
File Type: jpg CylindricalTransform.jpg (77.1 KB, 79 views)

Last edited by waynezw0618; July 23, 2013 at 04:56.
waynezw0618 is offline   Reply With Quote

Old   July 23, 2013, 04:57
Default this is the results
  #23
Senior Member
 
wayne.zhang
Join Date: Mar 2009
Location: Shanghai, Shanghai, P.R.China
Posts: 307
Rep Power: 10
waynezw0618 is on a distinguished road
Send a message via MSN to waynezw0618 Send a message via Skype™ to waynezw0618
here is the results from the code
Quote:
Originally Posted by waynezw0618 View Post
p, li { white-space: pre-wrap; } Hi
it works for me here.
try this

Code:
from paraview import vtk 
import numpy as np  
 
pdi = self.GetPolyDataInput() 
 
c2p=vtkCellDataToPointData() 
c2p.SetInputData(pdi) 
c2p.Update() 
pdi.GetPointData().AddArray(c2p.GetOutput().GetPointData().GetArray(0)) 
 
pdo =  self.GetPolyDataOutput() 
newPoints = vtk.vtkPoints() 
numPoints = pdi.GetNumberOfPoints() 
 
for i in range(0, numPoints): 
    coord = pdi.GetPoint(i) 
    x, y, z = coord[:3] 
    if x > 0: 
      r = np.sqrt(x*x+y*y) 
      t = np.arctan(x/y) + 0.5 * np.pi 
      if y < 0: 
         t = t + 1* np.pi 
    else : 
      r = np.sqrt(x*x+y*y) 
      t = np.arctan(x/y) +  1.5* np.pi 
      if y > 0: 
        t = t - 1* np.pi 
    newPoints.InsertPoint(i, r, t, 12*z) 
pdo.SetPoints(newPoints) 
#pdo.GetCellData().AddArray(pdi.GetCellData().GetArray(0)) 
pdo.GetPointData().AddArray(pdi.GetPointData().GetArray(0))
here I export my result on a cyliner surface to a vtk file by "sample" utility. what I got is data in cell so I convert it to the point. so if you just load OF result directly, you just need to comment some of same
Attached Images
File Type: jpg a.jpg (36.4 KB, 69 views)
waynezw0618 is offline   Reply With Quote

Old   October 23, 2013, 06:30
Default Slice with geometry
  #24
New Member
 
Abdalla
Join Date: Oct 2013
Posts: 7
Rep Power: 4
AS_allways is on a distinguished road
Hi all,
first of all, i am a beginner in using paraview.
here at work i have to do some postprocessing for a motor flow simulation. Actually i have to test how to slice with a geometry. I have seen and also successfully tried to cylinder-slice the flow using the programmable filter as shown at the beginning of this thread.
Since the programmable filter can not handle complex geometries i am wondering if i can use a CAD-Geometry (the bend cylinder is an .stl geometry file) to slice with.

best regards,
Abdalla
AS_allways is offline   Reply With Quote

Old   October 26, 2013, 10:42
Default
  #25
Super Moderator
 
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 9,659
Blog Entries: 39
Rep Power: 99
wyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nice
Greetings Abdalla and welcome to the forum!

The programmable filter is only used because the cylinder shape is not present in the "Slice" filter.

In your case, it's different and somewhat easier to do. Simply load up both data sets (the CFD results and the slice surface) and use the "Resample with DataSet" filter.

I've finished just now writing the following post, which explains in more detail how to do this: Mapping in ParaView post #4

Best regards,
Bruno
__________________
wyldckat is offline   Reply With Quote

Old   February 11, 2014, 10:18
Default Get time in a Programmable Filter paraview 3.14
  #26
New Member
 
German Blesio
Join Date: Feb 2014
Posts: 2
Rep Power: 0
gerble is on a distinguished road
Hi to everyone. I'm new in Paraview (start learning this month for an intership) and I have some complications. I need to program a filter to change over time. I used
Code:
t = inputs[0].GetInformation().Get(vtk.vtkDataObject.DATA_TIME_STEP()
in paraview 3.98. But in paraview 3.14 doesn't work and I couldn't found a way of fixing this "mistake". The reason for using paraview 3.14 is that I need to clip a cylinder.

Thank you very much, and I'm sorry if I have any spelling/gramatical mistakes
gerble is offline   Reply With Quote

Old   February 11, 2014, 15:43
Default
  #27
Super Moderator
 
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 9,659
Blog Entries: 39
Rep Power: 99
wyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nice
Greetings gerble and welcome to the forum!

I don't have time to test this right now, but some time ago I wrote/updated this post: Annoying issue of automatic "Rescale to Data Range " with paraFoam/paraview 3.12 post #6

After some further developments on the topic, the resulting conclusion was that the only guaranteed way to get the time in all ParaView versions was to use this:
Code:
GetAnimationScene().TimeKeeper.Time
Problem is that this might depend on where it's being used. You might need to add this line to your code in the filter, before everything else:
Code:
from paraview.simple import *
Please let us know if either one of these worked.

Best regards,
Bruno
gerble likes this.
__________________
wyldckat is offline   Reply With Quote

Old   February 11, 2014, 23:50
Default
  #28
New Member
 
German Blesio
Join Date: Feb 2014
Posts: 2
Rep Power: 0
gerble is on a distinguished road
Unfortunatly it doesn't work out. I have tried in a Windows 7 system and in a Debian base computer. What happen is that when executing the paraview.simple import this messages appears: "<string>:1: SyntaxWarning: import * only allowed at module level" and the result of GetAnimationScene().TimeKeeper.Time is 0.0 . Before writing in this forum I tried another sentences that requieres this definition and this error always appears. If I don't write that sentece, if I only try to get the time an error appears informing that 'GetAnimationScene' is not defined.

On the other hand, I was thinking on define a variable in the python code so I can later modified through the "Animation View". It would consume more memory to make de animations (I think) but it will probably work equally to what I was trying. Is there a way of doing this? Sorry if I changed the issue of the Thread too much.

Thank you very much for your answer!

Last edited by gerble; February 12, 2014 at 12:47. Reason: spelling mistake
gerble is offline   Reply With Quote

Old   February 16, 2014, 13:10
Default
  #29
Super Moderator
 
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 9,659
Blog Entries: 39
Rep Power: 99
wyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nice
Hi German,

After doing some trial-and-error-and-research, this programmable filter seems to work in ParaView 3.12.0:
Code:
def GetUpdateTimestep(algorithm):
    """Returns the requested time value, or None if not present"""
    executive = algorithm.GetExecutive()
    outInfo = executive.GetOutputInformation(0)
    if not outInfo.Has(executive.UPDATE_TIME_STEPS()):
       return None
    return outInfo.Get(executive.UPDATE_TIME_STEPS(),0)
 

 # This is the requested time-step. This may not be exactly equal to the 
 # timesteps published in RequestInformation(). Your code must handle that
 # correctly
 req_time = GetUpdateTimestep(self)
 

 input = self.GetInputDataObject(0, 0)
 inp_copy = input.NewInstance()
 inp_copy.ShallowCopy(input)
 inp_copy.UnRegister(None)
 cutter = vtk.vtkCutter()
 transf = vtk.vtkTransform()
 transf.RotateX(90)
 cyl = vtk.vtkCylinder()
 cyl.SetCenter(0,0,0)
 cyl.SetRadius(0.1*(0.5+req_time))
 cyl.SetTransform(transf)
 cutter.SetCutFunction(cyl)
 cutter.SetInput(inp_copy)
 cutter.Update()
 self.GetOutputDataObject(0).ShallowCopy(cutter.GetOutputDataObject(0))
It's based on these sources of information:
The "req_time" variable is the current time snapshot.


As for global variables, they simply don't work, because the Python workspaces are completely independent, namely the ones on each filter and on the main Python shell.

Best regards,
Bruno
__________________
wyldckat is offline   Reply With Quote

Old   May 26, 2014, 08:07
Default
  #30
New Member
 
Christoph Rosebrock
Join Date: Jun 2010
Posts: 1
Rep Power: 0
CROS is on a distinguished road
Hello everyone,
I was looking for a possibility to create radial cuts and the solution presented by Bruno seemed to be a good solution. Using Paraview 4.1.0 I got the same error like akashjangid

Quote:
Originally Posted by akashjangid View Post
Traceback (most recent call last):
File "<string>", line 21, in <module>
File "<string>", line 14, in RequestData
AttributeError: SetInput
Replacing
Code:
cutter.SetInput(inp_copy)
with

Code:
cutter.SetInputData(inp_copy)
keeps the code running in Paraview 4.1.0.

Thanks to all of you.

Christoph
elvis, wyldckat and Bahram like this.
CROS is offline   Reply With Quote

Old   August 7, 2014, 07:59
Default
  #31
New Member
 
Stefano Rolfo
Join Date: Aug 2014
Location: UK
Posts: 3
Rep Power: 4
mbgnfsr2 is on a distinguished road
hi Bruno
i have also try this scirpt, but in my case is not working. My output is in ensight format and i had to modify the script in order to deal with Multiblock Dataset. With the following script i don't get any error but the output is empty.

Here my code
Code:
def cut_cylinder(input_block, output_block):
    inp_copy = input_block.NewInstance()
    inp_copy.ShallowCopy(input_block.VTKObject)
    inp_copy.UnRegister(None)
    cutter = vtk.vtkCutter()
    transf = vtk.vtkTransform()
    transf.RotateX(90)
    cyl = vtk.vtkCylinder()
    cyl.SetCenter(0,0,0)
    cyl.SetRadius(0.04)
    cyl.SetTransform(transf)
    cutter.SetCutFunction(cyl)
    #cutter.SetInputConnection(inp_copy.GetOutputPort())
    cutter.SetInput(inp_copy)
    #cutter.SetInputData(inp_copy)
    #cutter.ShallowCopy(inp_copy) 
    cutter.Update()
    self.GetOutputDataObject(0).ShallowCopy(cutter.GetOutputDataObject(0))
    #output_block.ShallowCopy(cutter.GetOutputDataObject(0))


#============================================================================================
from paraview import vtk
from paraview.vtk.dataset_adapter import MultiCompositeDataIterator 
import math
from paraview.numpy_support import vtk_to_numpy
from paraview.vtk.dataset_adapter import numpyTovtkDataArray, vtkDataArrayToVTKArray
import numpy as np

iter = MultiCompositeDataIterator([inputs[0], output])

for input_block, output_block in iter: 
    cut_cylinder(input_block,output_block)
If i change from

Code:
cutter.SetInput(inp_copy)
to
Code:
cutter.SetInputData(inp_copy)
i simply get the parent geometry, but not the cut.
Does anyone know how i can make this script working.

Thanks very much

Stefano


I get

Last edited by wyldckat; August 11, 2014 at 10:33. Reason: [QUOTE] -> [CODE]
mbgnfsr2 is offline   Reply With Quote

Old   August 16, 2014, 13:01
Default
  #32
Super Moderator
 
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 9,659
Blog Entries: 39
Rep Power: 99
wyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nice
Greetings Stefano and welcome to the forum!

Can you provide a small example file with which I can reproduce this error?

In addition, I suggest that you use the "Merge Blocks" filter before applying this particular programmable filter, so that it makes it easier to at least test this programmable filter.

Beyond this, I suspect the problem is that you did not properly calibrate the settings for the position of the cylinder, namely these values were not changed:
Code:
transf.RotateX(90)
cyl.SetCenter(0,0,0)
cyl.SetRadius(0.04)
Best regards,
Bruno
__________________
wyldckat is offline   Reply With Quote

Old   August 18, 2014, 13:30
Default
  #33
New Member
 
Stefano Rolfo
Join Date: Aug 2014
Location: UK
Posts: 3
Rep Power: 4
mbgnfsr2 is on a distinguished road
Dear Bruno
thanks very much for your replay. I check the centre, radius and axis and all are ok (The axis is z and the radius should be between 0.029 and 0.05).
I also try to use the filter merge block and after i applied your filter that posted at the top and still the result is the same of the input with no cut.
I manage to get something similar to what i was looking for using a coordinate transformation from Cartesian to cylindrical and after using the plane cut on the new geometry. but, in any case, would be nice to have also this filter working.
In attachment the small case as you have requested and if you manage to get something let me know. In the input there is only the mesh, but no variables.
Just to be clear at the moment i'm using Paraview 4.0 and i don’t know if the version is the source of the problem.
Thanks very much for your help

Best wishes

Stefano
Attached Files
File Type: zip SmallInput.zip (8.7 KB, 3 views)
mbgnfsr2 is offline   Reply With Quote

Old   November 13, 2014, 08:51
Default
  #34
New Member
 
Jacopo De Amicis
Join Date: Mar 2012
Posts: 2
Rep Power: 0
deandrade is on a distinguished road
Hello everybody,

have you managed to find a solution for this problem in version 4.0?

I have the same problem as Stefano, changing that line makes the script work but it gives the parent geometry back.

Cheers!
deandrade is offline   Reply With Quote

Old   December 2, 2014, 12:35
Default
  #35
New Member
 
Lourenço SM
Join Date: Jul 2014
Location: Lisboa, Portugal
Posts: 21
Rep Power: 4
lourencosm is on a distinguished road
Is there a way to auto-update the time step function,
So that the programmable filter finds the new values in paraview "play mode"??

Thank you,
Lourenço
lourencosm is offline   Reply With Quote

Old   April 5, 2015, 12:20
Default
  #36
Super Moderator
 
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 9,659
Blog Entries: 39
Rep Power: 99
wyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nice
Greetings to all!

I'll answer to all 3 posts here:

------------

@Stefano:
Quote:
Originally Posted by mbgnfsr2 View Post
In attachment the small case as you have requested and if you manage to get something let me know. In the input there is only the mesh, but no variables.
My apologies for taking so very long to come back to your issue, but only today did I finally managed to take a look into this.

I tested with ParaView 4.1.0 with the following code and it worked just fine with the test case you provided:
Code:
input = self.GetInputDataObject(0, 0)
inp_copy = input.NewInstance()
inp_copy.ShallowCopy(input)
inp_copy.UnRegister(None)
cutter = vtk.vtkCutter()
transf = vtk.vtkTransform()
transf.RotateX(90)
cyl = vtk.vtkCylinder()
cyl.SetCenter(0,0,0)
cyl.SetRadius(0.04)
cyl.SetTransform(transf)
cutter.SetCutFunction(cyl)
cutter.SetInputData(inp_copy)
cutter.Update()
self.GetOutputDataObject(0).ShallowCopy(cutter.GetOutputDataObject(0))
Note: When I tried to use the "Merge Blocks" filter and then applied the programmable filter to it, then ParaView would crash

I've tested as well with ParaView 4.0.1 64-bit, which I downloaded as one of the pre-built packages from ParaView.org, and it worked as well.

Do notice that the critical detail here is that the radius needs to be changed from "0.4" to "0.04":
Code:
cyl.SetRadius(0.04)
I hope you managed to solve you problem a long time ago... it took me 8 months to get back to you

----------

@Jacopo:
Quote:
Originally Posted by deandrade View Post
have you managed to find a solution for this problem in version 4.0?

I have the same problem as Stefano, changing that line makes the script work but it gives the parent geometry back.
As shown in the code above, this code does work.
By the way, I hope you're using the "Programmable Filter", not the "Programmable Source".

----------

@Lourenço:
Quote:
Originally Posted by lourencosm View Post
Is there a way to auto-update the time step function,
So that the programmable filter finds the new values in paraview "play mode"??
Doesn't post #29 have the answer to your question?
If not, you'll have to provide more details, because I can't figure out what exactly you're looking for.

Best regards,
Bruno
__________________
wyldckat is offline   Reply With Quote

Old   April 25, 2016, 09:08
Default
  #37
Senior Member
 
Join Date: Jan 2013
Posts: 301
Rep Power: 6
openfoammaofnepo is on a distinguished road
Dear Bruno,

Which command here is for defining the axis direction of the cylindrical slice before is it flattened? Thanks.

Quote:
Originally Posted by wyldckat View Post
Greetings Alex and welcome to the forum!

It's possible, but it requires two things:
  1. That you are using ParaView 3.12 or 3.14, including the Python capabilities inside ParaView. The reason for this is that in ParaView 3.98, the necessary VTK filter is not present.
  2. That you use the "Programmable Filter" instead of the normal "Slice" filter. The reason for this is because the "Cylinder" is an implicit function that for some reason they forgot to include in ParaView
Reference: http://www.paraview.org/pipermail/pa...ry/016019.html

Instructions:
  1. Apply the "Programmable Filter" to the item you want to cut.
  2. Use the following code in the first text edit box:
    Code:
    input = self.GetInputDataObject(0, 0)
    inp_copy = input.NewInstance()
    inp_copy.ShallowCopy(input)
    inp_copy.UnRegister(None)
    cutter = vtk.vtkCutter()
    transf = vtk.vtkTransform()
    transf.RotateX(90)
    cyl = vtk.vtkCylinder()
    cyl.SetCenter(0,0,0)
    cyl.SetRadius(0.4)
    cyl.SetTransform(transf)
    cutter.SetCutFunction(cyl)
    cutter.SetInput(inp_copy)
    cutter.Update()
    self.GetOutputDataObject(0).ShallowCopy(cutter.GetOutputDataObject(0))
  3. Notes on important details:
    • The cylinder is infinite, because it's an implicit function.
    • "cyl.SetRadius(0.4)" - defines the radius.
    • "cyl.SetCenter(0,0,0)" - defines the centre of the cylinder.
    • The transformation is done with these lines of code:
      Code:
       transf = vtk.vtkTransform()
      transf.RotateX(90)
    • If more transformations are needed, see the list of methods here: http://www.vtk.org/doc/release/5.10/...Transform.html
Best regards,
Bruno
openfoammaofnepo is offline   Reply With Quote

Old   May 1, 2016, 19:14
Default
  #38
Super Moderator
 
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 9,659
Blog Entries: 39
Rep Power: 99
wyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nice
Quote:
Originally Posted by openfoammaofnepo View Post
Which command here is for defining the axis direction of the cylindrical slice before is it flattened? Thanks.
Quick answer:
Code:
transf.RotateX(90)
Try without it and you will see the default orientation. You can also use the "Cylinder" source: menu -> Sources -> Cylinder - to test things with it.
__________________
wyldckat is offline   Reply With Quote

Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
multiphaseInterFoam: timestep error by simulating a co-extrusion nozzle Quatschinsky OpenFOAM Running, Solving & CFD 7 March 27, 2014 06:08
interFoam/kOmegaSST tank filling with printStackError/Mules simpomann OpenFOAM Running, Solving & CFD 3 February 17, 2014 18:06
Need help with boundary conditions: open to atmosphere Wolle OpenFOAM 2 April 11, 2011 07:32
cgnsToFoam problems with "QUAD_4" cells lentschi OpenFOAM Meshing & Mesh Conversion 1 March 9, 2011 05:49
buoyantSimpleRadiationFoam msarkar OpenFOAM 0 February 15, 2010 07:22


All times are GMT -4. The time now is 18:07.