![]() |
v0.15.0 |
jupyter: jupytext: text_representation: extension: .md format_name: markdown format_version: '1.3' jupytext_version: 1.17.2 kernelspec: display_name: Python 3 (ipykernel) language: python
The theory discussed in this notebook has been developed as part of the finite element library, MoFEM [Kaczmarczyk, 2020], For further information visit our website here.
We will start this notebook by introducing the idea of the mixed formulation and its difference from the coupled problem formulation:
Examples of classical problems permitting (and benefiting from) mixed formulation include, but are not limited to:
There are multiple reasons for using mixed formulation, see [Boffi, 2013] for more details:
For a more detailed discussion of this formulation see this video.
The strong form for quasi-static large strain elasticity is the classical conservation of linear momentum defined as:
\begin{align} -\textrm{DIV}\:(\mathbf P) = 0 & \quad \textrm{in}\; \Omega_0 \ \mathbf u - \bar {\mathbf u} = 0 & \quad \textrm{on}\; \Gamma_u, \ \bar{\mathbf t} - \mathbf P \cdot \mathbf N = 0 & \quad \textrm{on}\; \Gamma_t, \end{align}
where we assume no body forces acting on the domain, $\mathbf P$ represents the first Piola stress, $\mathbf u$ is the spatial displacement, $\bar{\mathbf u}$ is the prescribed spatial displacement boundary condition, $\bar{\mathbf t}$ is the applied traction and $\mathbf N$ is the normal vector of the respective surface.
To fully understand the mixed formulation in this notebook we assume a prior knowledge of non-linear continuum mechanics, but we will first introduce some lesser-used additional kinematics. Based on the polar decomposition of the deformation gradient $\mathbf{F} = \mathbf{R}\mathbf{U}$ where $\mathbf{U}$ is the symmetric stretch tensor and $\mathbf{R}$ is the orthonormal rotation tensor. The rotation can be expressed using the exponential map: $$ \mathbf{R} = \exp(\mathbf{A}) = \mathbf{1} + \frac{\sin(\omega)}{\omega} \mathbf{A} + \frac{2\sin^2(\omega/2)}{\omega^2} \mathbf{A}^2 $$
In index notation: $$ R_{iI} = \delta_{iI} + \frac{\sin(\omega)}{\omega} \varepsilon_{iIJ} \omega_J + \frac{2\sin^2(\omega/2)}{\omega^2} \varepsilon_{iKJ} \varepsilon_{KIL} \omega_J \omega_L $$
with: $$ \omega = |\boldsymbol{\omega}|, \quad \overline{\boldsymbol{\omega}} = \frac{\boldsymbol{\omega}}{\omega}, \quad \mathbf{A} = \boldsymbol{\varepsilon} \cdot \overline{\boldsymbol{\omega}} $$
Finally, the variation of spatial rotation is: $$ \delta R_{iI} = \varepsilon_{KIJ} R_{jK} \delta \omega_J $$
To derive the mixed formulation we start with an energy functional below expressed in terms of the four independent fields as displacement vector $\boldsymbol{u}$, rotation tensor $\boldsymbol{R}$, stretch tensor $\boldsymbol{U}$ and first Piola-Kirchhoff stress tensor $\boldsymbol{P}$: \begin{equation} \Pi\left(\boldsymbol{u},\boldsymbol{R},\boldsymbol{U},\boldsymbol{P}\right) = W\left(\boldsymbol{R}\boldsymbol{U}\right) + \int_{\Omega_0} \left( \frac{\partial x_i}{\partial X_J} - R_{iK} U_{KJ} \right) P_{iJ} \, dV - \int_{\Gamma_0} \bar{u}_i t_i \, dS, \end{equation}
We first obtain our consistency equation by taking variation with respect to first Piola-Kirchhoff stress as: \begin{align} \text{D } \Pi \left[\delta P_{iJ} \right] &= \int_{\Omega_0}\delta P_{iJ}\frac{\partial x_{i}}{\partial X_J}\text{ dV} - \int_{\Omega_0}\delta P_{iJ}\left(R_{iI} U_{IJ}\right) \text{ dV};\ &= \int_{\Omega_0}\delta P_{iJ}\frac{\partial u_i}{\partial X_J} \text{ dV} - \int_{\Omega_0} \delta P_{iJ}\left(R_{iI} U_{IJ}-\delta_{iJ}\right) \text{ dV}, \end{align}
Applying integration by parts to $\int_{\Omega_0}\delta P_{iJ}\frac{\partial u_i}{\partial X_J}\text{ dV}$: \begin{equation} \begin{split} \text{D } \Pi \left[\delta P_{iJ} \right] = - \int_{\Omega_0} \delta P_{iJ} \left( R_{iI} U_{IJ} - \delta_{iJ}\right) \text{ dV} - \int_{\Omega_0} \frac{\partial\delta P_{iJ}}{\partial X_J} u_i \text{ dV} +\int_{\Gamma_0} N_J \delta P_{iJ} \overline{u}_i\text{ dS}. \end{split} \end{equation}
Notice that the displacement $\bar u$ is now applied in the weak sense, which is typical for the mixed formulation. Traction boundary condition is applied a priori. This equation is used to enforce the consitency between our calculated displacements and solved displacements.
Next, the physical/constitutive equations are enforced in integral strong sense as follows: \begin{equation} \begin{split} \text{D } \Pi \left[(R\delta U)_{iJ} \right] &=\frac{\partial W \left(U\right)}{\partial \left( RU\right)_{iJ}} (R\delta U)_{iJ} - \int_{\Omega_0} (R\delta U)_{iJ}P_{iJ} \,\text{ dV} \ \text{D } \Pi \left[R_{iK}\delta U_{KJ} \right] &= R_{iK} \frac{\partial W (U)}{\partial U_{KJ}} R_{iK}\delta U_{KJ} - \int_{\Omega_0} R_{iK}\delta U_{KJ}P_{iJ} \,\text{ dV} \ \text{D } \Pi \left[\delta U_{KJ} \right] &=\frac{\partial W}{\partial U_{KJ}}\delta U_{KJ} - \int_{\Omega_0} R_{iK}\delta U_{KJ}P_{iJ} \,\text{ dV} \ \end{split} \end{equation} Note it is weighted only by bases of stretch tensor $\mathbf U$ since the rotations should be stress free. This equation enforces that the solved for first Piola-Kirchhoff stress is consistent with with calculated stress from the constitutive equation we choose, defined later.
Next, angular momentum is satisfied with taking into consideration the rotation kinematics definded previously, as follows:
\begin{equation} \text{D } \Pi \left[\delta R_{iK} \right] = -\int_{\Omega_0} \left( \delta R_{iK} U_{KJ} P_{iJ}\right) \text{ dV} \end{equation} This equation ensures the conservation of angular momentum enforcing the symmetry of the cauchy stress tensor in a weak sense.
Finally, the conservation of linear momentum equation is enforced as follows: \begin{equation} \text{D } \Pi \left[\delta u_i \right] = \int_{\Omega_0} \frac{\partial P_{iJ}}{\partial X_J}\delta u_i - \delta u_i f_i \, \text{ dV} \end{equation} This equation solves for the displacements of our problem.
Combining these four equations gives a system of equations as follows:
\begin{equation*} \begin{split}
With above equations at hand, we choose approximation spaces as follows: $$ \left\{ \begin{array}{l} \delta\mathbf{P}\in U_0^h
\subset H^\textrm{div}_0(\Omega_0^h) :=
\delta\mathbf{P} \in H^\textrm{div}(\Omega_0^h) :
N_{j}\delta P_{ij} = 0\;\textrm{on}\;\Gamma_0^{h,u}