% !TEX root = main.tex
\chapter{Elasticity}

We are going to connect forces and strains in solids. We define $\varepsilon = \frac{\Delta L}{L_0}$.

\begin{figure}[h!]
    \centering
    \includegraphics[scale=0.5]{img/elasticity.png}
    \caption{Diagram showing the different regimes of an elastic material.}
    \label{fig:elasticity_graph}
\end{figure}

In figure \ref{fig:elasticity_graph}, we can distinguish four zones:
\begin{itemize}
    \item \underline{Elastic deformation} (reversible): includes a linear part (small $\varepsilon$).
    \item \underline{Yield stress}: plastic deformation begins.
    \item \underline{Plastic deformation} (irreversible).
    \item \underline{Rupture}: defines ``tensile strength''.
\end{itemize}

We can distinguish 2 types of materials:

\begin{enumerate}
  \item \underline{Brittle materials}: they don't present plastic behavior (like glass). Abrupt break-up at threshold \footnote{umbral} $\varepsilon$.
  \item \underline{Ductile materials}: they do present plastic behavior before rupturing, like in figure \ref{fig:elasticity_graph}.
\end{enumerate}

Our focus will be linear elastic regime. We are looking for a linar relation between stress and strain. It will be valid for small $\varepsilon$, and the rank of validity depends on the material. When stresses grow large, most materials deform more than predicted by Hooke's law and in the end reach the elasticity limit, where they either become plastic or break.

