Ziad Boutanios wrote: Hi Alberto,
These are interesting results. Is the maximum alpha reached the same one set in the dict files? I'm mostly interested how this code will behave in packing situations such as a pressure stagnation point for instance.
Ziad Hi Ziad,
thanks for your question. The volume fraction superior limit is enforced by the frictional model in the current implementation of the code.
In other words, there are two regions of volume fraction:
1) alpha < alphaMinFriction
2) alphaMinFriction < alpha < alphaMax
The particle pressure is computed from the kinetic theory closures in region 1, and it depends on the radial distribution function g0.
In region 2, the particle pressure given by the kinetic theory is used in the equation for the granular temperature, and in the determination of the kinetic stresses.
However the normal stress term that appears in the modified equation for alpha (ppMagf) is computed using the expression for frictional pressure given by Schaeffer's model. The reason of this choice is both numerical and physical:
- Numerically, the expression of the pressure given by this model is continuous, and, even if it grows quickly, it does not diverge.
- Physically, the kinetic theory closures are not really valid in the packed regions, since they assume binary collisions. As a consequence, it makes sense to use the frictional model in that range of volume fractions.
Notice that, in this way, you obtain a bounded value of the phase fraction, which can be used to safely compute the radial distribution g0 where you need it.
Additionally, if you do not want to switch to a frictional model, you can use exactly the same approach, by dealing with the discontinuity of g0 in some way (an expansion).
Now, back to your question. In the case set-up, you specify both
alphaMinFriction , set to 0.61 in Schaeffer's model
alphaMax, set to 0.63 in the results shown above
The value of alphaMax is used to compute the radial distribution function g0. However
the actual maximum value reached by the dispersed phase fraction depends only on the equation of state that gives you the frictional pressure. What happens in the calculations is that you have alphaMax between 0.61 and 0.63.
In the case of a completely quiescent system, like a settled fluidised bed, the algorithm is able to enforce the packing limit at approximately the maximum value (it won't be exactly 0.63, but something around it, depending on the equation of state), as described above. In this case the force balance is quite delicate, and you need to use a relatively small time step to have a converged solution. We run some cases to test this behaviour. I will dig them out and show you what happens.
On this point, I have to say that in these years I tried a large variety of algorithms suggested in the literature as "the" solution to this problem. In particular, I spent a good amount of time working on the implementation of a pressure-based solver, where the particle pressure is treated as unknown, and the dispersed-phase continuity equation is transformed into an equation for the particle pressure.
These algorithms look very good on paper, but their efficiency and stability did not seem great to me. In particular, it is true that the particle pressure equation degenerates into an incompressibility condition, independent from the equation of state of the particle pressure, when alpha tends to alphaMax, but it is also true that the equation is undefined when alpha -> 0, and it is troublesome when alpha is small. Additionally, you have to deal with the non-linearity of the equation of state, and its inversion, which might introduce conservation errors.
So, in the end, after many attempts, I switched back to an equation for the volume fraction, sensitized to the particle pressure. This does not have limitations for alpha -> 0, but requires some care when alpha -> alphaMax (read: a continuous function for the particle pressure), which I solved following what is done in MFIX, as explained above.
If you have suggestions on this topic, I am very open to them
