\documentclass[11pt,a4paper,dvipsnames]{article}
\usepackage[utf8]{inputenc}

\input{../preamble.tex}

\newcommand\myfunc[5]{%
  \begingroup
  \setlength\arraycolsep{0pt}
  #1\colon\begin{array}[t]{c >{{}}c<{{}} c}
             #2 & \to & #3 \\ #4 & \mapsto & #5
          \end{array}%
  \endgroup}

\usepackage{biblatex}
\addbibresource{references.bib}

\title{Homework 6\\Continuum Mechanics}
\author{Adrià Vilanova Martínez}
\date{May 9, 2021}

\begin{document}

\maketitle

\begin{Problem}
  A liquid is subjected to the following velocity gradient:
  \[ \grad \vec{v} = ( \text{grad} \, \vec{v} )^T = \begin{pmatrix}
    \alpha & \beta & 0 \\
    - \frac{\beta}{2} & - \frac{\alpha}{2} & 0 \\
    0 & 0 & 0
  \end{pmatrix}, \]
  where $\alpha, \beta \in \mathbb{R}$. It is clear that the flow is two-dimensional.

  Characterize local deformation rates, that is, calculate local strain rates (elongations, which are often called dilations, and shear). Characterize also local rotation rates.
\end{Problem}

\Solution
We can calculate the symmetric and antisymmetric parts of $\text{grad} \, \vec{v}$:
\[ \TT{e} = \frac{1}{2} [ \nabla \vec{v} + (\nabla \vec{v})^T ] = \begin{pmatrix}
  \alpha & \frac{1}{4} \beta & 0 \\
  \frac{1}{4} \beta & - \frac{1}{2} \alpha & 0 \\
  0 & 0 & 0
\end{pmatrix}, \]
\[ \TT{w} = \frac{1}{2} [ - \nabla \vec{v} + (\nabla \vec{v})^T ] = \begin{pmatrix}
  0 & - \frac{3}{4} \beta & 0 \\
  \frac{3}{4} \beta & 0 & 0 \\
  0 & 0 & 0
\end{pmatrix}. \]

The diagonal terms of $\grad \vec{v}$ (which are the same as the ones in $\TT{e}$) represent the relative change in elongation of the fluid element in each direction, so that means that locally:
\[ \begin{cases}
  \displaystyle \frac{\Delta l_x}{l_x} \approx \alpha \Delta t, \\[3ex]
  \displaystyle\frac{\Delta l_y}{l_y} \approx - \frac{1}{2} \alpha \Delta t, \\[3ex]
  \displaystyle \frac{\Delta l_z}{l_z} = 0.
\end{cases}
\]

Therefore, we know the fluid elongates along the $x$-direction, and dilates along the $y$-direction. Also, given that $\Tr \TT{e} = \frac{1}{2} \alpha$, we know the fluid behaves in an incompressible manner only if $\alpha = 0$.

We also know that the off-diagonal terms of $\TT{e}$ are related to local shear. In effect, we know that locally the change of a $\SI{90}{\degree}$ angle with respect to time is
\[ \frac{d \gamma}{dt} = - 2 e_{12} = - \frac{1}{2} \beta. \]

Finally, $\TT{w}$ characterizes local rotation rates. In fact, the dual vector associated with $\TT{w}$ ($\vec{w}$) lets us define the vortex vector $\vec{\Omega} = \frac{1}{2} \vec{w}$ which represents the local angular velocity of rotation of a fluid element. Thus, we have:
\[ \vec{\Omega} = \frac{1}{2} \vec{w} = \begin{pmatrix}
  0 \\
  0 \\
  \frac{3}{4} \beta
\end{pmatrix}. \]

