diff --git a/docs/nstrophy_doc.tex b/docs/nstrophy_doc.tex index 09efcba..9092dea 100644 --- a/docs/nstrophy_doc.tex +++ b/docs/nstrophy_doc.tex @@ -101,9 +101,8 @@ We truncate the Fourier modes and assume that $\hat u_k=0$ if $|k_1|>K_1$ or $|k \mathcal K:=\{(k_1,k_2),\ |k_1|\leqslant K_1,\ |k_2|\leqslant K_2\} . \end{equation} -\bigskip -\point{\bf Runge-Kutta methods}. +\subsubsection{Runge-Kutta methods}. To solve the equation numerically, we will use Runge-Kutta methods, which compute an approximate value $\hat u_k^{(n)}$ for $\hat u_k(t_n)$. {\tt nstrophy} supports the 4th order Runge-Kutta ({\tt RK4}) and 2nd order Runge-Kutta ({\tt RK2}) algorithms. In addition, several variable step methods are implemented: @@ -198,9 +197,8 @@ It can be made by specifying the parameter {\tt adaptive\_norm}. \end{equation} This norm is selected by choosing {\tt adaptive\_norm=enstrophy}. \end{itemize} -\bigskip -\point{\bf Reality}. +\subsubsection{Reality}. Since $U$ is real, $\hat U_{-k}=\hat U_k^*$, and so \begin{equation} \hat u_{-k}=\hat u_k^* @@ -222,9 +220,8 @@ Thus, \label{realT} \end{equation} In order to keep the computation as quick as possible, we only compute and store the values for $k_1\geqslant 0$. -\bigskip -\point{\bf FFT}. We compute T using a fast Fourier transform, defined as +\subsubsection{FFT}. We compute T using a fast Fourier transform, defined as \begin{equation} \mathcal F(f)(n):=\sum_{m\in\mathcal N}e^{-\frac{2i\pi}{N_1}m_1n_1-\frac{2i\pi}{N_2}m_2n_2}f(m_1,m_2) \end{equation} @@ -267,9 +264,8 @@ Therefore, \mathcal F\left(q_x|q|\hat u_q\right)(n) \right)(k) \end{equation} -\bigskip -\point{\bf Energy}. +\subsubsection{Energy}. We define the energy as \begin{equation} E(t)=\frac12\int\frac{dx}{L^2}\ U^2(t,x)=\frac12\sum_{k\in\mathbb Z^2}|\hat U_k|^2 @@ -370,18 +366,16 @@ and . \label{enstrophy} \end{equation} -\bigskip -\point{\bf Enstrophy}. +\subsubsection{Enstrophy}. The enstrophy is defined as \begin{equation} \mathcal En(t)=\int\frac{dx}{L^2}\ |\nabla U|^2 =\frac{4\pi^2}{L^2}\sum_{k\in\mathbb Z^2}k^2|\hat U_k|^2 . \end{equation} -\bigskip -\point{\bf Numerical instability}. +\subsubsection{Numerical instability}. In order to prevent the algorithm from blowing up, it is necessary to impose the reality of $u(x)$ by hand, otherwise, truncation errors build up, and lead to divergences. It is sufficient to ensure that the convolution term $T(\hat u,k)$ satisfies $T(\hat u,-k)=T(\hat u,k)^*$. After imposing this condition, the algorithm no longer blows up, but it is still unstable (for instance, increasing $K_1$ or $K_2$ leads to very different results).