Bugfixes and extensions for HLib
Bugfixes for HLib 1.3
Patch 21: Incorrect leading dimension
in write_supermatrix
The function write_supermatrix was using rows
as the leading dimension of s>s instead of block_rows.
This patch
should fix the error.
Patch 20: Incorrect nearfield quadrature in
curvebem and quadrature1d
The nearfield entries of the twodimensional single and double layer
potential matrices were computed incorrectly.
This patch should
fix the error and adds some functions to curvebem that
are handy for solving integral equations on curves in twodimensional
space.
Patch 19: Index error
in recfill_surfacebem_supermatrix
The row and column indices in the routine used for filling a
supermatrix structure using interpolation were switched.
This patch should fix
the error and add some assert statements to validate that
the correct supermatrix structure is used.
Patch 18: Missing term in setentry_rkmatrix
Instead of setting an entry of an rkmatrix, the function sometimes
only added to the matrix.
This patch should fix
the error.
Patch 17: Integer overflow in hca_surfacebem
An integer overflow in the routine hca_surfacebem could cause
it to try to create very large fullmatrix structures, which usually
leads to a segmentation fault.
This patch tries to
detect integer overflows and should avoid these problems.
Patch 16: Portable timing everywhere
There are a number of other references to the now obsolete constant
CLK_TCK in the source code.
This patch should replace
all of them by using sysconf.
Portable timing in basic
The original timing routine in eta_progressbar uses the
obsolete constant CLK_TCK.
This patch replaces it
by a call to the POSIXconformant sysconf routine.
It also fixes a minor issue in the allocmem routine.
Recursive destructor for blockcluster
The old destructor of the blockcluster class deletes only
the root of a block cluster tree instead of everything.
This patch makes sure that
this memory leak no longer occurs.
Modified semantics for getentry_clusterbasis
The sematics of the routine getentry_clusterbasis was a
little strange: calling the function repeatedly with identical
parameters yielded different results due to the internal processing
of the backward transformation.
This patch changes
the behaviour: the input vector yt has to be passed
explicitly, the result is an entry of V yt (where V is
given implicitly for nonleaf clusters).
New syntax for SSE2 builtins in gcc 4.x
The GNU compiler collection 4.x uses a new syntax for SSE2 builtins.
This means that modules like laplacebem will not compile.
This patch should ensure
that the new syntax is supported.
Unsuitable quadrature weights in
l2norm_surfacebem
The surfacebem class contains not only standard quadrature
weights for triangles, but also modified weights adapted to the
basis functions of the discretization scheme.
The routine l2norm_surfacebem used the latter kind when it
should have been using the former.
This patch
should fix this problem.
Memory leak in krylov routines
The highlevel routines (like solve_gmres_sparsematrix) create
temporary gmres or conjgrad objects which were not
released again.
This patch
should fix this problem.
Output of strange rkmatrix blocks
If the temporary rank r>kt of an rkmatrix is larger
than the number of its rows and columns, the display of the singular
values produced by the routine outputleaf_rkmatrix will be
incorrect.
This patch
should fix this problem.
GMRES and invariant subspaces
If the GMRES solver encounters an invariant subspace, it does not
compute the exact solution in this subspace, but in a lowerdimensional
subspace.
This patch cleans this problem
up and should make the GMRES implementation more resistent to strange
matrices.
Undesired weak admissibility condition
The module blockcluster sometimes uses the weak admissibility
condition in situations where the user has requested a more restrictive
criterion.
This patch should fix
the problem.
Virtual H^{2}matrices with strange
cluster trees
The module h2virtual will not work correctly if the cluster tree
contains leaves with a very high number of elements.
This patch corrects the
problem.
Rectangular matrix blocks and an old ACA
implementation
In one of the ACA routines in surfacebem, row and column
indices of blocks are mixed up.
This small patch
should correct this bug.
SSE2 detection not reliable
The detection of SSE2 support is not working as intended, which can
lead to SSE2 code on machines which do not support it.
This patch should
lead to a more reliable test. It works only if the previous
SSE2related patch
has already been installed.
SSE2 detection leads to internal compiler error
Some versions of the GNU compiler collection produce an internal
compiler error when trying to create the module laplacebem.
This is not a bug in HLib, but in the compiler.
Here is a patch which
allows the configure script to detect whether the compiler
is buggy and to disable the fast quadrature routines if necessary.
Unreliable computation of integrals for 2D BEM
The routines collocation_slp and collocation_dlp
do not give correct results if the collocation point and the start
and ending points of the interval lie in a line.
This patch should
fix the problem.
Missing scaling factor for 2D FEM
The discretization of the principal part of the differential operator
in the routine ellipticpde_grid2d misses a scaling factor.
This patch should
fix the problem.
Extensions for HLib 1.3
H^{2}matrix conversion of
submatrices
The modules h2conversion and h2newconv only
work for entire matrices, but not for submatrices.
This patch allows
them to treat proper submatrices.
Note: converting all subblocks of a supermatrix will not
automatically yield an H^{2}matrix.
Generalized Hmatrix coarsening routine
Coarsening the structure of a hierarchical matrix adaptively can
reduce the storage requirements significantly. It is desirable to
have a method for constructing the coarsened matrix without
storing the entire original matrix. Until now, this functionality
was only available for matrices corresponding to 3D BEM.
This patch adds
a general coarsening routine which uses the blockcluster
structure and suitable callback functions to describe the original
matrix and compresses it "on the fly", thus conserving storage.
