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

 March 27, 2011, 04:47 Find all adjacent cells #1 Senior Member   Gijsbert Wierink Join Date: Mar 2009 Posts: 383 Rep Power: 11 Dear all, I would like to do calculations for a certain cell that involves all adjacent cells. I know that with cellCells one can find the up, down, left, and right neighbours. Now, in an orthogonal 2D mesh, does anyone know of a smart way to access also the "diagonal" adjacent cells, i.e. northwest, northeast, southeast, and southwest neighbours? Thanks in advance! __________________ Regards, Gijs

 March 30, 2011, 09:26 Find all adjacent cells #2 Senior Member     ata kamyabi Join Date: Aug 2009 Location: Kerman Posts: 323 Rep Power: 11 I think you can use the adjacents of the adjacents. What do you think?

 March 31, 2011, 03:27 #3 Senior Member   Gijsbert Wierink Join Date: Mar 2009 Posts: 383 Rep Power: 11 Hi Ata, Thanks for your reply. If I use the adjacents of the adjacents, then I get the "west-west", "east-east", etc neighbours. I need the north-west, south-west, etc neighbours ... __________________ Regards, Gijs

 March 31, 2011, 03:37 #4 Senior Member     Anton Kidess Join Date: May 2009 Location: Germany Posts: 1,274 Rep Power: 23 The face numbering is done in a consistent way, and I think you can use that to your advantage. Let's say you found the right (west) neighbor of a cell, the face between them is west_cell_faces[0]. To get the west west neighbor, you can get the neighbor on the face west_cell_faces[1]. Have a look at U-127 and it should become more clear what I'm trying to say.

March 31, 2011, 03:51
#5
Senior Member

Gijsbert Wierink
Join Date: Mar 2009
Posts: 383
Rep Power: 11
Hi Anton,

Thanks for your idea. But I'm afraid that that won't solve it, unless I completely miss the point . I have been trying to prevent it, but now I'll have to share some of my drawing talent.

The cell in question is cell C (see drawing). Now, cellCells() will give cells N, E, S, and W. The cells I want are NE, SE, SW, and NW.

Quote:
 Let's say you found the right (west) neighbor of a cell, the face between them is west_cell_faces[0]
Ok, so this is the face between cells W and C, right?

Quote:
 To get the west west neighbor, you can get the neighbor on the face west_cell_faces[1].
But isn't this the same as what Ata said above? I need the "diagonal" neighbours in my fantastic drawing above . The trick might work if you could get the "upper face" of the W cell, i.e. the face between cell W and cell NW ...
Attached Images
 cells.jpeg (6.0 KB, 35 views)
