Building a Composable Simulation Ecosystem in Julia: From Ferrite.jl to Thunderbolt.jl

  • Ogiermann, Dennis (Ruhr University Bochum)

Please login to view abstract download link

Some existing multiphysics software systems suffer from architectural debts. The fine line between maintaining a good abstraction level and too tight coupling of components has been crossed, manifesting in frequent violations of the open-closed principle. These systems are usually written in object oriented languages, typically C++, which does a great job as the industry standard. However, the strong reliance on object orientation forces a tradeoff between composability and simplicity. Newly developed languages explore concepts different from object orientation as first principles. The Julia programming language is one of these proponents, with a design centered around multiple dispatch. This decision has proven to be a helpful in assisting the development of composable and extensible codes without the performance penalties typically associated with high-level languages. Learning from the limitations on the design of existing finite element frameworks, Ferrite.jl has been developed as a modular toolbox providing the essential building blocks to build finite element-type simulations. The clear separation of the finite element code from the remaining numerical algorithms and data structures allows to quickly explore advanced simulation techniques. However, while the flexibility is certainly Ferrite's main strength, not every user needs this much flexibility. To bridge the gap between flexibility and ease of use, a middleware layer of specialized packages has emerged -- such as FerriteAssembly.jl, FerriteOperators.jl, and FerriteMultigrid.jl -- bundling standard functionality into reusable components. This presentation gives some insights on the design of the ecosystem, demonstrating how it unlocks the rapid development of Thunderbolt.jl for the simulation of sophisticated cardiac multiphysics models.