# How to compute liquid volume of the NOT whole domain

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

 March 24, 2008, 23:17 Hi, I'd like to compute #1 Senior Member   shinji nakagawa Join Date: Mar 2009 Location: Japan Posts: 107 Blog Entries: 1 Rep Power: 17 Hi, I'd like to compute the liquid volume left in a restricted domain after an interFoam simulation. I'd like to know the liquid volume in the region of z < 1, for instance. I have found the thread "How to compute total liquid volume of the whole domain?" related to my question. http://www.cfd-online.com/OpenFOAM_D...tml?1184365098 The source code in the thread is quite impressive. However, I don't know how to limit the region with sum() function. Would you please give some advice or drop a hint to me?

 March 25, 2008, 15:05 Hi You can iterate over the #2 Senior Member   Join Date: Mar 2009 Posts: 248 Rep Power: 17 Hi You can iterate over the cells in the domain while checking if cellcentre.z() < 1.0 and if the condition satisfies then add the liquid in that cell to your running sum. hope that helps Regards Jaswi

 March 27, 2008, 23:53 Hi Jaswi Thank you very muc #3 Senior Member   shinji nakagawa Join Date: Mar 2009 Location: Japan Posts: 107 Blog Entries: 1 Rep Power: 17 Hi Jaswi Thank you very much for your advice. I'm gonna try to write short code, though I have to learn a bit more about OpenFOAM source code. Thanks, snakagawa

 June 25, 2008, 00:19 Hi, I added the following s #4 Senior Member   shinji nakagawa Join Date: Mar 2009 Location: Japan Posts: 107 Blog Entries: 1 Rep Power: 17 Hi, I added the following short code to calculate liquid volume in the specified region. ---------------- Info << " Liquid (whole domain): " << sum(mesh.V()*gamma) << endl; sumVol = 0; forAll(mesh.cells(),cellI) { if( mesh.C()[cellI].component(0) >= validXmin & mesh.C()[cellI].component(0) <= validXmax & mesh.C()[cellI].component(1) >= validYmin & mesh.C()[cellI].component(1) <= validYmax & mesh.C()[cellI].component(2) >= validZmin & mesh.C()[cellI].component(2) <= validZmax ) {sumVol = sumVol + mesh.V()[cellI]*gamma[cellI]; } } Info << " Liquid in specified region: " << sumVol << endl; Info << endl; ---------------- It works fine for a single processor calculation. With multi-processors, however, the calculated liquid volume in the specified region is not correct. Liquid volume in whole domain is correct. I think that my code have some problem in handling the coordinates in decomposed field. Would you please give some advice to modify the code? Thank you in advance, snakagawa

 June 25, 2008, 08:34 A reduce(sumVol,plusOp #5 Assistant Moderator   Bernhard Gschaider Join Date: Mar 2009 Posts: 4,225 Rep Power: 50 A reduce(sumVol,plusOp()); before the Info might solve that. Have a look elsewhere what it actually does. Bernhard ThorgrimmCFD likes this. __________________ 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