__________________
Regards, Gijs

 March 31, 2011, 03:59 #6 Senior Member     Anton Kidess Join Date: May 2009 Location: Germany Posts: 1,274 Rep Power: 23 Sorry, I was thinking of far neighbor cells without diagonals But the same idea should be possible -> instead of taking faces 0 and 1, take faces 4 and 5. : Oh dear, not only did I misunderstand the original intent, but also I did mix up east and west. Shame on me

 March 31, 2011, 04:03 Find all adjacent cells #7 Senior Member     ata kamyabi Join Date: Aug 2009 Location: Kerman Posts: 323 Rep Power: 11 Hi Gijsbert Wierink I think the notrh adjacent of the west adjacent cell is the north-west adjacent of the original cell. Is it true? Best regards Ata

 March 31, 2011, 04:56 #8 Senior Member   Kathrin Kissling Join Date: Mar 2009 Location: Besigheim, Germany Posts: 134 Rep Power: 10 Hi Gijs, you could try (now only for one stencil or my head will break) labelList adjacent = mesh.cellCells()[cellI]; int size = adjacent.size(); //You need to now how many lists need to be defined now //For each set a label list PtrList adjOfAdj(size); for(int j; j diagonals(0); Assuming you have at least one entry So now you can loop over the single lists int counter = 0; for(int k; k

 April 1, 2011, 02:10 #9 Senior Member   Gijsbert Wierink Join Date: Mar 2009 Posts: 383 Rep Power: 11 Hi Kathrin, Many thanks for that! I made a method using findCell around a cell, but that is of course very slow if you mesh is bigger tha, say, 9 cells . Thanks for the input, I'll give it a try! __________________ Regards, Gijs

 April 8, 2011, 05:05 #10 Senior Member   Hrvoje Jasak Join Date: Mar 2009 Location: London, England Posts: 1,810 Rep Power: 25 Ask the cell for points that it touches and then as the points for cells - that will give you the second layer, but you will have duplicates. You can easily filter them by putting all cell indices into a labelHashSet and asking it for toc() = table of contents. Enjoy, Hrv __________________ Hrvoje Jasak Providing commercial FOAM/OpenFOAM and CFD Consulting: http://wikki.co.uk

 June 1, 2011, 10:17 #11 Senior Member   Andrea Ferrari Join Date: Dec 2010 Posts: 314 Rep Power: 10 Hi all, i was looking for somthing very similar to implement in my version of OF. Have a look at this post http://www.cfd-online.com/Forums/ope...ells-loop.html For my case is not really important a 3x3 stencil,i only need "some" cells around a given cell, so the mesh.cellCells() function is ok. At the moment i wrote this code: Code: ```forAll(mesh.cells(),cellI) { labelList adjI = mesh.cellCells()[cellI]; for(int j=0; j

 May 11, 2012, 06:26 #12 Member   Kim Yusik Join Date: Dec 2009 Posts: 39 Rep Power: 10 did anyone experience a problem when you try to access the neighbour cells in parallel computing? in my case I have a problem but I don't know how to fix it. I wrote a thread (link below) but no reponse so far. It will be very appreciated if someone gives any advice. Regards http://www.cfd-online.com/Forums/ope...computing.html

 October 3, 2012, 20:18 east and north cell values #13 Member   ,... Join Date: Apr 2011 Posts: 92 Rep Power: 7 Is there any way (any function) to get the value of a parameter at the east and north of a specific cell?

 October 6, 2012, 06:04 #14 Senior Member     ata kamyabi Join Date: Aug 2009 Location: Kerman Posts: 323 Rep Power: 11 Hi First find the neighbors and then compare they coordinates to find desired cells.

 May 5, 2014, 15:18 #15 Member   CHARLES Join Date: May 2013 Posts: 46 Rep Power: 6 It seems that cellCells can be used to access ALL cells around a specific cell... how would you access only the NORTH cell?

 May 5, 2014, 16:10 #16 Senior Member   Hrvoje Jasak Join Date: Mar 2009 Location: London, England Posts: 1,810 Rep Power: 25 Cheap shot. FOAM is a polyhedral mesh code and it uses face addressing on mixed cell types. There's no such thing as "north". I think you need to read my Thesis Some questions to help you think: - what is North on a tet cell? - ... and on a dodekahedron? Therefore, the whole compass framework does not work any more. For things like linear upwind and similar we use gradients (see the Gamma paper) and for others we adapt the numerics. For special algorithms, there is a function called oppositeFace, but beware: if your cell is not prismatic, the function will respond with an "I don't know". Hope this helps, Hrv __________________ Hrvoje Jasak Providing commercial FOAM/OpenFOAM and CFD Consulting: http://wikki.co.uk

 May 6, 2014, 12:25 #17 Member   CHARLES Join Date: May 2013 Posts: 46 Rep Power: 6 Thanks Hrv, you were helpful! I must say, I'm impressed with your dissertation. The point you make about the compass framework not being applicable to such element shapes makes sense. I am currently considering structured meshes with hexahedral elements so I thought cellCells could be used to project a cell's boundary value to all cells above it. Can you say more about oppositeFace or perhaps suggest a way to achieve what I am trying to do?

February 22, 2017, 10:55
#18
Member

Ali Shamooni
Join Date: Oct 2010
Posts: 42
Rep Power: 9
Quote:
 Originally Posted by gwierink Hi Anton, Thanks for your idea. But I'm afraid that that won't solve it, unless I completely miss the point . I have been trying to prevent it, but now I'll have to share some of my drawing talent. The cell in question is cell C (see drawing). Now, cellCells() will give cells N, E, S, and W. The cells I want are NE, SE, SW, and NW. Ok, so this is the face between cells W and C, right? But isn't this the same as what Ata said above? I need the "diagonal" neighbours in my fantastic drawing above . The trick might work if you could get the "upper face" of the W cell, i.e. the face between cell W and cell NW ...

Thanks Hrv

For anyone who is still interested this is the piece of code:

forAll(U,celli)
{
//if (celli==0)
//{
labelHashSet setNBCells(1);
labelList lCP = mesh.cellPoints(celli);

//Pout<<lCP<<endl;
forAll(lCP,pointi)
{
labelList lPC=mesh.pointCells(lCP[pointi]);
//Pout<<lPC<<endl;
setNBCells.insert(lPC);
}
//Pout<<setNBCells<<endl;
labelList NBCells=setNBCells.toc();

//}
}

 February 23, 2017, 18:27 #19 Senior Member   Hrvoje Jasak Join Date: Mar 2009 Location: London, England Posts: 1,810 Rep Power: 25 Caveat - this does not work properly across processor boundaries Tobi likes this. __________________ Hrvoje Jasak Providing commercial FOAM/OpenFOAM and CFD Consulting: http://wikki.co.uk

 Thread Tools Display Modes Linear Mode

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

 Similar Threads Thread Thread Starter Forum Replies Last Post AndTen OpenFOAM Meshing & Mesh Conversion 13 June 24, 2015 04:09 evgenii OpenFOAM Running, Solving & CFD 3 September 27, 2008 02:03 Thiyagarajandhayalan Siemens 2 March 21, 2008 05:26 Fabian CFX 2 November 21, 2002 12:14 Christian FLUENT 4 May 10, 2002 08:30

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