|
[Sponsors] |
May 31, 2011, 09:09 |
Cells loop
|
#1 |
Senior Member
Andrea Ferrari
Join Date: Dec 2010
Posts: 319
Rep Power: 17 |
Hi,
I need to perform a "special" loop over all the cells. For a given cell i need to know the value of a variable in the nearby cells (those cells that share one face with the given cell) and then replace the value of this variable in the given cell with an average through the cell and the neighboring cells. The best thing would be to have a 9x9 stencil around each cell, but to start is enough for me to have the value of this variable in the NORTH, SOUTH, EAST, WEST cells. For example if the variable is the pressure P, i would like to do something like this: p[cellI] = (p[cellI]+ p[cell_NORD] + p[cell_SOUTH] +p[cell_EAST] + p[cell_WEST])/5 Now, i know that using mesh.cellCell()[cellI] you can access the neighboring cells of the given cellI. Unfortunatly my c++ skills are not so good, so i do not know how to loop over the indices of neighbors. Any help is appreciated! and also if someone have an idea to incude easily also the diagonal cells in this sum (NE, SE, SW, NW). (of course using an orthogonal mesh) Thanks andrea |
|
May 31, 2011, 09:38 |
|
#2 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,903
Rep Power: 37 |
Hi Andrea
Try e.g. this, it has, however, not been test compiled. Code:
volScalarField pnew("pnew", p); const labelListList & cellCells = mesh.cellCells(); forAll( cellCells, celli ) { ccs = cellCells[celli]; forAll(ccs, ci ) { pnew += p[ccs[ci]]; } pnew[celli] /= (ccs.size() + 1.0); } Niels |
|
May 31, 2011, 11:47 |
|
#3 |
Senior Member
Andrea Ferrari
Join Date: Dec 2010
Posts: 319
Rep Power: 17 |
Hi Niels,
thanks for reply. I did it a little different but it works. something like that: Code:
scalarField pAdj(mesh.nCells(),scalar(0)); volScalarField pnew("pnew", p); scalar n = 3; for(int iter = 0; iter<n; iter++) { forAll(mesh.cells(),cellI) { labelList adjacent = mesh.cellCells()[cellI]; int size = adjacent.size(); for(int j=0; j<size; j++) { pAdj[cellI] += p[adjacent[j]]; } pnew[cellI] += pAdj[cellI]; pnew[cellI] /= size+1; } } Thanks again andrea |
|
June 1, 2011, 05:23 |
|
#4 |
Senior Member
Andrea Ferrari
Join Date: Dec 2010
Posts: 319
Rep Power: 17 |
Hi,
is there a way, given a certain list, to add other labels? Something like addToList. If yes, what is the syntax? (Suppose you have two lists, and wanting to put the values of the list 2 into the list 1). Thanks andrea |
|
October 3, 2012, 21:01 |
Values at east and north cell
|
#5 |
Member
,...
Join Date: Apr 2011
Posts: 92
Rep Power: 14 |
Hi FOAMERS
Is there any way (any function) to get the value of a parameter at the east and north of a specific cell? |
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
[Netgen] Import netgen mesh to OpenFOAM | hsieh | OpenFOAM Meshing & Mesh Conversion | 32 | September 13, 2011 06:50 |
[snappyHexMesh] snappyHexMesh won't work - zeros everywhere! | sc298 | OpenFOAM Meshing & Mesh Conversion | 2 | March 27, 2011 22:11 |
[snappyHexMesh] snappyHexMesh aborting | Tobi | OpenFOAM Meshing & Mesh Conversion | 0 | November 10, 2010 04:23 |
NACA0012 geometry/design software needed | Franny | Main CFD Forum | 13 | July 7, 2007 16:57 |
physical boundary error!! | kris | Siemens | 2 | August 3, 2005 01:32 |