|
[Sponsors] |
Field value inside a boundary condition class |
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
April 13, 2010, 16:12 |
Field value inside a boundary condition class
|
#1 |
Member
Pablo Caron
Join Date: Nov 2009
Location: Buenos Aires, Argentina
Posts: 75
Rep Power: 17 |
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 |
|
April 13, 2010, 23:58 |
|
#2 |
Senior Member
|
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 |
|
April 14, 2010, 10:52 |
|
#3 |
Member
Pablo Caron
Join Date: Nov 2009
Location: Buenos Aires, Argentina
Posts: 75
Rep Power: 17 |
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 |
|
April 14, 2010, 11:04 |
|
#4 |
Member
Cedric Van Holsbeke
Join Date: Dec 2009
Location: Belgium
Posts: 81
Rep Power: 17 |
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(); |
|
April 14, 2010, 11:48 |
Boundary Condition Using Information from Opposite Face
|
#5 |
Member
Matthew J. Churchfield
Join Date: Nov 2009
Location: Boulder, Colorado, USA
Posts: 49
Rep Power: 19 |
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 |
|
April 14, 2010, 17:23 |
|
#6 | |
Member
Pablo Caron
Join Date: Nov 2009
Location: Buenos Aires, Argentina
Posts: 75
Rep Power: 17 |
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:
|
||
April 14, 2010, 23:48 |
|
#7 | |
Senior Member
|
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 |
||
April 16, 2010, 10:38 |
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: 19 |
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()]; } |
|
July 27, 2010, 07:04 |
|
#9 |
Member
George Pichurov
Join Date: Jul 2010
Posts: 52
Rep Power: 16 |
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 08:58. |
|
October 1, 2015, 13:00 |
|
#10 | ||
Member
Xinguang Wang
Join Date: Feb 2015
Posts: 45
Rep Power: 11 |
Quote:
I follow your code, and write a code to test if it could work or not: Quote:
|
|||
October 1, 2015, 13:44 |
|
#11 |
Member
Xinguang Wang
Join Date: Feb 2015
Posts: 45
Rep Power: 11 |
I figure it out, just delete one patch from opposingFaceLabel(facei+patch.patch.start(),mesh. faces());
Sorry to trouble you. |
|
September 11, 2016, 08:14 |
|
#12 | ||||
Member
Lee Jung Hoo
Join Date: Dec 2015
Posts: 37
Rep Power: 11 |
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!! Last edited by Jung hoo; September 11, 2016 at 12:07. |
|||||
May 22, 2017, 19:23 |
Access specific boundaries
|
#13 |
Member
Sugajen
Join Date: Jan 2012
Location: Tempe, USA
Posts: 52
Rep Power: 14 |
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?
|
|
May 24, 2018, 18:06 |
how to get field value in mesh two layers of cells inward from the boundary?
|
#14 | |
New Member
Hao Zeng
Join Date: Mar 2017
Posts: 8
Rep Power: 9 |
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 |
||
October 17, 2022, 10:40 |
|
#15 | |
Senior Member
Giles Richardson
Join Date: Jun 2012
Location: Cambs UK
Posts: 102
Rep Power: 14 |
that's been very useful - thanks
Quote:
|
||
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Boundary Conditions | Thomas P. Abraham | Main CFD Forum | 20 | July 7, 2013 06:05 |
inlet velocity boundary condition | murali | CFX | 5 | August 3, 2012 09:56 |
Airfoil boundary condition | Frank | Main CFD Forum | 1 | April 21, 2008 19:36 |
[Commercial meshers] Trimmed cell and embedded refinement mesh conversion issues | michele | OpenFOAM Meshing & Mesh Conversion | 2 | July 15, 2005 05:15 |
meshing F1 front wing | Steve | FLUENT | 0 | April 17, 2003 13:37 |