Hi,
Started v6.1, Fluent i
Hi,
Started v6.1, Fluent implemented dynamic moving mesh which support birth/death of elements. I am wondering if OpenFOAM has something similar. For example, a piston moving inside a cylinder. The computational domain changes with time. There are two ways to attack this: 1. keep the number of elements the same, but "squeeze" the elements when the piston moves toward the head of the cylinder. 2. Keep the element sizes about the same, but, dynamically removes the number of elements. Pei |
sounds like Kiva as well ...
sounds like Kiva as well ... i noticed a kivatest directory somewhere in the package ...
|
Yes OpenFOAM includes this fu
Yes OpenFOAM includes this functionality.
|
Hi,
I've placed an 2D wedge
Hi,
I've placed an 2D wedge example of how the this works here: http://www.tfd.chalmers.se/~nordin/foam/engineEx.mpg The layer where cell addition/removal is performed can be anywhere in the domain. That means that you can either have the piston remove cell layers as the layer become 'small enough' or you can have the entire mesh move upwards and remove the layer at the top/deck. In this example I've placed the addition/removal layer somewhere in between and as this layer hits the deck the mesh motions switches from layer addition to 'squeezing'. The left part show you the entire picture while the right is just a zoom-in on the top part. If you are interested in another mesh motion example there is the channel flow with a vibrating 'floor' http://www.tfd.chalmers.se/~nordin/f...ingChannel.mpg Niklas |
Hi, Niklas,
These two movi
Hi, Niklas,
These two movies looked very cool. In the engineEx.mpg movie, toward the end of the simulation, I saw some clouds of green dots at the upper left corner, what are they? Also, I have a cylinder that does not have a straight wall. It is somewhat conical. The radius at the bottom is about 10% smaller than the radius at the top. I do not have a piston, but a small pipe coming down toward the bottom of the cylinder. The cylinder is about 10% filled with liquid. Is it possible to create a cylindrical block the wraps the pipe. This portion will be moving mesh. And create another block that is stationary mesh which contains the rest of the geometry? An interface between the two meshes will be needed in this case (this is how Fluent attach this type of problem). Do you FOAM can handle something like this? Thanks! Pei |
A combination of automatic me
A combination of automatic mesh motion and my mesh modifiers should cover it - you need a combination of a layer addition/removal and a sliding interface + appropriate mesh motion setup.
Enjoy, Hrv |
Heya Niklas,
Nice animatio
Heya Niklas,
Nice animation - is that spray doing the right thing, i.e. do you get problems loosing particles or similar on layer removal? Any problems with the simulation: spikes in the pressure trace for example. BTW, is this compressible? Hrv |
Hi,
Yes, the green dots is
Hi,
Yes, the green dots is the spray. And no Hrv, the new tracking algorithm does not lose particles http://www.cfd-online.com/OpenFOAM_D...part/happy.gif In fact, it can not lose particles and if you are trying to lose them anyway, i.e you treat them incorrectly at the boundary, you will end up in an infinite loop (my choice since I dont want particles flying outside the domain) The only restriction is that it must be possible to draw a line from cell centre to face centre without crossing a face. Yes, the calculation is compressible and yes there are 'spikes' in the pressure, but this is depends on where you do the layer addition/removal and how small you want the cells before removing them... and time step. It also seems to be more difficult adding layers than removing them!!! And if I remember correctly removing cells at the piston top is worse than doing it somewhere 'in the middle'. N |
Thanks for that, I bet you're
Thanks for that, I bet you're really proud of not losing particles - well done (there's a very few people in CFD today who can say the same)!
Any hope of a warning/debug when there's no way from the infinite loop - that would be useful info! [:-)] We'll need to do something about the spikes at some stage, although this business with layer addition vs. removal is against my intuition. If you break the layering, pls let me know as there's a number of fixes I've got for a future release... Enjoy, Hrv |
I am interested in the vibrati
I am interested in the vibrating floor in the channel flow case.
http://www.tfd.chalmers.se/~nordin/f...ingChannel.mpg My understanding is that we should specify the wall moving velocity motionU(x,y,t) for that 2D case. When I dig into the source code for the motionSolver, I felt a little bit lost. Does any one can show me some sample code to specify that motionU on the moving wall? |
Here's a piece of my original
Here's a piece of my original code from a while back. The setup is now much easier, using the motion solver - have a look at the current state of OpenFOAM-1.0/applications/utilities/mesh/manipulation/moveMesh
(I am one version ahead, so mine might me slightly different). Add # include "setBoundaryMotion.H" into moveMesh (your copy, of course!) before the points are moved. The file looks like this (you may want to read in the amplitude and frequency in from a control file and do additional tricks with findPathcID, so that the patch can be given by name etc etc.) I could not be botherred, mut here is a simple case with lots of comments :-) The first lot calculates the boundary motion from the nodal coordinates and the last line sets the boundary condition for mesh motion: ms.motionU().boundaryField()[movingPatchID] == motionBCPatch0; This will work both for the face and cell decomposition. There will be a paper coming out soon on the automatic mesh motion I have developed and implemented in foam and I would be grateful if people could refer to it in their applications/reports/papers - consider it a price to be paid for the work! :-) setBoundaryMotion.H { label movingPatchID = 0; scalar xfreq = 50; scalar xampli = 0.0001; scalar xlength = 0.01; scalar xom = 2.0 * physicalConstant::pi*xfreq ; scalar xomx = 4*physicalConstant::pi/xlength ; // This statement gives you the position of points on the patch const vectorField& motionPatchPoints = ms.motionU().mesh().boundary()[movingPatchID].localPoints(); // This statement creates a vector field of the same size, // which is set to zero vectorField motionBCPatch0(motionPatchPoints.size(), vector::zero); // This statement calculates the desired motion velocity // and puts it as the y-component of the vector field above. // The velocity will be different for every vertex. Info << "Lift: " << xampli*Foam::sin(xom*runTime.value()) << endl; motionBCPatch0.replace ( vector::Y, ( xampli*Foam::sin(xom*runTime.value()) *Foam::cos(xomx*motionPatchPoints.component(vector ::X)) - motionPatchPoints.component(vector::Y) )/runTime.deltaT().value() ); // This statement sets the velocity we have just calculated // as the boundary condition for mesh motion ms.motionU().boundaryField()[movingPatchID] == motionBCPatch0; } |
Hi, Niklas,
I am wondering
Hi, Niklas,
I am wondering if you can email me the steps to set up the moving mesh? Or any simple case file you have. In my project, I will also need to setup a sliding interface. I have no idea how this is done in OpenFOAM. Thanks! Pei |
Hi,
> I am wondering if yo
Hi,
> I am wondering if you can email me the steps to > set up the moving mesh? Or any simple case file > you have. I'm hoping this will be included in the next release of OpenFOAM > I will also need to setup a sliding interface. > I have no idea how this is done in OpenFOAM. Neither do I. N |
sliding interface: the mixer2
sliding interface: the mixer2D tutorial case uses a sliding interface. The ./Alltest script should run the case or you can run it by hand.
Have a look at the createSlider application which creates all the nessecary files. Mattijs |
Well, it seems that I am the
Well, it seems that I am the only one who knows precisely what needs to be done (I wrote the code). I would be happy to help, but under the condition that you convert your case into a fully-fledged tutorial and write up the setup for the manual.
In this way, we can easily extend the number of available tutorials and I won't have to explain the whole thing again. Hrv |
Hi, Hrv,
That will be great
Hi, Hrv,
That will be great! If you can email me the steps to setup a moving mesh (with cell birth and death) with sliding interfaces, I will complete the tutorial case and write the detailed setup for the manual. This case will invlove air and water, so, interFoam will be applied. Thanks! Pei Peiying2003@yahoo.com |
Hi,
Can anybody help me ???
Hi,
Can anybody help me ??? I want to simulate an air flow into an engine with a LES solver (oodles), but in the geometry there is a moving mesh (piston)... How can I do it??? Thanks |
The easiest way would be to re
The easiest way would be to replace the construction and calls of the turbulence model in engineFoam with the equivalent LES model construction and calls from Xoodles.
|
Hi Henry,
excuse me but this
Hi Henry,
excuse me but this was not what I meant. My geometry is a simple box with a moving wall, so I haven't any crank angle.... |
Is your flow compressible or i
Is your flow compressible or incompressible?
|
My automatic mesh motion solve
My automatic mesh motion solver does not need the crank angle - have a look at the icoFoamAutoMotion or moveMesh applications on how to set up a moving mesh problem. Once you specify the motion of the boundary, the rest will be done automatically.
As for the flow solver, you do not have any topological changes (right?), so any compressible code with mesh motion should be a good starting point. Enjoy, Hrv |
Can I apply moveMesh utilities
Can I apply moveMesh utilities at the oodles solver too??
|
Is your flow compressible or i
Is your flow compressible or incompressible?
|
I can consider incompressible
I can consider incompressible ...
|
In which case you can either a
In which case you can either add the LES model construction and calls from oodels to icoFoamAutoMotion or add the mesh-motion calls from icoFoamAutoMotion to oodles. You might also want to consider how you want to move the mesh; if you only want to move in by extension and contraction you might find the mesh-motion solver over-kill and it might be better for you to move the points directly and call mesh.movePoints with the new point locations you compute yourself.
|
Hi,
I'm always me .... I add
Hi,
I'm always me .... I add the mesh-motions calls and costructions of icoFoamAutoMotion to oodles and I simulate a test "in a box" with a moving wall. For the moment it's ok, the cell move in extension, but is it possible to create other cell or destroy it (rezone ...???) ? Thanks |
Take a look at icoTopoFoam.
Take a look at icoTopoFoam.
|
Now I've tried with the tutori
Now I've tried with the tutorial for icoTopoFoam, blockMesh ok, but when I launch the simulation (icoTopoFoam . mixer2D), it stops and give me Segmentation fault... For what is it icoTopoFoam ? What are and how do I set the file cellToRegion, mixerProperties ecc.. ??
|
In order to do cell addition/r
In order to do cell addition/removal, sliding interface, you need my dynamic mesh stuff. The details have been described in one of the threads in this discussion group in detail and Pei has promised to make a tutorial from the examples I've sent him a while back (any news?).
As for the functionality, you can take a look at the pictures on my private web site: http://www.h.jasak.dial.pipex.com under FOAM development or http://www.foamcfd.org (same thing, I am migrating the contents). This is not trivial and for a better version with new stuff, some bug fixes and more pre-implemented functionality you'll need a new version of FOAM. Enjoy, Hrv |
There have already been lots o
There have already been lots of discussions about running with topology change, you should be able to find the threads using the search facility.
|
Thank Henry and Hrv,
probabl
Thank Henry and Hrv,
probably for the moment it's enough what I've done (I have spoken five minutes ago with the professor......) so now I try oodles with the call of mesh-motion..... and probably I disturb you later.... Bye Alberto |
Hi ,
Anyone can help me ?
Ho
Hi ,
Anyone can help me ? How can I set for my movingWall (in motionU file) a motion law (for example a piston motion, simple harmonic) ? Thanks Alberto |
Take a look at engineFoam and
Take a look at engineFoam and the mesh-motion used by it in OpenFOAM-1.1/src/engine/include/movePiston.H
You will probably find the simple approach for layered meshes at the top of this file adequate but if your mesh is not layered then you will have to use the more complex and expensive mesh-motion solver. |
But isn't it possible to set d
But isn't it possible to set directly in the Umotion file, instead "fixedValue" for movingWall, something like ... "variableValue" and I can specify the exact law motion ?
Thanks Alberto |
In order to do that, you will
In order to do that, you will need your own boundary condition type - the function that described the motion needs to exist is C++ and only the parameters can be read in. Search for my oscillating fixed value boundary condition, posted on this group a while back.
Hrv |
So
-I should add
#include
So
-I should add #include "setBoundaryMotion.H" in the moveMesh.C file. -I create the setBoundaryMotion.H file, I compile it ... and... it's ok? The amplitude and frequency I can set directly in the setBoundaryMotion.H file? What should I set in the motionU file in the /0 directory? |
@Hrvs posting from the 8th:
@Hrvs posting from the 8th:
Some days ago I copied the descriptions Hrv was refering to to the Wiki (with some very minor editing). It's the first How-To on the Wiki that really deserves that name: http://openfoamwiki.net/index.php/HowTo_setting_u p_dynamic_mesh_cases (I know it's a bit off topic here, but I wanted to say it) |
Thanks a lot Bernhard,
but in
Thanks a lot Bernhard,
but in the page that you give me I haven't found any example of "oscillating fixed value boundary condition" that Hrv has posted February 19. Do you know how to "create" step by step the boundary oscillating of which Hrv told me?? Thanks Alberto. |
Sorry Alberto!
Personally I
Sorry Alberto!
Personally I don't have any experience with dynamic meshes. I just copied Hrvs explanation to the Wiki because I thought it was an excellent start for a How-To (The original thread is referenced at the top of the page, there are some examples there - don't know if they apply to your problem - which I havn't edited to the Wiki yet; I plan to do that when I have some time, but I wouldn't mind if somebody who actually tried them did that) |
I have tried to implement the
I have tried to implement the layer addition/removal things into an existing engine solver. So far in the compression stroke all works fine but as soon as there is a layer addition in the expansion stroke some strange things happen:
... Added all cells. Final cell count = 600 Added zone points: untouched = 0() modified = 0() added = 0(). Points per zone = 0() Added zone faces: untouched = 1(0) modified = 1(100) added = 1(0). Faces per zone = 1(100) Added zone cells: untouched = 0() modified = 0() added = 0(). Cells per zone = 0() void polyMesh::clearGeom() : clearing geometric data void polyMesh::clearAddressing() : clearing topology void polyMesh::setInstance(const fileName& inst) : Resetting file instance to "69" void polyMesh::initMesh() : calculating faceCells Foam::polyMesh::morph ( const polyTopoChange& ref ) : completed topological change. From function void polyTopoChanger::update(const mapPolyMesh& m) in file polyTopoChange/polyTopoChanger/polyTopoChanger.C at line 247 Updating mesh modifiers layerAdditionRemoval::updateMesh(const mapPolyMesh&) for object pistonLayer : Clearing addressing on external request. Pointers not set. void polyMesh::setInstance(const fileName& inst) : Resetting file instance to "69" Mapping field meshPhi Mapping field meshPhi_0 Piston layering mode tmp<scalarfield> polyMesh::movePoints(const pointField&) : Moving points for time 0.00575 index 249 bool primitiveMesh::checkMeshMotion(const pointField& newPoints, const bool report) const: checking mesh motion Min volume = 3.90451e-08. Total volume = 2.63342e-05. Cell volumes OK. Zero or negative face area detected for internal face 1400 between cells 500 and 501. Face area magnitude = 0 --> FOAM Warning : From function primitiveMesh::checkMeshMotion(const pointField& newPoints, const bool report) const in file meshes/primitiveMesh/primitiveMeshCheckMotion.C at line 200 Severe non-orthogonality in mesh motion for face 1400 between cells 500 and 501: Angle = 90 deg. Zero or negative face area detected for internal face 1401 between cells 500 and 510. Face area magnitude = 0 ... Has anyone an idea what is going wrong here. The strange thing is that the layer removement in the compression stroke works perfectly !?! |
All times are GMT -4. The time now is 19:34. |