Reference documentation for deal.II version Git e038590ef8 2020-10-28 14:38:53 +0100
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Changes since the last release

This is the list of changes made since the last release of deal.II. All entries are signed with the names of the authors.


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.

  1. Changed: MatrixFree::loop() only accepts LinearAlgebra::distributed::Vector arguments that have been initialized via MatrixFree::initialize_dof_vector() and are as a consequence globally compatible with the Utilities::MPI::Partitioner within internal::MatrixFreeFunctions::DoFInfo.
    (Peter Munch, Martin Kronbichler, 2020/10/21)

  2. Changed: The return type of the method Mapping::get_vertices() has been changed from std::array to boost::container::small_vector.
    (Peter Munch, 2020/10/16)

  3. Deprecated: The QTrapez class, poorly named because the proper English term is "trapezoidal quadrature rule", has been renamed to QTrapezoid, and the class with the old name has been deprecated.
    (Wolfgang Bangerth, 2020/09/28)

  4. Replaced: Python wrapper for 'merge_triangulations' with a more generic equivalent.
    (Alexander Grayver, 2020/09/01)

  5. Removed: CUDA 9, 10.0, and 10.1 are not supported anymore.
    (Bruno Turcksin, 2020/08/05)

  6. Changed: The template arguments of the classes DoFAccessor and DoFCellAccessor have changed. The template argument DoFHandlerType has been replaced by dimension and space dimension.
    (Peter Munch, 2020/06/24)

  7. Deprecated: The functions MatrixFree::reinit(), which take a vector of hp::DoFHandlers, have been deprecated. Users are asked to provide vectors of DoFhandlers, which may contain hp::DoFHandlers. This is possible now since hp::DoFHandler is deriving from DoFHandler.
    (Peter Munch, 2020/06/03)

  8. Removed: The deprecated class MGCoarseGridLACIteration has been removed.
    (Daniel Arndt, 2020/06/12)

  9. Removed: The header file deal.II/grid/tria_object.h has been removed. It was only used for internal purposes.
    (Wolfgang Bangerth, 2020/06/05)

  10. Changed: The binary representation of the Triangulation and DoFHandler classes created by the function save() with release 9.2 cannot be read anymore with load() due to major internal changes of these classes. This change also affects, i.a., the functions GridIn::read_vtu() and GridOut::write_vtu().
    (Peter Munch, 2020/06/03)

  11. Removed: The deprecated bindings to the legacy NETCDF C++ library have been removed.
    (David Wells, 2020/05/27)

  12. Removed: The deprecated bindings to nanoflann have been removed.
    (David Wells, 2020/05/27)

  13. Changed: The ThreadLocalStorage class has been reimplemented with C++14 STL primitives and does not depend on the TBB library any more. With that the obscure ThreadLocalStorage::get_implementation() function that exposed the underlying TBB container has been removed.
    (Matthias Maier, 2020/05/23)

  14. Removed: The Threads::Task class had an operator== that allowed comparing objects of this type for equality. This operator has been removed. If you want to store objects of this kind in a collection that requires this kind of operator (say, std::set), then you probably can't do so any more in a reasonable way. However, this is exactly what the Threads::TaskGroup class is there for.
    (Wolfgang Bangerth, 2020/05/26)

  15. Deprecated: The class hp::DoFHandler has been deprecated, since the DoFHandler has been extended with its functionalities.
    (Peter Munch, 2020/05/23)

  16. Removed: The following preprocessor definitions have been removed from DEAL_II_NOEXCEPT, DEAL_II_USE_MT_POSIX, DEAL_II_USE_MT_POSIX_NO_BARRIERS
    (Matthias Maier, 2020/05/23)

  17. Removed: The deprecated classes Threads::Mutex::ScopedLock, Threads::ConditionVariable, and deprecated functions Threads::Mutex::acquire(), Threads::Mutex::release(), Threads::n_existing_threads(), Threads::this_thread_id() have been removed.
    (Matthias Maier, 2020/05/22)

  18. Removed: The DEAL_II_WITH_CXX14 and DEAL_II_WITH_CXX17 configuration options have been removed. The library will now be compiled with the default C++ standard enabled by the compiler. This is (as of May 2020) C++14 for all compilers. If you want to override that behavior, please set the C++ standard directly for example by configuring with -DDEAL_II_CXX_FLAGS="-std=c++17", or by setting the environement variable CXXFLAGS="-std=c++17".
    (Matthias Maier, 2020/05/21)

  19. Updated: deal.II now requires a compiler with enabled C++14 support.
    (Matthias Maier, 2020/05/21)

  20. Changed: The polynomial space template argument has been removed from FE_Poly and FE_PolyTensor.
    (Graham Harper, Daniel Arndt, 2020/05/21)

  21. Removed: The deprecated class Threads::PosixThreadBarrier has been removed.
    (Wolfgang Bangerth, 2020/04/21)


  1. New: Tutorial example (step-68) showcasing parallel simulation of the advection of particles including load balancing.
    (Bruno Blais, Toni El Geitani Nehme, Rene Gassm ller, Peter Munch, 2020/05/23)

  2. New: The step-19 tutorial program shows how to use particle methods.
    (Wolfgang Bangerth, Rene Gassmoeller, Peter Munch, 2020/09/15)

  3. New: The multithreading framework in the library has been completely revamped: Intel TBB has been replaced by taskflow, which is bundled within the library. Multithreading support is now unconditionally enabled and we removed the CMake option DEAL_II_WITH_THREADS. The tasking framework can be controlled using MultithreadInfo and the DEAL_II_NUM_THREADS environment variable.
    (Wolfgang Bangerth, Timo Heister, Matthias Maier, 2020/05/25)

  4. Changed: The internal data structures of DoFHandler have been modified to use compressed row storage, enabling it to also handle hp::DoFHandler functionalities. Currently, the user can choose between the normal mode and the hp mode during calling the constructur. Please note that the multigrid functionalities are only available during normal mode.
    (Peter Munch, 2020/05/23)

  5. List rotated: The list of major changes is now empty.
    (Matthias Maier, 2020/05/12)

