Main Features
It is important to note that within the granular flows field there are many different types of applications, which can be computed in a variety of way. The model you use may be dependent of the observed quantity. In this section, we will briefly outline the possibilities offered by the MigFlow Software.
Friction, Cohesion and so on…
The MigFlow software can take into account friction between the grains in various ways.
Its own frictional contacts solver, scontact, can solve friction in both 2D and 3D for spherical grains, considering that they can rotate or not. This local solver takes advantage of the sphericity of the particles to be very fast and efficient. The forces exerted by the grains on the domain boundaries can be computed, as well as the stress tensor inside the grains. It is also possible to set periodic conditions at the boundaries. Finally, scontact allows to fix some grains so that they act like a boundary, enabling the simulation of a granular flow through a fixed porous media for example.
Another possibility is to use LMGC90 Software (for installation we recommend to follow the instructions on their website), which is compatible with the fluid solver of MigFlow. This way, more complex contact laws and particle shapes can be taken into account. Note that the fluid solver will always consider spherical shapes for the grains.
Both solvers make use of the Nonsmooth Contact dynamics, which is a time-stepping method that corrects iteratively the free velocities of the grains, obtained by applying external forces, to compute a set of velocities giving after displacement of the grains a stationary state without intersection.
Some test cases are given to present how to call LMGC90 from the Users Interface:
mill.py presents the mixing of grains with different radii in a rotating drum using LMGC90 or scontact to take into account the impact of the friction on the mixing efficiency.
avalanchnofluidfriction.py presents a bidimensional grain avalanche without fluid, and shows how to use the LMGC90 software or the scontact solver at choice.
Adaptive Mesh
MigFlow is based on an unresolved Computational Fluid Dynamics-Discrete Element Method model. The discretisation method we choose for the CFD part is the Finite Element Method. On the one hand, unstructured grids offer a great flexibility to represent complex geometries with which grains interact. On the other hand, it is easy to adapt the mesh in order to refine it around the area of interest to accurately capture flow fields during the grains motion.
drop.py presents the fall of a cloud made of grains in a viscous fluid and makes use of this feature to refine the mesh around the cloud area during the fall. This way, it is possible to highly fasten the computation because the area of interest (i.e. the cloud) is small compared with the entire computational domain.
avalanch1fluidnofriction.py presents the fall of a granular column immersed in soft water
fluid.adapt_mesh(Max. element size, Min. element size, Total number of elements, a, b)
The arguments a and b in the adapt*mesh function are optional. These parametres are used to weigh the maximum and minimum gradient used to compute the new mesh size at each node of the old mesh. For more information on the refinement formula see: Constant, M., Dubois, F., Lambrechts, J. and Legat, V. (2018). Implementation of an unresolved stabilised FEM-DEM model to solve immersed granular flows. Computational Particle Mechanics. doi:10.1007/s40571-018-0209-4.
Two Fluids + Grains
To consider two continuous phases, an advective equation for the concentration is added to the standard Navier-Stokes equations. See the following example to run test cases with two different continuous phases.
avalanch2fluids.py presents the fall of a granular column immersed in sea water in a 2D domain filled with soft water.
Arbitrary Eulerian-Lagrangian (ALE) method & Free Surface
The MigFlow software can take into account mesh deformation using the Arbitrary Eulerian-Lagrangian (ALE) framwork. An example of this feature can be found :
The user has to provide the mesh velocity and update the mesh coordinates. This feature can be used to simulate free-surface :
dieSwell.py presents the swelling of a flow past a die in 2D.
Periodic
Periodic conditions are available. The periodicity transformation are deduced from mesh file. For the fluid phase, two points which are periodic will have the same degree of freedom. As for the solid phase, a ghost particle is created if a particle is close to a periodic boundary. Similarly to the fluid approach, the ghost particle is only a pointer to its parent particle.
Multiple examples of this feature can be found :
Fluid solver
The information is directly extracted from the mesh file. Therefore, to apply a boundary condition, the .geo file has to contain this information. No boundary conditions has to be imposed on the periodic boundaries. See the following examples for use of this feature :
Be careful about the line orientation while specifying periodicity in your .geo file.