Multicomponent Shan Chen Model with Explicit Forcing

Hello everyone,

I have implemented the shan chen multicomponent model with explicit forcing in palabos following

Porter et al.: Multicomponent interparticle-potential lattice Boltzmann model for fluids with large viscosity ratios. Phys. Rev. E 86, 036701 (2012)

and am able to reproduce their results (cocurrent Flow, viscosity-independent surface tension). However, when I compare the influence of the parameter G between the standard shan chen forcing and the explicit forcing formulation, there is a difference. In the explicit forcing formulation, G has to be twice as large (as in the standard forcing formulation) to lead to phaseseparation.
I have used different approaches (SRT + He force, MRT + He force as well as SRT + Guo force, MRT + Guo force)
which all lead to the same result. Has anybody made the same experience or knows where this scaling might come from? I am assuming it is something systematic since the factor is exactly 2 (problem independent).




I have only recently applied the EF scheme to a multi-phase model and I don’t seem to have that issue. I don’t know if that information will help you as my model in not MC! In fact for me to get a stable phase separation, G has to be slightly lower than what I’d usually use with SC model.


Dear PeterH,

thank you for your reply. I’m glad someone is also working on this.

In single component systems, I was also able to validate multiple forcing schemes (Shan, He, Guo, EDM). In these systems however, G corresponds to the temperature and below a critical value, a liquid and a vapor phase will develop. This value should be and is unaffected by the forcing scheme used, in all the cases I tested.

In multicomponent systems, if we only consider a force acting bewteen components, then G is used to control diffusion. Thus, the strength of the interaction force determines whether e.g. two components segregate into two stable immiscible phases (components!) or not. Again, reformulating the force using an explicit expression should not lead to a different critical value of G. In my case however, there is this *2 shift. The weird thing is that I can reproduce different references.



Hi kk,
I am not sure if you have figured the issue, but if it helps, I also observe that much larger G values are required to obtain phase segregation with multicomponent SC+EF+BGK/MRT technique than with the original SC model. Not sure why though. By the way, did you code it up in Palabos or some other tool?

1 Like

Hi kk,

I realize that this post is now nearly 4 years old but I am working on implementing the explicit forcing too. I am having trouble understanding how to implement the higher order isotropy into the existing Palabos framework. Would you be able to shed some light into how you accomplished this?

Thank you


could you maybe write a short summary of what you want to accomplish?

Hi Orestis and thank you for your reply. I am attempting to use Palabos to model a viscosity ratio of 1000:1. I have looked into entropic dynamics and the explicit forcing method, and I am leaning towards the explicit forcing method because I was not able to see the entropic dyanmics be able to model a very low viscosity ratio without numerical instability.

I realize that my last comment is semi-incoherent, so let me explain. Using the framework poised by Porter et. al. I am going to change the Shan-Chen processor for multi-component coupling to allow for the high viscosity ratio between the two fluids by scaling the interparticle force by rho. I was misinformed/incorrect in my previous comment so I thank you for reaching out.


1 Like

I guess that what you want to increase isotropy is to use “extended” lattice. These are handled by “Descriptors” in Palabos (like the D3Q27descriptor is the d3q27 lattice).
Look at this presentation:

I hope it helps


I realizing I’m resurrecting an old post, but I’ve just gotten started with Palabos, and I’ve been trying to implement the Porter (2012) method as well. However, some of the advice given on looking at specific classes hasn’t really been helpful to me, (for example, being told to look at He Forcing, when that’s supposedly for 3D classes when I’m trying to implement a 2D version isn’t super clear to me.) Unfortunately, what seems obvious or clear to other people is definitely less so for me.

I need simulation with viscosity ratios at least three orders of magnitude for phase separation, and if anybody has a working version of Porter (2012), I’d love to see how they did it. If not, guidance would certainly be appreciated.

Some details on what I’ve done/what’s been going through my head so far:

On the input scripting side:
Assuming I ever manage to create a new forcing subclass, I have been modifying to the showCases\multicomponent2d\rayleighTaylor example, as that uses MC SC method. First, it’s unclear whether I need to change the descriptor “descriptors::ForcedShanChenD2Q9Descriptor” or not, if I am to use the “data processors”(?) within another forcing method. Seemingly, I need to change “new ExternalMomentRegularizedBGKdynamics<T, DESCRIPTOR>” to the MRT dynamics version, but it’s also not clear which MRT dynamics I should use. It’s also unclear to me whether the “integrateProcessingFunctional” generated later is required at all either. The documentation just says “look at the Allmodels2D example” but none of it feels clear to me how to go about modification.

On the source code side:
I’m even less clear here what I should be doing. Presumably, I need to 1) create my own descriptor? At bareminimum, create a class that inherits from ForcedMRTdynamics, I’m guessing? And this class needs to have its own collide and equilbrium methods? What’s also confusing me is that the ShanChen MC processor found in “ShanChenProcessor2D.hh” also has a process method where what appears to be an explicit forcing term is calculated and applied to momentum. Do I need to code that too in this subclass? Or do I need to make a separate processor?

I have more questions, but that should give a good idea of where I’m at. Thanks to anyone who can help out!

The documentation isn’t particular clear what to change

1 Like