Reference documentation for deal.II version 9.1.0-pre
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.

Incompatibilities

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

  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)

General

  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: Minor issues when using matrix-free cell categorization with multi-grid operators.
    (Denis Davydov 2018/08/02)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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