```
load "msh3"
// Parameters
int nn = 20; // Mesh quality
// Mesh
int[int] labs = [1, 2, 2, 1, 1, 2]; // Label numbering
mesh3 Th = cube(nn, nn, nn, label=labs);
// Remove the ]0.5,1[^3 domain of the cube
Th = trunc(Th, (x < 0.5) | (y < 0.5) | (z < 0.5), label=1);
// Fespace
fespace Vh(Th, P1);
Vh u, v;
// Macro
macro Grad(u) [dx(u), dy(u), dz(u)] //
// Define the weak form and solve
solve Poisson(u, v, solver=CG)
= int3d(Th)(
Grad(u)' * Grad(v)
)
-int3d(Th)(
1 * v
)
+ on(1, u=0)
;
// Plot
plot(u, nbiso=15);
```

# A high level multiphysics finite element software

FreeFEM offers a fast interpolation algorithm and a language for the manipulation of data on multiple meshes.

## Easy to use PDE solver

FreeFEM is a popular 2D and 3D partial differential equations (PDE) solver used by thousands of researchers across the world.

It allows you to easily implement your own physics modules using the provided FreeFEM language.
FreeFEM offers a large list of finite elements, like the Lagrange, Taylor-Hood, etc., usable in the continuous and discontinuous Galerkin method framework.

## Pre-built physics

- Incompressible Navier-Stokes (using the P1-P2 Taylor Hood element)

- Lamé equations (linear elasticity)
- Neo-Hookean, Mooney-Rivlin (nonlinear elasticity)

- Thermal diffusion
- Thermal convection
- Thermal radiation

- Magnetostatics
- Electrostatics

- Fluid-structure interaction (FSI)

## Strong mesh and parallel capabilities

FreeFEM has it own internal mesher, called BAMG, and is compatible with the best open-source mesh and visualization software like Tetgen, Gmsh, Mmg and ParaView.

Written in C++ to optimize for speed, FreeFEM is interfaced with the popular mumps, PETSc and HPDDM solvers.

## HPC in the cloud integration

With Qarnot's HPC platform, **7 lines** of python code is all you need to run a FreeFEM simulation in the cloud. Learn how to run FreeFEM with Qarnot's sustainable HPC platform on Qarnot's blog.

FreeFEM is also available on Rescale's ScaleX® Pro. Rescale offers academic users up to 500 core hours on their HPC cloud.

# Latest Articles

December 29, 2020 | Sana Keita, Abdelaziz Beljadid, Yves Bourgault

This study concerns numerical methods for efficiently solving the Richards equation where different weak formulations and computational techniques are analyzed. The spatial discretizations are based on standard or mixed finite element methods. Different implicit and semi-implicit temporal discretization techniques of second-order accuracy are studied. To obtain a linear system for the semi-implicit schemes, we propose second-order techniques using extrapolation formulas and/or semi-implicit Taylor approximations for the temporal discretization of nonlinear terms. A numerical convergence study and a series of numerical tests are performed to analyze efficiency and robustness of the different schemes. The developed scheme, based on the proposed temporal extrapolation techniques and the mixed formulation involving the saturation and pressure head and using the standard linear Lagrange element, performs better than other schemes based on the saturation and the flux and using the Raviart-Thomas elements. The proposed semi-implicit scheme is a good alternative when implicit schemes meet convergence issues.

December 24, 2020 | Andrzej Frackowiak, Aleksander Olejnik, Agnieszka Wróblewska, Michał Ciałkowski

This paper presents an algorithm applied for determining temperature distribution inside the gas turbine blade in which the external surface is coated with a protective layer. Inside the cooling channel, there is a porous material enabling heat to be transferred from the entire volume of the channel. This algorithm solves the nonlinear problem of heat conduction with the known: heat transfer coefficient on the external side of the blade surface, the temperature of gas surrounding the blade, coefficients of heat conduction of the protective coating and of the material the blade is made of as well as of the porous material inside the channel, the volumetric heat transfer coefficient for the porous material and the temperature of the air flowing through the porous material. Based on these data, the distribution of material porosity is determined in such a way that the temperature on the boundary between the protective coating and the material the blade is made of is equal to the assumed distribution To. This paper includes results of calculations for various thicknesses of the protective coating and the given constant values of temperature on the boundary between the protective coating and the material the blade is made of.

December 24, 2020 | Balaje Kalyanaraman, Michael H. Meylan, Bishnu P. Lamichhane, Luke G. Bennetts

Vibrations of ice-shelves in response to ocean waves were first investigated by (Holdsworth & Glynn, 1978) who proposed that resonant vibrations lead to icebergs calving from the shelf front. Since then seismometric measurements on the Ross ice-shelf, the largest Antarctic ice-shelf, confirmed the presence of this ocean wave-induced ice-shelf vibration (Bromirski et al., 2015;Massom et al., 2018). The period of vibration ranged from the long infragravity/tsunami waves to shorter, swell waves. More recently, (Brunt et al., 2011) presented the first observational evidence that a Northern Hemisphere tsunami triggered calving on the Sulzberger ice-shelf. Mathematical models based on linear wave theory have been proposed to study these ocean-wave induced ice-shelf vibrations. The numerical method is based on finite element method and the modal expansion technique. This results in a system of equations [K-omega^(2)M+i*omega*B]{lambda}={f} whose entries are analytic functions of the incident frequency omega. The dimension of the above linear system is much smaller than the finite element degrees of freedom and can be solved efficiently. Further, using the analyticity of the resulting system, a large number of frequency domain solutions can be obtained by interpolating the linear system without having to solve the much larger finite element problem on a finer frequency grid as shown in Figure 1. Further details on the usage of the package can be found in the README.md file located in the repository page.