Reference documentation for deal.II version Git 7baca85e57 2019-08-23 17:29:05 -0400
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: The complex operator overloads for multiplication and division are restricted to floating point types.
    (Daniel Arndt, 2019/08/21)

  2. 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.
    (Wolfgang Bangerth, 2019/08/21)

  3. 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.
    (Peter Munch, 2019/08/19)

  4. Replaced: boost::optional was replaced by std_cxx17::optional that wraps the former and std::optional depending on compiler support for C++17.
    (Daniel Arndt, 2019/08/17)

  5. 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.
    (Reza Rastak, 2019/08/08)

  6. 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.
    (Graham Harper, 2019/08/06)

  7. 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.
    (Wolfgang Bangerth, 2019/08/05)

  8. Removed: The deprecated PreconditionChebyshev member variables nonzero_strarting and matrix_diagonal_inverse were removed.
    (Daniel Arndt, 2019/07/11)

  9. 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.
    (Marc Fehling, 2019/06/26)

  10. Removed: The deprecated headers deal.II/grid/tria_boundary.h and deal.II/grid/tria_boundary_lib.h have been removed.
    (Martin Kronbichler, 2019/06/13)

  11. 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.
    (Marc Fehling, 2019/06/06)

  12. 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.
    (Martin Kronbichler, 2019/06/03)


  1. Improved: deal.II now bundles a subset of Boost 1.70 instead of a subset of Boost 1.62.
    (Daniel Arndt, 2019/07/19)

  2. 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.
    (Martin Kronbichler, 2019/06/06)

