|
[Sponsors] |
Getting internalField values from a patchField |
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
January 31, 2013, 13:50 |
Getting internalField values from a patchField
|
#1 |
New Member
|
Dear Foamers,
I am trying to develop a 1-D heat transfer model. I have a source term in Laplacian Equation. This term is a function of time. I have defined a volscalarField(R) in createFields. For each run time I need to put the internalField values of this volscalarField(R) equal to the its values in one of the boundary patch. I mean R values in the whole domain are equal to its value on the specific boundary patch. I am looking forward hearing your advice. Your advice is appreciated in advance. Ali |
|
February 1, 2013, 21:55 |
|
#2 |
Senior Member
Fumiya Nozaki
Join Date: Jun 2010
Location: Yokohama, Japan
Posts: 266
Blog Entries: 1
Rep Power: 19 |
Hi Ali,
You can use the following code if the boundary value of R is constant on your specific boundary patch. Code:
// find the patch label label PatchID = mesh.boundaryMesh().findPatchID("your patch name"); label FaceID = 0; forAll(R, cellI) { R[cellI] = R.boundaryField()[PatchID][FaceID]; } change the FaceID. Hope that helps, Fumiya |
|
February 8, 2013, 11:58 |
|
#3 |
New Member
|
Dear fumiya,
Thank you so much for your post. It was very helpul. But there is a problem: I used the specfied code in my code. It works only for the first time step and It doesn't work for remaining time steps. I have put it in the time loop but unfortunately it works only for the first time step. It should be mentioned that there isn't any errors in compiling the code. Any advice is appreciated. Thanks, Ali |
|
February 15, 2013, 10:20 |
|
#4 |
Senior Member
Kyle Mooney
Join Date: Jul 2009
Location: San Francisco, CA USA
Posts: 323
Rep Power: 18 |
Hi Ali,
Do you have any more information other than 'it didn't work'? Is the internal field not updating? Is it crashing? |
|
February 22, 2013, 12:48 |
This problem has been solved!!
|
#5 |
New Member
|
Dear kmooney,
Thanks for your post. I solved this problem. I needed to read a variable from a text file(for example R) and then calculate a parameter in the domain in each point and in each time step. My model is a 1-D model and I thought the best way was to create a "volScalarField" and then put it equal to "R" in each time step because I wanted to calculate another parameter(for instance Rn) that is a function of "R". I have understood that this method hasn't been good and using the "interpolationTable" for time steps would be better. So I have used "interpolationTable" in my code and the mentioned problem was solved. Regards, Ali |
|
April 12, 2013, 17:02 |
|
#6 |
New Member
Giancarlo
Join Date: Apr 2013
Location: Milan
Posts: 21
Rep Power: 13 |
Hi all,
I have a similar problem. I have a patch named "fluid_to solid" in my mesh. In order to copy the values of a field in correspondence to this specific patch I have written the following code: Code:
forAll( TFluid[j].boundaryField(), patchi) { label patchID = fluidRegions[j].boundaryMesh().findPatchID("fluid_to_solid"); forAll( TFluid[j].boundaryField()[patchID], facei) { Tf[facei+1] = TFluid[j].boundaryField()[patchID][facei]; } } Can anyone help me? Regards Giancarlo |
|
April 13, 2013, 12:00 |
|
#7 | |
Senior Member
Kyle Mooney
Join Date: Jul 2009
Location: San Francisco, CA USA
Posts: 323
Rep Power: 18 |
Hi Giancarlo,
.internalField() returns cell centered values for any volume field. You might be mistaken if you are attempting to copy cell centered values to patch faces. Quote:
|
||
April 13, 2013, 14:42 |
|
#8 |
New Member
Giancarlo
Join Date: Apr 2013
Location: Milan
Posts: 21
Rep Power: 13 |
I kmooney I haven't been quite clear. I have a multi region mesh ( fluid and solid). The interface between these regions in named "fluid_to_solid".
I want to know the internalField value not for all cells in the fluid region, but only the value of cells located at interface. With the code that I post first I get the boundary value of a generic field for the cells of interest but my problem is the internal field. I hope that I was more clear now. Regards Giancarlo |
|
April 13, 2013, 15:13 |
|
#9 |
Senior Member
Ehsan
Join Date: Oct 2012
Location: Iran
Posts: 2,208
Rep Power: 27 |
hi where should add your first code?
|
|
November 30, 2013, 17:22 |
|
#10 | |
Senior Member
Join Date: Nov 2012
Posts: 171
Rep Power: 14 |
Dear fumiya,
I would like to store the wall heat flux from the wall boundary faces into the cell centers (the cell is the one the wall face belongs to) because I will use the wall heat flux as a source term in another governing equations. So the goal is to store the wall heat flux originally in the boundary Fields of the heat flux (volScalarField) to the internal Fields. In this case, non-zero heat flux should exist for those cells neighboring to solid walls but the internal cells should still be zero. Following the suggestions from you in the post, I get the following code. But using it I found that my goal is still not reached because I do not know why all the cell centers have the non-zero heat flux, which is not correct I think. Could you please me to have a look at the following lines, Thank you very much. // calculate the wall heat flux const surfaceScalarField::GeometricBoundaryField& patchHeatFlux = heatFlux.boundaryField(); forAll(wallHeatFlux.boundaryField(), patchi) { if(patchi == mesh.boundary().findPatchID("WALL")) { wallHeatFlux.boundaryField()[patchi] = patchHeatFlux[patchi]; label FaceID = 0; forAll(wallHeatFlux, cellI) { forAll(wallHeatFlux.boundaryField()[patchi], FaceID) { wallHeatFlux[cellI] = wallHeatFlux.boundaryField()[patchi][FaceID]; } } } } Quote:
Last edited by hz283; November 30, 2013 at 18:57. |
||
December 1, 2013, 02:45 |
|
#11 |
Senior Member
Fumiya Nozaki
Join Date: Jun 2010
Location: Yokohama, Japan
Posts: 266
Blog Entries: 1
Rep Power: 19 |
Hi hz283,
You might want to try the following code: Code:
forAll(mesh.boundary(), patchI) // patch loop { if(mesh.boundary()[patchI].name()=="WALL") { wallHeatFlux.boundaryField()[patchI] = patchHeatFlux[patchI]; forAll(mesh.boundary()[patchI], faceI) { wallHeatFlux[mesh.boundary()[patchI].faceCells()[faceI]] = wallHeatFlux.boundaryField()[patchI][faceI]; } } } Hope this helps, fumiya |
|
October 30, 2019, 08:29 |
|
#12 | |
Senior Member
Join Date: Jan 2012
Posts: 197
Rep Power: 14 |
Hi Fumiya
I have a similar problem that setting the internal field values in one mesh to another mesh. Those two meshes are completely identical, so interpolation is not needed at moment. I'm wondering how to write the forall loop properly. In the question from this thread, the boundary field value is set to be uniform in the internal field, which is slightly different to my question. Looking forward to hearing from you. Thanks in advance. Ke Quote:
|
||
Tags |
heat transfer, internalfields, laplacian |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Elementwise multiplication operator | johndeas | OpenFOAM Running, Solving & CFD | 3 | March 9, 2019 14:03 |
max node values exceed max element values in contour plot | jason_t | FLUENT | 0 | August 19, 2009 12:32 |
exact face values | RubenG | Main CFD Forum | 0 | June 22, 2009 12:09 |
strange node values @ solid/fluid interface - help | JB | FLUENT | 2 | November 1, 2008 13:04 |
A stupid question | luckyluke | OpenFOAM Running, Solving & CFD | 14 | August 13, 2007 05:25 |