The deal.II news page
Author: the deal.II authors <authors@dealii.org>
Keywords: deal.II

## Changes after Version 5.0

This is the list of changes made after the release of deal.II version 5.0. It is subdivided into changes 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).

### Incompatibilities

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 call `MGTransferBlock`::`build_matrices` and to the same function in derived classes receaves a `DoFHandler` as an additional argument. It is needed to prebuild the transfer between vectors and multigrid vectors, since the loop over all cells is to slow.
   (GK 2004/08/27)

2. Changed: Previously, parallel PETSc matrices only took the sizes of the matrix and the number of rows to be stored locally as arguments. They chose the partitioning of columns to be the same as that for the rows. However, this does not work for non-quadratic parallel matrices, and leads to very hard to find errors. Therefore, all constructors and reinit functions of the parallel sparse matrix classes now take an additional argument indicating the partitioning of columns of the matrix.
   (WB 2004/06/02)

### General

1. New: Support of shared libraries under Cygwin / Windows systems. Shared libraries are used as default. To use, make sure the library path is included in your `PATH` environment variable.
   (Ralf B. Schulz, 2004/12/20)

2. Fixed: Examples do not use obsolete classes `QGaussN` anymore.
   (GK 2004/12/18)

3. Fixed: Configuration scripts were changed to allow any file suffix for shared and static libraries to allow in the future the creation of dlls under cygwin.
   (Ralf B. Schulz, 2004/12/17)

4. New: Configuration now detects the Intel Fortran compiler and can set compilation flags accordingly.
   (WB 2004/11/04)

5. Extended: deal.II 5.0.0 didn't work with the PETSc release 2.2.1 (which came out after we released version 5.0.0). This should now be fixed: deal.II can be linked against both PETSc 2.2.0 and 2.2.1.
   (WB 2004/10/07)

6. Improved: The documentation generated by Doxygen now states the header file defining a class. Furthermore, all deal.II exceptions are listed as classes and will soon be found in the module `Exceptions`.
   (GK 2004/09/16)

7. New: configuration option `--with-umfpack` for using the UMFPack version and enabling the class `SparseDirectUMFPACK`, both included by Wolfgang.
   Deal.II comes with its own copy of the UMFPACK library, courtesy of its author. In order to use, follow the steps listed here. Note that UMFPACK comes with its own license; to use UMFPACK, please read the ReadMe file and make sure that you agree with its license.
   (GK 2004/08/25)

8. Fixed: None of the formulas in the step-8 tutorial program web page were visible. This is now fixed.
   (WB 2004/06/29)

### base

1. New: The `MultithreadInfo` class now also detects multiple processors on Mac OS X.
   (Helmut Müller 2004/11/29)

2. New: The `TableHandler::write_tex` now accepts the additional boolean argument `with_header` which is set to true by default and tells the function whether to add the latex header and footer (i.e. the \documentclass{...}, \begin{document} and \end{document} stuff) to the table.
   In addition to this, there are two new members in the above class: `TableHandler::tex_set_table_caption` and `TableHandler::tex_set_table_label` to add a caption and a label to the tex generated table.
   (Luca Heltai 2004/10/29)

3. Fixed: `DataOutBase<2,3>::write_tecplot` sometimes did not write the variable name `z` when only outputting faces of cells. This is now fixed.
   (RH 2004/10/29)

4. New: a class template `VectorSlice` allows access to consecutive portions of a vector.
   (GK 2004/09/16)

5. New: The classes `TableIndices<N>` and `Table<N,T>` are now implemented also for `N=7`. The `Table<N,T>` class represents an `N`-dimensional array and might replace the N-times-nested-use of the `std::vector` class.
   (RH 2004/08/13)

6. New: Class `TableIndices` now has operators that check for equality and inequality of objects.
   (WB 2004/07/28)

7. New: A class `PointerComparison` for comparing pointers that may or may not be of the same type.
   (WB 2004/06/22)

8. Removed: The `ParameterHandler` class contained a remnant from back in 1997 when it was modeled after a similar class in DiffPack: it had a `status` flag that one could obtain via the `ok` function. It was never really used for anything, and has thus finally been removed. The `ok` is consequently gone as well.
   (WB 2004/06/06)

