From 941791c7517dc145834b52227f558cb8915b1bf9 Mon Sep 17 00:00:00 2001 From: Giuseppe Orlando <giuseppe1.orlando@mail.polimi.it> Date: Sun, 1 May 2022 20:24:59 +0200 Subject: [PATCH] Solver for incompressible NS based on Discontinuous Galerkin TR-BDF2 implemented with MatrixFree --- NavierStokes_TRBDF2_DG/CMakeLists.txt | 54 + NavierStokes_TRBDF2_DG/README.md | 104 + NavierStokes_TRBDF2_DG/doc/adaptive_mesh.png | Bin 0 -> 39096 bytes NavierStokes_TRBDF2_DG/doc/author | 1 + NavierStokes_TRBDF2_DG/doc/builds-on | 3 + NavierStokes_TRBDF2_DG/doc/dependencies | 2 + NavierStokes_TRBDF2_DG/doc/drag.png | Bin 0 -> 67566 bytes NavierStokes_TRBDF2_DG/doc/entry-name | 1 + NavierStokes_TRBDF2_DG/doc/lift.png | Bin 0 -> 41456 bytes NavierStokes_TRBDF2_DG/doc/tooltip | 1 + .../doc/velocity_magnitude.png | Bin 0 -> 92506 bytes NavierStokes_TRBDF2_DG/equation_data.h | 83 + .../navier_stokes_TRBDF2_DG.cc | 3045 +++++++++++++++++ NavierStokes_TRBDF2_DG/parameter-file.prm | 39 + NavierStokes_TRBDF2_DG/runtime_parameters.h | 182 + 15 files changed, 3515 insertions(+) create mode 100644 NavierStokes_TRBDF2_DG/CMakeLists.txt create mode 100644 NavierStokes_TRBDF2_DG/README.md create mode 100644 NavierStokes_TRBDF2_DG/doc/adaptive_mesh.png create mode 100644 NavierStokes_TRBDF2_DG/doc/author create mode 100644 NavierStokes_TRBDF2_DG/doc/builds-on create mode 100644 NavierStokes_TRBDF2_DG/doc/dependencies create mode 100644 NavierStokes_TRBDF2_DG/doc/drag.png create mode 100644 NavierStokes_TRBDF2_DG/doc/entry-name create mode 100644 NavierStokes_TRBDF2_DG/doc/lift.png create mode 100644 NavierStokes_TRBDF2_DG/doc/tooltip create mode 100644 NavierStokes_TRBDF2_DG/doc/velocity_magnitude.png create mode 100644 NavierStokes_TRBDF2_DG/equation_data.h create mode 100644 NavierStokes_TRBDF2_DG/navier_stokes_TRBDF2_DG.cc create mode 100644 NavierStokes_TRBDF2_DG/parameter-file.prm create mode 100644 NavierStokes_TRBDF2_DG/runtime_parameters.h diff --git a/NavierStokes_TRBDF2_DG/CMakeLists.txt b/NavierStokes_TRBDF2_DG/CMakeLists.txt new file mode 100644 index 0000000..fcb74dd --- /dev/null +++ b/NavierStokes_TRBDF2_DG/CMakeLists.txt @@ -0,0 +1,54 @@ +## +# CMake script for the NavierStokes_TRBDF2_DG program: +## + +# Set the name of the project and target: +SET(TARGET "NS_TRBDF2_DG") + +# Declare all source files the target consists of. Here, this is only +# the one .cc file, but as you expand your project you may wish +# to add other source files as well. If your project becomes much larger, +# you may want to either replace the following statement by something like +# FILE(GLOB_RECURSE TARGET_SRC "source/*.cc") +# FILE(GLOB_RECURSE TARGET_INC "include/*.h") +# SET(TARGET_SRC ${TARGET_SRC} ${TARGET_INC}) +# or switch altogether to the large project CMakeLists.txt file discussed +# in the "CMake in user projects" page accessible from the "User info" +# page of the documentation. +SET(TARGET_SRC + navier_stokes_TRBDF2_DG.cc + ) + +# Usually, you will not need to modify anything beyond this point... + +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12) + +FIND_PACKAGE(deal.II 9.2.0 + HINTS ${deal.II_DIR} ${DEAL_II_DIR} ../ ../../ $ENV{DEAL_II_DIR} + ) +IF(NOT ${deal.II_FOUND}) + MESSAGE(FATAL_ERROR "\n" + "*** Could not locate a (sufficiently recent) version of deal.II. ***\n\n" + "You may want to either pass a flag -DDEAL_II_DIR=/path/to/deal.II to cmake\n" + "or set an environment variable \"DEAL_II_DIR\" that contains this path." + ) +ENDIF() + +# +# Are all dependencies fulfilled? +# +IF(NOT DEAL_II_WITH_MPI OR NOT DEAL_II_WITH_P4EST) # keep in one line + MESSAGE(FATAL_ERROR " +Error! This tutorial requires a deal.II library that was configured with the following options: + DEAL_II_WITH_MPI = ON + DEAL_II_WITH_P4EST = ON +However, the deal.II library found at ${DEAL_II_PATH} was configured with these options + DEAL_II_WITH_MPI = ${DEAL_II_WITH_MPI} + DEAL_II_WITH_P4EST = ${DEAL_II_WITH_P4EST} +which conflict with the requirements." + ) +ENDIF() + +DEAL_II_INITIALIZE_CACHED_VARIABLES() +PROJECT(${TARGET}) +DEAL_II_INVOKE_AUTOPILOT() diff --git a/NavierStokes_TRBDF2_DG/README.md b/NavierStokes_TRBDF2_DG/README.md new file mode 100644 index 0000000..e490b57 --- /dev/null +++ b/NavierStokes_TRBDF2_DG/README.md @@ -0,0 +1,104 @@ +# TRBDF2-DG projection solver for the incompressible Navier-Stokes equations + +## Compiling and Running +To generate a makefile for this code using CMake, type the following command into the terminal from the main directory: + + cmake . -DDEAL_II_DIR=/path/to/deal.II + +To compile the code in release mode use: + + make release + +This command will create the executable, <code>NS_TRBDF2_DG</code>. + +To run the code on <code>N</code> processors type the following command into the terminal from the main directory, + + mpirun -np N ./NS_TRBDF2_DG + +The output of the code will be in <code>.vtu</code> format and be written to disk in parallel. The results can be viewed using <a href="http://www.paraview.org/">ParaView</a>. A parameter file called <code>parameter-file.prm</code> has to be present in +the same folder of the executable, following the same structure employed in <a href="https://www.dealii.org/current/doxygen/deal.II/step_35.html">step-35</a>. Two extra fields are present: <code>saving_directory</code> with the name of the folder where the results should be saved (which has therefore to be created before launching the program) and <code>refinement_iterations</code> that specifies how often the remeshing procedure has to be performed. + + +### The Navier-Stokes equations and the time discretization strategy ### + +In this section, we briefly describe the problem and the approach employed. A detailed explanation of the numerical scheme is reported in [1]. We consider the classical unsteady incompressible Navier-Stokes equations, written in non-dimensional form as: + +$$ +\begin{align*} +\frac{\partial \mathbf{u}}{\partial t} + \nabla\cdot\left(\mathbf{u} \otimes\mathbf{u}\right) + \nabla p &= \frac{1}{Re}\Delta\mathbf{u} + \mathbf{f} \\ +\nabla\cdot\mathbf{u} &= 0, +\end{align*} +$$ + +where $Re$ denotes the Reynolds number. In the case of projection methods, difficulties arise in choosing the boundary conditions to be imposed for the Poisson equation which is to be solved at each time step to compute the pressure. An alternative that allows to avoid or reduce some of these problems is the so-called artificial compressibility formulation. In this formulation, the incompressibility constraint is relaxed and a time evolution equation for the pressure is introduced, which is characterized by an artificial sound speed $ c, $ so as to obtain: + +$$ +\begin{align*} +\frac{\partial\mathbf{u}}{\partial t} + \nabla\cdot\left(\mathbf{u}\otimes\mathbf{u}\right) + \nabla p &= \frac{1}{Re}\Delta\mathbf{u} + \mathbf{f} \\ +\frac{1}{c^2}\frac{\partial p}{\partial t} + \nabla\cdot\mathbf{u} &= 0. +\end{align*} +$$ + +For the sake of simplicity, we shall only consider $\mathbf{f} = \mathbf{0}$. The numerical scheme is an extension of the projection method introduced in [2] based on the TR-BDF2 method. For a generic time-dependent problem $\bm{u}^{'} = \mathcal{N}(\bm{u})$, the TR-BDF2 method can be described in terms of two stages as follows: + +$$ +\begin{align*} +\frac{\bm{u}^{n+\gamma} - \bm{u}^{n}}{\gamma\Delta t} &= \frac{1}{2}\mathcal{N}\left(\bm{u}^{n+\gamma}\right) + \frac{1}{2}\mathcal{N}\left(\bm{u}^{n}\right) \\ +\frac{\bm{u}^{n+1} - \bm{u}^{n + \gamma}}{\left(1 - \gamma\right)\Delta t} &= \frac{1}{2 - \gamma}\mathcal{N}\left(\bm{u}^{n+1}\right) + \frac{1 - \gamma}{2\left(2 - \gamma\right)}\mathcal{N}\left(\bm{u}^{n+\gamma}\right) + \frac{1 - \gamma}{2\left(2 - \gamma\right)}\mathcal{N}\left(\bm{u}^{n}\right). +\end{align*} +$$ + +Following then the projection approach described in [2], the momentum predictor equation for the first stage reads: + +$$ +\begin{eqnarray} +&&\frac{\mathbf{u}^{n+\gamma,\*} - \mathbf{u}^{n}}{\gamma\Delta t} - \frac{1}{2Re}\Delta\mathbf{u}^{n+\gamma,\*} + \frac{1}{2}\nabla\cdot\left(\mathbf{u}^{n+\gamma,\*}\otimes\mathbf{u}^{n+\frac{\gamma}{2}}\right) = \nonumber \\ +&&\frac{1}{2Re}\Delta\mathbf{u}^{n} - \frac{1}{2}\nabla\cdot\left(\mathbf{u}^{n}\otimes\mathbf{u}^{n+\frac{\gamma}{2}}\right) - \nabla p^n \nonumber \\ +&&\mathbf{u}^{n+\gamma,\*}\rvert_{\partial\Omega} = \mathbf{u}_D^{n+\gamma}. \nonumber +\end{eqnarray} +$$ + +Notice that, in order to avoid solving a nonlinear system at each time step, an approximation is introduced in the nonlinear momentum advection term, so that $\mathbf{u}^{n + \frac{\gamma}{2}}$ is defined by extrapolation as + +$$ +\mathbf{u}^{n + \frac{\gamma}{2}} = \left(1 + \frac{\gamma}{2\left(1-\gamma\right)}\right)\mathbf{u}^{n} - \frac{\gamma}{2\left(1-\gamma\right)}\mathbf{u}^{n-1}. +$$ + +For what concerns the pressure, we introduce the intermediate update +$\mathbf{u}^{n+\gamma,\*\*} = \mathbf{u}^{n+\gamma,\*} + \gamma\Delta t\nabla p^{n}$, and we solve the following Helmholtz equation + +$$ +\frac{1}{c^2}\frac{p^{n+\gamma}}{\gamma^2\Delta t^2} -\Delta p^{n+\gamma} = +- \frac{1}{\gamma\Delta t} \nabla\cdot\mathbf{u}^{n+\gamma,\*\*} + \frac{1}{c^2}\frac{p^{n }}{\gamma^2\Delta t^2} +$$ + +and, finally, we set $\mathbf{u}^{n+\gamma} = \mathbf{u}^{n+\gamma,\*\*} - \gamma\Delta t\nabla p^{n+\gamma}$. +The second stage of the TR-BDF2 scheme is performed in a similar manner (see [1] for all the details). + +### Some implementation details ### + +A matrix-free approach was employed like for <a href="https://www.dealii.org/current/doxygen/deal.II/step_37.html">step-37</a> or <a href="https://www.dealii.org/current/doxygen/deal.II/step_50.html">step-50</a>. Another feature of the library which it is possible to employ during the numerical simulations is the mesh adaptation capability. On each element $K$ we define the quantity + +$$ +\eta_K = \text{diam}(K)^2\left\|\nabla \times \mathbf{u}\right\|^2_K +$$ + +that acts as local refinement indicator. The preconditioned conjugate gradient method implemented in the function <code>SolverCG</code> was employed to solve the Helmholtz equations, whereas, for the momentum equations, the GMRES solver +implemented in the function <code>SolverGMRES</code> was used. +A Jacobi preconditioner is used for the two momentum predictors, whereas a Geometric Multigrid preconditioner is employed for the Helmholtz equations (see <a href="https://www.dealii.org/current/doxygen/deal.II/step_37.html">step-37</a>). + +#### Test case #### + +We test the code with a classical benchmark case, namely the flow past a cylinder in 2D at $Re = 100$ (see [1] for all the details). The image shows the contour plot of the velocity magnitude at $ t = T_{f} = 400 $. The evolution of the lift and drag coefficients from $ t = 385 $ to $ t = T_{f} $ are also reported and the expected periodic behaviour is retrieved. + + + +  + + +## References ## + +[1] G. Orlando, A. Della Rocca, P.F. Barbante, L. Bonaventura, and +N. Parolini. An efficient and accurate implicit DG solver for the incompressible Navier-Stokes equations. International Journal for Numerical Methods in Fluids, 2022. DOI: 10.1002/FLD.5098 + +[2] A. Della Rocca. Large-Eddy Simulations of Turbulent Reacting Flows with Industrial Applications. PhD thesis. Politecnico di Milano, 2018. http://hdl.handle.net/10589/137775 diff --git a/NavierStokes_TRBDF2_DG/doc/adaptive_mesh.png b/NavierStokes_TRBDF2_DG/doc/adaptive_mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..3cda6b8f9538ca28d11c95247a2cb65d3a5fe432 GIT binary patch literal 39096 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 MboFyt=akR{04=KP5C8xG literal 0 HcmV?d00001 diff --git a/NavierStokes_TRBDF2_DG/doc/author b/NavierStokes_TRBDF2_DG/doc/author new file mode 100644 index 0000000..bab3a79 --- /dev/null +++ b/NavierStokes_TRBDF2_DG/doc/author @@ -0,0 +1 @@ +Giuseppe Orlando <giuseppe.orlando@polimi.it> diff --git a/NavierStokes_TRBDF2_DG/doc/builds-on b/NavierStokes_TRBDF2_DG/doc/builds-on new file mode 100644 index 0000000..948860e --- /dev/null +++ b/NavierStokes_TRBDF2_DG/doc/builds-on @@ -0,0 +1,3 @@ +step-35 +step-37 +step-50 diff --git a/NavierStokes_TRBDF2_DG/doc/dependencies b/NavierStokes_TRBDF2_DG/doc/dependencies new file mode 100644 index 0000000..961aea8 --- /dev/null +++ b/NavierStokes_TRBDF2_DG/doc/dependencies @@ -0,0 +1,2 @@ +DEAL_II_WITH_MPI +DEAL_II_WITH_P4EST diff --git a/NavierStokes_TRBDF2_DG/doc/drag.png b/NavierStokes_TRBDF2_DG/doc/drag.png new file mode 100644 index 0000000000000000000000000000000000000000..db913dbfe20f80f00e7cae4a02ec39b8f01d60a0 GIT binary patch literal 67566 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�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 literal 0 HcmV?d00001 diff --git a/NavierStokes_TRBDF2_DG/doc/entry-name b/NavierStokes_TRBDF2_DG/doc/entry-name new file mode 100644 index 0000000..6d92c7f --- /dev/null +++ b/NavierStokes_TRBDF2_DG/doc/entry-name @@ -0,0 +1 @@ +TRBDF2-DG projection solver for the incompressible Navier-Stokes equations diff --git a/NavierStokes_TRBDF2_DG/doc/lift.png b/NavierStokes_TRBDF2_DG/doc/lift.png new file mode 100644 index 0000000000000000000000000000000000000000..36cd168df35c146ecbef67a72a21539709fa0044 GIT binary patch literal 41456 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 literal 0 HcmV?d00001 diff --git a/NavierStokes_TRBDF2_DG/doc/tooltip b/NavierStokes_TRBDF2_DG/doc/tooltip new file mode 100644 index 0000000..2ee7e11 --- /dev/null +++ b/NavierStokes_TRBDF2_DG/doc/tooltip @@ -0,0 +1 @@ +Projection solver for the incompressible Navier-Stokes equations based on a DG spatial discretization and on the TR-BDF2 method for time discretization diff --git a/NavierStokes_TRBDF2_DG/doc/velocity_magnitude.png b/NavierStokes_TRBDF2_DG/doc/velocity_magnitude.png new file mode 100644 index 0000000000000000000000000000000000000000..a5de311cd643e26a1bc9da56d33955cf3fa7e0e4 GIT binary patch literal 92506 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 Q_W=0FN-0T}NSJ*3AAd|oqW}N^ literal 0 HcmV?d00001 diff --git a/NavierStokes_TRBDF2_DG/equation_data.h b/NavierStokes_TRBDF2_DG/equation_data.h new file mode 100644 index 0000000..24a1762 --- /dev/null +++ b/NavierStokes_TRBDF2_DG/equation_data.h @@ -0,0 +1,83 @@ +// We start by including all the necessary deal.II header files. +// +#include <deal.II/base/point.h> +#include <deal.II/base/function.h> + +// @sect{Equation data} + +// In the next namespace, we declare and implement suitable functions that may be used for the initial and boundary conditions +// +namespace EquationData { + using namespace dealii; + + static const unsigned int degree_p = 1; /*--- Polynomial degree for the pressure. The one for the velocity + will be equal to degree_p + 1, but its value can be easily changed + in the template parameter list of the classes with weak form ---*/ + + // We declare class that describes the boundary conditions and initial one for velocity: + // + template<int dim> + class Velocity: public Function<dim> { + public: + Velocity(const double initial_time = 0.0); + + virtual double value(const Point<dim>& p, + const unsigned int component = 0) const override; + + virtual void vector_value(const Point<dim>& p, + Vector<double>& values) const override; + }; + + + template<int dim> + Velocity<dim>::Velocity(const double initial_time): Function<dim>(dim, initial_time) {} + + + template<int dim> + double Velocity<dim>::value(const Point<dim>& p, const unsigned int component) const { + AssertIndexRange(component, 3); + if(component == 0) { + const double Um = 1.5; + const double H = 4.1; + + return 4.0*Um*p(1)*(H - p(1))/(H*H); + } + else + return 0.0; + } + + + template<int dim> + void Velocity<dim>::vector_value(const Point<dim>& p, Vector<double>& values) const { + Assert(values.size() == dim, ExcDimensionMismatch(values.size(), dim)); + + for(unsigned int i = 0; i < dim; ++i) + values[i] = value(p, i); + } + + + // We do the same for the pressure + // + template<int dim> + class Pressure: public Function<dim> { + public: + Pressure(const double initial_time = 0.0); + + virtual double value(const Point<dim>& p, + const unsigned int component = 0) const override; + }; + + + template<int dim> + Pressure<dim>::Pressure(const double initial_time): Function<dim>(1, initial_time) {} + + + template<int dim> + double Pressure<dim>::value(const Point<dim>& p, const unsigned int component) const { + (void)component; + AssertIndexRange(component, 1); + + return 22.0 - p(0); + } + +} // namespace EquationData diff --git a/NavierStokes_TRBDF2_DG/navier_stokes_TRBDF2_DG.cc b/NavierStokes_TRBDF2_DG/navier_stokes_TRBDF2_DG.cc new file mode 100644 index 0000000..434a65e --- /dev/null +++ b/NavierStokes_TRBDF2_DG/navier_stokes_TRBDF2_DG.cc @@ -0,0 +1,3045 @@ +/* Author: Giuseppe Orlando, 2022. */ + +// We start by including all the necessary deal.II header files and some C++ +// related ones. +// +#include <deal.II/base/quadrature_lib.h> +#include <deal.II/base/multithread_info.h> +#include <deal.II/base/thread_management.h> +#include <deal.II/base/work_stream.h> +#include <deal.II/base/parallel.h> +#include <deal.II/base/utilities.h> +#include <deal.II/base/conditional_ostream.h> + +#include <deal.II/lac/vector.h> +#include <deal.II/lac/solver_cg.h> +#include <deal.II/lac/precondition.h> +#include <deal.II/lac/solver_gmres.h> +#include <deal.II/lac/affine_constraints.h> + +#include <deal.II/grid/tria.h> +#include <deal.II/grid/grid_generator.h> +#include <deal.II/grid/grid_refinement.h> +#include <deal.II/grid/tria_accessor.h> +#include <deal.II/grid/tria_iterator.h> +#include <deal.II/distributed/grid_refinement.h> + +#include <deal.II/dofs/dof_handler.h> +#include <deal.II/dofs/dof_accessor.h> +#include <deal.II/dofs/dof_tools.h> + +#include <deal.II/fe/fe_q.h> +#include <deal.II/fe/fe_dgq.h> +#include <deal.II/fe/fe_values.h> +#include <deal.II/fe/fe_tools.h> +#include <deal.II/fe/fe_system.h> + +#include <deal.II/numerics/matrix_tools.h> +#include <deal.II/numerics/vector_tools.h> +#include <deal.II/numerics/data_out.h> + +#include <fstream> +#include <cmath> +#include <iostream> + +#include <deal.II/matrix_free/matrix_free.h> +#include <deal.II/matrix_free/operators.h> +#include <deal.II/matrix_free/fe_evaluation.h> +#include <deal.II/fe/component_mask.h> + +#include <deal.II/base/timer.h> +#include <deal.II/distributed/solution_transfer.h> +#include <deal.II/numerics/error_estimator.h> + +#include <deal.II/multigrid/multigrid.h> +#include <deal.II/multigrid/mg_transfer_matrix_free.h> +#include <deal.II/multigrid/mg_tools.h> +#include <deal.II/multigrid/mg_coarse.h> +#include <deal.II/multigrid/mg_smoother.h> +#include <deal.II/multigrid/mg_matrix.h> + +#include <deal.II/meshworker/mesh_loop.h> + +#include "runtime_parameters.h" +#include "equation_data.h" + +// We include the code in a suitable namespace: +// +namespace NS_TRBDF2 { + using namespace dealii; + + // The following class is an auxiliary one for post-processing of the vorticity + // + template<int dim> + class PostprocessorVorticity: public DataPostprocessor<dim> { + public: + virtual void evaluate_vector_field(const DataPostprocessorInputs::Vector<dim>& inputs, + std::vector<Vector<double>>& computed_quantities) const override; + + virtual std::vector<std::string> get_names() const override; + + virtual std::vector<DataComponentInterpretation::DataComponentInterpretation> + get_data_component_interpretation() const override; + + virtual UpdateFlags get_needed_update_flags() const override; + }; + + // This function evaluates the vorticty in both 2D and 3D cases + // + template <int dim> + void PostprocessorVorticity<dim>::evaluate_vector_field(const DataPostprocessorInputs::Vector<dim>& inputs, + std::vector<Vector<double>>& computed_quantities) const { + const unsigned int n_quadrature_points = inputs.solution_values.size(); + + /*--- Check the correctness of all data structres ---*/ + Assert(inputs.solution_gradients.size() == n_quadrature_points, ExcInternalError()); + Assert(computed_quantities.size() == n_quadrature_points, ExcInternalError()); + + Assert(inputs.solution_values[0].size() == dim, ExcInternalError()); + + if(dim == 2) { + Assert(computed_quantities[0].size() == 1, ExcInternalError()); + } + else { + Assert(computed_quantities[0].size() == dim, ExcInternalError()); + } + + /*--- Compute the vorticty ---*/ + if(dim == 2) { + for(unsigned int q = 0; q < n_quadrature_points; ++q) + computed_quantities[q](0) = inputs.solution_gradients[q][1][0] - inputs.solution_gradients[q][0][1]; + } + else { + for(unsigned int q = 0; q < n_quadrature_points; ++q) { + computed_quantities[q](0) = inputs.solution_gradients[q][2][1] - inputs.solution_gradients[q][1][2]; + computed_quantities[q](1) = inputs.solution_gradients[q][0][2] - inputs.solution_gradients[q][2][0]; + computed_quantities[q](2) = inputs.solution_gradients[q][1][0] - inputs.solution_gradients[q][0][1]; + } + } + } + + // This auxiliary function is required by the base class DataProcessor and simply + // sets the name for the output file + // + template<int dim> + std::vector<std::string> PostprocessorVorticity<dim>::get_names() const { + std::vector<std::string> names; + names.emplace_back("vorticity"); + if(dim == 3) { + names.emplace_back("vorticity"); + names.emplace_back("vorticity"); + } + + return names; + } + + // This auxiliary function is required by the base class DataProcessor and simply + // specifies if the vorticity is a scalar (2D) or a vector (3D) + // + template<int dim> + std::vector<DataComponentInterpretation::DataComponentInterpretation> + PostprocessorVorticity<dim>::get_data_component_interpretation() const { + std::vector<DataComponentInterpretation::DataComponentInterpretation> interpretation; + if(dim == 2) + interpretation.push_back(DataComponentInterpretation::component_is_scalar); + else { + interpretation.push_back(DataComponentInterpretation::component_is_part_of_vector); + interpretation.push_back(DataComponentInterpretation::component_is_part_of_vector); + interpretation.push_back(DataComponentInterpretation::component_is_part_of_vector); + } + + return interpretation; + } + + // This auxiliary function is required by the base class DataProcessor and simply + // sets which variables have to updated (only the gradients) + // + template<int dim> + UpdateFlags PostprocessorVorticity<dim>::get_needed_update_flags() const { + return update_gradients; + } + + + // The following structs are auxiliary objects for mesh refinement. ScratchData simply sets + // the FEValues object + // + template <int dim> + struct ScratchData { + ScratchData(const FiniteElement<dim>& fe, + const unsigned int quadrature_degree, + const UpdateFlags update_flags): fe_values(fe, QGauss<dim>(quadrature_degree), update_flags) {} + + ScratchData(const ScratchData<dim>& scratch_data): fe_values(scratch_data.fe_values.get_fe(), + scratch_data.fe_values.get_quadrature(), + scratch_data.fe_values.get_update_flags()) {} + FEValues<dim> fe_values; + }; + + + // CopyData simply sets the cell index + // + struct CopyData { + CopyData() : cell_index(numbers::invalid_unsigned_int), value(0.0) {} + + CopyData(const CopyData &) = default; + + unsigned int cell_index; + double value; + }; + + + // @sect{ <code>NavierStokesProjectionOperator::NavierStokesProjectionOperator</code> } + + // The following class sets effecively the weak formulation of the problems for the different stages + // and for both velocity and pressure. + // The template parameters are the dimnesion of the problem, the polynomial degree for the pressure, + // the polynomial degree for the velocity, the number of quadrature points for integrals for the pressure step, + // the number of quadrature points for integrals for the velocity step, the type of vector for storage and the type + // of floating point data (in general double or float for preconditioners structures if desired). + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + class NavierStokesProjectionOperator: public MatrixFreeOperators::Base<dim, Vec> { + public: + NavierStokesProjectionOperator(); + + NavierStokesProjectionOperator(RunTimeParameters::Data_Storage& data); + + void set_dt(const double time_step); + + void set_TR_BDF2_stage(const unsigned int stage); + + void set_NS_stage(const unsigned int stage); + + void set_u_extr(const Vec& src); + + void vmult_rhs_velocity(Vec& dst, const std::vector<Vec>& src) const; + + void vmult_rhs_pressure(Vec& dst, const std::vector<Vec>& src) const; + + void vmult_grad_p_projection(Vec& dst, const Vec& src) const; + + virtual void compute_diagonal() override; + + protected: + double Re; + double dt; + + /*--- Parameters of time-marching scheme ---*/ + double gamma; + double a31; + double a32; + double a33; + + unsigned int TR_BDF2_stage; /*--- Flag to denote at which stage of the TR-BDF2 are ---*/ + unsigned int NS_stage; /*--- Flag to denote at which stage of NS solution inside each TR-BDF2 stage we are + (solution of the velocity or of the pressure)---*/ + + virtual void apply_add(Vec& dst, const Vec& src) const override; + + private: + /*--- Auxiliary variable for the TR stage + (just to avoid to report a lot of 0.5 and for my personal choice to be coherent with the article) ---*/ + const double a21 = 0.5; + const double a22 = 0.5; + + /*--- Penalty method parameters, theta = 1 means SIP, while C_p and C_u are the penalization coefficients ---*/ + const double theta_v = 1.0; + const double theta_p = 1.0; + const double C_p = 1.0*(fe_degree_p + 1)*(fe_degree_p + 1); + const double C_u = 1.0*(fe_degree_v + 1)*(fe_degree_v + 1); + + Vec u_extr; /*--- Auxiliary variable to update the extrapolated velocity ---*/ + + EquationData::Velocity<dim> vel_boundary_inflow; /*--- Auxiliary variable to impose velocity boundary conditions ---*/ + + /*--- The following functions basically assemble the linear and bilinear forms. Their syntax is due to + the base class MatrixFreeOperators::Base ---*/ + void assemble_rhs_cell_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const std::vector<Vec>& src, + const std::pair<unsigned int, unsigned int>& cell_range) const; + void assemble_rhs_face_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const std::vector<Vec>& src, + const std::pair<unsigned int, unsigned int>& face_range) const; + void assemble_rhs_boundary_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const std::vector<Vec>& src, + const std::pair<unsigned int, unsigned int>& face_range) const; + + void assemble_rhs_cell_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const std::vector<Vec>& src, + const std::pair<unsigned int, unsigned int>& cell_range) const; + void assemble_rhs_face_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const std::vector<Vec>& src, + const std::pair<unsigned int, unsigned int>& face_range) const; + void assemble_rhs_boundary_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const std::vector<Vec>& src, + const std::pair<unsigned int, unsigned int>& face_range) const; + + void assemble_cell_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& cell_range) const; + void assemble_face_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& face_range) const; + void assemble_boundary_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& face_range) const; + + void assemble_cell_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& cell_range) const; + void assemble_face_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& face_range) const; + void assemble_boundary_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& face_range) const; + + void assemble_cell_term_projection_grad_p(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& cell_range) const; + void assemble_rhs_cell_term_projection_grad_p(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& cell_range) const; + + void assemble_diagonal_cell_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const unsigned int& src, + const std::pair<unsigned int, unsigned int>& cell_range) const; + void assemble_diagonal_face_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const unsigned int& src, + const std::pair<unsigned int, unsigned int>& face_range) const; + void assemble_diagonal_boundary_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const unsigned int& src, + const std::pair<unsigned int, unsigned int>& face_range) const; + + void assemble_diagonal_cell_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const unsigned int& src, + const std::pair<unsigned int, unsigned int>& cell_range) const; + void assemble_diagonal_face_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const unsigned int& src, + const std::pair<unsigned int, unsigned int>& face_range) const; + void assemble_diagonal_boundary_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const unsigned int& src, + const std::pair<unsigned int, unsigned int>& face_range) const; + }; + + + // We start with the default constructor. It is important for MultiGrid, so it is fundamental + // to properly set the parameters of the time scheme. + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + NavierStokesProjectionOperator(): + MatrixFreeOperators::Base<dim, Vec>(), Re(), dt(), gamma(2.0 - std::sqrt(2.0)), a31((1.0 - gamma)/(2.0*(2.0 - gamma))), + a32(a31), a33(1.0/(2.0 - gamma)), TR_BDF2_stage(1), NS_stage(1), u_extr() {} + + + // We focus now on the constructor with runtime parameters storage + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + NavierStokesProjectionOperator(RunTimeParameters::Data_Storage& data): + MatrixFreeOperators::Base<dim, Vec>(), Re(data.Reynolds), dt(data.dt), + gamma(2.0 - std::sqrt(2.0)), a31((1.0 - gamma)/(2.0*(2.0 - gamma))), + a32(a31), a33(1.0/(2.0 - gamma)), TR_BDF2_stage(1), NS_stage(1), u_extr(), + vel_boundary_inflow(data.initial_time) {} + + + // Setter of time-step (called by Multigrid and in case a smaller time-step towards the end is needed) + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + set_dt(const double time_step) { + dt = time_step; + } + + + // Setter of TR-BDF2 stage (this can be known only during the effective execution + // and so it has to be demanded to the class that really solves the problem) + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + set_TR_BDF2_stage(const unsigned int stage) { + AssertIndexRange(stage, 3); + Assert(stage > 0, ExcInternalError()); + + TR_BDF2_stage = stage; + } + + + // Setter of NS stage (this can be known only during the effective execution + // and so it has to be demanded to the class that really solves the problem) + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + set_NS_stage(const unsigned int stage) { + AssertIndexRange(stage, 4); + Assert(stage > 0, ExcInternalError()); + + NS_stage = stage; + } + + + // Setter of extrapolated velocity for different stages + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + set_u_extr(const Vec& src) { + u_extr = src; + u_extr.update_ghost_values(); + } + + + // We are in a DG-MatrixFree framework, so it is convenient to compute separately cell contribution, + // internal faces contributions and boundary faces contributions. We start by + // assembling the rhs cell term for the velocity. + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_rhs_cell_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const std::vector<Vec>& src, + const std::pair<unsigned int, unsigned int>& cell_range) const { + if(TR_BDF2_stage == 1) { + /*--- We first start by declaring the suitable instances to read the old velocity, the + extrapolated velocity and the old pressure. 'phi' will be used only to submit the result. + The second argument specifies which dof handler has to be used (in this implementation 0 stands for + velocity and 1 for pressure). ---*/ + FEEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, 0), + phi_old(data, 0), + phi_old_extr(data, 0); + FEEvaluation<dim, fe_degree_p, n_q_points_1d_v, 1, Number> phi_old_press(data, 1); + + /*--- We loop over the cells in the range ---*/ + for(unsigned int cell = cell_range.first; cell < cell_range.second; ++cell) { + /*--- Now we need to assign the current cell to each FEEvaluation object and then to specify which src vector + it has to read (the proper order is clearly delegated to the user, which has to pay attention in the function + call to be coherent). ---*/ + phi_old.reinit(cell); + phi_old.gather_evaluate(src[0], true, true); /*--- The 'gather_evaluate' function reads data from the vector. + The second and third parameter specifies if you want to read + values and/or derivative related quantities ---*/ + phi_old_extr.reinit(cell); + phi_old_extr.gather_evaluate(src[1], true, false); + phi_old_press.reinit(cell); + phi_old_press.gather_evaluate(src[2], true, false); + phi.reinit(cell); + + /*--- Now we loop over all the quadrature points to compute the integrals ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& u_n = phi_old.get_value(q); + const auto& grad_u_n = phi_old.get_gradient(q); + const auto& u_n_gamma_ov_2 = phi_old_extr.get_value(q); + const auto& tensor_product_u_n = outer_product(u_n, u_n_gamma_ov_2); + const auto& p_n = phi_old_press.get_value(q); + auto p_n_times_identity = tensor_product_u_n; + p_n_times_identity = 0; + for(unsigned int d = 0; d < dim; ++d) + p_n_times_identity[d][d] = p_n; + + phi.submit_value(1.0/(gamma*dt)*u_n, q); /*--- 'submit_value' contains quantites that we want to test against the + test function ---*/ + phi.submit_gradient(-a21/Re*grad_u_n + a21*tensor_product_u_n + p_n_times_identity, q); + /*--- 'submit_gradient' contains quantites that we want to test against the gradient of test function ---*/ + } + phi.integrate_scatter(true, true, dst); /*--- 'integrate_scatter' is the responsible of distributing into dst. + The first two boolean parameters specify if we are testing against + the test function and/or its gradient ---*/ + } + } + else { + /*--- We first start by declaring the suitable instances to read already available quantities. ---*/ + FEEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, 0), + phi_old(data, 0), + phi_int(data, 0); + FEEvaluation<dim, fe_degree_p, n_q_points_1d_v, 1, Number> phi_old_press(data, 1); + + /*--- We loop over the cells in the range ---*/ + for(unsigned int cell = cell_range.first; cell < cell_range.second; ++cell) { + phi_old.reinit(cell); + phi_old.gather_evaluate(src[0], true, true); + phi_int.reinit(cell); + phi_int.gather_evaluate(src[1], true, true); + phi_old_press.reinit(cell); + phi_old_press.gather_evaluate(src[2], true, false); + phi.reinit(cell); + + /*--- Now we loop over all the quadrature points to compute the integrals ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& u_n = phi_old.get_value(q); + const auto& grad_u_n = phi_old.get_gradient(q); + const auto& u_n_gamma = phi_int.get_value(q); + const auto& grad_u_n_gamma = phi_int.get_gradient(q); + const auto& tensor_product_u_n = outer_product(u_n, u_n); + const auto& tensor_product_u_n_gamma = outer_product(u_n_gamma, u_n_gamma); + const auto& p_n = phi_old_press.get_value(q); + auto p_n_times_identity = tensor_product_u_n; + p_n_times_identity = 0; + for(unsigned int d = 0; d < dim; ++d) + p_n_times_identity[d][d] = p_n; + + phi.submit_value(1.0/((1.0 - gamma)*dt)*u_n_gamma, q); + phi.submit_gradient(a32*tensor_product_u_n_gamma + a31*tensor_product_u_n - + a32/Re*grad_u_n_gamma - a31/Re*grad_u_n + p_n_times_identity, q); + } + phi.integrate_scatter(true, true, dst); + } + } + } + + + // The followinf function assembles rhs face term for the velocity + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_rhs_face_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const std::vector<Vec>& src, + const std::pair<unsigned int, unsigned int>& face_range) const { + if(TR_BDF2_stage == 1) { + /*--- We first start by declaring the suitable instances to read already available quantities. In this case + we are at the face between two elements and this is the reason of 'FEFaceEvaluation'. It contains an extra + input argument, the second one, that specifies if it is from 'interior' or not---*/ + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi_p(data, true, 0), + phi_m(data, false, 0), + phi_old_p(data, true, 0), + phi_old_m(data, false, 0), + phi_old_extr_p(data, true, 0), + phi_old_extr_m(data, false, 0); + FEFaceEvaluation<dim, fe_degree_p, n_q_points_1d_v, 1, Number> phi_old_press_p(data, true, 1), + phi_old_press_m(data, false, 1); + + /*--- We loop over the faces in the range ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi_old_p.reinit(face); + phi_old_p.gather_evaluate(src[0], true, true); + phi_old_m.reinit(face); + phi_old_m.gather_evaluate(src[0], true, true); + phi_old_extr_p.reinit(face); + phi_old_extr_p.gather_evaluate(src[1], true, false); + phi_old_extr_m.reinit(face); + phi_old_extr_m.gather_evaluate(src[1], true, false); + phi_old_press_p.reinit(face); + phi_old_press_p.gather_evaluate(src[2], true, false); + phi_old_press_m.reinit(face); + phi_old_press_m.gather_evaluate(src[2], true, false); + phi_p.reinit(face); + phi_m.reinit(face); + + /*--- Now we loop over all the quadrature points to compute the integrals ---*/ + for(unsigned int q = 0; q < phi_p.n_q_points; ++q) { + const auto& n_plus = phi_p.get_normal_vector(q); /*--- The normal vector is the same + for both phi_p and phi_m. If the face is interior, + it correspond to the outer normal ---*/ + + const auto& avg_grad_u_old = 0.5*(phi_old_p.get_gradient(q) + phi_old_m.get_gradient(q)); + const auto& avg_tensor_product_u_n = 0.5*(outer_product(phi_old_p.get_value(q), phi_old_extr_p.get_value(q)) + + outer_product(phi_old_m.get_value(q), phi_old_extr_m.get_value(q))); + const auto& avg_p_old = 0.5*(phi_old_press_p.get_value(q) + phi_old_press_m.get_value(q)); + + phi_p.submit_value((a21/Re*avg_grad_u_old - a21*avg_tensor_product_u_n)*n_plus - avg_p_old*n_plus, q); + phi_m.submit_value(-(a21/Re*avg_grad_u_old - a21*avg_tensor_product_u_n)*n_plus + avg_p_old*n_plus, q); + } + phi_p.integrate_scatter(true, false, dst); + phi_m.integrate_scatter(true, false, dst); + } + } + else { + /*--- We first start by declaring the suitable instances to read already available quantities. ---*/ + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi_p(data, true, 0), + phi_m(data, false, 0), + phi_old_p(data, true, 0), + phi_old_m(data, false, 0), + phi_int_p(data, true, 0), + phi_int_m(data, false, 0); + FEFaceEvaluation<dim, fe_degree_p, n_q_points_1d_v, 1, Number> phi_old_press_p(data, true, 1), + phi_old_press_m(data, false, 1); + + /*--- We loop over the faces in the range ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++ face) { + phi_old_p.reinit(face); + phi_old_p.gather_evaluate(src[0], true, true); + phi_old_m.reinit(face); + phi_old_m.gather_evaluate(src[0], true, true); + phi_int_p.reinit(face); + phi_int_p.gather_evaluate(src[1], true, true); + phi_int_m.reinit(face); + phi_int_m.gather_evaluate(src[1], true, true); + phi_old_press_p.reinit(face); + phi_old_press_p.gather_evaluate(src[2], true, false); + phi_old_press_m.reinit(face); + phi_old_press_m.gather_evaluate(src[2], true, false); + phi_p.reinit(face); + phi_m.reinit(face); + + /*--- Now we loop over all the quadrature points to compute the integrals ---*/ + for(unsigned int q = 0; q < phi_p.n_q_points; ++q) { + const auto& n_plus = phi_p.get_normal_vector(q); + + const auto& avg_grad_u_old = 0.5*(phi_old_p.get_gradient(q) + phi_old_m.get_gradient(q)); + const auto& avg_grad_u_int = 0.5*(phi_int_p.get_gradient(q) + phi_int_m.get_gradient(q)); + const auto& avg_tensor_product_u_n = 0.5*(outer_product(phi_old_p.get_value(q), phi_old_p.get_value(q)) + + outer_product(phi_old_m.get_value(q), phi_old_m.get_value(q))); + const auto& avg_tensor_product_u_n_gamma = 0.5*(outer_product(phi_int_p.get_value(q), phi_int_p.get_value(q)) + + outer_product(phi_int_m.get_value(q), phi_int_m.get_value(q))); + const auto& avg_p_old = 0.5*(phi_old_press_p.get_value(q) + phi_old_press_m.get_value(q)); + + phi_p.submit_value((a31/Re*avg_grad_u_old + a32/Re*avg_grad_u_int - + a31*avg_tensor_product_u_n - a32*avg_tensor_product_u_n_gamma)*n_plus - avg_p_old*n_plus, q); + phi_m.submit_value(-(a31/Re*avg_grad_u_old + a32/Re*avg_grad_u_int - + a31*avg_tensor_product_u_n - a32*avg_tensor_product_u_n_gamma)*n_plus + avg_p_old*n_plus, q); + } + phi_p.integrate_scatter(true, false, dst); + phi_m.integrate_scatter(true, false, dst); + } + } + } + + + // The followinf function assembles rhs boundary term for the velocity + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_rhs_boundary_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const std::vector<Vec>& src, + const std::pair<unsigned int, unsigned int>& face_range) const { + if(TR_BDF2_stage == 1) { + /*--- We first start by declaring the suitable instances to read already available quantities. Clearly on the boundary + the second argument has to be true. ---*/ + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, true, 0), + phi_old(data, true, 0), + phi_old_extr(data, true, 0); + FEFaceEvaluation<dim, fe_degree_p, n_q_points_1d_v, 1, Number> phi_old_press(data, true, 1); + + /*--- We loop over the faces in the range ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi_old.reinit(face); + phi_old.gather_evaluate(src[0], true, true); + phi_old_extr.reinit(face); + phi_old_extr.gather_evaluate(src[1], true, false); + phi_old_press.reinit(face); + phi_old_press.gather_evaluate(src[2], true, false); + phi.reinit(face); + + const auto boundary_id = data.get_boundary_id(face); /*--- Get the id in order to impose the proper boundary condition ---*/ + const auto coef_jump = (boundary_id == 1) ? 0.0 : C_u*std::abs((phi.get_normal_vector(0) * phi.inverse_jacobian(0))[dim - 1]); + const double aux_coeff = (boundary_id == 1) ? 0.0 : 1.0; + + /*--- Now we loop over all the quadrature points to compute the integrals ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& n_plus = phi.get_normal_vector(q); + + const auto& grad_u_old = phi_old.get_gradient(q); + const auto& tensor_product_u_n = outer_product(phi_old.get_value(q), phi_old_extr.get_value(q)); + const auto& p_old = phi_old_press.get_value(q); + const auto& point_vectorized = phi.quadrature_point(q); + auto u_int_m = Tensor<1, dim, VectorizedArray<Number>>(); + if(boundary_id == 0) { + for(unsigned int v = 0; v < VectorizedArray<Number>::size(); ++v) { + Point<dim> point; /*--- The point returned by the 'quadrature_point' function is not an instance of Point + and so it is not ready to be directly used. We need to pay attention to the + vectorization ---*/ + for(unsigned int d = 0; d < dim; ++d) + point[d] = point_vectorized[d][v]; + for(unsigned int d = 0; d < dim; ++d) + u_int_m[d][v] = vel_boundary_inflow.value(point, d); + } + } + const auto tensor_product_u_int_m = outer_product(u_int_m, phi_old_extr.get_value(q)); + const auto lambda = (boundary_id == 1) ? 0.0 : std::abs(scalar_product(phi_old_extr.get_value(q), n_plus)); + + phi.submit_value((a21/Re*grad_u_old - a21*tensor_product_u_n)*n_plus - p_old*n_plus + + a22/Re*2.0*coef_jump*u_int_m - + aux_coeff*a22*tensor_product_u_int_m*n_plus + a22*lambda*u_int_m, q); + phi.submit_normal_derivative(-aux_coeff*theta_v*a22/Re*u_int_m, q); /*--- This is equivalent to multiply to the gradient + with outer product and use 'submit_gradient' ---*/ + } + phi.integrate_scatter(true, true, dst); + } + } + else { + /*--- We first start by declaring the suitable instances to read already available quantities. ---*/ + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, true, 0), + phi_old(data, true, 0), + phi_int(data, true, 0), + phi_int_extr(data, true, 0); + FEFaceEvaluation<dim, fe_degree_p, n_q_points_1d_v, 1, Number> phi_old_press(data, true, 1); + + /*--- We loop over the faces in the range ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++ face) { + phi_old.reinit(face); + phi_old.gather_evaluate(src[0], true, true); + phi_int.reinit(face); + phi_int.gather_evaluate(src[1], true, true); + phi_old_press.reinit(face); + phi_old_press.gather_evaluate(src[2], true, false); + phi_int_extr.reinit(face); + phi_int_extr.gather_evaluate(src[3], true, false); + phi.reinit(face); + + const auto boundary_id = data.get_boundary_id(face); + const auto coef_jump = (boundary_id == 1) ? 0.0 : C_u*std::abs((phi.get_normal_vector(0) * phi.inverse_jacobian(0))[dim - 1]); + const double aux_coeff = (boundary_id == 1) ? 0.0 : 1.0; + + /*--- Now we loop over all the quadrature points to compute the integrals ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& n_plus = phi.get_normal_vector(q); + + const auto& grad_u_old = phi_old.get_gradient(q); + const auto& grad_u_int = phi_int.get_gradient(q); + const auto& tensor_product_u_n = outer_product(phi_old.get_value(q), phi_old.get_value(q)); + const auto& tensor_product_u_n_gamma = outer_product(phi_int.get_value(q), phi_int.get_value(q)); + const auto& p_old = phi_old_press.get_value(q); + const auto& point_vectorized = phi.quadrature_point(q); + auto u_m = Tensor<1, dim, VectorizedArray<Number>>(); + if(boundary_id == 0) { + for(unsigned int v = 0; v < VectorizedArray<Number>::size(); ++v) { + Point<dim> point; + for(unsigned int d = 0; d < dim; ++d) + point[d] = point_vectorized[d][v]; + for(unsigned int d = 0; d < dim; ++d) + u_m[d][v] = vel_boundary_inflow.value(point, d); + } + } + const auto tensor_product_u_m = outer_product(u_m, phi_int_extr.get_value(q)); + const auto lambda = (boundary_id == 1) ? 0.0 : std::abs(scalar_product(phi_int_extr.get_value(q), n_plus)); + + phi.submit_value((a31/Re*grad_u_old + a32/Re*grad_u_int - + a31*tensor_product_u_n - a32*tensor_product_u_n_gamma)*n_plus - p_old*n_plus + + a33/Re*2.0*coef_jump*u_m - + aux_coeff*a33*tensor_product_u_m*n_plus + a33*lambda*u_m, q); + phi.submit_normal_derivative(-aux_coeff*theta_v*a33/Re*u_m, q); + } + phi.integrate_scatter(true, true, dst); + } + } + } + + + // Put together all the previous steps for velocity. This is done automatically by the loop function of 'MatrixFree' class + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + vmult_rhs_velocity(Vec& dst, const std::vector<Vec>& src) const { + for(unsigned int d = 0; d < src.size(); ++d) + src[d].update_ghost_values(); + + this->data->loop(&NavierStokesProjectionOperator::assemble_rhs_cell_term_velocity, + &NavierStokesProjectionOperator::assemble_rhs_face_term_velocity, + &NavierStokesProjectionOperator::assemble_rhs_boundary_term_velocity, + this, dst, src, true, + MatrixFree<dim, Number>::DataAccessOnFaces::unspecified, + MatrixFree<dim, Number>::DataAccessOnFaces::unspecified); + } + + + // Now we focus on computing the rhs for the projection step for the pressure with the same ratio. + // The following function assembles rhs cell term for the pressure + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_rhs_cell_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const std::vector<Vec>& src, + const std::pair<unsigned int, unsigned int>& cell_range) const { + /*--- We first start by declaring the suitable instances to read already available quantities. + The third parameter specifies that we want to use the second quadrature formula stored. ---*/ + FEEvaluation<dim, fe_degree_p, n_q_points_1d_p, 1, Number> phi(data, 1, 1), + phi_old(data, 1, 1); + FEEvaluation<dim, fe_degree_v, n_q_points_1d_p, dim, Number> phi_proj(data, 0, 1); + + const double coeff = (TR_BDF2_stage == 1) ? 1.0e6*gamma*dt*gamma*dt : 1.0e6*(1.0 - gamma)*dt*(1.0 - gamma)*dt; + + const double coeff_2 = (TR_BDF2_stage == 1) ? gamma*dt : (1.0 - gamma)*dt; + + /*--- We loop over cells in the range ---*/ + for(unsigned int cell = cell_range.first; cell < cell_range.second; ++cell) { + phi_proj.reinit(cell); + phi_proj.gather_evaluate(src[0], true, false); + phi_old.reinit(cell); + phi_old.gather_evaluate(src[1], true, false); + phi.reinit(cell); + + /*--- Now we loop over all the quadrature points to compute the integrals ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& u_star_star = phi_proj.get_value(q); + const auto& p_old = phi_old.get_value(q); + + phi.submit_value(1.0/coeff*p_old, q); + phi.submit_gradient(1.0/coeff_2*u_star_star, q); + } + phi.integrate_scatter(true, true, dst); + } + } + + + // The following function assembles rhs face term for the pressure + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_rhs_face_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const std::vector<Vec>& src, + const std::pair<unsigned int, unsigned int>& face_range) const { + /*--- We first start by declaring the suitable instances to read already available quantities. ---*/ + FEFaceEvaluation<dim, fe_degree_p, n_q_points_1d_p, 1, Number> phi_p(data, true, 1, 1), + phi_m(data, false, 1, 1); + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_p, dim, Number> phi_proj_p(data, true, 0, 1), + phi_proj_m(data, false, 0, 1); + + const double coeff = (TR_BDF2_stage == 1) ? 1.0/(gamma*dt) : 1.0/((1.0 - gamma)*dt); + + /*--- We loop over faces in the range ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi_proj_p.reinit(face); + phi_proj_p.gather_evaluate(src[0], true, false); + phi_proj_m.reinit(face); + phi_proj_m.gather_evaluate(src[0], true, false); + phi_p.reinit(face); + phi_m.reinit(face); + + /*--- Now we loop over all the quadrature points to compute the integrals ---*/ + for(unsigned int q = 0; q < phi_p.n_q_points; ++q) { + const auto& n_plus = phi_p.get_normal_vector(q); + const auto& avg_u_star_star = 0.5*(phi_proj_p.get_value(q) + phi_proj_m.get_value(q)); + + phi_p.submit_value(-coeff*scalar_product(avg_u_star_star, n_plus), q); + phi_m.submit_value(coeff*scalar_product(avg_u_star_star, n_plus), q); + } + phi_p.integrate_scatter(true, false, dst); + phi_m.integrate_scatter(true, false, dst); + } + } + + + // The following function assembles rhs boundary term for the pressure + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_rhs_boundary_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const std::vector<Vec>& src, + const std::pair<unsigned int, unsigned int>& face_range) const { + /*--- We first start by declaring the suitable instances to read already available quantities. ---*/ + FEFaceEvaluation<dim, fe_degree_p, n_q_points_1d_p, 1, Number> phi(data, true, 1, 1); + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_p, dim, Number> phi_proj(data, true, 0, 1); + + const double coeff = (TR_BDF2_stage == 1) ? 1.0/(gamma*dt) : 1.0/((1.0 - gamma)*dt); + + /*--- We loop over faces in the range ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi_proj.reinit(face); + phi_proj.gather_evaluate(src[0], true, false); + phi.reinit(face); + + /*--- Now we loop over all the quadrature points to compute the integrals ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& n_plus = phi.get_normal_vector(q); + + phi.submit_value(-coeff*scalar_product(phi_proj.get_value(q), n_plus), q); + } + phi.integrate_scatter(true, false, dst); + } + } + + + // Put together all the previous steps for pressure + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + vmult_rhs_pressure(Vec& dst, const std::vector<Vec>& src) const { + for(unsigned int d = 0; d < src.size(); ++d) + src[d].update_ghost_values(); + + this->data->loop(&NavierStokesProjectionOperator::assemble_rhs_cell_term_pressure, + &NavierStokesProjectionOperator::assemble_rhs_face_term_pressure, + &NavierStokesProjectionOperator::assemble_rhs_boundary_term_pressure, + this, dst, src, true, + MatrixFree<dim, Number>::DataAccessOnFaces::unspecified, + MatrixFree<dim, Number>::DataAccessOnFaces::unspecified); + } + + + // Now we need to build the 'matrices', i.e. the bilinear forms. We start by + // assembling the cell term for the velocity + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_cell_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& cell_range) const { + if(TR_BDF2_stage == 1) { + /*--- We first start by declaring the suitable instances to read already available quantities. Moreover 'phi' in + this case serves for a bilinear form and so it will not used only to submit but also to read the src ---*/ + FEEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, 0), + phi_old_extr(data, 0); + + /*--- We loop over all cells in the range ---*/ + for(unsigned int cell = cell_range.first; cell < cell_range.second; ++cell) { + phi.reinit(cell); + phi.gather_evaluate(src, true, true); + phi_old_extr.reinit(cell); + phi_old_extr.gather_evaluate(u_extr, true, false); + + /*--- Now we loop over all quadrature points ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& u_int = phi.get_value(q); + const auto& grad_u_int = phi.get_gradient(q); + const auto& u_n_gamma_ov_2 = phi_old_extr.get_value(q); + const auto& tensor_product_u_int = outer_product(u_int, u_n_gamma_ov_2); + + phi.submit_value(1.0/(gamma*dt)*u_int, q); + phi.submit_gradient(-a22*tensor_product_u_int + a22/Re*grad_u_int, q); + } + phi.integrate_scatter(true, true, dst); + } + } + else { + /*--- We first start by declaring the suitable instances to read already available quantities. ---*/ + FEEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, 0), + phi_int_extr(data, 0); + + /*--- We loop over all cells in the range ---*/ + for(unsigned int cell = cell_range.first; cell < cell_range.second; ++cell) { + phi.reinit(cell); + phi.gather_evaluate(src, true, true); + phi_int_extr.reinit(cell); + phi_int_extr.gather_evaluate(u_extr, true, false); + + /*--- Now we loop over all quadrature points ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& u_curr = phi.get_value(q); + const auto& grad_u_curr = phi.get_gradient(q); + const auto& u_n1_int = phi_int_extr.get_value(q); + const auto& tensor_product_u_curr = outer_product(u_curr, u_n1_int); + + phi.submit_value(1.0/((1.0 - gamma)*dt)*u_curr, q); + phi.submit_gradient(-a33*tensor_product_u_curr + a33/Re*grad_u_curr, q); + } + phi.integrate_scatter(true, true, dst); + } + } + } + + + // The following function assembles face term for the velocity + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_face_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& face_range) const { + if(TR_BDF2_stage == 1) { + /*--- We first start by declaring the suitable instances to read already available quantities. ---*/ + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi_p(data, true, 0), + phi_m(data, false, 0), + phi_old_extr_p(data, true, 0), + phi_old_extr_m(data, false, 0); + + /*--- We loop over all faces in the range ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi_p.reinit(face); + phi_p.gather_evaluate(src, true, true); + phi_m.reinit(face); + phi_m.gather_evaluate(src, true, true); + phi_old_extr_p.reinit(face); + phi_old_extr_p.gather_evaluate(u_extr, true, false); + phi_old_extr_m.reinit(face); + phi_old_extr_m.gather_evaluate(u_extr, true, false); + + const auto coef_jump = C_u*0.5*(std::abs((phi_p.get_normal_vector(0)*phi_p.inverse_jacobian(0))[dim - 1]) + + std::abs((phi_m.get_normal_vector(0)*phi_m.inverse_jacobian(0))[dim - 1])); + + /*--- Now we loop over all quadrature points ---*/ + for(unsigned int q = 0; q < phi_p.n_q_points; ++q) { + const auto& n_plus = phi_p.get_normal_vector(q); + + const auto& avg_grad_u_int = 0.5*(phi_p.get_gradient(q) + phi_m.get_gradient(q)); + const auto& jump_u_int = phi_p.get_value(q) - phi_m.get_value(q); + const auto& avg_tensor_product_u_int = 0.5*(outer_product(phi_p.get_value(q), phi_old_extr_p.get_value(q)) + + outer_product(phi_m.get_value(q), phi_old_extr_m.get_value(q))); + const auto lambda = std::max(std::abs(scalar_product(phi_old_extr_p.get_value(q), n_plus)), + std::abs(scalar_product(phi_old_extr_m.get_value(q), n_plus))); + + phi_p.submit_value(a22/Re*(-avg_grad_u_int*n_plus + coef_jump*jump_u_int) + + a22*avg_tensor_product_u_int*n_plus + 0.5*a22*lambda*jump_u_int, q); + phi_m.submit_value(-a22/Re*(-avg_grad_u_int*n_plus + coef_jump*jump_u_int) - + a22*avg_tensor_product_u_int*n_plus - 0.5*a22*lambda*jump_u_int, q); + phi_p.submit_normal_derivative(-theta_v*a22/Re*0.5*jump_u_int, q); + phi_m.submit_normal_derivative(-theta_v*a22/Re*0.5*jump_u_int, q); + } + phi_p.integrate_scatter(true, true, dst); + phi_m.integrate_scatter(true, true, dst); + } + } + else { + /*--- We first start by declaring the suitable instances to read already available quantities. ---*/ + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi_p(data, true, 0), + phi_m(data, false, 0), + phi_extr_p(data, true, 0), + phi_extr_m(data, false, 0); + + /*--- We loop over all faces in the range ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi_p.reinit(face); + phi_p.gather_evaluate(src, true, true); + phi_m.reinit(face); + phi_m.gather_evaluate(src, true, true); + phi_extr_p.reinit(face); + phi_extr_p.gather_evaluate(u_extr, true, false); + phi_extr_m.reinit(face); + phi_extr_m.gather_evaluate(u_extr, true, false); + + const auto coef_jump = C_u*0.5*(std::abs((phi_p.get_normal_vector(0)*phi_p.inverse_jacobian(0))[dim - 1]) + + std::abs((phi_m.get_normal_vector(0)*phi_m.inverse_jacobian(0))[dim - 1])); + + /*--- Now we loop over all quadrature points ---*/ + for(unsigned int q = 0; q < phi_p.n_q_points; ++q) { + const auto& n_plus = phi_p.get_normal_vector(q); + + const auto& avg_grad_u = 0.5*(phi_p.get_gradient(q) + phi_m.get_gradient(q)); + const auto& jump_u = phi_p.get_value(q) - phi_m.get_value(q); + const auto& avg_tensor_product_u = 0.5*(outer_product(phi_p.get_value(q), phi_extr_p.get_value(q)) + + outer_product(phi_m.get_value(q), phi_extr_m.get_value(q))); + const auto lambda = std::max(std::abs(scalar_product(phi_extr_p.get_value(q), n_plus)), + std::abs(scalar_product(phi_extr_m.get_value(q), n_plus))); + + phi_p.submit_value(a33/Re*(-avg_grad_u*n_plus + coef_jump*jump_u) + + a33*avg_tensor_product_u*n_plus + 0.5*a33*lambda*jump_u, q); + phi_m.submit_value(-a33/Re*(-avg_grad_u*n_plus + coef_jump*jump_u) - + a33*avg_tensor_product_u*n_plus - 0.5*a33*lambda*jump_u, q); + phi_p.submit_normal_derivative(-theta_v*a33/Re*0.5*jump_u, q); + phi_m.submit_normal_derivative(-theta_v*a33/Re*0.5*jump_u, q); + } + phi_p.integrate_scatter(true, true, dst); + phi_m.integrate_scatter(true, true, dst); + } + } + } + + + // The following function assembles boundary term for the velocity + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_boundary_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& face_range) const { + if(TR_BDF2_stage == 1) { + /*--- We first start by declaring the suitable instances to read already available quantities. ---*/ + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, true, 0), + phi_old_extr(data, true, 0); + + /*--- We loop over all faces in the range ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi.reinit(face); + phi.gather_evaluate(src, true, true); + phi_old_extr.reinit(face); + phi_old_extr.gather_evaluate(u_extr, true, false); + + const auto boundary_id = data.get_boundary_id(face); + const auto coef_jump = C_u*std::abs((phi.get_normal_vector(0) * phi.inverse_jacobian(0))[dim - 1]); + + /*--- The application of the mirror principle is not so trivial because we have a Dirichlet condition + on a single component for the outflow; so we distinguish the two cases ---*/ + if(boundary_id != 1) { + const double coef_trasp = 0.0; + + /*--- Now we loop over all quadrature points ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& n_plus = phi.get_normal_vector(q); + const auto& grad_u_int = phi.get_gradient(q); + const auto& u_int = phi.get_value(q); + const auto& tensor_product_u_int = outer_product(phi.get_value(q), phi_old_extr.get_value(q)); + const auto& lambda = std::abs(scalar_product(phi_old_extr.get_value(q), n_plus)); + + phi.submit_value(a22/Re*(-grad_u_int*n_plus + 2.0*coef_jump*u_int) + + a22*coef_trasp*tensor_product_u_int*n_plus + a22*lambda*u_int, q); + phi.submit_normal_derivative(-theta_v*a22/Re*u_int, q); + } + phi.integrate_scatter(true, true, dst); + } + else { + /*--- Now we loop over all quadrature points ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& n_plus = phi.get_normal_vector(q); + const auto& grad_u_int = phi.get_gradient(q); + const auto& u_int = phi.get_value(q); + const auto& lambda = std::abs(scalar_product(phi_old_extr.get_value(q), n_plus)); + + const auto& point_vectorized = phi.quadrature_point(q); + auto u_int_m = u_int; + auto grad_u_int_m = grad_u_int; + for(unsigned int v = 0; v < VectorizedArray<Number>::size(); ++v) { + Point<dim> point; + for(unsigned int d = 0; d < dim; ++d) + point[d] = point_vectorized[d][v]; + + u_int_m[1][v] = -u_int_m[1][v]; + + grad_u_int_m[0][0][v] = -grad_u_int_m[0][0][v]; + grad_u_int_m[0][1][v] = -grad_u_int_m[0][1][v]; + } + + phi.submit_value(a22/Re*(-(0.5*(grad_u_int + grad_u_int_m))*n_plus + coef_jump*(u_int - u_int_m)) + + a22*outer_product(0.5*(u_int + u_int_m), phi_old_extr.get_value(q))*n_plus + + a22*0.5*lambda*(u_int - u_int_m), q); + phi.submit_normal_derivative(-theta_v*a22/Re*(u_int - u_int_m), q); + } + phi.integrate_scatter(true, true, dst); + } + } + } + else { + /*--- We first start by declaring the suitable instances to read already available quantities. ---*/ + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, true, 0), + phi_extr(data, true, 0); + + /*--- We loop over all faces in the range ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi.reinit(face); + phi.gather_evaluate(src, true, true); + phi_extr.reinit(face); + phi_extr.gather_evaluate(u_extr, true, false); + + const auto boundary_id = data.get_boundary_id(face); + const auto coef_jump = C_u*std::abs((phi.get_normal_vector(0) * phi.inverse_jacobian(0))[dim - 1]); + + if(boundary_id != 1) { + const double coef_trasp = 0.0; + + /*--- Now we loop over all quadrature points ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& n_plus = phi.get_normal_vector(q); + const auto& grad_u = phi.get_gradient(q); + const auto& u = phi.get_value(q); + const auto& tensor_product_u = outer_product(phi.get_value(q), phi_extr.get_value(q)); + const auto& lambda = std::abs(scalar_product(phi_extr.get_value(q), n_plus)); + + phi.submit_value(a33/Re*(-grad_u*n_plus + 2.0*coef_jump*u) + + a33*coef_trasp*tensor_product_u*n_plus + a33*lambda*u, q); + phi.submit_normal_derivative(-theta_v*a33/Re*u, q); + } + phi.integrate_scatter(true, true, dst); + } + else { + /*--- Now we loop over all quadrature points ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& n_plus = phi.get_normal_vector(q); + const auto& grad_u = phi.get_gradient(q); + const auto& u = phi.get_value(q); + const auto& lambda = std::abs(scalar_product(phi_extr.get_value(q), n_plus)); + + const auto& point_vectorized = phi.quadrature_point(q); + auto u_m = u; + auto grad_u_m = grad_u; + for(unsigned int v = 0; v < VectorizedArray<Number>::size(); ++v) { + Point<dim> point; + for(unsigned int d = 0; d < dim; ++d) + point[d] = point_vectorized[d][v]; + + u_m[1][v] = -u_m[1][v]; + + grad_u_m[0][0][v] = -grad_u_m[0][0][v]; + grad_u_m[0][1][v] = -grad_u_m[0][1][v]; + } + + phi.submit_value(a33/Re*(-(0.5*(grad_u + grad_u_m))*n_plus + coef_jump*(u - u_m)) + + a33*outer_product(0.5*(u + u_m), phi_extr.get_value(q))*n_plus + a33*0.5*lambda*(u - u_m), q); + phi.submit_normal_derivative(-theta_v*a33/Re*(u - u_m), q); + } + phi.integrate_scatter(true, true, dst); + } + } + } + } + + + // Next, we focus on 'matrices' to compute the pressure. We first assemble cell term for the pressure + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_cell_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& cell_range) const { + /*--- We first start by declaring the suitable instances to read already available quantities. ---*/ + FEEvaluation<dim, fe_degree_p, n_q_points_1d_p, 1, Number> phi(data, 1, 1); + + const double coeff = (TR_BDF2_stage == 1) ? 1.0e6*gamma*dt*gamma*dt : 1.0e6*(1.0 - gamma)*dt*(1.0 - gamma)*dt; + + /*--- Loop over all cells in the range ---*/ + for(unsigned int cell = cell_range.first; cell < cell_range.second; ++cell) { + phi.reinit(cell); + phi.gather_evaluate(src, true, true); + + /*--- Now we loop over all quadrature points ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + phi.submit_gradient(phi.get_gradient(q), q); + phi.submit_value(1.0/coeff*phi.get_value(q), q); + } + + phi.integrate_scatter(true, true, dst); + } + } + + + // The following function assembles face term for the pressure + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_face_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& face_range) const { + /*--- We first start by declaring the suitable instances to read already available quantities. ---*/ + FEFaceEvaluation<dim, fe_degree_p, n_q_points_1d_p, 1, Number> phi_p(data, true, 1, 1), + phi_m(data, false, 1, 1); + + /*--- Loop over all faces in the range ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi_p.reinit(face); + phi_p.gather_evaluate(src, true, true); + phi_m.reinit(face); + phi_m.gather_evaluate(src, true, true); + + const auto coef_jump = C_p*0.5*(std::abs((phi_p.get_normal_vector(0)*phi_p.inverse_jacobian(0))[dim - 1]) + + std::abs((phi_m.get_normal_vector(0)*phi_m.inverse_jacobian(0))[dim - 1])); + + /*--- Loop over quadrature points ---*/ + for(unsigned int q = 0; q < phi_p.n_q_points; ++q) { + const auto& n_plus = phi_p.get_normal_vector(q); + + const auto& avg_grad_pres = 0.5*(phi_p.get_gradient(q) + phi_m.get_gradient(q)); + const auto& jump_pres = phi_p.get_value(q) - phi_m.get_value(q); + + phi_p.submit_value(-scalar_product(avg_grad_pres, n_plus) + coef_jump*jump_pres, q); + phi_m.submit_value(scalar_product(avg_grad_pres, n_plus) - coef_jump*jump_pres, q); + phi_p.submit_gradient(-theta_p*0.5*jump_pres*n_plus, q); + phi_m.submit_gradient(-theta_p*0.5*jump_pres*n_plus, q); + } + phi_p.integrate_scatter(true, true, dst); + phi_m.integrate_scatter(true, true, dst); + } + } + + + // The following function assembles boundary term for the pressure + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_boundary_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& face_range) const { + FEFaceEvaluation<dim, fe_degree_p, n_q_points_1d_p, 1, Number> phi(data, true, 1, 1); + + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi.reinit(face); + phi.gather_evaluate(src, true, true); + + const auto coef_jump = C_p*std::abs((phi.get_normal_vector(0)*phi.inverse_jacobian(0))[dim - 1]); + + const auto boundary_id = data.get_boundary_id(face); + + if(boundary_id == 1) { + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& n_plus = phi.get_normal_vector(q); + + const auto& grad_pres = phi.get_gradient(q); + const auto& pres = phi.get_value(q); + + phi.submit_value(-scalar_product(grad_pres, n_plus) + coef_jump*pres , q); + phi.submit_normal_derivative(-theta_p*pres, q); + } + phi.integrate_scatter(true, true, dst); + } + } + } + + + // Before coding the 'apply_add' function, which is the one that will perform the loop, we focus on + // the linear system that arises to project the gradient of the pressure into the velocity space. + // The following function assembles rhs cell term for the projection of gradient of pressure. Since no + // integration by parts is performed, only a cell term contribution is present. + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_rhs_cell_term_projection_grad_p(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& cell_range) const { + /*--- We first start by declaring the suitable instances to read already available quantities. ---*/ + FEEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, 0); + FEEvaluation<dim, fe_degree_p, n_q_points_1d_v, 1, Number> phi_pres(data, 1); + + /*--- Loop over all cells in the range ---*/ + for(unsigned int cell = cell_range.first; cell < cell_range.second; ++cell) { + phi_pres.reinit(cell); + phi_pres.gather_evaluate(src, false, true); + phi.reinit(cell); + + /*--- Loop over quadrature points ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) + phi.submit_value(phi_pres.get_gradient(q), q); + + phi.integrate_scatter(true, false, dst); + } + } + + + // Put together all the previous steps for porjection of pressure gradient. Here we loop only over cells + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + vmult_grad_p_projection(Vec& dst, const Vec& src) const { + this->data->cell_loop(&NavierStokesProjectionOperator::assemble_rhs_cell_term_projection_grad_p, + this, dst, src, true); + } + + + // Assemble now cell term for the projection of gradient of pressure. This is nothing but a mass matrix + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_cell_term_projection_grad_p(const MatrixFree<dim, Number>& data, + Vec& dst, + const Vec& src, + const std::pair<unsigned int, unsigned int>& cell_range) const { + FEEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, 0); + + /*--- Loop over all cells in the range ---*/ + for(unsigned int cell = cell_range.first; cell < cell_range.second; ++cell) { + phi.reinit(cell); + phi.gather_evaluate(src, true, false); + + /*--- Loop over quadrature points ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) + phi.submit_value(phi.get_value(q), q); + + phi.integrate_scatter(true, false, dst); + } + } + + + // Put together all previous steps. This is the overriden function that effectively performs the + // matrix-vector multiplication. + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + apply_add(Vec& dst, const Vec& src) const { + if(NS_stage == 1) { + this->data->loop(&NavierStokesProjectionOperator::assemble_cell_term_velocity, + &NavierStokesProjectionOperator::assemble_face_term_velocity, + &NavierStokesProjectionOperator::assemble_boundary_term_velocity, + this, dst, src, false, + MatrixFree<dim, Number>::DataAccessOnFaces::unspecified, + MatrixFree<dim, Number>::DataAccessOnFaces::unspecified); + } + else if(NS_stage == 2) { + this->data->loop(&NavierStokesProjectionOperator::assemble_cell_term_pressure, + &NavierStokesProjectionOperator::assemble_face_term_pressure, + &NavierStokesProjectionOperator::assemble_boundary_term_pressure, + this, dst, src, false, + MatrixFree<dim, Number>::DataAccessOnFaces::unspecified, + MatrixFree<dim, Number>::DataAccessOnFaces::unspecified); + } + else if(NS_stage == 3) { + this->data->cell_loop(&NavierStokesProjectionOperator::assemble_cell_term_projection_grad_p, + this, dst, src, false); /*--- Since we have only a cell term contribution, we use cell_loop ---*/ + } + else + Assert(false, ExcNotImplemented()); + } + + + // Finally, we focus on computing the diagonal for preconditioners and we start by assembling + // the diagonal cell term for the velocity. Since we do not have access to the entries of the matrix, + // in order to compute the element i, we test the matrix against a vector which is equal to 1 in position i and 0 elsewhere. + // This is why 'src' will result as unused. + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_diagonal_cell_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const unsigned int& src, + const std::pair<unsigned int, unsigned int>& cell_range) const { + if(TR_BDF2_stage == 1) { + FEEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, 0), + phi_old_extr(data, 0); + + AlignedVector<Tensor<1, dim, VectorizedArray<Number>>> diagonal(phi.dofs_per_component); + /*--- Build a vector of ones to be tested (here we will see the velocity as a whole vector, since + dof_handler_velocity is vectorial and so the dof values are vectors). ---*/ + Tensor<1, dim, VectorizedArray<Number>> tmp; + for(unsigned int d = 0; d < dim; ++d) + tmp[d] = make_vectorized_array<Number>(1.0); + + /*--- Loop over cells in the range ---*/ + for(unsigned int cell = cell_range.first; cell < cell_range.second; ++cell) { + phi_old_extr.reinit(cell); + phi_old_extr.gather_evaluate(u_extr, true, false); + phi.reinit(cell); + + /*--- Loop over dofs ---*/ + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) { + for(unsigned int j = 0; j < phi.dofs_per_component; ++j) + phi.submit_dof_value(Tensor<1, dim, VectorizedArray<Number>>(), j); /*--- Set all dofs to zero ---*/ + phi.submit_dof_value(tmp, i); /*--- Set dof i equal to one ---*/ + phi.evaluate(true, true); + + /*--- Loop over quadrature points ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& u_int = phi.get_value(q); + const auto& grad_u_int = phi.get_gradient(q); + const auto& u_n_gamma_ov_2 = phi_old_extr.get_value(q); + const auto& tensor_product_u_int = outer_product(u_int, u_n_gamma_ov_2); + + phi.submit_value(1.0/(gamma*dt)*u_int, q); + phi.submit_gradient(-a22*tensor_product_u_int + a22/Re*grad_u_int, q); + } + phi.integrate(true, true); + diagonal[i] = phi.get_dof_value(i); + } + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) + phi.submit_dof_value(diagonal[i], i); + phi.distribute_local_to_global(dst); + } + } + else { + FEEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, 0), + phi_int_extr(data, 0); + + AlignedVector<Tensor<1, dim, VectorizedArray<Number>>> diagonal(phi.dofs_per_component); + Tensor<1, dim, VectorizedArray<Number>> tmp; + for(unsigned int d = 0; d < dim; ++d) + tmp[d] = make_vectorized_array<Number>(1.0); + + /*--- Loop over cells in the range ---*/ + for(unsigned int cell = cell_range.first; cell < cell_range.second; ++cell) { + phi_int_extr.reinit(cell); + phi_int_extr.gather_evaluate(u_extr, true, false); + phi.reinit(cell); + + /*--- Loop over dofs ---*/ + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) { + for(unsigned int j = 0; j < phi.dofs_per_component; ++j) + phi.submit_dof_value(Tensor<1, dim, VectorizedArray<Number>>(), j); + phi.submit_dof_value(tmp, i); + phi.evaluate(true, true); + + /*--- Loop over quadrature points ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& u_curr = phi.get_value(q); + const auto& grad_u_curr = phi.get_gradient(q); + const auto& u_n1_int = phi_int_extr.get_value(q); + const auto& tensor_product_u_curr = outer_product(u_curr, u_n1_int); + + phi.submit_value(1.0/((1.0 - gamma)*dt)*u_curr, q); + phi.submit_gradient(-a33*tensor_product_u_curr + a33/Re*grad_u_curr, q); + } + phi.integrate(true, true); + diagonal[i] = phi.get_dof_value(i); + } + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) + phi.submit_dof_value(diagonal[i], i); + phi.distribute_local_to_global(dst); + } + } + } + + + // The following function assembles diagonal face term for the velocity + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_diagonal_face_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const unsigned int& src, + const std::pair<unsigned int, unsigned int>& face_range) const { + if(TR_BDF2_stage == 1) { + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi_p(data, true, 0), + phi_m(data, false, 0), + phi_old_extr_p(data, true, 0), + phi_old_extr_m(data, false, 0); + + AssertDimension(phi_p.dofs_per_component, phi_m.dofs_per_component); /*--- We just assert for safety that dimension match, + in the sense that we have selected the proper + space ---*/ + AlignedVector<Tensor<1, dim, VectorizedArray<Number>>> diagonal_p(phi_p.dofs_per_component), + diagonal_m(phi_m.dofs_per_component); + Tensor<1, dim, VectorizedArray<Number>> tmp; + for(unsigned int d = 0; d < dim; ++d) + tmp[d] = make_vectorized_array<Number>(1.0); /*--- We build the usal vector of ones that we will use as dof value ---*/ + + /*--- Now we loop over faces ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi_old_extr_p.reinit(face); + phi_old_extr_p.gather_evaluate(u_extr, true, false); + phi_old_extr_m.reinit(face); + phi_old_extr_m.gather_evaluate(u_extr, true, false); + phi_p.reinit(face); + phi_m.reinit(face); + + const auto coef_jump = C_u*0.5*(std::abs((phi_p.get_normal_vector(0)*phi_p.inverse_jacobian(0))[dim - 1]) + + std::abs((phi_m.get_normal_vector(0)*phi_m.inverse_jacobian(0))[dim - 1])); + + /*--- Loop over dofs. We will set all equal to zero apart from the current one ---*/ + for(unsigned int i = 0; i < phi_p.dofs_per_component; ++i) { + for(unsigned int j = 0; j < phi_p.dofs_per_component; ++j) { + phi_p.submit_dof_value(Tensor<1, dim, VectorizedArray<Number>>(), j); + phi_m.submit_dof_value(Tensor<1, dim, VectorizedArray<Number>>(), j); + } + phi_p.submit_dof_value(tmp, i); + phi_p.evaluate(true, true); + phi_m.submit_dof_value(tmp, i); + phi_m.evaluate(true, true); + + /*--- Loop over quadrature points to compute the integral ---*/ + for(unsigned int q = 0; q < phi_p.n_q_points; ++q) { + const auto& n_plus = phi_p.get_normal_vector(q); + const auto& avg_grad_u_int = 0.5*(phi_p.get_gradient(q) + phi_m.get_gradient(q)); + const auto& jump_u_int = phi_p.get_value(q) - phi_m.get_value(q); + const auto& avg_tensor_product_u_int = 0.5*(outer_product(phi_p.get_value(q), phi_old_extr_p.get_value(q)) + + outer_product(phi_m.get_value(q), phi_old_extr_m.get_value(q))); + const auto lambda = std::max(std::abs(scalar_product(phi_old_extr_p.get_value(q), n_plus)), + std::abs(scalar_product(phi_old_extr_m.get_value(q), n_plus))); + + phi_p.submit_value(a22/Re*(-avg_grad_u_int*n_plus + coef_jump*jump_u_int) + + a22*avg_tensor_product_u_int*n_plus + 0.5*a22*lambda*jump_u_int , q); + phi_m.submit_value(-a22/Re*(-avg_grad_u_int*n_plus + coef_jump*jump_u_int) - + a22*avg_tensor_product_u_int*n_plus - 0.5*a22*lambda*jump_u_int, q); + phi_p.submit_normal_derivative(-theta_v*0.5*a22/Re*jump_u_int, q); + phi_m.submit_normal_derivative(-theta_v*0.5*a22/Re*jump_u_int, q); + } + phi_p.integrate(true, true); + diagonal_p[i] = phi_p.get_dof_value(i); + phi_m.integrate(true, true); + diagonal_m[i] = phi_m.get_dof_value(i); + } + for(unsigned int i = 0; i < phi_p.dofs_per_component; ++i) { + phi_p.submit_dof_value(diagonal_p[i], i); + phi_m.submit_dof_value(diagonal_m[i], i); + } + phi_p.distribute_local_to_global(dst); + phi_m.distribute_local_to_global(dst); + } + } + else { + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi_p(data, true, 0), + phi_m(data, false, 0), + phi_extr_p(data, true, 0), + phi_extr_m(data, false, 0); + + AssertDimension(phi_p.dofs_per_component, phi_m.dofs_per_component); + AlignedVector<Tensor<1, dim, VectorizedArray<Number>>> diagonal_p(phi_p.dofs_per_component), + diagonal_m(phi_m.dofs_per_component); + Tensor<1, dim, VectorizedArray<Number>> tmp; + for(unsigned int d = 0; d < dim; ++d) + tmp[d] = make_vectorized_array<Number>(1.0); + + /*--- Now we loop over faces ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi_extr_p.reinit(face); + phi_extr_p.gather_evaluate(u_extr, true, false); + phi_extr_m.reinit(face); + phi_extr_m.gather_evaluate(u_extr, true, false); + phi_p.reinit(face); + phi_m.reinit(face); + + const auto coef_jump = C_u*0.5*(std::abs((phi_p.get_normal_vector(0)*phi_p.inverse_jacobian(0))[dim - 1]) + + std::abs((phi_m.get_normal_vector(0)*phi_m.inverse_jacobian(0))[dim - 1])); + + /*--- Loop over dofs. We will set all equal to zero apart from the current one ---*/ + for(unsigned int i = 0; i < phi_p.dofs_per_component; ++i) { + for(unsigned int j = 0; j < phi_p.dofs_per_component; ++j) { + phi_p.submit_dof_value(Tensor<1, dim, VectorizedArray<Number>>(), j); + phi_m.submit_dof_value(Tensor<1, dim, VectorizedArray<Number>>(), j); + } + phi_p.submit_dof_value(tmp, i); + phi_p.evaluate(true, true); + phi_m.submit_dof_value(tmp, i); + phi_m.evaluate(true, true); + + /*--- Loop over quadrature points to compute the integral ---*/ + for(unsigned int q = 0; q < phi_p.n_q_points; ++q) { + const auto& n_plus = phi_p.get_normal_vector(q); + const auto& avg_grad_u = 0.5*(phi_p.get_gradient(q) + phi_m.get_gradient(q)); + const auto& jump_u = phi_p.get_value(q) - phi_m.get_value(q); + const auto& avg_tensor_product_u = 0.5*(outer_product(phi_p.get_value(q), phi_extr_p.get_value(q)) + + outer_product(phi_m.get_value(q), phi_extr_m.get_value(q))); + const auto lambda = std::max(std::abs(scalar_product(phi_extr_p.get_value(q), n_plus)), + std::abs(scalar_product(phi_extr_m.get_value(q), n_plus))); + + phi_p.submit_value(a33/Re*(-avg_grad_u*n_plus + coef_jump*jump_u) + + a33*avg_tensor_product_u*n_plus + 0.5*a33*lambda*jump_u, q); + phi_m.submit_value(-a33/Re*(-avg_grad_u*n_plus + coef_jump*jump_u) - + a33*avg_tensor_product_u*n_plus - 0.5*a33*lambda*jump_u, q); + phi_p.submit_normal_derivative(-theta_v*0.5*a33/Re*jump_u, q); + phi_m.submit_normal_derivative(-theta_v*0.5*a33/Re*jump_u, q); + } + phi_p.integrate(true, true); + diagonal_p[i] = phi_p.get_dof_value(i); + phi_m.integrate(true, true); + diagonal_m[i] = phi_m.get_dof_value(i); + } + for(unsigned int i = 0; i < phi_p.dofs_per_component; ++i) { + phi_p.submit_dof_value(diagonal_p[i], i); + phi_m.submit_dof_value(diagonal_m[i], i); + } + phi_p.distribute_local_to_global(dst); + phi_m.distribute_local_to_global(dst); + } + } + } + + + // The following function assembles boundary term for the velocity + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_diagonal_boundary_term_velocity(const MatrixFree<dim, Number>& data, + Vec& dst, + const unsigned int& src, + const std::pair<unsigned int, unsigned int>& face_range) const { + if(TR_BDF2_stage == 1) { + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, true, 0), + phi_old_extr(data, true, 0); + + AlignedVector<Tensor<1, dim, VectorizedArray<Number>>> diagonal(phi.dofs_per_component); + Tensor<1, dim, VectorizedArray<Number>> tmp; + for(unsigned int d = 0; d < dim; ++d) + tmp[d] = make_vectorized_array<Number>(1.0); + + /*--- Loop over all faces in the range ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi_old_extr.reinit(face); + phi_old_extr.gather_evaluate(u_extr, true, false); + phi.reinit(face); + + const auto boundary_id = data.get_boundary_id(face); + const auto coef_jump = C_u*std::abs((phi.get_normal_vector(0) * phi.inverse_jacobian(0))[dim - 1]); + + if(boundary_id != 1) { + const double coef_trasp = 0.0; + + /*--- Loop over all dofs ---*/ + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) { + for(unsigned int j = 0; j < phi.dofs_per_component; ++j) + phi.submit_dof_value(Tensor<1, dim, VectorizedArray<Number>>(), j); + phi.submit_dof_value(tmp, i); + phi.evaluate(true, true); + + /*--- Loop over quadrature points to compute the integral ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& n_plus = phi.get_normal_vector(q); + const auto& grad_u_int = phi.get_gradient(q); + const auto& u_int = phi.get_value(q); + const auto& tensor_product_u_int = outer_product(phi.get_value(q), phi_old_extr.get_value(q)); + const auto& lambda = std::abs(scalar_product(phi_old_extr.get_value(q), n_plus)); + + phi.submit_value(a22/Re*(-grad_u_int*n_plus + 2.0*coef_jump*u_int) + + a22*coef_trasp*tensor_product_u_int*n_plus + a22*lambda*u_int, q); + phi.submit_normal_derivative(-theta_v*a22/Re*u_int, q); + } + phi.integrate(true, true); + diagonal[i] = phi.get_dof_value(i); + } + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) + phi.submit_dof_value(diagonal[i], i); + phi.distribute_local_to_global(dst); + } + else { + /*--- Loop over all dofs ---*/ + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) { + for(unsigned int j = 0; j < phi.dofs_per_component; ++j) + phi.submit_dof_value(Tensor<1, dim, VectorizedArray<Number>>(), j); + phi.submit_dof_value(tmp, i); + phi.evaluate(true, true); + + /*--- Loop over quadrature points to compute the integral ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& n_plus = phi.get_normal_vector(q); + const auto& grad_u_int = phi.get_gradient(q); + const auto& u_int = phi.get_value(q); + const auto& lambda = std::abs(scalar_product(phi_old_extr.get_value(q), n_plus)); + + const auto& point_vectorized = phi.quadrature_point(q); + auto u_int_m = u_int; + auto grad_u_int_m = grad_u_int; + for(unsigned int v = 0; v < VectorizedArray<Number>::size(); ++v) { + Point<dim> point; + for(unsigned int d = 0; d < dim; ++d) + point[d] = point_vectorized[d][v]; + + u_int_m[1][v] = -u_int_m[1][v]; + + grad_u_int_m[0][0][v] = -grad_u_int_m[0][0][v]; + grad_u_int_m[0][1][v] = -grad_u_int_m[0][1][v]; + } + + phi.submit_value(a22/Re*(-(0.5*(grad_u_int + grad_u_int_m))*n_plus + coef_jump*(u_int - u_int_m)) + + a22*outer_product(0.5*(u_int + u_int_m), phi_old_extr.get_value(q))*n_plus + + a22*0.5*lambda*(u_int - u_int_m), q); + phi.submit_normal_derivative(-theta_v*a22/Re*(u_int - u_int_m), q); + } + phi.integrate(true, true); + diagonal[i] = phi.get_dof_value(i); + } + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) + phi.submit_dof_value(diagonal[i], i); + phi.distribute_local_to_global(dst); + } + } + } + else { + FEFaceEvaluation<dim, fe_degree_v, n_q_points_1d_v, dim, Number> phi(data, true, 0), + phi_extr(data, true, 0); + + AlignedVector<Tensor<1, dim, VectorizedArray<Number>>> diagonal(phi.dofs_per_component); + Tensor<1, dim, VectorizedArray<Number>> tmp; + for(unsigned int d = 0; d < dim; ++d) + tmp[d] = make_vectorized_array<Number>(1.0); + + /*--- Loop over all faces in the range ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi_extr.reinit(face); + phi_extr.gather_evaluate(u_extr, true, false); + phi.reinit(face); + + const auto boundary_id = data.get_boundary_id(face); + const auto coef_jump = C_u*std::abs((phi.get_normal_vector(0) * phi.inverse_jacobian(0))[dim - 1]); + + if(boundary_id != 1) { + const double coef_trasp = 0.0; + + /*--- Loop over all dofs ---*/ + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) { + for(unsigned int j = 0; j < phi.dofs_per_component; ++j) + phi.submit_dof_value(Tensor<1, dim, VectorizedArray<Number>>(), j); + phi.submit_dof_value(tmp, i); + phi.evaluate(true, true); + + /*--- Loop over quadrature points to compute the integral ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& n_plus = phi.get_normal_vector(q); + const auto& grad_u = phi.get_gradient(q); + const auto& u = phi.get_value(q); + const auto& tensor_product_u = outer_product(phi.get_value(q), phi_extr.get_value(q)); + const auto& lambda = std::abs(scalar_product(phi_extr.get_value(q), n_plus)); + + phi.submit_value(a33/Re*(-grad_u*n_plus + 2.0*coef_jump*u) + + a33*coef_trasp*tensor_product_u*n_plus + a33*lambda*u, q); + phi.submit_normal_derivative(-theta_v*a33/Re*u, q); + } + phi.integrate(true, true); + diagonal[i] = phi.get_dof_value(i); + } + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) + phi.submit_dof_value(diagonal[i], i); + phi.distribute_local_to_global(dst); + } + else { + /*--- Loop over all dofs ---*/ + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) { + for(unsigned int j = 0; j < phi.dofs_per_component; ++j) + phi.submit_dof_value(Tensor<1, dim, VectorizedArray<Number>>(), j); + phi.submit_dof_value(tmp, i); + phi.evaluate(true, true); + + /*--- Loop over quadrature points to compute the integral ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& n_plus = phi.get_normal_vector(q); + const auto& grad_u = phi.get_gradient(q); + const auto& u = phi.get_value(q); + const auto& lambda = std::abs(scalar_product(phi_extr.get_value(q), n_plus)); + + const auto& point_vectorized = phi.quadrature_point(q); + auto u_m = u; + auto grad_u_m = grad_u; + for(unsigned int v = 0; v < VectorizedArray<Number>::size(); ++v) { + Point<dim> point; + for(unsigned int d = 0; d < dim; ++d) + point[d] = point_vectorized[d][v]; + + u_m[1][v] = -u_m[1][v]; + + grad_u_m[0][0][v] = -grad_u_m[0][0][v]; + grad_u_m[0][1][v] = -grad_u_m[0][1][v]; + } + + phi.submit_value(a33/Re*(-(0.5*(grad_u + grad_u_m))*n_plus + coef_jump*(u - u_m)) + + a33*outer_product(0.5*(u + u_m), phi_extr.get_value(q))*n_plus + + a33*0.5*lambda*(u - u_m), q); + phi.submit_normal_derivative(-theta_v*a33/Re*(u - u_m), q); + } + phi.integrate(true, true); + diagonal[i] = phi.get_dof_value(i); + } + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) + phi.submit_dof_value(diagonal[i], i); + phi.distribute_local_to_global(dst); + } + } + } + } + + + // Now we consider the pressure related bilinear forms. We first assemble diagonal cell term for the pressure + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_diagonal_cell_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const unsigned int& src, + const std::pair<unsigned int, unsigned int>& cell_range) const { + FEEvaluation<dim, fe_degree_p, n_q_points_1d_p, 1, Number> phi(data, 1, 1); + + AlignedVector<VectorizedArray<Number>> diagonal(phi.dofs_per_component); /*--- Here we are using dofs_per_component but + it coincides with dofs_per_cell since it is + scalar finite element space ---*/ + + const double coeff = (TR_BDF2_stage == 1) ? 1e6*gamma*dt*gamma*dt : 1e6*(1.0 - gamma)*dt*(1.0 - gamma)*dt; + + /*--- Loop over all cells in the range ---*/ + for(unsigned int cell = cell_range.first; cell < cell_range.second; ++cell) { + phi.reinit(cell); + + /*--- Loop over all dofs ---*/ + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) { + for(unsigned int j = 0; j < phi.dofs_per_component; ++j) + phi.submit_dof_value(VectorizedArray<Number>(), j); /*--- We set all dofs to zero ---*/ + phi.submit_dof_value(make_vectorized_array<Number>(1.0), i); /*--- Now we set the current one to 1; since it is scalar, + we can directly use 'make_vectorized_array' without + relying on 'Tensor' ---*/ + phi.evaluate(true, true); + + /*--- Loop over quadrature points ---*/ + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + phi.submit_value(1.0/coeff*phi.get_value(q), q); + phi.submit_gradient(phi.get_gradient(q), q); + } + phi.integrate(true, true); + diagonal[i] = phi.get_dof_value(i); + } + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) + phi.submit_dof_value(diagonal[i], i); + + phi.distribute_local_to_global(dst); + } + } + + + // The following function assembles diagonal face term for the pressure + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_diagonal_face_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const unsigned int& src, + const std::pair<unsigned int, unsigned int>& face_range) const { + FEFaceEvaluation<dim, fe_degree_p, n_q_points_1d_p, 1, Number> phi_p(data, true, 1, 1), + phi_m(data, false, 1, 1); + + AssertDimension(phi_p.dofs_per_component, phi_m.dofs_per_component); + AlignedVector<VectorizedArray<Number>> diagonal_p(phi_p.dofs_per_component), + diagonal_m(phi_m.dofs_per_component); /*--- Again, we just assert for safety that dimension + match, in the sense that we have selected + the proper space ---*/ + + /*--- Loop over all faces ---*/ + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi_p.reinit(face); + phi_m.reinit(face); + + const auto coef_jump = C_p*0.5*(std::abs((phi_p.get_normal_vector(0)*phi_p.inverse_jacobian(0))[dim - 1]) + + std::abs((phi_m.get_normal_vector(0)*phi_m.inverse_jacobian(0))[dim - 1])); + + /*--- Loop over all dofs ---*/ + for(unsigned int i = 0; i < phi_p.dofs_per_component; ++i) { + for(unsigned int j = 0; j < phi_p.dofs_per_component; ++j) { + phi_p.submit_dof_value(VectorizedArray<Number>(), j); + phi_m.submit_dof_value(VectorizedArray<Number>(), j); + } + phi_p.submit_dof_value(make_vectorized_array<Number>(1.0), i); + phi_m.submit_dof_value(make_vectorized_array<Number>(1.0), i); + phi_p.evaluate(true, true); + phi_m.evaluate(true, true); + + /*--- Loop over all quadrature points to compute the integral ---*/ + for(unsigned int q = 0; q < phi_p.n_q_points; ++q) { + const auto& n_plus = phi_p.get_normal_vector(q); + + const auto& avg_grad_pres = 0.5*(phi_p.get_gradient(q) + phi_m.get_gradient(q)); + const auto& jump_pres = phi_p.get_value(q) - phi_m.get_value(q); + + phi_p.submit_value(-scalar_product(avg_grad_pres, n_plus) + coef_jump*jump_pres, q); + phi_m.submit_value(scalar_product(avg_grad_pres, n_plus) - coef_jump*jump_pres, q); + phi_p.submit_gradient(-theta_p*0.5*jump_pres*n_plus, q); + phi_m.submit_gradient(-theta_p*0.5*jump_pres*n_plus, q); + } + phi_p.integrate(true, true); + diagonal_p[i] = phi_p.get_dof_value(i); + phi_m.integrate(true, true); + diagonal_m[i] = phi_m.get_dof_value(i); + } + for(unsigned int i = 0; i < phi_p.dofs_per_component; ++i) { + phi_p.submit_dof_value(diagonal_p[i], i); + phi_m.submit_dof_value(diagonal_m[i], i); + } + phi_p.distribute_local_to_global(dst); + phi_m.distribute_local_to_global(dst); + } + } + + + // Eventually, we assemble diagonal boundary term for the pressure + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + assemble_diagonal_boundary_term_pressure(const MatrixFree<dim, Number>& data, + Vec& dst, + const unsigned int& src, + const std::pair<unsigned int, unsigned int>& face_range) const { + FEFaceEvaluation<dim, fe_degree_p, n_q_points_1d_p, 1, Number> phi(data, true, 1, 1); + + AlignedVector<VectorizedArray<Number>> diagonal(phi.dofs_per_component); + + for(unsigned int face = face_range.first; face < face_range.second; ++face) { + phi.reinit(face); + + const auto coef_jump = C_p*std::abs((phi.get_normal_vector(0)*phi.inverse_jacobian(0))[dim - 1]); + + const auto boundary_id = data.get_boundary_id(face); + + if(boundary_id == 1) { + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) { + for(unsigned int j = 0; j < phi.dofs_per_component; ++j) + phi.submit_dof_value(VectorizedArray<Number>(), j); + phi.submit_dof_value(make_vectorized_array<Number>(1.0), i); + phi.evaluate(true, true); + + for(unsigned int q = 0; q < phi.n_q_points; ++q) { + const auto& n_plus = phi.get_normal_vector(q); + + const auto& grad_pres = phi.get_gradient(q); + const auto& pres = phi.get_value(q); + + phi.submit_value(-scalar_product(grad_pres, n_plus) + 2.0*coef_jump*pres , q); + phi.submit_normal_derivative(-theta_p*pres, q); + } + phi.integrate(true, true); + diagonal[i] = phi.get_dof_value(i); + } + for(unsigned int i = 0; i < phi.dofs_per_component; ++i) + phi.submit_dof_value(diagonal[i], i); + phi.distribute_local_to_global(dst); + } + } + } + + + // Put together all previous steps. We create a dummy auxliary vector that serves for the src input argument in + // the previous functions that as we have seen before is unused. Then everything is done by the 'loop' function + // and it is saved in the field 'inverse_diagonal_entries' already present in the base class. Anyway since there is + // only one field, we need to resize properly depending on whether we are considering the velocity or the pressure. + // + template<int dim, int fe_degree_p, int fe_degree_v, int n_q_points_1d_p, int n_q_points_1d_v, typename Vec, typename Number> + void NavierStokesProjectionOperator<dim, fe_degree_p, fe_degree_v, n_q_points_1d_p, n_q_points_1d_v, Vec, Number>:: + compute_diagonal() { + Assert(NS_stage == 1 || NS_stage == 2, ExcInternalError()); + if(NS_stage == 1) { + this->inverse_diagonal_entries.reset(new DiagonalMatrix<Vec>()); + auto& inverse_diagonal = this->inverse_diagonal_entries->get_vector(); + this->data->initialize_dof_vector(inverse_diagonal, 0); + const unsigned int dummy = 0; + + this->data->loop(&NavierStokesProjectionOperator::assemble_diagonal_cell_term_velocity, + &NavierStokesProjectionOperator::assemble_diagonal_face_term_velocity, + &NavierStokesProjectionOperator::assemble_diagonal_boundary_term_velocity, + this, inverse_diagonal, dummy, false, + MatrixFree<dim, Number>::DataAccessOnFaces::unspecified, + MatrixFree<dim, Number>::DataAccessOnFaces::unspecified); + + for(unsigned int i = 0; i < inverse_diagonal.local_size(); ++i) { + Assert(inverse_diagonal.local_element(i) != 0.0, + ExcMessage("No diagonal entry in a definite operator should be zero")); + inverse_diagonal.local_element(i) = 1.0/inverse_diagonal.local_element(i); + } + } + else if(NS_stage == 2) { + this->inverse_diagonal_entries.reset(new DiagonalMatrix<Vec>()); + auto& inverse_diagonal = this->inverse_diagonal_entries->get_vector(); + this->data->initialize_dof_vector(inverse_diagonal, 1); + const unsigned int dummy = 0; + + this->data->loop(&NavierStokesProjectionOperator::assemble_diagonal_cell_term_pressure, + &NavierStokesProjectionOperator::assemble_diagonal_face_term_pressure, + &NavierStokesProjectionOperator::assemble_diagonal_boundary_term_pressure, + this, inverse_diagonal, dummy, false, + MatrixFree<dim, Number>::DataAccessOnFaces::unspecified, + MatrixFree<dim, Number>::DataAccessOnFaces::unspecified); + + for(unsigned int i = 0; i < inverse_diagonal.local_size(); ++i) { + Assert(inverse_diagonal.local_element(i) != 0.0, + ExcMessage("No diagonal entry in a definite operator should be zero")); + inverse_diagonal.local_element(i) = 1.0/inverse_diagonal.local_element(i); + } + } + } + + + // @sect{The <code>NavierStokesProjection</code> class} + + // Now we are ready for the main class of the program. It implements the calls to the various steps + // of the projection method for Navier-Stokes equations. + // + template<int dim> + class NavierStokesProjection { + public: + NavierStokesProjection(RunTimeParameters::Data_Storage& data); + + void run(const bool verbose = false, const unsigned int output_interval = 10); + + protected: + const double t_0; + const double T; + const double gamma; //--- TR-BDF2 parameter + unsigned int TR_BDF2_stage; //--- Flag to check at which current stage of TR-BDF2 are + const double Re; + double dt; + + EquationData::Velocity<dim> vel_init; + EquationData::Pressure<dim> pres_init; /*--- Instance of 'Velocity' and 'Pressure' classes to initialize. ---*/ + + parallel::distributed::Triangulation<dim> triangulation; + + /*--- Finite Element spaces ---*/ + FESystem<dim> fe_velocity; + FESystem<dim> fe_pressure; + + /*--- Handler for dofs ---*/ + DoFHandler<dim> dof_handler_velocity; + DoFHandler<dim> dof_handler_pressure; + + /*--- Quadrature formulas for velocity and pressure, respectively ---*/ + QGauss<dim> quadrature_pressure; + QGauss<dim> quadrature_velocity; + + /*--- Now we define all the vectors for the solution. We start from the pressure + with p^n, p^(n+gamma) and a vector for rhs ---*/ + LinearAlgebra::distributed::Vector<double> pres_n; + LinearAlgebra::distributed::Vector<double> pres_int; + LinearAlgebra::distributed::Vector<double> rhs_p; + + /*--- Next, we move to the velocity, with u^n, u^(n-1), u^(n+gamma/2), + u^(n+gamma) and other two auxiliary vectors as well as the rhs ---*/ + LinearAlgebra::distributed::Vector<double> u_n; + LinearAlgebra::distributed::Vector<double> u_n_minus_1; + LinearAlgebra::distributed::Vector<double> u_extr; + LinearAlgebra::distributed::Vector<double> u_n_gamma; + LinearAlgebra::distributed::Vector<double> u_star; + LinearAlgebra::distributed::Vector<double> u_tmp; + LinearAlgebra::distributed::Vector<double> rhs_u; + LinearAlgebra::distributed::Vector<double> grad_pres_int; + + Vector<double> Linfty_error_per_cell_vel; + + DeclException2(ExcInvalidTimeStep, + double, + double, + << " The time step " << arg1 << " is out of range." + << std::endl + << " The permitted range is (0," << arg2 << "]"); + + void create_triangulation(const unsigned int n_refines); + + void setup_dofs(); + + void initialize(); + + void interpolate_velocity(); + + void diffusion_step(); + + void projection_step(); + + void project_grad(const unsigned int flag); + + double get_maximal_velocity(); + + double get_maximal_difference(); + + void output_results(const unsigned int step); + + void refine_mesh(); + + void interpolate_max_res(const unsigned int level); + + void save_max_res(); + + private: + void compute_lift_and_drag(); + + /*--- Technical member to handle the various steps ---*/ + std::shared_ptr<MatrixFree<dim, double>> matrix_free_storage; + + /*--- Now we need an instance of the class implemented before with the weak form ---*/ + NavierStokesProjectionOperator<dim, EquationData::degree_p, EquationData::degree_p + 1, + EquationData::degree_p + 1, EquationData::degree_p + 2, + LinearAlgebra::distributed::Vector<double>, double> navier_stokes_matrix; + + /*--- This is an instance for geometric multigrid preconditioner ---*/ + MGLevelObject<NavierStokesProjectionOperator<dim, EquationData::degree_p, EquationData::degree_p + 1, + EquationData::degree_p + 1, EquationData::degree_p + 2, + LinearAlgebra::distributed::Vector<float>, float>> mg_matrices; + + /*--- Here we define two 'AffineConstraints' instance, one for each finite element space. + This is just a technical issue, due to MatrixFree requirements. In general + this class is used to impose boundary conditions (or any kind of constraints), but in this case, since + we are using a weak imposition of bcs, everything is already in the weak forms and so these instances + will be default constructed ---*/ + AffineConstraints<double> constraints_velocity, + constraints_pressure; + + /*--- Now a bunch of variables handled by 'ParamHandler' introduced at the beginning of the code ---*/ + unsigned int max_its; + double eps; + + unsigned int max_loc_refinements; + unsigned int min_loc_refinements; + unsigned int refinement_iterations; + + std::string saving_dir; + + /*--- Finally, some output related streams ---*/ + ConditionalOStream pcout; + + std::ofstream time_out; + ConditionalOStream ptime_out; + TimerOutput time_table; + + std::ofstream output_n_dofs_velocity; + std::ofstream output_n_dofs_pressure; + + std::ofstream output_lift; + std::ofstream output_drag; + }; + + + // In the constructor, we just read all the data from the + // <code>Data_Storage</code> object that is passed as an argument, verify that + // the data we read are reasonable and, finally, create the triangulation and + // load the initial data. + // + template<int dim> + NavierStokesProjection<dim>::NavierStokesProjection(RunTimeParameters::Data_Storage& data): + t_0(data.initial_time), + T(data.final_time), + gamma(2.0 - std::sqrt(2.0)), //--- Save also in the NavierStokes class the TR-BDF2 parameter value + TR_BDF2_stage(1), //--- Initialize the flag for the TR_BDF2 stage + Re(data.Reynolds), + dt(data.dt), + vel_init(data.initial_time), + pres_init(data.initial_time), + triangulation(MPI_COMM_WORLD, parallel::distributed::Triangulation<dim>::limit_level_difference_at_vertices, + parallel::distributed::Triangulation<dim>::construct_multigrid_hierarchy), + fe_velocity(FE_DGQ<dim>(EquationData::degree_p + 1), dim), + fe_pressure(FE_DGQ<dim>(EquationData::degree_p), 1), + dof_handler_velocity(triangulation), + dof_handler_pressure(triangulation), + quadrature_pressure(EquationData::degree_p + 1), + quadrature_velocity(EquationData::degree_p + 2), + navier_stokes_matrix(data), + max_its(data.max_iterations), + eps(data.eps), + max_loc_refinements(data.max_loc_refinements), + min_loc_refinements(data.min_loc_refinements), + refinement_iterations(data.refinement_iterations), + saving_dir(data.dir), + pcout(std::cout, Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0), + time_out("./" + data.dir + "/time_analysis_" + + Utilities::int_to_string(Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD)) + "proc.dat"), + ptime_out(time_out, Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0), + time_table(ptime_out, TimerOutput::summary, TimerOutput::cpu_and_wall_times), + output_n_dofs_velocity("./" + data.dir + "/n_dofs_velocity.dat", std::ofstream::out), + output_n_dofs_pressure("./" + data.dir + "/n_dofs_pressure.dat", std::ofstream::out), + output_lift("./" + data.dir + "/lift.dat", std::ofstream::out), + output_drag("./" + data.dir + "/drag.dat", std::ofstream::out) { + if(EquationData::degree_p < 1) { + pcout + << " WARNING: The chosen pair of finite element spaces is not stable." + << std::endl + << " The obtained results will be nonsense" << std::endl; + } + + AssertThrow(!((dt <= 0.0) || (dt > 0.5*T)), ExcInvalidTimeStep(dt, 0.5*T)); + + matrix_free_storage = std::make_shared<MatrixFree<dim, double>>(); + + create_triangulation(data.n_refines); + setup_dofs(); + initialize(); + } + + + // The method that creates the triangulation and refines it the needed number + // of times. + // + template<int dim> + void NavierStokesProjection<dim>::create_triangulation(const unsigned int n_refines) { + TimerOutput::Scope t(time_table, "Create triangulation"); + + GridGenerator::plate_with_a_hole(triangulation, 0.5, 1.0, 1.0, 1.1, 1.0, 19.0, Point<2>(2.0, 2.0), 0, 1, 1.0, 2, true); + /*--- We strongly advice to check the documentation to verify the meaning of all input parameters. ---*/ + + pcout << "Number of refines = " << n_refines << std::endl; + triangulation.refine_global(n_refines); + } + + + // After creating the triangulation, it creates the mesh dependent + // data, i.e. it distributes degrees of freedom, and + // initializes the vectors that we will use. + // + template<int dim> + void NavierStokesProjection<dim>::setup_dofs() { + pcout << "Number of active cells: " << triangulation.n_global_active_cells() << std::endl; + pcout << "Number of levels: " << triangulation.n_global_levels() << std::endl; + + /*--- Distribute dofs and prepare for multigrid ---*/ + dof_handler_velocity.distribute_dofs(fe_velocity); + dof_handler_pressure.distribute_dofs(fe_pressure); + + pcout << "dim (X_h) = " << dof_handler_velocity.n_dofs() + << std::endl + << "dim (M_h) = " << dof_handler_pressure.n_dofs() + << std::endl + << "Re = " << Re << std::endl + << std::endl; + + if(Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0) { + output_n_dofs_velocity << dof_handler_velocity.n_dofs() << std::endl; + output_n_dofs_pressure << dof_handler_pressure.n_dofs() << std::endl; + } + + typename MatrixFree<dim, double>::AdditionalData additional_data; + additional_data.mapping_update_flags = (update_gradients | update_JxW_values | + update_quadrature_points | update_values); + additional_data.mapping_update_flags_inner_faces = (update_gradients | update_JxW_values | update_quadrature_points | + update_normal_vectors | update_values); + additional_data.mapping_update_flags_boundary_faces = (update_gradients | update_JxW_values | update_quadrature_points | + update_normal_vectors | update_values); + additional_data.tasks_parallel_scheme = MatrixFree<dim, double>::AdditionalData::none; + + std::vector<const DoFHandler<dim>*> dof_handlers; /*--- Vector of dof_handlers to feed the 'MatrixFree'. Here the order + counts and enters into the game as parameter of FEEvaluation and + FEFaceEvaluation in the previous class ---*/ + dof_handlers.push_back(&dof_handler_velocity); + dof_handlers.push_back(&dof_handler_pressure); + + constraints_velocity.clear(); + constraints_velocity.close(); + constraints_pressure.clear(); + constraints_pressure.close(); + std::vector<const AffineConstraints<double>*> constraints; + constraints.push_back(&constraints_velocity); + constraints.push_back(&constraints_pressure); + + std::vector<QGauss<1>> quadratures; /*--- We cannot directly use 'quadrature_velocity' and 'quadrature_pressure', + because the 'MatrixFree' structure wants a quadrature formula for 1D + (this is way the template parameter of the previous class was called 'n_q_points_1d_p' + and 'n_q_points_1d_v' and the reason of '1' as QGauss template parameter). ---*/ + quadratures.push_back(QGauss<1>(EquationData::degree_p + 2)); + quadratures.push_back(QGauss<1>(EquationData::degree_p + 1)); + + /*--- Initialize the matrix-free structure and size properly the vectors. Here again the + second input argument of the 'initialize_dof_vector' method depends on the order of 'dof_handlers' ---*/ + matrix_free_storage->reinit(dof_handlers, constraints, quadratures, additional_data); + matrix_free_storage->initialize_dof_vector(u_star, 0); + matrix_free_storage->initialize_dof_vector(rhs_u, 0); + matrix_free_storage->initialize_dof_vector(u_n, 0); + matrix_free_storage->initialize_dof_vector(u_extr, 0); + matrix_free_storage->initialize_dof_vector(u_n_minus_1, 0); + matrix_free_storage->initialize_dof_vector(u_n_gamma, 0); + matrix_free_storage->initialize_dof_vector(u_tmp, 0); + matrix_free_storage->initialize_dof_vector(grad_pres_int, 0); + + matrix_free_storage->initialize_dof_vector(pres_int, 1); + matrix_free_storage->initialize_dof_vector(pres_n, 1); + matrix_free_storage->initialize_dof_vector(rhs_p, 1); + + /*--- Initialize the multigrid structure. We dedicate ad hoc 'dof_handlers_mg' and 'constraints_mg' because + we use float as type. Moreover we can initialize already with the index of the finite element of the pressure; + anyway we need by requirement to declare also structures for the velocity for coherence (basically because + the index of finite element space has to be the same, so the pressure has to be the second).---*/ + mg_matrices.clear_elements(); + dof_handler_velocity.distribute_mg_dofs(); + dof_handler_pressure.distribute_mg_dofs(); + + const unsigned int nlevels = triangulation.n_global_levels(); + mg_matrices.resize(0, nlevels - 1); + for(unsigned int level = 0; level < nlevels; ++level) { + typename MatrixFree<dim, float>::AdditionalData additional_data_mg; + additional_data_mg.tasks_parallel_scheme = MatrixFree<dim, float>::AdditionalData::none; + additional_data_mg.mapping_update_flags = (update_gradients | update_JxW_values); + additional_data_mg.mapping_update_flags_inner_faces = (update_gradients | update_JxW_values); + additional_data_mg.mapping_update_flags_boundary_faces = (update_gradients | update_JxW_values); + additional_data_mg.mg_level = level; + + std::vector<const DoFHandler<dim>*> dof_handlers_mg; + dof_handlers_mg.push_back(&dof_handler_velocity); + dof_handlers_mg.push_back(&dof_handler_pressure); + std::vector<const AffineConstraints<float>*> constraints_mg; + AffineConstraints<float> constraints_velocity_mg; + constraints_velocity_mg.clear(); + constraints_velocity_mg.close(); + constraints_mg.push_back(&constraints_velocity_mg); + AffineConstraints<float> constraints_pressure_mg; + constraints_pressure_mg.clear(); + constraints_pressure_mg.close(); + constraints_mg.push_back(&constraints_pressure_mg); + + std::shared_ptr<MatrixFree<dim, float>> mg_mf_storage_level(new MatrixFree<dim, float>()); + mg_mf_storage_level->reinit(dof_handlers_mg, constraints_mg, quadratures, additional_data_mg); + const std::vector<unsigned int> tmp = {1}; + mg_matrices[level].initialize(mg_mf_storage_level, tmp, tmp); + mg_matrices[level].set_dt(dt); + mg_matrices[level].set_NS_stage(2); + } + + Linfty_error_per_cell_vel.reinit(triangulation.n_active_cells()); + } + + + // This method loads the initial data. It simply uses the class <code>Pressure</code> instance for the pressure + // and the class <code>Velocity</code> instance for the velocity. + // + template<int dim> + void NavierStokesProjection<dim>::initialize() { + TimerOutput::Scope t(time_table, "Initialize pressure and velocity"); + + VectorTools::interpolate(dof_handler_pressure, pres_init, pres_n); + + VectorTools::interpolate(dof_handler_velocity, vel_init, u_n_minus_1); + VectorTools::interpolate(dof_handler_velocity, vel_init, u_n); + } + + + // This function computes the extrapolated velocity to be used in the momentum predictor + // + template<int dim> + void NavierStokesProjection<dim>::interpolate_velocity() { + TimerOutput::Scope t(time_table, "Interpolate velocity"); + + //--- TR-BDF2 first step + if(TR_BDF2_stage == 1) { + u_extr.equ(1.0 + gamma/(2.0*(1.0 - gamma)), u_n); + u_tmp.equ(gamma/(2.0*(1.0 - gamma)), u_n_minus_1); + u_extr -= u_tmp; + } + //--- TR-BDF2 second step + else { + u_extr.equ(1.0 + (1.0 - gamma)/gamma, u_n_gamma); + u_tmp.equ((1.0 - gamma)/gamma, u_n); + u_extr -= u_tmp; + } + } + + + // We are finally ready to solve the diffusion step. + // + template<int dim> + void NavierStokesProjection<dim>::diffusion_step() { + TimerOutput::Scope t(time_table, "Diffusion step"); + + /*--- We first speicify that we want to deal with velocity dof_handler (index 0, since it is the first one + in the 'dof_handlers' vector) ---*/ + const std::vector<unsigned int> tmp = {0}; + navier_stokes_matrix.initialize(matrix_free_storage, tmp, tmp); + + /*--- Next, we specify at we are at stage 1, namely the diffusion step ---*/ + navier_stokes_matrix.set_NS_stage(1); + + /*--- Now, we compute the right-hand side and we set the convective velocity. The necessity of 'set_u_extr' is + that this quantity is required in the bilinear forms and we can't use a vector of src like on the right-hand side, + so it has to be available ---*/ + if(TR_BDF2_stage == 1) { + navier_stokes_matrix.vmult_rhs_velocity(rhs_u, {u_n, u_extr, pres_n}); + navier_stokes_matrix.set_u_extr(u_extr); + u_star = u_extr; + } + else { + navier_stokes_matrix.vmult_rhs_velocity(rhs_u, {u_n, u_n_gamma, pres_int, u_extr}); + navier_stokes_matrix.set_u_extr(u_extr); + u_star = u_extr; + } + + /*--- Build the linear solver; in this case we specifiy the maximum number of iterations and residual ---*/ + SolverControl solver_control(max_its, eps*rhs_u.l2_norm()); + SolverGMRES<LinearAlgebra::distributed::Vector<double>> gmres(solver_control); + + /*--- Build a Jacobi preconditioner and solve ---*/ + PreconditionJacobi<NavierStokesProjectionOperator<dim, + EquationData::degree_p, + EquationData::degree_p + 1, + EquationData::degree_p + 1, + EquationData::degree_p + 2, + LinearAlgebra::distributed::Vector<double>, + double>> preconditioner; + navier_stokes_matrix.compute_diagonal(); + preconditioner.initialize(navier_stokes_matrix); + + gmres.solve(navier_stokes_matrix, u_star, rhs_u, preconditioner); + } + + + // Next, we solve the projection step. + // + template<int dim> + void NavierStokesProjection<dim>::projection_step() { + TimerOutput::Scope t(time_table, "Projection step pressure"); + + /*--- We start in the same way of 'diffusion_step': we first reinitialize with the index of FE space, + we specify that this is the second stage and we compute the right-hand side ---*/ + const std::vector<unsigned int> tmp = {1}; + navier_stokes_matrix.initialize(matrix_free_storage, tmp, tmp); + + navier_stokes_matrix.set_NS_stage(2); + + if(TR_BDF2_stage == 1) + navier_stokes_matrix.vmult_rhs_pressure(rhs_p, {u_star, pres_n}); + else + navier_stokes_matrix.vmult_rhs_pressure(rhs_p, {u_star, pres_int}); + + /*--- Build the linear solver (Conjugate Gradient in this case) ---*/ + SolverControl solver_control(max_its, eps*rhs_p.l2_norm()); + SolverCG<LinearAlgebra::distributed::Vector<double>> cg(solver_control); + + /*--- Build the preconditioner (as in step-37) ---*/ + MGTransferMatrixFree<dim, float> mg_transfer; + mg_transfer.build(dof_handler_pressure); + + using SmootherType = PreconditionChebyshev<NavierStokesProjectionOperator<dim, + EquationData::degree_p, + EquationData::degree_p + 1, + EquationData::degree_p + 1, + EquationData::degree_p + 2, + LinearAlgebra::distributed::Vector<float>, + float>, + LinearAlgebra::distributed::Vector<float>>; + mg::SmootherRelaxation<SmootherType, LinearAlgebra::distributed::Vector<float>> mg_smoother; + MGLevelObject<typename SmootherType::AdditionalData> smoother_data; + smoother_data.resize(0, triangulation.n_global_levels() - 1); + for(unsigned int level = 0; level < triangulation.n_global_levels(); ++level) { + if(level > 0) { + smoother_data[level].smoothing_range = 15.0; + smoother_data[level].degree = 3; + smoother_data[level].eig_cg_n_iterations = 10; + } + else { + smoother_data[0].smoothing_range = 2e-2; + smoother_data[0].degree = numbers::invalid_unsigned_int; + smoother_data[0].eig_cg_n_iterations = mg_matrices[0].m(); + } + mg_matrices[level].compute_diagonal(); + smoother_data[level].preconditioner = mg_matrices[level].get_matrix_diagonal_inverse(); + } + mg_smoother.initialize(mg_matrices, smoother_data); + + PreconditionIdentity identity; + SolverCG<LinearAlgebra::distributed::Vector<float>> cg_mg(solver_control); + MGCoarseGridIterativeSolver<LinearAlgebra::distributed::Vector<float>, + SolverCG<LinearAlgebra::distributed::Vector<float>>, + NavierStokesProjectionOperator<dim, + EquationData::degree_p, + EquationData::degree_p + 1, + EquationData::degree_p + 1, + EquationData::degree_p + 2, + LinearAlgebra::distributed::Vector<float>, + float>, + PreconditionIdentity> mg_coarse(cg_mg, mg_matrices[0], identity); + + mg::Matrix<LinearAlgebra::distributed::Vector<float>> mg_matrix(mg_matrices); + + Multigrid<LinearAlgebra::distributed::Vector<float>> mg(mg_matrix, mg_coarse, mg_transfer, mg_smoother, mg_smoother); + + PreconditionMG<dim, + LinearAlgebra::distributed::Vector<float>, + MGTransferMatrixFree<dim, float>> preconditioner(dof_handler_pressure, mg, mg_transfer); + + /*--- Solve the linear system ---*/ + if(TR_BDF2_stage == 1) { + pres_int = pres_n; + cg.solve(navier_stokes_matrix, pres_int, rhs_p, preconditioner); + } + else { + pres_n = pres_int; + cg.solve(navier_stokes_matrix, pres_n, rhs_p, preconditioner); + } + } + + + // This implements the projection step for the gradient of pressure + // + template<int dim> + void NavierStokesProjection<dim>::project_grad(const unsigned int flag) { + TimerOutput::Scope t(time_table, "Gradient of pressure projection"); + + /*--- The input parameter flag is used just to specify where we want to save the result ---*/ + AssertIndexRange(flag, 3); + Assert(flag > 0, ExcInternalError()); + + /*--- We need to select the dof handler related to the velocity since the result lives there ---*/ + const std::vector<unsigned int> tmp = {0}; + navier_stokes_matrix.initialize(matrix_free_storage, tmp, tmp); + + if(flag == 1) + navier_stokes_matrix.vmult_grad_p_projection(rhs_u, pres_n); + else if(flag == 2) + navier_stokes_matrix.vmult_grad_p_projection(rhs_u, pres_int); + + /*--- We conventionally decide that the this corresponds to third stage ---*/ + navier_stokes_matrix.set_NS_stage(3); + + /*--- Solve the system ---*/ + SolverControl solver_control(max_its, 1e-12*rhs_u.l2_norm()); + SolverCG<LinearAlgebra::distributed::Vector<double>> cg(solver_control); + cg.solve(navier_stokes_matrix, u_tmp, rhs_u, PreconditionIdentity()); + } + + + // The following function is used in determining the maximal velocity + // in order to compute the Courant number. + // + template<int dim> + double NavierStokesProjection<dim>::get_maximal_velocity() { + VectorTools::integrate_difference(dof_handler_velocity, u_n, ZeroFunction<dim>(dim), + Linfty_error_per_cell_vel, quadrature_velocity, VectorTools::Linfty_norm); + const double res = VectorTools::compute_global_error(triangulation, Linfty_error_per_cell_vel, VectorTools::Linfty_norm); + + return res; + } + + + // The following function is used in determining the maximal nodal difference + // in order to see if we have reched steady-state. We simply use integrate_difference testing + // u_n - u_n_minus_1 against the zero function. + // + template<int dim> + double NavierStokesProjection<dim>::get_maximal_difference() { + u_tmp = u_n; + u_tmp -= u_n_minus_1; + + VectorTools::integrate_difference(dof_handler_velocity, u_tmp, ZeroFunction<dim>(dim), + Linfty_error_per_cell_vel, quadrature_velocity, VectorTools::Linfty_norm); + const double res = VectorTools::compute_global_error(triangulation, Linfty_error_per_cell_vel, VectorTools::Linfty_norm); + pcout << "Maximum nodal difference = " << res <<std::endl; + + return res; + } + + + // This method plots the current solution. The main difficulty is that we want + // to create a single output file that contains the data for all velocity + // components and the pressure. On the other hand, velocities and the pressure + // live on separate DoFHandler objects, so we need to pay attention when we use + // 'add_data_vector' to select the proper space. + // + template<int dim> + void NavierStokesProjection<dim>::output_results(const unsigned int step) { + TimerOutput::Scope t(time_table, "Output results"); + + DataOut<dim> data_out; + + std::vector<std::string> velocity_names(dim, "v"); + std::vector<DataComponentInterpretation::DataComponentInterpretation> + component_interpretation_velocity(dim, DataComponentInterpretation::component_is_part_of_vector); + u_n.update_ghost_values(); + data_out.add_data_vector(dof_handler_velocity, u_n, velocity_names, component_interpretation_velocity); + pres_n.update_ghost_values(); + data_out.add_data_vector(dof_handler_pressure, pres_n, "p", {DataComponentInterpretation::component_is_scalar}); + + std::vector<std::string> velocity_names_old(dim, "v_old"); + u_n_minus_1.update_ghost_values(); + data_out.add_data_vector(dof_handler_velocity, u_n_minus_1, velocity_names_old, component_interpretation_velocity); + + /*--- Here we rely on the postprocessor we have built ---*/ + PostprocessorVorticity<dim> postprocessor; + data_out.add_data_vector(dof_handler_velocity, u_n, postprocessor); + + data_out.build_patches(MappingQ1<dim>(), 1, DataOut<dim>::curved_inner_cells); + + const std::string output = "./" + saving_dir + "/solution-" + Utilities::int_to_string(step, 5) + ".vtu"; + data_out.write_vtu_in_parallel(output, MPI_COMM_WORLD); + } + + + // @sect{<code>NavierStokesProjection::compute_lift_and_drag</code>} + + // This routine computes the lift and the drag forces in a non-dimensional framework + // (so basically for the classical coefficients, it is necessary to multiply by a factor 2). + // + template<int dim> + void NavierStokesProjection<dim>::compute_lift_and_drag() { + QGauss<dim - 1> face_quadrature_formula(EquationData::degree_p + 2); + const int n_q_points = face_quadrature_formula.size(); + + std::vector<double> pressure_values(n_q_points); + std::vector<std::vector<Tensor<1, dim>>> velocity_gradients(n_q_points, std::vector<Tensor<1, dim>>(dim)); + + Tensor<1, dim> normal_vector; + Tensor<2, dim> fluid_stress; + Tensor<2, dim> fluid_pressure; + Tensor<1, dim> forces; + + /*--- We need to compute the integral over the cylinder boundary, so we need to use 'FEFaceValues' instances. + For the velocity we need the gradients, for the pressure the values. ---*/ + FEFaceValues<dim> fe_face_values_velocity(fe_velocity, face_quadrature_formula, + update_quadrature_points | update_gradients | + update_JxW_values | update_normal_vectors); + FEFaceValues<dim> fe_face_values_pressure(fe_pressure, face_quadrature_formula, update_values); + + double local_drag = 0.0; + double local_lift = 0.0; + + /*--- We need to perform a unique loop because the whole stress tensor takes into account contributions of + velocity and pressure obviously. However, the two dof_handlers are different, so we neede to create an ad-hoc + iterator for the pressure that we update manually. It is guaranteed that the cells are visited in the same order + (see the documentation) ---*/ + auto tmp_cell = dof_handler_pressure.begin_active(); + for(const auto& cell : dof_handler_velocity.active_cell_iterators()) { + if(cell->is_locally_owned()) { + for(int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face) { + if(cell->face(face)->at_boundary() && cell->face(face)->boundary_id() == 4) { + fe_face_values_velocity.reinit(cell, face); + fe_face_values_pressure.reinit(tmp_cell, face); + + fe_face_values_velocity.get_function_gradients(u_n, velocity_gradients); /*--- velocity gradients ---*/ + fe_face_values_pressure.get_function_values(pres_n, pressure_values); /*--- pressure values ---*/ + + for(int q = 0; q < n_q_points; q++) { + normal_vector = -fe_face_values_velocity.normal_vector(q); + + for(unsigned int d = 0; d < dim; ++ d) { + fluid_pressure[d][d] = pressure_values[q]; + for(unsigned int k = 0; k < dim; ++k) + fluid_stress[d][k] = 1.0/Re*velocity_gradients[q][d][k]; + } + fluid_stress = fluid_stress - fluid_pressure; + + forces = fluid_stress*normal_vector*fe_face_values_velocity.JxW(q); + + local_drag += forces[0]; + local_lift += forces[1]; + } + } + } + } + ++tmp_cell; + } + + /*--- At the end, each processor has computed the contribution to the boundary cells it owns and, therefore, + we need to sum up all the contributions. ---*/ + double lift = Utilities::MPI::sum(local_lift, MPI_COMM_WORLD); + double drag = Utilities::MPI::sum(local_drag, MPI_COMM_WORLD); + if(Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0) { + output_lift << lift << std::endl; + output_drag << drag << std::endl; + } + } + + + // @sect{ <code>NavierStokesProjection::refine_mesh</code>} + + // After finding a good initial guess on the coarse mesh, we hope to + // decrease the error through refining the mesh. We also need to transfer the current solution to the + // next mesh using the SolutionTransfer class. + // + template <int dim> + void NavierStokesProjection<dim>::refine_mesh() { + TimerOutput::Scope t(time_table, "Refine mesh"); + + /*--- We first create a proper vector for computing estimator ---*/ + IndexSet locally_relevant_dofs; + DoFTools::extract_locally_relevant_dofs(dof_handler_velocity, locally_relevant_dofs); + LinearAlgebra::distributed::Vector<double> tmp_velocity; + tmp_velocity.reinit(dof_handler_velocity.locally_owned_dofs(), locally_relevant_dofs, MPI_COMM_WORLD); + tmp_velocity = u_n; + tmp_velocity.update_ghost_values(); + + using Iterator = typename DoFHandler<dim>::active_cell_iterator; + Vector<float> estimated_error_per_cell(triangulation.n_active_cells()); + + /*--- This is basically the indicator per cell computation (see step-50). Since it is not so complciated + we implement it through a lambda expression ---*/ + auto cell_worker = [&](const Iterator& cell, + ScratchData<dim>& scratch_data, + CopyData& copy_data) { + FEValues<dim>& fe_values = scratch_data.fe_values; /*--- Here we finally use the 'FEValues' inside ScratchData ---*/ + fe_values.reinit(cell); + + /*--- Compute the gradients for all quadrature points ---*/ + std::vector<std::vector<Tensor<1, dim>>> gradients(fe_values.n_quadrature_points, std::vector<Tensor<1, dim>>(dim)); + fe_values.get_function_gradients(tmp_velocity, gradients); + copy_data.cell_index = cell->active_cell_index(); + double vorticity_norm_square = 0.0; + /*--- Loop over quadrature points and evaluate the integral multiplying the vorticty + by the weights and the determinant of the Jacobian (which are included in 'JxW') ---*/ + for(unsigned k = 0; k < fe_values.n_quadrature_points; ++k) { + const double vorticity = gradients[k][1][0] - gradients[k][0][1]; + vorticity_norm_square += vorticity*vorticity*fe_values.JxW(k); + } + copy_data.value = cell->diameter()*cell->diameter()*vorticity_norm_square; + }; + + const UpdateFlags cell_flags = update_gradients | update_quadrature_points | update_JxW_values; + + auto copier = [&](const CopyData ©_data) { + if(copy_data.cell_index != numbers::invalid_unsigned_int) + estimated_error_per_cell[copy_data.cell_index] += copy_data.value; + }; + + /*--- Now everything is 'automagically' handled by 'mesh_loop' ---*/ + ScratchData scratch_data(fe_velocity, EquationData::degree_p + 2, cell_flags); + CopyData copy_data; + MeshWorker::mesh_loop(dof_handler_velocity.begin_active(), + dof_handler_velocity.end(), + cell_worker, + copier, + scratch_data, + copy_data, + MeshWorker::assemble_own_cells); + + /*--- Refine grid. In case the refinement level is above a certain value (or the coarsening level is below) + we clear the flags. ---*/ + parallel::distributed::GridRefinement::refine_and_coarsen_fixed_number(triangulation, estimated_error_per_cell, 0.01, 0.3); + for(const auto& cell: triangulation.active_cell_iterators()) { + if(cell->refine_flag_set() && cell->level() == max_loc_refinements) + cell->clear_refine_flag(); + if(cell->coarsen_flag_set() && cell->level() == min_loc_refinements) + cell->clear_coarsen_flag(); + } + triangulation.prepare_coarsening_and_refinement(); + + /*--- Now we prepare the object for transfering, basically saving the old quantities using SolutionTransfer. + Since the 'prepare_for_coarsening_and_refinement' method can be called only once, but we have two vectors + for dof_handler_velocity, we need to put them in an auxiliary vector. ---*/ + std::vector<const LinearAlgebra::distributed::Vector<double>*> velocities; + velocities.push_back(&u_n); + velocities.push_back(&u_n_minus_1); + parallel::distributed::SolutionTransfer<dim, LinearAlgebra::distributed::Vector<double>> + solution_transfer_velocity(dof_handler_velocity); + solution_transfer_velocity.prepare_for_coarsening_and_refinement(velocities); + parallel::distributed::SolutionTransfer<dim, LinearAlgebra::distributed::Vector<double>> + solution_transfer_pressure(dof_handler_pressure); + solution_transfer_pressure.prepare_for_coarsening_and_refinement(pres_n); + + triangulation.execute_coarsening_and_refinement(); /*--- Effectively perform the remeshing ---*/ + + /*--- First DoFHandler objects are set up within the new grid ----*/ + setup_dofs(); + + /*--- Interpolate current solutions to new mesh. This is done using auxliary vectors just for safety, + but the new u_n or pres_n could be used. Again, the only point is that the function 'interpolate' + can be called once and so the vectors related to 'dof_handler_velocity' have to collected in an auxiliary vector. ---*/ + LinearAlgebra::distributed::Vector<double> transfer_velocity, + transfer_velocity_minus_1, + transfer_pressure; + transfer_velocity.reinit(u_n); + transfer_velocity.zero_out_ghosts(); + transfer_velocity_minus_1.reinit(u_n_minus_1); + transfer_velocity_minus_1.zero_out_ghosts(); + transfer_pressure.reinit(pres_n); + transfer_pressure.zero_out_ghosts(); + + std::vector<LinearAlgebra::distributed::Vector<double>*> transfer_velocities; + transfer_velocities.push_back(&transfer_velocity); + transfer_velocities.push_back(&transfer_velocity_minus_1); + solution_transfer_velocity.interpolate(transfer_velocities); + transfer_velocity.update_ghost_values(); + transfer_velocity_minus_1.update_ghost_values(); + solution_transfer_pressure.interpolate(transfer_pressure); + transfer_pressure.update_ghost_values(); + + u_n = transfer_velocity; + u_n_minus_1 = transfer_velocity_minus_1; + pres_n = transfer_pressure; + } + + + // Interpolate the locally refined solution to a mesh with maximal resolution + // and transfer velocity and pressure. + // + template<int dim> + void NavierStokesProjection<dim>::interpolate_max_res(const unsigned int level) { + parallel::distributed::SolutionTransfer<dim, LinearAlgebra::distributed::Vector<double>> + solution_transfer_velocity(dof_handler_velocity); + std::vector<const LinearAlgebra::distributed::Vector<double>*> velocities; + velocities.push_back(&u_n); + velocities.push_back(&u_n_minus_1); + solution_transfer_velocity.prepare_for_coarsening_and_refinement(velocities); + + parallel::distributed::SolutionTransfer<dim, LinearAlgebra::distributed::Vector<double>> + solution_transfer_pressure(dof_handler_pressure); + solution_transfer_pressure.prepare_for_coarsening_and_refinement(pres_n); + + for(const auto& cell: triangulation.active_cell_iterators_on_level(level)) { + if(cell->is_locally_owned()) + cell->set_refine_flag(); + } + triangulation.execute_coarsening_and_refinement(); + + setup_dofs(); + + LinearAlgebra::distributed::Vector<double> transfer_velocity, transfer_velocity_minus_1, + transfer_pressure; + + transfer_velocity.reinit(u_n); + transfer_velocity.zero_out_ghosts(); + transfer_velocity_minus_1.reinit(u_n_minus_1); + transfer_velocity_minus_1.zero_out_ghosts(); + + transfer_pressure.reinit(pres_n); + transfer_pressure.zero_out_ghosts(); + + std::vector<LinearAlgebra::distributed::Vector<double>*> transfer_velocities; + + transfer_velocities.push_back(&transfer_velocity); + transfer_velocities.push_back(&transfer_velocity_minus_1); + solution_transfer_velocity.interpolate(transfer_velocities); + transfer_velocity.update_ghost_values(); + transfer_velocity_minus_1.update_ghost_values(); + + solution_transfer_pressure.interpolate(transfer_pressure); + transfer_pressure.update_ghost_values(); + + u_n = transfer_velocity; + u_n_minus_1 = transfer_velocity_minus_1; + pres_n = transfer_pressure; + } + + + // Save maximum resolution to a mesh adapted. + // + template<int dim> + void NavierStokesProjection<dim>::save_max_res() { + parallel::distributed::Triangulation<dim> triangulation_tmp(MPI_COMM_WORLD); + GridGenerator::plate_with_a_hole(triangulation_tmp, 0.5, 1.0, 1.0, 1.1, 1.0, 19.0, Point<2>(2.0, 2.0), 0, 1, 1.0, 2, true); + triangulation_tmp.refine_global(triangulation.n_global_levels() - 1); + + DoFHandler<dim> dof_handler_velocity_tmp(triangulation_tmp); + DoFHandler<dim> dof_handler_pressure_tmp(triangulation_tmp); + dof_handler_velocity_tmp.distribute_dofs(fe_velocity); + dof_handler_pressure_tmp.distribute_dofs(fe_pressure); + + LinearAlgebra::distributed::Vector<double> u_n_tmp, + pres_n_tmp; + u_n_tmp.reinit(dof_handler_velocity_tmp.n_dofs()); + pres_n_tmp.reinit(dof_handler_pressure_tmp.n_dofs()); + + DataOut<dim> data_out; + std::vector<std::string> velocity_names(dim, "v"); + std::vector<DataComponentInterpretation::DataComponentInterpretation> + component_interpretation_velocity(dim, DataComponentInterpretation::component_is_part_of_vector); + VectorTools::interpolate_to_different_mesh(dof_handler_velocity, u_n, dof_handler_velocity_tmp, u_n_tmp); + u_n_tmp.update_ghost_values(); + data_out.add_data_vector(dof_handler_velocity_tmp, u_n_tmp, velocity_names, component_interpretation_velocity); + VectorTools::interpolate_to_different_mesh(dof_handler_pressure, pres_n, dof_handler_pressure_tmp, pres_n_tmp); + pres_n_tmp.update_ghost_values(); + data_out.add_data_vector(dof_handler_pressure_tmp, pres_n_tmp, "p", {DataComponentInterpretation::component_is_scalar}); + PostprocessorVorticity<dim> postprocessor; + data_out.add_data_vector(dof_handler_velocity_tmp, u_n_tmp, postprocessor); + + data_out.build_patches(MappingQ1<dim>(), 1, DataOut<dim>::curved_inner_cells); + const std::string output = "./" + saving_dir + "/solution_max_res_end.vtu"; + data_out.write_vtu_in_parallel(output, MPI_COMM_WORLD); + } + + + // @sect{ <code>NavierStokesProjection::run</code> } + + // This is the time marching function, which starting at <code>t_0</code> + // advances in time using the projection method with time step <code>dt</code> + // until <code>T</code>. + // + // Its second parameter, <code>verbose</code> indicates whether the function + // should output information what it is doing at any given moment: + // we use the ConditionalOStream class to do that for us. + // + template<int dim> + void NavierStokesProjection<dim>::run(const bool verbose, const unsigned int output_interval) { + ConditionalOStream verbose_cout(std::cout, verbose && Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0); + + output_results(1); + double time = t_0 + dt; + unsigned int n = 1; + while(std::abs(T - time) > 1e-10) { + time += dt; + n++; + pcout << "Step = " << n << " Time = " << time << std::endl; + + /*--- First stage of TR-BDF2 and we start by setting the proper flag ---*/ + TR_BDF2_stage = 1; + navier_stokes_matrix.set_TR_BDF2_stage(TR_BDF2_stage); + for(unsigned int level = 0; level < triangulation.n_global_levels(); ++level) + mg_matrices[level].set_TR_BDF2_stage(TR_BDF2_stage); + + verbose_cout << " Interpolating the velocity stage 1" << std::endl; + interpolate_velocity(); + + verbose_cout << " Diffusion Step stage 1 " << std::endl; + diffusion_step(); + + verbose_cout << " Projection Step stage 1" << std::endl; + project_grad(1); + u_tmp.equ(gamma*dt, u_tmp); + u_star += u_tmp; /*--- In the rhs of the projection step we need u_star + gamma*dt*grad(pres_n) and we save it into u_star ---*/ + projection_step(); + + verbose_cout << " Updating the Velocity stage 1" << std::endl; + u_n_gamma.equ(1.0, u_star); + project_grad(2); + grad_pres_int.equ(1.0, u_tmp); /*--- We save grad(pres_int), because we will need it soon ---*/ + u_tmp.equ(-gamma*dt, u_tmp); + u_n_gamma += u_tmp; /*--- u_n_gamma = u_star - gamma*dt*grad(pres_int) ---*/ + u_n_minus_1 = u_n; + + /*--- Second stage of TR-BDF2 ---*/ + TR_BDF2_stage = 2; + for(unsigned int level = 0; level < triangulation.n_global_levels(); ++level) + mg_matrices[level].set_TR_BDF2_stage(TR_BDF2_stage); + navier_stokes_matrix.set_TR_BDF2_stage(TR_BDF2_stage); + + verbose_cout << " Interpolating the velocity stage 2" << std::endl; + interpolate_velocity(); + + verbose_cout << " Diffusion Step stage 2 " << std::endl; + diffusion_step(); + + verbose_cout << " Projection Step stage 2" << std::endl; + u_tmp.equ((1.0 - gamma)*dt, grad_pres_int); + u_star += u_tmp; /*--- In the rhs of the projection step we need u_star + (1 - gamma)*dt*grad(pres_int) ---*/ + projection_step(); + + verbose_cout << " Updating the Velocity stage 2" << std::endl; + u_n.equ(1.0, u_star); + project_grad(1); + u_tmp.equ((gamma - 1.0)*dt, u_tmp); + u_n += u_tmp; /*--- u_n = u_star - (1 - gamma)*dt*grad(pres_n) ---*/ + + const double max_vel = get_maximal_velocity(); + pcout<< "Maximal velocity = " << max_vel << std::endl; + /*--- The Courant number is computed taking into account the polynomial degree for the velocity ---*/ + pcout << "CFL = " << dt*max_vel*(EquationData::degree_p + 1)* + std::sqrt(dim)/GridTools::minimal_cell_diameter(triangulation) << std::endl; + compute_lift_and_drag(); + if(n % output_interval == 0) { + verbose_cout << "Plotting Solution final" << std::endl; + output_results(n); + } + /*--- In case dt is not a multiple of T, we reduce dt in order to end up at T ---*/ + if(T - time < dt && T - time > 1e-10) { + dt = T - time; + navier_stokes_matrix.set_dt(dt); + for(unsigned int level = 0; level < triangulation.n_global_levels(); ++level) + mg_matrices[level].set_dt(dt); + } + /*--- Perform the refinement if desired ---*/ + if(refinement_iterations > 0 && n % refinement_iterations == 0) { + verbose_cout << "Refining mesh" << std::endl; + refine_mesh(); + } + } + if(n % output_interval != 0) { + verbose_cout << "Plotting Solution final" << std::endl; + output_results(n); + } + if(refinement_iterations > 0) { + for(unsigned int lev = 0; lev < triangulation.n_global_levels() - 1; ++ lev) + interpolate_max_res(lev); + save_max_res(); + } + } + +} // namespace NS_TRBDF2 + + +// @sect{ The main function } + +// The main function looks very much like in all the other tutorial programs. We first initialize MPI, +// we initialize the class 'NavierStokesProjection' with the dimension as template parameter and then +// let the method 'run' do the job. +// +int main(int argc, char *argv[]) { + try { + using namespace NS_TRBDF2; + + RunTimeParameters::Data_Storage data; + data.read_data("parameter-file.prm"); + + Utilities::MPI::MPI_InitFinalize mpi_init(argc, argv, -1); + + const auto& curr_rank = Utilities::MPI::this_mpi_process(MPI_COMM_WORLD); + deallog.depth_console(data.verbose && curr_rank == 0 ? 2 : 0); + + NavierStokesProjection<2> test(data); + test.run(data.verbose, data.output_interval); + + if(curr_rank == 0) + std::cout << "----------------------------------------------------" + << std::endl + << "Apparently everything went fine!" << std::endl + << "Don't forget to brush your teeth :-)" << std::endl + << std::endl; + + return 0; + } + catch(std::exception &exc) { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Exception on processing: " << std::endl + << exc.what() << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + return 1; + } + catch(...) { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Unknown exception!" << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + return 1; + } + +} diff --git a/NavierStokes_TRBDF2_DG/parameter-file.prm b/NavierStokes_TRBDF2_DG/parameter-file.prm new file mode 100644 index 0000000..f41c5c2 --- /dev/null +++ b/NavierStokes_TRBDF2_DG/parameter-file.prm @@ -0,0 +1,39 @@ +subsection Physical data + # In this subsection we declare the physical data + # The initial and final time, and the Reynolds number + set initial_time = 0.0 + set final_time = 400.0 + set Reynolds = 100.0 +end + +subsection Time step data + # In this subsection we declare the data that is to be used for time discretization, + # i.e. the time step dt + set dt = 5.0e-3 +end + +subsection Space discretization + # In this subsection we declare the data that is relevant to the space discretization + # we set the number of global refines the triangulation must have + # and the degree k of the pair Q_(k+1)--Q_k of velocity--pressure finite element spaces + set n_of_refines = 4 + set max_loc_refinements = 3 + set min_loc_refinements = 1 +end + +subsection Data solve + # In this section we declare the parameters that are going to control the solution process + # for the velocity. + set max_iterations = 10000 # maximal number of iterations that linear solvers must make + set eps = 1e-8 # stopping criterion +end + +set saving directory = SimTest + +set refinement_iterations = 0 + +#The output frequency +set output_interval = 500 + +#Finally we set the verbosity level +set verbose = true diff --git a/NavierStokes_TRBDF2_DG/runtime_parameters.h b/NavierStokes_TRBDF2_DG/runtime_parameters.h new file mode 100644 index 0000000..acbe846 --- /dev/null +++ b/NavierStokes_TRBDF2_DG/runtime_parameters.h @@ -0,0 +1,182 @@ +// We start by including all the necessary deal.II header files +// +#include <deal.II/base/parameter_handler.h> + +// @sect{Run time parameters} +// +// Since our method has several parameters that can be fine-tuned we put them +// into an external file, so that they can be determined at run-time. +// +namespace RunTimeParameters { + using namespace dealii; + + class Data_Storage { + public: + Data_Storage(); + + void read_data(const std::string& filename); + + double initial_time; + double final_time; + + double Reynolds; + double dt; + + unsigned int n_refines; /*--- Number of refinements ---*/ + unsigned int max_loc_refinements; /*--- Number of maximum local refinements allowed ---*/ + unsigned int min_loc_refinements; /*--- Number of minimum local refinements allowed + once reached that level ---*/ + + /*--- Parameters related to the linear solver ---*/ + unsigned int max_iterations; + double eps; + + bool verbose; + unsigned int output_interval; + + std::string dir; /*--- Auxiliary string variable for output storage ---*/ + + unsigned int refinement_iterations; /*--- Auxiliary variable about how many steps perform remeshing ---*/ + + protected: + ParameterHandler prm; + }; + + // In the constructor of this class we declare all the parameters in suitable (but arbitrary) subsections. + // + Data_Storage::Data_Storage(): initial_time(0.0), + final_time(1.0), + Reynolds(1.0), + dt(5e-4), + n_refines(0), + max_loc_refinements(0), + min_loc_refinements(0), + max_iterations(1000), + eps(1e-12), + verbose(true), + output_interval(15), + refinement_iterations(0) { + prm.enter_subsection("Physical data"); + { + prm.declare_entry("initial_time", + "0.0", + Patterns::Double(0.0), + " The initial time of the simulation. "); + prm.declare_entry("final_time", + "1.0", + Patterns::Double(0.0), + " The final time of the simulation. "); + prm.declare_entry("Reynolds", + "1.0", + Patterns::Double(0.0), + " The Reynolds number. "); + } + prm.leave_subsection(); + + prm.enter_subsection("Time step data"); + { + prm.declare_entry("dt", + "5e-4", + Patterns::Double(0.0), + " The time step size. "); + } + prm.leave_subsection(); + + prm.enter_subsection("Space discretization"); + { + prm.declare_entry("n_of_refines", + "100", + Patterns::Integer(0, 1500), + " The number of cells we want on each direction of the mesh. "); + prm.declare_entry("max_loc_refinements", + "4", + Patterns::Integer(0, 10), + " The number of maximum local refinements. "); + prm.declare_entry("min_loc_refinements", + "2", + Patterns::Integer(0, 10), + " The number of minimum local refinements. "); + } + prm.leave_subsection(); + + prm.enter_subsection("Data solve"); + { + prm.declare_entry("max_iterations", + "1000", + Patterns::Integer(1, 30000), + " The maximal number of iterations linear solvers must make. "); + prm.declare_entry("eps", + "1e-12", + Patterns::Double(0.0), + " The stopping criterion. "); + } + prm.leave_subsection(); + + prm.declare_entry("refinement_iterations", + "0", + Patterns::Integer(0), + " This number indicates how often we need to " + "refine the mesh"); + + prm.declare_entry("saving directory", "SimTest"); + + prm.declare_entry("verbose", + "true", + Patterns::Bool(), + " This indicates whether the output of the solution " + "process should be verbose. "); + + prm.declare_entry("output_interval", + "1", + Patterns::Integer(1), + " This indicates between how many time steps we print " + "the solution. "); + } + + // We need now a routine to read all declared parameters in the constructor + // + void Data_Storage::read_data(const std::string& filename) { + std::ifstream file(filename); + AssertThrow(file, ExcFileNotOpen(filename)); + + prm.parse_input(file); + + prm.enter_subsection("Physical data"); + { + initial_time = prm.get_double("initial_time"); + final_time = prm.get_double("final_time"); + Reynolds = prm.get_double("Reynolds"); + } + prm.leave_subsection(); + + prm.enter_subsection("Time step data"); + { + dt = prm.get_double("dt"); + } + prm.leave_subsection(); + + prm.enter_subsection("Space discretization"); + { + n_refines = prm.get_integer("n_of_refines"); + max_loc_refinements = prm.get_integer("max_loc_refinements"); + min_loc_refinements = prm.get_integer("min_loc_refinements"); + } + prm.leave_subsection(); + + prm.enter_subsection("Data solve"); + { + max_iterations = prm.get_integer("max_iterations"); + eps = prm.get_double("eps"); + } + prm.leave_subsection(); + + dir = prm.get("saving directory"); + + refinement_iterations = prm.get_integer("refinement_iterations"); + + verbose = prm.get_bool("verbose"); + + output_interval = prm.get_integer("output_interval"); + } + +} // namespace RunTimeParameters -- 2.39.5