CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   ParaView (https://www.cfd-online.com/Forums/paraview/)
-   -   [OpenFOAM] Obtain average pressure over a range of slices? (https://www.cfd-online.com/Forums/paraview/116033-obtain-average-pressure-over-range-slices.html)

Nucleophobe April 11, 2013 10:55

Obtain average pressure over a range of slices?
 
I am trying to post-process some data in an irregular geometry with internal flow.

I have created a range of x-normal slices, and would like to calculate the average pressure over each slice. However, when I apply the 'Integrate Variables' filter in paraview, I obtain the average pressure over the entire range instead of the average pressure over each slice.

I could of course manually move a single slice and write down data points, but this is tedious if I want the average at say 100 different x-positions.

Is there a faster way to do this?

Thanks!
-Nuc

gschaider April 11, 2013 11:45

Quote:

Originally Posted by Nucleophobe (Post 419903)
I am trying to post-process some data in an irregular geometry with internal flow.

I have created a range of x-normal slices, and would like to calculate the average pressure over each slice. However, when I apply the 'Integrate Variables' filter in paraview, I obtain the average pressure over the entire range instead of the average pressure over each slice.

I could of course manually move a single slice and write down data points, but this is tedious if I want the average at say 100 different x-positions.

Is there a faster way to do this?

Thanks!
-Nuc

In OpenFOAM the way to go would be a sampleSurface. I'm a bit ignorant and not sure whether there is a built-in utility in OF that does averaging on them (sample at least writes them out). I'd do it in swak4foam where you can do calculations on those (area weighted average pressure would be "sum(area()*p)/sum(area())"). The thing that swak does not solve is the 100 slices. But instead of tediously generating them by hand you could generate the definition of the 100 functionObjects via a script ... which stretches the definition of easy for most people ... I know (there is even something built into swak to do the generation on the fly ...)

Nucleophobe April 11, 2013 12:52

Hmmm.. This isn't exactly what I'm looking for. The advantage of doing this is in Paraview is that I can clip the geometry so that the slice only passes through the region in which I am interested.

I have been trying to accomplish my goal by:
1) Creating a slice, say at x = 0
2) Applying the 'Integrate Variables' filter to the slice
3) Animating the slice offset, so that it moves from x = 0 to x = 10 over 10 seconds
4) Applying 'Plot selection over time' to the result of 'Integrate Variables'

This ALMOST works. The variables in the 'Integrate Variables' table update during the animation as desired. However, the plot (step 4) does not work, and the data from the table is not saved during the animation.

Edit:
Basically I'm trying to do the same thing as what was discussed here:
http://www.paraview.org/pipermail/pa...er/019544.html
It looks like programming an extra filter is the best way to go?
Any ideas on how to save the results from 'Integrate Variables' at each animation time step?

gschaider April 11, 2013 13:11

Quote:

Originally Posted by Nucleophobe (Post 419936)
Hmmm.. This isn't exactly what I'm looking for. The advantage of doing this is in Paraview is that I can clip the geometry so that the slice only passes through the region in which I am interested.

I have been trying to accomplish my goal by:
1) Creating a slice, say at x = 0
2) Applying the 'Integrate Variables' filter to the slice
3) Animating the slice offset, so that it moves from x = 0 to x = 10 over 10 seconds
4) Applying 'Plot selection over time' to the result of 'Integrate Variables'

This ALMOST works. The variables in the 'Integrate Variables' table update during the animation as desired. However, the plot (step 4) does not work, and the data from the table is not saved during the animation.

Edit:
Basically I'm trying to do the same thing as what was discussed here:
http://www.paraview.org/pipermail/pa...er/019544.html
It looks like programming an extra filter is the best way to go?
Any ideas on how to save the results from 'Integrate Variables' at each animation time step?

"Programmable Filter" where you can have a small Python-program do whatever you want with the input (you'll need a Python-enabled Paraview for that anyway). And if you can do "whatever" then you could for instance append the data that comes in to a file. But don't ask me how to do it exactly. Last time I experimented with this is quite some time ago (and you'll probably have to erase the file before starting the animation)

Nucleophobe April 11, 2013 13:43

Got it:

Code:

pdi = self.GetInputDataObject(0,0) 
localAArray = pdi.GetCellData().GetArray("Area")
localPArray = pdi.GetCellData().GetArray("p")
localA = localAArray.GetTuple(0)[0]
localP = localPArray.GetTuple(0)[0]
fout = open("/home/myUserName/results.txt",'a')
print localA
print localP
data=str(localA)+'\t'+str(localP)+'\n'
fout.write(data) 
fout.close()


JMuskat October 16, 2017 13:22

Hello,

I'd like to apologize for posting on this older thread. It seems to be exactly what I'm trying to do, but I have a few questions.

I'm looking to generate ### slices (I have been using the slice offset feature in ParaView) and look at the Surface Flow through each of them. Instead of going through each slice and manually calculating flow > exporting to Excel > doing this ### of times, I'd like to get the Surface Flow through the set of slices--for each individual slice.

Has there been an addition of an easier way to do what this thread describes? I'm not getting the code to work for my case just yet. Thought I would reach out for some help!

Joseph

Nucleophobe October 16, 2017 14:29

Hi Joseph,

I'm not familiar with the "Surface Flow" filter, but if it outputs scalars, you should be able to create a "Programmable Filter" to export the results to a file relatively easily:


Code:

pdi = self.GetInputDataObject(0,0) 
localSurfaceFlowArray = pdi.GetCellData().GetArray("SurfaceFlowVarName")
localSurfaceFlow = localPArray.GetTuple(0)[0]
fout = open("/home/myUserName/results.txt",'a')
print localSurfaceFlow
data=str(localSurfaceFlow)+'\n'
fout.write(data) 
fout.close()

Each time the filter is applied/executed, values will be appended to the 'results.txt' file. So, if you animate the position of a slice, you can extract the outputs at each frame of the animation.

It's a bit of a hack, but it might work for you.

Alternatively, you could use the sample utility as others in this thread suggested.

-Nuc

JMuskat October 17, 2017 09:18

Hello Ken,

Thank you for advice. I'll keep at it and try this code. Hopefully I'll be able to get it to work!

Joseph

Bodo1993 October 29, 2020 16:50

Quote:

Originally Posted by Nucleophobe (Post 668108)
Hi Joseph,

I'm not familiar with the "Surface Flow" filter, but if it outputs scalars, you should be able to create a "Programmable Filter" to export the results to a file relatively easily:


Code:

pdi = self.GetInputDataObject(0,0) 
localSurfaceFlowArray = pdi.GetCellData().GetArray("SurfaceFlowVarName")
localSurfaceFlow = localPArray.GetTuple(0)[0]
fout = open("/home/myUserName/results.txt",'a')
print localSurfaceFlow
data=str(localSurfaceFlow)+'\n'
fout.write(data) 
fout.close()

Each time the filter is applied/executed, values will be appended to the 'results.txt' file. So, if you animate the position of a slice, you can extract the outputs at each frame of the animation.

It's a bit of a hack, but it might work for you.

Alternatively, you could use the sample utility as others in this thread suggested.

-Nuc

Hi, I am wondering where in the code you define the different levels of surfaces. Thanks.


All times are GMT -4. The time now is 20:13.