[eigen] A different stop criterion for the Conjugate Gradient solver |

[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]

Hi,

`I am currently implementing an algorithm for the particle-based
``simulation of elastic solids [1]. It requires the solution of a SPD
``linear system, for which the authors use a matrix-free Conjugate
``Gradient (CG) solver. I want to use the Eigen's CG solver since I
``successfully used it in other parts of my project before.
``However, the authors of the paper use a different stopping criterion
``than the one Eigen uses. Eigen stops the CG iterations when the relative
``residual error falls below a given threshold, meaning |Ax-b|/|b| <
``tolerance. The authors of the paper, on the other hand, exploit the fact
``that in their linear system three consecutive entries of the solution
``vector correspond to the x-, y- and z-velocity of a particle. They stop
``the iteration when the "average absolute per particle [velocity] error
``of the system" reaches 1e-3. This error is computed as
`1/n \sum_j^n |r_j|,

`where r_j is the j'th Vector3d segmentof the solution vector. This
``results in a different overall behavior of the simulation.
`

`How can I replace Eigen's stop criterion for the CG solver by a custom
``one without modifying ConjugateGradient.h? Should I write my own
``template specialization of void conjugate_gradient(...)? If so, can you
``provide me with an example (my previous attempts failed)?
`

`I think a custom stop criterion might come in handy for other people as
``well, so might be a nice feature to include in Eigen itself.
`
I am looking forward to your suggestions!
Best,
Marcel

`[1] "An Implicit SPH Formulation for Incompressible Linearly Elastic
``Solids",
``https://cg.informatik.uni-freiburg.de/publications/2017_CGF_elasticSolidsSPH.pdf
`
--
Marcel Weiler
Technische Universität Darmstadt
Graduate School of Computational Engineering
Dolivostraße 15, S4|10-204
64293 Darmstadt
Germany
Office: +49 6151 16 - 24387
Fax: +49 6151 16 - 24404