
[Sponsors] 
November 7, 2017, 01:22 
Neighboring cells in tetrahedral mesh

#1 
Member
Vishwesh Ravi Shrimali
Join Date: Aug 2017
Posts: 43
Rep Power: 6 
Hi!
I have made a solver which detects bubbles by processing alpha values in neighboring cells of a cell. The solver was able to detect bubbles perfectly fine in case of hexahedral mesh but since I had to use solidParticleCloud, I had to shift to tet mesh. Possibly because of different mesh shapes, the solver is not working now. To give an idea, refer to the output below: Code:
celli: 2039 Ln: 4(345369 345434 564382 634467) [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 celli: 18412 Ln: 4(260796 420035 573797 727185) [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 celli: 18414 Ln: 4(6960 189210 548341 707410) [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 celli: 18416 Ln: 4(425818 580563 592269 689665) [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 celli: 18420 Ln: 4(260822 419775 420033 523705) [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 celli: 18448 Ln: 3(16048 196727 778818) [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 celli: 18452 Ln: 4(667653 772748 772760 790930) [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 celli: 18457 Ln: 4(14174 362795 974648 974793) [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 [0] numFound = 0 celli: 18459 Does anyone have any idea how I can deal with this issue? I am using OF3.0.x. Thanks 

November 7, 2017, 01:29 

#2 
Member
Vishwesh Ravi Shrimali
Join Date: Aug 2017
Posts: 43
Rep Power: 6 
To give a further insight into the problem, please refer to the output below:
Code:
[3] alpha: 1 [3] cell index: 13133 [3] cell coordinates: (0.163688 0.101267 0.1049) [3] Cell ID: 13133 [3] L after appending: [3] 1(13133) [3] alpha: 1 [3] cell index: 13140 [3] cell coordinates: (0.161886 0.106077 0.105283) [3] Cell ID: 13140 [3] L after appending: [3] 2(13133 13140) [3] alpha: 1 [3] cell index: 14816 [3] cell coordinates: (0.162433 0.105709 0.0988331) [3] Cell ID: 14816 [3] L after appending: [3] 3(13133 13140 14816) [3] alpha: 1 [3] cell index: 14848 [3] cell coordinates: (0.162409 0.104484 0.094236) [3] Cell ID: 14848 [3] L after appending: [3] 4(13133 13140 14816 14848) [3] alpha: 1 [3] cell index: 14862 [3] cell coordinates: (0.160048 0.105785 0.0953162) [3] Cell ID: 14862 [3] L after appending: [3] 5(13133 13140 14816 14848 14862) [3] alpha: 1 [3] cell index: 16860 [3] cell coordinates: (0.148356 0.109793 0.106328) [3] Cell ID: 16860 [3] L after appending: [3] 6(13133 13140 14816 14848 14862 16860) [3] alpha: 1 [3] cell index: 16879 [3] cell coordinates: (0.147008 0.109767 0.107035) [3] Cell ID: 16879 [3] L after appending: [3] 7(13133 13140 14816 14848 14862 16860 16879) [3] alpha: 1 [3] cell index: 16883 [3] cell coordinates: (0.148723 0.108188 0.104843) [3] Cell ID: 16883 [3] L after appending: [3] 8(13133 13140 14816 14848 14862 16860 16879 16883) [3] alpha: 1 [3] cell index: 16910 [3] cell coordinates: (0.146382 0.109608 0.106518) [3] Cell ID: 16910 [3] L after appending: [3] 9(13133 13140 14816 14848 14862 16860 16879 16883 16910) [3] alpha: 1 [3] cell index: 19050 [3] cell coordinates: (0.141517 0.109738 0.0960398) [3] Cell ID: 19050 [3] L after appending: [3] 10(13133 13140 14816 14848 14862 16860 16879 16883 16910 19050) [3] alpha: 1 [3] cell index: 19067 [3] cell coordinates: (0.141351 0.110091 0.0991054) 

November 7, 2017, 03:54 

#3 
Super Moderator
Tobias Holzmann
Join Date: Oct 2010
Location: Tussenhausen
Posts: 2,654
Blog Entries: 6
Rep Power: 48 
Hi Vishwesh,
FOAM gives you the possibility to get the ID`s of your cell neighbors directly (e.g. we need that information in the solvers too). You should be able to access the ID`s using the cellCells() function: Code:
const labelList& neighborCells = mesh.cellCells()[cellID]
__________________
Keep foaming, Tobias Holzmann 

November 7, 2017, 04:44 

#4  
Member
Vishwesh Ravi Shrimali
Join Date: Aug 2017
Posts: 43
Rep Power: 6 
Quote:
I am using that only. The only trouble I am having is that when I am using hex mesh and cellCells(), I am able to detect the cells belonging to a droplet by processing the alpha value of neighboring cells but when I am using tet mesh on the same geometry, it's showing that there are no neighboring cells having alpha > 0, which is not possible. 

November 7, 2017, 23:21 

#5 
Member
Vishwesh Ravi Shrimali
Join Date: Aug 2017
Posts: 43
Rep Power: 6 
Hi!
I tried printing the alpha values of the neighboring cells of various cellIDs which already have alpha.water 1. Here are the results (just a part of it. Rest of the results are exactly same with different celli, Ln and cellni) Code:
celli: 453512 Ln: 4(156990 283120 431180 453513) [0] cellni: 156990 alpha: 0 [0] numFound = 0 [0] cellni: 283120 alpha: 0 [0] numFound = 0 [0] cellni: 431180 alpha: 0 [0] numFound = 0 [0] cellni: 453513 alpha: 0 [0] numFound = 0 celli: 453513 Ln: 4(109571 453510 453512 471764) [0] cellni: 109571 alpha: 0 [0] numFound = 0 [0] cellni: 453510 alpha: 0 [0] numFound = 0 [0] cellni: 453512 alpha: 0 [0] numFound = 1 [0] cellni: 471764 alpha: 0 [0] numFound = 1 celli: 453515 Ln: 4(182847 283134 453514 738318) [0] cellni: 182847 alpha: 0 [0] numFound = 0 [0] cellni: 283134 alpha: 0 [0] numFound = 0 [0] cellni: 453514 alpha: 0 [0] numFound = 0 [0] cellni: 738318 alpha: 0 [0] numFound = 0 celli: 453789 Ln: 4(297385 297413 414867 456010) [0] cellni: 297385 alpha: 0 [0] numFound = 0 [0] cellni: 297413 alpha: 0 [0] numFound = 0 [0] cellni: 414867 alpha: 0 [0] numFound = 0 [0] cellni: 456010 alpha: 0 [0] numFound = 0 And the code that I am using to print the above output: Code:
forAll(Lnew,celli){ DynamicList<label> Ln(0); //Initialization if (DEBUG){ Info<<"celli: "<<Lnew[celli]<<endl; } Ln.append(mesh.cellCells()[Lnew[celli]]); if(DEBUG){ Info<<"Ln:"<<endl<<Ln<<endl; } int numFound=0; forAll(Ln, cellni){ //neighbors Pout<<"cellni: "<<Ln[cellni]<<" alpha: "<<alpha1[Ln[cellni]]<<endl; if(HT.found(Ln[cellni])){ numFound++; LnHT.append(Ln[cellni]); } Pout<<"numFound = " << numFound << endl; } 

November 8, 2017, 02:56 

#6 
Super Moderator
Tobias Holzmann
Join Date: Oct 2010
Location: Tussenhausen
Posts: 2,654
Blog Entries: 6
Rep Power: 48 
Hi,
so as far as I understand this, you could have cells as neighbors having alpha equal to zero or larger than that value? If I think about a droplet placed in a mesh, there are some cells (at the interface) which might have 0.4 and the neighbor cells might have zero or values larger than zero. I am sorry but I did not get the problematic?
__________________
Keep foaming, Tobias Holzmann 

November 8, 2017, 03:02 

#7  
Member
Vishwesh Ravi Shrimali
Join Date: Aug 2017
Posts: 43
Rep Power: 6 
Quote:
So basically, I should have some neighboring cells with alpha value more than 0.3. But after using cellCells, it looks as if I have no neighboring cell with alpha value not 0. I understand that cellCells should work properly, so there are a few possibilities I think where I am going wrong: 1. The geometry is wrong. It's the first time I used SALOME, so I might be wrong. But I don't think this is the case. I viewed my geometry and everything in Paraview and it looks okay. 2. Somehow the cellIDs are changing during runtime which I don't think is possible. 3. cellCells() is giving me incorrect neighboring cells or there is some issue related to it. Frankly speaking I have no clue what is the reason... 

November 9, 2017, 23:27 

#8 
Member
Vishwesh Ravi Shrimali
Join Date: Aug 2017
Posts: 43
Rep Power: 6 
I think I have found out the problem. It looks like the issue is with the parallel run which decomposes the domain and is causing some problems with either the cell index or something else.
I tried the same solver for domain without parallel run and it works fine. Any ideas what might the issue? Thanks 

November 10, 2017, 07:01 

#9 
Member
Rodrigo
Join Date: Mar 2010
Posts: 97
Rep Power: 14 
Check: did you try using globalIndex ? Here you have an example for the cell number "0" at every process (keep in mind that code is executed by every process simultaneously)
Code:
#include "globalIndex.H" ... globalIndex globalNumbering (mesh.nCells()); ... label localCellID (0); //Note that every process will have a different cell at the initial position //however, every process refers the 1st cell in his subdomain as ID "0" ... label globalCelllID = globalNumbering.toGlobal(localCellID); ... label localCellIDagain= globalNumbering.toLocal(globalCelllID); 

November 10, 2017, 07:06 

#10 
Member
Vishwesh Ravi Shrimali
Join Date: Aug 2017
Posts: 43
Rep Power: 6 
Thank you for the reply. I will definitely give it a shot. Now my query is how do I use global index to find out let's say alpha for some cell even if assume that the cell doesn't belong to the domain of the master processor that i am using for calculation. More details are here: Doubt about parallel processing


Tags 
lagrangian, tet mesh 
Thread Tools  Search this Thread 
Display Modes  


Similar Threads  
Thread  Thread Starter  Forum  Replies  Last Post 
decomposePar problem: Cell 0contains face labels out of range  vaina74  OpenFOAM PreProcessing  37  July 20, 2020 05:38 
Problem with divergence  TDK  FLUENT  13  December 14, 2018 06:00 
[snappyHexMesh] Number of cells in mesh don't match with size of cellLevel  colinB  OpenFOAM Meshing & Mesh Conversion  14  December 12, 2018 08:07 
[snappyHexMesh] sHM layer process keeps getting killed  MBttR  OpenFOAM Meshing & Mesh Conversion  4  August 15, 2016 03:21 
[snappyHexMesh] SnappyHexMesh for internal Flow  vishwa  OpenFOAM Meshing & Mesh Conversion  24  June 27, 2016 08:54 