# [OpenFOAM] Obtain average pressure over a range of slices?

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

 April 11, 2013, 10:55 Obtain average pressure over a range of slices? #1 Member   Ken Join Date: Aug 2012 Posts: 66 Blog Entries: 1 Rep Power: 11 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

April 11, 2013, 11:45
#2
Assistant Moderator

Bernhard Gschaider
Join Date: Mar 2009
Posts: 4,209
Rep Power: 48
Quote:
 Originally Posted by Nucleophobe 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 ...)
__________________
Note: I don't use "Friend"-feature on this forum out of principle. Ah. And by the way: I'm not on Facebook either. So don't be offended if I don't accept your invitation/friend request

 April 11, 2013, 12:52 #3 Member   Ken Join Date: Aug 2012 Posts: 66 Blog Entries: 1 Rep Power: 11 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? manuc and cfd lover like this.

April 11, 2013, 13:11
#4
Assistant Moderator

Bernhard Gschaider
Join Date: Mar 2009
Posts: 4,209
Rep Power: 48
Quote:
 Originally Posted by Nucleophobe 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)
__________________
Note: I don't use "Friend"-feature on this forum out of principle. Ah. And by the way: I'm not on Facebook either. So don't be offended if I don't accept your invitation/friend request

 April 11, 2013, 13:43 #5 Member   Ken Join Date: Aug 2012 Posts: 66 Blog Entries: 1 Rep Power: 11 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()``` gschaider, wyldckat, caduqued and 3 others like this. Last edited by Nucleophobe; April 11, 2013 at 16:04. Reason: Fixed code

 October 16, 2017, 13:22 #6 New Member   Joseph Muskat Join Date: Oct 2017 Posts: 4 Rep Power: 5 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

 October 16, 2017, 14:29 #7 Member   Ken Join Date: Aug 2012 Posts: 66 Blog Entries: 1 Rep Power: 11 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

 October 17, 2017, 09:18 #8 New Member   Joseph Muskat Join Date: Oct 2017 Posts: 4 Rep Power: 5 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

October 29, 2020, 16:50
#9
Senior Member

Join Date: Jul 2019
Posts: 148
Rep Power: 4
Quote:
 Originally Posted by Nucleophobe 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.