![]() |
Cell size (x,y,z)
Hi folks,
I'm trying to write an apllication on openfoam wich utilizes the surface compression to produce an initial condition as a wave in a two phase environment, in this code I need to call the individual cells in a loop and use their height, length and depth(x,y,z Dimensions) , The problem is, I don't seem to find the access function for that, the only thing I find is the V() access function which gives the volume of the cell. So in desperation , I am open to any suggestion. Thanks, |
You can get a list of vertices using mesh.points();
Have you looked at fvMesh, polyMesh and primitiveMesh in the doxygen pages? Between them there must be the functionality you're looking for. |
Hi l_r_mcglashan
thanks for the reply, I will look it up in Doxygen, then I would keep ya posted later today |
Quote:
thanks for the reply, I will look it up in Doxygen, then I would keep ya posted later today |
Quote:
It's weird because OpenFOAM should use the dimensions to calculate the volume of cell V(). I dont know how else could it do that???? any other suggestions?? |
If you click through the documentation you'll find the cell volume calculation in the function:
Code:
Foam::primitiveMesh::makeCellCentresAndVols |
Quote:
Yep that's right, it's actually just a box, but with an insane amount of cells. because it is needed to validate our calculations in next step of the work. as a initial condition a simple wave is being introduced to the interface of the water-air, and it would vibrate to become a line . the things is we have written a code already that puts the wave at the interface, but every time we change the Mesh we have to change the code with the new cell sizes. (it is something like setFieldsdict in dam break example) I just want to automate it so that it could change itself after every change in Mesh. Did I make it clear? :) I still haven't found any useful access function for the cell dim.:) Thanks |
Ok, why do you need the dimensions of the cell? Are the centres/faces not enough?
|
Quote:
respectively these cells would be assigned a number between 0 and 1. 0 for gas phase and 1 for liquid. So it's not enough to have the center, the hight of the cell gives us actually how much of the cell is placed in liquid or gas phase , and the number makes it understandable for OpenFOAM. |
Hi Armin
What you need to do is the following: Code:
const faceList & ff = mesh.faces();Best regards, Niels |
Quote:
Works like a charm, thanks a bunch . PS: Although for users who would use this code later,there is a minor dictation error. the correct one would be: const faceList & ff = mesh.faces(); const pointField & pp = mesh.points(); forAll ( mesh.C(), celli) { const cell & cc = mesh.cells()[celli]; labelList pLabels(cc.labels(ff)); pointField pLocal(pLabels.size(), vector::zero); forAll (pLabels, pointi) pLocal[pointi] = pp[pLabels[pointi]]; scalar xDim = Foam::max(pLocal & vector(1,0,0)) - Foam::min(pLocal & vector(1,0,0)); // And similar for yDim and zDim } |
| All times are GMT -4. The time now is 13:20. |