CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM (http://www.cfd-online.com/Forums/openfoam/)
-   -   9 point laplacian (http://www.cfd-online.com/Forums/openfoam/94798-9-point-laplacian.html)

Alucard November 25, 2011 20:10

9 point laplacian
 
Goodmorning,
I'm trying to solve a PDE (ex: dT/dt=Lapl(T)) and I would try to access the 8 points close to a cell "i" in order to calculate a 9 point laplacian.
The idea it's to solve it in a esplicit way using a forAll loop on the internal mesh points of the domain.
The mesh is regular and the domain is a square (nothing complicated).
Can you please tell me, once that I start the farAll loop how to find the neighboors of (exemple) alpha[i]? and how they are ordered (N,S,E,W,NE,NW,SW and SE)?
thank you

ngj November 26, 2011 02:48

Hello and good morning to you

1. You can get all of the neighbours including the cell, cellI, itself by using the following:

Code:

const labelListList & cellPoints( mesh.cellPoints() );
const labelListList & pointCells( mesh.pointCells() );

label count(0);
const labelList & cps( cellPoints[cellI] );

forAll(cps, pointi)
    count += pointCells[cps[pointi]].size();

labelList allCellCells(count);
count = 0;

forAll(cps, pointi)
{
const labelList & pcs( pointCells[cellPoints[cellI]] );
forAll( pcs, celli)
allCellCells[count++] = pcs[celli];
}

// Do a sort and a unique to remove duplicates

2. You cannot be ensured any particular ordering at all, as the underlying mesh structure in OF is unstructured.

Good luck,

Niels

Alucard November 28, 2011 06:17

Thank you very much i try it (infact i solve a more complicated equation than the heat transfer one but I needed the 9 points stencil so your answer is really what I need)
--
Best regards,
Valerio

ngj November 28, 2011 06:28

Hi Valerio

Good. BTW: Note that the outlined code also works in 3D, which would give you the entire 27 cell stencil.

I typically use the std::sort and std::unique to truncate the list of cell labels.

Best regards,

Niels


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