Reference documentation for deal.II version Git 3f75665 2017-01-19 16:58:38 -0500
Changes between Version 7.3 and 8.0

This is the list of changes made between the deal.II releases listed above. 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. Removed: it was possible to call get_dof_indices(), get_dof_values(), set_dof_values(), and distribute_local_to_global() for cells that were not active, if the finite element only had DoFs on vertices (i.e. Q1). This is no longer allowed.
    (Timo Heister, 2013/06/02)

  2. Changed: Internal structures of ExceptionBase are now thread safe. The Assert macro does not print an exception to deallog any more prior to throwing if deal_II_exceptions::abort_on_exception==false. Removed: A number of obsolete Exceptions that are not used in the library any more.
    (Matthias Maier, 2013/04/16)

  3. Removed: A number of header files that have been deprecated a long time ago have been removed. All of them had previously only included the header file that had superseded them. To upgrade, simply include the currently used header file. This is also backward compatible with deal.II 7.3.
    (Guido Kanschat, 2013/04/12)

  4. Removed: The interfaces to the obsolete direct solvers MA27 and MA47 from the Harwell Subroutine Library. Support for the HSL routines were not ported to the new build system. However, the sparse direct solver UMFPACK remains to be supported and is provided as part of the standard deal.II distribution, unlike the HSL functions.
    (Matthias Maier, 2013/04/01)

  5. Changed: The TimeDependent::end_sweep function with an argument indicating the number of threads has been removed. Use the corresponding function without an argument. Since the argument had a default value, few users will have used this function.
    (Wolfgang Bangerth, 2013/03/17)


  1. Improvements on the CMake build system: A Working C (or Fortran) compiler is now fully optional; Improved support for static linkage with a toggle "DEAL_II_PREFER_STATIC_LIBS" that will prefer static archives for non system libraries and "DEAL_II_STATIC_EXECUTABLE" that will switch the complete link interface to static linkage.
    (Matthias Maier, 2013/07/16)

  2. New: various functions for parallel computations got introduced to make Trilinos and PETSc interfaces similar. Now step-40 can be used with PETSc or Trilinos with just a few changes. This patch also introduces better support for block systems in the PETSc interfaces.
    (Timo Heister, 2013/07/15)

  3. New: deal.II can now be compiled to 64-bit global dof indices. To turn this feature on, use the cmake option -DDEAL_II_WITH_64BIT_INDICES=ON. If PETSc and/or Trilinos are used, they must be compiled to support 64-bit indices. To write a code that can use 32-bit and 64-bit indices depending on deal.II compilation option, use types::global_dof_index for all the global dof indices.
    (Kainan Wang and Bruno Turcksin, 2013/06/05)

  4. New: All vector classes now have a member function locally_owned_elements that returns an index set indicating which elements of this vector the current processor owns.
    (Wolfgang Bangerth, 2013/05/24)

  5. New: A new element FE_Q_iso_Q1 has been implemented that is defined by a subdivision of the element into smaller Q1 elements. An element of order p is similar to FE_Q of degree p with the same numbering of degrees of freedom. The element is useful e.g. for defining a sparser preconditioner matrix for AMG at higher order FE_Q elements or for representing a component of a system of PDEs where higher resolution is preferred over high order.
    (Martin Kronbichler, 2013/05/14)

  6. New: The step-49 tutorial program now also has a discussion on what to do once you have a coarse mesh and want to refine it.
    (Wolfgang Bangerth, 2013/04/03)

  7. New: The number of threads used by deal.II/TBB can now be limited at run time. Using MPI based code using PETSc/Trilinos no longer requires you to compile the library without threads. See MPI_InitFinalize and MultithreadInfo::set_thread_limit for details.
    (Timo Heister, 2013/03/26)

  8. New: The results section of step-36 now explains how to use ARPACK as an alternative to SLEPc as eigenvalue solver.
    (Juan Carlos Araujo Cabarcas, 2013/03/25)

  9. New: deal.II now uses CMake as its configuration and build tool. Please read through the readme and other installation files for information about how the installation process has changed.
    Because this touches the configuration of every external package we interact with, there are a number of other changes as a result:
    • The minimum supported version for Trilinos is now 10.8.x.
    • We no longer link with different versions of the p4est library in debug and optimized mode. Rather, we now link with the same library in both modes. The p4est installation instructions have been updated.

    (Matthias Maier, 2013/03/07)

