Nitsche’s method applied to linear elasticity problems

Hello everyone,

I’m currently trying to implement a 2D linear elasticity problem involving two adjacent rectangular domains, each with its own mesh, coupled using the Nitsche method.

I have the following problem :

\begin{gather} \mathrm{div}(\sigma_i)= 0 \ \ \ \text{in} \ \Omega, \forall i \in \{1,2\}\\ \sigma = C_i\varepsilon(u_i) \ \ \ \text{in} \ \Omega, \forall i \in \{1,2\}\\ \sigma_2 n_2 = f \ \ \ \text{on} \ \Gamma^n. \\ [\![ u ]\!] = u_1 - u_2 = 0 \ \ \ \text{on} \ \Gamma \\ \sigma_1 n_1 + \sigma_2 n_2 = 0 \ \ \ \text{on} \ \Gamma \end{gather}

I use the Nitsche formulation, which reads as:

\displaystyle \sum_{i \in \{1,2\}}\int_{\Omega_i} \sigma_i : \varepsilon(v_i) - \int_{\Gamma} \{\sigma\} [\![ v ]\!] \cdot n - \int_{\Gamma} [\![ u ]\!] \{ C\varepsilon(v)\} \cdot n + \frac{\omega_0}{h_{\Gamma}}\int_{\Gamma} [\![ u ]\!] [\![ v ]\!] = \int_{\Gamma^n} f \cdot v_2

The challenge I’m facing is how to compute and assemble the Nitsche term along the interface.

From what I understand, the MultiMesh functionality that was available in FEniCS does not yet exist in FEniCSx, and I haven’t found a way to handle mesh coupling across separate meshes. I tried several things, like using mesh.submesh(), but I can’t seem to get to the bottom of the problem.
If anyone has experience with this or any suggestions, I’d really appreciate your help!

Thanks for your time.

This should be a good place to start:

Are the meshes matching at the interface?

Thanks ! I didn’t catch this Workshop.

We are aiming for non-matching meshes, but I thought it would be a good idea to start with matching meshes. So it seems relevant to consider both approaches.

Non-matching meshes with Nitsche can not be done with the aforementioned tutorial.

For matching/submeshes, you could also consider

and

For non-marching with Nitsche I would suggest

or the strong formulation (MPC) at

1 Like