Differentiable programming for scientific computing with Enzyme and Julia Valentin Churavy, University of Augsburg
10:15-11:00
Introduction to Ferrite.jl Kim Louisa Auth, Technical University of Denmark
11:00-11:10
Coffee break
11:10-11:30
The research spectrum of IKM covers the modelling and numerically efficient solution of complex material behavior, including topology optimization and uncertainty quantification. The solution of the derived equations generally relies on the Finite Element Method but also requires significant adjustments and additions for innovative numerical solutions. This makes Ferrite.jl, as a FEM toolbox, of great use for us, as it allows for the required freedom to implement our methods. We present examples on uncertainty quantifications, topology optimization and coupled problems, showing the numerical implementation and results, which highlight the application of Ferrite.jl and discuss the package expansion possibilities.
11:30-11:50
Numerical models usually involve making assumptions about material parameters, initial conditions etc. Treating these parameters as random variables leads to randomness in the model outcome. I present how I quantify that uncertainty in a Ferrite.jl simulation of a phase field brittle fracture problem and I show how data can be used to decrease that uncertainty in order to get more reliable model outcomes.
11:50-12:10
In this work, we present a two-field canonical minimization formulation for phase-field approach to topology optimization. We further extend this to other problems like second-order poro-elasticity to model the hydro-mechanical behaviour of porous media. I would also like to share my experience on using Ferrite.jl for teaching from two perspectives. As an instructor teaching courses in computational mechanics and also as an IT administrator at the institute.
12.10-13.15
Lunch
13:15-13.35
Tensors are used to formulate physics problems in many fields, particularly those solved using the finite element method. They frequently appear at the innermost level of the finite element loop and are therefore crucial to the overall performance of simulations. In addition, to reduce the likelihood of bugs when translating the weak form into finite element code, it is important that there is a close correspondence between the mathematical description of the problem and the program code used to solve it.The classical way of implementing tensors and tensor operations is through the Voigt format, which maps tensors and tensor operations to a standard linear algebra framework that tends to be provided out of the box by programming languages. However, as will be shown, this approach has drawbacks both in terms of performance and clarity.In Ferrite.jl, we use the Tensors.jl package for internal tensor operations, and it is also what we recommend users adopt in their own code when interacting with Ferrite.jl.In this talk, I will discuss Tensors.jl, how it works internally, how it supports automatic differentiation, and some possible future improvements.
13:35-13:55
Ferrite is often described as a FEM "toolbox" as opposed to a full fledged FEA platform. In this talk I will present how Ferrite seamlessly integrates with many other packages in the Julia ecosystem to enable more features. For example, BlockArrays.jl can be used for blocked global (or local) system matrices and enable block based solvers, OhMyThreads.jl can be used to enable multithreaded assembly and ForwardDiff.jl can be used to enable automatic differentiation. Hopefully this talk will demonstrate how easy it is to bring more functionality to Ferrite through other packages and inspire you to try out your own combinations of packages in order to tailor for your own Ferrite use case.
13:55-14.15
With newly added H(div) and H(curl) interpolations, Ferrite.jl can now tackle a broader range of problems — but this also brings extra complexity to FEValues. In this talk, I’ll go over what these interpolation types are, when you might need them, and how they’re implemented in Ferrite
14:15-14:35
Algebraic Multigrid (AMG) methods can be highly effective for solving vector-valued PDEs—such as linear elasticity—when properly tuned with suitable near null spaces. However, classical AMG struggles with higher-order finite element discretizations. In contrast, Polynomial Multigrid (pMG), a geometric multigrid variant, excels at coarsening high-order polynomial spaces down to linear order (p = 1). These two approaches can be effectively combined by applying AMG as the coarse solver within a pMG hierarchy, where AMG is often optimal for the resulting first-order problems. This hybrid strategy is realized in the new Julia package FerriteMultigrid.jl, which builds on Ferrite.jl for finite element infrastructure and AlgebraicMultigrid.jl for coarse-level solves. In this presentation, I will outline the theoretical foundations of this method using linear elasticity as a guiding example and demonstrate how the package helps in quickly developing efficient combined multigrid preconditioners.
This work presents a viscoplastic material model for concrete used in shotcrete 3D printing, which is an additive manufacturing method. Numerical examples at both material and structural levels are provided to showcase the transient response of the material and the development of plastic failure within an additively manufactured structure. The implementation is performed using Ferrite.jl as the Finite Element framework. In addition, FerriteInterfaceElements.jl is utilized to simulate the interlayer behavior.
15:40-16.00
Update on Adaptive Mesh Refinement (AMR) presented in last year's FerriteCon. This AMR algorithm differs from other algorithms in that the finer elements are superpositioned with their parents rather than substituting them. In contrast to classical AMR techniques, this allows the enforcement of continuity without explicitly forming constraints, as would result in the classical approach due to e.g. hanging nodes. With this algorithm we cache local element contributions reducing the assembly overhead. This is especially beneficial for local timestepping using Discontinuous Galerking (DG) as the timestepping is done per element due to the mass matrix being block-diagonal thus no need to assemble the cached local matrices into a global one. The implementation follows the work of "Efficient multi-level hp-finite elements in arbitrary dimensions" (Kopp et al., 2022).
16:00-16.20
Many finite element codes tend to be memory bound, which implies that relying on the good cache access patterns matters. However, general purpose mesh generators like Gmsh tend to order the elements in a seemingly random way. Even worse, the topology of a mesh is, in general, a graph. When iterating over the elements, thinking about nodal ansatz functions for now, then it would be ideal to use the reuse nodal information of previous elements as good as possible, i.e. we want to iterate consecutively over neighboring elements. In this light the question on how to order the elements can be framed as the quest for finding an ordering, such that the linear path induced by the element numbering minimizes some functional, which describes this neighborhood – or formally, we want to solve a linear arrangement problem. In this talk I will show you on some benchmarks how Gecko.jl can be used to solve this problem, thus speeding up your simulations.
16:20-17:30
Hackathon and open discussion
19:00
Social Dinner at Pincho Nation Axeltorv 8 Please register by 24.08.2025 (email kloau@dtu.dk). Note that the dinner will be at your own cost.
You can also have a look at the program of previous editions of FerriteCon:
Regular talks are 15min + 5 mins for questions. We will live-stream the conference via Microsoft Teams and record the talks, in order to upload them on the JuliaLang Youtube channel. If you do not consent to this, please contact the organizers and we will exclude your talk from the uploaded videos. You can present from your own laptop, in this case please make sure that you can share your slides in a Teams meeting so that our recording will include the slides. The room is equipped with video / audio equipment, and we will be available in the conference room from 8:30 on the day so that you can try connecting your computer.
If you need to use public transport in Copenhagen, you can buy single tickets via DOT, but usually the cheaper option is rejsekort.dk (check-in / check-out system). Both are available as apps.
Please note that the abstract registration deadline has passed
If you have experience with Ferrite.jl we also encourage you to contribute to the conference by giving a presentation. Here are some suggested topics that would fit well:
Present your research and how you use Ferrite.jl (take this opportunity to discuss implementation aspects which are normally not discussed much on regular scientific conferences!)
Present interesting synergies between Ferrite.jl and the rest of the Julia package ecosystem
Present how you use Ferrite.jl for teaching or for student projects
Describe what you would like to use Ferrite.jl for, and the reasons why you are currently using something else.
Present ideas for future Ferrite.jl improvements and describe how you would like to incorporate it (perhaps describe prior art from other software packages)
If you have another topic you would like to discuss, please feel free to do so, as long as you can relate it to Ferrite.jl!