Reference documentation for deal.II version Git 9c5841c5ee 2019-11-11 14:05:52 -0700
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 variable level_mg_handler has been renamed to mg_level in MatrixFree and its associated AdditionalData.
    (Peter Munch, 2019/10/17)

  2. Changed: The type of exact_solution in VectorTools::integrate_difference() was double and fe_function could have any numerical type (double, float, std::complex<double> or std::complex<float>). This would lead in certain cases to unnecessary casts, for example from double to float. In addition it was not possible to compare a std::complex exact_solution to a std::complex fe_function. Now the types of exact_solution and fe_function must be the same, as a result integrate_difference() can be used to compare a std::complex exact_solution to a std::complex fe_function. The old version of the function has been deprecated.
    (Daniel Garcia-Sanchez, 2019/10/09)

  3. Changed: Several variations of the DoFTools::make_periodicity_constraints() function expressed the direction as an int variable. But it's really an unsigned quantity, and as a consequence was changed to unsigned int.
    (Wolfgang Bangerth, 2019/09/26)

  4. Changed: The parallel::TriangulationBase class does not store the number of active cells of all MPI processes any more. Instead, the information is computed on-demand when calling the function parallel::TriangulationBase::compute_n_locally_owned_active_cells_per_processor.
    (Peter Munch, 2019/09/20)

  5. Removed: The enum TimestepControl::Strategy is removed.
    (Reza Rastak, 2019/09/18)

  6. Changed: The Algorithms::TimeStepControl::file_name_format() functions have been removed. They were setters and getters for an internal field of that class that turned out to be unused anywhere – in other words, the functions had no real functionality.
    (Wolfgang Bangerth, 2019/09/18)

  7. Removed: BlockVectorBase::equ(a, U, b, V) is removed.
    (Reza Rastak, 2019/09/03)

  8. Changed: The interface to the parallel::CellWeights class was generalized by introducing static member functions. This way, users are capable of connecting and disconnecting callback functions manually if desired without instantiating an object of this class. The legacy interface has been deprecated.
    (Marc Fehling, 2019/09/03)

  9. Changed: A number of classes implementing tensor-valued polynomials had a member function called compute_n_pols(). This name has now been changed to n_polynomials(), better reflecting our usual naming scheme as well as what the function does – which in many cases is not actually computing but just returning something.
    (Wolfgang Bangerth, 2019/08/2)

  10. Changed: The complex operator overloads for multiplication and division are restricted to floating point types.
    (Daniel Arndt, 2019/08/21)

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

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

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

  14. Changed: The test suite now requires numdiff (i.e., it cannot be run with simply diff).
    (David Wells, 2019/08/10)

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

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

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

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

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

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

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

  22. 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. New: The FEInterfaceValues class provides a new abstraction to assemble interface terms between two neighboring cells. This is commonly used in Discontinous Galerkin methods.
    (Timo Heister, 2019/08/24)

  2. New: Introduce a new distributed triangulation class parallel::fullydistributed::Triangulation. It partitions the coarse-grid as well as works for hanging nodes, geometric multigrid, and arbitrary dimensions.
    (Peter Munch, 2019/07/26)

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

  4. 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: parallel::TriangulationBase::copy_triangulation does not copy the MPI communicator from the given source triangulation.
    (Alexander Grayver, 2019/10/31)

  2. Changed: SolverControl returns number of iterations of ArpackSolver after solving for Eigenvalues. It also checks if the requested eigenvalues are supported by the solver, depending on symmetry.
    (Roland Richter, 2019/10/17)

  3. New: add more quadrature choices to QuadratureSelector class.
    (Daniel Jodlbauer, 2019/11/11)

  4. Fixed: In step-54, the std namespace was missing for some calls to cout and endl.
    (Mohammed Hassan, Bruno Turcksin, 2019/11/07)

  5. New: template argument for type of vectorized array (vector width) in matrix-free operators.
    (Daniel Jodlbauer, 2019/11/06)

  6. Fixed: Computations with block vectors with more than 4 billion degrees of freedom reported incorrect values for locally_owned_elements(). This is now fixed by implementing IndexSet::add_indices() for large offsets.
    (Timo Heister, 2019/11/05)

  7. New: The Utilities::MPI::CollectiveMutex helper class allows protection of critical sections in code using MPI.
    (Timo Heister, 2019/11/04)

  8. Fixed: FESubfaceValues::reinit() would previously throw an exception when called on a face behind a refined periodic neighbor. This case is now handled properly.
    (Peter Munch, 2019/11/03)

  9. Changed: Fixed the computation of the finite element degree in VectorTools::project_boundary_values_curl_conforming_l2 to be based on the degree of the finite element selected for the application of the boundary values and not of the whole finite element.
    (Winnifried Wollner, 2019/11/02)

  10. New: DoFTools::make_periodicity_constraints() can now be used to implement Bloch periodic conditions.
    (Daniel Garcia-Sanchez, 2019/11/01)

  11. New: Added convenience functions CellAccessor::face_iterator_to_index() and TriaAccessor::child_iterator_to_index() for computing face and child numbers from iterators.
    (David Wells, 2019/10/27)

  12. New: Added two new overloads of FEValues::reinit() that take face and subface iterators instead of face and subface numbers.
    (David Wells, 2019/10/27)

  13. New: The Utilities::MPI::DuplicatedCommunicator helper class allows safe duplication and freeing of an MPI communicator.
    (Timo Heister, 2019/10/22)

  14. Improved: VectorTools::interpolate() now works for a parallel::distributed::Triangulation
    (Pasquale Claudio Africa, Doug Shi-Dong, 2019/10/24)

  15. New: new function Utilities::truncate_to_n_digits() that can be used to cutoff floating point numbers after a specified number of digits of accuracy (decimal places) in scientific floating point notation.
    (Niklas Fehn, 2019/10/18)

  16. Refactor: improve implementation of Utilities::needed_digits() by using functionality from the standard library.
    (Niklas Fehn, 2019/10/18)

  17. New: Extend function GridGenerator::torus<3,3>() so that one can generate an open torus with an angle of 0 < phi <= 2*pi.
    (Niklas Fehn, 2019/10/16)

  18. New: Provide cell iterators to interior and exterior cells of a macro face through the function MatrixFree::get_face_iterator().
    (Martin Kronbichler, Peter Munch, Michal Wichrowski, 2019/10/16)

  19. New: The function DataOutInterface::write_vtu_with_pvtu_record() combines write_vtu() and write_pvtu_record() into a single function and generates the file extensions with counter, processor ID, and .vtu/.pvtu ending automatically.
    (Niklas Fehn, 2019/10/14)

  20. New: The class VectorizedArray now provides STL-like member functions: VectorizedArray::size() returns the number of array elements and VectorizedArray:begin() as well as VectorizedArray::end() provide iterators enabling range-based iterations.
    (Martin Kronbichler, Peter Munch, Daniel Arndt, 2019/10/12)

  21. Improved: Make the output of cells, (all non-internal) faces and (all non-internal) co-faces optional in GridOut::write_vtk.
    (Peter Munch, Niklas Fehn, 2019/10/11)

  22. Fixed: Take in account p::d::Triangulation when using DoFHandler<dim, spacedim>::n_boundary_dofs() and its hp version. It now returns locally owned dofs instead of attempting a global count.
    (Doug Shi-Dong, 2019/10/11)

  23. New: The function GridTools::compute_maximum_aspect_ratio() computes the maximum aspect ratio of a mesh with arbitrarily deformed elements.
    (Niklas Fehn, 2019/10/08)

  24. Fixed: Make sure that merge_triangulations() does not forget about where the boundary is (the problem has actually been in create_triangulation(), which assigned numbers::internal_face_boundary_id to boundary faces)
    (Sebastian Stark, 2019/10/08)

  25. Improved: CUDAWrappers::MatrixFree::cell_loop() can now detect whether the given vectors have the same parallel MPI partitioner as the matrix-free class, which circumvents vector copies and speeds up execution. This approach has also been applied to step-64.
    (Martin Kronbichler, Peter Munch, 2019/09/27)

  26. Fixed: Manifold::get_new_point() previously ignored points weighted negatively. The original intent was to avoid to divide by a 0 weight, but the condition weight < tolerance resulted in ignoring negative weights. Additionally, the same function previously avoided get_intermediate_point() when the weight of of the first point was 0, but forgot to assign the new intermediate point to be the second point. The issues would mainly occur for derived Manifold classes that only implement the get_intermediate_point() function. Both issues are now fixed.
    (Doug Shi-Dong, 2019/09/26)

  27. Improved: Evaluate/integrate the gradients in CUDAWrappers::EvaluatorTensorProduct with collocation method if both values and gradients are requested.
    (Peter Munch, 2019/09/24)

  28. New: Provide new methods in CUDAWrappers::FEEvaluation that do neither take the local dof index nor the quadrature point but recompute them based on the thread id.
    (Peter Munch, 2019/09/24)

  29. Fixed: When called with update_volume_elements, MappingFEField had an assertion that accidentally checked the wrong field's size. This is now fixed.
    (Doug Shi-Dong, 2019/09/23)

  30. Improved: Unify compute_vertices_with_ghost_neighbors in parallel::TriangulationBase, parallel::distributed::Triangulation, and parallel::fullydistributed::Triangulation..
    (Peter Munch, 2019/09/21

  31. Changed: The storage type of MGLevelGlobalTransfer::copy_indices, MGLevelGlobalTransfer::copy_indices_global_mine, MGLevelGlobalTransfer::copy_indices_level_mine has been changed to a std::vector of Table<2,unsigned int>, in order to simplify some copy operations.
    (Martin Kronbichler, 2019/09/20)

  32. Improved: MGTools::make_boundary_list() has been made faster.
    (Martin Kronbichler, 2019/09/19)

  33. Improved: IndexSet::add_indices() could previously have quadratic complexity in the number of ranges if many ranges were added. This is now fixed. Note, however, that calling IndexSet::add_indices() many times still is of quadratic complexity.
    (Martin Kronbichler, 2019/09/19)

  34. Improved: The ghost setup of Utilities::MPI::Partitioner has been rewritten using Utilities::MPI::ConsensusAlgorithm to avoid global all-to-all communication, speeding up computations on many MPI ranks.
    (Peter Munch, Martin Kronbichler, 2019/09/17)

  35. Improved: The gzip compression previously applied by GridTools::exchange_cell_data_to_ghosts() has been disabled because network throughput is typically higher than the rate by which gzip is able to compress. This speeds up DoFHandler::distribute_dofs(), among others.
    (Martin Kronbichler, 2019/09/16)

  36. Added: Add a new particle generation function that can generate particles at random positions controlled by a probability density function.
    (Rene Gassmoeller, 2019/09/13)

  37. New: Allow to create parallel::fullydistributed::ConstructionData by groups, in which only one process actually creates ConstructionDatas and distributes them within the group.
    (Peter Munch, 2019/09/13)

  38. New: Add Boost serialization function to ::fullydistributed::CellData and ::fullydistributed::ConstructionData.
    (Peter Munch, 2019/09/13)

  39. New: Add Boost serialization function to CellData.
    (Peter Munch, 2019/09/13)

  40. Fixed: DoFHandler::distribute_mg_dofs() for distributed triangulations has been made up to ten times faster by replacing an inefficient function for the exchange of ghosted level degrees of freedom.
    (Martin Kronbichler, 2019/09/13)

  41. New: MGConstrainedDoFs now allows the user to define constraints on each multigrid level to be applied during prolongation in a matrix-free transfer.
    (Conrad Clevenger, 2019/09/13)

  42. New: Add method is_parent_of to CellId.
    (Peter Munch, 2019/09/11)

  43. New: There is a new variant of MatrixFree::cell_loop() which takes two std::function objects with ranges on the locally owned degrees of freedom, one with work to be scheduled before the cell operation first touches some unknowns, and one after the cell operation last touches them. The goal of these functions is to bring vector operations close to the time when the vector entries are accessed by the cell operation which increases the cache hit rate of modern processors (temporal locality).
    (Martin Kronbichler, 2019/09/10)

  44. New: compare_and_apply_mask() allows to use a ternary operater idiom with VectorizedArray that is based on generating a mask via component-wise comparison. Such a computational idiom is useful as an alternative to branching whenever the control flow itself would depend on (computed) data (which is not possible for vectorized data).
    (Matthias Maier, 2019/09/05)

  45. Fixed: Implementing LinearAlgebra::Vector::has_ghost_elements() improves compatibility between vector types.
    (Daniel Arndt, 2019/09/05)

  46. Added: GeometryInfo<dim>::unit_normal_vector provides outward-facing unit vectors for each face of the reference cell in the form of Tensor<1, dim>.
    (Reza Rastak, 2019/09/04)

  47. Fixed: PreconditionChebyshev can be used with LinearAlgebra::distributed::Vector with MemorySpace::CUDA. In particular, PreconditionChebyshev can set constrained indices to zero in the initial guess.
    (Daniel Arndt, 2019/09/03)

  48. New: Add a function, which creates a parallel::fullydistributed::ConstructionData from a serial and a distributed triangulation. This data structure can be used to initialize parallel::fullydistributed::Triangulation.
    (Peter Munch, 2019/09/02)

  49. Bugfix: In PolynomialsBDM, the degree() function is corrected to return a polynomial degree of k+1, instead of its previous value of k.
    (Graham Harper, 2019/09/02)

  50. Fixed: Reading the variable debug using ParameterHandler for the class Algorithms::Newton<VectorType> is fixed within the method Algorithms::Newton<VectorType>::parse_parameters().
    (Reza Rastak, 2019/08/31)

  51. Fixed: CUDAWrappers::MatrixFree::cell_loop() now works on adapted mesh even in two dimensions with finite elements of even degree.
    (Bruno Turcksin, 2019/08/31)

  52. New: Added a GridGenerator::generate_from_name_and_arguments() that leverages the MutableBind class to parse two strings, and generate a grid from them interpreting one as a GridGenerator function name to call, and the other as a tuple of arguments to pass to the function.
    (Luca Heltai, 2019/08/27)

  53. Changed: No of lines reported in step-3 documentation results section is corrected to two
    (Krishnakumar Gopalakrishnan, 2019/08/27)

  54. Changed: In step-3 docs, clarify wording on which objects belong to SparseMatrix & Vector classes.
    (Krishnakumar Gopalakrishnan, 2019/08/27)

  55. Bugfix: For parallel::distributed::Triangulation objects, p4est determines which cells will be refined and coarsened. Thus, refinement flags are not a good measure to predict refinement behavior for transferring active finite element indices. We now provide a matching coarsening strategy to the parallel::distributed::CellDataTransfer object responsible for their transfer. This fixes assertions being triggered in parallel::distributed::SolutionTransfer::interpolate().
    (Marc Fehling, 2019/08/27)

  56. New: There is a new constructor for DiagonalMatrix that immediately initializes the underlying vector.
    (Daniel Arndt, 2019/08/23)

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

  58. New: method try_get_data() added to CellDataStorage in both const and non-const forms. It returns a std_cxx17::optional which determines whether a cell has a data associated with it.
    (Reza Rastak, 2019/08/21)

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

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

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

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

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

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

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

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

  67. New: Add CellAccessor::face_iterators() and DoFCellAccessor::face_iterators() which return an iterator range over the faces of a cell.
    (Peter Munch, Wolfgang Bangerth, Daniel Arndt, 2019/08/14)

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

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

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

  71. Improved: Make a large number of prose, grammar, and various other improvements to the library.
    (Ashna Aggarwal, Mario Zepeda Aguilar, Manaswinee Bezbaruah, Bruno Blais, Kirana Bergstrom, Katherine Cosburn, Luel Emishaw, Rebecca Fildes, Andres Galindo, Brandon Gleeson, Bang He, Nicole Hayes, Jiuhua Hu, Lise-Marie Imbert-Gerard, Mannu Jayadharan, Marie Kajan, Charu Lata, Adriana Morales Miranda, Emily Novak, Rebecca Pereira, Geneva Porter, Irabiel Romero, Tonatiuh Sanchez-Vizuet, Sara Tro, 2019/08/08)

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

  73. Improved: parallel::distributed::ContinuousQuadratureDataTransfer allows the number of data values per quadrature points vary across the mesh. It also allows a cell to not have any associated quadrature data during refinement.
    (Reza Rastak, Marc Fehling, Peter Munch, 2019/08/09)

  74. New: Add a possible extension to step-2.
    (Wenjuan Zhang, 2019/08/08)

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

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

  77. New: Added Utilities::MutableBind class and Utilities::mutable_bind() method.
    (Luca Heltai, Matthias Maier, 2019/08/08)

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

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

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

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

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

  83. New: Added BlockMatrixBase::frobenius_norm(). (Jonathan Robey, 2019/08/06)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  112. New: 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)

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

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

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

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

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

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

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

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

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

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

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