CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM (https://www.cfd-online.com/Forums/openfoam/)
-   -   Cell Handeling (https://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,
Thanks for your reply..
Suppose I have to put a condition on the cell eg.

For all the cells
if X != 0
where X=interface.sigmaK()*fvc::grad(alpha1)

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);

}

Thank you in advance...

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

thank you for your complete answer.
I am going to simulate cavitation in a complex geometry, and I just want to create a smoother pressure field in first few iterations.
PS: thanks for your hint about parallel issue...


ABE


All times are GMT -4. The time now is 08:21.