In continuous matter we do not fo into the microscopic interactions responsible for elastic behaviour (\textit{but it's super cool}). A lot of materials can be characterized with few (just two) parameters: the Young's modulus $Y$\footnote{Oju, que que Lautrup li diu $E$} and the Poisson's ratio $\nu$. We'll see this in the next section.

%\begin{defi}[Young's!modulus] % NOTE(Aina): m'estic fent bastnat de lio amb això- crec que no ho vam definir a classe, sino que vam fer direcament el tensor d'elasticitat i no trobo al llibreque surti. no se
                               % NOTE(Adri): Okey, ho he comentat :)
%  The \underline{Young's modulus}
%\end{defi}

%\begin{defi}[Poisson's!ratio]
%  The \underline{Poisson's ratio}
%\end{defi}

\section{Hooke's law in tensorial form for homogeneous and isotropic materials}
It's the most general $\TT{\sigma} - \TT{u}$ relation. The linearity stress-strain can be expressed as:
$$\sigma_{ij} = \sum_{k,l} E_{ijkl} u_{kl}$$
Where $E_{ijkl}$ are the components of the tensor of elasticity. This relation is valid even for anisotropic materials.

If the medium is isotropic: %TODOOOOOOOOOOOOOOO
\[ \boxed{\sigma_{ij} = 2\mu u_{ij} + \lambda(\sum_k u_{kk})\delta_{ij}.} \]

\index{Lamé coefficients}
  Hooke's law for isotropic materials is a good assumption, but it's not strict. $\lambda$ and $\mu$ are the \textbf{Lamé coefficients}. They are constants. $\lambda$ has no special name, but $\mu$ is called \textit{shear modulus}, because it controls the magnitude of shear stresses.

\begin{obs}
  Lamé coefficents must be mesured in pressure units, because the strain tensor is dimensionless.
\end{obs}

\begin{obs}
  If $u_{ij} = 0 \; \forall i, j$, then $\sigma_{ij} = 0 \; \forall i,j$. Hooke's law gives the additional stress due to the deformation.
\end{obs}

\begin{obs}
  $\mu = 0$ implies $\sigma_{ij} (i \neq j) = 0$ (meaning $\TT{\sigma}$ is diagonal). The behavior is ``similar'' to a fluid at rest.
\end{obs}

\begin{obs}
  Stress and strain depend on representations, Euler (the stress and the strain tensors are both viewed as functions of the actual position) or Lagrange (where the tensors are viewed as functions of the position of a material particle in the undeformed body). This distinction is not relevant for small deformations.
\end{obs}

\begin{obs}
  Linearity implies superposition principle:
  \[ \left. \begin{array}{r}
    \{ \text{stresses} \}_1 \longrightarrow \{ \text{strains} \}_1 \\
    \{ \text{stresses} \}_2 \longrightarrow \{ \text{strains} \}_2
  \end{array} \right\} \implies \{ \text{stresses} \}_1 + \{ \text{stresses} \}_2 \longrightarrow \{ \text{strains} \}_1 + \{ \text{strains} \}_2. \]
\end{obs}

\section{Relation between Lamé coefficients and other elastic moduli}
%example simple shear

%streched rod-lke object laid out along x-direction...

$$ \boxed{\lambda = \frac{Y \nu}{(1-2\nu)(1+\nu)}} $$
$$ \boxed{\mu = \frac{Y}{2(1+\nu)}} $$

Since $\sigma_{ii} = (2\mu + 3\lambda) u_{ii}$ and the stress tensor in Hooke's law respresents the change in stress due to deformation, the change in mechanical pressure caused by deformation is: %mathpix

% Això d'aquí abaix és una cosa que he fet per l'entregable (i ho he esborrat pq no s'havia de fer així hehe), però que serveix pels apunts (ho posaré bonic i en el lloc correcte més tard, per això ho poso comentat):
%The difference in mechanical pressure is:
$$ \Delta p = - \frac{1}{3} \Tr \TT{\sigma} \notate[X]{{}={}}{1.25}{\scriptstyle \text{Hooke's law}}
- \frac{1}{3} (2 \mu + 3 \lambda) \sum_i u_{ii} \approx - \left( \lambda + \frac{2}{3} \mu \right) \frac{\Delta V}{V}. $$

This can be rewritten in terms of $Y$ and $\nu$:
$$ \Delta p = - \left( \frac{Y \nu}{(1 - 2 \nu)(1 + \nu)} + \frac{2}{3} \frac{Y}{2 (1 + \nu)} \right) \frac{\Delta V}{V} = - \frac{3 Y \nu + Y (1 - 2 \nu)}{3 (1 - 2\nu) (1 + \nu)} \frac{\Delta V}{V} = $$
$$ = - Y \frac{1 + \nu}{3 (1 - 2 \nu) (1 + \nu)} \frac{\Delta V}{V} = - \frac{Y}{3 (1 - 2 \nu)} \frac{\Delta V}{V}. $$

\section{Inverting Hooke's law}
It can be shown that, by inverting Hooke's law, we obtain:
\[ u_{ij} = \frac{\sigma_{ij}}{2 \mu} - \frac{\lambda}{2 \mu (3 \lambda + 2 \mu)} \left( \sum_{k} \sigma_{kk} \right) \delta_{ij}, \]
which can also be expressed as:
\[ u_{ij} = \frac{1 + \nu}{Y} \sigma_{ij} - \frac{\nu}{Y} \left( \sum_k \sigma_{kk} \right) \delta_{ij}. \]

Furthermore, we can express $Y$ and $\nu$ in terms of the Lamé coefficients:
\[ \boxed{Y = \frac{\lambda}{2(\lambda + \mu)}} \]
\[ \boxed{\nu = \mu \frac{3 \lambda + 2 \mu}{\lambda + \mu}} \]

\section{Positivity constraints}
To do.

%\section{Hooke's law in anisotropic materials} %extra material al igual ho faig -- Totalment :')
%
\section{Elastic energy}

\begin{defi}[Elastic energy density]
  The \underline{elastic energy density} (stored in internal stresses of the material is):
  \[ u_\text{elastic} = \frac{1}{2} \sum_{i, j, k, l} E_{ikjl} u_{ij} u_{kl} = \frac{1}{2} \sigma_{ij} u_{ij} = \frac{1}{2} \TT{\sigma} : \TT{u}. \]

  For isotropic materials, this can be written as:
  \[ u_\text{elastic} = \mu \Tr (\TT{u}^2) + \frac{1}{2} \lambda \left( \Tr(\TT{u}) \right)^2 = \frac{1 + \nu}{2Y} \Tr(\TT{u}^2) - \frac{\nu}{2Y} \left( \Tr(\TT{\sigma}) \right)^2. \]
\end{defi}

\section{Total energy in a conservative external field}
Let's consider $\vec{f}$: an external field of conservative forces (e.g. gravitational field, which will be the most recurring in this course). Then, in this case, we have:
\[ u_\text{total} = \underbrace{- \vec{f} \cdot \vec{u}}_{u_\text{p}} + \underbrace{\frac{1}{2} \TT{\sigma} : \TT{u}}_{u_\text{elastic}}. \quad \text{(elastic density)} \]
