CFD Online Discussion Forums

CFD Online Discussion Forums (
-   OpenFOAM (
-   -   9 point laplacian (

Alucard November 25, 2011 20:10

9 point laplacian
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:


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,


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,

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,


All times are GMT -4. The time now is 06:27.