Reference documentation for deal.II version Git 44cadcc 2018-09-20 11:24:07 +0200
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. Changed: Triangulation::create_triangulation() doesn't allow to set a boundary id different from numbers::internal_face_boundary_id for internal faces anymore.
    (Daniel Arndt, 2018/08/07)

  2. 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.
    Further, the register_data_attach() function now requires a boolean argument returns_variable_size_data, which denotes if the registered pack_callback function interacts with the fixed size (=false) or variable size (=true) buffer for data transfer.
    (Marc Fehling, 2018/07/20)

  3. 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)

  4. 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)

  5. 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)

  6. 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: hp::DoFHandler::distribute_dofs() called on parallel::distributed::Triangulation objects now assigns exactly one index for each degree of freedom located on interfaces with ghost cells. Previously, those degrees of freedom were assigned indices by each adjacent subdomain.
    (Marc Fehling, 2018/08/31)

  2. New: The parallel::distributed::SolutionTransfer class is now capable of transferring data that has been associated with a hp::DoFHandler object. See the class documentation of the former on how to use this new functionality.
    (Marc Fehling, 2018/08/15)

  3. Improved: GridGenerator::extrude_triangulation can now optionally extrude manifold ids.
    (2018/08/11, David Wells)

  4. New: FE_BernardiRaugel is the implementation of an element developed by Christine Bernardi and Genevieve Raugel in the 1985 Mathematics of Computation paper. The Bernardi-Raugel element is an enrichment of the P1-P0 element for Stokes problems by the addition of edge-based quadratic bubble functions. The original description is for simplicial meshes, but this implementation is for quadrilateral and hexahedral meshes. The BR1-P0 pair is LBB stable for Stokes problems. Due to the edge-based bubble functions, features such as hanging nodes are not supported.
    (Graham Harper 07/09/2018)

  5. New: A new function GridGenerator::channel_with_cylinder has been added. This function generates a grid corresponding to the classic flow past a cylinder test problem, and uses manifolds to blend between the description of the cylinder and the Cartesian bulk geometry.
    (2018/07/04, David Wells)

  6. 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)

  7. 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)

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

  9. 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)

  10. New: The new class ColorEnriched::Helper constructs an hp::FECollection, a collection of finite element objects used by hp::DoFHandler, in a domain with multiple, possibly overlapping, sub-domains with individual enrichment functions. Note that the overlapping regions may have multiple enrichment functions associated with them. This is implemented using a general constructor of FE_Enriched which allows different enrichment functions.
    (Nivesh Dommaraju, Denis Davydov, 2018/04/20)

