]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Update the changelog file for the release.
authorMatthias Maier <tamiko@43-1.org>
Tue, 12 May 2020 16:58:22 +0000 (11:58 -0500)
committerMatthias Maier <tamiko@43-1.org>
Tue, 12 May 2020 16:58:53 +0000 (11:58 -0500)
doc/news/9.1.1-vs-9.2.0.h [new file with mode: 0644]

diff --git a/doc/news/9.1.1-vs-9.2.0.h b/doc/news/9.1.1-vs-9.2.0.h
new file mode 100644 (file)
index 0000000..de1d08d
--- /dev/null
@@ -0,0 +1,2579 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2017 - 2020 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE.md at
+// the top level directory of deal.II.
+//
+// ---------------------------------------------------------------------
+
+/**
+@page changes_between_9_1_1_and_9_2_0 Changes between Version 9.1.1 and 9.2.0
+
+<p>
+This is the list of changes made between the release of deal.II version
+9.1.1 and that of 9.2.0. All entries are signed with the names of the
+author.
+</p>
+
+
+
+<!-- ----------- INCOMPATIBILITIES ----------------- -->
+
+<a name="incompatible"></a>
+<h3 style="color:red">Incompatibilities</h3>
+
+<p style="color:red">
+Following are a few modifications to the library that unfortunately
+are incompatible with previous versions of the library, but which we
+deem necessary for the future maintainability of the
+library. Unfortunately, some of these changes will require
+modifications to application programs. We apologize for the
+inconvenience this causes.
+</p>
+
+<ol>
+
+ <li>
+  Changed: The operator `std::ostream << Vector` was implemented by
+  calling Vector::print() with default arguments. This implies a
+  particular formatting of the output that was independent of the flags
+  set on the output stream (in particular relating to how floating point
+  numbers are to be formatted), and also added a newline to the end of
+  the output. Both the formatting and the newline are decisions that are
+  better made by the user at the location where the output is
+  requested. As a consequence, the behavior has now been changed:
+  `operator<<` now simply outputs all elements of the vector as
+  individual numbers for which the output stream flags are respected,
+  and separated by a single space; no endline is appended to the output
+  any more.
+  <br>
+  (Wolfgang Bangerth, 2020/05/05)
+ </li>
+
+ <li>
+  Removed: The function `MeshWorker::CopyData::operator=(const double)` has been
+  removed, as resetting the state of the `copier` from within a `boundary_worker`
+  or `face_worker` is not permitted and can lead to hard to trace bugs within a
+  user's code.
+  <br>
+  (Jean-Paul Pelteret, 2020/04/30)
+ </li>
+
+ <li>
+  Removed: The deprecated functions numbers::is_nan() and
+  SLEPcWrappers::SolverBase::set_initial_vector() have been removed.
+  <br>
+  (Daniel Arndt, 2020/04/24)
+ </li>
+
+ <li>
+  Removed: The deprecated member functions domain_partitioner(),
+  vector_partitioner() and range_partitioner() in TrilinosWrappers classes have
+  been removed.
+  <br>
+  (Daniel Arndt, 2020/04/24)
+ </li>
+
+ <li>
+  Removed: The deprecated TrilinosWrappers matrix and sparsity patterns and
+  reinitialization functions have been removed.
+  <br>
+  (Daniel Arndt, 2020/04/22)
+ </li>
+
+ <li>
+  Removed: The deprecated member functions PETScWrappers::VectorBase::ratio() and
+  Vector::ratio() have been removed.
+  <br>
+  (Daniel Arndt, 2020/04/17)
+ </li>
+
+ <li>
+  Changed: The header file `deal.II/fe/fe_q.h` is not included implicitly via
+  `deal.II/fe/mapping_q_generic.h` any more. Add the header
+  `deal.II/fe/fe_q.h` if necessary.
+  <br>
+  (Martin Kronbichler, 2020/04/16)
+ </li>
+
+ <li>
+  Removed: The deprecated Vector::print overloads have been removed.
+  <br>
+  (Daniel Arndt, 2020/04/15)
+ </li>
+
+ <li>
+  Removed: For LinearAlgebra::distributed::Vector, deprecated overloads of the
+  member operator=(), sadd(), equ(), local_range(), n_ghost_entries(),
+  ghost_elements() and ghost_entries() have been removed.
+  <br>
+  (Daniel Arndt, 2020/04/13)
+ </li>
+
+ <li>
+  Removed: The deprecated member functions
+  FiniteElement::has_generalized_face_support_points()
+  and FiniteElement::get_generalized_face_support_points() have been removed.
+  <br>
+  (Daniel Arndt, 2020/04/13)
+ </li>
+
+ <li>
+  Removed: The deprecated functions Utilities::fixed_int_power(),
+  LinearAlgebra::distributed::BlockVector::equ(),
+  LinearAlgebra::distributed::BlockVector::sadd()
+  and FEEvaluationBase::get_cell_data_number() and the deprecated variable
+  DoFHandler::invalid_dof_index and hp::DoFHandler::invalid_dof_index have been
+  removed.
+  <br>
+  (Daniel Arndt, 2020/04/08)
+ </li>
+
+ <li>
+  Changed: The FETools::lexicographic_to_hierarchic_numbering() and
+  FETools::hierarchic_to_lexicographic_numbering() functions now take a single
+  integer for the degree of the associated FE_Q element and return the
+  numbering. The old functions taking the result array as the last argument and
+  the ones taking a FiniteElementData as an argument have been deprecated in
+  favor of the simpler setup with the degree.
+  <br>
+  (Martin Kronbichler, 2020/04/07)
+ </li>
+
+ <li>
+  Removed: The deprecated class PArpackSolver::Shift has been removed.
+  Use LinearOperator instead.
+  <br>
+  (Daniel Arndt, 2020/04/04)
+ </li>
+
+ <li>
+  Removed: The deprecated classes PointerMatrixBase, PointerMatrix,
+  PointerMatrixVector and PointerMatrixAux and the related function
+  new_pointer_matrix_base() have been removed. Use LinearOperator instead.
+  <br>
+  (Daniel Arndt, 2020/04/02)
+ </li>
+
+ <li>
+  Removed: The deprecated FilteredMatrix class has been removed.
+  Use the LinearOperator class instead.
+  <br>
+  (Daniel Arndt, 2020/04/01)
+ </li>
+
+ <li>
+  Removed: The deprecated class SwappableVector has been removed.
+  <br>
+  (Daniel Arndt, 2020/03/31)
+ </li>
+
+ <li>
+  Removed: The deprecated member function Multigrid::set_debug() has been removed.
+  Use the various Multigrid::connect_* functions instead.
+  <br>
+  (Daniel Arndt, 2020/03/30)
+ </li>
+
+ <li>
+  Removed: The deprecated classes BlockMatrixArray (and derived classes) and MeanValueFilter
+  have been removed. Use BlockLinearOperator instead.
+  <br>
+  (Daniel Arndt, 2020/03/28)
+ </li>
+
+ <li>
+  Removed: The deprecated member function
+  LAPACKFullMatrix::apply_lu_factorization() has been removed. Use
+  LAPACKFullMatrix::solve() instead.
+  <br>
+  (Daniel Arndt, 2020/03/27)
+ </li>
+
+ <li>
+  Removed: The deprecated member function Triangulation::set_manifold() taking
+  one parameter has been removed. Use Triangulation::reset_manifold() instead.
+  <br>
+  (Daniel Arndt, 2020/03/27)
+ </li>
+
+ <li>
+  Removed: The deprecated functions DoFHandler::distribute_mg_dofs() and
+  MGTransferPrebuilt::initialize_constraints() and deprecated constructors for
+  MGSmootherBlock, MGTransferPrebuilt, MGTransferBlockBase and
+  MGTransferBlockSelect have been removed.
+  <br>
+  (Daniel Arndt, 2020/03/27)
+ </li>
+
+ <li>
+  Removed: The deprecated member functions Timer::get_data(),
+  Timer::get_total_data(), Timer::print_data(), Timer::print_total_data() and
+  Timer::operator(), Timer::get_lap_time() have been removed. Use
+  Timer::get_last_lap_wall_time_data(), Timer::get_accumulated_wall_time_data(),
+  Timer::print_last_lap_wall_time_data(),
+  Timer::print_accumulated_wall_time_data() and
+  Timer::cpu_time() and Timer::last_wall_time() instead.
+  <br>
+  (Daniel Arndt, 2020/03/27)
+ </li>
+
+ <li>
+  Removed: The deprecated method hp::DoFHandler::get_fe() has been removed. Please use
+  hp::DoFHandler::get_fe_collection() instead.
+  <br>
+  (Peter Munch, 2020/03/26)
+ </li>
+
+ <li>
+  Changed: The function ParameterHandler::parse_input() can now also parse xml- and json-files,
+  depending on the file suffix. From now on, only files ending with .prm are treated as standard
+  parameter files.
+  <br>
+  (Niklas Fehn, Peter Munch, 2020/03/26)
+ </li>
+
+ <li>
+  Removed: The deprecated function Utilities::MPI_Partitioner::get_communicator()
+  has been removed. Use Utilities::MPI::Partitioner::get_mpi_communicator()
+  instead.
+  <br>
+  (Daniel Arndt, 2020/03/26)
+ </li>
+
+ <li>
+  Removed: ParameterHandler::print_parameters_section been removed.
+  <br>
+  (Daniel Arndt, 2020/03/26)
+ </li>
+
+ <li>
+  Removed: The deprecated function MGLevelObject::clear() has been removed.
+  Use MGLevelObject::clear_elements() instead.
+  <br>
+  (Daniel Arndt, 2020/03/26)
+ </li>
+
+ <li>
+  Removed: The deprecated FEValuesBase::get_all_normal_vectors() function has been
+  removed. Use FEValuesBase::get_normal_vectors() instead.
+  <br>
+  (Daniel Arndt, 2020/03/26)
+ </li>
+
+ <li>
+  Deprecated: SparsityTools::distribute_sparsity_pattern() and
+  SparsityTools::gather_sparsity_pattern() taking the locally owned index sets
+  of all processes as second arguments have been deprecated. Use the respective
+  functions only providing the locally owned dofs of the calling process.
+  <br>
+  (Martin Kronbichler, 2020/03/22)
+ </li>
+
+ <li>
+  Chaned: VectorizedArray::n_array_elements has been deprecated.
+  Please use the method VectorizedArray::size() to access the same information.
+  <br>
+  (Peter Munch, 2020/03/20)
+ </li>
+
+ <li>
+  New: The underlying type for types::global_dof_index used to be
+  `unsigned long long int`. On all reasonable systems, this is actually
+  a 64-bit unsigned integer type, but the name wouldn't tell you that
+  unless you already knew. This is now fixed: Instead of the mouthful
+  of a type, we now use the more concise `uint64_t`: An unsigned integer
+  type with exactly 64 bits of accuracy.
+  <br>
+  Strictly speaking, this may be an incompatible change: On some
+  systems, `unsigned long long int` and `uint64_t` may have the same
+  size, but are not the same type. In practice, as long as you have used
+  the type `types::global_dof_index`, you will not see any difference at
+  all.
+  <br>
+  (Wolfgang Bangerth, 2020/03/01)
+ </li>
+
+ <li>
+  Removed: The DataOutBase namespace contained a number of `write_*`
+  functions that had already been deprecated in deal.II 9.1. These were
+  removed, but all were of mostly internal interest and unlikely to be
+  used in user programs.
+  <br>
+  (Wolfgang Bangerth, 2020/02/05)
+ </li>
+
+ <li>
+  Changed: FESeries::Fourier and FESeries::Legendre now require to use an
+  individual number of coefficients per direction for each finite element
+  registered in the provided FECollection.
+  <br>
+  (Marc Fehling, 2020/01/22)
+ </li>
+
+ <li>
+  Changed: Adjusted ranges for GridRefinement::refine_and_coarsen_fixed_fraction():
+  Now criteria of every cell will be considered.
+  <br>
+  (Marc Fehling, 12/05/2019)
+ </li>
+
+ <li>
+  Changed: Adjusted threshold for fixed number adaptation: The last qualifying
+  cells for refinement and coarsening now specify their respective threshold.
+  This affects both GridRefinement::fixed_number_refinement() and
+  parallel::distributed::GridRefinement::fixed_number_refinement().
+  <br>
+  (Marc Fehling, 12/05/2019)
+ </li>
+
+ <li>
+  Removed: The type alias FunctionParser::ConstMapIterator has been removed.
+  <br>
+  (David Wells, 2019/12/05)
+ </li>
+
+ <li>
+  Deprecated: The include files in `deal.II/base/std_cxx11` have been
+  deprecated. Just use the corresponding C++11 header files.
+  <br>
+  (Wolfgang Bangerth, 2019/08/21)
+ </li>
+
+ <li>
+  Removed: The include files in `include/deal.II/base/std_cxx1x`,
+  deprecated since 2014, have been removed. They had introduced a
+  namespace `std_cxx1x` at a time when deal.II did not yet require
+  C++11-compatible compilers, and this namespace was later also made
+  available via the name `std_cxx11` once C++11 was actually
+  published. In any case, none of this is necessary any more since we
+  now have C++11 compilers.
+  <br>
+  (Wolfgang Bangerth, 2019/12/02)
+ </li>
+
+ <li>
+  Removed: The deprecated method MatrixFree::get_size_info() has been removed.
+  Please use the method MatrixFree::get_task_info() to access the same information.
+  <br>
+  (Peter Munch, 2019/12/01)
+ </li>
+
+ <li>
+  Removed: The typedefs DataOut::active_cell_iterator and
+  DataOut_DoFData::active_cell_iterator have been removed. These typedefs are
+  an implementational detail that should have never exposed in the interface.
+  <br>
+  (Matthias Maier, 2019/11/25)
+ </li>
+
+ <li>
+  Changed: The variable level_mg_handler has been renamed
+  to mg_level in MatrixFree and its associated AdditionalData.
+  <br>
+  (Peter Munch, 2019/10/17)
+ </li>
+
+ <li>
+  Changed: The type of exact_solution in VectorTools::integrate_difference() was
+  double and fe_function could have any numerical type (double, float,
+  std::complex<double> or std::complex<float>). This would lead in certain cases
+  to unnecessary casts, for
+  example from double to float. In addition it was not
+  possible to compare a std::complex exact_solution to a std::complex fe_function.
+  Now the types of exact_solution and fe_function must be the same, as a result
+  integrate_difference() can be used to compare a
+  std::complex exact_solution to
+  a std::complex fe_function. The old version of the function has been deprecated.
+  <br>
+  (Daniel Garcia-Sanchez, 2019/10/09)
+ </li>
+
+ <li>
+  Changed: Several variations of the
+  DoFTools::make_periodicity_constraints() function expressed the
+  `direction` as an `int` variable. But it's really an unsigned
+  quantity, and as a consequence was changed to `unsigned int`.
+  <br>
+  (Wolfgang Bangerth, 2019/09/26)
+ </li>
+
+ <li>
+  Changed: The parallel::TriangulationBase class does not store the number of active cells
+  of all MPI processes any more. Instead, the information is computed on-demand when calling
+  the function parallel::TriangulationBase::compute_n_locally_owned_active_cells_per_processor.
+  <br>
+  (Peter Munch, 2019/09/20)
+ </li>
+
+ <li>
+  Removed: The enum TimestepControl::Strategy is removed.
+  <br>
+  (Reza Rastak, 2019/09/18)
+ </li>
+
+ <li>
+  Changed: The
+  Algorithms::TimeStepControl::file_name_format() functions have been
+  removed. They were setters and getters for an internal field of that
+  class that turned out to be unused anywhere -- in other words, the
+  functions had no real functionality.
+  <br>
+  (Wolfgang Bangerth, 2019/09/18)
+ </li>
+
+ <li>
+  Removed: BlockVectorBase::equ(a, U, b, V) is removed.
+  <br>
+  (Reza Rastak, 2019/09/03)
+ </li>
+
+ <li>
+  Changed: The interface to the parallel::CellWeights class was generalized
+  by introducing static member functions. This way, users are capable of
+  connecting and disconnecting callback functions manually if desired without
+  instantiating an object of this class. The legacy interface has been deprecated.
+  <br>
+  (Marc Fehling, 2019/09/03)
+ </li>
+
+ <li>
+  Changed: A number of classes implementing tensor-valued polynomials
+  had a member function called `compute_n_pols()`. This name has now
+  been changed to `n_polynomials()`, better reflecting our usual naming
+  scheme as well as what the function does -- which in many cases is not
+  actually computing but just returning something.
+  <br>
+  (Wolfgang Bangerth, 2019/08/2)
+ </li>
+
+ <li>
+  Changed: The complex operator overloads for multiplication and division are
+  restricted to floating point types.
+  <br>
+  (Daniel Arndt, 2019/08/21)
+ </li>
+
+ <li>
+  Changed: Various classes implementing tensor polynomials had a
+  function `compute()`. This function has been renamed to `evaluate()`
+  since this name more adequately represents the fact that the function
+  does not in fact compute the polynomial, but only evaluates it for a
+  given value of the unknown variable.
+  <br>
+  (Wolfgang Bangerth, 2019/08/21)
+ </li>
+
+ <li>
+  Changed: The parallel::Triangulation class has been renamed to parallel::TriangulationBase
+  to better reflect its purpose of a base to a series of parallel triangulations such as
+  parallel::distributed::Triangulation or parallel::shared::Triangulation.
+  <br>
+  (Peter Munch, 2019/08/19)
+ </li>
+
+ <li>
+  Replaced: boost::optional was replaced by std_cxx17::optional that wraps the
+  former and std::optional depending on compiler support for C++17.
+  <br>
+  (Daniel Arndt, 2019/08/17)
+ </li>
+
+ <li>
+  Changed: The test suite now requires numdiff (i.e., it cannot be run with
+  simply diff).
+  <br>
+  (David Wells, 2019/08/10)
+ </li>
+
+ <li>
+  Improved: CellDataStorage stores a reference to a single unique triangulation
+  to ensure that cells from other triangulations cannot store any data on the
+  current object.
+  <br>
+  (Reza Rastak, 2019/08/08)
+ </li>
+
+ <li>
+  Changed: mapping.h referred to different kinds of mappings in an enum
+  MappingType; however, since it's an enum, MappingType is a misleading name.
+  All instances of MappingType and mapping_type have been changed to
+  MappingKind and mapping_kind, respectively. The documentation has been
+  updated in order to reflect these changes as well.
+  <br>
+  (Graham Harper, 2019/08/06)
+ </li>
+
+ <li>
+  Changed: The GridOut::write_svg() function now no longer outputs the
+  cell level and number by default; this also obviates the need for the
+  colorbar and the caption. This is achieved by changing the defaults in
+  the constructor of the GridOutFlags::Svg structure. This likely comes
+  closer to what most users want to see from this function -- namely,
+  just the mesh for inclusion into text.
+  <br>
+  (Wolfgang Bangerth, 2019/08/05)
+ </li>
+
+ <li>
+  Removed: The deprecated PreconditionChebyshev member variables nonzero_strarting
+  and matrix_diagonal_inverse were removed.
+  <br>
+  (Daniel Arndt, 2019/07/11)
+ </li>
+
+ <li>
+  Changed: The CoarseningStrategies struct has been moved out of the
+  parallel::distributed::CellDataTransfer class into a separate header and
+  is now treated as a namespace. Its static member functions are now free
+  functions and only take a `std::vector` as a parameter that contains all
+  the data from the children. Therefore, the `coarsening_strategy`
+  parameter for the constructor of the
+  parallel::distributed::CellDataTransfer class has to be adjusted
+  accordingly as well.
+  <br>
+  (Marc Fehling, 2019/06/26)
+ </li>
+
+ <li>
+  Removed: The deprecated headers `deal.II/grid/tria_boundary.h` and
+  `deal.II/grid/tria_boundary_lib.h` have been removed.
+  <br>
+  (Martin Kronbichler, 2019/06/13)
+ </li>
+
+ <li>
+  Fixed: During coarsening, we need to decide which finite element is assigned
+  to parent cells. The decision criterion was not consistent, but is now unified:
+  The least dominant element of their children will be picked, according to
+  hp::FECollection::find_dominated_fe_extended(). This affects the implementations
+  of SolutionTransfer, parallel::distributed::SolutionTransfer, parallel::CellWeights,
+  and hp::DoFHandler.
+  <br>
+  (Marc Fehling, 2019/06/06)
+ </li>
+
+ <li>
+  Changed: The functions DoFHandler::n_locally_owned_dofs_per_processor(),
+  DoFHandler::locally_owned_dofs_per_processor() and
+  DoFHandler::locally_owned_mg_dofs_per_processor() previously returned a
+  reference to an internally stored array of index sets on all processors. As
+  this cannot scale to large processor counts, these functions have been marked
+  deprecated and only populate the internal vectors on the first demand. This
+  means that the first call must be a collective call on all MPI ranks to ensure
+  that the underlying MPI_Allgather function completes. Use the
+  new functions DoFHandler::compute_n_locally_owned_dofs_per_processor(),
+  DoFHandler::compute_locally_owned_dofs_per_processor() and
+  DoFHandler::compute_locally_owned_mg_dofs_per_processor() instead or, even
+  better for scalability, avoid them in favor of some local communication.
+  <br>
+  (Martin Kronbichler, 2019/06/03)
+ </li>
+
+</ol>
+
+
+<!-- ----------- GENERAL IMPROVEMENTS ----------------- -->
+
+<a name="general"></a>
+<h3>General</h3>
+
+<ol>
+
+ <li>
+  New: The new Differentiation::SD::BatchOptimizer class can be used to accelerate
+  (in some cases, significantly) evaluation of the symbolic expressions using an
+  assortment of techniques. At the moment, this includes using common
+  subexpression elimination to prevent, as much as possible, repetitive evaluation
+  of subexpressions that are found in one or more expressions. The expressions
+  may also be transformed into other equivalent data structures that are simply
+  less computationally costly than their original symbolic expression tree.
+  It is also possible to compile a set of expressions using the LLVM JIT compiler,
+  rendering near-native evaluation performance at the cost of the compilation
+  itself.
+  <br>
+  (Jean-Paul Pelteret, 2020/05/02)
+ </li>
+
+ <li>
+  New: The Step-50 tutorial has been updated. We discuss how to
+  use the multilevel preconditioner from step-16 in parallel and
+  give a comparison of parallel scaling between GMG and AMG for
+  a 3D Laplace example where adaptive refinement comes from a
+  residual-based, cell-wise a posteriori error estimator.
+  <br>
+  (Thomas C. Clevenger, Timo Heister, 2020/04/20)
+ </li>
+
+ <li>
+  New: The step-58 tutorial program demonstrates the solution of the
+  nonlinear Schr&ouml;dinger equation.
+  <br>
+  (Wolfgang Bangerth, Yong-Yong Cai, 2020/04/15)
+ </li>
+
+ <li>
+  New: The DataOut class has learned to deal with complex-valued
+  solution vectors in all regards. This includes writing the real and
+  imaginary parts of not only scalar complex-valued fields, but also
+  complex-valued vector and tensor fields. DataOut can now also pass
+  such fields to classes derived from DataPostprocessor.
+  <br>
+  (Wolfgang Bangerth, 2020/04/03)
+ </li>
+
+ <li>
+  New: The step-53 tutorial in the form of a Jupyter notebook
+  using deal.II Python interface.
+  <br>
+  (Alexander Grayver, 2020/03/30)
+ </li>
+
+ <li>
+  New: The step-67 tutorial program presents an explicit time integrator for the
+  compressible Euler equations discretized with a high-order discontinuous
+  Galerkin scheme using the matrix-free infrastructure. Besides the use of
+  matrix-free evaluators for systems of equations and over-integration, it also
+  presents MatrixFreeOperators::CellwiseInverseMassMatrix, a fast implementation
+  of the action of the inverse mass matrix in the DG setting using tensor
+  products.
+  <br>
+  (Martin Kronbichler, 2020/03/28)
+ </li>
+
+ <li>
+  Removed: The outdated \step-19 that was used to combine parallel visualization
+  output after a simulation has been removed. The DataOut class can be used for
+  parallel output.
+  <br>
+  (Timo Heister, 2020/03/18)
+ </li>
+
+ <li>
+  New: The step-69 tutorial program presents a first-order accurate
+  <i>guaranteed maximum wavespeed method</i> based on a first-order <i>graph
+  viscosity</i> for solving Euler's equations of gas dynamics. It introduces
+  and discusses number of interesting programming techniques: hybrid
+  parallelization (MPI + task based thread parallelization); the use of
+  non-distributed deal.II matrices in an MPI parallel context with index
+  rewriting; offline data preprocessing; background-thread offloading for
+  output; and checkpointing/restore.
+  <br>
+  (Matthias Maier, Ignacio Tomas, 2020/02/19)
+ </li>
+
+ <li>
+  Fixed: Large computations with more than 4 Billion cells or DoFs
+  would run into issues in various situations. Bugs in BlockVector,
+  Triangulation, Multigrid, GridRefinement, and other places are
+  now fixed.
+  <br>
+  (Thomas Clevenger, Timo Heister, Martin Kronbichler, Peter Munch, 2020/02/19)
+ </li>
+
+ <li>
+  New: The step-49 tutorial in the form of a Jupyter notebook
+  using deal.II Python interface.
+  <br>
+  (Alexander Grayver, 2020/02/12)
+ </li>
+
+ <li>
+  New: The step-47 tutorial program demonstrates the solution of the
+  biharmonic equation, a fourth-order differential equation.
+  <br>
+  (Natasha Sharma, Guido Kanschat, Timo Heister, Wolfgang Bangerth, Zhuoran Wang, 2020/01/15)
+ </li>
+
+ <li>
+  New: The SymbolicFunction<dim> class allows one to leaverage the SymEngine library to generate
+  dealii::Function objects where the gradients, Laplacians, and Hessians are computed symbolically
+  providing also the possibility to extract the time derivative of the SymbolicFunction<dim> object
+  as another SymbolicFunction<dim> object.
+  <br>
+  (Luca Heltai, 2019/12/14)
+ </li>
+
+ <li>
+  New: Implementation of the IDR(s) Krylov solver for non-symmetric,
+  indefinite linear systems.
+  <br>
+  (Thomas Clevenger, 2019/12/05)
+ </li>
+
+ <li>
+  New: ParticleHandler::insert_global_particles() allows one to pass to a ParticleHandler object a vector
+  of positions and a vector of properties to insert. Differently from the other insert* methods,
+  this one allows particles to fall within artificial cells. In this case, the method infers who
+  should receive the positions and the properties, and sends this information to that process.
+  This is useful when constructing particles from non-matching triangulations, where the
+  distribution of the particle positions is arbitrary, and possibly not related to the locally owned cells.
+  <br>
+  (Luca Heltai, Bruno Blais, 2019/11/25)
+ </li>
+
+ <li>
+  New: Add new GridGenerator tool to create a C-type mesh around a NACA or
+  Joukowski airfoil.
+  <br>
+  (Elias Dejene, Peter Munch, 2019/11/12)
+ </li>
+
+ <li>
+  New: Namespace SmoothnessEstimator providing smoothness estimation strategies
+  for hp-adaptive FEM based on Fourier and Legendre series expansions.
+  <br>
+  (Marc Fehling, Denis Davydov, 2019/10/30)
+ </li>
+
+ <li>
+  New: The step-12 tutorial program has been changed to use
+  FEInterfaceValues. The old version of step-12 is still available as step-12b.
+  <br>
+  (Timo Heister, 2019/08/27)
+ </li>
+
+ <li>
+  New: The FEInterfaceValues class provides a new abstraction to assemble
+  interface terms between two neighboring cells. This is commonly used in
+  Discontinous Galerkin methods.
+  <br>
+  (Timo Heister, 2019/08/24)
+ </li>
+
+ <li>
+  New: Introduce a new distributed triangulation class parallel::fullydistributed::Triangulation.
+  It partitions the coarse-grid as well as works for hanging nodes, geometric multigrid, and
+  arbitrary dimensions.
+  <br>
+  (Peter Munch, 2019/07/26)
+ </li>
+
+ <li>
+  Improved: deal.II now bundles a subset of Boost 1.70 instead of a subset
+  of Boost 1.62.
+  <br>
+  (Daniel Arndt, 2019/07/19)
+ </li>
+
+ <li>
+  New: The step-65 tutorial program presents TransfiniteInterpolationManifold, a
+  manifold class that can propagate curved boundary information into the
+  interior of a computational domain, and MappingQCache for fast operations for
+  expensive manifolds.
+  <br>
+  (Martin Kronbichler, 2019/06/06)
+ </li>
+
+ <li>
+  New: The namespace Utilities::MPI::ConsensusAlgorithms has been added. It
+  provides efficient implementations for communication patterns (PEX and NBX) to
+  retrieve data from other processes in a dynamic-sparse way.
+  <br>
+  (Peter Munch, Martin Kronbichler, 2019/06/03)
+ </li>
+
+</ol>
+
+
+<!-- ----------- SPECIFIC IMPROVEMENTS ----------------- -->
+
+<a name="specific"></a>
+<h3>Specific improvements</h3>
+
+<ol>
+
+ <li>
+  Fixed: GridTools::find_closest_vertex_of_cell() now takes an optional mapping argument, to take into
+  account of all those cases where a mapping may modify the location of the cell vertices.
+  <br>
+  (Luca Heltai, 2020/05/10)
+ </li>
+
+ <li>
+  Fixed: Fix a bug in tutorial step-35, which caused incorrect initial condition initialization. This bug could lead to incorrect results if the user decided to edit the equation data.
+  <br>
+  (Alexey Ozeritskiy, 2020/05/09)
+ </li>
+
+ <li>
+  Fixed: FEFaceEvaluation::read_dof_values_plain() would sometimes access
+  invalid dof indices and crash or produce wrong results for cells with
+  constraints applied. This is now fixed.
+  <br> (Martin Kronbichler, Niklas Fehn, 2020/05/07)
+ </li>
+
+ <li>
+  Changed: Allow hp::DoFHandler to distribute dofs based on a triangulation class derived from parallel::DistributedTriangulationBase other than parallel::distributed::Triangulation.
+  <br>
+  (Sebastian Stark, 2020/05/06)
+ </li>
+
+ <li>
+  New: Add a flag to overlap MPI communication and computation when using CUDA
+  matrix-free and CUDA-aware MPI.
+  <br>
+  (Peter Munch and Bruno Turcksin, 2020/05/06)
+ </li>
+
+ <li>
+  Changed: The order by which MatrixFree::cell_loop() and MatrixFree::loop()
+  pass through cells has been changed to preferrably group cells with the same
+  parent into the same batch of cells with vectorization, which increases data
+  locality and slightly improves performance.
+  <br>
+  (Martin Kronbichler, 2020/05/06)
+ </li>
+
+ <li>
+  New: Codim one instantiations for make_hanging_node_constraints.
+  <br>
+  (Sebastian Stark, 2020/05/05)
+ </li>
+
+ <li>
+  Changed: Compute middle vertices during mesh refinement of Triangulation<2,3>
+  using transfinite interpolation to be consistent with what happens to quads
+  for Triangulation<3,3>
+  <br>
+  (Sebastian Stark, 2020/05/04)
+ </li>
+
+ <li>
+  Improved: MatrixFreeOperators::LaplaceOperator now also supports cell-wise
+  constant coefficient, which can be used by a Table with a single column
+  per cell.
+  <br>
+  (Martin Kronbichler, 2020/05/03)
+ </li>
+
+ <li>
+  New: ExtractLevelVisitor and extract_rtree_level() allow one to return the vector of BoundingBox objects
+  that make up a specific level of a boost::rtree object.
+  <br>
+  (Luca Heltai, 2020/05/03)
+ </li>
+
+ <li>
+  New: There is a new triad of functions FEValuesBase::dof_indices(),
+  FEValuesBase::dof_indices_starting_at() and
+  FEValuesBase::dof_indices_ending_at()
+  that makes writing range-based for loops over all local cell degrees of
+  freedom much simpler.
+  <br>
+  (Jean-Paul Pelteret, 2020/04/29)
+ </li>
+
+ <li>
+  New: There is a new function FEValuesBase::quadrature_point_indices()
+  that makes writing range-based for loops over all quadrature points of a
+  cell or face much simpler.
+  <br>
+  (Jean-Paul Pelteret, 2020/04/29)
+ </li>
+
+ <li>
+  New: Add Utilities::create_evenly_distributed_partitioning(my_partition_id, n_partitions, total_size)
+  to create a one-to-one evenly distributed ascending partitioning from total size.
+  Add Utilities::MPI::create_evenly_distributed_partitioning(comm, total_size) to use processor ID and
+  number of MPI processes to determine partitioning.
+  <br>
+  (Doug Shi-Dong, 2020/04/29)
+ </li>
+
+ <li>
+  Fixed: Copying objects of type hp::FEValuesBase and derived classes
+  led to unexpected results because both source and destination kept
+  pointers to a shared space. This is now fixed.
+  <br>
+  (Wolfgang Bangerth, 2020/04/28)
+ </li>
+
+ <li>
+  New: All FEValues objects in a hp::FEValues collection can now be
+  pre-computed with hp::FEValues::precalculate_fe_values().
+  <br>
+  (Marc Fehling, 2020/04/27)
+ </li>
+
+ <li>
+  New: ParameterAcceptor::initialize() now uses ParameterHandler::print_parameters() internally.
+  <br>
+  (Niklas Fehn, Luca Heltai, 2020/04/24)
+ </li>
+
+ <li>
+  Improved: Add Tvmult operation to PETScWrappers::PreconditionerBase.
+  <br>
+  (Daniel Garcia-Sanchez, 2020/04/22)
+ </li>
+
+ <li>
+  Improved: GridGenerator::hyper_shell() in 3d now supports more `n_cells`
+  options. While previously only 6, 12, or 96 cells were possible, the function
+  now supports any number of the kind $6 \times 2^m$ with $m$ a non-negative
+  integer. The new cases $m=2,3$ and $m\geq 5$ correspond to refinement in the
+  azimuthal direction of the 6 or 12 cell case with a single mesh layer in
+  radial direction, and are intended for shells that are thin and should be
+  given more resolution in azimuthal direction.
+  <br>
+  (Martin Kronbichler, 2020/04/07)
+ </li>
+
+ <li>
+  Fixed: VectorTools::get_position_vector would return wrong positions for
+  curved cells in the interior of the domain. This is now fixed.
+  <br> (Martin Kronbichler, Doug Shi-Dong, 2020/04/05)
+ </li>
+
+ <li>
+  New: Add new function Utilities::MPI::compute_set_union(), which computes the union of given input
+  sets and vectors of all processes in a given MPI communicator.
+  <br>
+  (Peter Munch, 2020/04/04)
+ </li>
+
+ <li>
+  New: There is a new function GridGenerator::hyper_ball_balanced() which uses a
+  more refined mesh of 12 cells in 2D and 32 in 3D to create a disk in 2D and
+  ball in 3D, producing better mesh quality than the default
+  GridGenerator::hyper_ball().
+  <br> (Martin Kronbichler, 2020/04/02)
+ </li>
+
+ <li>
+  Changed: The vertex positions of GridGenerator::quarter_hyper_ball() have been
+  slightly changed. It concerns the points along the straight faces and in the
+  interior. The new positions have been determined to balance the sizes and
+  aspect ratios (expressed by the minimal and maximal singular values of the
+  Jacobian from reference to real coordinates), producting a slightly better
+  mesh quality.
+  <br> (Martin Kronbichler, 2020/04/02)
+ </li>
+
+ <li>
+  New: Utilities::encode_base64() and Utilities::decode_base64() allow to encode and decode binary strings
+  to and from Base64 ASCII format.
+  <br>
+  (Luca Heltai, 2020/04/01)
+ </li>
+
+ <li>
+  New: Added Particles::Utilities::create_interpolation_sparsity_pattern() and
+  Particles::Utilities::create_interpolation_matrix() that create interpolation sparsities and
+  matrices between ParticleHandler and DoFHandler objects.
+  <br>
+  (Bruno Blais, Luca Heltai, 2020/03/31)
+ </li>
+
+ <li>
+  Fixed: A bug in the setup of CellAccessor::level_subdomain_id() for multigrid
+  levels that manifested itself only on non-refined meshes has been fixed.
+  <br> (Martin Kronbichler, 2020/03/30)
+ </li>
+
+ <li>
+  Fixed: FEValues would previously detect cell similarities when combined with
+  MappingFEField and MappingManifold when the underlying mesh had similarities,
+  even though the deformed cells did not. This would lead to wrong Jacobians and
+  transformed shape function gradients, among others, when running deal.II
+  without threads. This is now fixed.
+  <br> (Martin Kronbichler, 2020/03/30)
+ </li>
+
+ <li>
+  Fixed: step-26 and step-52 now also output the simulation time
+  in the VTK/VTU output files.
+  <br>
+  (Wolfgang Bangerth, 2020/03/27)
+ </li>
+
+ <li>
+  Improved: Step-21 has been adapted to use the new class DiscreteTime.
+  <br>
+  (Reza Rastak, 2020/03/26)
+ </li>
+
+ <li>
+  Extension: An optional additional parameter assert_mandatory_entries_are_found
+  is introduced to the function ParameterHandler::parse_input() to avoid errors,
+  e.g., due to typos in the input file.
+  <br>
+  (Niklas Fehn, 2020/03/26)
+ </li>
+
+ <li>
+  Changed: The SIMD vectorization capabilities in deal.II are now controlled by
+  the macro DEAL_II_VECTORIZATION_WIDTH_IN_BITS containing the numbers of bits
+  in the SIMD arrays (e.g., 256 for AVX or 512 for AVX-512).
+  <br> (Martin Kronbichler, 2020/03/24)
+ </li>
+
+ <li>
+  New: PreconditionChebychev can now report information about eigenvalue and
+  degree estimation when calling PreconditionChebychev::estimate_eigenvalues().
+  <br> (Timo Heister, 2020/03/23)
+ </li>
+
+ <li>
+  New: ParameterHandler: add functionality ensuring that parameters are
+  indeed set in order to avoid errors that remain unrecognized otherwise.
+  By extending the interfaces of declare_entry() and add_parameter(),
+  parameters can be declared as mandatory parameters that must be set
+  when parsing from an input file or by a set() function.
+  <br>
+  (Niklas Fehn, 2020/03/23)
+ </li>
+
+ <li>
+  New: The function ParameterHandler::print_parameters() can now also
+  print a reduced parameter tree for XML and JSON file formats.
+  <br>
+  (Peter Munch, 2020/03/22)
+ </li>
+
+ <li>
+  New: Variants of SparsityTools::distribute_sparsity_pattern() and
+  SparsityTools::gather_sparsity_pattern() taking only the locally owned index
+  set of the calling MPI process have been added. They avoid the previously
+  necessary MPI all-to-all communication to compute the owned dofs on all
+  processes and instead go through Utilities::MPI::compute_index_owned with
+  sparse communication. On more than around 1,000 MPI ranks, the new functions
+  should be considerably faster.
+  <br>
+  (Martin Kronbichler, 2020/03/22)
+ </li>
+
+ <li>
+  Added high-order mesh output to the step-11 tutorial.
+  <br>
+  (Alexander Grayver, 2020/03/20)
+ </li>
+
+ <li>
+  New: DataOut::add_mg_data_vector() allows the user to output solutions on
+  multigrid levels.
+  <br> (Timo Heister, 2020/03/18)
+ </li>
+
+ <li>
+  Fixed: Add missing fields to MatrixFree::copy_from.
+  <br>
+  (Daniel Jodlbauer, 2020/03/16)
+ </li>
+
+ <li>
+  Improved: The detection of compression in the mapping data structures of
+  MatrixFree has been made more general. It can now also detect when two cells
+  (not necessarily adjacent ones) are translations of each other, so that the
+  same set of Jacobians can be used on both. This helps the performance of
+  matrix-free operator evaluation in case the geometry fits into processor
+  caches and the operation is memory-bandwidth limited.
+  <br>
+  (Martin Kronbichler, 2020/03/14)
+ </li>
+
+ <li>
+  Improved: The initialization of the mapping part of MatrixFree for mappings of
+  type MappingQGeneric or derived classes has been made much faster. Apart from
+  a single query per cell for the geometry via the MappingQGeneric class, all
+  interpolations to metric terms at quadrature points are now done with
+  matrix-free routines using sum factorization, providing similar performance as
+  an operator evaluation.
+  <br>
+  (Martin Kronbichler, 2020/03/14)
+ </li>
+
+ <li>
+  Improved: ParticleHandler to have a GridTools::Cache to ensure better efficiency
+  <br>
+  (Bruno Blais, 2020/03/12)
+ </li>
+
+ <li>
+  New: LinearAlgebra::set_zero_mean_value()
+  Add free function that allows to shift a vector by a constant value in a
+  way that its mean value becomes zero. This function only makes use of the
+  pure virtual functions add() and mean_value() of the abstract class
+  VectorSpaceVector.
+  <br>
+  (Niklas Fehn, 2020/03/06)
+ </li>
+
+ <li>
+  New: Introduce a new communication-pattern class Utilities::MPI::NoncontiguousPartitioner.
+  It is similar to Utilities::MPI::Partitioner, however, does not make any
+  restrictions regarding to the ordering of the underlying index sets. This class enables
+  efficient repartitioning of vectors, which might be benefitial in interfacing with
+  external libraries that expect a certain fixed order (like checkerboard partitioning).
+  <br>
+  (Peter Munch, 2020/03/04)
+ </li>
+
+ <li>
+  New: There are new functions GeometryInfo::face_indices() and
+  GeometryInfo::vertex_indices() that make writing range-based for loops
+  over all faces or vertices of a cell much simpler.
+  <br>
+  (Wolfgang Bangerth, 2020/03/04)
+ </li>
+
+ <li>
+  Fixed: FEFaceEvaluation::read_dof_values() and
+  FEFaceEvaluation::distribute_local_to_global() would not correctly represent
+  cases with boundary integrals and constraints on the same boundary. This is
+  now fixed.
+  <br>
+  (Niklas Fehn, Martin Kronbichler, 2020/03/03)
+ </li>
+
+ <li>
+  New: There is now a new type types::global_cell_index that is used to
+  denote the global index of a cell in a parallel triangulation, and
+  consequently also places where we compute or return the *total* number
+  of cells.
+  <br>
+  (Wolfgang Bangerth, 2020/03/01)
+ </li>
+
+ <li>
+  Changed: Fixed VectorTools::project_boundary_values_curl_conforming_l2 to
+  work with FESystems containing an FE_Nedelec.
+  <br>
+  (Winnifried Wollner, 2020/02/28)
+ </li>
+
+ <li>
+  New: GeometryInfo<dim> now holds an array
+  GeometryInfo<dim>::unit_tangential_vectors with the tangential vectors on the
+  reference cell.
+  <br>
+  (Martin Kronbichler, 2020/02/28)
+ </li>
+
+ <li>
+  New: There is now a new function MatrixFree::update_mapping() that allows to
+  refresh the stored geometry data when the mapping has changed, for example
+  through a Eulerian mesh motion, while keeping all other data structures such
+  as vector exchange pattern or dof indices alive.
+  <br>
+  (Martin Kronbichler, 2020/02/25)
+ </li>
+
+ <li>
+  New: An IndexSet::split_by_block() function is added which partitions the set
+  indices, for example based on a block structure, into blocks.
+  <br>
+  (Katrin Mang, 2020/02/14)
+ </li>
+
+ <li>
+  Add: python binds for Triangulation::create_triangulation, GridTools::scale
+  and GridGenerator::hyper_cube_with_cylindrical_hole.
+  <br>
+  (Alexander Grayver, 2020/02/11)
+ </li>
+
+ <li>
+  Fixed: The output message generated by ExcInvalidBoundaryFunction() in deal.II/numerics/error_estimator.h, i.e. "However, the finite element in use has arg2 components" should be "However, the finite element in use has arg3 components". This is now fixed.
+  <br>
+  (Jihuan Tian, 2020/02/09)
+ </li>
+
+ <li>
+  Improved: Add a constructor to ArrayView that takes as argument
+  a reference to an arbitrary value type (like int, double, ...).
+  <br>
+  (Peter Munch, 2020/01/02)
+ </li>
+
+ <li>
+  New: The function Utilities::MPI::min_max_avg() can now compute the sum, average, minimum, maximum, and the
+  process id of the minimum and maximum for each entry of a ArrayView.
+  <br>
+  (Peter Munch, 2020/02/03)
+ </li>
+
+ <li>
+  Changed: The GridOutFlags::Svg constructor may now take an additional
+  argument supporting the output of boundary ids on faces.
+  <br>
+  (Graham Harper, 2020/02/02)
+ </li>
+
+ <li>
+  Fixed: Calling DataOut::merge() with objects that were created using a
+  mapping and more than one number of subdivisions greater than one
+  sometimes resulted in an unwarranted triggering of an assertion. This
+  is now fixed.
+  <br>
+  (Paras Kumar, Wolfgang Bangerth, 2020/02/02)
+ </li>
+
+ <li>
+  New: added ParameterHandler::subsection_path_exists() method.
+  <br>
+  (Pasquale Claudio Africa, 2020/01/29)
+ </li>
+
+ <li>
+  Add an optional std::function parameter to make_flux_sparsity_pattern which can
+  be used to specify over which faces there should be a flux coupling in the
+  created sparsity pattern.
+  <br>
+  (Simon Sticko, 2020/01/28)
+ </li>
+
+ <li>
+  Improved: ParameterHandler class can now optionally print parameters in the same
+  order as they are declared, rather than sorted in alphabetical order.
+  <br>
+  (Pasquale Claudio Africa, 2020/01/28)
+ </li>
+
+ <li>
+  Improved: ParameterHandler::parse_input_from_json() can handle values of type `"a" : 1', in addition to
+  `"a" : {"value" : 1}'.
+  <br>
+  (Peter Munch, 2020/01/27)
+ </li>
+
+ <li>
+  New: ParameterHandler::parse_input_from_json() and  ParameterHandler::parse_input_from_xml() can skip
+  undifined sections and entries.
+  <br>
+  (Peter Munch, 2020/01/27)
+ </li>
+
+ <li>
+  New: Python bindings for the Quadrature class.
+  <br>
+  (Alexander Grayver, 2020/01/20)
+ </li>
+
+ <li>
+  New: Add method to compute measure of distorted quads embedded in a three dimensional space.
+  <br>
+  (Nicola Giuliani, 2020/01/23)
+ </li>
+
+ <li>
+  New: FESeries::process_coefficients() now allows to ignore coefficients
+  below an absolute threshold, which has to be provided as a parameter.
+  <br>
+  (Marc Fehling, 2020/01/21)
+ </li>
+
+ <li>
+  New: GridOut::write_vtu() and GridIn::read_vtu() allow to save and restore a locally refined triangulation,
+  using a xml section in the vtu file that is ignored by vtu readers.
+  <br>
+  (Luca Heltai, Nicola Giuliani, 2020/01/17)
+ </li>
+
+ <li>
+  New: Utilities::compress() and Utilities::decompress() allow to compress and decompress a string using gzip.
+  <br>
+  (Luca Heltai, Nicola Giuliani, 2020/01/17)
+ </li>
+
+ <li>
+  New: FESeries::Fourier and FESeries::Legendre have been extended by an
+  equality operator (==) and the functionality to save and load previously
+  calculated transformation matrices.
+  <br>
+  (Marc Fehling, 2020/01/16)
+ </li>
+
+ <li>
+  New: Equality operator (==) for hp::QCollection.
+  <br>
+  (Marc Fehling, 2020/01/16)
+ </li>
+
+ <li>
+  Deprecated: The CellAccessor::active() function did not satisfy the
+  usual naming scheme of that class in which functions are called
+  CellAccessor::is_ghost(), CellAccessor::is_locally_owned(), etc. As a
+  consequence, there is now a new function CellAccessor::is_active(),
+  with the old function deprecated.
+  <br>
+  (Wolfgang Bangerth, 2020/01/16)
+ </li>
+
+ <li>
+  Fixed: The GridOut::write_svg() function was not instantiated for the
+  case `dim=3, spacedim=3` by accident. This is now fixed.
+  <br>
+  (Wolfgang Bangerth, 2020/01/14)
+ </li>
+
+ <li>
+  New: Added a new function GridGenerator::replicate_triangulation() for creating
+  a new triangulation by copying a given triangulation repeatedly along the
+  coordinate axes.
+  <br>
+  (David Wells, Victor Zheng, 2020/01/13)
+ </li>
+
+ <li>
+  Fixed: DataOut::write_vtu_in_parallel() used to generate invalid .vtu files if
+  some processors had 0 patches to write. This is now fixed.
+  <br> (Timo Heister, 2020/01/12)
+ </li>
+
+ <li>
+  Improved: GridTools::delete_duplicated_vertices() now runs, for cubelike
+  geometries, in $O(n^{3/2})$ time in 2D and $O(n^(5/3))$ time in 3D instead
+  of $O(n^2)$ time.
+  <br>
+  (David Wells, 2020/01/12)
+ </li>
+
+ <li>
+  New: The mechanism implemented by DataOut via the `first_cell()` and
+  `next_cell()` virtual functions has been deprecated. In its place, the
+  DataOut::set_cell_selection() function allows doing the same but
+  without the need for deriving classes.
+  <br>
+  (Wolfgang Bangerth, 2020/01/11)
+ </li>
+
+ <li>
+  New: ParticleHandler::get_particle_positions() and ParticleHandler::set_particle_positions() allow
+  to set and get particle positions from various types of sources.
+  <br>
+  (Bruno Blais, Luca Heltai, 2020/01/10)
+ </li>
+
+ <li>
+  New: There are new versions of DoFTools::count_dofs_per_component()
+  and DoFTools::count_dofs_per_block() that return their results as a
+  `std::vector` object, rather than doing so through an output
+  argument. The versions that did the latter have been deprecated.
+  <br>
+  (Wolfgang Bangerth, 2020/01/09)
+ </li>
+
+ <li>
+  New: A variant of CellwiseInverseMassMatrix::apply() defining the inverse of
+  the diagonal by FEEvaluationBase::JxW() from the provided FEEvaluationBase
+  variable has been implemented.
+  <br>
+  (Martin Kronbichler, 2020/01/05)
+ </li>
+
+ <li>
+  New: Add method is_ancestor_of to CellId.
+  <br>
+  (Peter Munch, 2020/01/02)
+ </li>
+
+ <li>
+  New: The function MatrixFree::get_dof_handler() has been templated to enable
+  to return either a DoFHandler<dim> or an hp::DoFHandler<dim>.
+  <br>
+  (Bruno Turcksin, 2020/01/02)
+ </li>
+
+ <li>
+  New: The function Threads::TaskGroup::size() allows querying the size
+  of a task group.
+  <br>
+  (Wolfgang Bangerth, 2019/12/31)
+ </li>
+
+ <li>
+  Improved: mu_parser functions now use random number generation facilities
+  provided by the standard library.
+  <br>
+  (Reza Rastak, 2019/20/30)
+ </li>
+
+ <li>
+  New: The SparseDirectUMFPACK class is now able to solve complex-valued
+  problems as well.
+  <br>
+  (Wolfgang Bangerth, 2019/12/30)
+ </li>
+
+ <li>
+  New: The method memory_consumption has been implemented in and added
+  to a variety of classes, e.g. FE_DGQ.
+  <br>
+  (Peter Munch, 2019/12/22)
+ </li>
+
+ <li>
+  New: There are new versions of DoFTools::extract_dofs() that return
+  their results as an IndexSet, rather than doing so through an output
+  argument of type `std::vector<bool>`. The versions that did the latter
+  have been deprecated.
+  <br>
+  (Wolfgang Bangerth, 2019/12/19)
+ </li>
+
+ <li>
+  New: The TensorFunctionParser class allows to read
+  in a function similarly to the FunctionParser class using the MuParser.
+  <br>
+  (Konrad Simon, 2019/12/17)
+ </li>
+
+ <li>
+  Added python wrappers for the FunctionManifold class
+  <br>
+  (Alexander Grayver, 2019/12/17)
+ </li>
+
+ <li>
+  Added: Python wrappers for the CellAccessor's methods: active, level,
+  index, vertex_index, neighbor_is_coarser, neighbor_of_neighbor and
+  GridTools' methods: find_cells_adjacent_to_vertex, minimal_cell_diameter,
+  maximal_cell_diameter, and Mapping::project_real_point_to_unit_point_on_face
+  <br>
+  (Alexander Grayver, 2020/01/06)
+ </li>
+
+ <li>
+  Improved: GridGenerator::channel_with_cylinder() now places some of the points
+  at the transition between the cylinder mesh and the outer structured mesh
+  slightly farther away from the cylinder center, thereby improving mesh
+  quality.
+  <br>
+  (Martin Kronbichler, 2019/12/16)
+ </li>
+
+ <li>
+  New: IndexSet::tensor_product() creates a new IndexSet with global size equal to
+  this->size()*other.size(), containing for every element n of this IndexSet, the indices
+  of the other IndexSet, contained in the interval [n*other.size(), (n+1)*other.size()).;<br>;(Luca Heltai, 2019/12/12)
+ </li>
+
+ <li>
+  Fixed: The introduction of step-18 had a mistake in the description of
+  the weak formulation. However, given that we choose the boundary forces
+  equal to zero, the program correctly implements the equations.
+  <br>
+  (Ming Yang, 2019/12/06)
+ </li>
+
+ <li>
+  Added: Python wrappers for the CellAccessor::center, GridTools::transform,
+  GridTools::distort_random, GridGenerator::extrude_triangulation,
+  GridTools::find_active_cell_around_point
+  <br>
+  (Alexander Grayver, 2019/12/06)
+ </li>
+
+ <li>
+  Improved: GridGenerator::subdivided_hyper_cube() gained an option to also set boundary ids.
+  <br>
+  (Bruno Blais, 2019/12/05)
+ </li>
+
+ <li>
+  Changed: step-61 no longer generates two output files for the interior
+  pressures and the Darcy velocities, respectively. Instead, it puts all
+  of this information into a single graphical output file.
+  <br>
+  (Wolfgang Bangerth, 2019/12/02)
+ </li>
+
+ <li>
+  Changed: The step-61 program now has a separate function
+  `compute_postprocessed_velocity()` that computes the velocity field as
+  a postprocessing step after computing the pressure variable. The
+  resulting velocity field is used in both computing errors and when
+  creating graphical output.
+  <br>
+  (Wolfgang Bangerth, 2019/12/02)
+ </li>
+
+ <li>
+  New: Particles::Particle::set_id() allows to set a particle ID number.
+  <br>
+  (Luca Heltai, 2019/12/02)
+ </li>
+
+ <li>
+  Fixed: Utilities::MPI::some_to_some() now allows sending to our own mpi process.
+  <br>
+  (Luca Heltai, 2019/12/02)
+ </li>
+
+ <li>
+  Fixed: ParticleHandler::insert_particles() taking a std::vector of Point objects
+  starts numbering the particles with 0 instead of 1 to be consistent with the
+  other ParticleHandler::insert_particles() function and the
+  ParticleHandler::insert_particle() function.
+  <br>
+  (Daniel Arndt, 2019/11/30)
+ </li>
+
+ <li>
+  Improved: Allow using ParticleHandler with serial triangulations.
+  <br>
+  (Daniel Arndt, 2019/11/29)
+ </li>
+
+ <li>
+  Added: New python wrappers for the Manifold class
+  with a possibility to assign manifold object to a
+  python triangulation object.
+  <br>
+  (Alexander Grayver, 2019/11/28)
+ </li>
+
+ <li>
+  Improved: The setup of MappingQGeneric::InternalData within the constructor of
+  FEValues would previously unconditionally allocate memory for all shape
+  functions and all quadrature points, also for the case where we use the tensor
+  product and the full interpolation is unnecessary. This has been fixed,
+  improving the situation for very high orders and numbers of quadrature points
+  (e.g., avoiding 400 MB of memory for mapping degrees of 15 with $16^3$
+  quadrature points in 3D).
+  <br>
+  (Martin Kronbichler, 2019/11/26)
+ </li>
+
+ <li>
+  Fixed: MatrixFree::reinit() would sometimes perform invalid index accesses on
+  continuous elements with hanging nodes when data structures for face integrals
+  are requested. This is now fixed.
+  <br>
+  (Martin Kronbichler, Peter Munch, Laura Prieto Saavedra, 2019/11/26)
+ </li>
+
+ <li>
+  New: ParticleHandler::locally_relevant_ids() generates an IndexSet of the locally owned
+  particles. This can be used to construct linear algebra vectors to be used with particles.
+  <br>
+  (Luca Heltai, Bruno Blais, 2019/11/18)
+ </li>
+
+ <li>
+  Added: New python wrappers for the MappingQGeneric class
+  <br>
+  (Alexander Grayver, 2019/11/18)
+ </li>
+
+ <li>
+  Changed: Indent scripts now also format files related to the python bindings
+  <br>
+  (Alexander Grayver, 2019/11/15)
+ </li>
+
+ <li>
+  Fixed: MappingQGeneric::transform_real_to_unit_cell() would previously ignore
+  the moved vertex locations of derived classes such as MappingQEulerian for
+  linear mappings in 1D and 2D. This is now fixed.
+  <br>
+  (Martin Kronbichler, 2019/11/14)
+ </li>
+
+ <li>
+  New: DoFTools::locally_owned_dofs_per_component() returns a vector of IndexSet, containing the locally owned
+  dofs that refers to the ComponentMask passed as an argument.
+  <br>
+  (Bruno Blais, Luca Heltai, 2019/11/26)
+ </li>
+
+ <li>
+  Added: extend python bindings to allow for working with cell's
+  neighbors, iterate over faces and modify boundary ids.
+  <br>
+  (Alexander Grayver, 2019/11/14)
+ </li>
+
+ <li>
+  New: Added reading writing capabilities for STL files.
+  <br>
+  (Nicola Giuliani, 2019/11/13)
+ </li>
+
+ <li>
+  New: add more quadrature choices to QuadratureSelector class.
+  <br>
+  (Daniel Jodlbauer, 2019/11/11)
+ </li>
+
+ <li>
+  Fixed: In Step-54, the std namespace was missing for some calls to cout and
+  endl.
+  <br>
+  (Mohammed Hassan, Bruno Turcksin, 2019/11/07)
+ </li>
+
+ <li>
+  New: template argument for type of vectorized array (vector width) in matrix-free operators.
+  <br>
+  (Daniel Jodlbauer, 2019/11/06)
+ </li>
+
+ <li>
+  Fixed: Computations with block vectors with more than 4 billion degrees of
+  freedom reported incorrect values for locally_owned_elements(). This is now
+  fixed by implementing IndexSet::add_indices() for large offsets.
+  <br>
+  (Timo Heister, 2019/11/05)
+ </li>
+
+ <li>
+  New: The Utilities::MPI::CollectiveMutex helper class allows
+  protection of critical sections in code using MPI.
+  <br>
+  (Timo Heister, 2019/11/04)
+ </li>
+
+ <li>
+  Fixed: FESubfaceValues::reinit() would previously throw an exception when
+  called on a face behind a refined periodic neighbor. This case is now
+  handled properly.
+  <br>
+  (Peter Munch, 2019/11/03)
+ </li>
+
+ <li>
+  Changed: Fixed the computation of the finite element degree in
+  VectorTools::project_boundary_values_curl_conforming_l2 to be based on the
+  degree of the finite element selected for the application of the boundary
+  values and not of the whole finite element.
+  <br>
+  (Winnifried Wollner, 2019/11/02)
+ </li>
+
+ <li>
+  New: DoFTools::make_periodicity_constraints() can now be used to
+  implement Bloch periodic conditions.
+  <br>
+  (Daniel Garcia-Sanchez, 2019/11/01)
+ </li>
+
+ <li>
+  Changed: parallel::TriangulationBase::copy_triangulation does not
+  copy the MPI communicator from the given source triangulation.
+  <br>
+  (Alexander Grayver, 2019/10/31)
+ </li>
+
+ <li>
+  New: Member function hp::FECollection::max_degree() that returns the
+  maximal polynomial degree of all finite elements in the collection.
+  <br>
+  (Marc Fehling, 2019/10/30)
+ </li>
+
+ <li>
+  New: Added convenience functions CellAccessor::face_iterator_to_index()
+  and TriaAccessor::child_iterator_to_index() for computing face and child numbers
+  from iterators.
+  <br>
+  (David Wells, 2019/10/27)
+ </li>
+
+ <li>
+  New: Added two new overloads of FEValues::reinit() that take face and subface
+  iterators instead of face and subface numbers.
+  <br>
+  (David Wells, 2019/10/27)
+ </li>
+
+ <li>
+  New: The Utilities::MPI::DuplicatedCommunicator helper class allows
+  safe duplication and freeing of an MPI communicator.
+  <br>
+  (Timo Heister, 2019/10/22)
+ </li>
+
+ <li>
+  Improved: VectorTools::interpolate() now works for a parallel::distributed::Triangulation
+  <br>
+  (Pasquale Claudio Africa, Doug Shi-Dong, 2019/10/24)
+ </li>
+
+ <li>
+  New: new function Utilities::truncate_to_n_digits() that can be used to
+  cutoff floating point numbers after a specified number of digits of
+  accuracy (decimal places) in scientific floating point notation.
+  <br>
+  (Niklas Fehn, 2019/10/18)
+ </li>
+
+ <li>
+  Refactor: improve implementation of Utilities::needed_digits() by using
+  functionality from the standard library.
+  <br>
+  (Niklas Fehn, 2019/10/18)
+ </li>
+
+ <li>
+  Changed: SolverControl returns number of iterations of ArpackSolver after solving
+  for Eigenvalues. It also checks if the requested eigenvalues are supported by the
+  solver, depending on symmetry.
+  <br>
+  (Roland Richter, 2019/10/17)
+ </li>
+
+ <li>
+  New: Extend function GridGenerator::torus<3,3>() so that one can generate
+  an open torus with an angle of 0 < phi <= 2*pi.
+  <br>
+  (Niklas Fehn, 2019/10/16)
+ </li>
+
+ <li>
+  New: Provide cell iterators to interior and exterior cells of
+  a macro face through the function MatrixFree::get_face_iterator().
+  <br>
+  (Martin Kronbichler, Peter Munch, Michal Wichrowski, 2019/10/16)
+ </li>
+
+ <li>
+  New: The function DataOutInterface::write_vtu_with_pvtu_record() combines
+  write_vtu() and write_pvtu_record() into a single function and generates
+  the file extensions with counter, processor ID, and .vtu/.pvtu ending
+  automatically.
+  <br>
+  (Niklas Fehn, 2019/10/14)
+ </li>
+
+ <li>
+  New: The class VectorizedArray now provides STL-like member functions:
+  VectorizedArray::size() returns the number of array elements and
+  VectorizedArray:begin() as well as VectorizedArray::end() provide iterators
+  enabling range-based iterations.
+  <br>
+  (Martin Kronbichler, Peter Munch, Daniel Arndt, 2019/10/12)
+ </li>
+
+ <li>
+  Improved: Make the output of cells, (all non-internal) faces and (all non-internal)
+  co-faces optional in GridOut::write_vtk.
+  <br>
+  (Peter Munch, Niklas Fehn, 2019/10/11)
+ </li>
+
+ <li>
+  Fixed: Take in account p::d::Triangulation when using
+  DoFHandler<dim, spacedim>::n_boundary_dofs() and its
+  hp version. It now returns locally owned dofs instead
+  of attempting a global count.
+  <br>
+  (Doug Shi-Dong, 2019/10/11)
+ </li>
+
+ <li>
+  New: The function GridTools::compute_maximum_aspect_ratio() computes the
+  maximum aspect ratio of a mesh with arbitrarily deformed elements.
+  <br>
+  (Niklas Fehn, 2019/10/08)
+ </li>
+
+ <li>
+  Fixed: Make sure that merge_triangulations() does
+  not forget about where the boundary is (the problem has
+  actually been in create_triangulation(), which assigned
+  numbers::internal_face_boundary_id to boundary faces)
+  <br>
+  (Sebastian Stark, 2019/10/08)
+ </li>
+
+ <li>
+  Improved: CUDAWrappers::MatrixFree::cell_loop() can now detect whether the
+  given vectors have the same parallel MPI partitioner as the matrix-free
+  class, which circumvents vector copies and speeds up execution. This
+  approach has also been applied to step-64.
+  <br>
+  (Martin Kronbichler, Peter Munch, 2019/09/27)
+ </li>
+
+ <li>
+  Fixed: Manifold::get_new_point() previously ignored points weighted negatively.
+  The original intent was to avoid to divide by a 0 weight, but the condition
+  weight < tolerance resulted in ignoring negative weights.
+  Additionally, the same function previously avoided get_intermediate_point()
+  when the weight of of the first point was 0, but forgot to assign the new
+  intermediate point to be the second point.
+  The issues would mainly occur for derived Manifold classes that only implement
+  the get_intermediate_point() function. Both issues are now fixed.
+  <br>
+  (Doug Shi-Dong, 2019/09/26)
+ </li>
+
+ <li>
+  Improved: Evaluate/integrate the gradients in CUDAWrappers::EvaluatorTensorProduct
+  with collocation method if both values and gradients are requested.
+  <br>
+  (Peter Munch, 2019/09/24)
+ </li>
+
+ <li>
+  New: Provide new methods in CUDAWrappers::FEEvaluation that do neither take the
+  local dof index nor the quadrature point but recompute them based on the
+  thread id.
+  <br>
+  (Peter Munch, 2019/09/24)
+ </li>
+
+ <li>
+  Fixed: When called with update_volume_elements, MappingFEField had an
+  assertion that accidentally checked the wrong field's size. This is
+  now fixed.
+  <br>
+  (Doug Shi-Dong, 2019/09/23)
+ </li>
+
+ <li>
+  Improved: Unify compute_vertices_with_ghost_neighbors in
+  parallel::TriangulationBase, parallel::distributed::Triangulation,
+  and parallel::fullydistributed::Triangulation..
+  <br>
+  (Peter Munch, 2019/09/21
+ </li>
+
+ <li>
+  New: The class DiscreteTime is created to keep track of time
+  during a time-dependent simulation.
+  <br>
+  (Reza Rastak, 2019/09/20)
+ </li>
+
+ <li>
+  Changed: The storage type of MGLevelGlobalTransfer::copy_indices,
+  MGLevelGlobalTransfer::copy_indices_global_mine,
+  MGLevelGlobalTransfer::copy_indices_level_mine has been changed to a
+  std::vector of Table<2,unsigned int>, in order to simplify some copy
+  operations.
+  <br>
+  (Martin Kronbichler, 2019/09/20)
+ </li>
+
+ <li>
+  Improved: MGTools::make_boundary_list() has been made faster.
+  <br>
+  (Martin Kronbichler, 2019/09/19)
+ </li>
+
+ <li>
+  Improved: IndexSet::add_indices() could previously have quadratic complexity
+  in the number of ranges if many ranges were added. This is now fixed. Note,
+  however, that calling IndexSet::add_indices() many times still is of quadratic
+  complexity.
+  <br>
+  (Martin Kronbichler, 2019/09/19)
+ </li>
+
+ <li>
+  New: MGTransferMatrixFree::build() now takes an optional second argument to
+  specify partitioner objects for LinearAlgebra::distributed::Vector types in
+  use elsewhere. If the ghost indices required by the multigrid algorithm are
+  contained in the ghosts of the given partitioners, they can be used, saving
+  some vector copy operations during MGTransferMatrixFree::restrict_and_add()
+  and MGTransferMatrixFree::prolongate().
+  <br>
+  (Martin Kronbichler, 2019/09/18)
+ </li>
+
+ <li>
+  Improved: The ghost setup of Utilities::MPI::Partitioner has been rewritten
+  using Utilities::MPI::ConsensusAlgorithm to avoid global all-to-all
+  communication, speeding up computations on many MPI ranks.
+  <br>
+  (Peter Munch, Martin Kronbichler, 2019/09/17)
+ </li>
+
+ <li>
+  Improved: The gzip compression previously applied by
+  GridTools::exchange_cell_data_to_ghosts() has been disabled because network
+  throughput is typically higher than the rate by which gzip is able to
+  compress. This speeds up DoFHandler::distribute_dofs(), among others.
+  <br>
+  (Martin Kronbichler, 2019/09/16)
+ </li>
+
+ <li>
+  Added: Add a new particle generation function that can generate particles at
+  random positions controlled by a probability density function.
+  <br>
+  (Rene Gassmoeller, 2019/09/13)
+ </li>
+
+ <li>
+  New: Allow to create TriangulationDescription::Description
+  by groups, in which only one process actually creates
+  TriangulationDescription::Descriptions and distributes them within the group.
+  <br>
+  (Peter Munch, 2019/09/13)
+ </li>
+
+ <li>
+  New: Add Boost serialization function to dealii::TriangulationDescription::CellData and
+  dealii::TriangulationDescription::Description.
+  <br>
+  (Peter Munch, 2019/09/13)
+ </li>
+
+ <li>
+  New: Add Boost serialization function to CellData.
+  <br>
+  (Peter Munch, 2019/09/13)
+ </li>
+
+ <li>
+  Fixed: DoFHandler::distribute_mg_dofs() for distributed triangulations has
+  been made up to ten times faster by replacing an inefficient function for the
+  exchange of ghosted level degrees of freedom.
+  <br>
+  (Martin Kronbichler, 2019/09/13)
+ </li>
+
+ <li>
+  New: MGConstrainedDoFs now allows the user to define constraints
+  on each multigrid level to be applied during prolongation in a
+  matrix-free transfer.
+  <br>
+  (Conrad Clevenger, 2019/09/13)
+ </li>
+
+ <li>
+  New: Add method is_parent_of to CellId.
+  <br>
+  (Peter Munch, 2019/09/11)
+ </li>
+
+ <li>
+  New: There is a new variant of MatrixFree::cell_loop() which takes two
+  std::function objects with ranges on the locally owned degrees of freedom, one
+  with work to be scheduled before the cell operation first touches some
+  unknowns, and one after the cell operation last touches them. The goal of
+  these functions is to bring vector operations close to the time when the
+  vector entries are accessed by the cell operation which increases the cache
+  hit rate of modern processors (temporal locality).
+  <br>
+  (Martin Kronbichler, 2019/09/10)
+ </li>
+
+ <li>
+  New: compare_and_apply_mask() allows to use a ternary operater idiom with
+  VectorizedArray that is based on generating a mask via component-wise
+  comparison. Such a computational idiom is useful as an alternative to
+  branching whenever the control flow itself would depend on (computed) data
+  (which is not possible for vectorized data).
+  <br>
+  (Matthias Maier, 2019/09/05)
+ </li>
+
+ <li>
+  Fixed: Implementing LinearAlgebra::Vector::has_ghost_elements() improves compatibility
+  between vector types.
+  <br>
+  (Daniel Arndt, 2019/09/05)
+ </li>
+
+ <li>
+  Added: GeometryInfo<dim>::unit_normal_vector provides outward-facing unit
+  vectors for each face of the reference cell in the form of Tensor<1, dim>.
+  <br>
+  (Reza Rastak, 2019/09/04)
+ </li>
+
+ <li>
+  Fixed: PreconditionChebyshev can be used with LinearAlgebra::distributed::Vector
+  with MemorySpace::CUDA. In particular, PreconditionChebyshev can set constrained
+  indices to zero in the initial guess.
+  <br>
+  (Daniel Arndt, 2019/09/03)
+ </li>
+
+ <li>
+  New: Add a function, which creates a TriangulationDescription::Description from a
+  serial and a distributed triangulation. This data structure can be used to initialize
+  parallel::fullydistributed::Triangulation.
+  <br>
+  (Peter Munch, 2019/09/02)
+ </li>
+
+ <li>
+  Bugfix: In PolynomialsBDM, the degree() function is corrected to return a
+  polynomial degree of k+1, instead of its previous value of k.
+  <br>
+  (Graham Harper, 2019/09/02)
+ </li>
+
+ <li>
+  Fixed: Reading the variable <code>debug</code> using ParameterHandler for the class
+  Algorithms::Newton<VectorType> is fixed within the method
+  Algorithms::Newton<VectorType>::parse_parameters().
+  <br>
+  (Reza Rastak, 2019/08/31)
+ </li>
+
+ <li>
+  Fixed: CUDAWrappers::MatrixFree::cell_loop() now works on adapted mesh even in
+  two dimensions with finite elements of even degree.
+  <br>
+  (Bruno Turcksin, 2019/08/31)
+ </li>
+
+ <li>
+  New: Added a GridGenerator::generate_from_name_and_arguments() that leverages the MutableBind class
+  to parse two strings, and generate a grid from them interpreting one as a GridGenerator function
+  name to call, and the other as a tuple of arguments to pass to the function.
+  <br>
+  (Luca Heltai, 2019/08/27)
+ </li>
+
+ <li>
+  Changed: No of lines reported in step-3 documentation results section is corrected to two
+  <br>
+  (Krishnakumar Gopalakrishnan, 2019/08/27)
+ </li>
+
+ <li>
+  Changed: In Step-3 docs, clarify wording on which objects belong to SparseMatrix & Vector classes.
+  <br>
+  (Krishnakumar Gopalakrishnan, 2019/08/27)
+ </li>
+
+ <li>
+  Bugfix: For parallel::distributed::Triangulation objects, p4est determines
+  which cells will be refined and coarsened. Thus, refinement flags are not
+  a good measure to predict refinement behavior for transferring active finite
+  element indices. We now provide a matching coarsening strategy to the
+  parallel::distributed::CellDataTransfer object responsible for their transfer.
+  This fixes assertions being triggered in
+  parallel::distributed::SolutionTransfer::interpolate().
+  <br>
+  (Marc Fehling, 2019/08/27)
+ </li>
+
+ <li>
+  New: There is a new constructor for DiagonalMatrix that immediately initializes
+  the underlying vector.
+  <br>
+  (Daniel Arndt, 2019/08/23)
+ </li>
+
+ <li>
+  Changed: step-3 now uses VTK as the output file format.
+  <br>
+  (Wolfgang Bangerth, 2019/08/23)
+ </li>
+
+ <li>
+  New: method try_get_data() added to CellDataStorage in both const and
+  non-const forms. It returns a std_cxx17::optional which determines whether a
+  cell has a data associated with it.
+  <br>
+  (Reza Rastak, 2019/08/21)
+ </li>
+
+ <li>
+  Fixed: OpenCASCADE::interpolation_curve() returned a TopoDS_Shape that was not properly closed. This is
+  now fixed.
+  <br>
+  (Luca Heltai, 2019/08/21)
+ </li>
+
+ <li>
+  Fixed: Make sure that begin() and end() of PETScWrappers::MatrixBase can only be called on a processor owning all rows of the matrix. Also fix a bug which caused begin() to fail when the first row(s) of the matrix is(are) empty.
+  <br>
+  (Sebastian Stark, 2019/08/19)
+ </li>
+
+ <li>
+  New: Implement DoFAccessor::set_mg_dof_indices and get_mg_dof_indices for 1D.
+  <br>
+  (Peter Munch, 2019/08/18)
+ </li>
+
+ <li>
+  New: Introduce new class parallel::DistributedTriangulationBase
+  between parallel::TriangulationBase and parallel::distributed::Triangulation.
+  <br>
+  (Peter Munch, 2019/08/17)
+ </li>
+
+ <li>
+  Fixed: Forward declarations in header files are prevented from confusing
+  doxygen.
+  <br>
+  (Reza Rastak, 2019/08/16)
+ </li>
+
+ <li>
+  New: Enable internal::DoFHandlerImplementation::Policy::ParallelDistributed for 1D.
+  <br>
+  (Peter Munch, 2019/08/16)
+ </li>
+
+ <li>
+  New: Add method to get the coarse-grid cell from CellID.
+  <br>
+  (Peter Munch, 2019/08/15)
+ </li>
+
+ <li>
+  Added: Add a Particles::Generators namespace and a first implementation that
+  generates particles at regular position in the reference domain.
+  <br>
+  (Rene Gassmoeller, 2019/08/14)
+ </li>
+
+ <li>
+  New: Add CellAccessor::face_iterators() and DoFCellAccessor::face_iterators()
+  which return an iterator range over the faces of a cell.
+  <br>
+  (Peter Munch, Wolfgang Bangerth, Daniel Arndt, 2019/08/14)
+ </li>
+
+ <li>
+  New: Generalize internal::DoFHandlerImplementation::Policy::ParallelDistributed such that it uses
+  the new definition of CellId.
+  <br>
+  (Peter Munch, 2019/08/14)
+ </li>
+
+ <li>
+  New: The definition of CellID has been modified so that it depends on the
+  unique coarse-cell id and no longer on the coarse-cell index.
+  <br>
+  (Peter Munch, 2019/08/13)
+ </li>
+
+ <li>
+  Fixed: MatrixFree::loop() and MatrixFree::cell_loop() forgot to exchange
+  ghosted vector entries located on the first active cell of an MPI rank for
+  continuous elements when face integrals are activated. This is now fixed.
+  <br>
+  (Martin Kronbichler, Fabian Castelli, 2019/08/11)
+ </li>
+
+ <li>
+  Improved: Make a large number of prose, grammar, and various other improvements
+  to the library.
+  <br>
+  (Ashna Aggarwal, Mario Zepeda Aguilar, Manaswinee Bezbaruah, Bruno Blais, Kirana Bergstrom, Katherine Cosburn, Luel Emishaw, Rebecca Fildes, Andres Galindo, Brandon Gleeson, Bang He, Nicole Hayes, Jiuhua Hu, Lise-Marie Imbert-Gerard, Manu Jayadharan, Marie Kajan, Charu Lata, Adriana Morales Miranda, Emily Novak, Rebecca Pereira, Geneva Porter, Irabiel Romero, Tonatiuh Sanchez-Vizuet, Sara Tro, 2019/08/08)
+ </li>
+
+ <li>
+  New: Added the function GridGenerator::subdivided_hyper_L().
+  <br>
+  (Mae Markowski, 2019/08/10)
+ </li>
+
+ <li>
+  Improved: parallel::distributed::ContinuousQuadratureDataTransfer allows the
+  number of data values per quadrature points vary across the mesh. It also allows
+  a cell to not have any associated quadrature data during refinement.
+  <br>
+  (Reza Rastak, Marc Fehling, Peter Munch, 2019/08/09)
+ </li>
+
+ <li>
+  New: Add a possible extension to step-2.
+  <br>
+  (Wenjuan Zhang, 2019/08/08)
+ </li>
+
+ <li>
+  Added: GridGenerator::eccentric_hyper_shell() a volume contained between two circles or spheres centered around two different points.
+  <br>
+  (Melanie Gerault, 2019/08/08)
+ </li>
+
+ <li>
+  Fixed: Fixed two functions in GridTools::Cache class, namely
+  GridTools::Cache::get_used_vertices_rtree() and
+  GridTools::Cache::get_cell_bounding_boxes_rtree() where the update flags were
+  not cleared. Fixed that by adding a line to both functions at the end of the if
+  clause checking the flag.
+  <br>
+  (Manu Jayadharan, 2019/08/08)
+ </li>
+
+ <li>
+  New: Added Utilities::MutableBind class and Utilities::mutable_bind() method.
+  <br>
+  (Luca Heltai, Matthias Maier, 2019/08/08)
+ </li>
+
+ <li>
+  New: Added std_cxx17::apply() method.
+  <br>
+  (Luca Heltai, 2019/08/08)
+ </li>
+
+ <li>
+  New: Add a new parameter to CUDAWrappers::MatrixFree::AdditionalData to choose
+  between graph coloring and atomics in CUDAWrappers::MatrixFree::cell_loop().
+  The atomic implementation is faster on Pascal and newer architectures.
+  <br>
+  (Bruno Turcksin, 2019/08/08)
+ </li>
+
+ <li>
+  Fixed: Bug in CellDataStorage that produced error when applying adaptive
+  refinement in multi-material grids.
+  <br>
+  (Reza Rastak, Peter Munch, 2019/08/07)
+ </li>
+
+ <li>
+  Changed: The saturation equation in step-21 is explained further for
+  consistency with literatures in porous media transport.
+  <br>
+  (Omotayo Omosebi, 2019/08/07)
+ </li>
+
+ <li>
+  Improved: CellDataStorage::get_data() now checks whether we are retrieving
+  using a data type that matches the type we used to initialize the cell data.
+  <br>
+  (Reza Rastak, 2019/08/06)
+ </li>
+
+ <li>
+  New: Added BlockMatrixBase::frobenius_norm().
+  (Jonathan Robey, 2019/08/06)
+ </li>
+
+ <li>
+  Improved: Unified in-line journal citations in steps 1, 6, and 18; Bibtex
+  style formatting in a central bibliography.
+  <br>
+  (Adam Lee, 2019/08/06)
+ </li>
+
+ <li>
+  Changed: The step-5 program no longer uses EPS to output the solutions,
+  but the far more modern VTK/VTU format.
+  <br>
+  (Wolfgang Bangerth, 2019/08/03)
+ </li>
+
+ <li>
+  Changed: The step-1 program no longer uses EPS to output the meshes,
+  but the far more modern SVG format.
+  <br>
+  (Wolfgang Bangerth, 2019/08/03)
+ </li>
+
+ <li>
+  Improved: DoFTools::make_periodicity_constraints() can now be
+  used with std::complex<double> numbers.
+  <br>
+  (Daniel Garcia-Sanchez, 2019/08/02)
+ </li>
+
+ <li>
+  New: Amend VectorizedArray with a default constructor and
+  a constructor taking a scalar value.
+  <br>
+  (Peter Munch, 2019/07/29)
+ </li>
+
+ <li>
+  New: The content of a VectorizedArray object can be printed
+  using the output operator.
+  <br>
+  (Daniel Arndt, 2019/07/29)
+ </li>
+
+ <li>
+  Fixed: AffineConstraints::set_zero() can be used with
+  LinearAlgebra::distributed::Vector with MemorySpace::CUDA.
+  <br>
+  (Daniel Arndt, 2019/07/28)
+ </li>
+
+ <li>
+  New: Enable periodicity for 1D triangulations (only for dealii::DoFHandler).
+  <br>
+  (Peter Munch, 2019/07/27)
+ </li>
+
+ <li>
+  New: The function LinearAlgebra::distributed::Vector::import() allows to
+  copy the data from a LinearAlgebra::distributed::Vector of a given MemorySpace
+  to another LinearAlgebra::distributed::Vector of a different MemorySpace.
+  <br>
+  (Bruno Turcksin, 2019/07/24)
+ </li>
+
+ <li>
+  Improved: Add assignment operator for two Point objects with different
+  underlying scalar types.
+  <br>
+  (Daniel Garcia-Sanchez, 2019/07/23)
+ </li>
+
+ <li>
+  Fixed: When compiling with CUDA support, the call to
+  LinearAlgebra::distributed::Vector::compress() would failed if the vector's
+  memory space was MemorySpace::Host, the header
+  deal.II/lac/la_parallel_vector.templates.h was included, and the call was done
+  in a .cu file.
+  <br>
+  (Bruno Turcksin, 2019/07/23)
+ </li>
+
+ <li>
+  New: MappingFEField can now also be initialized on multigrid levels by handing
+  in an appropriately sized vector of position vectors for the levels.
+  <br>
+  (Martin Kronbichler, Johannes Heinz, 2019/07/22)
+ </li>
+
+ <li>
+  New: CUDAWrappers::MatrixFree::initialize_dof_vector() can be used to
+  initialize vectors suitable for the parallel partitioning of the degrees of
+  freedoms similar to MatrixFree::initialize_dof_vector().
+  <br>
+  (Daniel Arndt, 2019/07/19)
+ </li>
+
+ <li>
+  Improved: constexpr evaluation is enabled in SymmetricTensor and TableIndices.
+  <br>
+  (Reza Rastak, 2019/07/13)
+ </li>
+
+ <li>
+  New: Provide a list of all possible VectorizedArray<Number, width> instances for a given
+  hardware and optimization level. The list can be used during template instantiation.
+  <br>
+  (Peter Munch, 2019/07/13)
+ </li>
+
+ <li>
+  Improved: The additional roots of the HermiteLikeInterpolation with degree $p$
+  greater than four have been switched to the roots of the Jacobi polynomial
+  $P^{(4,4)}_{p-3}$, making the interior bubble functions $L_2$ orthogonal and
+  improving the conditioning of interpolation slightly.
+  <br>
+  (Martin Kronbichler, 2019/07/12)
+ </li>
+
+ <li>
+  Improved: FE_PolyTensor now supports finite elements with different mapping
+  types for each shape function. The member variable mapping_type is now of
+  type std::vector<MappingType>. If the vector contains only one MappingType,
+  then the same mapping is applied to every shape function. If a list of
+  MappingTypes is provided, mapping_type[i] will be applied to shape function i.
+  <br>
+  (Graham Harper, 2019/07/12)
+ </li>
+
+ <li>
+  New: It is possible to access the value type Number of VectorizedArray<Number,width>
+  directly via VectorizedArray<Number, width>::value_type.
+  <br>
+  (Peter Munch, 2019/07/10)
+ </li>
+
+ <li>
+  New: CUDAWrappers::FEEvaluation::get_dof_values() and
+  CUDAWrappers::FEEvaluation::submit_dof_values() provide access to the values
+  stored for the degrees of freedom.
+  <br>
+  (Daniel Arndt, 2019/07/09)
+ </li>
+
+ <li>
+  New: The library contains a new manual page describing how to package deal.II
+  for distribution in a Unix-like distribution.
+  <br>
+  (David Wells, 2019/07/07)
+ </li>
+
+ <li>
+  New: An additional optional template parameter VectorizedArrayType has been
+  added to the MatrixFree framework. It lets the user switch between no
+  vectorization (only auto vectorization) and vectorization over elements.
+  <br>
+  (Peter Munch, 2019/07/06)
+ </li>
+
+ <li>
+  Improved: All member functions and free functions related to Point
+  that can be used in CUDA code so far have been annotated accordingly.
+  <br>
+  (Daniel Arndt, 2019/07/05)
+ </li>
+
+ <li>
+  New: A second template parameter has been added to VectorizedArray. This template
+  parameter optionally controls the number of vectorization lanes to be used, i.e.,
+  which instruction set architecture extension to be used, at the time the application
+  is built.
+  <br>
+  (Peter Munch, 2019/07/04)
+ </li>
+
+ <li>
+  Improved: All member funtions and free functions related to Tensor
+  that can be used in CUDA code so far have been annotated accordingly.
+  <br>
+  (Daniel Arndt, 2019/07/03)
+ </li>
+
+ <li>
+  Fixed: CUDAWrappers::MatrixFree::cell_loop() would deadlock on adaptively
+  refined meshes when using Volta GPU.
+  <br>
+  (Bruno Turcksin, 2019/07/02)
+ </li>
+
+ <li>
+  New: Class CellDataTransfer has been introduced to transfer cell by cell
+  data across meshes in case of refinement/serialization.
+  <br>
+  (Marc Fehling, 2019/06/26)
+ </li>
+
+ <li>
+  Improved: The functions vectorized_load_and_transpose() and
+  vectorized_transpose_and_store() for AVX-512 were rewritten to better utilize
+  execution units with two load units and one shuffle/swizzle unit as common on
+  recent Intel CPUs.
+  <br>
+  (Martin Kronbichler, 2019/06/24)
+ </li>
+
+ <li>
+  Improved: The function project_boundary_values_curl_conforming_l2() can now be
+  used with std::complex<double> numbers.
+  <br>
+  (Daniel Garcia-Sanchez, 2019/06/22)
+ </li>
+
+ <li>
+  New: The function schur_product was added for the Tensor class,
+  allowing the entrywise multiplication of tensor objects of general rank.
+  <br>
+  (Roland Richter, 2019/06/10)
+ </li>
+
+ <li>
+  New: Namespace hp::Refinement offering decision tools for p adaptivity.
+  <br>
+  (Marc Fehling, 2019/06/07)
+ </li>
+
+ <li>
+  Unified DoFTools::extract_dofs() for DoFHandler and hp::DoFHandler.
+  <br>
+  (Daniel Arndt, Mathias Anselmann, 2019/06/07)
+ </li>
+
+ <li>
+  New: The class MappingQCache implements a cache for the points generated by
+  MappingQGeneric and derived classes to speed up consumers of the mapping for
+  expensive manifolds.
+  <br>
+  (Martin Kronbichler, 2019/06/06)
+ </li>
+
+ <li>
+  New: The function Utilities::MPI::compute_index_owner() provides the owner of
+  the ghost degrees of freedom relative to a set of locally owned ones.
+  <br>
+  (Peter Munch, 2019/06/03)
+ </li>
+
+ <li>
+  Improved: A number of places in deal.II previously called `MPI_Allgather`
+  followed by some local sums to compute prefix sums. Now the more appropriate
+  `MPI_Exscan` is used instead, which improves scalability of setup routines on
+  more than 10k processors.
+  <br>
+  (Martin Kronbichler, Peter Munch, 2019/06/03)
+ </li>
+
+ <li>
+  New: Add functions SparseMatrix::print_as_numpy_arrays() and
+  LinearAlgebra::Vector::print_as_numpy_array() to output the
+  object in a format readable with numpy.loadtxt.
+  <br>
+  (Bruno Turcksin, 2019/06/02)
+ </li>
+
+ <li>
+  New: Tensor<rank, dim, Number> can be constructed and manipulated in constexpr
+  setting (if supported by the compiler).
+  <br>
+  (Reza Rastak, 2019/05/26)
+ </li>
+
+ <li>
+  Fixed: FullMatrix can now be packed into std::vector and unpacked from it using
+  std::copy and the begin() and end() iterators.
+  <br>
+  (Reza Rastak, 2019/05/24)
+ </li>
+
+ <li>
+  Fixed: TrilinosWrappers::SparsityPattern can deal with empty column maps.
+  <br>
+  (Daniel Arndt, Mathias Anselmann, 2019/05/22)
+ </li>
+
+ <li>
+  Improved: The function GridGenerator::torus() run in 3D (volume mesh) would
+  previously only use a single cell to represent the poloidal shape, which leads
+  to singular mappings similar to how a circle degenerates when meshed with a
+  single cell. The poloidal shape is now represented with 5 cells just like the
+  circle. Furthermore, the function GridGenerator::torus() has gained an
+  optional argument to control the number of cell layers in the toroidal
+  direction. The default manifold set to the torus has also been improved: Now,
+  the TorusManifold is applied on the surface, a CylindricalManifold to the
+  middle cells in toroidal coordinates, and a TransfiniteInterpolationManifold
+  on the cells between the surface and the inner ring. This leads to an
+  excellent mesh quality for all supported scenarios.
+  <br>
+  (Niklas Fehn, Martin Kronbichler, 2019/05/16)
+ </li>
+
+ <li>
+  Fixed: Fix a bug in tutorial step-46, which caused the y-displacement (z-displacement in 3d) to be slightly unsymmetric and rectify the interface traction term.
+  <br>
+  (Sebastian Stark, 2019/05/15)
+ </li>
+
+ <li>
+  New: Two new methods NonMatching::compute_coupling_sparsity_pattern() and
+  NonMatching::compute_coupling_mass_matrix() allow to construct the coupling between arbitrary grids,
+  using a convolution kernel.
+  <br>
+  (Luca Heltai, Wenyu Lei, 2019/04/19)
+ </li>
+
+ <li>
+  New: Add FESeries::Legendre::get_n_coefficients_per_direction() and
+  FESeries::Fourier::get_n_coefficients_per_direction() to retrieve
+  the number of coefficients in each direction. Also add an Assert in
+  FESeries::Legendre::calculate() and FESeries::Fourier::calculate() to
+  check the dimension of the table to store coefficients.
+  <br>
+  (Denis Davydov, 2018/12/27)
+ </li>
+
+ <li>
+  New: The InterpolatedUniformGridData::gradient() function was not
+  previously implemented. It is now.
+  <br>
+  (Bob Myhill, Anne Glerum, Wolfgang Bangerth, 2018/09/27)
+ </li>
+
+</ol>
+
+*/

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.