\begin{Problem}
  In this problem, we are going to work a bit more with Stokes' stream function; that is, the stream function for incompressible flows with axisymmetry.

  \begin{enumerate}[a)]
    \item Consider cylindrical coordinates $(r, \phi, z)$ and a flow in the $rz$-plane (a flow with cylindrical, or axial, symmetry about the $z$-axis).

    Verify that by choosing the stream function such that $v_r = \frac{1}{r} \partial_z \psi$ and $v_z = - \frac{1}{r} \partial_r \psi$, the incompressibility condition is automatically fulfilled.

    Then show that the velocity derives from the potential vector $\vec{A} = - \frac{1}{r} \psi \hat{e}_\phi$.

    \item Now consider spherical coordinates $(r, \theta, \phi)$ and a flow in the $r \theta$ plane (a flow with azimuthal symmetry).

    Verify that by choosing the stream function such that $v_r = \frac{1}{r^2 \sin \theta} \partial_\theta \psi$ and $v_\theta = - \frac{1}{r \sin \theta} \partial_r \psi$, the incompressibility condition is automatically fulfilled.

    Then show that the velocity derives from the potential vector $\vec{A} = \frac{1}{r \sin \theta} \psi \hat{e}_\phi$.
  \end{enumerate}
\end{Problem}

\Solution
We will show a more general result which includes the 2 previous cases:

Suppose we have a transformation from the cartesian coordinates $(x, y, z)$ to a new set of orthogonal coordinates $(q_1, q_2, q_3)$. Let's call the inverse transformation $\varphi$, which is a parametrization of a domain of $\mathbb{R}^3$ such that:
\[ \myfunc{\varphi}{U}{\mathbb{R}^3}{(q_1, q_2, q_3)}{(x, y, z).} \]

Then this parametrization has an associated second-rank metric tensor in each point called the matric tensor defined as $g_{ij} = \varphi_i \cdot \varphi_j$, where $\varphi_i = \partial_i \varphi$. This tensor is similar to the first fundamental form of surfaces, because it gives us the metrics in the new coordinate system.

Since the new coordinate system is orthogonal, by definition the only non-zero components of the tensor are the ones in the diagonal. Then, thanks to the development done at \cite{se} we can calculate the rotational of a vector field $V$ expressed in the new coordinate system as:
\[ \curl V = \frac{1}{\sqrt{\det \TT{g}}} \begin{vmatrix}
  \hat{q}_1 \sqrt{g_{11}} & \partial_{q_1} & V_1 \sqrt{g_{11}} \\
  \hat{q}_2 \sqrt{g_{22}} & \partial_{q_2} & V_2 \sqrt{g_{22}} \\
  \hat{q}_3 \sqrt{g_{33}} & \partial_{q_3} & V_3 \sqrt{g_{33}}
\end{vmatrix}. \]
If we define $h_i := g_{ii}$, we can express the previous formula in a more compact form:
\[ \curl V = \frac{1}{h_1 h_2 h_3} \begin{vmatrix}
  \hat{q}_1 h_1 & \partial_{q_1} & V_1 h_1 \\
  \hat{q}_2 h_2 & \partial_{q_2} & V_2 h_2 \\
  \hat{q}_3 h_3 & \partial_{q_3} & V_3 h_3
\end{vmatrix}. \]

Now, we'll state the more general result: under the previous assumptions, given a function $\psi$ (called the stream function) and a potential vector $\vec{A} = \frac{1}{h_i} \psi \hat{e}_{q_i}$, then the conditions that $\psi$ should satisfy so the fluid is incompressible are:
\[ \vec{v} = \curl \vec{A} = \frac{1}{h_1 h_2 h_3} \begin{vmatrix}
  \hat{q}_1 h_1 & \partial_{q_1} & A_1 h_1 \\
  \hat{q}_2 h_2 & \partial_{q_2} & A_2 h_2 \\
  \hat{q}_3 h_3 & \partial_{q_3} & A_3 h_3
\end{vmatrix} = \frac{1}{h_1 h_2 h_3} \begin{vmatrix}
  \hat{q}_1 h_1 & \partial_{q_1} & \psi \delta_{1i} \\
  \hat{q}_2 h_2 & \partial_{q_2} & \psi \delta_{2i} \\
  \hat{q}_3 h_3 & \partial_{q_3} & \psi \delta_{3i}
\end{vmatrix}. \]
This is because since the divergence of the rotational of a vector field is 0, the fluid would be automatically compressible if it satisfies these conditions.

