CFL Number

– As you probably know the (differential) equations describing the motion of all the particles are resolved by using numerical methods.
– Honestly I don’t know wich algorithm Blender uses, but I suppose it uses the standard v*(Δt/Δx) for the CFL Number. If you know another formula is used please write me!
– What does the CFL Number represent? Look at this image (voxels are 3-dimensional and this is a one-dimensional example but this reasoning can be extended to a 3D voxel):

Blender Domain Liquid CFL Voxels

– If v is too hight, we loose the information that should be stored in the second voxel. The solution is to insert extra Time Steps.
x is the size of a voxel and t the time the particle needs to run it, v=x/t the particle’s velocity.
– If we reduce the velocity, that’s to say v≤x/t, the particle will run one FULL voxel (or LESS).
– If we think in terms of incremental values: v≤Δx/Δt ⇒ v*(Δt/Δx)≤1

CFL≤1 is the condition, for a particle, to travel only from a voxel to a adiacent one.
– Why does the default Blender CFL Number is set to 4.0 instead of 1.0 (or less) ? I think it’s to reduce baking time.

How to choose the right CFL Number for your simulation? Blender is not “real simulations” oriented. Remember we will never obtain a “real” simulation as everything is based on approximate physics that lead to approximate solutions. In general a smaller CFL number means a more ‘realistic’ simulation but if you find your simulation looks better with a greater CFL Number, raise it up!

– In this first example see how different values of CFL Number affects a simulation:

– What about using CFL Numbers greater than one? Consider again the above image: if for a certain velocity your particle cannot travel ,e.g, 3 voxels, no matter if we rise up the CFL Number, because if your particle cannot travel 3 voxels, will not be able to travel 4 or more, so that no extra Time Steps will be used.

– In this second example see how a simulation remains exactly same from CFL Number = 4.2 up.

Blender Domain Liquid CFL Number

– Always keep in mind that your simulation is a combination of CFL Number , Timesteps, Resolution Divisions, Video Frame Rate etc..!

Some considerations

– The CFL Number is a necessary (but not sufficient) condition for the convergence of the differential equations that describe the motion of all the particles inside the domain.
– “Convergent Solutions” means that when Δx and Δt (used in the numerical method) tend to zero, this numerical solution will tend to the exact solution.
– Sometimes the CFL Number is confused with a ‘Stability Condition’ (that means that as computation proceeds, errors get smaller). Keep in mind that there are methods stable for arbitrary Δt that, however, are not convergent unless a CLF condition is met.
– Smaller CFL Numbers mean bigger computational times (because of the extra Time Steps).
– CFL Number=0 , make it sense? The CFL Number can be equal to zero only if velocity is equal to zero that’s to say for NO moving fluids or NO time flow. (v*(Δt/Δx)=0 ⇒ v=0 OR Δt=0 ). I think that if you choose CFL NUmber=0 then Blender sets very small value, please let me know if you know the correct answer to this question!