Specific improvements

  1. New: extend Patterns::Tools::Convert to work with ComponentMask and std::unique_ptr<FunctionParser>.
    (Denis Davydov 2018/09/19)

  2. New: SolverSelector gained a new constructor initializing the object completely.
    (Daniel Arndt, 2018/09/17)

  3. New: added the function TrilinosWrappers::MPI::Vector::import() to get data from a ReadWriteVector.
    (Timo Heister, 2018/09/16)

  4. Fixed: make test now runs in parallel automatically (i.e., it uses a CMake command to determine the number of cores available). Since make test just immediately invokes ctest as a subprocess, it is currently not possible to link the number of globally available make processes with the number of concurrently run tests; i.e., the number of cores make test uses is not changeable by users.
    (David Wells, 2018/09/13)

  5. Fixed: VectorTools::project_boundary_values_div_conforming works correctly in case the DoFHandler object contains more than one FE_RaviartThomas element.
    (Daniel Arndt, 2018/09/13)

  6. New: The function DoFRenumbering::hierarchical() is now also available for hp::DoFHandler objects, as well as for DoFHandlers build on triangulations with dim != spacedim.
    (Wolfgang Bangerth, 2018/09/06)

  7. Added: New function Utilities::MPI::compute_n_point_to_point_communications() is implemented to be used for computing number of processes in an MPI universe to expect communication from.
    (Eldar Khattatov, 2018/09/04)

  8. New: Utilities::CUDA::allocate_device_data() and Utilities::CUDA::delete_device_data() help to manage data on CUDA devices using std::unique_ptr.
    (Daniel Arndt, 2018/09/01)

  9. Fixed: Member function AffineConstraints::add_entries() now skips already existing entries.
    (Dustin Kumor, 2018/08/24)

  10. Fixed: TrilinosWrappers::SparseMatrix::mmult() sometimes gave the wrong result in parallel.
    (Damien Lebrun-Grandie and Bruno Turcksin, 2018/08/22)

  11. Fixed: The function Particles::ParticleAccessor::serialize() was declared but not implemented. This is now fixed.
    (Wolfgang Bangerth, 2018/08/21)

  12. New: Add a mask argument to filter out some vector lanes in FEEvaluationBase This is required for local time stepping using the MatrixFree framework, because some cells of batches must be excluded from read/write operations when operating on different time steps compared to their neighbor cells. (Svenja Schoeder, 2018/08/21)

  13. New: Table and FullMatrix now have complete (both mutable and const) random-access iterators.
    (David Wells, 2018/08/20)

  14. New: CUDAWrappers::PreconditionILU and CUDAWrappers::PreconditionIC can be used for preconditioning CUDAWrappers::SparseMatrix objects.
    (Daniel Arndt, 2018/08/20)

  15. New: There are nothrow versions of AssertCUDA and AssertCusparse, namely AssertNothrowCUDA and AssertNothrowCusparse.
    (Daniel Arndt, 2018/08/20)

  16. New: There are new methods CUDAWrappers::SparseMatrix::print() and CUDAWrappers::SparseMatrix::print_formatted(). Additionally, CUDAWrappers::SparseMatrix gained a move assignment operator.
    (Daniel Arndt, 2018/08/20)

  17. New: There is LinearAlgebra::CUDAWrappers::Vector::norm_sqr() for computing the squared l2-norm and LinearAlgebra::CUDAWrappers::Vector::swap() for swapping two vectors.
    (Daniel Arndt, 2018/08/17)

  18. Fixed: CUDAWrappers::Vector performs now a deep copy instead of a shallow copy in its copy assignment operator.
    (Daniel Arndt, 2018/08/16)

  19. Fixed: MGConstrainedDofs::initialize(...) now handles refinement edges across periodic boundaries correctly.
    (Alexander Knieps 2018/08/13)

  20. Fixed: Bug using ScaLAPACKMatrix::save() and load() for configurations with pHDF5 in combination with serial HDF5 matrices from user code.
    (Benjamin Brands 2018/08/10)

  21. Improved: Triangulation::prepare_coarsening_and_refinement also takes care of limiting the level difference across periodic boundary faces.
    (Daniel Arndt, Stefan Kaessmair, 2018/08/09)

  22. New: The new function MatrixFreeOperators::CellwiseInverseMassMatrix::transform_from_q_points_to_basis() enables to change the basis from a representation in quadrature points into the original basis of FEEvaluation.
    (Martin Kronbichler, 2018/08/06)

  23. Improved: FEEvaluation and FEFaceEvaluation have gained support for renumbering of degrees of freedom for fully discontinuous finite element spaces which can improve performance by around 10 percent.
    (Martin Kronbichler, 2018/08/06)

  24. New: Add support for constraint when using matrix-free on GPU. Note you cannot set constraints in 2D if the degree of the finite element is even.
    (Bruno Turcksin, 2018/08/06)

  25. New: A convenience function Triangulation::active_face_iterators() (which is like Triangulation::active_cell_iterators(), but for faces) has been added.
    (David Wells, 2018/08/05)

  26. Fixed: Minor issues when using matrix-free cell categorization with multi-grid operators.
    (Denis Davydov 2018/08/02)

  27. Fixed: The import function for LinearAlgebra::distributed::Vector would fail if the IndexSet of the ReadWriteVector has no locally owned element
    (Bruno Turcksin, 2018/08/02)

  28. New: GridGenerator::merge_triangulations can merge multiple Triangulation objects at once.
    (Daniel Arndt, 2018/08/01)

  29. New: LinearAlgebra::distributed::Vector has an extra template parameter MemorySpace. This new template parameter can be used if the data should be allocated on the host or on the device.
    (Bruno Turcksin, 2018/08/01)

  30. Added support for high-order VTU output by using newly introduced Lagrange VTK cells.
    (Alexander Grayver, 2018/08/01)

  31. Added support for high-order VTK output by using newly introduced Lagrange VTK cells.
    (Alexander Grayver, 2018/07/27)

  32. New: Add FiniteSizeHistory class to store a finite-size history of objects.
    (Denis Davydov 2018/07/26)

  33. Deprecate project_boundary_values_curl_conforming in favor of project_boundary_values_curl_conforming_l2. The former has a number of known limitations and bugs.
    (Alexander Grayver, 2018/07/26)

  34. New: Add boost adaptor for BoundingBox.
    (Luca Heltai, 2018/07/24)

  35. New: Class parallel::distributed::ActiveFEIndicesTransfer has been introduced to transfer the active_fe_index of each cell across meshes in case of refinement/serialization, if a hp::DoFHandler has been used with a parallel::distributed::Triangulation.
    (Marc Fehling, 2018/07/23)

  36. New: Added geometry adaptors for boost.
    (Luca Heltai, Bruno Turcksin, 2018/07/22)

  37. New: Add new constructor type for FunctionParser class.
    (Luca Heltai, 2018/07/21)

  38. Fixed: hp::DoFHandler::distribute_dofs() now works on parallel::distributed::Triangulation<3> objects that contain artificial cells.
    (Marc Fehling, 2018/07/20)

  39. Changed: The Subscriptor class has been made thread-safe, and its behavior in debug and release modes are now identical. Although this makes subscription and un-subscription slightly more expensive in release mode, debugging should be easier overall.
    (Jean-Paul Pelteret, 2018/07/15)

  40. New: A new function GridGenerator::concentric_hyper_shells has been added. This function generates a grid comprised of shells of varying widths, where the shells near the center are much thinner than those near the outer boundary.
    (David Wells, 2018/07/15)

  41. 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)

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

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

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

  45. Fixed: The functions FEFaceEvaluation::evaluate and FEFaceEvaluation::integrate would access invalid memory when only evaluating function values and using multiple components in 1D. This is now fixed.
    (Martin Kronbichler, 2018/07/04)

  46. New: The class MatrixFreeFunctions::CellwiseInverseMassMatrix can now also be used in 1D.
    (Martin Kronbichler, 2018/07/04)

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

  48. 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)

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

  50. 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)

  51. 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)

  52. 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)

  53. 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)

  54. 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)

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

  56. 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)

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

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

  59. 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)

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

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

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

  63. 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)

  64. 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)

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

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

  67. 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)

  68. 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)

  69. 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)

  70. New: Classes that act as an interface to the drivers of internally supported automatic differentiation libraries (ADOL-C and Sacado) have been implemented. A brief summary of what these classes are used for is given in the Automatic differentiation module.
    (Jean-Paul Pelteret, 2017/11/18)