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

Field value inside a boundary condition class

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

Like Tree6Likes
  • 1 Post By su_junwei
  • 3 Post By CedricVH
  • 2 Post By mchurchf

Reply
 
LinkBack Thread Tools Display Modes
Old   April 13, 2010, 15:12
Post Field value inside a boundary condition class
  #1
Member
 
Pablo Caron
Join Date: Nov 2009
Location: Buenos Aires, Argentina
Posts: 73
Rep Power: 7
pcaron is on a distinguished road
Hello Forum,

I'm using OF-1.5-dev in openSUSE 11.2. I want to implement a boundary condition class which depends on a field value at a point.

I used the parabolicVelocity class as start point. I modified it to fix the boundary value according to different parameters and it works fine.

The next step is to read a field value at a point and use it to modify the boundary value.

I read several post, but I can't understand how to know a field value at a point. These are the posts I read

How to calculate the field value of a arbitrary point
http://openfoamwiki.net/index.php/Sn...value_at_point

Can somebody help me? Thanks in advance

Pablo
pcaron is offline   Reply With Quote

Old   April 13, 2010, 22:58
Default
  #2
Senior Member
 
su_junwei's Avatar
 
su junwei
Join Date: Mar 2009
Location: Xi'an China
Posts: 151
Rep Power: 10
su_junwei is on a distinguished road
Send a message via MSN to su_junwei
Hi Pablo
try the following code segment

point p(x,y,z) ;
label cellNo=mesh_.findCell(p);
//using the cell center value or make an interpolation
type value=Variable[cellNO];
If you want to do an interpolation, please see the following thread
http://www.cfd-online.com/Forums/ope...tml#post254038

regards,Junwei
hawkeye321 likes this.
su_junwei is offline   Reply With Quote

Old   April 14, 2010, 09:52
Post
  #3
Member
 
Pablo Caron
Join Date: Nov 2009
Location: Buenos Aires, Argentina
Posts: 73
Rep Power: 7
pcaron is on a distinguished road
Hi Junwei

thanks for your reply!

I read your idea before. The problem is that I want to do this evaluation inside a BC class, so I don't have any reference to mesh_ and Variable.

So, I think the improved question could be: How should I reference a Variable (like p or U) and mesh_ inside a BC class?

BTW: These are my first steps in OF programming.

Regards

Pablo
pcaron is offline   Reply With Quote

Old   April 14, 2010, 10:04
Default
  #4
Member
 
Cedric Van Holsbeke
Join Date: Dec 2009
Location: Belgium
Posts: 81
Rep Power: 7
CedricVH is on a distinguished road
You have the access member function const objectRegistry& db() const. Accessing for example U is done by the code:

Code:
const volVectorField& U = db().lookupObject<volVectorField>("U");
For accessing the mesh: when creating a boundary condition, you have access to the patch. You can thus access the mesh with:

Code:
const fvMesh& mesh = patch().boundaryMesh().mesh();
CedricVH is offline   Reply With Quote

Old   April 14, 2010, 10:48
Default Boundary Condition Using Information from Opposite Face
  #5
Member
 
Matthew J. Churchfield
Join Date: Nov 2009
Location: Boulder, Colorado, USA
Posts: 49
Rep Power: 8
mchurchf is on a distinguished road
Hello,

I have a related question. I am using OpenFOAM-1.6, and I want to set up a boundary condition on velocity that requires knowledge of the velocity at the face opposite the boundary face. Is there a straightforward way to do this from within a derived fvPatchFields class? Or will I have to access the entire velocity volume field from within that derived fvPatchFields class and use something like "oppositeCellFace"? If I need to do the latter, can someone give some guidance, please?

Thank you,

Matt
mchurchf is offline   Reply With Quote

Old   April 14, 2010, 16:23
Default
  #6
Member
 
Pablo Caron
Join Date: Nov 2009
Location: Buenos Aires, Argentina
Posts: 73
Rep Power: 7
pcaron is on a distinguished road
Hi Cedric and Junwei

I want to thank you. I could implement my new boundary condition and is working now!

BTW, Cedric, As I told you these are my first steps. I found very difficult to understand and/or find functions and classes in OF Oxygen help. Is there another place to find a more user friendly help?

Thanks for your help!

Pablo