\textbf{Solution for a):}
\[ \curl \vec{A} = - \frac{1}{r} \begin{vmatrix}
  \hat{r} & \partial_r & - A_r \\
  r \hat{\phi} & \partial_\phi & r (- A_\phi) \\
  \hat{z} & \partial_z & - A_z
\end{vmatrix} = - \frac{1}{r} \begin{vmatrix}
  \hat{r} & \partial_r & 0 \\
  r \hat{\phi} & \partial_\phi & \psi \\
  \hat{z} & \partial_z & 0
\end{vmatrix} = \begin{pmatrix}
  \frac{1}{r} \partial_z \psi \\
  0 \\
  - \frac{1}{r} \partial_r \psi
\end{pmatrix} = \vec{v}, \]
which confirms that the velocity $\vec{v}$ derives from the potential vector $\vec{A}$, and automatically we have that the fluid is incompressible (it can also be manually checked by calculating $\div \vec{v}$ and checking it is equal to zero, but we've already shown it is true).

\textbf{Solution for b):}
\[ \curl \vec{A} = \frac{1}{r^2 \sin \theta} \begin{vmatrix}
  \hat{r} & \partial_r & A_r \\
  r \hat{\theta} & \partial_\theta & r A_\theta \\
  r \sin \theta \hat{\phi} & \partial_\phi & r \sin \theta A_\phi
\end{vmatrix} = \frac{1}{r^2 \sin \theta} \begin{vmatrix}
  \hat{r} & \partial_r & 0 \\
  r \hat{\theta} & \partial_\theta & 0 \\
  r \sin \theta \hat{\phi} & \partial_\phi & \psi
\end{vmatrix} = \begin{pmatrix}
  \frac{1}{r^2 \sin \theta} \partial_\theta \psi \\
  0 \\
  - \frac{1}{r \sin \theta} \partial_r \psi
\end{pmatrix} = \vec{v}, \]
which confirms that the velocity $\vec{v}$ derives from the potential vector $\vec{A}$, and automatically we have that the fluid is incompressible.

\begin{Problem}
  The velocity field of a certain two-dimensional vortex, in polar plane coordinates, is given by:
  \[ \begin{cases}
    v_r = 0, \\[1ex]
    v_\theta = \left\{\begin{array}{ll}
      \dfrac{\Omega r}{2}, & r < a, \\
      \dfrac{\Omega a^2}{2r}, & r > a,
    \end{array}\right.
  \end{cases} \]
  where $a$ is the extension of the vortex core and $\Omega$ measures the vortex intensity.

  \begin{enumerate}[a)]
    \item Show that the flow is incompressible and compute the stream function.
    \item Compute and draw schematically the streamlines and the particle trajectories.
    \item Compute the vorticity and the velocity potential in the region where it can be defined.
  \end{enumerate}
\end{Problem}

\textbf{Solution for a):}
\[ \div \vec{v} = \frac{1}{r} \left[ \partial_r (r v_r) + \partial_\theta (v_\theta) \right] = \frac{1}{r} \left[ 0 + 0 \right] = 0, \]
so the flow is incompressible.

From the theoretical development done in class, we know the stream function satisfies:
\[ \begin{cases}
  r v_r = \partial_\theta \psi, \quad \text{(1)} \\
  - v_\theta = \partial_r \psi. \quad \text{(2)}
\end{cases} \]

Subtituting the velocity field in (1) we obtain:
\[ 0 = \partial_\theta \psi \implies \psi = \tilde{c} + g(r). \]

We can now substitue both the velocity field and the previous expression in (2).

