CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM (https://www.cfd-online.com/Forums/openfoam/)
-   -   9 point laplacian (https://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 06:27.