Reference documentation for deal.II version Git 20e5cff 2017-01-17 12:52:29 -0500
Changes between Version 8.0 and 8.1

This is the list of changes made between the deal.II releases listed above. All entries are signed with the names of the author.


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: During the implementation of the 64-bit features for deal.II 8.0, many linear algebra classes obtained a local typedef size_type indicating the integer type that is used to index into them. In some instances, this was accidentally set to types::global_dof_index (which may be a 64-bit data type) even in cases where this is clearly not going to work, for example for FullMatrix::size_type, since we will not be able to store full matrix objects of sizes for which a 32-bit index type is not sufficient. In these cases, the typedef was reverted to just unsigned int.
    (Wolfgang Bangerth, 2013/12/04)

  2. Removed: With the switch of the testsuite to CMake, the old report_features and build test facilities are removed.
    (Matthias Maier, 2013/12/03)

  3. Changed: The kinds of template arguments for the VectorTools::interpolate function taking a Mapping as first argument has changed. This was done to work around a bug in the Intel ICC compiler which led to linker errors. Since the actual function argument list remains unchanged, the only way you will notice this change is if you explicitly specify template arguments. The only place one would typically do that is if you take the address of a template function. Since this is not a common operation, the impact of this change is probably limited.
    (Wolfgang Bangerth, 2013/11/27)

  4. Changed: The ghost handling of the parallel::distributed::Vector class has been reworked: The vector now carries a global state that stores whether ghost elements have been updated or not. If a vector has ghost elements, it does not allow calls to compress() any more. Instead, a compress operation can now only be done when the ghost entries have been cleared before by calling zero_out_ghosts() or operator=0. The state can be queried by the new method has_ghost_elements(). This change avoids spurious entries to be inserted with compress(), but requires some change in user codes. The behavior of a ghosted vector is now very similar to ghosted PETSc and Trilinos vectors. The only difference is that the same vector can also be used as a non-ghosted vector which is designed for use in assembly routines.
    (Martin Kronbichler, 2013/10/18)

  5. Removed: GridTools::collect_periodic_face_pairs. This function is superseded by GridTools::collect_periodic_faces which exports an std::vector<PeriodicFacepair<...>> instead.
    (Matthias Maier, 2013/09/30)

  6. Removed: The member function face_to_equivalent_cell_index() in FiniteElementData has been removed. It had been deprecated a while back already. Please use FiniteElement::face_to_cell_index() instead.
    (Wolfgang Bangerth, 2013/08/09)

  7. Changed: The typedefs DataOut::cell_iterator and DataOut::active_cell_iterator were previously defined as DoFHandler::(active)_cell_iterator, while they are now Triangulation::(active)_cell_iterator. This is necessary to support DataOut on multiple DoFHandler objects. This affects possible overloading of DataOut::next_cell(cell_iterator). Use the typedef DataOut::(active)_cell_iterator as argument type instead.
    (Martin Kronbichler, 2013/07/24)


  1. New: step-26 fills a long-standing gap: There was no tutorial program solving the heat equation. There was also no tutorial showing in relatively easy terms how to do adaptive meshes in time dependent problems. This program fills both of these needs.
    (Wolfgang Bangerth, 2013/12/18)

  2. Improved: The build system now supports usage of the library out of the build directory without prior installation. This is done by exporting an additional project configuration just for the build directory. Furthermore, a bunch of convenience targets get now defined that just build individual components (such as just the documentation or the libraries), and if CMAKE_INSTALL_PREFIX is set, also install that specific component.
    (Matthias Maier, Luca Heltai, 2013/12/03)

  3. Fixed: Missing instantiations of SparseDirectMUMPS have been added.
    (Timo Heister, 2013/11/25)

  4. New: introduced "make test" that runs a minimal set of tests. We encourage every user to run this, especially if they run in to problems. The tests are automatically picked depending on the configuration and will be shipped with every release.
    (Timo Heister, Matthias Maier, 2013/11/08)

  5. Changed: It is now possible to restore a parallel Triangulation (and solutions) with a different number of processors it was saved with using Triangulation::save() and Triangulation::load().
    (Timo Heister, 2013/11/02)

  6. Added support for Windows: It is now possible again to use gcc on Windows in order to compile the library. We support gcc-4.8.1 on Cygwin64 and MinGW-w64.
    (Matthias Maier, 2013/11/01)

  7. Changed: step-9, step-13 and step-14 have been converted to use the more modern WorkStream concept for assembling linear systems and computing error indicators in parallel.
    (Bruno Turcksin, Wolfgang Bangerth, 2013/10/26)

  8. New: The testsuite is now ported to CMake and uses CTest as test driver.
    (Wolfgang Bangerth, Timo Heister, Matthias Maier, Bruno Turcksin, 2013/10/20)

  9. Changed: multithreadinfo::n_default_threads is now deprecated. Use the new n_threads() function instead, which works correctly with TBB.
    (Timo Heister, 2013/10/02)

  10. Changed: if configured with TBB but the number of threads is set to 1, do not bother to use TBB in workstream.
    (Timo Heister, 2013/10/02)

  11. New: step-51 demonstrates the use of hybridized discontinuous Galerkin methods in deal.II, using the face elements FE_FaceQ. The programs solves a scalar convection-diffusion equation.
    (Martin Kronbichler and Scott Miller, 2013/10/01)

  12. New: There is now an element FE_FaceP that can be combined with FE_DGP in hybridized DG methods.
    (Martin Kronbichler, 2013/09/17)

  13. Fixed: The DataOutBase::XDMFEntry class now has a proper serialization function to allow for checkpointing.
    (Eric Heien, 2013/09/27)

  14. New: DataOutBase::DataOutFilter provides a way to remove duplicate vertices and values from a solution vector when generating output. Currently it only supports HDF5/XDMF output.
    (Eric Heien, 2013/09/27)

  15. Removed: DataOutBase::HDF5MemStream was removed and the functionality replaced by DataOutBase::DataOutFilter. The user only manipulates these through DataOutBase::write_hdf5_parallel so this change should be transparent.
    (Eric Heien, 2013/09/27)

  16. New: Like the usual DoFHandler class, the hp::DoFHandler class now also has a cache that makes operations such as cell->get_dof_indices(...) faster. This should accelerate many parts of the library that deal with hp finite elements.
    (Wolfgang Bangerth, 2013/09/10)

  17. New: parallel::distributed::Triangulation now supports periodic boundaries. DoFTools::make_periodicity_constraints and similar functions are now working on parallel::distributed::Triangulation objects.
    (Tobin Isaac, Craig Michoski, Daniel Arndt, 2013/09/06)

  18. New: It is now possible to compile and link deal.II against LLVM's libcxx. For this, a few issues with C++ standard violations are resolved.
    (Matthias Maier, 2013/08/09)

