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

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/fixed: Several operations on Trilinos vectors that change the elements of these vectors were allowed accidentally for vectors that have ghost elements. This is a source of errors because a change on one MPI process will not show up on a different processor. Consequently, we intended to disallow all functions that modify vectors with ghost elements but this was not enforced for all of these functions. This is now fixed but it may lead to errors if your code relied on the existing behavior. The way to work around this is to only ever modify fully distributed vectors, and then copy it into a vector with ghost elements.
    (Wolfgang Bangerth, 2012/08/06)

  2. Changed: The argument material_id of the estimate-functions of the KellyErrorEstimator class is now of type types::material_id with default value numbers::invalid_material_id, instead of type unsigned int with default value numbers::invalid_unsigned_int. This should not make a difference to most users unless you specified the argument's default value by hand.
    (Wolfgang Bangerth, Christian Goll 2012/02/27)

  3. The member functions Triangulation::set_boundary and Triangulation::get_boundary now take a types::boundary_id instead of an unsigned int as argument. This now matches the actual data type used to store boundary indicators internally.
    (Wolfgang Bangerth, Christian Goll 2012/02/27)


  1. New: We now support parallel output using HDF5/xdmf.
    (Eric Heien, Timo Heister, 2012/08/28)

  2. New: We are now compatible with Trilinos 10.4.2, 10.8.5, and 10.12.2. See the readme for more information.
    (Timo Heister, 2012/08/24)

  3. Changed: To make the naming of types defined in namespace types consistent, we have renamed types::subdomain_id_t to types::subdomain_id. The old name has been retained as a typedef but is now deprecated.
    (Wolfgang Bangerth, 2012/08/22)

  4. Changed: Unify the concept of compress() for all linear algebra objects. Introduce type VectorOperation to decide between add and insert. Implement also for serial vectors. Note: this breaks distributed::vector::compress(bool). See GlossCompress for more information.
    (Timo Heister, 2012/08/13)

  5. Changed: Support for the METIS 4.x has been replaced with support for METIS 5.x. Use –with-metis=path/to/metis to configure with METIS 5.x.
    (Stefano Zampini, Toby D. Young 2012/08/13)

  6. Changed: numerics/vectors.h is now called numerics/vector_tools.h and numerics/matrices.h is now called numerics/matrix_tools.h The old files are deprecated.
    (Timo Heister 2012/08/09)

  7. New: officially added support for clang 3.1 or newer.
    (Timo Heister and Wolfgang Bangerth, 2012/08/07)

  8. Changed: PETSc linking now prefers to use the generated by PETSc starting from version 3.1+. This fixes the problem of linker errors on recent gcc/ubuntu versions.
    (Timo Heister, 2012/08/07)

  9. Fixed: On some 64-bit systems, we build deal.II with the -m64 flag but forgot to build UMFPACK with this flag as well, leading to linker errors. This is now fixed.
    (Wolfgang Bangerth, 2012/07/31)

    Fixed: The Intel compiler, when using MPI, wants that mpi.h is included before header files like stdio.h. This can't be ensured in general because the inclusion might be indirectly, but we now work around the problem in other ways.
    (Timo Heister, Wolfgang Bangerth, Michael Thomadakis, 2012/07/26)

  10. Fixed: On some systems, the p4est library we use for distributed parallel computations installs its libraries into a lib64/ directory instead of the usual lib/. deal.II can now deal with this.
    (Wolfgang Bangerth, 2012/07/25)

  11. New: step-43 is an extension of step-21 that shows efficient methods to solve multi-phase flow.
    (Chih-Che Chueh, Wolfgang Bangerth, 2012/06/06)

  12. New: step-15 has been replaced by a program that demonstrates the solution of nonlinear problem (the minimal surface equation) using Newton's method.
    (Sven Wetterauer, 2012/06/03)

  13. New: step-48 demonstrates the solution of a nonlinear wave equation with an explicit time stepping method. The usage of Gauss-Lobatto elements gives diagonal mass matrices, which obviates the solution of linear systems of equations. The nonlinear right hand side is evaluated with the matrix-free framework.
    (Katharina Kormann and Martin Kronbichler, 2012/05/05)

  14. New: step-37 shows how the matrix-free framework can be utilized to efficiently solve the Poisson equation without building global matrices. It combines fast operator evaluation with a multigrid solver based on polynomial Chebyshev smoother.
    (Katharina Kormann and Martin Kronbichler, 2012/05/05)

  15. New: A new matrix-free interface has been implemented. The framework is parallelized with MPI, TBB, and explicit vectorization instructions (new data type VectorizedArray). The class MatrixFree caches cell-based data in an efficient way. Common operations can be implemented using the FEEvaluation class.
    (Katharina Kormann and Martin Kronbichler, 2012/05/05)

  16. New: step-44 demonstrates one approach to modeling large deformations of nearly-incompressible elastic solids. The elastic response is governed by a non-linear, hyperelastic free-energy function. The geometrical response is also nonlinear, i.e., the program considers finite deformations.
    (Andrew McBride and Jean-Paul Pelteret, 2012/04/25)

  17. New: step-41 demonstrates solving the obstacle problem, a variational inequality.
    (Joerg Frohne, 2012/04/22)

  18. Changed: The version of BOOST we ship with deal.II has been upgraded to 1.49.0.
    (Martin Kronbichler, 2012/04/07)

  19. New: We have added a brief section to the step-12 tutorial programs that compares the DG solution computed there with one that one would obtain by using a continuous finite element.
    (Wolfgang Bangerth, 2012/03/25)

  20. New: Added support for codimension 2, i.e. for dim-dimensional objects embedded into spacedim=dim+2 dimensional space.
    (Sebastian Pauletti, 2012/03/02)

  21. Changed: Material and Boundary indicators have been both of the type unsigned char. Throughout the library, we changed their datatype to types::material_id resp. types::boundary_id, both typedefs of unsigned char. Internal faces are now characterized by numbers::internal_face_boundary_id(=static_cast<types::boundary_id>(-1)) instead of 255, so we get rid of that mysterious number in the source code. Material_ids are also assumed to lie in the range from 0 to numbers::invalid_material_id-1 (where numbers::invalid_material_id = static_cast<types::material_id>(-1)). With this change, it is now much easier to extend the range of boundary or material ids, if needed.
    (Christian Goll 2012/02/27)

  22. New: Functions like FEValues::get_function_values have long been able to extract values from pretty much any vector kind given to it (e.g. of kind Vector, BlockVector, PETScWrappers::Vector, etc). The list of allowed "vector" types now also includes IndexSet, which is interpreted as a vector of elements that are either zero or one, depending on whether an index is in the IndexSet or not.
    As a consequence of this, the DataOut::add_data_vector functions now also work for such types of vectors, a use demonstrated in step-41.
    (Wolfgang Bangerth, 2012/02/14)

  23. New: It has long been a nuisance that the deal.II vector classes could only be accessed using operator() whereas the C++ std::vector class required operator[]. This diminished the usefulness of template code. Historically, the reason was that the deal.II vector classes should use the same operator as the matrix classes, and C++ does not allow to use operator[] for matrices since this operator can only take a single argument.
    In any case, all deal.II vector classes now support both kinds of access operators interchangeably.
    (Wolfgang Bangerth, 2012/02/12)

  24. Fixed: Linking shared libraries on PowerPC systems (e.g. on BlueGene systems) failed due to a miscommunication between compiler and linker. This is now worked around.
    (Aron Ahmedia, Wolfgang Bangerth, 2012/02/06)

  25. New: There is now a distributed deal.II vector class parallel::distributed::Vector that can be used with MPI. The vector is based on a contiguous locally owned range and allows easy access of ghost entries from other processors. The vector interface is very similar to the non-distributed class Vector<Number>.
    (Katharina Kormann, Martin Kronbichler, 2012/01/25)

  26. Fixed: The common/scripts/make_dependencies program now behaves like the C++ compiler when searching include paths for # include "..." directives.
    (Timo Heister, 2012/01/10)

  27. Fixed: The Intel compiler complains that it can't copy Trilinos vector reference objects, preventing the compiling of step-32. This is now fixed.
    (Wolfgang Bangerth, 2011/11/09)

  28. Fixed: Intel ICC 12.1 gets into trouble with BOOST because BOOST believes that the compiler supports C++0x but one then still has to specify the corresponding flag on the command line to avoid compiler errors. This is now fixed.
    (Wolfgang Bangerth, 2011/11/06)

  29. Fixed: On some systems, mpiCC turns out to alias the C compiler, not the C++ compiler as expected. Consequently, try to use mpic++ or mpicxx before mpiCC as these should really be unambiguous.
    (Wolfgang Bangerth, 2011/11/05)

  30. Fixed: Intel's ICC compiler identifies itself as icpc version 12.1.0 (gcc version 4.2.1 compatibility) which we mistook as being GCC version 4.2. The same is true for the Intel C compiler. This is now fixed.
    (Wolfgang Bangerth, 2011/11/05)

  31. Fixed: deal.II could not be compiled with gcc 4.6.1 when MPI is enabled due to a missing include file in file source/base/ This is now fixed.
    (Wolfgang Bangerth, 2011/10/25)

