|
[Sponsors] |
Can a solver change the type of a boundary/patch ? |
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
May 17, 2013, 06:17 |
Can a solver change the type of a boundary/patch ?
|
#1 |
Senior Member
HECKMANN Frédéric
Join Date: Jul 2010
Posts: 249
Rep Power: 16 |
Dear all,
For convenience I would like to create a solver (which is actually a simple tool) that need to change the type of a boundary. For example, I have the temperature field with an adiabatic wall (type zeroGradient) and I would like to change it to a fixedValue with the value of the face correspond o the zero gradient solution Before: Code:
FoamFile { version 2.0; format ascii; class volScalarField; location "0.1"; object T; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 0 0 1 0 0 0]; internalField nonuniform List<scalar> ... ... ... ... wall { type zeroGradient; } Code:
FoamFile { version 2.0; format ascii; class volScalarField; location "0.1"; object T; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 0 0 1 0 0 0]; internalField nonuniform List<scalar> ... ... ... ... wall { type fixedValue; value nonuniform List<scalar> 400 ( ... ... ... ) ; } Code:
volScalarField Tr // Create another field to avoid the self overwriting ( IOobject ( "Tr", runTime.timeName(), mesh ), mesh, dimensionedScalar("Tr", T.dimensions(), 0.0) ); Tr.boundaryField()[patchWallID] = T.boundaryField()[patchWallID]; T.boundaryField()[patchWallID] = Tr.boundaryField()[patchWallID]; Tr.write(); T.write(); Anybody knows how to do ? |
|
May 21, 2013, 04:38 |
|
#2 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,900
Rep Power: 37 |
Hi Fréderic,
I am not quite sure what you mean, but would it not be easier to have a custom boundary condition, which is derived from the mixed class? Then you can easily switch from zeroGradient to fixedValue during the simulation by a simple change in value of the keyword valueFraction. Kind regards Niels |
|
May 21, 2013, 04:46 |
|
#3 |
Senior Member
HECKMANN Frédéric
Join Date: Jul 2010
Posts: 249
Rep Power: 16 |
The boundary doesn't have to change during the simulation. I run a first simulation with a patch of type "zeroGradient" and later I want to run another simulation but this time the patch has to be of type "fixedValue".
When I say that a "solver" has to change the type it is actually wrong. What I need is more a "tool" than a solver. I don't run any calculation during this time, I only manipulate the files. Now I do: 1) Computation 1: mySolverFoam 2) I need to manually change the type of the patch by editing the files 3) Computation 2: mySolver2Foam What I want: 1) Computation 1: mySolverFoam 2) Automatically edit the files (by using a tool/solver) 3) Computation 2: mySolver2Foam I can try to create a Python tool that would do the job but I also do some extra treatment that only a "solver" can do by calling the turbulence model and returning some specific variables. |
|
May 21, 2013, 06:53 |
|
#4 |
Senior Member
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Copenhagen, Denmark
Posts: 1,900
Rep Power: 37 |
Okay, I see what your intentions are. As an example look in
Code:
src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/hCombustionThermo.C Code:
h_ ( IOobject ( "h", mesh.time().timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), mesh, dimensionSet(0, 2, -2, 0, 0), this->hBoundaryTypes() ) Kind regards Niels |
|
May 21, 2013, 06:56 |
|
#5 |
Senior Member
HECKMANN Frédéric
Join Date: Jul 2010
Posts: 249
Rep Power: 16 |
Thx, I get it now !
Indeed, the fourth argument is what I was looking for I will work on it tonight. |
|
June 24, 2021, 08:37 |
|
#6 |
Super Moderator
Tobias Holzmann
Join Date: Oct 2010
Location: Tussenhausen
Posts: 2,708
Blog Entries: 6
Rep Power: 51 |
Old topic but I want to ask if it is possible to change the patch types after we called the constructor. Searching Doxygen does not provide any function which I would be able to use for changing the boundary types after we created the GeometricField. To clarify:
Code:
myField_ ( IOobject ( "myField", mesh.time().timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE ), mesh, dimless ) I could work with pointers here which would give me the possibility to create the specificHumidity field at the right position (when we know the BC of the relativeHumidity field) but I am sure that we can change that fields even without using pointers. E.g., Code:
const wordList& patchTypes = relativeHumidity.boundaryField().types(); // Something such as: myField.changeBoundaryTypes() = patchTypes;
__________________
Keep foaming, Tobias Holzmann |
|
June 24, 2021, 11:14 |
|
#7 |
Super Moderator
Tobias Holzmann
Join Date: Oct 2010
Location: Tussenhausen
Posts: 2,708
Blog Entries: 6
Rep Power: 51 |
I will just answer my own question:
Code:
// Assign the same boundary conditions volScalarField::Boundary& specHumBf = specHum.boundaryFieldRef(); const volScalarField::Boundary& relHumBf = this->relHum_.boundaryField(); forAll(specHumBf, patchi) { specHumBf.set(patchi, relHumBf[patchi]); }
__________________
Keep foaming, Tobias Holzmann |
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Free jet simulation | msarkar | OpenFOAM Running, Solving & CFD | 39 | May 11, 2021 13:21 |
Higher order convection schemes with unstructured grids | vkrastev | OpenFOAM | 29 | April 5, 2018 03:23 |
interFoam/kOmegaSST tank filling with printStackError/Mules | simpomann | OpenFOAM Running, Solving & CFD | 3 | February 17, 2014 17:06 |
Need help with boundary conditions: open to atmosphere | Wolle | OpenFOAM | 2 | April 11, 2011 07:32 |
pipe flow with heat transfer | Fabian | OpenFOAM | 2 | December 12, 2009 04:53 |