Cyclic BC for repeating geometries
Hi @ all,
I'm doing my bachelor thesis on a boundary condition for repeating geometries in OpenFOAM.
*** the aim ***
The cyclic boundary condition or anything alike shall be used on repeating geometries, e.g. a helical hollow fibre or a simple pipe. The smallest repeating section shall be used.
Inlet and outlet shall be coupled as: Everything that leaves the geometry at location x+dx and time t1 shall be put back into the geometry at location x and time t2.
In mathematical terms:
The aim is to reconstruct the local data of the n-th (at location x_n) repetition of the geometry by looking at the time data for t_n=x_n/u_0.
For the used geometry, a stationary parabolic profile should be gained after x>6*d.
*** the problem ***
In one sentence, the problem is, that I'm constantly losing energy by mantle friction and the applied cyclic coupling allows no continuous input of energy.
*** General assumptions ***
So far, the general assumptions are:
-Re<90 at all times
-simpleFoam as solver
-time-constant flow through inlet (so far, will change in latter process)
and of course
-periodic geometry, of which the smallest repeating section is meshed
*** Mesh ***
I'm running everything on a simple 3D pipe with d=1mm and l=1mm.
It is strictly oriented in direction of positive z.
The mantle is defined with an no slip demand.
The inlet and the outlet are of type cyclic and coupled as neighbourPatches.
Although the orientation of the inlet's and the outlet's face normal vector is antiparallel and checkMesh is fussing about it, the coupling works.
*** initial conditions ***
In order to start a simulation, I chose
while the outlet is demanded as
In order to "fill" the internal field with information, I made a so called preCase.
The mesh is the same, except that inlet and outlet carry the values described above and are _not_ coupled als cyclic neighbour patches.
This geometry is the calculated for 0.1s using simpleFoam as solver.
After gaining this data for the whole field, I start the cyclic case at 0.1s and use mapFields for the 0.1 data.
By using this trick, I overrode the impossibility to demand initial values for patches of the type cyclic.
*** results and problem ***
From the start time 0.1s until the end time 2s, the u profile in z direction is steadily decreasing until it reaches a trivial zero profile.
Physically impossible? Tell me about it ;)
So the wall friction is slowly stealing all the juice.
The upcoming questions are:
How to put it back? homogenously over a certain patch? homogenously over the whole volume?
By using an artificial gravity? How can I define its strength? How can I customize it cell by cell to let it be parallel to the face normal?
Hope, you tasted blood and are eager to help me out.
Thank anyway for reading the whole thing.
1) How did you manage the drop pressure through your pipe? If you are using a cyclic boundary condition for the pressure (inlet/outlet), means that continuity will not be accomplished (you are losing water at every iteration, eventually for your case it seems that you have lost all the water). If such is the case I would recommend you to use a cyclic BBCC for all the other variables, except pressure (ideally use zero gradient for the inlet and a value of 0 for the outlet), although I am not sure how to implement that (due to differences in the patches).
Welcome to the forum. What you experience is quite natural, since you do not have a driving force in the domain, which can balance skin friction and form drag from the geometry. If you are using a recent version of OpenFOAM I would suggest that you take a look at the jumpCyclic boundary condition. This conditions allows you to specify a constant pressure loss across the length of the channel.
If possible, could you give more details on the implementation? I didn't seem to find a tutorial case for this type of BC. Also, I am quite curious that in the tutorial case channel1395, the same BC is used but the flow can keep going. So is the boxTurb16. No jumpCyclic BC is imposed.
groovyBC did the trick
using groovyBC did the trick. There is a very good and applicable tutorial here.
And here is the working p-file:
|All times are GMT -4. The time now is 13:30.|