Specific improvements

  1. Improved: MatrixFree now also works for hp in MPI-parallelized programs.
    (Marc Fehling, Katharina Kormann, Martin Kronbichler, Peter Munch, 2020/10/20)

  2. New: step-9 uses the "streamline-upwind Petrov-Galerkin" method, but does not make any attempt at explaining what this method is or why it might be named like this. This has been rectified: The introduction now has a long section that explains the origin of the method and its name.
    (Wolfgang Bangerth, 2020/10/10)

  3. New: Mapping::transform_points_real_to_unit_cell() can compute the operation of Mapping::transform_real_to_unit_cell() on many points simultaneously, which can be much faster for MappingQGeneric and derived classes that involve expensive operations to compute the support points of the mapping.
    (Martin Kronbichler, 2020/10/07)

  4. New: GridRefinement::refine_and_coarsen_fixed_fraction() and parallel::distributed::GridRefinement::refine_and_coarsen_fixed_fraction() now allow to specify a VectorTools::NormType, which determines how combined errors on subsets of cells will be calculated.
    (Marc Fehling, 2020/10/06)

  5. New: SSP_THIRD_ORDER is added to the namespace TimeStepping to implement the explicit third order Strong Stability Preserving (SSP) Runge-Kutta method, which is also called the third order Total Variation Diminishing (TVD) Runge-Kutta method, see [38].
    (Jiaqi Zhang, 2020/10/05)

  6. New: Helper function DoFCellAccessor::dominated_future_fe_on_children() to clean up code for hp-coarsening.
    (Marc Fehling, 2020/10/05)

  7. New: GridTools::affine_cell_approximation() returns a matrix A and offset vector b that describe a least-squares fit of an affine approximation to a set of vertices of a cell.
    (Martin Kronbichler, 2020/10/04)

  8. New: Helper functions CellAccessor::child_iterators() and DoFCellAccessor::child_iterators() which return iterators to children of a cell via cell->child_iterators().
    (Marc Fehling, 2020/10/03)

  9. New: CellId has a new constructor to create it from a std::string.
    (Timo Heister, 2020/10/05)

  10. Improved: MappingQGeneric::transform_real_to_unit_cell() has been made much faster by directly working with the tensor product form of the mapping shape functions and avoiding many unnecessary memory allocations. The main cost is now MappingQGeneric::compute_mapping_support_points(), which can be made fast with MappingQCache, for example.
    (Martin Kronbichler, 2020/09/30)

  11. New: The function BlockSparsityPattern::print_svg() outputs a block sparsity pattern in SVG format.
    (Wolfgang Bangerth, 2020/09/25)

  12. Changed: step-29 no longer uses the deallog variable to generate output, but instead directly writes to std::cout.
    (Wolfgang Bangerth, 2020/09/23)

  13. New: The classes FEEvaluation and FEFaceEvaluation with template parameter -1 for the polynomial degree is now based on pre-compiled templated code for polynomial degrees between 1 and 6. This allows for fast execution of matrix-free evaluation for run-time polynomial degrees. The generated instantiations are controlled by include/deal.II/matrix_free/evaluation_template_factory.templates.h and can be pre-compiled for additional degrees in user code.
    (Martin Kronbichler, Peter Munch, 2020/09/21)

  14. Fixed: Our cmake scripts forgot to install some of the files that are part of the code gallery. This is now fixed.
    (Wolfgang Bangerth, 2020/09/17)

  15. Fixed: DoFTools::extract_dofs() return an IndexSet as result used to have a quadratic complexity in the number of extracted indices. This is now fixed.
    (Martin Kronbichler, 2020/08/11)

  16. Added: method for returning list of all triangulation cells.
    (Alexander Grayver, 2020/09/03)

  17. Added: python wrapper for GridTools::replicate_triangulation, more general version of the GridTools::merge_triangulations is implemented
    (Alexander Grayver, 2020/09/01)

  18. New: The methods FEEvaluation::gather_evaluate(), FEEFaceEvaluation::gather_evaluate(), FEEvaluation::integrate_scatter() and FEfaceEvaluation::integrate_scatter() can now also accept block vectors.
    (Peter Munch, Magdalena Schreter, Martin Kronbichler, 2020/08/31)

  19. New: A particle collection can now be copied into a new ParticleHandler object using the new ParticleHandler::copy_from function.
    (Rene Gassmoeller, 2020/08/28)

  20. Added: DataOut now supports HDF5 file format with simplex meshes.
    (Pasquale Claudio Africa, 2020/08/27)

  21. Updated: GridTools::transform() now works with simplex meshes.
    (Pasquale Claudio Africa, 2020/08/26)

  22. Improved: The macro DEAL_II_PICKUP_TESTS can now also be run with on optional input parameter that can be used to manipulate the folder name of tests during ctest.
    (Peter Munch, 2020/07/23)

  23. New: The test suite can now also be run with .json files.
    (Peter Munch, 2020/08/17)

  24. Improved: The definitions of the templated functions of the HDF5 interface are now in hdf5.h, therefore it is possible to use additional template combinations. The instantiations are no longer necessary, therefore they have been removed.
    (Daniel Garcia-Sanchez, 2020/08/14)

  25. New: MGTools::make_sparsity_pattern() can now take an optional AffineConstraints argument to add the effect of, e.g., periodic boundary conditions.
    (Martin Kronbichler, 2020/08/11)

  26. Fixed: The DataPostprocessorTensor class erroneously announced that the components of its output are a bunch of scalars when, of course, the whole point of the class was to output things as one tensor field. This is now fixed.
    (Wolfgang Bangerth, 2020/08/06)

  27. New: GridIn::read_vtk() now supports triangular and tetrahedral meshes.
    (Peter Munch, 2020/07/23)

  28. New: GridIn::read_msh() now supports triangular and tetrahedral meshes.
    (Daniel Paukner, 2020/07/20)

  29. New: The method hp::FEFaceValues::reinit() can now also accept face iterators.
    (Peter Munch, 2020/07/16)

  30. New: The class hp::MappingCollection has a new constructor. This constructor creates a MappingCollection from one or more mapping objects passed to the constructor.
    (Peter Munch, 2020/07/15)

  31. Fixed: MeshWorker::mesh_loop() did not work on 1d with refined grids. This is now fixed.
    (Luca Heltai, 2020/07/08)

  32. Added the functions CUDAWrappers::MatrixFree::get_vector_partitioner() and CUDAWrappers::MatrixFree::get_dof_handler()
    (Bruno Turcksin, 2020/07/06)

  33. New: The new class Simplex::ScalarPolynomial provides polynomials defined on simplices.
    (Peter Munch, 2020/07/02)

  34. Fixed: In parallel hp-adaptive applications, DoFHandler::distribute_dofs() no longer fails to enumerate degrees of freedom on ghost interfaces if continuous finite elements do not dominate each other.
    (Marc Fehling, 2020/07/03)

  35. New: A new quadrature rule for simplex geometric entities has been added.
    (Peter Munch, 2020/07/02)

  36. New: Geometric objects of a Triangulation are assigned a ReferenceCell::Type. The value can be queried via TriaAccessor::reference_cell_type().
    (Peter Munch, 2020/06/30)

  37. New: The class ArrayView can now also be constructed from std::array.
    (Peter Munch, 2020/06/29)

  38. New: BoundingBox::real_to_unit() and BoundingBox::unit_to_real() allow one to apply both the direct and the inverse transformation that are needed to map the unit bounding box to the current box, and viceversa.
    (Luca Heltai, 2020/06/29)

  39. New: The member function DiscreteTime::set_next_step_size() is added.
    (Reza Rastak, 2020/06/27)

  40. New: There is now a constructor for class Tensor that takes an initializer from an object of type ArrayView.
    (Wolfgang Bangerth, 2020/06/27)

  41. Fixed: The class parallel::distributed::SolutionTransfer can now also handle FE_Nothing.
    (Dominic Soldner, Peter Munch, 2020/06/24)

  42. Fixed: FEInterfaceValues now works also for codim one and two. Instantiated also DoFTools::make_flux_sparsity_pattern() for codim one and two.
    (Luca Heltai, 2020/06/24)

  43. New: The class TriaAccessor provides now the capability to query the number of vertices, lines, and faces (with n_vertices(), n_lines(), n_faces(), vertex_indices(), line_indices(), face_indices()). The new methods can be used as an alternative to the methods in GeometryInfo.
    (Peter Munch, 2020/06/23)

  44. New: Added FEInterfaceValues to MeshWorker::ScratchData.
    (Luca Heltai, 2020/06/23)

  45. Fixed: The ParticleHandler::insert_particles() function forgot to associate particles with the common property pool. Consequently, setting properties on particles added to a ParticleHandler this way led to an error.
    (Andrew Davis, Wolfgang Bangerth, 2020/06/23)

  46. New: Particles::Particle and Particles::ParticleAccessor can now be used as indexable in boost::rtree objects.
    (Luca Heltai, 2020/06/15)

  47. New: The function Particles::ParticleHandler::add_global_particles() now takes another optional argument, that allows one to set ids arbitrarily. Moreover, now the numbering of the ids is correct also if we call the method more than one time. Newly added particles, if ids are not specified, now correctly get the first available ids. Added a new version of Particles::ParticleHandler::add_global_particles() that takes a vector of Particles::Particle objects instead of just their positions. This can be used in conjunction with the signal Particles::ParticleHandler::Signals::particle_lost() to reinsert Particles::Particle objects that went out of the locally owned and ghost cells.
    (Luca Heltai, 2020/06/11)

  48. Fixed: The AffineConstraints class had a bug where, if deal.II was compiled without threading, the class used a global variable. If a user program used threads nonetheless, this global variable led to race conditions. This is now fixed.
    (Wolfgang Bangerth, 2020/06/11)

  49. Fixed: Fix a bug where CUDAWrappers::MatrixFree::cell_loop() would set the destination vector to zero if the partitioner of the MatrixFree object was different from the partitioner of the source or destination vector.
    (Bruno Turcksin, 2020/06/10)

  50. New: Applying user constraints before prolongation in MGTransferPrebuilt.
    (Julian Roth and Conrad Clevenger, 2020/06/05)

  51. New: FEEvaluation::evaluate(), FEEvaluation::integrate(), FEFaceEvaluation::evaluate() and FEFaceEvaluation::integrate() now take an argument of type EvaluationFlags::EvaluationFlags to determine which of the values, gradients or hessians should be evaluated to quadrature points or integrated, allowing much more expressive programs than the previous list of bools. The evaluation flags can be combined with operator|, similarly to UpdateFlags for FEValues.
    (Timo Heister, 2020/06/05)

  52. Changed: The vertices in CellData are now stored in form of a std::vector instead of C-style array.
    (Peter Munch, 2020/05/31)

  53. Improved: The efficiency of the assembly of step-62 has been improved and now it is 7 times faster.
    (Daniel Garcia-Sanchez, 2020/05/31)

  54. Fixed: Fix a bug where only one CUDAWrappers::MatrixFree object was valid at a given time. There is now a variable CUDAWrappers::mf_n_concurrent_objects in base/cuda_size.h that controls the maximum number of concurrent objects. The default value is five.
    (Bruno Turcksin, 2020/05/29)

  55. New: Add multigrid transfer operators for distributed polynomial and global coarsening.
    (Peter Munch, Laura Prieto Saavedra, 2020/05/29)

  56. Improved: step-28 now uses tasks instead of threads.
    (David Wells, 2020/05/28)

  57. New: The class Particles::DataOut can now output particle properties as scalars, vectors, or tensors, depending on the arguments handed over to the Particles::DataOut::build_patches() function.
    (Rene Gassmoeller, 2020/05/27)

  58. New: When executing a task on a separate thread, if that task ends with throwing an exception instead of returing a value, then this exception will be obtained when you wait for the task using Threads::Task::join() or Threads::Task::return_value().
    (Wolfgang Bangerth, 2020/05/27)

  59. New: GridTools::Cache::get_locally_owned_cell_bounding_boxes_rtree() extracts a tree of bounding boxes covering the locally owned cells of a triangulation. This can be used in conjunction with GridTools::Cache::get_covering_rtree() to make approximate geometrical queries on who owns what spatial region.
    (Luca Heltai, 2020/05/26)

  60. New: pack_rtree_of_indices() and IndexableGetterFromIndices allow to construct an RTree object that stores indices to existing containers of indexable objects.
    (Luca Heltai, 2020/05/24)

  61. New: The class ParticleHandler now provides a signal 'signals.particle_lost' that is triggered whenever a particles can not be associated with a cell while calling its function sort_particles_into_subdomains_and_cells().
    (Rene Gassmoeller, 2020/05/25)

  62. Bugfix: hp::Refinement::choose_p_over_h() now works in parallel.
    (Marc Fehling, 2020/05/22)

  63. New: There is now a second overload for Particles::ParticleAccessor::set_properties() that takes an ArrayView as argument.
    (Wolfgang Bangerth, 2020/05/22)

  64. Removed: All headers under base/std_cxx11/ have been removed.
    (David Wells, 2020/05/21)

  65. Changed: In many other classes that are templated on dim and spacedim, the second template argument spacedim had a default value equal to dim. Particles::DataOut did not, but now does.
    (Wolfgang Bangerth, 2020/05/21)

  66. New: A new BoundingBoxDataOut class is available, to output a collection of objects that can be converted to BoundingBox objects in graphical format.
    (Luca Heltai, 2020/05/19)

  67. List rotated: The list of minor changes is now empty.
    (Matthias Maier, 2020/05/12)