CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM Meshing & Mesh Conversion (http://www.cfd-online.com/Forums/openfoam-meshing/)
-   -   Point inside Cell (http://www.cfd-online.com/Forums/openfoam-meshing/61604-point-inside-cell.html)

bobatpurdue November 3, 2008 08:49

Is there a quick way to determ
 
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?

jaswi November 3, 2008 09:11

Hi Robert Please try mes
 
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

bobatpurdue November 4, 2008 15:37

Thanks Jaswi for your help. H
 
Thanks Jaswi for your help. How do I make a pointField structure from several individual vectors?

jaswi November 4, 2008 16:02

Hi Robert Sorry I did not g
 
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 <type>.

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

bobatpurdue November 6, 2008 11:36

Thanks Jaswinder. It works we
 
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

jaswi November 7, 2008 11:20

Hi Robert I can give it a
 
Hi Robert

I can give it a try

Regards
Jaswi

bobatpurdue November 8, 2008 20:24

Thanks Jaswi. Is there anyway
 
Thanks Jaswi. Is there anyway to post a compressed file? If not, email me at "BobatPurdue" at "yahoo.com".

Thanks,
Bob

bobatpurdue November 11, 2008 21:32

I attached a short code that s
 
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<scalar>(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;
}


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