9. New: An object of the new `ConditionalOStream` class allows to print to an output stream depending on a condition, which is active or not. This is particular useful for parallel computations when only one process should print to standard output, while in all other processes we simply want output suppressed.
   (RH 2004/05/26)

### lac

1. Fixed: PETSc had changed some of its interfaces in version 2.2.1, which prevented deal.II from working with it (it couldn't be compiled at all). We have added checks that make sure that it can now again be compiled with PETSc versions 2.1.6, 2.2.0, and 2.2.1.
   (WB 2004/10/07)

2. New: A class `PreconditionLU` which provides a wrapper to the complete LU decomposition preconditioner of PETSc. Furthermore a class `SolverPreOnly` was implemented. It is a wrapper for the PETSc solver type KSPPREONLY, which only applies the preconditioner. In conjunction with `PreconditionLU` this provides a simple direct solver, which could be used for small to medium sized problems on a single processor machine.
   (Oliver Kayser-Herold 2004/07/27)

3. Improved: `VectorTools::point_difference` used to use an algorithm to find the cell the given point is in that was linear in the total number of active cells. It has been rewritten to use `GridTools::find_active_cell_around_point` which is only logarithmic in its complexity.
   (WB 2004/07/07)

4. Fixed: Block matrix iterators could get into all kind of interesting (and invalid) states when some of the blocks had empty rows. In this common case, we would frequently skip elements when looping over the elements of a block matrix. These cases should now be fixed.
   (WB 2004/07/07)

5. Removed: Block matrix iterators used to have a function `it->index()` that returned something like the position within a row. However, this was fragile, and has been removed. If you want an ordering of elements within a row, use the `operator <` to compare iterators.
   (WB 2004/07/07)

6. Improved: The `PETScWrappers::SolverGMRES::AdditionalData` class now takes an additional flag indicating the use of left or right preconditioning.
   (RH 2004/06/24)

7. Improved: The `SparseDirectMA27` class can now handle float as well as double input matrices and vectors.
   (WB 2004/06/23)

8. Fixed: The `SparseMatrix::vmult`-type functions `vmult`, `Tvmult`, `vmult_add`, and `Tvmult_add` take two different template arguments for input and output vectors, but were only instantiated in case the arguments were the same, and could also not be compiled if they weren't. Both problems are now fixed.
   (WB 2004/06/22)

9. Improved: The `CompressedSparsityPattern` class used one of the C++ standard containers to store the column indices of nonzero entries in a sparse matrix. This proved to be inefficient since it requires the allocation of 20 bytes each time an element was added, which for large matrices can be millions of times. The new storage format uses a more compact data structure, and a cache that requires memory allocation only every 8 additions, on average. This should significantly reduce the total amount of memory required as well as memory fragmentation. It also cuts run-time for element addition by more than half.
   (WB 2004/06/21)

10. Fixed: `CompressedSparsityPattern::max_entries_per_row()` ignored the first row and thus sometimes returned a value that was too low. This is now fixed.
    (WB 2004/06/21)

11. Fixed: `BlockSparseMatrix::clear()` did not do what it was supposed to do: it emptied the individual blocks and removed them, but it still kept the number of blocks unchanged. Subsequent accesses to these blocks, or to their information yielded segmentation faults.
    (WB 2004/06/02)

12. New: Block matrices and vectors have been factored into abstract base classes and concrete implementation classes. While the previous classes still exist in all their functionality, this allowed us to now also have block matrices and vectors for PETSc sequential and parallel objects.
    (WB 2004/06/02)

13. New: Vector and block vector classes had a commented out template constructor constructing such a vector from a vector object with a different template argument, for example constructing a `Vector<double>` from a `Vector<float>`. This constructor has been commented out a long time ago due to a compiler bug in which the `explicit` keyword on template constructors was ignored, a fact that is dangerous since it may lead the compiler to generate temporaries without our ado. This bug is now detected during configuration time of the library, and these constructors are available whenever the compiler does not contain this bug.
    (WB 2004/06/02)

14. New: In analogy to the PETSc vector classes, the PETSc matrix classes now also have member functions `local_range`, `in_local_range`, and `local_size`.
    (WB 2004/06/02)

15. New: Parallel PETSc matrix and vector classes now have member functions `get_mpi_communicator` that returns the MPI communicator object these objects operate on.
    (WB 2004/06/02)

16. Changed: The PETSc linear solver classes now take a constant, rather than a nonconstant reference to the MPI communicator to be used. This prevents some unnecessary compiler problems in conjunction with the new `get_mpi_communicator` function.
    (WB 2004/06/02)

17. New: Parallel and sequential PETSc sparse matrix classes can now be initialized (via either constructor or reinit functions) with a compressed sparsity pattern object, allowing for more efficient preallocation of nonzero entries.
    (WB 2004/06/02)

### deal.II

1. Improved: `GeometryInfo` has two new fields `unit_normal_direction` and `unit_normal_orientation`, indicating the direction of the unit normal vector for each face of the reference cell.
   (GK 2004/12/18)

2. Fixed: In rare cases of 3d meshes with a certain topology, we triggered an assertion in `TriaAccessor`::`neighbor_child_on_subface`. It turns out that the code actually computes the correct answer, but the assertion had a condition that doesn't always have to be satisfied. This bogus assertion is now fixed.
   (WB 2004/11/12)

3. Fixed: The `GridGenerator`::`cylinder` function in 3d assigned the wrong boundary value to the top and bottom part of the cylinder if the half length of the cylinder was not equal to 1. This is now fixed.
   (Ralf Schulz 2004/10/27)

4. Improved: Now the `FE_Q` class supports hanging node constraints for elements of arbitrary polynomial degree also in 3D.
   (Oliver Kayser-Herold 2004/10/21)

5. Fixed: The `StraightBoundary<3>`::`get_new_point_on_quad` did not work on general grids. This is now fixed.
   (RH 2004/10/15)

6. Improved: The `CylinderBoundary` represented the hull of a circular tubes along the x-axis. It is now extended to allow for circular tubes also along the y- and z-axis.
   (RH 2004/10/15)

7. Fixed: The `ConstraintMatrix` class had some algorithms that were linear in the number of constraints. Since these functions had to be called for each constraint, this resulted in a quadratic behavior. To make things worse, these algorithms traversed large memory blocks leading to a vast number of cache misses which made them really slow. This is now fixed: the algorithm is O(1) and should only access single elements in memory, and one 3d testcase is now a full 5 per cent faster on about 10 minutes runtime.
   (WB 2004/10/04)

8. New: The `GridOut`::`write_gnuplot` function now supports curved boundaries also for `dim==3`.
   (RH 2004/09/20)

9. Fixed: The documentation of the `Triangulation` class mentioned that no places in the library use or touch the user pointers. That is wrong, the `SolutionTransfer` class actually does. This is now properly documented.
   (WB 2004/09/15)

10. Fixed: The `DerivativeApproximation::approximate_second_derivative` function produced wrong results ("not a number", or an exception instead of "zero") if the field it was given was constant. This is now fixed.
    (WB 2004/08/05)

11. New: The `MatrixTools::apply_boundary_values` that works on block matrices and vectors is now templatized over the number type, i.e. it also works for float matrices and vectors.
    (WB 2004/06/22)

12. New: The new `FEValuesBase::get_cell` function returns the current cell, i.e. the latest cell the `FEValues` object was reinited with.
    (RH 2004/06/22)

13. Changed: The `MatrixTools::local_apply_boundary_values` function used to set the diagonal entries of boundary nodes to one. This is a really bad choice, and the algorithm we use now is much better. There are still a few problems when using this function for matrices that will be solved as a Schur complement; there is nothing we can do in that function in these cases, since we are lacking fundamental pieces of information, but the cases where this applies and the strategies to work with this problem anyway are now well documented in the documentation of the `MatrixTools` class.
    (WB 2004/06/07)

14. Fixed: The `GridGenerator::cylinder_shell` function generated cells were all inside-out, i.e. had negative Jacobians. In usual finite element computations this simply leads to all components of the linear system being negated, so it is not harmful. It is fixed now anyway.
    (WB 2004/06/07)

Last update $Date: 2006-07-13 09:12:08 -0400 (Thu, 13 Jul 2006) $