Quote:
Originally Posted by CedricVH View Post
You have the access member function const objectRegistry& db() const. Accessing for example U is done by the code:

Code:
const volVectorField& U = db().lookupObject<volVectorField>("U");
For accessing the mesh: when creating a boundary condition, you have access to the patch. You can thus access the mesh with:

Code:
const fvMesh& mesh = patch().boundaryMesh().mesh();
pcaron is offline   Reply With Quote

Old   April 14, 2010, 22:48
Default
  #7
Senior Member
 
su_junwei's Avatar
 
su junwei
Join Date: Mar 2009
Location: Xi'an China
Posts: 151
Rep Power: 10
su_junwei is on a distinguished road
Send a message via MSN to su_junwei
Quote:
Originally Posted by mchurchf View Post
Hello,

I have a related question. I am using OpenFOAM-1.6, and I want to set up a boundary condition on velocity that requires knowledge of the velocity at the face opposite the boundary face. Is there a straightforward way to do this from within a derived fvPatchFields class?
Thank you,
Matt
Hi Matt

Is your "opposite boundary face" a boundary patch in your case? If it is, You can search the patch by its index or patch name.

label patchId=patch().boundaryMesh().lookupPatchID(patch Name);
and using the following code

const vectorField =U.boundaryField()[patchId];
.... // do your work

U can be obtained using credricVH's method mentioned above.(lookup using ObjectRegistry)

regards, Junwei
su_junwei is offline   Reply With Quote

Old   April 16, 2010, 09:38
Default Accessing internal field and mesh from within boundary condition
  #8
Member
 
Matthew J. Churchfield
Join Date: Nov 2009
Location: Boulder, Colorado, USA
Posts: 49
Rep Power: 8
mchurchf is on a distinguished road
Thank you all for your help,

I was able to implement my boundary condition as well. I used the following code to access the internal velocity field and the mesh two layers of cells inward from the boundary:

Code:
//  Set up access to the internal velocity field and mesh
    const volVectorField& U =
        db().objectRegistry::lookupObject<volVectorField>(UName_);
    const fvMesh& mesh = patch().boundaryMesh().mesh();

    forAll(patch(), facei)
    {
    // get global cell indices for cells adjacent to patch    
        label celli = patch().faceCells()[facei];

    // get global face indices for faces opposite patch face
    label oppFacei = mesh.cells()[celli].opposingFaceLabel(facei+patch().patch().start(),mesh.faces());

    // get coordinates of center of cell adjacent to patch (patch cells)
    vector cellCentreO = mesh.cellCentres()[mesh.owner()[oppFacei]];

    // get coordinates of center of cell on the side opposite the patch of
    // the patch cell
    vector cellCentreN = mesh.cellCentres()[mesh.neighbour()[oppFacei]];

    // get coordinates of center of face opposite the patch boundary face
    vector faceCentre  = mesh.faceCentres()[oppFacei];

    // get coordinates of center of patch boundary face;
    vector patchFaceCentre = mesh.faceCentres()[facei+patch().patch().start()];
    }
romant and mm.abdollahzadeh like this.
mchurchf is offline   Reply With Quote

Old   July 27, 2010, 06:04
Default
  #9
Member
 
George Pichurov
Join Date: Jul 2010
Posts: 39
Rep Power: 7
jorkolino is on a distinguished road
How can I access patch() function? I try to include it in my solver files with a compile error "patch is not defined in this scope". My wish is to inject a particle in each boundary cell of a patch. I have the code for particle generation, I just can not find the cell index for which to generate it.
I can not find the function lookupPatchID in the doxygen documentation, either. Though it may still work, I can not test it without first fixing the patch() error message.

Last edited by jorkolino; July 27, 2010 at 07:58.
jorkolino 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
Boundary Conditions Thomas P. Abraham Main CFD Forum 20 July 7, 2013 05:05
inlet velocity boundary condition murali CFX 5 August 3, 2012 08:56
Airfoil boundary condition Frank Main CFD Forum 1 April 21, 2008 18:36
Trimmed cell and embedded refinement mesh conversion issues michele OpenFOAM Other Meshers: ICEM, Star, Ansys, Pointwise, GridPro, Ansa, ... 2 July 15, 2005 04:15
meshing F1 front wing Steve FLUENT 0 April 17, 2003 12:37


All times are GMT -4. The time now is 18:15.