Specific improvements

  1. New: VectorTools::project and a whole host of similar functions are now also available for objects of type hp::DoFHandler.
    (Wolfgang Bangerth, 2013/07/21)

  2. Fixed: hp::DoFHandler::n_boundary_dofs() had a bug that always led to a failed assertion. This is now fixed.
    (Wolfgang Bangerth, 2013/07/21)

  3. Fixed: VectorTools::project has an option to first project onto the boundary. However, the implementation of this option ignored the mapping that is provided to the function. This is now fixed.
    (Wolfgang Bangerth, 2013/07/16)

  4. Improved: The WorkStream class used throughout deal.II is now using thread local variables and initializes temporary variables on the thread that uses them, leading to better cache locality.
    (Wolfgang Bangerth, 2013/07/16)

  5. Improved: The "pure" functions in MeshWorker::LocalIntegrator are now implemented and throw an exception if not overloaded.
    (Guido Kanschat, 2013/07/16)

  6. New: The function SparseDirectUMFPACK::Tvmult is now implemented.
    (Matthias Maier, 2013/07/03)

  7. New: In addition to the FEValuesExtractors::Scalar, FEValuesExtractors::Vector, and FEValuesExtractors::SymmetricTensor classes, there are now also fully featured FEValuesExtractors::Tensor extractors for non-symmetric tensors of rank 2.
    (Denis Davydov, 2013/07/02)

  8. New: There are now functions Tensor::component_to_unrolled_index() and Tensor::unrolled_to_component_indices() in the same way as they already exist for the SymmetricTensor class.
    (Denis Davydov, 2013/07/02)

  9. New: There is now a read-write version of TableIndices::operator[].
    (Denis Davydov, 2013/07/02)

  10. New: The function parallel::distributed::Triangulation::copy_triangulation() is now implemented.
    (Martin Steigemann, 2013/07/02)

  11. New: TriaRawIterator::operator < (TriaRawIterator&) now implements a total ordering relation for cells even on distributed::parallel::Triangulation across processors. Additionally, TriaRawAccessor and CellAccessor now have an ordering relation.
    (Guido Kanschat, 2013/06/24)

  12. New: CellAccessor::id() that returns a unique CellId that also works in parallel computations (where level and index is not useful).
    (Timo Heister, 2013/06/24)

  13. New: added ConstantTensorFunction<rank, dim> and ZeroTensorFunction<rank, dim> to provide a tensor valued analogue to ConstantFunction and ZeroFunction.
    (Matthias Maier, 2013/06/20)

  14. Fixed: BlockSparsityPattern::column_number was returning wrong values.
    (Timo Heister, 2013/06/16)

  15. Fixed: The stabilization parameter for the artificial diffusion in the step-31 tutorial program has been increased slightly to avoid instabilities at later times (t > 60).
    (Martin Kronbichler, 2013/06/04)

  16. Fixed: If an exception was generated on a task created by Threads::new_task, the program would terminate with a segmentation fault, leaving little trace of what had happened. This is now handled more gracefully.
    (Wolfgang Bangerth, 2013/06/02)

  17. Changed: subdomain ids can now only be queried/set on active cells. Consequently, is_artificial(), is_ghost(), and is_locally_owned() is now restricted to active cells.
    (Timo Heister, 2013/05/31)

  18. Improved: Triangulation::begin(level) and Triangulation::end(level) now return an empty iterator range if the level is larger than the maximal locally owned level, but still in the global level range of a distributed Triangulation.
    (Timo Heister and Guido Kanschat, 2013/05/26)

  19. New: The IndexSet::add_indices function that takes another IndexSet object now has an additional argument offset that can be used to offset the indices of first argument.
    (Wolfgang Bangerth, 2013/05/25)

  20. New: ConstraintMatrix::distribute is now also implemented for arguments of type PETScWrappers::MPI::BlockVector.
    (Wolfgang Bangerth, 2013/05/25)

  21. Fixed: IndexSet::operator== returned the wrong results in some cases.
    (Wolfgang Bangerth, 2013/05/25)

  22. New: The global function complete_index_set() creates and returns an index set of given size that contains every single index with this range.
    (Wolfgang Bangerth, 2013/05/24)

  23. New: All vector classes now have a static member variable supports_distributed_data that indicates whether the vector class supports data that is distributed across multiple processors. This variable is provided as a traits variable to allow generic algorithms working on general vector types to query the capabilities of the vector class at compile time.
    (Wolfgang Bangerth, 2013/05/23)

  24. Fixed: FETools::back_interpolate has been revised to work correctly also with parallel::distributed::Vector.
    (Martin Steigemann, 2013/05/23)

  25. Removed: The file mesh_worker/vector_info.h was unused and untested. It has thus been removed.
    (Wolfgang Bangerth, Guido Kanschat, 2013/05/21)

  26. Fixed: The method parallel::distributed::Vector::compress (VectorOperation::insert) previously set the elements of ghost elements unconditionally on the owning processor, even if they had not been touched. This led to a problem in certain library functions where vector entries became zero in a spurious way. This is now fixed by discarding the elements in ghost entries for the VectorOperation::insert operation. This is legitimate since we assume consistency of set elements across processors, so the owning processor sets the element already.
    (Martin Kronbichler, 2013/05/21)

  27. Improved: DoFTools::make_periodicity_constraints now also works for meshes where the refinement level of the two sides of the domain is not the same, i.e., one side is more refined than the other.
    (Wolfgang Bangerth, 2013/05/20)

  28. Improved: Through the fields DataOutBase::VtkFlags::time and DataOutBase::VtkFlags::cycle, it is now possible to encode the time and/or cycle within a nonlinear or other iteration in VTK and VTU files written via DataOutBase::write_vtk and DataOutBase::write_vtu.
    (Wolfgang Bangerth, 2013/05/12)

  29. Fixed: The method ConvergenceTable::evaluate_convergence_rates with reference column did not take the dimension of the reference column into account, leading to wrong logarithmic rates for dim!=2. This can now be fixed by specifying the dimension as a last argument.
    (Martin Kronbichler, 2013/05/10)

  30. Improved: The functions MatrixTools::create_mass_matrix and MatrixTools::create_laplace_matrix take now an optional ConstraintMatrix argument that allows to directly apply the constraints. This also helps VectorTools::project. Note that not providing constraints remains the default and recommended way to ensure consistency when several matrices are combined.
    (Martin Kronbichler, 2013/05/08)

  31. New: The classes TrilinosWrappers::SparseMatrix and TrilinosWrappers::BlockSparseMatrix now fully implement vmult and Tvmult with deal.II's own vector classes Vector<double> and parallel::distributed::Vector<double>.
    (Martin Kronbichler, 2013/05/08)

  32. Improved: The matrix-vector product ChunkSparseMatrix::vmult now runs in parallel in shared memory.
    (Martin Kronbichler, 2013/05/07)

  33. New: The class ChunkSparseMatrix and the associated ChunkSparsityPattern now offer iterator classes to iterate over rows of the matrix in an STL-like way.
    (Martin Kronbichler, 2013/05/07)

  34. Fixed: The stopping criterion for early exit in SolverBicgstab did not work properly for systems with large values, leading to premature exit. This is now fixed.
    (Martin Kronbichler, 2013/05/07)

  35. Changed: The SolverGMRES implementation previously applied two iterations of the modified Gram–Schmidt algorithm for orthogonalization. In many situations one iteration is enough. The algorithm can now detect loss of orthogonality and enables re-orthogonalization only if necessary. The second iteration (and, hence, old behavior) can be forced by the flag SolverGMRES::AdditionalData::force_re_orthogonalization.
    (Martin Kronbichler, 2013/05/06)

  36. Changed: FETools::interpolate is now instantiated for all vector types, not just Vector and BlockVector.
    (Wolfgang Bangerth, 2013/05/06)

  37. Fixed: setting values in TrilinosWrappers::SparseMatrix in parallel was adding the values instead.
    (Bruno Turcksin, Timo Heister, 2013/05/03)

  38. Fixed: Generate an error if the user tries to refine a cell that is already on the maximum level in a distributed triangulation.
    (Timo Heister, 2013/05/01)

  39. Fixed: The version of ParameterHandler::set that takes a boolean as second argument was broken and did not work. This is now fixed.
    (Ashkan Dorostkar, Wolfgang Bangerth, 2013/04/30)

  40. Fixed: PETScWrappers::VectorBase::print now saves and restores the precision and width associated with the stream it prints to around setting the values passed as arguments.
    (Fahad Alrashed, 2013/04/22)

  41. Fixed: FullMatrix::print now saves and restores the precision and width associated with the stream it prints to around setting the values passed as arguments.
    (Fahad Alrashed, 2013/04/22)

  42. New: LogStream now has member functions LogStream::width, LogStream::precision and LogStream::flags that make it look more like normal objects of type std::ostream.
    (Fahad Alrashed, 2013/04/22)

  43. New: SparseDirectUMFPACK has long had the ability to work with BlockSparseMatrix objects, but couldn't deal with BlockVector objects. This is now fixed.
    (Wolfgang Bangerth, 2013/04/21)

  44. New: Class TimerOutput::Scope does automatic scope based enter/ exit_section of a TimerOutput object.
    (Timo Heister, 2013/04/18)

  45. Fixed: TimerOutput constructed with an MPI_COMM in wall_time mode now constructs synchronized Timer objects. This gives reliable parallel benchmark timings.
    (Timo Heister, 2013/04/18)

  46. Improved and Fixed: LogStream (and deallog) now respect std::flush in addition to std::endl to write out content to the console/file. Furthermore, LogStream::push(...) and LogStream::pop() now work in a thread safe manner. Also allow to pop() the prefix "DEAL".
    (Matthias Maier, 2013/04/18)

  47. Fixed: The HalfHyperShellBoundary class got refining the edges that sit at the perimeter of the circular face of the domain wrong. This is now fixed.
    (Wolfgang Bangerth, Jörg Frohne, 2013/04/17)

  48. New: Functions::FEFieldFunction can now deal with parallel::distributed::Triangulation objects.
    (Wolfgang Bangerth, 2013/04/15)

  49. New: There is now a version of SparseMatrix::copy_from that can copy from TrilinosWrappers::SparseMatrix.
    (Wolfgang Bangerth, Jörg Frohne, 2013/04/15)

  50. Improved: The SolverCG implementation now uses only three auxiliary vectors, down from previously four. Also, there are some shortcuts in case PreconditionIdentity is used that improve the solver's performance.
    (Martin Kronbichler, 2013/04/11)

  51. Fixed: The results section of step-23 did not show the movie in release 7.3 due to a poor HTML markup. This is now fixed.
    (Wolfgang Bangerth, 2013/04/10)

  52. Fixed: It is now possible to use the MeshWorker framework in 1d as well.
    (Wolfgang Bangerth, Scott Miller, 2013/04/09)

  53. Fixed: It was not possible to create a default-constructed object of type Triangulation<1>::face_iterator. This is now fixed.
    (Wolfgang Bangerth, Scott Miller, 2013/04/09)

  54. New: VectorTools::subtract_mean_value can now be called without a boolean mask. The vector type is templatified and instantiated for all non distributed vectors.
    (Matthias Maier, 2013/04/08)

  55. Fixed: It is now possible to call ConvergenceTable::evaluate_convergence_rates multiple times.
    (Matthias Maier, 2013/04/08)

  56. Fixed: GridTools::distort_random (previously called Triangulation::distort_random) had a bug where points were only ever moved in positive coordinate directions rather than with uniform probability in either direction. The 1d implementation also had the problem that it did not move vertices if the cell they were on was at the boundary, even if the vertex itself was not. All of these problems are now fixed.
    (Wolfgang Bangerth, 2013/04/05)

  57. New: There is a class VectorFunctionFromTensorFunction that converts between objects of type TensorFunction and Function.
    (Spencer Patty, 2013/4/2)

  58. Fixed: The ParameterHandler class could not deal with parameters named "value" (and a few other names). This is now fixed.
    (Denis Davydov, Matthias Maier, Wolfgang Bangerth, 2013/3/31)

  59. Changed: TimerOutput no longer assumes that sections are not nested when outputting percentage and total run time.
    (Timo Heister, 2013/3/28)

  60. New: MPI_InitFinalize can also initialize PETSc/Slepc when not compiling with MPI. This is now the preferred way to initialize MPI/PETSc/Slepc in all cases.
    (Timo Heister, 2013/3/26)

  61. Added/fixed: IterativeInverse::vmult() can now handle vectors using a different number type than the matrix type. As usual, the number types must be compatible. Addtitionally, the initial guess is always set to zero, since starting with the incoming vector makes no sense.
    (Guido Kanschat, 2013/03/21)

  62. Added GridOut::write_svg() to allow for the output of two-dimensional triangulations in two space dimensions in the SVG format (Scalable Vector Graphics, an generic XML-based vector image format developed and maintained by the World Wide Web Consortium W3C). This function also provides cell coloring and cell labeling for the visualization of basic cell properties. Pespective view is further possible and the cell level number may be converted into altitude, revealing the inactive cells lying below.
    (Christian W├╝lker, 2013/03/21)

  63. Added TimerOutput::reset to remove the collected information so far and added a new frequency TimerOutput::never to only output information if triggered by print_summary().
    (Timo Heister, 2013/03/20)

  64. Changed: FEValuesExtractors::Scalar, FEValuesExtractors::Vector and FEValuesExtractors::SymmetricTensor could not be default constructed, and consequently one could not easily put them into arrays (where they would be default constructed when changing the size, and later assigned useful values). These classes can now be default constructed to invalid values, but can of course not be used in any useful way.
    (Wolfgang Bangerth, 2013/03/15)

  65. Fixed: FETools::interpolation_difference did not work with PETSc. This is now fixed.
    (Timo Heister, 2013/03/01)