Solver for FSI strongly coupled
Hi,
I am new user of OpenFOAM (OF-1.6) and I want to study a flow past a flexible, elastic, tab fixed on a channel wall. The first simulations I made were for non-flexible tab using pisoFoam and everything worked fine. Now I want to study the FSI between the flow and the flexible tab. My questions are below: 1) Can I use icoFsiFoam for my case? 2) Is icoFsiFoam adapted for weak or strong dynamical coupling? 3) I tried to compile icoFsiFoam on OF-1.6 but several erros have occurred. Do I need to have the older version OF-1.4 or there is some solution to compile icoFsiFoam on OF-1.6? 4) Can icoFsiFoam be used for turbulent flows? Thank you very much. Charbel. |
icoFsiFoam with OpenFOAM-1.6-ext
Hi,
Thanks Mathieu. icoFsiFoam works with OpenFOAM-1.6-ext: http://sourceforge.net/projects/openfoam-extend/develop I have successfully compiled OpenFoam-1.6-ext and icoFsiFoam tutorial is working well. Best regards, Charbel. |
FSI solver based on pimpleDyMFoam
2 Attachment(s)
Hi,
enclosed please find a solver and a test case that I am trying to made for fluid/structure interaction basing on pimpleDyMFoam ... I am not sure from the outer loop iterations I made (using Aitken or constant relaxation). Can any one give me some hints please!! In fact when using the solver for the enclosed test case, the mesh blows after some time steps I do not know why!! The test case is the same as flappingConsole with some modifications. Can you test try this solver for some other cases and tell me if it works?!! Best regards, Charbel. |
Hello Charbel,
your approach looks really nice. something is wrong with the connection between solid and fluid, even for weak coupling! you should concentrate on that! I would first test it with solver of icoFsiFoam... Best regards! |
Hello Timo,
Thank you for your post. For weak coupling I am using the same connection between Fluid & Solid as in icoFsiFoam. I do not understand where you see the error. Can you please precise? Best regards, Charbel. |
When I start your solver with weakCoupling, the mesh blows.
With you it doesn't!? |
Okay I found the problem (for weak coupling):
you have to initialize the UsolidPrev like this: volVectorField UsolidPrev ( IOobject ( "UsolidPrev", runTime.timeName(), stressMesh, IOobject::NO_READ ), Usolid ); UsolidPrev = Usolid.oldTime(); |
Hello Timo,
Indeed I have not pay attention to this error, thank you a lot. Please correct me if I am wrong: I can do the same thing if I modify the weakCoupling.H to: { # include "solveFluid.H" # include "setPressure.H" # include "solveSolid.H" { // Setting mesh motion pointVectorField solidPointsDispl = cpi.interpolate(Usolid - Usolid.oldTime()); vectorField newPoints = stressMesh.points() + solidPointsDispl.internalField(); stressMesh.movePoints(newPoints); interpolatorSolidFluid.movePoints(); vectorField fluidPatchPointsDispl = interpolatorSolidFluid.pointInterpolate ( solidPointsDispl.boundaryField()[solidPatchID]. patchInternalField() ); motionUFluidPatch == tppi.pointToPointInterpolate ( fluidPatchPointsDispl/runTime.deltaT().value() ); mesh.update(); # include "volContinuity.H" Info << "Motion magnitude: mean = " << average(mag(Usolid.boundaryField()[solidPatchID])) << " max = " << max(mag(Usolid.boundaryField()[solidPatchID])) << endl; } } Best regards, Charbel. |
You're right, you can also use the original implementation.
But you can't replace Usolid.oldTime() by volVectorField UsolidPrevious you have to use the IOobject, which is related to "stressMesh". BTW: what's your application for FSI? |
must I also apply this when I define
volVectorField UsolidPrevious = 0*Usolid; //which is used in setMotion.H volVectorField DeltaU1 = 0*Usolid; volVectorField DeltaU2 = 0*Usolid; volVectorField rr1 = 0*Usolid; for the strong coupling? In fact I want to apply the FSI for mixing enhancement. |
I modified weakCoupling.H to:
Code:
{ Best regards, Charbel. |
1 Attachment(s)
Hi everyone,
You can find here a new solver that I am trying to make for fluid-structure interaction. I am working on version 1.6-ext. This solver included: 1/ pimpleDyMFoam in which we have ALE and turbulence models can be used 2/ outer fixed point adaptive relaxation by using Aitken's method for strong coupling 3/ solve transport equations for heat and mass transfer 4/ solid solver for large deformattion (2nd Piola-Krichhoff stress tensor...) 5/ computing traction in setPressure.H but it is not taken into account in tractionDisplacementFvPatchVectorField.C can you give some hint please Can you try this solver on the attached testCase and give me remarks because I am sure there will be some mistakes especially for: 1/ Aitken's method 2/ solid solver and its part in tractionDisplacementFvPatchVectorField.C 3/ setting traction in tractionDisplacementFvPatchVectorField.C Thank you in advance. Charbel. |
Hello,
on the last OpenFoam workshop at Penn State FSI was one topic of the trainings. http://www.openfoamworkshop.org/6th_...m/training.htm http://www.openfoamworkshop.org/6th_...ven_slides.pdf http://www.openfoamworkshop.org/6th_...erTraining.tgz *this might be best *http://www.openfoamworkshop.org/6th_...ell_slides.pdf http://www.openfoamworkshop.org/6th_...mpbell_fsi.tgz Numerical simulation of sailing boats dynamics FSI and shape optimization RANS and LES of Turbulent Combustion based on Flamelet Generated Manifolds Matteo Lombardi (École Polytechnique Fédérale de Lausanne) more FSI stuff see other presentations etc. http://www.openfoamworkshop.org/6th_...rdi_slides.pdf |
Thank you Elvis, I ll see these presentations
|
fluid structure interaction problem
I have small deformation values relative to weak coupling.
It seems that the problem comes from the first predicted interface displacement (see Kuttler and Wall 2008 page 64 section 3.1 before equation (22)). Can you please give me a hint on how can I make it. Actually I am doing as follows (first 4 lines) but it is not working: Code:
//******************************** Initialize for new time step ******************************// |
traction displacement
Hello,
I want to compute the traction field so it can be transferred, with the pressure, from fluid mesh to solid in the setPressure.H. So I make as follows: Code:
In createFields.H What most I modify in tractionDisplacementFvPatchVectorField.C .H so traction can be transferred to solid patch? Regards. |
Hi, I'm trying to test your solver. I untar the files and I placed the files in a folder. However, when I run Allrun in that folder, the command is not recognized. Do I have to place the files in a specifically maned folder? How do I run the case? Please let me know. THanks
|
Hi Santiago,
Did you first compile the solver without problems? Once you compile it you go in the testCase directory and then ./Allrun |
I execute "wmake libso" in "testVorflexFoam" and I get the following error:
testVorflexFoam.C:41: fatal error: tetFemMatrices.H: No such file or directory compilation terminated. make: *** [Make/linuxGccDPOpt/testVorflexFoam.o] Error 1 This also happened to me while trying to compile "icoFsiFoam". I tried with both OF-1.5-dev and OF-1.6-ext with the same results. Any idea of what I need to do now? |
To compile solvers or utilities you moste execute wmake. The same for icoFsiFoam. In fact, you use wmake libso when you want to compile a library.
Regards. |
Have you validated the solver against experimental data ?
|
No it is not finlizied yet there is several problems for the strong coupling I am trying to solve. This is why I am asking for help here.
You can try it. For strong coupling I get much more small deformation values relative to weak coupling solution and other test cases from litterature. |
Charbel,
when I run wmake all i get the following error, tCaseFSI/testVorflexFoam$ wmake all SOURCE=testVorflexFoam.C ; g++ -m32 -Dlinux -DWM_DP -Wall -Wno-strict-aliasing -Wextra -Wno-unused-parameter -Wold-style-cast -O3 -DNoRepository -ftemplate-depth-40 -I/usr/lib/OpenFOAM-1.6-ext/src/dynamicMesh/dynamicFvMesh/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/dynamicMesh/dynamicMesh/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/meshTools/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/turbulenceModels/incompressible/turbulenceModel -I/usr/lib/OpenFOAM-1.6-ext/src/transportModels -I/usr/lib/OpenFOAM-1.6-ext/src/transportModels/incompressible/singlePhaseTransportModel -I/usr/lib/OpenFOAM-1.6-ext/src/finiteVolume/lnInclude -DFACE_DECOMP -I/usr/lib/OpenFOAM-1.6-ext/src/tetDecompositionFiniteElement/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/dynamicMesh/meshMotion/tetDecompositionMotionSolver/lnInclude -IlnInclude -I. -I/usr/lib/OpenFOAM-1.6-ext/src/OpenFOAM/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/OSspecific/POSIX/lnInclude -fPIC -c $SOURCE -o Make/linuxGccDPOpt/testVorflexFoam.o testVorflexFoam.C:41: fatal error: tetFemMatrices.H: No such file or directory compilation terminated. make: *** [Make/linuxGccDPOpt/testVorflexFoam.o] Error 1 please take a look at this post by myself about this. I will appreciate any help. Thanks http://www.cfd-online.com/Forums/ope...tml#post317474 |
Hi everyone,
Charbel I did test your solver a little, but I do not have a difference with your provided case. The results for weak and aitken coupling are the same. Did you alter something afterwards, so that some strange behaviour occurs? Well something is not right, if you look at your fluid mesh displacements and the solid mesh displacements in Paraview they do not match. But they should I think. Another thing, why did you introduce "interpolatorSolidFluid.movePoints();" for your weakCoupling? @gascortado: Well if you look at the output you see that there is a missing file. Named "tetFemMatrices.H". Did you download the source of OpenFoam-1.6-ext and compiled it, or do you have a precompiled version? At my machine there is no problem compiling this solver. Best regards. |
Hi Matz,
Thanks for your reply. I introduce interpolatorSolidFluid.movePoints() according to this post. However, I think I most introduce it in the outerLoopAitken.H I am making modifications on the solver. I will post new version when It ll be done. Best regards. |
Thanks for your reply matz,
I installed OF-1.6-ext by using the Synaptic Package manager as directed here http://www.cfd-online.com/Forums/ope...tml#post290344 So I guess this is a pre compiled version? Do I have to get the binaries and build OF-1.6-ext from scratch? Any idea of what to do? |
Hi Charbel and gascortado,
@Charbel: Thanks for your reply. I did miss this part of the thread. Well this interpolator for the interface between fluid and solid is not working right, at least in my opinion. One thing is that if you compare the transferred pressure field it is not matching for the fluid and the corresponding forces mapped to the solid. The second thing is that if you run in parallel the results do not match with the serial runs. I am curious and will have a look at the next stage of your solver. @gascortado: I am using only self compiled versions of OpenFOAM, and do not have a machine with Ubuntu 10.10. Did you do a search in your OF directory to find the missing files? You can check with this: cd $WM_PROJECT_DIR/src find ./ -name "tetFemMatrices.H" If this gives no files you probably need to do a full source compilation. |
1 Attachment(s)
Hi Matz,
You are rigth, there is no difference in the results for the Fluid domain between weak (present solver and icoFsiFoam) and strong coupling solvers. However, as you see in the figure below there is a difference between the stressMesh (solid domain) and mesh (fluid domain) displacement. This problem is not encoutred for icoFsiFoam in which the same interpolation method is used for displacement and pressure as that I use here. I tried to modify several things in the solver (I even deleted the interpolatorSolidFluid.movePoints()...) however the problem persist. Do you think that the problem is caused by fvc::makeRelative(phi, U) and fvc::makeAbsolute(phi, U) and by changing the order of fluid, solid and mesh solvers in the time loop? Best regards |
Thanks guys for your help. I finally managed to run icoFsiFoam and now I can start looking into this solver. The solver was not able to find the RunFunctions file in the default folder so I moved them to the solver folder and changed the Allrun file accordingly.
I need to develop a solver for FSI while using LES turbulence modeling. I was able to successfully simulate a turbulent flow using pisoFoam for my first trials with a fixed plate (no plate motion) using LES. Now I need to introduce plate motion and the solver developed by Chrabel seems to be a good start. What would be the difference between pimpleDymFoam and pisoFoam in terms of LES turbulence modeling? Is there any difference? Thanks again. |
pimpleDyMFoam uses the PIMPLE algorithm which include both PISO and SIMPLE. Moreover, the NS equations are solved in ALE by making fluxes relative or absolute. It is thus mre stable when using large time steps (since FSI solvers becomes ustable when decreasing the time step) and for moving mesh. In pimpleDyMFoam I think you can use LES.
There is many threads giving more details on the difference between these solvers. |
Hi Charbel,
your problem lies with the mesh.update() command. You issue it twice. Once in setMotion.H were it belongs and a second time in solveFluid.H. The mesh-solver is velocity based, and so you have a doubled displacement of the fluid domain. I deleted it in solveFluid.H and the domains match perfectly now. Best regards! |
Hi all again. I tried running "wmake all" and I get the familiar error about tetFemMatrices.H missing (see below)
santiago@santiago-laptop:~/OpenFOAM/santiago-1.6-ext/run/Thesis/FSI/solverAndTestCaseFSI/testVorflexFoam$ wmake all Making dependency list for source file tractionDisplacement/tractionDisplacementFvPatchVectorField.C Making dependency list for source file testVorflexFoam.C could not open file tetFemMatrices.H for source file testVorflexFoam.C could not open file tetPointFields.H for source file testVorflexFoam.C could not open file faceTetPolyPatch.H for source file testVorflexFoam.C could not open file tetPolyPatchInterpolation.H for source file testVorflexFoam.C could not open file fixedValueTetPolyPatchFields.H for source file testVorflexFoam.C SOURCE=tractionDisplacement/tractionDisplacementFvPatchVectorField.C ; g++ -m32 -Dlinux -DWM_DP -Wall -Wno-strict-aliasing -Wextra -Wno-unused-parameter -Wold-style-cast -O3 -DNoRepository -ftemplate-depth-40 -I/usr/lib/OpenFOAM-1.6-ext/src/dynamicMesh/dynamicFvMesh/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/dynamicMesh/dynamicMesh/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/meshTools/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/turbulenceModels/incompressible/turbulenceModel -I/usr/lib/OpenFOAM-1.6-ext/src/transportModels -I/usr/lib/OpenFOAM-1.6-ext/src/transportModels/incompressible/singlePhaseTransportModel -I/usr/lib/OpenFOAM-1.6-ext/src/finiteVolume/lnInclude -DFACE_DECOMP -I/usr/lib/OpenFOAM-1.6-ext/src/tetDecompositionFiniteElement/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/dynamicMesh/meshMotion/tetDecompositionMotionSolver/lnInclude -IlnInclude -I. -I/usr/lib/OpenFOAM-1.6-ext/src/OpenFOAM/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/OSspecific/POSIX/lnInclude -fPIC -c $SOURCE -o Make/linuxGccDPOpt/tractionDisplacementFvPatchVectorField.o SOURCE=testVorflexFoam.C ; g++ -m32 -Dlinux -DWM_DP -Wall -Wno-strict-aliasing -Wextra -Wno-unused-parameter -Wold-style-cast -O3 -DNoRepository -ftemplate-depth-40 -I/usr/lib/OpenFOAM-1.6-ext/src/dynamicMesh/dynamicFvMesh/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/dynamicMesh/dynamicMesh/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/meshTools/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/turbulenceModels/incompressible/turbulenceModel -I/usr/lib/OpenFOAM-1.6-ext/src/transportModels -I/usr/lib/OpenFOAM-1.6-ext/src/transportModels/incompressible/singlePhaseTransportModel -I/usr/lib/OpenFOAM-1.6-ext/src/finiteVolume/lnInclude -DFACE_DECOMP -I/usr/lib/OpenFOAM-1.6-ext/src/tetDecompositionFiniteElement/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/dynamicMesh/meshMotion/tetDecompositionMotionSolver/lnInclude -IlnInclude -I. -I/usr/lib/OpenFOAM-1.6-ext/src/OpenFOAM/lnInclude -I/usr/lib/OpenFOAM-1.6-ext/src/OSspecific/POSIX/lnInclude -fPIC -c $SOURCE -o Make/linuxGccDPOpt/testVorflexFoam.o testVorflexFoam.C:41: fatal error: tetFemMatrices.H: No such file or directory compilation terminated. make: *** [Make/linuxGccDPOpt/testVorflexFoam.o] Error 1 make: *** Waiting for unfinished jobs.... tractionDisplacement/tractionDisplacementFvPatchVectorField.C: In member function ‘virtual void Foam::tractionDisplacementFvPatchVectorField::upda teCoeffs()’: tractionDisplacement/tractionDisplacementFvPatchVectorField.C:190: warning: suggest parentheses around ‘+’ in operand of ‘&’ tractionDisplacement/tractionDisplacementFvPatchVectorField.C:190: warning: suggest parentheses around ‘+’ in operand of ‘&’ tractionDisplacement/tractionDisplacementFvPatchVectorField.C:191: warning: suggest parentheses around ‘+’ in operand of ‘&’ I then run did this as Matz sugested: cd $WM_PROJECT_DIR/src find ./ -name "tetFemMatrices.H" and I got ./tetDecompositionFiniteElement/tetFemMatrix/tetFemMatrices.H Do I need to change the Wmake file options in roder to compile the solver? Any suggestions? Thanks again |
Hi gascortado,
well you should have an output looking like that: ./tetDecompositionFiniteElement/lnInclude/tetFemMatrices.H ./tetDecompositionFiniteElement/tetFemMatrix/tetFemMatrices.H So it seems there is no symbolic link in your lnInclude-Folder to tetFemMatrices.H. You need to create one for it and all other missing files. Create the first with: cd $WM_PROJECT_DIR/src/tetDecompositionFiniteElement/lnInclude ln -s ../tetFemMatrix/tetFemMatrices.H tetFemMatrices.H But if one is missing there could be others ... Best regards! |
Thanks for your reply Matz,
When I use the browser I can see the folder lnInclude inside $WM_PROJECT_DIR/src/tetDecompositionFiniteElement directory. Inside lnInclude I see a whole bunch of symbolic files among all tetFemMatrices.H. However, when I try accessing $WM_PROJECT_DIR/src/tetDecompositionFiniteElement/lnInclude by using the terminal the folder is not recognized. Furthermore, by using the "ls" command, the folder lnInclude is not listed: santiago@santiago-laptop:/usr/lib/OpenFOAM-1.6-ext/src/tetDecompositionFiniteElement$ ls Allwmake tetFemCalculus tetPolyMesh elementMesh tetFemMatrix tetPolyMeshCellDecomp fields tetFemMethod tetPolyMeshFaceDecomp Make.cellDecomp tetFemSolution tetPolyPatchInterpolation Make.faceDecomp tetPointMesh When I tried doing: cd $WM_PROJECT_DIR/src/tetDecompositionFiniteElement/lnInclude bash: cd: /usr/lib/OpenFOAM-1.6-ext/src/tetDecompositionFiniteElement/lnInclude: No such file or directory I then switched to this directory santiago@santiago-laptop:/usr/lib/OpenFOAM-1.6-ext/src/tetDecompositionFiniteElement$ ln -s ../tetFemMatrix/tetFemMatrices.H tetFemMatrices.H ln: creating symbolic link `tetFemMatrices.H': Permission denied I wonder why is the folder not showing up in the terminal. Does this mean that there is something wrong with the binary files? This is very frustrating. Thanks again |
Hi gascortado,
did you check your file permissions for these folders? Do you have reading access to them? All the best! |
Hi Matz,
Thank you for your reply it is this command that was making the problem. In fact, I tried yesterday several modifications to find the error and I confirm you that the mesh.update() in solveFluid.H is the problem. Now I will try to include the relaxation technique and to finalize the solver. I ll keep you up-to-date for further versions. @gascortado: I m sorry because I do not know what is the problem with tetFemMatrices. I use the 1.6-ext version from the sourceforge. |
Hi Matz, thanks for your reply. I checked the permission and that is all good. This is what the problem is
http://www.cfd-online.com/Forums/ope...tml#post317853 I will try to solve this issue tonight. I appreciate your help |
Thanks guys for you help. I finally was able to compile the solver by reseting the path to the "missing" files manually. Now its all good. I also made the change as pointed out by Matz regarding mesh.update() command and the interfaces match perfectly.
I am interested on being able to display stresses on the solid part. Any pointers on the changes I need to make to the files in order to see that? Thanks all for your help |
Greetings to all! Hi Santiago,
I'm not familiar with this solver, but here are some tips:
Bruno |
4 Attachment(s)
Hi,
I modified the solver and the new version is attached below. The outer iterations with constant relaxation parameter are working fine for the present test cases: rhoS/rhoF = 1000 & rhoS/rhoF = 100. Below please find some figures about the results. Meanwhile, I have some questions, I will be very grateful for any help: 1) I am not sure about the Aitken's method in "strongCouplingAitken.H" 2) I am not sure if the traction is transferred to the solid in "tractionDisplacementFvPatchVectorField.C /.H" this traction is computed in "setPressure.H" Best regards, |
All times are GMT -4. The time now is 03:21. |