CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > OpenFOAM Programming & Development

Cell size (x,y,z)

Register Blogs Members List Search Today's Posts Mark Forums Read

Like Tree10Likes
  • 4 Post By ngj
  • 6 Post By Armin

Reply
 
LinkBack Thread Tools Display Modes
Old   September 13, 2010, 14:59
Default Cell size (x,y,z)
  #1
New Member
 
Armin Gh.
Join Date: Sep 2010
Location: Aachen,Germany
Posts: 29
Rep Power: 6
Armin is on a distinguished road
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,
Armin is offline   Reply With Quote

Old   September 14, 2010, 04:39
Default
  #2
Senior Member
 
Laurence R. McGlashan
Join Date: Mar 2009
Posts: 370
Rep Power: 14
l_r_mcglashan will become famous soon enough
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.
__________________
Laurence R. McGlashan :: Website
l_r_mcglashan is offline   Reply With Quote

Old   September 14, 2010, 06:11
Default
  #3
New Member
 
Armin Gh.
Join Date: Sep 2010
Location: Aachen,Germany
Posts: 29
Rep Power: 6
Armin is on a distinguished road
Hi l_r_mcglashan

thanks for the reply, I will look it up in Doxygen, then I would keep ya posted later today
Armin is offline   Reply With Quote

Old   September 14, 2010, 06:17
Default
  #4
New Member
 
Armin Gh.
Join Date: Sep 2010
Location: Aachen,Germany
Posts: 29
Rep Power: 6
Armin is on a distinguished road
Quote:
Originally Posted by l_r_mcglashan View Post
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
Armin is offline   Reply With Quote

Old   September 14, 2010, 09:34
Default
  #5
New Member
 
Armin Gh.
Join Date: Sep 2010
Location: Aachen,Germany
Posts: 29
Rep Power: 6
Armin is on a distinguished road
Quote:
Originally Posted by l_r_mcglashan View Post
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 I looked up the things you told but , I cant get a hang of it!
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??
Armin is offline   Reply With Quote

Old   September 14, 2010, 09:44
Default
  #6
Senior Member
 
Laurence R. McGlashan
Join Date: Mar 2009
Posts: 370
Rep Power: 14
l_r_mcglashan will become famous soon enough
If you click through the documentation you'll find the cell volume calculation in the function:
Code:
Foam::primitiveMesh::makeCellCentresAndVols
I assume your grid is made up of lots of squares/cubes? What exactly are you trying to calculate?
__________________
Laurence R. McGlashan :: Website
l_r_mcglashan is offline   Reply With Quote

Old   September 14, 2010, 10:38
Default
  #7
New Member
 
Armin Gh.
Join Date: Sep 2010
Location: Aachen,Germany
Posts: 29
Rep Power: 6
Armin is on a distinguished road
Quote:
Originally Posted by l_r_mcglashan View Post
If you click through the documentation you'll find the cell volume calculation in the function:
Code:
Foam::primitiveMesh::makeCellCentresAndVols
I assume your grid is made up of lots of squares/cubes? What exactly are you trying to calculate?

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
Armin is offline   Reply With Quote

Old   September 14, 2010, 10:46
Default
  #8
Senior Member
 
Laurence R. McGlashan
Join Date: Mar 2009
Posts: 370
Rep Power: 14
l_r_mcglashan will become famous soon enough
Ok, why do you need the dimensions of the cell? Are the centres/faces not enough?
__________________
Laurence R. McGlashan :: Website
l_r_mcglashan is offline   Reply With Quote

Old   September 14, 2010, 11:27
Default
  #9
New Member
 
Armin Gh.
Join Date: Sep 2010
Location: Aachen,Germany
Posts: 29
Rep Power: 6
Armin is on a distinguished road
Quote:
Originally Posted by l_r_mcglashan View Post
Ok, why do you need the dimensions of the cell? Are the centres/faces not enough?
the code needs it to specify if the individual cells are actually in the gas or liquid phase. These are the cells which are at the gas-liquid interface.

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.
Armin is offline   Reply With Quote

Old   September 14, 2010, 11:47
Default
  #10
ngj
Senior Member
 
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Rotterdam, The Netherlands
Posts: 1,592
Rep Power: 24
ngj will become famous soon enoughngj will become famous soon enough
Hi Armin

What you need to do is the following:

Code:
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)
           pLobal[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
}
Please be aware that the above code has not been compiled. Further, the functionality you look for is not directly found in OF hence the above perhaps a bit cumbersome routine.

Best regards,

Niels
ngj is offline   Reply With Quote

Old   September 14, 2010, 12:45
Default
  #11
New Member
 
Armin Gh.
Join Date: Sep 2010
Location: Aachen,Germany
Posts: 29
Rep Power: 6
Armin is on a distinguished road
Quote:
Originally Posted by ngj View Post
Hi Armin

What you need to do is the following:

Code:
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)
           pLobal[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
}
Please be aware that the above code has not been compiled. Further, the functionality you look for is not directly found in OF hence the above perhaps a bit cumbersome routine.

Best regards,

Niels


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 }
Armin is offline   Reply With Quote

Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Superlinear speedup in OpenFOAM 13 msrinath80 OpenFOAM Running, Solving & CFD 18 March 3, 2015 06:36
OF 1.6 | Ubuntu 9.10 (64bit) | GLIBCXX_3.4.11 not found piprus OpenFOAM Installation 22 February 25, 2010 14:43
fluent add additional zones for the mesh file SSL FLUENT 2 January 26, 2008 12:55
Trimmed cell and embedded refinement mesh conversion issues michele OpenFOAM Other Meshers: ICEM, Star, Ansys, Pointwise, GridPro, Ansa, ... 2 July 15, 2005 04:15
Warning 097- AB CD-adapco 6 November 15, 2004 05:41


All times are GMT -4. The time now is 01:58.