CFD Online Discussion Forums

CFD Online Discussion Forums (
-   OpenFOAM Running, Solving & CFD (
-   -   Question about PISO in IcoFoam (

titio July 9, 2009 13:16

Question about PISO in IcoFoam
Hi Foamers,

I have a question about the PISO implemented in icoFoam. According to the description given in Hrvoje thesis, the terms H(U) are only recalculated only when the new momentum predictor is calculated. For highly nonlinear flows, as in the flow of polymeric fluids they maybe important. How I can recalculate them whenever the flow field is recalculated?



jdiorio September 3, 2010 10:30

Hi Titio,

Did you ever find a solution to this? I've been wondering the same thing. As far as I can see, H(U) is not recalculated inside the PISO loop. To truly have the PISO algorithm, as defined by Issa, H should be recalculated for each intermediate velocity field (H(U**) in Issa's notation). As stated in Hrv's thesis, the current PISO ignores this coupling. I thought that perhaps updating UEqn after the velocity update inside the PISO loop would do the trick to change UEqn.H() at the next PISO step, but it doesn't seem to make a difference.


santiagomarquezd September 3, 2010 13:54

James, are you completely sure about H(U) is not updated in each PISO loop? U Field is corrected in each loop and H(U) is evaluated on the fly by a method using corrected U, so when P equation is assembled again, you have done it with a new H(U).


jdiorio September 3, 2010 14:16

Hi Santiago,

Yes, I believe you are correct. I was actually just looking at the code and was about to post that I think I was mistaken. U is updated at the end of each PISO loop, and when UEqn.H() is called again at the beginning of the next loop, using this updated U.

Therefore, U and p should satisfy continuity and momentum at the end of the PISO corrections, right? Is there a way to check this? Or is it still necessary to do a few "outer iterations" before going to the next time step? The way I understood the PISO algorithm is that it does not need further outer iterations (unlike SIMPLE if it were being used for an unsteady problem...)

santiagomarquezd September 3, 2010 16:19

Issa shown in his paper, that is enough to do two or three PISO corrections, so that it isn't necessary to check the satisfaction of momentum and continuity.
Coming back to Titio's question, I think the problem isn't the recalculation or not of H(U) but the basic hypothesis made for PISO method. PISO method get rid off the non-linearity of convective acceleration term supposing that U^(n+1)~U^(n) in order to linearize the equations. So the momentum predictor is calculated for U^(n+1) but when the convective acceleration term is assembled, U^(n) is used for the flux.
This is useful in Co < 0.5 range in usual problems, but I think one must be more restrictive when high non-linearities are present.


jdiorio September 17, 2010 13:31

To try and answer Titio's question (if he's even still interested, if not then it will satisfy my own curiousity):

If you wanted to change the coefficients of H to use the most recent fluxes, couldn't you just make another fvVectorMatrix using the new phi and whatever U you like? It appears to me that when you call "UEqn.H()" it uses whatever the current value of U is, but only uses the value of phi that was supplied when UEqn was defined. So, even though phi changes, UEqn.H() still uses the original phi. So, after each pressure solve, you have a new (divergence free) phi, and you could make a new fvVectorMatrix, call it "UnEqn" that uses this new phi and your predicted U. Now when you call "UnEqn.H()", you are using the updated coefficients of "H". At least, that's how I understand how it's working.

It is probably also possible to just redefine "UEqn", but I'm not sure how to do that just yet.

All times are GMT -4. The time now is 15:10.