Field value inside a boundary condition class
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 http://www.cfd-online.com/Forums/ope...ary-point.html http://openfoamwiki.net/index.php/Sn...value_at_point Can somebody help me? Thanks in advance Pablo |
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 |
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 |
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"); Code:
const fvMesh& mesh = patch().boundaryMesh().mesh(); |
Boundary Condition Using Information from Opposite Face
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 |
Hi Cedric and Junwei
I want to thank you. I could implement my new boundary condition and is working now! :D 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:
|
Quote:
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 |
Accessing internal field and mesh from within boundary condition
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 |
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. |
Quote:
I follow your code, and write a code to test if it could work or not: Quote:
|
I figure it out, just delete one patch from opposingFaceLabel(facei+patch.patch.start(),mesh. faces());
Sorry to trouble you. |
Hi, I'm trying to create my own boundary condition.
I'm modifying the Member Function from parabolicVelocityFvPatchVectorField.C(i.e, I chose parabolicVelocityFvPatchVectorField.C as the base) When I tried to read field values like U or p on the boundary member function, compiling was successfully done, but I get the error message as belows when I run "setFields" on an example case based on interFoam. Quote:
Quote:
Quote:
this is a part of Member Function: Quote:
Thank you in advance!! |
Access specific boundaries
I am trying to access only the z-direction boundaries of the Velocity field to set new boundary condition for the next timestep. Is there a way to do so ? I have separated the boundary fields in the input blockMeshDict file. But can we access it in the solver?
|
how to get field value in mesh two layers of cells inward from the boundary?
Quote:
I followed your code and it works! However, I want to get the field values from cells that 2 layers inward from the boundary. How can I access it? Thanks in advance. Hao |
that's been very useful - thanks
Quote:
|
All times are GMT -4. The time now is 09:21. |