pymor
pymor copied to clipboard
Should we add Vector Sanitizers to Gram-Schmidt process
Hi there,
The problem: I often do run into the situation that I want to orthogonalize a bunch of vectors which are in a subspace of the full FEM space. For example, vectors having mean value zero. As a second example, in the method "ArbiLoMod", we have vectors wherein one part (the "extension") is calculated by applying a linear operator to another part. Often, this property deteriorates during the Gram-Schmidt process: When one starts with nearly linear dependent vectors, numerical noise is amplified during the Gram-Schmidt process. This numerical noise is not in the subspace and the resulting vector is not in the subspace.
The solution: I would suggest to add an optional option "sanitizer" to the Gram-Schmidt process, which is a callable which brings the vectors back into the subspace. The Gram-Schmidt algorithm should apply this sanitizer after steps which amplify numerical noise.
What are your opinions?
Sounds nice! While we are at it, we might think about a somewhat more generic hook system. (Although I do not have another real application in mind, however.)
Right now, I cannot remember what I had in mind with this 'hook system'. So, if you have some code lying around, @andreasbuhr, a PR is very welcome.