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

This is the list of changes made between the deal.II releases listed above. made to the three sub-libraries base, lac, and deal.II, as well as changes to the general infrastructure, documentation, etc.

All entries are signed with the names of the author. Regular contributor's names are abbreviated by WB (Wolfgang Bangerth), GK (Guido Kanschat), RH (Ralf Hartmann).


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. The public member variable Quadrature::n_quadrature_points has been removed after being deprecated for nearly three years. Quadrature.size() replaces its function, and the new version more naturally preserves consistency.
    (GK 2010/11/11)

  2. deal.II has had a somewhat quirky directory and library structure for historical reasons, but this has now changed: All include and source files are now under the top-level include/ and source directories. Furthermore, we no longer build a plethora of libraries but only (debug version) and (optimized version). In particular, we no longer build different versions of the library for different space dimensions.
    As a consequence, if your makefile makes any assumption on the location of deal.II include files or the name of the deal.II library it will need to be changed. The sample Makefiles have been updated for this.
    (WB 2010/10/25)

  3. The Polynomials::Lagrange::generate_complete_basis function has been renamed to Polynomials::generate_complete_Lagrange_basis . The function was previously the only member of a class, and a static one on top of that, which did not make much sense.
    (WB 2010/10/22)

  4. The QGauss2, QGauss3, ..., QGauss7 classes — deprecated for more than 6 years already — have finally been removed. You should use code like QGauss<dim>(4) instead.
    (WB 2010/09/19)

  5. The FE_Nedelec class had previously implemented the lowest order when the value 1 was passed to the constructor. This has now been adjusted: the lowest order now results from passing 0, making this consistent with the FE_RaviartThomas class and following the convention used in by Brezzi and Raviart (though not in the original paper of Nedelec).
    (Markus Bürg 2010/09/14)

  6. The fields DoFHandler::tria and DoFHandler::selected_fe are now private instead of protected. Inheriting classes can only access them through DoFHandler::get_tria() and DoFHandler::get_fe(), respectively.
    (GK 2010/08/16)


  1. New: The new step-38 program shows how to discretize and solve partial differential equations posed on curved manifolds embedded in higher dimensional spaces.
    (Andrea Bonito, M. Sebastian Pauletti, 2011/01/02)

  2. New: deal.II now has a Qt based graphical user interface to edit input parameter files for the ParameterHandler class. The executable is located in lib/bin/dealii_parameter_gui.
    (Martin Steigemann, 2010/12/20)

  3. New: A significant number of classes, primarily in the base/ subdirectory, now provide the necessary member functions for serialization through BOOST's serialization library.
    (Pradeep Rao, WB, 2010/12/06)

  4. Fixed: A good number of problems associated with meshes that are embedded in a higher space dimension (i.e. where dim < spacedim) are now fixed.
    (Sebastian Pauletti, Andrea Bonito, Luca Heltai, WB, 2010/12/06)

  5. Updated: The version of the Threading Building Blocks (TBB) shipped with deal.II has been updated to release 3.0 Update 3 (Commercially aligned version).
    (WB, 2010/11/18)

  6. New: While 2d and 3d could mostly be handled with the same code, dimension-independent programming was always a bit different because the faces of 1d cells (i.e. vertices) did not have appropriate iterators defined. This has now been changed: there is now a class TriaAccessor<0,1,spacedim> (and corresponding DoFAccessor<0,DH>) that allows to write things like


    even if the cell corresponds to a one-dimensional triangulation where this was not previously possible.
    (WB, 2010/11/11)

  7. New: After more than 2 years of work, we have merged a branch on which we have implemented the functionality necessary to distribute meshes on hundreds, thousands, or more processors. An overview of the framework in which this is implemented is presented in the Parallel computing with multiple processors using distributed memory module, the distributed_paper, as well as in step-40.
    (Timo Heister, Martin Kronbichler, Wolfgang Bangerth 2010/10/23)

  8. New: Documentation of how to handle constraints on degrees of freedom has been centralized in a new documentation module on Constraints on degrees of freedom.
    (WB 2010/09/16)

  9. Fixed: When using Trilinos and deal.II both with static libraries, a linker error would occur whenever a program linked both the 2d and 3d libraries of deal.II. This is now fixed.
    (WB 2010/07/23)

  10. Fixed: On all non-linux platforms, if static libraries were selected and ./configure was instructed to use Trilinos (which also was compiled with static libraries), a failure would occur. This should now be fixed.
    (WB 2010/07/23)

  11. Fixed: The step-33 tutorial program can not be built with GCC versions 4.5.x. There are in fact two problems, one that pertains to uses of std::make_pair that don't work any more with the upcoming C++ 1x standard that GCC 4.5.x already follows, and some in which the Trilinos package Sacado is incompatible with GCC 4.5.x, at least up to Trilinos version 10.4.0. While the latter problem can only be fixed in future Trilinos versions, at least the former problem is solved in step-33.
    (WB 2010/07/18)

  12. Fixed: GCC version 3.4.0 failed to compile the file deal.II/source/numerics/ with an internal compiler error. This has now been worked around.
    (WB 2010/07/15)

  13. Fixed: A problem in the Makefiles caused error messages when building under CygWin.
    (GK 2010/07/12)

  14. Fixed: GCC version 3.3.x failed to compile the files lac/include/lac/precondition_block.h, deal.II/source/multigrid/ and examples/step-34/ These problems have now been worked around.
    (WB 2010/07/12)

  15. Fixed: Some older 3.x versions of GCC crashed compiling the functions in namespace DoFRenumbering::boost. There is now a configuration time test that checks that the compiler accepts the constructs in question. If the compiler does not, then these functions are disabled.
    (WB 2010/07/01)

  16. Fixed: Linking with more than one of the deal.II 1d, 2d, or 3d libraries when using static libraries did not work. This is now fixed. However, due to GCC bug 10591, GCC versions prior to and including 4.1.x will still not work. Working with shared libraries was not and is not affected by this problem.
    (WB 2010/07/01)

  17. Updated: The version of boost included in the contrib/ directory has been updated to 1.43.0.
    (WB 2010/06/30)

  18. Fixed: GCC version 4.0.1 had a bug that prevented it from compiling release 6.3.0 because it apparently had an infinite loop allocating memory when compiling in optimized mode. This problem had been fixed in GCC 4.0.2, but some versions of Mac OS X still use this GCC version in their Xcode environment. In any case, the code in deal.II has been changed to avoid this problem.
    (WB 2010/06/30)

  19. Fixed: Configuring with an external BOOST version did not work when using shared libraries since the test ran in the wrong order with respect to another configure test. This is now fixed.
    (Bradley Froehle 2010/06/29)

  20. Updated: The conversion tool in contrib/mesh_conversion that can read CUBIT output and convert it into something that is readable by deal.II has been updated.
    (Jean-Paul Pelteret 2010/06/28)

  21. Fixed: deal.II release 6.3.0 did not compile with Trilinos versions 9.x and 10.0. This is now fixed.
    (Martin Kronbichler, WB 2010/06/28)


  1. A static member function Point::unit_vector() has been introduced to simplify the task of creating a vector in one coordinate direction independent of the dimension.
    (GK 2010/11/17)

  2. There are now Patterns::FileName and Patterns::DirectoryName classes that can be used to indicate that a given parameter is supposed to be a file or directory name.
    (Martin Steigemann 2010/10/25)

  3. New: The ParameterHandler class is now built on the boost property_tree library which provides a much better foundation for extensions. In particular, the description of parameters can now be exported in XML and JSON formats for processing with external programs, for example graphical user interfaces. As a consequence of the re-write, a bug in ParameterHandler::print_parameters_section was fixed when using the LaTeX output format.
    (WB 2010/09/09)

  4. Fixed: The ParameterHandler::set() functions allowed to set values that did not satisfy the pattern given during declaration of the parameter. This is now fixed: the functions now throw an exception.
    (WB 2010/09/09)

  5. Fixed: The Patterns::Integer and Patterns::Double classes did not properly check that a value given matched the pattern because they ignored text after an initial match. This led to "3.141" and "3.141..,-RXYZ" to be recognized as valid integers and double values, respectively. This is now fixed.
    (WB 2010/09/08)

  6. Fixed: The computation of quadrature points in the QGaussLobatto class uses a Newton method that was wrongly implemented. While the results were correct (at least for moderate orders), it required more iterations than necessary. This is now fixed.
    (Andrea Bonito 2010/08/12)

  7. Changed: The DataOutBase::write_vtu function now writes data as 64-bit values, rather than 32-bit values.
    (Scott Miller 2010/08/5)

  8. New: MappingQ and MappingQEulerian now support order > 1 also in codimension one. step-34 has been modified to show how this works.
    (Luca Heltai 2010/07/23-27)

  9. New: QGaussOneOverR now has a new constructor for arbitrary quadrature points and not only the vertices of the reference cell.
    (Luca Heltai 2010/07/21)


  1. New: Added a new constructor for PETScWrappers::Vector that takes an existing PETSc Vec that was created by the user and is only wrapped for usage.
    (TH, 2010/12/03)

  2. New: When Hypre is available as a sub-package of PETSc, the new class PETScWrappers::PreconditionBoomerAMG provides the BoomerAMG implementation of the algebraic multigrid method of the Hypre package as a preconditioner. This functionality is used, for example, in step-40.
    (Timo Heister 2010/11/13)

  3. New: The class LAPACKFullMatrix now has functions to compute the singular value decomposition of a matrix and its inverse.
    (GK 2010/11/7)

  4. New: The classes RelaxationBlockSOR and RelaxationBlockSSOR implement overlapping Schwarz relaxation methods. Additionally, their base class RelaxationBlock and the helper class BlockList have been added to the library.
    (GK 2010/10/19)

  5. Improved: The ConstraintMatrix::merge function now takes a second argument that indicates what should happen if the two objects to be merged have constraints on the very same degree of freedom.
    (WB 2010/09/18)

  6. Updated: Changes to the SLEPcWrappers to preserve compatibility with SLEPc version 3.1. Main new updated features are new solver classes: (i) Power; and (ii) Generalized Davidson.
    (Toby D. Young 2010/08/04)

  7. Fixed: SparseMatrix::precondition_SSOR and SparseMatrixEZ::precondition_SSOR had a bug, which made the SSOR method inaccurate for relaxation parameters different from unity.
    (GK 2010/07/20)


  1. New: The GridTools::transform function used to work only on meshes that are not refined at all. It now also works on meshes that have been refined uniformly, though not on adaptively refined ones.
    (WB, 2010/12/20)

  2. New: When computing errors using VectorTools::integrate_difference in codimension one problems, if you specified a norm that requires the computation of the gradients, you would get in trouble, because on codimension one manifolds we only have information on the tangential gradient. This is now fixed, by discarding the normal component of the provided function, before computing the difference with the finite element function.
    (Luca Heltai, 2010/12/05)

  3. New: The VectorTools::interpolate_boundary_values function can now also be used to interpolate boundary values on meshes embedded in a higher dimensional space.
    (WB, 2010/11/20)

  4. Fixed: Triangulation::execute_coarsening_and_refinement misplaced the new central vertex of a quad in a two-dimensional mesh embedded into higher dimensional space if said quad was at the boundary of the surface described by this triangulation. This is now fixed.
    (WB, 2010/11/18)

  5. New: The GridTools::extract_boundary_mesh function can be used to generate a surface mesh from the boundary of a volume mesh.
    (Sebastian Pauletti, 2010/11/15)

  6. Fixed: For DoF iterators, it was previously possible to write code like *it1 = *it2, presumably with the intent to copy the entire cell pointed to on the right hand side onto the cell pointed to at the left. However, this is not what happens since iterators are not pointers but only point to accessor classes. The assignment operator has therefore been removed.
    (WB, 2010/11/12)

  7. New: The GridOut::write_gnuplot function now also works for meshes that are embedded in a higher dimensional space (i.e. if the codimension was greater than 1).
    (WB, 2010/11/03)

  8. New: The class hp::FEFaceValues and hp::FESubfaceValues were not previously available for meshes that were embedded in a higher dimensional space (i.e. if the codimension was greater than 1). This is now fixed. As a consequence, the VectorTools::interpolate_boundary_values function is now also available for such meshes.
    (WB, 2010/11/02)

  9. Fixed: The FEValuesExtractors::Vector class did not work when the dimension of the domain was not equal to the dimension of the space in which it is embedded. This is now fixed.
    (Sebastian Pauletti, WB, 2010/11/01)

  10. Fixed: The methods VectorTools::project_boundary_values_curl_conforming set the boundary values now also H(curl)-conforming, when hanging node constraints are present.
    (Markus Buerg, 2010/10/11)

  11. Changed: The DataPostprocessor functions now take an additional argument that indicates the location of an evaluation point. For backward compatibility, the old function signature still exists so that applications that overload one of the existing functions continue to work. The old signature has been deprecated, however, and will be removed in a future version.
    (Scott Miller 2010/10/08)

  12. Changed: FETools is now a namespace rather than a class with only static member functions.
    (WB 2010/09/25)

  13. New: FE_DGVector implements discontinuous elements based on vector valued polynomial spaces.
    (GK 2010/09/17)

  14. Fixed: The methods VectorTools::interpolate_boundary_values and VectorTools::project_boundary_values with ConstraintMatrix argument added inhomogeneities also to DoFs that were already constrained when entering the call without changing the list of DoFs that those were constrained to. This leads to wrong results for inhomogeneous constraints in case e.g. DoFTools::make_hanging_node_constraints was called before. Now, the correct way for combining hanging node constraints and Dirichlet conditions in one ConstraintMatrix is to first make the hanging node constraints, and then interpolate/project the boundary values. The latter operation will then simply not add any new constraints if a DoF is already constrained. The same is also true for VectorTools::compute_no_normal_flux_constraints.
    (Luca Heltai, Martin Kronbichler, WB 2010/09/16)

  15. Fixed: The method FEValuesViews::Vector::curl aborted the program in 2d under certain circumstances. This is now fixed.
    (Andrea Bonito, WB 2010/09/14)

  16. Improved: MeshWorker::loop() now uses WorkStream for multithreading
    (GK 2010/09/10)

  17. Fixed: The method FEValuesViews::SymmetricTensor< 2, dim, spacedim >::get_function_divergences incorrectly calculated the divergence.
    (Andrew McBride 2010/09/09)

  18. New: Reimplementation of the parent function in the various DoFCellAccessors so that one can call the parent function from a DoFIterator and also gets a DoFIterator returned.
    (Markus Buerg 2010/08/30)

  19. New: FETools::compute_embedding_matrices now computes the embedding matrix for all refinement cases in parallel.
    (Markus Buerg 2010/08/26)

  20. New: There is now a function CellAccessor::parent so that one can do cell->parent()
    (Markus Buerg 2010/08/26)

  21. Improved: DoFHandler has a default constructor, so that it can be used in containers.
    (GK 2010/08/16)

  22. New: The functions VectorTools::project_boundary_values_curl_conforming are added. They can compute Dirichlet boundary conditions for Nedelec elements.
    (Markus Buerg 2010/08/13)

  23. Fixed: The function FEValuesViews::Vector::get_function_curls produced wrong results in some cases, because it erased the given vector first. This is now fixed.
    (Markus Buerg 2010/08/13)

  24. New: Ability to project second-order SymmetricTensor and first-order Tensor objects from the quadrature points to the support points of the cell using FETools::compute_projection_from_quadrature_points
    (Andrew McBride 2010/07/29)

  25. Fixed: In some rather pathological cases, the function Triangulation::prepare_coarsening_and_refinement (which is called from Triangulation::execute_coarsening_and_refinement) could take very long if the flag Triangulation::eliminate_unrefined_islands was given in the mesh smoothing flags upon construction of the triangulation. This is now fixed.
    (WB 2010/07/27)

  26. New: Brezzi-Douglas-Marini elements of arbitrary order in FE_BDM.
    (GK 2010/07/19)

  27. Fixed: The FEValues::get_cell() function was unusable from user code since its implementation used a class that was only forward declared and not visible at the point of instantiations in user code. This is now fixed.
    (WB 2010/07/16)

  28. New: The multilevel matrices for continuous elements can be built with the MeshWorker now.
    (Bärbel Janssen 2010/07/01)

  29. Fixed: On some systems and compilers, the library could not be compiled because of a duplicate symbol in MeshWorker::LocalResults. This is now fixed.
    (WB 2010/06/28)

  30. Fixed: The output of the function FE_Q::adjust_quad_dof_index_for_face_orientation was wrong in 3d for polynomial orders of three or greater. This is now fixed.
    (WB 2010/06/28)