# HG changeset patch # User vlabarre <Vincent.Labarre@oca.eu> # Date 1655314776 -7200 # Wed Jun 15 19:39:36 2022 +0200 # Node ID d7623f4cb4485d8683b207fe635820321b90e93e # Parent 2744ed970da786d6470999066e5fb47d00c82f86 in progress diff --git a/2022strat_turb_polo/input/article.tex b/2022strat_turb_polo/input/article.tex --- a/2022strat_turb_polo/input/article.tex +++ b/2022strat_turb_polo/input/article.tex @@ -103,8 +103,16 @@ \newcommand{\CKA}{C_{K\rightarrow A}} \newcommand{\D}{\mbox{D}} \newcommand{\diff}{\text{d}} -\newcommand{\bv}{Brunt-V\"ais\"al\"a} +\newcommand{\bv}{Brunt-V\"ais\"al\"a } \newcommand{\kmax}{k_{\max}} +\newcommand{\vk}{\hat{\boldsymbol{v}}_{\kk}} +\newcommand{\vpk}{\hat{v}_{p\kk}} +\newcommand{\vtk}{\hat{v}_{t\kk}} +\newcommand{\epk}{\boldsymbol{e}_{p\kk}} +\newcommand{\etk}{\boldsymbol{e}_{t\kk}} +\newcommand{\thk}{\theta_{\kk}} +\newcommand{\thf}{\theta_f} +\newcommand{\ok}{\omega_{\kk}} \newcommand{\todo}[1]{\textcolor{red}{TODO: #1}} @@ -130,23 +138,48 @@ \begin{document} -\title{Regimes in stratified turbulence forced by gravity waves analyzed +\title{Regimes in stratified turbulence forced by horizontally divergent modes analyzed from a new comprehensive open dataset} -\author{Vincent Reneuve} -\affiliation{Universit\'{e} C\^{o}te d'Azur, Observatoire de la C\^{o}te -% TODO: add other authors +\author{Vincent Labarre} +\email[]{vincent.labarre@oca.eu} +\affiliation{Universit\'{e} C\^{o}te d'Azur, Observatoire de la C\^{o}te d'Azur, CNRS, Laboratoire Lagrange, Nice, France.} + \author{Pierre Augier} +\email[]{pierre.augier@univ-grenoble-alpes.fr} \affiliation{Laboratoire des Ecoulements G\'eophysiques et Industriels, Universit\'e Grenoble Alpes, CNRS, Grenoble-INP, F-38000 Grenoble, France} -d'Azur, CNRS, Laboratoire Lagrange, Nice, France.} + -% TODO: change corresponding author -\email[]{pierre.augier@univ-grenoble-alpes.fr} +% TODO: add Giorgio, Sergey, and other authors? Discuss the order of the authors. +\author{Giorgio Krstulovic} +\affiliation{Universit\'{e} C\^{o}te d'Azur, Observatoire de la C\^{o}te d'Azur, CNRS, Laboratoire Lagrange, Nice, France.} + +\author{Sergey Nazarenko} +\affiliation{Universit\'{e} C\^{o}te d'Azur, CNRS, Institut de Physique de Nice - INPHYNI, Nice, France} + + \begin{abstract} -Blabla abstract +We present numerical simulations of stratified turbulence under the Oberbeck-Boussinesq +approximation with Schmidt number equal to unity and periodic boundary conditions, +performed using the pseudo spectral solver \texttt{ns3d.strat} of the \texttt{Fluidsim} +framework. The particularities of this dataset are + +% TODO: Elaborate these points in the abstract when the article is nearly finished +\begin{itemize} + \item Hyperviscosity of order 4, $\nu_4$ to stabilize simulations. Not all simulations are DNS + \item $\epsKK / \epsK$ and $\kmax \eta$ are used as diagnostics to evaluate the quality of DNS + \item Forcing poloidal + \item Anisotropic time correlated forcing + \item Shear modes are removed + \item Aspect ratio vary + \item Control parameters $\nu = \kappa$ , $N$ + \item Several diagnostic like the horizontal Froude $F_h$, the buoyancy Reynolds number $\R_2$, and the mixing ratio $\Gamma$ +\end{itemize} + + Shared datas, $?$ simulations \end{abstract} @@ -170,19 +203,21 @@ pseudospectral solver \mintinline{python}{ns3d.strat} from the FluidSim Python package \cite{fluiddyn,fluidfft,fluidsim}. Using this solver, we integrate in a periodic domain of horizontal size $L_x = L_y = 3$ the three-dimensional Navier-Stokes equations under -the Boussinesq approximation: +the Boussinesq approximation with additional hyperviscosity and hyperdiffusivity terms: \begin{align} \p_t\vv + (\vv \cdot \bnabla)\vv = b\boldsymbol{e}_z - \frac{1}{\rho_0}\bnabla p + -\nu_2\nabla^2\vv + \ff_{\text{toro}},\label{ns} \\ -\p_t{b} + (\vv \cdot \bnabla)b = -N^2 v_z + \kappa_2\nabla^2{b},\label{buoy} +\nu_2\nabla^2\vv - \nu_4(\nabla^2)^2\vv + \ff_{\text{polo}},\label{ns} \\ +\p_t{b} + (\vv \cdot \bnabla)b = -N^2 v_z + \kappa_2\nabla^2{b} - \kappa_4(\nabla^2)^2{b},\label{buoy} \end{align} -where $\vv$ is the velocity, $b$ the buoyancy, $p$ the pressure and $N$ the \bv -frequency. For all simulations the viscosity $\nu_2$ and the diffusivity $\kappa_2$ are -equal (Schmidt number $Sc = \nu_2/\kappa_2 = 1$). Note that the buoyancy can be -expressed as $b=-g\delta\rho/\rho_0$, with $g$ the gravitational acceleration, $\rho_0$ -the mean density and $\delta\rho$ the departure from the stable linear density -stratification. However, these three quantities do not enter separately into the -equations. +where $\vv$ is the velocity, $b$ the buoyancy, $p$ the total pressure, $N$ the \bv +frequency, $\nu_2$ is the viscosity, $\kappa_2$ is the diffusivity, $\kappa_4$ is the +hyperviscosity and $\kappa_4$ is the hyperdiffusivity. For all simulations the +viscosity and the diffusivity are equal (Schmidt number $Sc = \nu_2/\kappa_2 = 1$), as +well as the hyperviscosity and hyperdiffusivity ($\nu_4 = \kappa_4$). Note that the +buoyancy can be expressed as $b=-g\delta\rho/\rho_0$, with $g$ the gravitational +acceleration, $\rho_0$ the mean density and $\delta\rho$ the departure from the stable +linear density stratification. However, these three quantities do not enter separately +into the equations. Some modes in the Fourier space are disabled because they cause numerical and physical problems and/or are not consistent with experiments in which the flow is bounded with @@ -192,54 +227,87 @@ \mintinline{python}{params.oper.truncation_shape="no_multiple_aliases"}. (ii) All shear modes (for which $|\mathbf{k_h}| = 0$) are truncated (Fluidsim parameter \mintinline{python}{params.oper.NO_SHEAR_MODES = True}). If we do not truncate them, -they tend to grow very slowly so the simulations do not really reach a statistically -stationary flow. Finally, (iii) vertically invariant vertical velocity (internal waves -at $\omega = N$) is also forbidden \mintinline{python}{params.no_vz_kz0 = True}). Note -that in all experiments in tanks both shear modes and vertically invariant vertical -velocity are also blocked to zero. +they tend to grow very slowly so it is longer to reach a statistically steady state. +Finally, (iii) vertically invariant vertical velocity (internal waves at $\omega = N$) +is also forbidden \mintinline{python}{params.no_vz_kz0 = True}). Note that in all +experiments in tanks both shear modes and vertically invariant vertical velocity are +also blocked to zero. + -The term $\ff_{\text{toro}}$ is a large scale ($k_z = 0$ and $3 \leq k_h/\delta k_h -\leq 5$) time correlated toroidal forcing computed in spectral space such that the -kinetic energy injection rate is constant and equal to unity. In physical space, large -columnar vortices of horizontal length scale of typically $L_f = 1$ associated with -vertical vorticity are constantly forced. In few time units, a statistically stationary -state is reached (remember that there is no shear mode in these simulations). In this -state, the time averaged total energy dissipation rate $\eps$ is equal to the kinetic -energy injection rate $P_K = 1$. The kinetic energy dissipation rate $\epsK$ is just a -function of the mixing coefficient $\Gamma = \epsA / \eps$ and is in any case of order -unity. By construction, there are transfers of energy from the large forced scales to -small dissipative scales. +Geometrically, a divergent free velocity velocity field can be decomposed into a +poloidal $\vpk$ part and toroidal part $\vtk$. More precisely, the Fourier transform of +the velocity field can be written +\begin{equation} + \vk = \vpk \epk + \vtk \epk +\end{equation} +where $\kk$ is the wavevector, $\etk \equiv (\eez \times \kk) / |\eez \times \kk|$ is +the toroidal unitary vector, and $\epk$ is such that $(\kk/|\kk|, \epk, \etk)$ forms an +orthonormal basis. + +For this dataset, we were motivated by forcing internal waves modes in which only the +poloidal part is involved \cite{Augier2011}. Then, we add a forcing term +$\ff_{\text{polo}}$ acting on $\vpk$ at large scale ($1.25 \leq |\kk|/\delta k_z \leq +5$) and small angle ($|\thk - \thf| \leq \delta \thf/2$ where $\sin \thf = 0.3$, $\sin +\delta \thf = 0.1$ and $\thk$ is the angle between the wavevector $\kk$ and the +stratification axis $\eez$). -The main physical input parameters are the \bv frequency and the viscosity. Since both -forcing length and energy injection rate are in practice equal to 1, we can define an -input Reynolds number $Re_i = 1/\nu_2$ and an input horizontal Froude number $F_{hi} = -1/N$. For stratified turbulence, it is actually more convenient to take as input -parameters the \bv frequency and an input buoyancy Reynolds number $\R_i = Re_i -F_{hi}^2$. The input Reynolds number is thus computed as $Re_i = \R_i N^2$. - -For some couple $(N,\ \R_i)$ for quite large $N$ and $\R_i$, the required -resolution for proper DNS become too large. To decrease the computational cost of the -comprehensive dataset, we use three ... - -The aspect ratio of the numerical domain is varied depending on the stratification -strength. - -Coarse, badly resolved simulations to reach the steady state. - -For some simulations, a fourth-order hyperviscosity term is added. The fourth-order -viscosity $\nu_4$ is left as a free parameter and adapted to the resolution of -simulations in order to ensure that dissipative scales are well resolved. We use the -measure of the turbulent kinetic dissipations $\epsKK$ and $\epsKKKK$ based on both -viscosities, and the ratio $\epsKK/\epsK$ where $\epsK=\epsKK+\epsKKKK$, as an -indicator of how close the simulations we perform are to proper DNS. For a set of -physical parameters, the needed hyperviscosity decreases when the resolution is -increased and the ratio $\epsKK/\epsK$ grows towards unity. - +This anisotropic forcing is motivated by the fact that the dispersion relation of +internal gravity waves, $\ok = N \sin \thk$, implies that the angle of the frequency +fully determine the frequency. Consequently, in order to force internal waves at given +temporal scales, we have to fix the direction of the forced modes. The forcing is time +correlated with a correlation time corresponding to the frequency of the forced waves +$T_c = 2\pi / N \sin \thf$. It is computed in spectral space such that the kinetic +energy injection rate is constant and equal to unity. \\ The time needed to reach +a statistically steady state increases with $N$. In fact, we observe that the energy +tends to concentrate in modes with small horizontal variation $k_h /\delta k_h =1$ +(remember that there is no shear mode in these simulations). In this state, the time +averaged total energy dissipation rate $\eps = \epsA + \epsK$ is equal to the kinetic +energy injection rate $P_K = 1$. The kinetic energy dissipation rate $\epsK$ is just a +function of the mixing coefficient $\Gamma = \epsA / \epsK = (1 - \epsK) / \epsK$ and +is in any case of order unity. As usual in 3D stratified turbulence, there is a +transfers of energy from the large forced scales to small dissipative scales \cite{?}. +\\ The main physical input parameters are the \bv frequency and the viscosity. +Since both forcing length and energy injection rate are in practice equal to 1, we can +define an input Reynolds number $Re_i = 1/\nu_2$ and an input horizontal Froude number +$F_{hi} = 1/N$. For stratified turbulence, it is actually more convenient to take as +input parameters the \bv frequency and an input buoyancy Reynolds number $\R_i = Re_i +F_{hi}^2$. The input Reynolds number is thus computed as $Re_i = \R_i N^2$. \\ For +some couple $(N,\ \R_i)$ for quite large $N$ and $\R_i$, the required resolution +for proper DNS become too large. To decrease the computational cost of the +comprehensive dataset, we combined two strategies. Firstly, the aspect ratio of the +numerical domain is varied depending only on the stratification strength, going from +$1/2$ for $N<20$ to $1/8$ for $N \geq 80$. Secondly, we used coarse simulations to +devellop the large scales present in the steady state. \\ For most simulations, we +used the fourth-order hyperviscosity and hyperdifusivity terms. Here, $\nu_4$ is left +as a free parameter and adapted to the resolution of simulations in order to ensure +that dissipative scales are well resolved. We use the measure of the turbulent kinetic +dissipations $\epsKK$ and $\epsKKKK$ based on both viscosities, and the ratio +$\epsKK/\epsK$ where $\epsK=\epsKK+\epsKKKK$, as an indicator of how close the +simulations we perform are to proper DNS. The product of the maximal wavevector $\kmax$ +with the Kolmogorov scale $\eta \equiv \nu_2^3 / \epsKK$ is also computed as diagnostic +to estimate que quality of the simulation. For a set of physical parameters, the needed +hyperviscosity decreases when the resolution is increased and the ratio $\epsKK/\epsK$ +grows towards unity and $\kmax \eta$ increases (eventually beyond unity). \\ %% Method: simulations 1 couple (N, R_i) \input{../tmp/table_methods_1couple.tex} -Table \ref{table-methods-1couple} shows ... +Table \ref{table-methods-1couple} shows quantities computed for the simulations +performed for the couple $(N, \R_i) = (40, 20)$. The turbulent non-dimensional numbers +are computed from the statistically stationary flows as $F_h = \epsK / ({U_h}^2 N)$, +$\R_2 = \epsK / (\nu_2 N^2)$ and $\R_4 = \epsK{U_h}^2 / (\nu_4 N ^ 4)$, where $\epsK$ +is the mean kinetic energy dissipation and $U_h$ the rms horizontal velocity. The +results presented in this article are obtained from periods of the simulations when a +steady state has been approximately reached. Because the time scales of the flows +studied here are very long, finding such steady-state period can be very difficult and +computationally costly. In order to reach an approximately steady state in a reasonable +time, we start all the simulations at a reduced horizontal resolution $n_h=320$, and +increase the resolution step by step only when a sufficiently stationary state has been +reached. The vertical resolution $n_z$ is fixed by the aspect ratio (which depends only +on $N$). When such a state is observed, specific outputs are turned on and the +simulation is ran further for several units time in order to produce substantial data +to analyze, before increasing the resolution again if needed. + \begin{figure} \centerline{ @@ -253,6 +321,20 @@ \label{fig:method-N40-R20}} \end{figure} +Figure \ref{fig:method-N40-R20} shows the energies signal for simulations at different +resolutions for the couple $(N, \R_i) = (40, 20)$ and the averaged quantities vs +$\kmax\eta$ for the same simulations. The coarse simulations with $n \geq 20$ where +runned for $2 N$ simulation times at resolution $n_h=320$, and then restarted for $N/2$ +simulations times at resolution $n_h=640$. We observed that the flow takes a small time +to adjust when changing the resolution, but this time remains small before the total +simulation time. \todo{Discuss of the simulation times for $n_h = 1280, 1920,$ and +$2560$}. As expected, the ratio $\epsKK / \epsK$ approach unity when $\kmax \eta$ +increases and the dimensionless quantities tend to constant values, meaning that +hyperviscosity and hyperdiffusivity become negligeable for sufficiently large +simulations (typically when the criteria $\kmax \eta > 1$ is attained). Note that this +convergence is also visible in spatial spectra, as illustrated on figure +\ref{fig:method-N40-Ri20-spectra}. + \begin{figure}% [H] \centerline{ \includegraphics[width=0.98\textwidth]{% @@ -262,7 +344,24 @@ resolutions for $N=40$ and $\R_i=20$. \label{fig:method-N40-Ri20-spectra}} \end{figure} -%% Method: resolution and hyperdiffusivity for the better simulations for each couple (N, R_i) + +%% Method: synthesis of simulations at different (N, R_i) + +\input{../tmp/table_better_simuls.tex} + +In the remaining of this manuscript, will keep only the most resolved simulation for +each $(N, \R_i)$. Parameters and dimensionless numbers for these simulations are +summarized in table~\ref{table-better-simuls}. Figure +\ref{fig:method-resolution-hyperdiffusivity} allows to see how our simulations fill the +$(F_h, \R_2)$ parameter space, and appreciate which of those simulations can be +considered as DNS. We see that most of it verify $\kmax \eta \geq 1$ and $\epsKK / +\epsK \simeq 1$, except for very low $F_h$ and/or high $\R_2$. The simulations were +performed on local clusters for resolutions up to $n_h = 640$: the Mesocentre SIGAMM +machine, hosted by Observatoire de la Cote d'Azur, and the Université Côte d'Azur's +Center for High-Performance Computing. For larger resolutions ($n_h \geq 1280$), we +used the cluster Jean-Zay of the french national center IDRIS. + + \begin{figure} \centerline{ @@ -271,35 +370,47 @@ \includegraphics[width=0.48\textwidth]{% ../tmp/fig_epsK2overepsK_vs_FhR} } -\caption{. \label{fig:method-resolution-hyperdiffusivity}} +\caption{$\kmax \eta$ (a) and $\epsKK/\epsK$ (b) vs $(F_h, \R_2)$ for our dataset. +\label{fig:method-resolution-hyperdiffusivity}} \end{figure} -\input{../tmp/table_better_simuls.tex} + -The simulations were performed on a local cluster at LEGI for resolutions up to $n_h = -640$ and on the national CINES cluster Occigen for finer resolutions. Parameters and -dimensionless numbers for each simulations are summarized in -table~\ref{table-better-simuls}. The turbulent nondimensional numbers are computed from -the statistically stationary flows as $F_h = \epsK / ({U_h}^2 N)$, $\R_2 = \epsK / -(\nu_2 N^2)$ and $\R_4 = \epsK{U_h}^2 / (\nu_4 N ^ 4)$, where $\epsK$ is the mean -kinetic energy dissipation and $U_h$ the rms horizontal velocity. The results presented -in this article are obtained from periods of the simulation when a steady state has -been approximately reached. Because the time scales of the flows studied here are very -long, finding such steady-state period can be very difficult and computationally -costly. In order to reach an approximately steady state in a reasonable time, we start -all the simulations at a reduced resolution $240\times240\times40$, and increase the -resolution step by step only when a sufficiently stationary state has been reached. -When such a state is observed, specific outputs are turned on and the simulation is ran -further for 10 to 20 minutes of equation time in order to produce substantial data to -analyze, before increasing the resolution again if needed. + \section{Results} +\label{sec:res} +Our dataset can be used to do several parametric studies by computing key observables +in the statistically steady states. In this section, we perform such an analysis to +identify several regimes in the $(F_h, \R)$ parameters-space. These regimes differ in +their isotropy and mixing properties. The spatial spectra in the different regimes is +also presented. \subsection{Large and small scale isotropy coefficients} +Isotropy properties depends on the scale. Here, we choose two indicators to distinguish +between small and large scales. + %% Large scale isotropy - +The large scale isotropy coefficient base on the total kinetic energy +\begin{equation} +\label{eq:Ivelo} +I_{velo} = \frac{3 E_{Kz}}{E_K}, +\end{equation} +where $E_{Kz}$ is the kinetic energy of the vertical velocity and $E_K$ is the total +kinetic energy. Obviously, when $I_{velo} \rightarrow 0$, most of the kinetic energy is +contained in the horizontal velocity so the flow is anisotropic. On the contrary, when +$I_{velo}=1$, the flow is anisotropic. In the limit where the kinetic energy is +contained in the vertical velocity, we have $I_{velo} \rightarrow 3$. +Figure~\ref{fig:large-scale-isotropy} represents the large scale isotropy coefficient +as a function of $F_h$ and $\R_2$ for our simulations. We observe that the large scale +isotropy mostly depends on $F_h$, but much less on $\R_2$. We observe a transition +between a strongly stratified regime where $I_{velo} \sim F_h$ at low $F_h$, to an +isotropic regime where $I_{velo} \sim 1$ at $F_h > 1$. This is fully consistent with +the definition of the Froude number, which represent a ratio between the isotropic +inertial forces and the anisotropic buoyancy force. \todo{Put relevent citations if it +was observed before .} \begin{figure} \centerline{ \includegraphics[width=0.48\textwidth]{% @@ -307,12 +418,35 @@ \includegraphics[width=0.48\textwidth]{% ../tmp/fig_isotropy_velo_vs_R} } -\caption{Large scale isotropy coefficient $I_{velo}$. \label{fig:large-scale-isotropy}} +\caption{Large scale isotropy coefficient $I_{velo}$. \todo{$I_{velo}$ is closely +related to $U_z/U_h$ see figure fig:ratio-vs-Fh. I (Vincent) think we should choose to +show only $U_z/U_h$ since it is a simpler quantity.} \label{fig:large-scale-isotropy}} \end{figure} -Figure~\ref{fig:large-scale-isotropy} ... %% Small scale isotropy +The small scale isotropy is quantified by the small scale isotropy coefficient base on +the dissipation rates +\begin{equation} +\label{eq:Idiss} +I_{diss} = \frac{1 - \frac{\epsK_z}{\epsK}}{1 - \frac{1}{3}}, +\end{equation} +where $\epsK_z$ is the kinetic energy dissipation rate of the vertical velocity. This +quantity goes from zero when $\epsK_z = \eps_K$ to $3/2$ when $\epsK_z =0$. The case +where $I_{diss}=1$, i.e. $\epsK_z = \epsK/3$, corresponds to a small scale isotropy +where the kinetic energy is dissipated equaly along each direction. +Figure~\ref{fig:small-scale-isotropy} represents the small scale isotropy coefficient +as a function of $F_h$ and $\R_2$ for our simulations. Contrary to the large scale +isotropy, the small scale isotropy mostly depends on $\R_2$. We observe a transition +between a regime where the small scale dissipation is anisotropic, and where $I_{diss}$ +is a decreasing function of $\R_2$, to an isotropic regime where $I_{diss} \sim 1$ at +$\R_2 > 10$. This transition was already predicted by \cite{lindborg2006energy, +brethouwer_billant_lindborg_chomaz_2007}. It can be simply understood since $\R_2$ is +simply related to the ratio between the Ozmidov scale $L_O$ and the Kolmogorov scale +$\eta$: $\L_O / \eta = \R_2^{3/4}$. Therefore, for $\R_2 \ll 1$ the dissipation occurs +at scales larger than the Ozmidov scale and is therefore anisotropic. On the contrary, +when $\R_2 \gg 1$, the dissipation occurs mostly at isotropic scales smaller $L_O$. The +dependance in $F_h$ is less clear. \begin{figure} \centerline{ @@ -324,9 +458,18 @@ \caption{Small scale isotropy coefficient $I_{diss}$. \label{fig:small-scale-isotropy}} \end{figure} -Figure~\ref{fig:small-scale-isotropy} ... - %% Isotropy coefficient: summary +Figure~\ref{fig:isotropy-coefficients} represents gives a synthetic view of the +previous results. In this plot, we have separated regimes. The non stratified flows for +which the large scales isotropy coefficient exceed $0.5$, except for very small values +of $\R_2$ corresponding to viscous flows. The limit of this regime is given by a +critical Froude number $Fh_c \simeq 0.06$. For stongly stratified flows, we can +distinguish between flows for which the dissipation occurs at anisotropic scales (the +so called viscosity affected regime in \cite{brethouwer_billant_lindborg_chomaz_2007}), +and strongly stratified flows for which the the dissipation occurs at small isotropic +scales. The limits between the two regime is given by a critical buoyancy Reynolds +number $\R_{2c} \simeq 10$. These regimes are consistent with both the predictions and +2D simulations of \cite{calpelinares2020}. \begin{figure} \centerline{ @@ -338,10 +481,23 @@ subsection~\ref{spectra-seb-regimes}. \label{fig:isotropy-coefficients}} \end{figure} -Figure~\ref{fig:isotropy-coefficients} ... +Another way to quantify the anisotropy of the flow is to look at the integral scales +which are defined as +%tmp = df[df.Re > 2000].copy() tmp["lz1/lx1"] = tmp.lz1 / tmp.lx1 +\begin{equation} +L_{i1} = 2 \pi \frac{\int\limits_0^\infty ~ E_{Ki} ~ \mathrm{d}k_i}{\int\limits_0^\infty E_{Ki} k_i ~ \mathrm{d}k_i} +\end{equation} +where $i=x,y,z$. It gives an idea of the lengthscales in which the energy of the flow +is contained. Therefore, the ratio $L_v/L_h$ is also a good measure of the isotropy of +the flow. -\subsection{Ratio of integral scales, velocities and energies} +The ratio of the typical vertical velocity and the horizontal velocity is given by +%tmp = df[df.Re > 2000].copy() tmp["U_z/U_h"] = np.sqrt(2 * tmp.EKz / tmp.EKh) +\begin{equation} +\frac{U_z}{U_h} = \sqrt{\frac{2 E_{Kz}}{E_{kh}}}. +\end{equation} + \begin{figure} \centerline{ @@ -350,18 +506,32 @@ \includegraphics[width=0.48\textwidth]{% ../tmp/fig_ratio_length_scales_vs_Fh} } -\centerline{ -\includegraphics[width=0.48\textwidth]{% -../tmp/fig_ratio_EA_EK_vs_Fh} -} -\caption{Ratio of ... \label{fig:ratio-vs-Fh}} +\caption{Ratio of the vertical and horizontal velocity \todo{$I_{velo}$ is closely +related to $U_z/U_h$ see figure fig:ratio-vs-Fh. Maybe we should choose to show only +$U_z/U_h$ since it is a simpler quantity. Then, this figure should be put at the placed +at \ref{fig:large-scale-isotropy}} (a) and ratio of the vertical and horizontal +integral scales (b) vs $F_h$ for simulations such that $Re \geq 2000$. +\label{fig:ratio-vs-Fh}} \end{figure} -Figure~\ref{fig:ratio-vs-Fh} ... +Figure~\ref{fig:ratio-vs-Fh} represents the ratio of $U_z/U_h$, and $L_z/L_h$ for +simulations with $Re \geq 2000$. For stratified flows, ce can expect that the energy is +contained in horizontal scales of the order of horizontal dimension the box, and +vertical scales of the order of the buoyancy scales $L_b = U_h/N$. For more, because of +incompressibility, it is natural to anticipate that $U_z/U_h = L_z/L_h$. Consequently, +we anticipate the scalings $U_z/U_h = L_z/L_h \simeq U_h/NL_h = F_h$ when $F_h \ll 1$. +Yet, we rather observe $U_z/U_h = L_z/L_h \sim F_h^{1/2}$. Of course, when $F_h>1$, we +expect the flow to be isotropic $U_z/U_h = L_z/L_h \sim 1$, which is consistent with +our simulations. Note that for large $F_h$, $U_z/U_h = L_z/L_h$ converge to a value +inferior to one, meaning that the flow does not attain isotropy. This could be explain +by the aspect ratio of our simulations (which is 1/2 for large $F_h$) that may prevent +the development of sufficiently large vertical scales. \subsection{Mixing coefficient} +The mixing coefficient can be defined in several ways. In geophysical applications +\cite{Greggetal2018} \begin{figure} \centerline{ \includegraphics[width=0.7\textwidth]{% @@ -370,13 +540,13 @@ \caption{Mixing coefficient. \label{fig:mixing-coefficients-vs-FhR}} \end{figure} -Figure~\ref{fig:mixing-coefficients-vs-FhR} ... - - +Figure~\ref{fig:mixing-coefficients-vs-FhR} ... \cite{Maffioli2015, Issaev2021} \begin{figure} \centerline{ \includegraphics[width=0.7\textwidth]{% ../tmp/fig_mixing_coef_vs_Fh} +\includegraphics[width=0.48\textwidth]{% + ../tmp/fig_ratio_EA_EK_vs_Fh} } \caption{Mixing coefficient versus the horizontal Froude number. The colors represent $\R_2$. Red letters correspond to simulations of table~\ref{table-simuls-regimes} @@ -394,6 +564,7 @@ Table~\ref{table-simuls-regimes} ... +\todo{Look if we have an equipartition polo-toro-potential. It reflects the fact that the vertical Froude number is near one \cite{augier2015stratified}} \begin{figure} \centerline{ \includegraphics[width=0.48\textwidth]{% @@ -549,17 +720,17 @@ Figure~\ref{fig:spectra-1R} ... \section{Conclusions and perspectives} +\label{sec:conclusion} We performed numerical simulations of a stratified turbulent flow, using a forcing mechanism... \begin{acknowledgments} -This project has received funding from the European Research Council (ERC) -under the European Union's Horizon 2020 research and innovation program (Grant -No. 647018-WATU). It was also partially supported by the Simons Foundation -through the Simons collaboration on wave turbulence. Part of this work was -performed using resources provided by \href{https://www.cines.fr/}{CINES} under -GENCI allocation number A0080107567. +This project was supported by the Simons Foundation +through the Simons collaboration on wave turbulence. It has received funding from the European Research Council (ERC) +under the European Union's Horizon 2020 research and innovation program (Grant No. 647018-WATU). Part of the computations have been done on the ``Mesocentre SIGAMM'' machine, hosted by Observatoire de la Cote d'Azur. This work was supported by the French government, through the UCAJEDI Investments in the Future project managed by the National Research Agency (ANR) under reference number ANR-15-IDEX-01. The authors are grateful to the OPAL infrastructure from Université Côte d’Azur and the Université Côte d’Azur’s Center for High-Performance Computing for providing resources and support. This work was granted access to the HPC/AI resources of IDRIS under the allocation 2022-A0122A13417 made by GENCI. + + \end{acknowledgments} %\appendix\section{A great appendix} diff --git a/2022strat_turb_polo/input/intro.tex b/2022strat_turb_polo/input/intro.tex --- a/2022strat_turb_polo/input/intro.tex +++ b/2022strat_turb_polo/input/intro.tex @@ -1,2 +1,59 @@ -Blabla... \ No newline at end of file + +When density variation is present in a flow, fluid parcels feel the buoyancy that tends +to push them to their floatability levels. When the denser fluid is below, we talk +about stable stratification, and the flow is then organized as thin layers whose extend +along the stratification axis (i.e. the direction of the average density gradient) is +related to the intensity of the average density gradient. In practice, density +differences arises because of the variation of a scalar which causes density variation. +This can occurs as long as sources and sink, like radiative heating or salt input, +maintain the flow out of equilibrium. Contrary to flows at constant density which +contain only eddies, stably stratified flows also support the propagation of internal +gravity waves. \\ Stratification is a key physical mechanism in many industrial, +geophysical and astrophysical flows. As an example, stratification is essential to +describe the dynamics of the atmosphere and oceans, in particular at mesoscales at +which the effects of rotation is negligible. Most studies analytical and numerical +studies are performed using the Oberbeck-Boussinesq approximation and a constant +stratification. In this case, the intensity of the stratification is solely quantified +by the \bv frequency. \\ The scaling analysis of the equations to show that the +dynamics is mainly controlled by $3$ dimensionless parameters \cite{Chomaz2000, ..., +Brethouwer2007}: the Schmidt number $Sc \equiv \nu / \kappa$ where $\nu$ and $\kappa$ +are the viscosity and diffusivity; the buoyancy Reynolds number $\R$; and the +horizontal Froude number $F_h$. Then, for a given fluid (with a fixed $Sc$) and far +away from the singularities, the flow is supposed to depends only on $F_h$ and $\R$. +When $F_h>1$ is flow is weakly stratified and we expect to recovers incompressible +turbulence. Yet, when $F_h < 1$, the stratification impacts the flow significantly and +three stratified regimes where predicted: if $\R < 1$, the flow is dominated by +viscosity; if $\R > 1$ and $10^{-2} <F_h < 1$, the flow is turbulent but weakly +stratified; finally, when $\R > 1$ and $F_h < 10^{-2}$, the flow is in strongly +stratified turbulent state. \\ Despite intensive studies, many questions still +need to be addressed, more or less related to geophysical applications: What is the +mixing efficiency in stratified flows \cite{Gregg-etal2018}? How energy is distributed +among spatial and temporal scales? How anisotropic large and small scales are? What are +the consequences of the presence of internal gravity waves \cite{Maffioli2020}? Is Wave +Turbulence Theory suitable to describe large scales of stratified flows? These question +are difficult to address because of numerical and experimental limitations that make +difficult to investigate large range in the $(F_h ,\R)$ parameters space. \\ The +first simulations used for parametric studies \cite{Waite-Bartello2004, +Waite-Bartello2006, Lindborg2006} where limited by the computational power at that +time. For example, in \cite{Lindborg2006}, the maximal resolutions were $512^2 \times +64$ and $768^2 \times 48$. To observe an inertial range, these simulations where +performed using hyper-viscosity of order $8$. \\ Nowadays, direct numerical up to +resolution $8192^2 \times 2048$ are used \cite{Maffioli2015, Maffioli2017, Mininni2017, +Maffioli2020}. However, most of these simulations are used to study specific problems +with a reduced number of simulations. These very large simulations are necessary to +investigate the very small scales of stratified turbulence, but does not allows to have +an overview of the different regimes in such flows. \\ In this context, it would +be useful to have comprehensive open dataset to investigate various aspect of +stratified turbulence. The goal of this manuscript is to present such a dataset. +Intermediate resolution simulations (up to $2560^2 \times 640$) where both the Froude +and the floatability Reynolds are varied. They have the advantage to be sufficiently +small to perform a parametric study, and large enough to study transition to turbulent +regimes. We force the horizontally divergent modes of the velocity which is involved in +internal gravity waves. In a companion paper, we present simulations in which the +vortical modes (vertical vorticity) is forced in a similar way. \\ The remaining +of the paper is as follows. In section \ref{sec:num}, we present our numerical setup +and the dataset. In section \ref{sec:res}, we present several figures plotted using the +data set that illustrate: the large and small scale isotropy coefficients, the ratio of +integral scales, the velocities and energies, the mixing coefficient, the spatial +spectra and spectral energy budget. diff --git a/2022strat_turb_polo/py/save_epsK2overepsK_vs_FhR.py b/2022strat_turb_polo/py/save_epsK2overepsK_vs_FhR.py --- a/2022strat_turb_polo/py/save_epsK2overepsK_vs_FhR.py +++ b/2022strat_turb_polo/py/save_epsK2overepsK_vs_FhR.py @@ -14,8 +14,8 @@ vmax=1, s=35, ) -ax.set_xlim(right=1) -ax.set_ylim(top=1e3) +#ax.set_xlim(right=1) +#ax.set_ylim(top=1e3) ax.set_xlabel("$F_h$") ax.set_ylabel(r"$\mathcal{R} = Re {F_h}^2$") diff --git a/2022strat_turb_polo/py/save_isotropy_coef_vs_FhR.py b/2022strat_turb_polo/py/save_isotropy_coef_vs_FhR.py --- a/2022strat_turb_polo/py/save_isotropy_coef_vs_FhR.py +++ b/2022strat_turb_polo/py/save_isotropy_coef_vs_FhR.py @@ -37,8 +37,8 @@ ax.text(coef_x * Fh, coef_y * R2, letter, color="r") -ax.set_xlim(right=1) -ax.set_ylim(top=1e3) +#ax.set_xlim(right=1) +#ax.set_ylim(top=1e3) ax.axvline(Fh_limit, linestyle=":") Fh_min, Fh_max = ax.get_xlim() diff --git a/2022strat_turb_polo/py/save_isotropy_velo_vs_Fh.py b/2022strat_turb_polo/py/save_isotropy_velo_vs_Fh.py --- a/2022strat_turb_polo/py/save_isotropy_velo_vs_Fh.py +++ b/2022strat_turb_polo/py/save_isotropy_velo_vs_Fh.py @@ -13,9 +13,9 @@ ax.set_xlabel("$F_h$") ax.set_ylabel(r"$I_{velo}$") -xs = np.linspace(1e-2, 1e-1, 4) -ax.plot(xs, 8e0 * xs**1) -ax.text(0.03, 0.4, "${F_h}^1$") +xs = np.linspace(3e-3, 6e-2, 4) +ax.plot(xs, 8e0 * xs**1, "b") +ax.text(0.005, 0.15, "${F_h}^1$") # ax.plot(xs, 8e1 * xs**2) # ax.text(0.07, 0.2, "$F_h^{2}$") diff --git a/2022strat_turb_polo/py/save_kmaxeta_vs_FhR.py b/2022strat_turb_polo/py/save_kmaxeta_vs_FhR.py --- a/2022strat_turb_polo/py/save_kmaxeta_vs_FhR.py +++ b/2022strat_turb_polo/py/save_kmaxeta_vs_FhR.py @@ -14,8 +14,8 @@ vmax=1.2, s=35, ) -ax.set_xlim(right=1) -ax.set_ylim(top=1e3) +#ax.set_xlim(right=1) +#ax.set_ylim(top=1e3) ax.set_xlabel("$F_h$") ax.set_ylabel(r"$\mathcal{R} = Re {F_h}^2$") diff --git a/2022strat_turb_polo/py/save_mixing_coef_vs_FhR.py b/2022strat_turb_polo/py/save_mixing_coef_vs_FhR.py --- a/2022strat_turb_polo/py/save_mixing_coef_vs_FhR.py +++ b/2022strat_turb_polo/py/save_mixing_coef_vs_FhR.py @@ -14,8 +14,8 @@ vmax=0.6, s=35, ) -ax.set_xlim(right=1) -ax.set_ylim(top=1e3) +#ax.set_xlim(right=1) +#ax.set_ylim(top=1e3) ax.set_xlabel("$F_h$") ax.set_ylabel(r"$\mathcal{R} = Re {F_h}^2$") diff --git a/2022strat_turb_polo/py/save_ratio_length_scales_vs_Fh.py b/2022strat_turb_polo/py/save_ratio_length_scales_vs_Fh.py --- a/2022strat_turb_polo/py/save_ratio_length_scales_vs_Fh.py +++ b/2022strat_turb_polo/py/save_ratio_length_scales_vs_Fh.py @@ -1,7 +1,7 @@ import numpy as np import matplotlib.pyplot as plt -from util import save_fig, plot +from util import save_fig, plot, Fh_limit from util_dataframe import df @@ -11,14 +11,23 @@ tmp, "Fh", "lz1/lx1", c=np.log10(tmp["R2"]), vmin=0.5, vmax=2, logy=True ) -xs = np.linspace(1e-2, 4e-2, 2) -ax.plot(xs, 1.8e1 * xs**1, "b") +xs = np.linspace(3e-3, 6e-2, 4) +#ax.plot(xs, 8e0 * xs**1, "b") +#ax.text(0.04, 0.15, "${F_h}^1$") -xs = np.linspace(2e-2, 9.0e-2, 2) -ax.plot(xs, 3.5e0 * xs**0.5, "r") +#xs = np.linspace(1e-2, 4e-2, 2) +#ax.plot(xs, 1.8e1 * xs**1, ) + +xs = np.linspace(3e-3, 6e-2, 4) +ax.plot(xs, 2.25e0 * xs**0.5, "r") +ax.text(0.004, 0.3, "${F_h}^{1/2}$") + +ax.plot([Fh_limit, Fh_limit], [0.1,1], linestyle=":") ax.set_xlabel("$F_h$") ax.set_ylabel(r"$L_v / L_h$") +ax.set_ylim([0.1,1]) + fig = ax.figure diff --git a/2022strat_turb_polo/py/save_ratio_velo_vs_Fh.py b/2022strat_turb_polo/py/save_ratio_velo_vs_Fh.py --- a/2022strat_turb_polo/py/save_ratio_velo_vs_Fh.py +++ b/2022strat_turb_polo/py/save_ratio_velo_vs_Fh.py @@ -1,7 +1,7 @@ import numpy as np import matplotlib.pyplot as plt -from util import save_fig, plot +from util import save_fig, plot, Fh_limit from util_dataframe import df @@ -12,14 +12,19 @@ tmp, "Fh", "U_z/U_h", c=np.log10(tmp["R2"]), vmin=0.5, vmax=2, logy=True ) -xs = np.linspace(1e-2, 5.0e-2, 2) -ax.plot(xs, 1e1 * xs**1, "b") + +xs = np.linspace(3e-3, 6e-2, 4) +#ax.plot(xs, 1e1 * xs**1, "b") +#ax.text(0.04, 0.15, "${F_h}^1$") -xs = np.linspace(1e-2, 1.0e-1, 2) -ax.plot(xs, 2e0 * xs**0.5, "r") +ax.plot(xs, 2.25e0 * xs**0.5, "r") +ax.text(0.004, 0.3, "${F_h}^{1/2}$") + +ax.plot([Fh_limit, Fh_limit], [0.1,1], linestyle=":") ax.set_xlabel("$F_h$") ax.set_ylabel(r"$U_v / U_h$") +ax.set_ylim([0.1,1]) fig = ax.figure diff --git a/2022strat_turb_polo/py/util.py b/2022strat_turb_polo/py/util.py --- a/2022strat_turb_polo/py/util.py +++ b/2022strat_turb_polo/py/util.py @@ -114,7 +114,7 @@ def get_customized_dataframe(paths): df = get_dataframe_from_paths( - paths, tmin="t_start+2", use_cache=1, customize=customize + paths, tmin="t_last-3", use_cache=1, customize=customize ) df["Re"] = df.Rb * df.N**2 diff --git a/fluidsim/Python/make_fig_bench.py b/fluidsim/Python/make_fig_bench.py old mode 100755 new mode 100644 diff --git a/fluidsim/Python/make_fig_callgraph.py b/fluidsim/Python/make_fig_callgraph.py old mode 100755 new mode 100644 diff --git a/fluidsim/Python/make_fig_profile.py b/fluidsim/Python/make_fig_profile.py old mode 100755 new mode 100644 diff --git a/fluidsim/Python/make_fig_simul_obj.py b/fluidsim/Python/make_fig_simul_obj.py old mode 100755 new mode 100644 diff --git a/fluidsim/Python/old/make_fig_bench_strong.py b/fluidsim/Python/old/make_fig_bench_strong.py old mode 100755 new mode 100644 diff --git a/fluidsim/Python/old/make_fig_bench_strong3d_beskow.py b/fluidsim/Python/old/make_fig_bench_strong3d_beskow.py old mode 100755 new mode 100644 diff --git a/fluidsim/Python/old/make_fig_bench_strong3d_triolith.py b/fluidsim/Python/old/make_fig_bench_strong3d_triolith.py old mode 100755 new mode 100644 diff --git a/fluidsim/Python/old/make_fig_bench_weak.py b/fluidsim/Python/old/make_fig_bench_weak.py old mode 100755 new mode 100644 diff --git a/fluidsim/compare_codes/install_dedalus.sh b/fluidsim/compare_codes/install_dedalus.sh old mode 100755 new mode 100644 diff --git a/fluidsim/compare_codes/install_spectraldns.sh b/fluidsim/compare_codes/install_spectraldns.sh old mode 100755 new mode 100644 diff --git a/images/generate_wordcloud.sh b/images/generate_wordcloud.sh old mode 100755 new mode 100644