[Other] Point inside Cell

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

 November 3, 2008, 07:49 Point inside Cell #1 New Member   Robert Manning Join Date: Mar 2009 Posts: 12 Rep Power: 17 Is there a quick way to determine the volume of a cell that is cut by a surface? Also, is there a way to determine if an arbitrary point is in inside a cell?

 November 3, 2008, 08:11 Hi Robert Please try mes #2 Senior Member   Join Date: Mar 2009 Posts: 248 Rep Power: 18 Hi Robert Please try mesh.findCell(location); where location is a point defined as: point location(x y z); Once you have the label of the cell where point is located you can get its volume as well. Hope that helps Regards Jaswi

 November 4, 2008, 14:37 Thanks Jaswi for your help. H #3 New Member   Robert Manning Join Date: Mar 2009 Posts: 12 Rep Power: 17 Thanks Jaswi for your help. How do I make a pointField structure from several individual vectors?

 November 4, 2008, 15:02 Hi Robert Sorry I did not g #4 Senior Member   Join Date: Mar 2009 Posts: 248 Rep Power: 18 Hi Robert Sorry I did not get that question :-). Well as far as I know pointField is a field of points and field itself is a List of a . So if you have certain number of individual vectors then you can create a pointField of certain size as you would do for an array and then assign your vectors as the elements of array . The code might look something like this: pointField myField(size,vector::zero); myField[0] = vector1(x,y,z); myField[1] = vector2(x,y,z); and so on..... Please let me know if this doesn't works ... Hope that helps Regards Jaswi

 November 6, 2008, 10:36 Thanks Jaswinder. It works we #5 New Member   Robert Manning Join Date: Mar 2009 Posts: 12 Rep Power: 17 Thanks Jaswinder. It works well. I'm currently trying to debug a code that I wrote which initializes gamma based on an STL file. It is slightly different than "surfaceToCell" because it will set gamma to a fraction of the cell that is cut by the surface. It places hundreds of points within each cell that is cut by the surface. It then calculates the fraction that is interior using surfaceToPoint. However it seems that surfaceToPoint returns some false-negatives if the point is in the cell. Anyone willing to give me a hand? I can post or email you the code and STL file. Thanks, Bob

 November 7, 2008, 10:20 Hi Robert I can give it a #6 Senior Member   Join Date: Mar 2009 Posts: 248 Rep Power: 18 Hi Robert I can give it a try Regards Jaswi

 November 8, 2008, 19:24 Thanks Jaswi. Is there anyway #7 New Member   Robert Manning Join Date: Mar 2009 Posts: 12 Rep Power: 17 Thanks Jaswi. Is there anyway to post a compressed file? If not, email me at "BobatPurdue" at "yahoo.com". Thanks, Bob

 November 11, 2008, 20:32 I attached a short code that s #8 New Member   Robert Manning Join Date: Mar 2009 Posts: 12 Rep Power: 17 I attached a short code that sees if points are within a STL surface. It reads gamma.stl. However, there appears to be a bug. It reports that points are both interior and exterior to the surface when they are both inside the surface. Possible bug / limitation of the code / programmer error ? I can attach the gamma.stl if needed. Thanks, Bob ---- CODE ----- #include "argList.H" #include "Time.H" #include "fvMesh.H" #include "topoSetSource.H" #include "cellSet.H" #include "volFields.H" #include "triSurface.H" #include "Random.H" #include "triSurfaceSearch.H" using namespace Foam; int main(int argc, char *argv[]) { //Random Random rndGen(label(0)); // Temp variables scalar currentx; scalar currenty; scalar currentz; scalar randnum; // Point list pointField cellPoints(10,vector::zero); // Random point in cell vector currentpoint = vector::zero; forAll(cellPoints,pointsi) { randnum = rndGen.scalar01(); currentx = (randnum-0.5)*0.57735*2; randnum = rndGen.scalar01(); currenty = (randnum-0.5)*0.57735*2; randnum = rndGen.scalar01(); currentz = (randnum-0.5)*0.57735*2; currentpoint = Vector(currentx,currenty,currentz); cellPoints[pointsi] = currentpoint; } // Select Surface triSurface surf("gamma.stl"); triSurfaceSearch querySurf(surf); // determine if points inside surface boolList pointInside(querySurf.calcInside(cellPoints)); forAll(pointInside, pointI) { bool isInside = pointInside[pointI]; cout << cellPoints[pointI].x() << " " << cellPoints[pointI].y() << " " << cellPoints[pointI].z(); if (isInside) cout << " Inside\n"; else cout << " Outside\n"; } return 0; }

 April 25, 2019, 11:15 #9 Member   Join Date: Feb 2016 Posts: 41 Rep Power: 10 Did this ever get resolved? I am in need of the same utility but don't want to re-invent the wheel if this has already been done.

 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 OffTrackbacks are Off Pingbacks are On Refbacks are On Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post [Other] refineWallLayer Error Yuby OpenFOAM Meshing & Mesh Conversion 2 November 11, 2021 11:04 vaina74 OpenFOAM Pre-Processing 37 July 20, 2020 05:38 dralexpe Fluent UDF and Scheme Programming 7 May 17, 2018 08:26 luca1992 OpenFOAM 14 August 16, 2017 13:50 shrina OpenFOAM Running, Solving & CFD 10 October 3, 2013 14:38

All times are GMT -4. The time now is 09:29.