[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