CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM (http://www.cfd-online.com/Forums/openfoam/)
-   -   Cell Handeling (http://www.cfd-online.com/Forums/openfoam/99368-cell-handeling.html)

 udiitm April 2, 2012 05:34

Cell Handeling

Hi,

I want to collect the cell information and the pressure at nearby cells with their x and y co-ordinates as follows:

Co- ordnates(X Y) ... Cell Value (Pressure)(P).... neighboring cells(Pressure)(p1,p1,p3,p4)

Please tell me how to extract these information?

Thanks & Regards,
Yudhast

 ngj April 2, 2012 05:39

Hi Yudhast

You can use the cellCells() member function in fvMesh, which returns the indices for the neighbouring cells.

E.g.

Code:

```label cellI( 0 ); // The cell you are considering const labelList & cellCells( mesh.cellCells()[cellI] ); // Pressure, p, in neighbouring cells: forAll(cellCells, celli ) {     Info << p[cellCells[celli]] << endl; }```
Kind regards,

Niels

 udiitm April 2, 2012 06:27

Quote:
 Originally Posted by ngj (Post 352635) Hi Yudhast You can use the cellCells() member function in fvMesh, which returns the indices for the neighbouring cells. E.g. Code: ```label cellI( 0 ); // The cell you are considering const labelList & cellCells( mesh.cellCells()[cellI] ); // Pressure, p, in neighbouring cells: forAll(cellCells, celli ) {     Info << p[cellCells[celli]] << endl; }``` Kind regards, Niels
Hi Niels,
Suppose I have to put a condition on the cell eg.

For all the cells
if X != 0

How to do this??

Regards,
Yudhast

 hawkeye321 October 3, 2012 20:42

east and north cell values

Is there any way (any function) to get the value of a parameter at the east and north of a specific cell?

 abe April 10, 2013 08:49

Hi Niels,

I would be thankful if you could help me. I want to add a loop right after solving the pressure equation to calculate a new pressure field based on:
newP(cell)=(30*P(cell) + p(neighbours) )/(30+No.neighbours)
Does the following work for it?

const vectorField& cCentre = mesh.C();
const labelListList& neighbour = mesh.cellCells();
double pTemp=0.0;
int i=0;

forAll(cCentre, celli)
{
labelList nCellID = neighbour[celli];

pTemp=0.0;
i=0;
forAll(nCellID,cellNe)
{
pTemp+=p[cellNe];
i+=1;
}

pTemp+=30*p[celli];
p[celli]=pTemp/(30+i);

}

 ngj April 10, 2013 09:51

Hi Abe,

Yes, it does look like it would produce the thing you are after; sort of!

First of all you are putting the computed value back into the field, which you are using as a source, so the final weighting cannot be predicted.

Secondly, this will only work for serial computations, as the weighting does not take the neighbouring cells on other processors into account.

Thirdly, the cellCells are only returning the cells, which have a face in common with the cell of interest. If you want all of the cells connected to the cell, i.e. also connected through a common point, then you would need to use pointCells and make a unique list of connected cells. Unique, because the pointCells information will give you multiple occurrences of the connected cell labels.

Fourthly. Are you really sure that this is what you want? Changing the pressure after its solution will essential/potentially ruin the pressure-velocity coupling.

Good luck,

Niels

 abe April 10, 2013 10:22