Finite element code focused on fluid-dynamics applications, multiphase flows, including mesh-free particle simulators.
Author pseastham
5 Stars
Updated Last
2 Years Ago
Started In
January 2019


Build Status Codecov DOI

Finite Element code in the Julia language focused on complex fluid-dynamic and porous-media applications, with the possibility of including a particle simulator in the framework of the discrete element method. The 'eFEM' component allows the use of Finite Elements discretizations to solve common problems in fluid dynamics, and the 'part' refers to mesh-free particle methods (discrete element method) primarily aimed at granular-media simulations where continuum constitutive laws are unavailable.


eFEMpart.jl is an unregistered package couples two other packages together: eFEM.jl and StokesParticles.jl. To install using the REPL, type the following three commands (in order)

pkg> add https://github.com/pseastham/StokesParticles.jl
pkg> add https://github.com/pseastham/eFEM.jl
pkg> add https://github.com/pseastham/eFEMpart.jl

To enter the Pkg environment from the REPL, type ].


For ractangular geometries, you can use built-in geometry code. For more complicated geometries we suggest building your mesh with an external library (such as GMSH). See the meshes wiki for how this is used in practice.


For now, eFEMpart provides frameworks to handle systems using the following equations:

  • Poisson's Equation (:Poisson2D)

  • Darcy's Equation (:Darcy2D)

  • Advection-Diffusion Equation (:AdvDiff2D)

  • Stokes' Equation (:Stokes2D)

  • Brinkman's Equation (:Brinkman2D)

  • Brinkman's Multiphase Equation (:BrinkmanMP2D)

All parameterized equations can be solvable with either constant or variable-in-space parameters. Additionally, Axisymmetric version of the Advection-Diffusion and Stokes equations are available with the Operator Types of :AdvDiffAS and :StokesAS, respectively.

Equations in this README were generated by the GitHub app TeXify

Auxiliary Information

Boundary conditions are treated intuitively, based on the mesh given. The functions Dirichlet, Neumann, and Robin allow assignment of boundaries to have certain boundary conditions, and the functions Dirichlet, Neumann, Forcing allow for the definition of the actual boundary conditions at these boundaries. See examples for how this is used in practice.


We export all solutions in a legacy VTK format. For visualizing these files, we suggest using VisIt


Check out the examples folder to see how to use our syntax.


If you use eFEMpart in published work, I would appreciate you starring this Github page, and using the following citation:

  author = {Eastham, Patrick S},
  title = {{eFEMpart}},
  year = {2019},
  publisher = {GitHub},
  journal = {GitHub repository},
  doi = {10.5281/zenodo.3369788},
  howpublished = {\url{https://github.com/pseastham/eFEMpart}},