Specific improvements

  1. Changed: step-3 now uses VTK as the output file format.
    (Wolfgang Bangerth, 2019/08/23)

  2. Fixed: OpenCASCADE::interpolation_curve() returned a TopoDS_Shape that was not properly closed. This is now fixed.
    (Luca Heltai, 2019/08/21)

  3. 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.
    (Sebastian Stark, 2019/08/19)

  4. New: Implement DoFAccessor::set_mg_dof_indices and get_mg_dof_indices for 1D.
    (Peter Munch, 2019/08/18)

  5. New: Introduce new class parallel::DistributedTriangulationBase between parallel::TriangulationBase and parallel::distributed::Triangulation.
    (Peter Munch, 2019/08/17)

  6. Fixed: Forward declarations in header files are prevented from confusing doxygen.
    (Reza Rastak, 2019/08/16)

  7. New: Enable internal::DoFHandlerImplementation::Policy::ParallelDistributed for 1D.
    (Peter Munch, 2019/08/16)

  8. New: Add method to get the coarse-grid cell from CellID.
    (Peter Munch, 2019/08/15)

  9. Added: Add a Particles::Generators namespace and a first implementation that generates particles at regular position in the reference domain.
    (Rene Gassmoeller, 2019/08/14)

  10. New: Add an iterator over all faces of a cell(accessor).
    (Peter Munch, Wolfgang Bangerth, Daniel Arndt, 2019/08/14)

  11. New: Generalize internal::DoFHandlerImplementation::Policy::ParallelDistributed such that it uses the new definition of CellId.
    (Peter Munch, 2019/08/14)

  12. 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.
    (Peter Munch, 2019/08/13)

  13. 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.
    (Martin Kronbichler, Fabian Castelli, 2019/08/11)

  14. New: Added the function GridGenerator::subdivided_hyper_L().
    (Mae Markowski, 2019/08/10)

  15. Added: Add a possible extension in step-2 Tutorial.
    (Wenjuan Zhang, 2019/08/08)

  16. Added: GridGenerator::eccentric_hyper_shell() a volume contained between two circles or spheres centered around two different points.
    (Melanie Gerault, 2019/08/08)

  17. Significantly improved usability: Added an entry for CMakeLists.txt.user in .gitignore. This file gets generated by QT Creator.
    (Matthias Maier, 2019/08/08)

  18. Debug: Fixed two functions in GridTools::Cache class (in source/grid/, namely get_used_vertices_rtree() and get_cell_bounding_boxes_rtree where the update flag were not cleared. Fixed that by adding a line to both functions at the end of if loop checking the flag.
    (Manu Jayadharan, 2019/08/08)

  19. New: Added std_cxx17::apply() method.
    (Luca Heltai, 2019/08/08)

  20. Found the original wording asking for user to explore more refinements to be confusing and redundant given that previous paragraph asks to look at results of a p-refinement. Assuming they meant to now explore h-refinement, I changed the text to make this more clear. (Katherine Cosburn, 2019/08/08)

  21. 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.
    (Bruno Turcksin, 2019/08/08)

  22. Improved: Fixed two typos, one in the introduction document for step-33 and another on in the file.
    (Adriana Morales Miranda, 2019/08/08)

  23. Changed: Fixed typo in matrix_tools.h, "Dirichlet bc" to "Dirichlet B.C."
    (Sara Tro, 2019/08/07)

  24. Changed: Added references to intro of step 51. Included the references in the bibliography
    (Tonatiuh Sanchez-Vizuet 2019/08/08)

  25. Fixed: Bug in CellDataStorage that produced error when applying adaptive refinement in multi-material grids.
    (Reza Rastak, Peter Munch, 2019/08/07)

  26. Improved: Changed the wording to a paragraph in step-3 that mentioned boundary indicators.
    (Rebecca Pereira, 2019/08/07)

  27. Changed: Added a descriptive sentence to the glossary entry for active.
    (Rebecca Fildes, 2019/08/07)

  28. Changed: The saturation equation in step-21 is explained further for consistency with literatures in porous media transport.
    (Omotayo Omosebi, 2019/08/07)

  29. Changed: Fixed some wording and minor typos in step-20 documentation.
    (Nicole Hayes, 2019/08/07)

  30. Improved: Changes in grid_generator.h The original documentation of enclosed_hyper_cube said 'first two parameters' in the second line, which was a bit unclear. I made that more specific. The coloring scheme was also unclear, especially with the use of bitwise OR as a verb. The moebius function had a pi outside of math mode, not a huge error.
    (Manaswinee Bezbaruah, 2019/08/05)

  31. Changed: Improved the documentation about GridGenerator::subdivided_hyper_cube().
    (Manu Jayadharan, 2019/08/07)

  32. Fixed: Fixed some markdown syntax errors in step 3.
    (Charu Lata, 2019/08/07)

  33. Changed:

    1. Add the HDG overview article in the references.bib file.The overview article is by N.C. Nguygen and J. Peraire: Hybridzable discontinuous Galerkin methods for partial differential equations in continuum mechanics, Journal of Computational Physics, 2012.
    2. In the introduction part of step-51, I replace the above article by its referenced name.
      (Jiuhua Hu, 2019/08/07)

  34. Changed: Fixed typo in the documentation for step_3
    (Bang He, 2019/08/07)

  35. Changed: The step-4 tutorial commented description of the right-hand side function and importance of dim, has been updated for grammatical clarity.
    (Brandon Gleeson, 2019/08/07)

  36. Improved: CellDataStorage::get_data(cell) now checks whether we are retriving using a data type that matches the type we used to initialize the cell data.
    (Reza Rastak, 2019/08/06)

  37. Fixed: Addressed a minor stylistic issue in the step-1 tutorial documentation where single quotes were being used instead of backticks.
    (Marie Kajan, 2019/08/06)

  38. Fixed: step-20 tutorial permeability computation now uses Tensor::norm_square instead of Point::square on a difference of points.
    (Kirana Bergstrom, 2019/08/06)

  39. New: Added frobenius_norm method to BlockMatrixBase. (Jonathan Robey, 2019/08/06)

  40. Added an image for the cylindrical shell grid generator and a small discussion on what this image illustrates. (Bruno Blais, 2019/08/06)

  41. Improved: Unified in-line journal citations in steps 1,6, and 18; Bibtex style formattting in a central bibliography.
    (Adam Lee, 2019/08/06)

  42. Changed: The step-5 program no longer uses EPS to output the solutions, but the far more modern VTK/VTU format.
    (Wolfgang Bangerth, 2019/08/03)

  43. Changed: The step-1 program no longer uses EPS to output the meshes, but the far more modern SVG format.
    (Wolfgang Bangerth, 2019/08/03)

  44. Improved: The function make_periodicity_constraints() can now be used with std::complex<double> numbers.
    (Daniel Garcia-Sanchez, 2019/08/02)

  45. New: Amend VectorizedArray with a default constructor and a constructor taking a scalar value.
    (Peter Munch, 2019/07/29)

  46. New: The content of a VectorizedArray object can be printed using the output operator.
    (Daniel Arndt, 2019/07/29)

  47. Fixed: AffineConstraints::set_zero() can be used with LinearAlgebra::distributed::Vector with MemorySpace::CUDA.
    (Daniel Arndt, 2019/07/28)

  48. New: Enable periodicity for 1D triangulations (only for DoFHandler).
    (Peter Munch, 2019/07/27)

  49. 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.
    (Bruno Turcksin, 2019/07/24)

  50. Improved: Add assignment operator for two Points with different underlying scalar types.
    (Daniel Garcia-Sanchez, 2019/07/23)

  51. 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.
    (Bruno Turcksin, 2019/07/23)

  52. New: MappingFEField can now also be initialized on multigrid levels by handing in an appropriately sized vector of position vectors for the levels.
    (Martin Kronbichler, Johannes Heinz, 2019/07/22)

  53. 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().
    (Daniel Arndt, 2019/07/19)

  54. Improved: constexpr evaluation is enabled in SymmetricTensor and TableIndices.
    (Reza Rastak, 2019/07/13)

  55. 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.
    (Peter Munch, 2019/07/13)

  56. 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.
    (Martin Kronbichler, 2019/07/12)

  57. 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.
    (Graham Harper, 2019/07/12)

  58. New: It is possible to access value type Number of VectorizedArray<Number,width> directly via VectorizedArray<Number, width>::value_type.
    (Peter Munch, 2019/07/10)

  59. New: CUDAWrappers::FEEvaluation::get_dof_values() and CUDAWrappers::FEEvaluation::submit_dof_values() provide access to the values stored for the degrees of freedom.
    (Daniel Arndt, 2019/07/09)

  60. Improved: flatten_triangulation() description by adding parameter inputs.
    Luel Emishaw (2019/09/08)

  61. New: The library contains a new manual page describing how to package deal.II for distribution in a Unix-like distribution.
    (David Wells, 2019/07/07)

  62. 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.
    (Peter Munch, 2019/07/06)

  63. Improved: All member functions and free functions related to Point that can be used in CUDA code so far have been annotated accordingly.
    (Daniel Arndt, 2019/07/05)

  64. 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.
    (Peter Munch, 2019/07/04)

  65. Improved: All member funtions and free functions related to Tensor that can be used in CUDA code so far have been annotated accordingly.
    (Daniel Arndt, 2019/07/03)

  66. Fixed: CUDAWrappers::MatrixFree::cell_loop() would deadlock on adaptively refined meshes when using Volta GPU.
    (Bruno Turcksin, 2019/07/02)

  67. New: Class CellDataTransfer has been introduced to transfer cell by cell data across meshes in case of refinement/serialization.
    (Marc Fehling, 2019/06/26)

  68. 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.
    (Martin Kronbichler, 2019/06/24)

  69. Improved: The function project_boundary_values_curl_conforming_l2() can now be used with std::complex<double> numbers.
    (Daniel Garcia-Sanchez, 2019/06/22)

  70. Added: The function "Schur-product" was added for the Tensor-class, allowing the entrywise multiplication of tensor objects of general rank
    (Roland Richter, 2019/06/10)

  71. New: Namespace hp::Refinement offering decision tools for p adaptivity.
    (Marc Fehling, 2019/06/07)

  72. Unified DoFTools::extract_dofs() for DoFHandler and hp::DoFHandler.
    (Daniel Arndt, Mathias Anselmann, 2019/06/07)

  73. 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.
    (Martin Kronbichler, 2019/06/06)

  74. Improved: The function Utilities::MPI::compute_index_owner() is used in Utilities::MPI::Partitioner to avoid global all-to-all communication, speeding up computations on many MPI ranks.
    (Peter Munch, 2019/06/03)

  75. 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.
    (Peter Munch, 2019/06/03)

  76. 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.
    (Martin Kronbichler, Peter Munch, 2019/06/03)

  77. 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.
    (Bruno Turcksin, 2019/06/02)

  78. New: Tensor<rank, dim, Number> can be constructed and manipulated in constexpr setting (if supported by the compiler).
    (Reza Rastak, 2019/05/26)

  79. Fixed: FullMatrix can now be packed into std::vector and unpacked from it using std::copy and the begin() and end() iterators.
    (Reza Rastak, 2019/05/24)

  80. Fixed: TrilinosWrappers::SparsityPattern can deal with empty column maps.
    (Daniel Arndt, Mathias Anselmann, 2019/05/22)

  81. 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.
    (Niklas Fehn, Martin Kronbichler, 2019/05/16)

  82. New: The InterpolatedUniformGridData::gradient() function was not previously implemented. It is now.
    (Bob Myhill, Anne Glerum, Wolfgang Bangerth, 2018/09/27)