For $r \leq a$:
\[ - \frac{\Omega r}{2} = \partial_r(c + g(r)) = g'(r) \implies g(r) = - \frac{\Omega r^2}{4} + d. \]

For $r > a$:
\[ - \frac{\Omega a^2}{2r} = g'(r) \implies g(r) = - \frac{\Omega a^2}{2} \log(r) + \tilde{d}. \]

Since $\psi$ has to be differentiable (and therefore continuous), we have that:
\[ - \frac{\Omega a^2}{4} + d = - \frac{\Omega a^2}{2} \log(a) + \tilde{d} \implies \tilde{d} = d - \frac{\Omega a^2}{2} \left( \frac{1}{2} - \log(a) \right), \]
and thus:
\[ \psi(r) = \left\{\begin{array}{ll}
  - \dfrac{\Omega r^2}{4} + c, & r \leq a \\[2ex]
  - \dfrac{\Omega a^2}{2} \left( \log\left(\dfrac{r}{a}\right) + \dfrac{1}{2} \right) + c, & r > a
\end{array}\right. \]
where $c \in \mathbb{R}$ is a constant.

\textbf{Solution for b):} \\
The streamlines are given by the set of points satsfying $\psi = \text{const}$.

Therefore, for $r \leq a$:
\[ \frac{\Omega r^2}{4} + c = C \implies r = \left( \frac{4}{\Omega} (C - c) \right)^{\frac{1}{2}} = \text{const}, \]
and this means streamlines are concentric circles with center $0$.

For $r > a$:
\[ \frac{\Omega a^2}{4} \left( \log(\frac{r}{a}) \right) + c = C \implies r = \text{const}, \]
and this means streamlines are again concentric circles with center $0$.

With regards to the particle trajectories, these are the curves $\gamma(t)$ solution to the following Cauchy problem:
\[ \begin{cases}
  \dot{\gamma}(t) = v(\gamma(t)), \quad \text{(1)} \\
  \gamma(0) = p_0 = \begin{pmatrix}
    r_0 \\
    \theta_0
  \end{pmatrix}, \quad \text{(2)}
\end{cases} \]
which by Picard's theorem exist and are unique when the initial condition $p_0$ is fixed (because $\vec{v}$ is globally Lipschitz).

Let's find their parametrization (in this section, $F_i(t)$ means the $i$-component of $F(t)$ and not its partial derivative with respect to $i$).

If we take a look into the radial component of the trajectory/curve:
\[ \text{(1)} \implies \dot{\gamma}_r(t) = 0 \implies \gamma_r(t) = c = r_0. \]
Therefore, particles will always move in trajectories inscribed in a circle.

Now, for particles for which $r \leq a$:
\[ \text{(1)} \implies \dot{\gamma}_\theta(t) = \frac{1}{2} \Omega \gamma_r(t) \implies \gamma_\theta(t) = \dfrac{1}{2} \Omega r_0 t + d, \]
where $d \in \mathbb{R}$ is a constant. If we impose the initial condition, we find
\[ \theta_0 = \gamma_\theta(0) = d. \]
Note that the origin is a stagnation point.

For points in which $r > a$:
\[ \text{(1)} \implies \dot{\gamma}_\theta(t) = \frac{1}{2 \gamma_r(t)} \Omega a^2 \implies \gamma_\theta(t) = \dfrac{1}{2 r_0} \Omega a^2 t + d, \]
where $d \in \mathbb{R}$ is a constants. If we impose the initial condition, we find
\[ \theta_0 = \gamma_\theta(0) = d. \]

Therefore, the particle trajectories are:
\[ \gamma(t) = \left\{\begin{array}{ll}
  \begin{pmatrix}
    r_0 \\
    \dfrac{1}{2} r_0 \Omega t + \theta_0
  \end{pmatrix}, & r_0 \leq a, \\[3ex]
  \begin{pmatrix}
    r_0 \\
    \dfrac{a^2}{2 r_0} \Omega t + \theta_0
  \end{pmatrix}, & r_0 > a.
\end{array}\right. \]

\begin{figure}[H]
  \centering
  \includegraphics[width=8cm]{streamlines_trajectories.pdf}
  \caption{Drawing showing the streamlines and particle trajectories (which are the same), along with the velocity profile.}
\end{figure}

\textbf{Solution for c):}
\[ \vec{\omega} = \curl \vec{v} = \frac{1}{r} \begin{vmatrix}
  \hat{r} & \partial_r & 0 \\
  r \hat{\theta} & \partial_\theta & r v_\theta \\
  \hat{z} & \partial_z & 0
\end{vmatrix} = \frac{1}{r} \begin{pmatrix}
  - r \partial_z v_\theta \\
  0 \\
  \partial_r (r v_\theta)
\end{pmatrix} = \frac{1}{r} \begin{pmatrix}
  0 \\
  0 \\
  \partial_r (r v_\theta)
\end{pmatrix} = \partial_r (r v_\theta) \hat{e}_z \implies \]
\[ \vec{\omega} = \left\{\begin{array}{ll}
  \partial_r \left( \dfrac{\Omega}{2} r^2 \right) = \Omega r, & r < a, \\[2ex]
  \partial_r \left( \dfrac{\Omega a^2}{2} \right) = 0, & r > a.
\end{array}\right. \]

Note that $\vec{\omega}$ is not generally defined at points in which $r = a$, because $\vec{v}$ isn't differentiable there. The only case in which it is differentiable is the following:
\[ \lim_{r \to a^-} \partial_r v = \lim_{r \to a^+} \partial_r v \iff \frac{\Omega}{2} = - \frac{\Omega}{2} \iff \Omega = 0, \]
which corresponds to the case in which the velocity field is exactly 0 in all points (the fluid is still), which is a degenerate case.

In the subset $\{ (r, \theta, z) \, : \, r > a \} \subset \mathbb{R}^3$ the vorticity vector is $\vec{w} = 0$, and so we can define the velocity potential $\Phi$ (which satisfies $\vec{v} = \grad \Phi$). Let's find it:
\[ \begin{pmatrix}
  0 \\
  \dfrac{\Omega a^2}{2 r}
\end{pmatrix} = \vec{v} = \grad \Phi = \begin{pmatrix}
  \partial_r \Phi \\
  \dfrac{1}{r} \partial_\theta \Phi
\end{pmatrix} \implies \left\{\begin{array}{l}
  \Phi = g(\theta) + \tilde{c} \\
  \dfrac{\Omega a^2}{2} = g'(\theta) \implies g(\theta) = \dfrac{1}{2} \Omega a^2 \theta + d
\end{array}\right\} \implies \]
\[ \implies \Phi(r, \theta, z) = \frac{1}{2} \Omega a^2 \theta + c, \]
where $c \in \mathbb{R}$ is a constant.

\begin{Problem}
  In class, we have analyzed the flow $\vec{v} = (ax, -ay, 0)$, with $a \in \mathbb{R}$. In this case,
  \[ \TT{G} = \text{grad} \, \vec{v} = \begin{pmatrix}
    a & 0 \\
    0 & -a
  \end{pmatrix} = \TT{e} = \dev \TT{e}. \]

  We have also analyzed flow with stream function $\psi = c (y^2 - x^2)$, with $c \in \mathbb{R}$. In this case,
  \[ \TT{G} = \text{grad} \, \vec{v} = \begin{pmatrix}
    0 & 2c \\
    2c & 0
  \end{pmatrix} = \TT{e} = \dev \TT{e}. \]

  Prove that if $a = 2c$, the two flows are the same except for a $\frac{\pi}{4}$ rotation. This illustrates that we can think of pure shear flow as pure elongational flow along directions oriented at $\frac{\pi}{4}$ relative to the original directions.
\end{Problem}

\Solution
For the first flow, we saw in class that the streamlines were the hyperbolas
\[ y = \frac{b}{x}, \quad b \in \mathbb{R}, \]
and that the origin was a stagnation point. We also saw that particles followed the following trajectories:
\[ \gamma(t) = \begin{pmatrix}
  x_0 e^{at} \\
  y_0 e^{-at} \\
  z_0
\end{pmatrix}, \]
depending on the initial position $(x_0, y_0, z_0)$ at time $0$ (since $a$ is constant, the ODE is autonomous).

For the first flow, we can easily calculate the streamlines due to the fact that in them the stream function is constant. This gives us the following streamlines:
\[ y = \pm \sqrt{x^2 + c}, \]
where $c \in \mathbb{R}$ is a constant.

Also, in class we calculated the velocity field (modulus a sign), which is:
\[ \vec{v} = 2c (y, x). \]

If we impose $a = 2c$, we have $\vec{v} = a(y, x)$, then the field $\vec{v}_2$ resulting of a $\frac{\pi}{4}$ rotation around the center will satisfy the following formula (where we've taken into account the rotation of the 3-dimensional space and the rotation of the free vectors):
\[ \vec{v}_2 = A \vec{v}(A^{-1} (x, y)), \]
where $A$ is the rotation matrix of angle $\theta = - \frac{\pi}{4}$.

\[ A^{-1}(x, y) = \begin{pmatrix}
  \cos(- \theta) & - \sin(- \theta) \\
  \sin(- \theta) & \cos(- \theta)
\end{pmatrix} \begin{pmatrix}
  x \\
  y
\end{pmatrix} = \begin{pmatrix}
  \cos(\theta) & \sin(\theta) \\
  - \sin(\theta) & \cos(\theta)
\end{pmatrix} \begin{pmatrix}
  x \\
  y
\end{pmatrix}, \]
\[ A\vec{v}(A^{-1}(x, y)) = a \begin{pmatrix}
  \cos(\theta) & - \sin(\theta) \\
  \sin(\theta) & \cos(\theta)
\end{pmatrix} \begin{pmatrix}
  0 & 1 \\
  1 & 0
\end{pmatrix} \begin{pmatrix}
  \cos(\theta) & \sin(\theta) \\
  - \sin(\theta) & \cos(\theta)
\end{pmatrix} \begin{pmatrix}
  x \\
  y
\end{pmatrix} = \]
\[ = a \begin{pmatrix}
  \cos(\theta) & - \sin(\theta) \\
  \sin(\theta) & \cos(\theta)
\end{pmatrix} \begin{pmatrix}
  - \sin(\theta) x + \cos(\theta) y \\
  \cos(\theta) x + \sin(\theta) y
\end{pmatrix} = a \begin{pmatrix}
  - 2 \sin(\theta) \cos(\theta) x + (\cos^2(\theta) - \sin^2(\theta)) y \\
  (\cos^2(\theta) - \sin^2(\theta)) x + 2 \sin(\theta) \cos(\theta) y
\end{pmatrix} = \]
\[ = a \begin{pmatrix}
  x \\
  - y
\end{pmatrix}. \]

Therefore, the flow is the same in both cases, rotated by an angle $\theta = -\frac{\pi}{4}$ (the minus is there because the rotation is anticlockwise).

\begin{Problem}
  Show that the vorticity flux, $\int_A \vec{\omega} \cdot d\vec{S}$, is constant along a vorticity tube.
\end{Problem}

\Solution
%Since $\vec{\omega} = \curl \vec{v}$, using Stokes' theorem:
%\[ \int_A \vec{\omega} \cdot d\vec{S} = \int_A (\curl \vec{v}) \cdot d\vec{S} = \int_C \vec{v} \cdot d\vec{l} \]
Let's consider 2 sections of the tube $S_1$, $S_2$, and the lateral surface along the stream tube $S_L$. Then, since $\div \vec{\omega} = 0$ everywhere, using the Divergence Theorem we have that:
\[ 0 = \int_{V} \div \vec{\omega} \, dv = \oint_{S_1 \cup S_2 \cup S_L} \vec{\omega} \cdot d\vec{S} = \int_{S_1} \vec{\omega} \cdot d\vec{S} + \int_{S_2} \vec{\omega} \cdot d\vec{S} + \int_{S_L} \vec{\omega} \cdot d\vec{S}. \]
Since the lateral surface is the surface of the vortex tube, which is a surface formed by the vortex lines (lines parallel to the vorticity vector), the normal vector to the surface is perpendicular to the vorticity vector, and thus the flux of the vorticity vector through the the lateral surface is zero. Thus, we have:
\[ \int_{S_1} \vec{\omega} \cdot d\vec{S} + \int_{S_2} \vec{\omega} \cdot d\vec{S} = 0, \]
where the orientation of $d\vec{S}$ is the one which points outside of the volume $V$ enclosed by the surface $S_1 \cup S_2 \cup S_L$. If we take the orientation of the normal vector to the surface such that $\vec{n} \cdot \vec{w} \geq 0$, we have to reverse one of the normal vectors in the previous expression, and we get:
\[ \int_{S_1} \vec{\omega} \cdot d\vec{S} = \int_{S_2} \vec{\omega} \cdot d\vec{S}, \]
which is what we wanted to prove.

\printbibliography

\end{document}
