![]() |
On the pimpleFoam solution algorithm
Hi all, I'm trying to go deeper into the solution algorithm implemented in the pimpleFoam transient solver, especially for what concerns URANS incompressible applications. This is what I have understood about the solver till now (please, correct me if I'm wrong)
1) At the beginning of the time step, the solver applies the PISO algorithm for pressure-velocity coupling (with a given number of PISO loops, tipically 2) and then solves the transport equations for the turbulent quantities 2) If the outer loops parameter (nOuterCorrectors) is set > 1, the solver turns back and performs an additional integration (formally identical to the procedure described in point (1) ), but this time using as initial values the final values (eventually under-relaxed) obtained after the previous time integration. 3) Point 2 is repeted a number of times depending on the nOuterCorrectors value First question: if all of those statements are correct, this means that with nOuterCorrectors set to 1 the whole procedure reduces to the classical PISO algorithm, is it right? Second question: using the outer loops (and under-relaxation) allows to increase a lot the Courant number without loosing stability of the solution. However, what is the dependency between the number of the outer loops and the max Co allowed? I mean, using only one additional loop (thus performing two complete integrations per time step) is enough for pushing the max Co above 2 (maybe 4-5)? Third question: what about the time accuracy? Of course the time resolution is far less critical in the URANS approach than in the LES one, but how will be affected the solution by a very large time step (assuming that the outer correction still preserves from instability)? Any opinion and/or suggestion will be really appreciated Thank you all V. |
So no one interested in this topic?
V. |
I am very interested on this topic.
From my limited knowledge on PIMPLE, I would say that the answer to your first question is positive. Your second question is more difficult to answer. I have used PIMPLE-based solvers quite a lot, mostly using maxCo=1, so what PIMPLE gives me is more stability in each time-step iteration in comparison to PISO. Working with maxCo>1 has mixed results in my case-studies: I can work with, eg, maxCo = 2, but anything higher than that blows-up the simulations. Regards, Jose |
Quote:
Best Regards V. |
It probably all depends on your case - but, for my calculations, experience has shown that, when using CrankNicholson=1 for time discretization, results do not depend (much..) on timestep, as long as it remains stable, which is up to max. Co around 10-15. Euler, however, is rather sensitive to time step size. I would perform a small test series with different timesteps.
|
Quote:
Quote:
Quote:
Again, what do you mean with Euler? Fully explicit (fvc::...) or fully implicit (fvm::...)? If the latter, this time step dependency sounds a bit strange to me, as it should be at least as stable as the Crank Nicolson one... Quote:
Thanks for the reply V. |
Ok, I got it: you are talking about differencing schemes and not integration methods...However, still the higher time step sensitivity of the Euler scheme sounds strange to me...And, by the way, what exactly is the Crank-Nicolson differencing scheme (as I've read tons of literature about the integration method, bot nothing about a differencing scheme called this way...sorry for my ignorance)?
Best Regards V. |
pimple and courant number
I have carried out some experiments and I think that:
1) Yes, if you use nOuterCorrectors=1, it is a PISO methos. But in this case you must not underrelax. 2) Simulating laminar flow around a circular cylinder (Re=180), I tried nOuterCorrectors=10 and this allowed me to have maxCo=5. |
Quote:
Quote:
Thanks for sharing your experience V. |
pimple and courant number
I was simply testing the software, and you are right about the time. Does not make sense to use a lot of outer corretions. It is better to use a lower value of maxCo and stick to one or two outer corrections.
|
Vesselin,
Sorry for the inaccuracy and saying integration instead of differencing... Crank-Nicholson to me means second order, implicit time differentiation, as opposed to first order for Euler. And just to clarify: I did not say Crank-Nicholson was more stable, I wanted to say that (as to be expected for a second order scheme..) results depend much less on time step size using that scheme, something one easily forgets as all tutorials I have seen seem to be set to use Euler scheme. |
Quote:
1) Apart from the time differentiation choice, how did you reach a max Co of 10-15? I mean, what about the number of outer correctors, of PISO correctors and the URFs? 2) Have you also tried the backward time-differncing scheme? Thank you once again V. |
I have modified the solver to repeat the inner PISO loop until initial residuals for all equations are below a given value, 1e-4 seemed to be enough ( as INITIAL residual). For maxCo=15, this results in several (up to something like 7,8,..., depends also on mesh size) outer iterations, and doing this number of outer iterations it seems not to be important anymore how many corrector steps I do, 1 seems to be enough. URF's are 0.8 to 0.9 for pressure and momentum.
I did not try the backward time differencing scheme. Have a lot of fun! |
Quote:
Regards V. |
PIMPLE solver -dieselEngineFoam
Hi All,
I am currently simulating direct injected diesel engine simulations with dynamic meshing dieselEngineFoam solver. I with PISO algorithm, I get maxCo number about 0.1- 0.3, with stable solution for time-step between 0.005 – 0.05 CAD, with 1mm mesh size. The I have tried using PIMPLE solver, and the both the corrector values was set to 4. I thought but doing this I could reduce the computing time since it involves chemical reactions as well. However, from my testing so far I see that the simulations crashes during the “chemistry solve” part, when larger time-step size is being used (e.g 0.1, 0.25). So even by using PIMPLE solver I don’t really gain in reducing computing time, in fact I think it takes longer at the moment as compared to my original PISO settings, since no matter what my maxCo number is well around 0.1-0.3. Any suggestion to reduce computing time? So my question here, is there any other way to reduce computing time? Is it possible for me to increase the mesh size (more than 1mm) and reduce computing time by using PIMPLE? Parallel processing is not an option here due to the version of OF i am using at the moment. A |
Hi everybody,
excuse me for not answering any question. I just want to share my little experience. I am running external aerodynamics; th egoal is about Vortex Shedding with high Reynolds number. I was running with PISO, trying to have macCo near to 1. Then, I just changed the application to pipleFoam, with an adjustableTimeStep and maxCo = 5. In fvsolutions, I copied my solver parameters to the "Final" ones (e.g. "(U|k)" to "(U|k)Final" and choose nOuterCorrectors 2 . And it seems to work well! In this case, my calculation is much faster! In this case, about 2,45 times faster. |
What is your mesh size and what is your maximum velocity. I am facing a similar type of problem with LES
|
(I am not sure I am concerned by sdharmar, but I will answer anyway...)
My cell size is 1cm and my object is 10cm x 20cm. I know it seems very coarse, but it gives the results I want! (I am interested in the vortex shedding, thus in large unsteadyness, not in small eddies...) |
| All times are GMT -4. The time now is 03:16. |