TODO 3.29 KB
Newer Older
graeser's avatar
graeser committed
1 2 3 4 5 6
# 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
7 8 9 10 11 12 13 14 15 16

* 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.



graeser's avatar
graeser committed
17 18 19 20
## 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
21 22 23 24 25

* 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
26 27 28 29
  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
30 31 32



graeser's avatar
graeser committed
33 34 35
## Design issues
Things that could be improved to make dune-solvers easier to use, understand,
and maintain.
graeser's avatar
graeser committed
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

* Implement (P)CG as IterationStep for the LoopSolver
* Make all public member variables protected and introduce public methods for access.
* Use references instead of pointers as member function arguments.
* Move stuff done in MultigridStep::setNumberOfLevels() into preprocess().
* Make handling solution vector in IterationStep consistent:
  Either provide a const reference, store a copy and give (reference)
  access to this copy using getSol() or provide a (nonsonst) reference,
  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).
* Make setting up a MultigridStep easier. E.g. by providing a default
  version that is preconfigured with GS smoother and coarse grid solver.
* Remove MultigridStep::setNumberOfLevels(), this number is already
  fixed by the size of the transfer operator vector.
graeser's avatar
graeser committed
51 52 53 54 55 56 57 58 59 60 61 62
* MultigridStep hides member names from the base class by reusing
  them for different things
* 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.
graeser's avatar
graeser committed
63 64 65
  


graeser's avatar
graeser committed
66
## Naming of classes and members
graeser's avatar
graeser committed
67 68

* ignoreNodes_ should be called ignore_/ignoreIndices_/ignoreComponents_
69 70
* In some classes the type of the matrix is called 'OperatorType'.
  This is old 'dune-fem speak', and should be replaced by 'MatrixType'.
graeser's avatar
graeser committed
71 72 73



graeser's avatar
graeser committed
74 75
## Missing features
A wish list for features that would be very welcome.
graeser's avatar
graeser committed
76 77 78 79

* 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.
graeser's avatar
graeser committed
80
* An interface to add custom output and termination criteria to the LoopSolver. 
graeser's avatar
graeser committed
81