Specific improvements

  1. Changed: To support Trilinos version 10.12.x we need to cache the result of has_ghost_elements() in parallel vectors at construction time of the vector. Starting from 10.12 Trilinos will communicate in this call, which therefore only works if called from all CPUs.
    (Timo Heister, 2012/08/22)

  2. New: The copy constructor of FullMatrix from IdentityMatrix used to be explicit, but that didn't appear to be necessary in hindsight. Consequently, it is now a regular copy constructor.
    (Wolfgang Bangerth, 2012/08/14)

  3. New: The Patterns::Map pattern allows to describe maps from keys to values in input files.
    (Wolfgang Bangerth, 2012/08/01)

  4. Fixed: DoFTools::make_zero_boundary_constraints now also works for parallel distributed triangulations.
    (Wolfgang Bangerth, 2012/07/24)

  5. Fixed: GridTools::find_active_cell_around_point() works now also if the cell in which the point we look for lies is not adjacent to the closest vertex of p. The tests bits/find_cell_8 and _9 illustrate this.
    (Wolfgang Bangerth, Christian Goll 2012/07/20)

  6. Fixed: Using the SolutionTransfer class with hp::DoFHandler and on meshes where some cells are associated with a FE_Nothing element could result in an error. This is now fixed.
    (Wolfgang Bangerth, 2012/06/29)

  7. Fixed: The MappingQ1::transform_real_to_unit_cell function as well as the equivalent ones in derived classes sometimes get into trouble if they are asked to compute the preimage of this point in reference cell coordinates. This is because for points outside the reference cell, the mapping from unit to real cell is not necessarily invertible, and consequently the Newton iteration to find the preimage did not always converge, leading to an exception. While this is not entirely wrong (we could, after all, not compute the desired quantity), not all callers of this function were prepared to accept this result – in particular, the function CellAccessor<3>::point_inside should have really just returned false in such cases but instead let the exception so generated propagate through. This should now be fixed.
    (Wolfgang Bangerth, Eric Heien, Sebastian Pauletti, 2012/06/27)

  8. Fixed: The function VectorTools::compute_no_normal_flux_constraints had a bug that led to an exception whenever we were computing constraints for vector fields located on edges shared between two faces of a 3d cell if those faces were not parallel to the axes of the coordinate system. This is now fixed.
    (Wolfgang Bangerth, Jennifer Worthen, 2012/06/27)

  9. Fixed: Due to an apparent bug in autoconf, it was not possible to override the F77 environment variable to select anything else than gfortran. This is now fixed.
    (Wolfgang Bangerth, 2012/06/08)

  10. Fixed: TrilinosWrappers::VectorBase::swap() is now working as expected. (thanks Uwe Köcher)
    (Timo Heister 2012/07/03)

  11. Fixed: Some instantiations for DerivativeApproximation::approximate_derivative_tensor() were missing.
    (Timo Heister 2012/06/07)

  12. New: The finite element type FE_DGQArbitraryNodes is now working also in codimension one spaces.
    (Luca Heltai, Andrea Mola 2012/06/06)

  13. Fixed: Computing the \(W^{1,\infty}\) norm and seminorm in VectorTools::integrate_difference was not implemented. This is now fixed.
    (Wolfgang Bangerth 2012/06/02)

  14. Fixed: A problem in MappingQ::transform_real_to_unit_cell that sometimes led the algorithm in this function to abort.
    (Wolfgang Bangerth 2012/05/30)

  15. New: The function DataOutInterface::write_pvd_record can be used to provide Paraview with metadata that describes which time in a simulation a particular output file corresponds to.
    (Marco Engelhard 2012/05/30)

  16. Fixed: A bug in 3d with hanging nodes in GridTools::find_cells_adjacent_to_vertex() that caused find_active_cell_around_point() to fail in those cases.
    (Timo Heister, Wolfgang Bangerth 2012/05/30)

  17. New: DoFTools::make_periodicity_constraints implemented which inserts algebraic constraints due to periodic boundary conditions into a ConstraintMatrix.
    (Matthias Maier, 2012/05/22)

  18. New: The GridIn::read_unv function can now read meshes generated by the Salome framework, see .
    (Valentin Zingan, 2012/04/27)

  19. New: There is now a second DoFTools::map_dofs_to_support_points function that also works for parallel::distributed::Triangulation triangulations.
    (Wolfgang Bangerth, 2012/04/26)

  20. New: There is now a second DoFTools::extract_boundary_dofs function that also works for parallel::distributed::Triangulation triangulations.
    (Wolfgang Bangerth, 2012/04/26)

  21. New: The FullMatrix::extract_submatrix_from, FullMatrix::scatter_matrix_to, FullMatrix::set functions are new.
    (Andrew McBride, Jean Paul Pelteret, Wolfgang Bangerth, 2012/04/24)

  22. Fixed: The method FEValues<dim>::inverse_jacobian() previously returned the transpose of the inverse Jacobians instead of just the inverse Jacobian as documented. This is now fixed.
    (Sebastian Pauletti, Katharina Kormann, Martin Kronbichler, 2012/03/11)

  23. Extended: SolutionTransfer is now also able to transfer solutions between hp::DoFHandler where the finite element index changes during refinement.
    (Katharina Kormann, Martin Kronbichler, 2012/03/10)

  24. Changed: A new method to determine an initial guess for the Newton method was coded in MappingQ::transform_real_to_unit_cell. The code in transform_real_to_unit_cell was cleaned a little bit and a new code for the <2,3> case was added.
    (Sebastian Pauletti, 2012/03/02)

  25. Changed: In the context of codim>0, Mapping::transform would require different inputs depending on the mapping type. For mapping_covariant, mapping_contravariant the input is DerivativeForm<1, dim, spacedim> but for mapping_covariant_gradient, mapping_contravariant_gradient the input is Tensor<2,dim>.
    (Sebastian Pauletti, 2012/03/02)

  26. New: A new class DerivativeForm was added. This class is supposed to represent the derivatives of a mapping.
    (Sebastian Pauletti, 2012/03/02)

  27. Fixed: TrilinosWrappers::Vector::all_zero() in parallel.
    (Timo Heister, Jörg Frohne, 2012/03/06)

  28. New: GridGenerator::quarter_hyper_shell() in 3d.
    (Thomas Geenen, 2012/03/05)

  29. New: DataOut::write_vtu_in_parallel(). This routine uses MPI I/O to write a big vtu file in parallel.
    (Timo Heister, 2012/02/29)

  30. Fixed: parallel::distributed::Triangulation::clear() forgot to update the number cache of this class, leading to wrong results when calling functions like parallel::distributed::Triangulation::n_global_active_cells();
    (Wolfgang Bangerth, 2012/02/20)

  31. Improved: FEFieldFunction allows now for the computation of Laplacians.
    (Christian Goll, 2012/02/16)

  32. New: The function IndexSet::fill_binary_vector creates a numerical representation of an IndexSet containing zeros and ones.
    (Wolfgang Bangerth, 2012/02/12)

  33. New: The function IndexSet::clear resets an index set to be empty.
    (Wolfgang Bangerth, 2012/02/12)

  34. New: There are now global functions l1_norm() and linfty_norm() that compute the respective norms of a rank-2 tensor.
    (Wolfgang Bangerth, 2012/02/08)

  35. New: VectorTools::interpolate_to_different_mesh implemented which interpolates between DoFHandlers with different triangulations based on a common coarse grid.
    (Matthias Maier, 2012/02/08)

  36. Improved: DoFTools::map_dofs_to_support_points() now also works within the hp framework.
    (Christian Goll, 2012/02/02)

  37. Improved: There is now a constructor for FESystem that allows to create collections of finite elements of arbitrary length.
    (Jason Sheldon, 2012/01/27)

  38. Improved: VectorTools::point_value() now also works within the hp framework.
    (Christian Goll, 2012/01/26)

  39. Fixed: GridTools::find_active_cell_around_point() for the hp-case works now also with MappingCollections containing only one mapping, as is the standard case in other functions using hp.
    (Christian Goll, 2012/01/26)

  40. Fixed: parallel::distributed::refine_and_coarsen_fixed_fraction() contained a rounding bug that often produced wrong results.
    (Timo Heister, 2012/01/24)

  41. Improved: Utilities::break_text_into_lines now also splits the string at '\n'.
    (Timo Heister, 2012/01/17)

  42. Fixed: When ./configure does not detect the presence of zlib, writing output in VTU format failed to produce a valid output file.
    (Timo Heister, 2012/01/03)

  43. Improved: PETScWrappers::SolverXXX class was restricted to using default solver options for the KSP only. It is now possible to override those by using PETSc command-line options -ksp_*; giving greater flexibility in controlling PETSc solvers. (See the class's documentation).
    (Vijay S. Mahadevan, 2011/12/22)

  44. New: The GridIn class now also reads the GMSH format 2.2 as written by GMSH 2.5.
    (Vijay S. Mahadevan, Wolfgang Bangerth, 2011/12/19)

  45. Improved: The GridRefinement::refine_and_coarsen_optimize function assumed that the expected convergence order was 2. It has now gotten an argument by which the user can prescribe a different value. A bug has also been fixed in which the function incorrectly assumed in its algorithm that the mesh was two-dimensional.
    (Christian Goll, 2011/12/16)

  46. Fixed: Restriction and prolongation didn't work for elements of kind FE_Nothing. Consequently, many other parts of the library also didn't work, such as the SolutionTransfer class. This is now fixed.
    (Wolfgang Bangerth, 2011/12/15)

  47. Fixed: The DerivativeApproximation class now works for distributed computations.
    (Timo Heister, 2011/12/15)

  48. Changed: The ExcMessage exception class took an argument of type char* that was displayed when the exception was raised. However, character pointers are awkward to work with because (i) they can not easily be composed to contain things like file names that are only known at run-time, and (ii) the string pointed to by the pointer had to live longer than the local expression in which the exception is generated when using the AssertThrow macro (because, when we create an exception, the exception object is passed up the call stack until we find a catch-clause; at that time, however, the scope in which the exception object was created has long been left). This restriction made it impossible to construct the message using std::string and then just do something like (std::string("file: ")+filename).c_str().
    To remedy this flaw, the type of the argument to ExcMessage has been changed to std::string since objects of this type are readily copyable and therefore live long enough.
    (Wolfgang Bangerth, 2011/12/14)

  49. New: Setting up a class derived from DataPostprocessor required some pretty mechanical steps in which one has to overload four member functions. For common cases where a postprocessor only computes a single scalar or a single vector, this is tedious and unnecessary. For these cases, the new classes DataPostprocessorScalar and DataPostprocessorVector provide short cuts that make life simpler.
    (Wolfgang Bangerth, 2011/12/14)

  50. Changed: The DataPostprocessor class previously required users of this class to overload DataPostprocessor::get_names(), DataPostprocessor::get_data_component_interpretation() and DataPostprocessor::n_output_variables(). The latter function is redundant since its output must equal the length of the arrays returned by the first two of these functions. It has therefore been removed.
    (Wolfgang Bangerth, 2011/12/14)

  51. Improved: Objects of the type LogStream::Prefix can now be used as a safe implementation of the push and pop mechanism for log prefices.
    (Guido Kanschat, 2011/12/09)

  52. New: IndexSet::add_indices(IndexSet).
    (Timo Heister, 2011/12/09)

  53. Fixed: Finite element Hessians get computed for codimension one, at least for FE_Poly derived classes.
    (Guido Kanschat, 2011/12/07)

  54. Changed: Output of ParameterHandler::print_parameters with argument ParameterHandler::LaTeX was not particularly readable. The output has therefore been rewritten to be more structured and readable.
    (Wolfgang Bangerth, 2011/11/28)

  55. Fixed: The TimerOutput class set the alignment of output to right-aligned under some circumstances, but didn't reset this to the previous value at the end of output. This is now fixed.
    (Wolfgang Bangerth, 2011/11/28)

  56. New: The copy constructor of the SparseMatrixEZ function now works (rather than throwing an exception) if the copied matrix has size zero. This is in accordance to the other matrix classes.
    (Wolfgang Bangerth, 2011/11/15)

  57. New: The class ScalarFunctionFromFunctionObject provides a quick way to convert an arbitrary function into a function object that can be passed to part of the library that require the Function<dim> interface. The VectorFunctionFromScalarFunctionObject class does a similar thing.
    (Wolfgang Bangerth, 2011/11/15)

  58. New: The DoFTools::count_dofs_per_block function now also works for objects of type hp::DoFHandler.
    (Jason Sheldon, 2011/11/13)

  59. New: FETools::get_fe_from_name() can now return objects of type FE_Nothing.
    (Scott Miller, Jonathan Pitt, 2011/11/10)

  60. New: Implementation of an alternative handling of inhomogeneous constraints in ConstraintMatrix. This is controlled with a new parameter use_inhomogeneities_for_rhs in distribute_local_to_global() and determines whether the correct or zero values (this was the case before and still is the default) are kept in the linear system during the solution process.
    (Jörg Frohne, 2011/11/01)

  61. Fixed: SparseMatrix::mmult and SpareMatrix::Tmmult had a number of issues that are now fixed: (i) rebuilding the sparsity pattern was allowed even if several of the matrices involved in these operations shared a sparsity pattern; (ii) the functions had a vector argument that had a default value but the default value could not be used because it wasn't used in a template context deducible by the compiler.
    (Wolfgang Bangerth, 2011/10/30)

  62. New: parallel::distributed::Triangulation::mesh_reconstruction_after_repartitioning setting which is necessary for save()/load() to be deterministic. Otherwise the matrix assembly is done in a different order depending on the order of old refinements.
    (Timo Heister, 2011/10/26)

  63. New: TriaAccessor<>::minimum_vertex_distance().
    (Timo Heister, 2011/10/25)

  64. New: TableHandler::print_text now supports not only printing column keys above their own column, but also in a separate header, to make it simpler for external plotting programs to skip this line.
    (Wolfgang Bangerth, 2011/10/22)

  65. Fixed: Trying to write a TableHandler object that is empty resulted in a segmentation fault. This is now fixed.
    (Wolfgang Bangerth, 2011/10/21)

  66. New: The TableHandler class can now pad columns that have only been partially filled. See the documentation of the class for a description.
    (Wolfgang Bangerth, 2011/10/18)

  67. Fixed: In TableHandler::print_text, it can happen that the function wants to print an empty string as the element of the table to be printed. This can confuse machine readers of this table, for example for visualization, since they then do not see this column in that row. To prevent this, we now print "" in such places.
    (Wolfgang Bangerth, 2011/10/18)

  68. Fixed: Using Trilinos versions 10.4 and later on Debian failed to configure due to a different naming scheme of Trilinos libraries on Debian. This is now fixed.
    (Wolfgang Bangerth, 2011/10/17)

  69. Changed: The TableHandler class has been changed significantly internally. It could previously store arbitrary values (though in practice, only int, unsigned int, double and std::string were implemented). The class is now restricted to this particular set of types. On the other hand, the TableHandler class can now be serialized.
    (Wolfgang Bangerth, 2011/10/17)

  70. Fixed: searching in the doxygen documentation.
    (Timo Heister, 2011/10/13)

  71. New: parallel::distributed::Triangulation::save()/load() to store the refinement information to disk. Also supports saving solution vectors using the SolutionTransfer class.
    (Timo Heister, 2011/10/12)

  72. Fixed: The DataOut_DoFData::merge_patches did not compile with newer compilers. This is now fixed.
    (Wolfgang Bangerth, 2011/10/11)