I want to solve problems in connection with an engineering/physics application using the ViennaCL iterative solvers.
The application uses the L1 normfactor while the ViennaCL linear solvers use norm_2. Websearch
tells me that L1 is more suitable to solve problems with sparse matrices and my matrices are all sparse.
It looks to me as if norm_2 is "hardcoded" in the solver source codes. Why?
Is it possible to "set()" the norm_1 without changing the source code?
T.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi Tario,
ViennaCL uses either the 2-norm or the energy norm. These norms are indeed hardcoded for the time being. Why do you think that the 1-norm is more natural?
Best regards,
Karli
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Technical problems could arise with a "monitoring" function of the application which usually gets as a return/input from the solver the current residual / L1 norm. Apparently adjustments were needed when using ViennaCL 1.2 a few years ago to make it work but I don't have the source code or any details. I'll see, whether there are implications when the interface is up and running.
T.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi Tario,
well, engineering applications often minimize a certain energy functional, so it's also natural to monitor that. It is natural for Krylov solvers to monitor convergence in such an energy-norm, typically of the form (x,Ax).
Btw: You can always specify your own monitor function, in which you compute the L1-norm.
Best regards,
Karli
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hello,
I want to solve problems in connection with an engineering/physics application using the ViennaCL iterative solvers.
The application uses the L1 normfactor while the ViennaCL linear solvers use norm_2. Websearch
tells me that L1 is more suitable to solve problems with sparse matrices and my matrices are all sparse.
It looks to me as if norm_2 is "hardcoded" in the solver source codes. Why?
Is it possible to "set()" the norm_1 without changing the source code?
T.
Hi Tario,
ViennaCL uses either the 2-norm or the energy norm. These norms are indeed hardcoded for the time being. Why do you think that the 1-norm is more natural?
Best regards,
Karli
Hi Karli,
I don't have an opinion on that, it's a necissity to think about it as the physics/CFD application uses the L1 norm and e.g. according to http://www.chioka.in/differences-between-the-l1-norm-and-the-l2-norm-least-absolute-deviations-and-least-squares/ L1 is supposed to be more suitable for sparse matrix problems.
Technical problems could arise with a "monitoring" function of the application which usually gets as a return/input from the solver the current residual / L1 norm. Apparently adjustments were needed when using ViennaCL 1.2 a few years ago to make it work but I don't have the source code or any details. I'll see, whether there are implications when the interface is up and running.
T.
Hi Tario,
well, engineering applications often minimize a certain energy functional, so it's also natural to monitor that. It is natural for Krylov solvers to monitor convergence in such an energy-norm, typically of the form (x,Ax).
Btw: You can always specify your own monitor function, in which you compute the L1-norm.
Best regards,
Karli