diff --git a/quad8/continuummechanics/homework/hw3/main.pdf b/quad8/continuummechanics/homework/hw3/main.pdf
new file mode 100644
index 0000000..952a1a2
--- /dev/null
+++ b/quad8/continuummechanics/homework/hw3/main.pdf
Binary files differ
diff --git a/quad8/continuummechanics/homework/hw3/main.tex b/quad8/continuummechanics/homework/hw3/main.tex
new file mode 100644
index 0000000..63de975
--- /dev/null
+++ b/quad8/continuummechanics/homework/hw3/main.tex
@@ -0,0 +1,255 @@
+\documentclass[11pt,a4paper,dvipsnames]{article}
+\usepackage[utf8]{inputenc}
+
+\input{../preamble.tex}
+
+\title{Homework 3\\Continuum Mechanics}
+\author{Adrià Vilanova Martínez}
+\date{April 11, 2021}
+
+\begin{document}
+
+\maketitle
+
+\begin{Problem}
+  One of the hallmarks of the linear regime is the superposition principle. In this problem, we are going to use superposition to find the relation between the bulk modulus $K$, Young's modulus $Y$ and Poisson's ration $\nu$.
+
+  Consider a rectangular block subjected to uniform compressive stresses $-P$ on each face. The equilibrium sides of the block along $x$, $y$ and $z$ are $l$, $h$ and $w$, respectively, and the corresponding length changes are $\Delta l$, $\Delta h$ and $\Delta w$.
+
+  \begin{enumerate}[a)]
+    \item Find the strain along $x$ using Hooke's law as we learnt it in introductory courses (that is, $\sigma_{xx} = Y u_{xx}$ and $u_{yy} = u_{zz} = - \nu u_{xx}$). You will be using superposition since the strain along $x$ is the sum of three contributions, one coming from the compressive stress along $x$ and two additional contributions coming from the compressive stresses along $y$ and $z$.
+
+    Confirm that by using the inverted version of Hooke's law for isotropic materials we obtain the same answer.
+
+    \item The strains along $y$ and $z$ are identical to that along $x$. Find the bulk modulus of the material as a function of $Y$ and $\nu$. Realize our result is identical to that obtained in class in an alternative way.
+  \end{enumerate}
+\end{Problem}
+
+\textbf{Solution for a):} \\
+As the only contact force is pressure, the only components of the stress tensor will be the ones in the diagonal, which will be equal to $-P$.
+
+If we only consider the compressive stress along $x$, we get:
+\[ u_{xx}^1 = \frac{1}{Y} \sigma_{xx} = - \frac{1}{Y} P. \]
+
+However, we also have to consider the strain caused by the stresses in the $y$ and $z$ directions:
+\[ \begin{cases}
+  \displaystyle u_{xx}^2 = - \nu u_{yy}^2 = - \frac{\nu}{Y} \sigma_{yy} = \frac{\nu}{Y} P, \\[2ex]
+  \displaystyle u_{xx}^3 = - \nu u_{zz}^3 = - \frac{\nu}{Y} \sigma_{zz} = \frac{\nu}{Y} P.
+\end{cases} \]
+
+So, by the superposition principle:
+\[ u_{xx} = u_{xx}^1 + u_{xx}^2 + u_{xx}^3 = \frac{P}{Y} \left( 2 \nu - 1 \right). \]
+
+We can also calculate the strain along $x$ with the inverted version of Hooke's law for isotropic materials:
+\[ u_{ij} = \frac{1 + \nu}{Y} \sigma_{ij} - \frac{\nu}{Y} \, \Tr \TT{\sigma} \, \delta_{ij}. \]
+
+By using it, we obtain:
+\[ u_{xx} = \frac{1}{Y} \left( (1 + \nu) \sigma_{xx} - \nu \, \Tr \TT{\sigma} \, \delta_{xx} \right) = \frac{1}{Y} \left( - (1 + \nu) P + 3 \nu P \right) = \]
+\[ = \frac{P}{Y} \left( - 1 - \nu + 3 \nu \right) = \frac{P}{Y} \left( 2 \nu - 1 \right) \]
+which is precisely what we got before by using the superposition principle and Hooke's law we learned in introductory courses.
+
+\textbf{Solution for b):} \\
+From the previous result, we obtain:
+\[ \Tr \TT{u} = 3 P \frac{2 \nu - 1}{Y} \notate[X]{{}\implies{}}{1.25}{\scriptstyle \Tr \TT{u} \, \approx \, \frac{\Delta V}{V}} P \frac{V}{\Delta V} \approx \frac{1}{3} \frac{Y}{2 \nu - 1}. \]
+
+And by the definition of the bulk modulus, we conclude that
+\[ K = - V \left( \frac{\partial P}{\partial V} \right)_T \approx - V \frac{\Delta P}{\Delta V} \approx \frac{Y}{3 (1 - 2 \nu)} \]
+which is the same result we derived in class.
+
+\newpage
+
+\begin{Problem}
+  Consider the class example we referred to as ``constrained settling''. We are going to tackle the problem here in an alternative way to how we did it in class.
+
+  \begin{enumerate}[a)]
+    \item Start by solving the Navier-Cauchy equation to obtain the displacement field.
+    \item Then obtain the strain and stress tensors.
+    \item Why do you think Lautrup refers to this example as an ``elastic sea''?
+  \end{enumerate}
+\end{Problem}
+
+\Solution
+The Navier-Cauchy equation is:
+\[ \vec{f} + \mu \nabla^2 \vec{u} + (\lambda + \mu) \nabla (\nabla \cdot \vec{u}) = 0. \]
+
+Since the walls are slippery, they allow vertical but not horizontal displacements. This indicates us that the displacement field will be of the form $\vec{u} = (0, 0, u_z(z))$. By imposing the Navier-Cauchy equation to this expression, we get the following:
+\[ 0 = \begin{pmatrix}
+  0 \\
+  0 \\
+  - \rho g
+\end{pmatrix} + \mu \begin{pmatrix}
+  0 \\
+  0 \\
+  u_z''(z)
+\end{pmatrix} + (\lambda + \mu) \begin{pmatrix}
+  0 \\
+  0 \\
+  u_z''(z)
+\end{pmatrix} \implies \]
+\[ \implies \rho g = (\lambda + 2 \mu) u_z''(z) \implies u_z''(z) = \frac{\rho g}{\lambda + 2 \mu} =: \frac{1}{D} \implies \]
+\[ \implies u'_z(z) = \frac{1}{D} z + C \implies u_z(z) = \frac{1}{2D}z^2 + Cz + B \]
+
+where $C, B$ are constants that are determined by the boundary conditions.
+
+In our case, our boundary conditions are the following ones:
+\[ \begin{cases}
+  u_z(0) = 0 \implies B = 0 \\
+  [ \TT{\sigma} \cdot \hat{n} ] = 0.
+\end{cases} \]
+
+Let's calculate the strain tensor:
+\[ \TT{u} = \frac{1}{2} (\nabla \vec{u} + (\nabla \vec{u})^T) \]
+where
+\[ \nabla \vec{u} = \begin{pmatrix}
+  0 & 0 & 0 \\
+  0 & 0 & 0 \\
+  0 & 0 & \frac{z}{D} + C
+\end{pmatrix}. \]
+
+Therefore:
+\[ \TT{u} = \begin{pmatrix}
+  0 & 0 & 0 \\
+  0 & 0 & 0 \\
+  0 & 0 & \frac{z}{D} + C
+\end{pmatrix}. \]
+
+We can then calculate the stress vector using Hooke's law:
+\[ \sigma_{ij} = 2 \mu u_{ij} + \lambda \, \Tr \TT{u} \, \delta_{ij} \implies \]
+\[ \implies \TT{\sigma} = \left( \frac{z}{D} + C \right) \begin{pmatrix}
+  \lambda & 0 & 0 \\
+  0 & \lambda & 0 \\
+  0 & 0 & \lambda + 2 \mu
+\end{pmatrix} \]
+
+Now we can impose the boundary condition $[\TT{\sigma} \cdot \hat{n}] = 0$. Since the interface is a free surface (we neglect atmospheric pressure), we have that $\TT{\sigma}_2 = 0$, which means that:
+\[ \TT{\sigma}_1 \hat{n} = 0 \implies \sigma_{iz}(h) = 0 \quad \forall i. \]
+
+In particular, $\sigma_{zz}(h) = 0$, and this means
+\[ C = - \frac{h}{D}. \]
+
+In conclusion, substituting $C$ and $D$ into the expressions we found:
+\[ \begin{cases}
+  \vec{u} = \begin{pmatrix}
+    0 \\
+    0 \\
+    \frac{1}{D} \left( \frac{1}{2} z^2 - hz \right)
+  \end{pmatrix} \\
+  \TT{u} = \begin{pmatrix}
+    0 & 0 & 0 \\
+    0 & 0 & 0 \\
+    0 & 0 & \frac{1}{D} (z - h)
+  \end{pmatrix} \\
+  \TT{\sigma} = \frac{\lambda}{D} (z - h) \begin{pmatrix}
+    \lambda & 0 & 0 \\
+    0 & \lambda & 0 \\
+    0 & 0 & \lambda + 2 \mu
+  \end{pmatrix}.
+\end{cases} \]
+
+Lautrup refers to this example as an elastic sea because $p_z = - \sigma_{zz} = \rho g (h - z)$, and $p_z$ increases linearly with depth like a fluid at rest.
+
+\newpage
+
+\begin{Problem}
+  Consider the situation studied in problem 2: a homogeneous and isotropic elastic solid with denisty $\rho$ inside a container with rigid walls. However, in this case, the container is cylindrical and not a prism, and there is friction between the elastic solid and the walls. Hence, $\sigma_{zr} (r = R) = \mu_s \sigma_{zz} (r = R)$, where $R$ is the radius of the circular cross-section and $\mu_s$ is the friction coefficient. There is still gravity; the corresponding specific force is $\vec{g} = g \hat{z}$. Note the $z$-axis runs along the cylinder and points downwards.
+
+  \begin{enumerate}[a)]
+    \item Discuss how friction affects both the strain and stress tensors. What new components arise in these tensors relative to the case without friction?
+
+    \item Now consider a thin slice of elastic material inside the cylindrical container; this slice will have cross-sectional area $\pi R^2$ and height $\Delta z$.
+
+    Apply the condition of mechanical equilibrium to this slice, assuming that $\sigma_{zz}$ is uniform across the circular cross-section and that $\sigma_{rr} = \sigma_{\theta \theta} = k \sigma_{zz}$, with $k$ a constant, and show that
+    \[ \frac{d \sigma_{zz}}{dz} = - \rho g - \frac{2 \mu_s k}{R} \sigma_{zz}. \]
+
+    \item Integrate this equation and show that
+    \[ p_z = \rho g \lambda \left( 1 - e^{- \frac{z}{\lambda}} \right) \]
+    where $\lambda = \frac{R}{2 \mu_s k}$. Note we have assumed that at the top of the solid $\sigma_{zz} = 0$.
+
+    \item Consider the limiting cases $z \ll \lambda$ and $z \gg \lambda$ and discuss the physics in each case. Doing this illustrates the physical significance of $\lambda$ and what friction brings to the problem.
+  \end{enumerate}
+\end{Problem}
+
+\textbf{Solution for a):} \\
+Due to friction, $\vec{u} = (0, 0, u_z(r, z))$, so in adition to the dependence on z, there's now an r-dependence too.
+
+\[ \vec{\nabla} \vec{u} = \begin{pmatrix}
+  0 & 0 & \partial_r u_z \\
+  0 & 0 & 0 \\
+  0 & 0 & \partial_z u_z
+\end{pmatrix} \implies \TT{u} = \frac{1}{2} (\vec{\nabla} \vec{u} + (\vec{\nabla} \vec{u})^T) = \begin{pmatrix}
+  0 & 0 & \frac{1}{2} \partial_r u_z \\
+  0 & 0 & 0 \\
+  \frac{1}{2} \partial_r u_z & 0 & \partial_z u_z
+\end{pmatrix}. \]
+
+We can now use Hooke's law:
+\[ \TT{\sigma} = 2 \mu \TT{u} + \lambda (\Tr \TT{u}) \TT{I} \implies \]
+\[ \TT{\sigma} = \begin{pmatrix}
+  \lambda \partial_z u_z & 0 & \mu \partial_r u_z \\
+  0 & \lambda \partial_z u_z & 0 \\
+  \mu \partial_r u_z & 0 & (2 \mu + \lambda) \partial_z u_z
+\end{pmatrix}. \]
+
+\textbf{Solution for b):} \\
+The local condition for mechanical equilibrium is
+\[ \vec{f} + \nabla \cdot \TT{\sigma}^T = 0 \quad \forall \text{ material particles}. \]
+
+If we integrate over volume $V$:
+\[ \int_V \vec{f} dv' + \int_V \vec{\nabla} \cdot \TT{\sigma}^T dv' = \int_V \vec{F} dv' + \oint_A \TT{\sigma} \cdot \vec{dS} = 0, \]
+where $V$ is a cylindrical slice of the material ($|V| = \pi R^2 \Delta z$).
+
+\[ \int_V \vec{f} dv' = \int_V \rho \vec{g} dv' = \hat{e}_z \rho g \pi R^2 \Delta z. \]
+\[ \oint_A \TT{\sigma} \cdot \vec{dS} = \int_{A_1} \TT{\sigma} \vec{dS} + \int_{A_2} \TT{\sigma} \vec{dS} + \int_{A_\perp} \TT{\sigma} \vec{dS}, \]
+where $A_1$, $A_2$ are the circular surfaces at the top and at the bottom, and $A_\perp$ is the lateral surface.
+
+For the top and bottom surfaces, we have:
+\[ \int_{A_i} \TT{\sigma} \cdot \vec{dS} = \int_{A_i} (-1)^i \TT{\sigma}_{rz}(z_i) \hat{e}_r r d\theta dr + \int_{A_i} (-1)^i \sigma_{zz}(z_i) \hat{e}_z r d\theta dr, \]
+and since $\sigma_{zz} \neq f(r)$ because we've supposed that it is uniform across the entire section, we have:
+\[ \int_{A_i} \TT{\sigma} \cdot \vec{dS} = 0 + \int_{A_i} (-1)^i \sigma_{zz}(z_i) \hat{e}_z r d\theta dr = (-1)^i \hat{e}_z \sigma_{zz}(z_i) R^2 \pi \]
+
+For the lateral surface, we have:
+\[ \int_{A_\perp} \TT{\sigma} \cdot \vec{dS} = \int_{A_\perp} \sigma_{rr} R d\theta dz \hat{e}_r + \int_{A_\perp} \sigma_{zr}(R) R d\theta dz \hat{e}_z = \]
+\[ = 0 + \mu_S K R \hat{e}_z \int_{z}^{z + \Delta z} \sigma_{zz} dz' \int_{0}^{2\pi} d\theta \approx 2 \pi R \mu_S k \hat{e}_z \sigma_{zz} \Delta z. \]
+
+Putting it all together:
+\[ \hat{e}_z (\rho g \pi R^2 \Delta z - \sigma_{zz}(z) \pi R^2 + \sigma_zz{z + \Delta z} \pi R^2 + 2\pi R \mu_S k \sigma_{zz} \Delta z) = 0 \implies \]
+\[ \implies \pi R^2 \frac{\sigma_{zz}(z + \Delta z) - \sigma_{zz}(z)}{\Delta z} = - \rho g \pi R^2 - 2 \pi R \mu_s k \sigma_{zz}. \]
+
+Taking the limit for $\Delta z \to 0$:
+\[ \pi R^2 \frac{d \sigma_{zz}}{dz} = - \rho g \pi R^2 - 2 \pi R \mu_S k \sigma_{zz} \implies \]
+\[ \implies \frac{d\sigma_{zz}}{dz} = - \rho g - \frac{2 \mu_s k}{R} \sigma_{zz}. \]
+
+\textbf{Solution for c):} \\
+We'll first solve the homogeneous ODE
+\[ f'(z) + \frac{1}{\lambda} f(z) = 0. \]
+
+This is a linear ODE with known solution
+\[ f_h(z) = e^{- \frac{z}{\lambda}}. \]
+
+We can then solve the full ODE with the constant variations method: let's suppose the solution to the full ODE is $\sigma_{zz}(z) = f(z) = f_h(z) g(z)$. Then:
+\[ f_h'(z) g(z) + f_h(z) g'(z) = f'(z) = - \rho g - \frac{1}{\lambda} f_h(z) g(z) \implies \]
+\[ \implies \cancel{- \frac{1}{\lambda} f_h(z) g(z)} + g'(z) f_h(z) = - \rho g \cancel{- \frac{1}{\lambda} f_h(z) g(z)} \implies \]
+\[ \implies g'(z) = - \rho g e^{\frac{z}{\lambda}} \implies g(z) = C - \rho g \lambda e^{\frac{z}{h}} = C - \rho g \lambda \frac{1}{f_h(z)} \implies \]
+\[ \implies \sigma_{zz}(z) = f(z) = f_h(z) \left( C - \rho g \lambda \frac{1}{f_h(z)} \right) = C f_h(z) - \rho g \lambda = C e^{-\frac{z}{h}} - \rho g \lambda. \]
+
+If we impose $\sigma_{zz}(0) = 0$:
+\[ 0 = \sigma_{zz}(0) = C - \rho g \lambda \implies C = \rho g \lambda, \]
+and thus:
+\[ \sigma_{zz}(z) = \rho g \lambda \left( e^{-\frac{z}{h}} - 1 \right). \]
+
+Since $p_z = - \sigma_{zz}$, we have shown that the statement is true.
+
+\textbf{Solution for d):} \\
+$\lambda = \frac{R}{2 \mu_S k}$ is a characteristic length scale ($\mu_S$, $k$ are dimensionless). Using $\mu_s \approx 0.5$, $k \approx 1$, we find $\lambda \approx R$.
+
+To discuss the case in which $z \ll \lambda$, we can approximate $p_z$ via a truncated Taylor series:
+\[ p_z(z) = \rho g \lambda \left( \frac{z}{\lambda} + \mathcal{O}\left(\frac{z}{\lambda}\right)^2 \right) \approx \rho g z, \]
+which is the behavior in the absence of friction.
+
+If instead $z \gg \lambda$, this means $\frac{z}{\lambda} \gg 1$ and therefore $e^{- \frac{z}{h}} \ll 1$. Thus:
+\[ e^{- \frac{z}{h}} \approx 0 \implies p_z(z) \approx \rho g \lambda, \]
+which is a constant value.
+
+Therefore, we can conclude the pressure saturates for sufficiently large $z$. Friction supports the weight of the elastic material for sufficiently light columns.
+
+\end{document}
