Reference documentation for deal.II version Git 2ec7f2a 2018-07-19 19:43:15 -0400
Changes after Version 9.0.0

This is the list of changes made after the release of deal.II version 9.0.0. 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. Changes: The data transfer interface of the class parallel::distributed::Triangulation now requires different kinds of callback functions. register_data_attach() now takes std::function<std::vector<char>(cell_iterator &, CellStatus)>, which returns the buffer of the packed data. notify_ready_to_unpack() requires std::function<void(const cell_iterator &, const CellStatus, const boost::iterator_range<std::vector<char>::const_iterator &>, where the last argument describes an iterator range, from which the callback function is allowed to read.
    (Marc Fehling, 2018/07/07)

  2. Changed: MatrixCreator::create_mass_matrix and MatrixCreator::create_boundary_mass_matrix that had mixed number type (real valued for the matrix and complex valued for vectors) have been changed to support complex number types uniformly. This implies that now all underlying number types of matrix, vectors and AffineConstraint objects have to match; mixed variants are no longer supported.
    (Matthias Maier, 2018/05/25)

  3. Changed: The AffineConstraints object (formerly ConstraintMatrix) gained a template parameter for the underlying storage type. In order to facilitate this change, the interface for AffineConstraints has become more strict: In particular, the AffineConstraints::distribute_local_to_global(), AffineConstraints::add_entries_local_to_global(), and other functions now require that all matrix and vector arguments have the same matching number type as the AffineConstraints object.
    (Matthias Maier, 2018/05/25)

  4. Changed: The OpenCASCADE Manifold classes with names ending in Boundary (i.e., NormalProjectionBoundary, DirectionalProjectionBoundary, and NormalToMeshProjectionBoundary) have been deprecated in favor of renamed classes ending in Manifold (i.e., NormalProjectionManifold, DirectionalProjectionManifold, and NormalToMeshProjectionManifold).
    (David Wells, 2018/05/16)

  5. Changed: The PolynomialSpace::compute_index() and PolynomialsP::directional_degree() functions used to return their information through an array that they received as a reference argument. Instead, they now return a std::array<unsigned int,dim> by value.
    (Wolfgang Bangerth, 2018/05/09)


  1. Changed: The ConstraintMatrix class has been renamed to AffineConstraints. Further, AffineConstraints gained a template parameter for the underlying storage type. This in particular enables the definition of complex-valued constraints (for example, complex-valued Dirichlet boundary conditions, or periodic boundary conditions with an additional phase shift).
    (2018/05/31, Matthias Maier, Daniel Arndt, David Wells)

  2. New: The introduction to step-6 has been completely rewritten. It previously mentioned only the bare minimum about what this important tutorial program actually does. It now gives a much broader overview of why we use adaptive meshes and how this is achieved in practice.
    (Wolfgang Bangerth, 2018/05/25)

  3. Changed: clang-format replaces astyle as source code formatting tool.
    (2018/05/24, Matthias Maier, Daniel Arndt)

  4. New: FE_NedelecSZ is a new H(curl)-conforming element which overcomes the sign conflict problem which can be encountered for Nedelec elements on hexahedral meshes. This is an implementation of the method described in the PhD thesis of Sabine Zaglmayr and should be considered over the FE_Nedelec element where meshes with non-standard orientation are used. Note that not all functionality (e.g. Hessians), has been implemented for this element.
    (Ross Kynch, 2018/04/28)

Specific improvements

  1. Fixed: Iterating over the entries of a TrilinosWrappers::SparsityPattern object in parallel and after calling TrilinosWrappers::SparsityPattern::compress() works now.
    (Mathias Anselmann, Daniel Arndt, 2018/07/11)

  2. Fixed: GridTools::delete_duplicated_vertices also treats the SubCellData object correctly when renumbering the vertices.
    (Daniel Arndt, 2018/07/08)

  3. New: GridGenerator::merge_triangulations gained an option to copy manifold ids.
    (Daniel Arndt, 2018/07/08)

  4. New: Add Gridgenerator::plate_with_a_hole() that generates a rectangular plate with an (offset) cylindrical hole.
    (Denis Davydov 2018/06/21)

  5. New: Add support for output of tensor-valued data in DataOut::write_vtu(). (Denis Davydov 2018/06/21)

  6. New: Extend get_vector_data_ranges() to return extra element in the tuple to represent DataComponentInterpretation. The functions were renamed to get_nonscalar_data_ranges().
    (Denis Davydov 2018/06/21)

  7. Fixed: FETools::back_interpolate can be used for TrilinosWrappers::MPI::BlockVector.
    (Daniel Arndt, 2018/06/20)

  8. Changed: Calling GridGenerator::refine_and_coarsen_fixed_fraction() and GridGenerator::refine_and_coarsen_fixed_fraction() with values for the coarsen and refine fractions that added to 1.0 in exact arithmetic, but something slightly larger in floating point arithmetic, resulted in an error. These functions are now slightly more relaxed in that they allow arguments that add to 1.0 up to a small floating point round off error.
    (Wolfgang Bangerth, 2018/06/18)

  9. New: The LinearAlgebra::distributed::Vector::compress() function has gained two new combine operations VectorOperation::min and VectorOperation::max to define the entry at the owning processor as the minimum/maximum of its own value and the one coming from a ghost.
    (Svenja Schoeder, 2018/06/18)

  10. Fixed: TrilinosWrappers::MPI::Vector::reinit check now checks if parallel_partitioner is_ascending_and_one_to_one before calling make_trilinos_map because make_trilinos_map may be able to make a linear map if is_ascending_and_one_to_one is true.
    (Joshua Hanophy, 2018/06/16)

  11. Fixed: The eigenvalue approximation in SolverGMRES failed if no iterations were performed. Now, there is simply no output in this case.
    (Daniel Arndt, 2018/06/15)

  12. Bugfix: Fixed bugs for TrilinosWrapper::SparseMatrix::add(factor, other_matrix) and TrilinosWrapper::SparseMatrix::copy_from(other_matrix) for the case of non-contiguous rows.
    (Uwe Koecher 2018/06/14)

  13. Fixed: Mismatched numbers of components between the exact solution and underlying FE in step-51.
    (Pi-Yueh Chuang 2018/06/14)

  14. Bugfix: Fixed a bug where VectorDataExchange::ghosts_were_set was not set inside MatrixFree::cell_loop() for block vectors with many blocks.
    (Denis Davydov 2018/06/12)

  15. Fixed: CMake now supports again in-source builds (This functionality was accidentally broken in the previous release).
    (Matthias Maier 2018/06/11)

  16. Deprecated: FunctionMap is deprecated. It is recommended to use the aliased type directly.
    (Daniel Arndt, 2018/06/11)

  17. Fixed: BlockLinearOperator::vmult(), BlockLinearOperator::vmult_add(), BlockLinearOperator::Tvmult() and BlockLinearOperator::Tvmult_add() can be used with identical source and destination vectors.
    (Daniel Arndt, 2018/06/10)

  18. Improved: Extend ScaLAPACKMatrix::invert() to use pXtrtri for inversion of triangular matrices.
    (Sambit Das 2018/06/06)

  19. New: TimerOutput::cpu_and_wall_times_grouped will print CPU and wallclock time in a single table.
    (Denis Davydov 2018/05/29)

  20. Improved: TimerOutput now dynamically adjust to the the width of Section column.
    (Denis Davydov 2018/05/29)

  21. New: The function GridTools::find_all_active_cells_around_point() returns a list of all cells around a point, rather than only a single one for the old GridTools::find_active_cell_around_point.
    (Martin Kronbichler, Niklas Fehn, 2018/05/28)

  22. Improved: MatrixFree::cell_loop() and MatrixFree::loop() directly use LinearAlgebra::distributed::BlockVector::update_ghost_values() and LinearAlgebra::distributed::BlockVector::compress() calls on block vectors with many blocks, rather than splitting each method into two parts for overlapping communication and computation. The latter is inefficient as soon as too many MPI requests are in flight.
    (Martin Kronbichler, Denis Davydov 2018/05/24)

  23. Fixed: step-16 was broken caused by uninitialized variables, it is now fixed.
    (Ce Qin, 2018/05/21)

  24. Improved: MGTransferPrebuilt now supports PETScWrappers::MPI::Vector and PETScWrappers::MPI::SparseMatrix.
    (Alexander Knieps, 2018/05/21)

  25. Fixed: DoFTools::make_flux_sparsity_pattern was accessing invalid dof indices in case neighboring cells were not using FiniteElement objects with the same number of degrees of freedom. This is fixed now.
    (Daniel Arndt, 2018/05/19)

  26. Fixed: Two invalid off-by-one data accesses in the initialization of MatrixFree with face data enabled, that appeared in some rare cases on certain configurations of processors, have been fixed.
    (Daniel Arndt, Martin Kronbichler, 2018/05/18)

  27. New: A new tutorial program, step-60, shows how to deal with non-matching discretizations using Distributed Lagrange Multipliers.
    (Luca Heltai, Giovanni Alzetta, 2018/05/07)