Specific improvements

  1. Fixed: The DerivativeApproximation class did not work for parallel programs. This is now fixed.
    (Wolfgang Bangerth, 2013/12/18)

  2. Fixed: Move the implementation of Subscriptor::(un)subscribe() to the .cc file so that it is possible to link against the debug library without specifying -DDEBUG
    (Wolfgang Bangerth, 2013/12/13)

  3. Fixed: Since the introduction of ThreadLocalStorage in version 8.0, the way in which FEValues objects visit cells in a parallel assembly loop is no longer deterministic. Therefore, the detection of CellSimilarity that can speed up computations of certain geometric quantities (shape gradients) on cells that are translations is disabled when the number of threads is greater than one. This produces somewhat slower code (usually not more than a few percent) but ensures exact reproducibility of results.
    (Martin Kronbichler, Wolfgang Bangerth, 2013/12/09)

  4. Fixed: Several functions in namespace GridTools were not instantiated for parallel::distributed::Triangulation objects. This is now fixed.
    (Denis Davydov, Wolfgang Bangerth, 2013/12/01)

  5. Improved: The methods ConstraintMatrix::distribute_local_to_global now use scratch data that is private to each thread instead of allocating it for every cell anew. This gives better performance, in particular in parallel, of these operations, while maintaining thread-safety (when accessing non-overlapping rows, no race condition can exist).
    (Martin Kronbichler, 2013/12/03)

  6. Improved: When attempting operations such as FEValues::get_function_values() or FEValues::shape_value(), the FEValues object needs to know that what these functions return has been computed previously. What is computed is specified by the update flags that are passed to the constructor of all FEValues, FEFaceValues and FESubfaceValues objects. If a user attempts an operation for which the corresponding flag was not specified, an exception is generated. This exception did say previously what the cause was, but it was not overly explicit. The exception now generates a message that says exactly what is going wrong.
    (Wolfgang Bangerth, 2013/12/01)

  7. Fixed: GridGenerator::truncated_cone() failed if half_length < 0.5*radius in 3d.
    (Timo Heister, 2013/11/25)

  8. Fixed: make_hanging_node_constraints failed with an exception in a parallel::distributed computation if the element is RaviartThomas (and probably others).
    (Timo Heister, 2013/11/23)

  9. Improved: CMake: Added a configuration check for incompatible ninja

    • icc setup, fixed several setup and performance issues with the testsuite.
      (Matthias Maier, 2013/11/20)

  10. Changed: when a ::Exception is thrown, defer the symbol lookup of the stack trace to when it is needed. This improves performance if what() is never called.
    (Timo Heister, 2013/11/17)

  11. Fixed: GridGenerator::parallelogram was not instantiated properly when using intel compilers.
    (Timo Heister, 2013/11/17)

  12. Fixed: MappingQ1::transform_real_to_unit_cell() could fail in some cases with very elongated and twisted cells. This should now be fixed with an algorithm that uses a better method of computing the Newton convergence.
    (Wolfgang Bangerth, 2013/11/17)

  13. Fixed: VectorTools::compute_no_normal_flux_constraints had a bug that only appeared in rare cases at vertices of the domain if one adjacent cell had two boundary indicators selected for no normal flux and another had only one. This is now fixed.
    (Wolfgang Bangerth, 2013/11/17)

  14. Fixed: FETools::interpolation_difference was not working for TrilinosWrappers::MPI::Vectors with ghost entries. The TrilinosWrappers::VectorBase class has now a get_mpi_communicator method similar to the PETSc vector classes.
    (Martin Steigemann, Martin Kronbichler, 2013/11/17)

  15. Fixed: Bundled fparser is now compiled with FP_USE_THREAD_SAFE_EVAL in case of enabled threading support so that it is thread safe.
    (Matthias Maier, reported by Francesco Cattoglio 2013/11/16)

  16. Fixed: The CellData class now has a default constructor that sets the material and boundary indicators to zero. This fixes certain internal errors with the Intel ICC compiler.
    (Wolfgang Bangerth, 2013/11/13)

  17. Cleanup: Removed obsolete files and files with unknown licensing status from the source tree. Along the way, parameter_gui now uses default icons from the desktop environment instead of bundled ones.
    (Matthias Maier, 2013/11/11)

  18. New: There is now a framework for coloring graphs, with functions in namespace GraphColoring.
    (Bruno Turcksin, Martin Kronbichler, 2013/11/06)

  19. Fixed: the DerivativeApproximation class was not working correctly when used with parallel vectors. (Timo Heister, 2013/10/28)

  20. ~Subscriptor and ~GrowingVectorMemory no longer throw an exception (the former if disable_abort_on_exception was called) to be compatible with the C++11 standard which otherwise requires the program to immediately call std::terminate. This was done with a new macro "AssertNothrow".
    (Wolfgang Bangerth, Matthias Maier, Bruno Turcksin 2013/10/22)

  21. SolverControl::NoConvergence now inherits ExceptionBase and is thrown via AssertThrow(false, ... ).
    (Matthias Maier, 2013/10/20)

  22. New: parallel::distributed::BlockVector has now methods update_ghost_values, compress, zero_out_ghosts, and has_ghost_elements that do the respective operation on each block of parallel::distributed::Vector.
    (Martin Kronbichler, 2013/10/18)

  23. Fixed: When deriving from DataOut to filter the cells where output is generated, there were two different bugs that result in segmentation faults or wrong cells written (example, step-18).
    (Timo Heister, 2013/10/16)

  24. New: GridIn::read_vtk() reads 2d and 3d meshes in VTK format.
    (Mayank Sabharwal, Andreas Putz, 2013/10/07)

  25. Fixed: ConstraintMatrix would not compress() the IndexSet in the constructor leading to crashes that only happen in release mode. This is now fixed.
    (Timo Heister, 2013/09/27)

  26. Fixed: PetscWrappers::MatrixBase::row_length() no longer worked after recent changes to PETSc (around PETSc release 3.4). This is now fixed.
    (Wolfgang Bangerth, 2013/09/24)

  27. New: Added write_visit_record that allows writing .visit files with multiple blocks and multiple time steps.
    (Fahad Alrashed, 2013/09/21)

  28. Changed: GridTools::have_same_coarse_mesh was only instantiated for MGDoFHandler arguments in debug mode. This is now fixed.
    (Timo Heister, 2013/09/20)

  29. Changed: GridTools::find_active_cell_around_point now throws the exception GridTools::ExcPointNotFound if the point is outside the Triangulation. This exception can be caught.
    (Timo Heister, 2013/09/18)

  30. Changed: we now call MPI_Init_thread instead of MPI_Init.
    (Timo Heister, 2013/09/17)

  31. Enhancement: It is now possible to use the build directory directly without the need to install first. For this, a second copy of all necessary project configuration files (deal.IIConfig.cmake, ..., Make.global_options) are generated and deployed in the build directory. (This is fully compatible with the old possibility to install into the build dir.)
    (Matthias Maier, 2013/09/15)

  32. Fixed: DoFTools::extract_locally_*_dofs now instantiated for hp::DofHandler.
    (Jean-Paul Pelteret, 2013/09/11)

  33. Changed: distributed::parallel:BlockVector::operator= now allows importing of ghost values like all other vector types. Also added some new constructors for BlockVector and Vector using IndexSets to mirror the other linear algebra classes.
    (Timo Heister, 2013/09/04)

  34. Fixed: VectorTools::compute_no_normal_flux_constraints had a bug that only manifested on complex meshes. This is now fixed.
    (Chih-Che Chueh, Wolfgang Bangerth, 2013/09/04)

  35. New: All vector classes now have functions extract_subvector_to() that allow extracting not just a single value but a whole set.
    (Fahad Alrashed, 2013/09/02)

  36. Fixed: common/Make.global_options now exports enable-threads correctly, furthermore, lib-suffix, shared-lib-suffix and static-lib-suffix are now exported as well for better legacy support.
    (Matthias Maier, 2013/08/30)

  37. New: The ParameterHandler class can now deal with including one parameter file from another.
    (Wolfgang Bangerth, 2013/08/25)

  38. New: The method VectorTools::compute_normal_flux_constraints can be used to force a vector finite element function to be normal to the boundary.
    (Martin Kronbichler, 2013/08/23)

  39. Improved: MappingQ now uses the points of the Gauss-Lobatto quadrature formula as support points instead of equispaced ones. This allows its use for high polynomial orders and also gives better interpolation of circular boundaries. Beware that mappings of order three and higher will behave slightly differently now (usually better).
    (Martin Kronbichler, 2013/08/23)

  40. Improved: Several .cc files in the deal.II directory have been split in order to better utilize multiple processors when compiling in parallel and reduce memory requirements of the compilation stage.
    (Martin Kronbichler, 2013/08/22)

  41. Fixed: The ParameterHandler::declare_entry() did not check that the default value of a parameter indeed satisfies the pattern given for this parameter (despite a statement in the documentation that this checking would happen). This is now fixed.
    (Wolfgang Bangerth, 2013/08/21)

  42. New: Patterns::List and Patterns::Map now accept a string different than the default comma that denotes the separator between entries of the list or map.
    (Wolfgang Bangerth, 2013/08/21)

  43. Fixed: Some operations in the MappingQ class are now done in higher precision arithmetic to mitigate the ill-conditioning that appears when using mappings of high order (say, order 6 or 8 or 10).
    (Juan Carlos Araujo Cabarcas, 2013/08/20)

  44. Fixed: The SLEPcWrappers classes could not be compiled for 64-bit indices. This is now fixed.
    (Denis Davydov, Wolfgang Bangerth, 2013/08/20)

  45. Fixed: SolutionTransfer used to crash whenever one transfered in the hp context between cells that use FE_Nothing and FE_Q. This is now fixed.
    (Krzyszof Bzowski, Wolfgang Bangerth, 2013/08/18)

  46. Fixed: Under some circumstances (see the DoFTools::make_periodicity_constraints() function could create cycles in the ConstraintMatrix object. This is now fixed.
    (David Emerson, Wolfgang Bangerth, 2013/08/16)

  47. New: There is now a function ConstraintMatrix::are_identity_constrained().
    (Wolfgang Bangerth, 2013/08/16)

  48. New: TableHandler::write_text() now also supports output in org-mode ( format via a new entry in the TableHandler::TextOutputFormat enumeration.
    (Oleh Krehel, 2013/08/15)

  49. New: There are now global functions scalar_product that compute the scalar product (double contraction) between tensors of rank 2.
    (Scott Miller, 2013/08/14)

  50. Fixed: Creating objects of type MappingQ was previously only possible for low order polynomials. For orders higher than around 6, one ran into assertions that tested for internal consistency. These assertions have now been appropriately relaxes for the growth of round-off errors with growing polynomial degrees.
    (Juan Carlos Araujo Cabarcas, Wolfgang Bangerth, 2013/08/14)

  51. New: MappingQEulerian is now also instantiated for vector elements of type TrilinosWrappers::Vector as well as the MPI and block variants.
    (Armin Ghajar Jazi, 2013/08/14)

  52. Fixed: The FiniteElement::face_to_cell_index() function had a bug that made it work incorrectly for elements that have more than one degree of freedom per line (in 2d) or per quad (in 3d). This is now fixed for the most common cases, namely the FE_Q elements as well as elements composed of FESystem elements. For all other cases, an exception is generated reporting that this case is not implemented. If you run into this, let us know.
    (Wolfgang Bangerth, 2013/08/10)

  53. New: DataOutBase::VtkFlags now has a flag DataOutBase::VtkFlags::print_date_and_time that can be used to suppress output of date and time in output files. This is useful in test suites where a newer run at a different time produces differences against previously stored files, even though the actual data is exactly the same.
    (Oleh Krehel, 2013/08/06)

  54. Fixed: The various block matrix classes are all derived from BlockMatrixBase which had race conditions when the set() or add() functions were called from different threads. This is now fixed.
    (Wolfgang Bangerth, 2013/08/05)

  55. Fixed: various fixes with assignment and reinit of PETScWrappers::MPI::Vector.
    (Timo Heister, 2013/08/05)

  56. Fixed: An assertion wrongly triggered in DoFTools::make_hanging_node_constraints when used with a particular combination of FESystem elements containing FE_Nothing. This is now fixed.
    (Denis Davydov, Wolfgang Bangerth, 2013/08/01)

  57. New: Add has_ghost_elements() for PETScWrappers::MPI::BlockVector and TrilinosWrappers::MPI::BlockVector.
    (Timo Heister, 2013/08/01)

  58. SparsityTools::distribute_sparsity_pattern did not work correctly for block systems, this has been fixed (function has a different signature).
    (Timo Heister, 2013/07/31)

  59. Fixed: When typing make run in the step-32 directory, the program was executed with mpirun -np 2 ./step-32. This assumes that a program mpirun exists, but also does that deal.II was in fact compiled with MPI support on. Neither was intended. This is now fixed.
    (Wolfgang Bangerth, 2013/07/24)

  60. New: The DataOut, DataOutFaces, and DataOutRotation classes now allow the output of data vectors using different DoFHandler objects (based on the same triangulation), by new functions add_data_vector. This is used in the step-31 tutorial program which avoids creating a joint DoFHandler just for output.
    (Martin Kronbichler, 2013/07/24)

  61. Changed: GridGenerator used to be a class with only static members but is now a namespace, like all other similar constructs in deal.II.
    (Wolfgang Bangerth, 2013/07/24)

  62. Changed: In GridGenerator, several functions had erroneously been changed to take an argument of type size_type rather than unsigned int. GridGenerator::size_type was a typedef to types::global_dof_index, which for most users was unsigned int anyway, but could also be set to be a 64-bit integer type. In any case, the change has been reverted and these functions take just a regular unsigned int again.
    (Wolfgang Bangerth, 2013/07/24)