TODO 2.99 KB
Newer Older
graeser's avatar
graeser committed
1 2 3 4
# ToDo
## Bugs
These issues are not real bugs, but unexpected behaviour that might
lead to serious trouble if you're not aware of.
graeser's avatar
graeser committed
5 6 7 8 9 10 11

* ProjectedBlockGSStep does nothing for a whole block if there are
  zero diagonal entries in the diagonal block.
  One would expect that it solves the system for the reduced
  block containing the block rows with nonzero diagonal entry
  in this case.
* MultigridStep is not robust wrt setup order.
usack's avatar
usack committed
12
* MultigridStep deletes the ignoreNodes_ when calling preprocess() a second time
graeser's avatar
graeser committed
13

graeser's avatar
graeser committed
14 15 16 17
## Performance issues
While a suboptimal implementation might be OK, if it is cleaner
and more readable these issues may decrease the performance
without any again.
graeser's avatar
graeser committed
18 19 20 21 22

* BlockGSStep and the derived classes loop over each row twice.
  Once for computing the residual, once for finding the diagonal entry.
  This could be done in one loop.
* The ProjectedBlockGSStep 'solves' the local obstacle problems
graeser's avatar
graeser committed
23 24 25 26
  by a local projected GS with a fixed number of 20 iteration steps
  for blocksize!=1. Even in this case using only one step might still
  be OK but much cheaper. (Does this have any performance impact on
  linear elasticity problems?)
graeser's avatar
graeser committed
27

graeser's avatar
graeser committed
28 29 30
## Design issues
Things that could be improved to make dune-solvers easier to use, understand,
and maintain.
graeser's avatar
graeser committed
31 32 33 34 35

* Make all public member variables protected and introduce public methods for access.
* Use references instead of pointers as member function arguments.
* Make handling solution vector in IterationStep consistent:
  Either provide a const reference, store a copy and give (reference)
36
  access to this copy using getSol() or provide a (nonconst) reference,
graeser's avatar
graeser committed
37 38 39
  store the solution there and make getSol() return this reference
  and no copy.
  (C: I'd prefer the latter to reduce the number of vector copies).
40 41
* Make setting up a MultigridStep easier. E.g. by providing a default
  version that is preconfigured with GS smoother and coarse grid solver.
graeser's avatar
graeser committed
42 43 44 45 46 47 48 49 50 51
* MultigridStep works differently on the finest and the other
  levels. On the finest, the smoother is used with the rhs of
  the linear system and the current iterate as initial value
  to compute the new iterate. On the coarse levels it is used to
  solve the defect system approximately, i.e., it computes a
  correction with the residual and zero initial value.
  This should be unified or at least documented.
  Computing corrections also on the finest level might allow
  to solve systems really up to machine accuracy sice you
  have more digits for the correction.
52 53 54
* devise a coherent meaningful concept of a SolverResult struct for the various
  Solver Base-classes (Solver, IterativeSolver, LoopSolver atl) and substitute the 
  q&d version implemented now
graeser's avatar
graeser committed
55

graeser's avatar
graeser committed
56
## Naming of classes and members
graeser's avatar
graeser committed
57 58 59

* ignoreNodes_ should be called ignore_/ignoreIndices_/ignoreComponents_

graeser's avatar
graeser committed
60 61
## Missing features
A wish list for features that would be very welcome.
graeser's avatar
graeser committed
62 63 64 65

* Transfer operator assembler for adaptively refined grids (without refinementtype=copy)
  This is already implemented in dune-fufem. It could be moved here if the
  dependency on P1NodalBasis is removed.