diff --git a/quad8/continuummechanics/notes/notes7.tex b/quad8/continuummechanics/notes/notes7.tex
new file mode 100644
index 0000000..d70cb15
--- /dev/null
+++ b/quad8/continuummechanics/notes/notes7.tex
@@ -0,0 +1,186 @@
+% !TEX root = main.tex
+\chapter{Kinematics of fluids}
+
+We will study fluid motion. There are two possible descriptions of the flow, Eulerian (throgh a velocity field) and Lagrangian (following the particles as they move). We will use the first one.
+
+\section{Acceleration of a fluid particle}
+
+The change in velocity of the fluid particle results from the explicit variation of the velocity field with time, if the flow is non-stationary, and the probing of the velocity field by the particle, if the field is non-uniform.
+
+$$ \frac{d \vec{v}}{dt} = \frac{\partial \vec{v}}{\partial t} + (\vec{v} \cdot \vec{\nabla} ) \vec{v} $$
+
+The first term is the Lagrangian derivative (how the velocity of the fluid particle changes in time), the second is the temporal change of the velocity at a fixed location (Eulerian derivative), and the third the temporal change of the velocity at a fixed time (convective derivative).
+
+\section{Some definitions}
+
+\begin{itemize}
+  \index{Stream!line}
+  \item \textbf{Streamlines:} field lines of the vector field $\vec{v} (\vec{r}, t)$. They are defined as the tangents, at every point, to the velocity vector $\vec{v}$. This condition can be expressed as $d\vec{r} \parallel \vec{v}$. A small displacement along the line is co-linear with $\vec{v}$.
+
+  \index{Stream!tube}
+  \item \textbf{Stream tubes:} set of streamlines which pass through a closed space curve. It is a conduct of impermeable walls with infinitessimal cross-section.
+
+  \index{Particle trajectory}
+  \item \textbf{Particle trajectories:} path that a fluid particle follows in time. It is also a set of successive positions through which the fluid particle passes as it moves. We obtain the particle trajectories by integrating with respect to time the Lagrangian velocity,
+
+  $$ \vec{r} (t) = \vec{r}_0 + \int_{t_0}^t \vec{v}(\vec{r}_0,t') dt'. $$
+
+  \index{flow,!Stationary}
+  \item \textbf{Stationary flow:} the velocity doesn't depend on time, this is,
+
+  $$ \frac{\partial \vec{v}}{\partial t} = 0. $$
+
+  \index{Flow rate}
+  \item \textbf{Flow rate:} the flow rate (or rate of flow) in area $A$ is defined as:
+  \[ Q := \int_A \vec{v} \cdot \dif \vec{S}. \]
+\end{itemize}
+
+\begin{obs}
+  If a flow is stationary, then the streamlines and path lines coincide. In general, they don't.
+\end{obs}
+
+\section{Deformations in flows}
+In fluid mechanics, the concepts of strain rate (change, per unit time, of the quantity under consideration) and rate of rotation replace those, for solids, of strain and rotation.
+
+\begin{defi}[Velocity gradient tensor]
+  We define the \textbf{velocity gradient tensor}, $\TT{G}$, as
+
+  $$ G_{ij} = \frac{\partial v_i}{\partial x_j} \to \TT{G} = \operatorname{grad} \vec{v} $$
+\end{defi}
+
+We can decompose it into symmetric and antisymmetric parts. $\TT{e}$ gives the rate of strain (pure deformation rate). It is symmetric by definition, and gives information about elongations and dilations.
+
+$\TT{w}$ gives the rate of rotation. It is antisymmetric by definition.
+
+$$ w_{ij} = \frac{1}{2}\left(\frac{\partial v_i}{\partial x_j} - \frac{\partial v_j}{\partial x_i}\right) $$
+
+\begin{defi}[Vortex vector]
+  We can associate a dual vector to this antisymmetric part: the \textbf{vortex vector}, which is a local angular velocity of rotation of the fluid element.
+
+  $$ \vec{\Omega} = \frac{1}{2} \vec{\nabla} \times \vec{v} = \frac{1}{2} \vec{w} \to \Omega_i = \frac{1}{2} \varepsilon_{ijk} (-w_{jk}), $$
+  where $w = \vec{\nabla} \times \vec{v} $ is the vorticity.
+\end{defi}
+
+We can decompose $\TT{e}$ into spherical and deviatoric parts:
+$$ \TT{e} = \operatorname{sph} (\TT{e}) + \operatorname{dev} (\TT{e}) = \TT{t} + \TT{d}, $$
+where $\TT{t} = \frac{1}{3}\delta_{ij} e_{ll}$ gives the volume rate of expansion of the elements of the fluid, and $\TT{d} = e_{ij} - \frac{1}{3}\delta_{ij} e_{ll}$ gives the deformation rates at constant volume of the flow elements.
+
+In summary, $G_{ij} = t_{ij} + d_{ij} + w_{ij}$. $t_{ij}$ is a diagonal tensor representing the change in volume of fluid elements. It is zero for incompressible fluids. $d_{ij}$ is a non-trace symmetric tensor related to the deformations of fluid elements at constant volume, and $w_{ij}$ is an antisymmetric tensor representing the solid-body rotation of fluid elements.
+
+\section{The stream function}
+
+It allows simplifying the treatment of the vector velocity field $\vec{v}$ of an incompressible fluid for the case where it only depends on two coordinates (2D flows or axisymmetric flows).
+
+\index{Potential vector}
+Since $\vec{\nabla} \cdot (\vec{\nabla} \times \vec{A}) = 0$ (all curls are solenoidal) we can introduce a vector function $\vec{A}$ that fulfills $\vec{v} = \vec{\nabla} \times \vec{A}$. This is the potential vector.
+
+Let's see how we can define the stream function in the two cases.
+
+\subsection{2D flows}
+We'll suppose that $\vec{v} = (v_x(x, y), v_y(x, y), 0)$, and also that the flow is incompressible. This means:
+\[ \div \vec{v} = \partial_x v_x + \partial_y v_y = 0. \]
+
+\index{Stream!function}
+This is automatically satisfied if $v_x = \partial_y \psi$ and $v_y = - \partial_x \psi$. The scalar function $\psi(x, y)$ is called the \underline{stream function}.
+
+In this case, the vector potential is $\vec{A} = \psi \hat{e}_z$.
+
+In polar coordinates $(r, \phi)$, incompressibility implies:
+\[ \begin{cases}
+  v_r = \frac{1}{r} \partial_\phi \psi, \\
+  v_\phi = - \partial_r \psi.
+\end{cases} \]
+
+\begin{obs}
+  Properties:
+
+  \begin{itemize}
+    \item The $\psi = \text{const.}$ lines coincide with the streamlines.
+    \item $\Delta \psi = \psi_2 - \psi_1$ represents the flow rate of fluid in a stream tube of rectangular cross-section located between streamlines $\psi = \psi_1$ and $\psi = \psi_2$ and unit depth in the $z$-direction.
+
+    This shows the flow rate in such a stream tube is constant everywhere along the tube.
+  \end{itemize}
+\end{obs}
+
+\subsection{Axisymmetric flows}
+\index{Stokes'!stream function}
+Axisymmetric flows are flows with an axis of symetry relative to which the velocity field is rotationally invariant. In this context, $\psi$ is called the \underline{Stokes' stream function}.
+
+\begin{itemize}
+  \item \underline{Cylindrical symmetry}: In cylindrical coordinates $(r, \phi, z)$, when $\vec{v}$ is independent of $\phi$:
+  \[ \div \vec{v} = 0 \implies \begin{cases}
+    v_r = \frac{1}{r} \partial_z \psi, \\
+    v_z = - \frac{1}{r} \partial_r \psi.
+  \end{cases} \]
+
+  \item \underline{Spherical symmetry}: In spherical coordinates $(r, \theta, \phi)$, when $\vec{v}$ is independent of $\phi$:
+  \[ \div \vec{v} = 0 \implies \begin{cases}
+    v_r = \frac{1}{r^2 \sin \theta} \partial_\theta \psi, \\
+    v_\phi = - \frac{1}{r \sin \theta} \partial_r \psi.
+  \end{cases} \]
+\end{itemize}
+
+\begin{obs}
+  Note for axisymmetric flows, $\psi$ has units of $\text{velocity} \cdot \text{area}$ ($\si{\meter\cubed\per\second}$, ``flow rate'') while for 2D flows, it has units of $\text{velocity} \cdot \text{area}$ ($\si{\meter\squared\per\second}$, ``flow rate'' per unit length).
+\end{obs}
+
+\section{Circulation and vorticity}
+\begin{defi}[Circulation of a velocity field]
+  Given vector field $\vec{v}(\vec{r}, t)$, we define its \underline{circulation}, at an instant $t$ along curve $C$ (which could be closed or not) as the line integral of the velocity field:
+  \[ \int_C \vec{v} \cdot \dif \vec{l}, \]
+  and its value depends, in general, of $C$, and its starting and ending points.
+\end{defi}
+
+\begin{prop}
+  Let's consider the case in which $C$ is a closed path. In this case:
+  \[ \Gamma = \oint_C \vec{v} \cdot \dif \vec{l} \notate[X]{{}={}}{1.25}{\scriptstyle \text{Stokes' theorem}} \int_A (\curl \vec{v}) \cdot \dif \vec{S} = \int_A \vec{\omega} \cdot \dif \vec{S}, \]
+  where $A$ is a surface containing the curve $C$ as a boundary.
+
+  The circulation per unit area along a path around a given point equals the component of the vorticity $\vec{\omega}$ normal to the planar surface containing the path. That is, the vorticity $\vec{\omega}$ represents the circulation around the unit area perpendicular to $\vec{\omega}$.
+\end{prop}
+
+\begin{defi}[Vorticity tube]
+  A vorticity tube is a volume from which vorticity lines (the lines parallel to the vorticity field) don't come in or out.
+\end{defi}
+
+\begin{defi}
+  \index{flow,!Rotational}\index{flow,!Irrotational}
+  If $\vec{\omega} = 0 \, \forall \vec{r}$, the flow is called \underline{irrotational}; otherwise, it is called \underline{rotational}.
+
+  Note that if $\vec{\omega} \neq 0$ but constant, we can use a coordinate system that rotates at angular speed $\vec{\Omega} = \frac{\vec{\omega}}{2}$ in which the flow is irrotational.
+\end{defi}
+
+\subsection{Rotational flow}
+$\curl \vec{v} = \vec{\omega}(\vec{r}, t)$ is a vector field that can be represented using vorticity lines and tubes.
+
+\[ \div \vec{\omega} = \div (\curl \vec{v}) = 0, \]
+which means that $\vec{\omega}$ is solenoidal. There are no sources or sinks of $\vec{\omega}$. Hence, vorticity lines close onto themselves or expand the limits of our system.
+
+Also, we have that the flux across closed surface A is:
+\[ \oint_A \vec{\omega} \cdot \dif \vec{S} \notate[X]{{}={}}{1.25}{\scriptstyle \text{Gauss theorem}} \int_V (\div \vec{\omega}) \, \dif V' = 0. \]
+
+Considering a vorticity tube between surface elements $\dif S_1$ and $\dif S_2$, we then see that $\omega_1 \dif S_1 = \omega_2 \dif S_2$. Hence, the vorticity flux is the same across all surface elements of the vorticity tube.
+
+\subsection{Irrotational flow}
+\index{Velocity potential}
+In this case, $\vec{\omega} = \curl \vec{v} = 0$ everywhere. Since $\curl (\div \Phi) = 0$ always, we can write $\vec{v} = \grad \Phi$. We call $\Phi$ the \underline{velocity potential}.
+
+\begin{prop}
+  In irrotational flows, the circulation of the velocity field along a curve can be expressed in terms of the velocity potential as:
+  \[ \int_\alpha^\beta \vec{v} \cdot \dif \vec{l} = \Phi_\beta - \Phi_\alpha. \]
+
+  Thus:
+  \[ \Phi(\vec{r}) = \Phi(\vec{r_0}) + \int_{\vec{r_0}}^{\vec{r}} \vec{v} \cdot d\vec{l}. \]
+
+  Furthermore, if $A$ is a simply connected surface and its boundary $\partial A$ is a curve $C$, then:
+  \[ \oint_{C} \vec{v} \cdot \dif \vec{l} = 0. \]
+\end{prop}
+
+\begin{obs}
+  Equipotential surfaces ($\Phi = \text{const.}$) are by definition such that $\vec{v}$ is perpendicular to them.
+\end{obs}
+
+\begin{prop}
+  If the flow is incompressible ($\div \vec{v} = 0$), then $\Phi$ satisfies Laplace's equation:
+  \[ 0 = \div \vec{v} = \div (\curl \Phi) = \laplacian \Phi. \]
+\end{prop}
