Muscat was primarily designed as a basic set of tools to work on meshes in the context of finite element computations.

The main functionalities of the library include:

  • IO support: A set of classes that enable reading and writing meshes (as well as solution fields) from/to a wide variety of file formats. Muscat does not have its own file format because existing formats already provide most, if not all, of the required functionalities.
  • Mesh manipulation: Algorithms to filter, define, extract, and manipulate meshes in various ways.
  • Fields manipulation: Finite element fields can be defined using different types of interpolation (P0/P1/P2), either across the entire mesh or only in specific zones, as well as at integration points. These classes have overloaded operators to facilitate the computation of relevant quantities.
  • Integration: Algorithms for the integration of weak formulations (tangent matrices, right-hand terms, and integrals over specific sections of a mesh).
  • Field transfer: Various Algorithms to transfer fields from one mesh to another.
  • Finite element solver: Leveraging the aforementioned tools, Muscat provides a basic finite element solver for solving generic partial differential equations on unstructured meshes.

Link to Muscat sources on

Link to Muscat documentation on

conda install -c conda-forge muscat


2 responses to “Muscat”

  1. Paul Morel avatar
    Paul Morel

    Hi! I heard about the Muscat set of tools to work on meshes and it might be something interesting for my work. I’m working on a .msh mesh and I would like to modify the type of elements for one of the volumes (from tetra to prism).
    Do you know if it’s something Muscat could handle easily?
    Thank you for your answer, have a nice day!

    1. Felipe avatar

      You can do some mesh manipulation using Muscat. But muscat is not a mesher. you must write the algorithm for the conversion (or call a mesher “mmg” is already connected to Muscat).

      you can use the functionalities of Muscat to do some part of the work:
      – Select the element to treat (ElementFilter)
      – Extract theses element ExtractElementByFilter
      – change the connectivity to create prism (this is your work)
      – Delete the extracted elements from you original mesh DeleteElemets
      – Merge you modified mesh (with the prims) you your original mesh mesh.Merge(otherMesh)

      you can do it inplace but you must know the internal of Mesh (the structure of the class Mesh is not very complex)

Leave a Reply

Your email address will not be published. Required fields are marked *