CHROMA
|
Even-odd preconditioned linear operator. More...
#include <eoprec_linop.h>
Public Member Functions | |
virtual | ~EvenOddPrecLinearOperator () |
Virtual destructor to help with cleanup;. More... | |
const Subset & | subset () const |
Only defined on the odd lattice. More... | |
virtual const FermBC< T, P, Q > & | getFermBC () const =0 |
Return the fermion BC object for this linear operator. More... | |
virtual void | evenEvenLinOp (T &chi, const T &psi, enum PlusMinus isign) const =0 |
Apply the even-even block onto a source std::vector. More... | |
virtual void | evenEvenInvLinOp (T &chi, const T &psi, enum PlusMinus isign) const =0 |
Apply the inverse of the even-even block onto a source std::vector. More... | |
virtual void | evenOddLinOp (T &chi, const T &psi, enum PlusMinus isign) const =0 |
Apply the the even-odd block onto a source std::vector. More... | |
virtual void | oddEvenLinOp (T &chi, const T &psi, enum PlusMinus isign) const =0 |
Apply the the odd-even block onto a source std::vector. More... | |
virtual void | oddOddLinOp (T &chi, const T &psi, enum PlusMinus isign) const =0 |
Apply the the odd-odd block onto a source std::vector. More... | |
virtual void | operator() (T &chi, const T &psi, enum PlusMinus isign) const |
Apply the operator onto a source std::vector. More... | |
virtual void | unprecLinOp (T &chi, const T &psi, enum PlusMinus isign) const |
Apply the UNPRECONDITIONED operator onto a source std::vector. More... | |
virtual void | derivEvenEvenLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0 |
Apply the even-even block onto a source std::vector. More... | |
virtual void | derivEvenOddLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0 |
Apply the the even-odd block onto a source std::vector. More... | |
virtual void | derivOddEvenLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0 |
Apply the the odd-even block onto a source std::vector. More... | |
virtual void | derivOddOddLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0 |
Apply the the odd-odd block onto a source std::vector. More... | |
virtual void | derivUnprecLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const |
virtual void | deriv (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0 |
Apply the derivative of the operator onto a source std::vector. More... | |
virtual unsigned long | evenEvenNFlops () const |
Return flops performed by the evenEvenLinOp. More... | |
virtual unsigned long | evenOddNFlops () const |
Return flops performed by the evenOddLinOp. More... | |
virtual unsigned long | oddEvenNFlops () const |
Return flops performed by the oddEvenLinOp. More... | |
virtual unsigned long | oddOddNFlops () const |
Return flops performed by the oddOddLinOp. More... | |
virtual unsigned long | evenEvenInvNFlops () const |
Return flops performed by the evenEvenInvLinOp. More... | |
virtual unsigned long | nFlops () const |
Return flops performed by the operator() More... | |
![]() | |
virtual | ~DiffLinearOperator () |
Virtual destructor to help with cleanup;. More... | |
virtual void | deriv (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign, const Real &epsilon) const |
Apply the derivative of the operator onto a source std::vector to some precision. More... | |
virtual void | derivMultipole (P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const |
Return the force for multiple poles. More... | |
![]() | |
virtual | ~LinearOperator () |
Virtual destructor to help with cleanup;. More... | |
virtual void | operator() (T &chi, const T &psi, enum PlusMinus isign, Real epsilon) const |
Apply the operator onto a source std::vector to some precision. More... | |
Even-odd preconditioned linear operator.
Support for even-odd preconditioned linear operators Given a matrix M written in block form:
[ A D ] [ E,E E,O ] [ ] [ D A ] [ O,E O,O ]
The preconditioning consists of using the triangular matrices
[ 1 0 ] [ E,E E,O ]
L = [ ] [ D A^(-1) 1 ] [ O,E E,E O,O ]
and
[ 1 A^{-1} D ] [ E,E EE E,O ]
U = [ ] [ 0 1 ] [ O,E O,O ]
The preconditioned matrix is formed from
M' = L^-1 * M * U^-1
where
[ 1 0 ] [ E,E E,O ]
L^(-1) = [ ] [ - D A^(-1) 1 ] [ O,E E,E O,O ]
and
[ 1 - A^(-1) D ] [ E,E E,E E,O ]
U^(-1) = [ ] [ 0 1 ] [ O,E O,O ]
Resulting in a new M
[ A 0 ] [ E,E E,O ] [ ] [ 0 A - D A^(-1) D ] [ O,E O,O O,E E,E E,O ]
This class is used to implement the resulting linear operator
~ M = A(o,o) - D(o,e) . A^-1(e,e) . D(e,o)
where A^{-1}_{ee} is independent of the gauge fields. This means that the det A_{ee} is an irrelevant constant and that the force term due to the A_{ee} part is zero.
This structure suits most of the linear operators we use, and It simplifies the force term. By construction, the linear operator is ONLY defined on the odd subset
Definition at line 91 of file eoprec_linop.h.
|
inlinevirtual |
Virtual destructor to help with cleanup;.
Definition at line 95 of file eoprec_linop.h.
|
pure virtual |
Apply the derivative of the operator onto a source std::vector.
User should make sure deriv routines do a resize. This function is left pure virtual - as derived functions need to override it
Reimplemented from Chroma::DiffLinearOperator< T, P, Q >.
Implemented in Chroma::EvenOddPrecLogDetLinearOperator< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperator< T, P, Q >, Chroma::EvenOddPrecLogDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, and Chroma::EvenOddPrecConstDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >.
|
pure virtual |
Apply the even-even block onto a source std::vector.
Implemented in Chroma::EvenOddPrecLogDetLinearOperator< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperator< T, P, Q >, Chroma::EvenOddPrecLogDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecConstDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, Chroma::EvenOddPrecParWilsonLinOp, and Chroma::EvenOddPrecCloverLinOp.
|
pure virtual |
Apply the the even-odd block onto a source std::vector.
Implemented in Chroma::EvenOddPrecLogDetLinearOperator< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperator< T, P, Q >, Chroma::EvenOddPrecLogDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecConstDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, Chroma::EvenOddPrecParWilsonLinOp, and Chroma::EvenOddPrecCloverLinOp.
|
pure virtual |
Apply the the odd-even block onto a source std::vector.
Implemented in Chroma::EvenOddPrecLogDetLinearOperator< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperator< T, P, Q >, Chroma::EvenOddPrecLogDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecConstDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, Chroma::EvenOddPrecParWilsonLinOp, and Chroma::EvenOddPrecCloverLinOp.
|
pure virtual |
Apply the the odd-odd block onto a source std::vector.
Implemented in Chroma::EvenOddPrecLogDetLinearOperator< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperator< T, P, Q >, Chroma::EvenOddPrecLogDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecConstDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, Chroma::EvenOddPrecParWilsonLinOp, and Chroma::EvenOddPrecCloverLinOp.
|
inlinevirtual |
Mainly intended for debugging
Definition at line 185 of file eoprec_linop.h.
References chi, Chroma::isign, psi, and tmp2.
|
pure virtual |
Apply the inverse of the even-even block onto a source std::vector.
Implemented in Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, Chroma::EvenOddPrecParWilsonLinOp, Chroma::EvenOddPrecCloverOrbifoldLinOp, Chroma::EvenOddPrecCloverLinOp, and Chroma::EvenOddPrecCloverExtFieldLinOp.
|
inlinevirtual |
Return flops performed by the evenEvenInvLinOp.
Definition at line 232 of file eoprec_linop.h.
|
pure virtual |
Apply the even-even block onto a source std::vector.
This does not need to be optimized
Implemented in Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, Chroma::EvenOddPrecParWilsonLinOp, Chroma::EvenOddPrecCloverOrbifoldLinOp, Chroma::EvenOddPrecCloverLinOp, and Chroma::EvenOddPrecCloverExtFieldLinOp.
|
inlinevirtual |
Return flops performed by the evenEvenLinOp.
Definition at line 220 of file eoprec_linop.h.
|
pure virtual |
Apply the the even-odd block onto a source std::vector.
Implemented in Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, Chroma::EvenOddPrecParWilsonLinOp, Chroma::EvenOddPrecCloverOrbifoldLinOp, Chroma::EvenOddPrecCloverLinOp, and Chroma::EvenOddPrecCloverExtFieldLinOp.
|
inlinevirtual |
Return flops performed by the evenOddLinOp.
Definition at line 223 of file eoprec_linop.h.
|
pure virtual |
Return the fermion BC object for this linear operator.
Implements Chroma::DiffLinearOperator< T, P, Q >.
Implemented in Chroma::EvenOddPrecLogDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecConstDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecLogDetLinearOperator< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperator< T, P, Q >, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, Chroma::EvenOddPrecParWilsonLinOp, Chroma::EvenOddPrecCloverOrbifoldLinOp, Chroma::EvenOddPrecCloverLinOp, and Chroma::EvenOddPrecCloverExtFieldLinOp.
|
inlinevirtual |
Return flops performed by the operator()
Reimplemented from Chroma::LinearOperator< T >.
Reimplemented in Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, Chroma::EvenOddPrecParWilsonLinOp, Chroma::EvenOddPrecCloverOrbifoldLinOp, Chroma::EvenOddPrecCloverLinOp, and Chroma::EvenOddPrecCloverExtFieldLinOp.
Definition at line 235 of file eoprec_linop.h.
Referenced by main().
|
pure virtual |
Apply the the odd-even block onto a source std::vector.
Implemented in Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, Chroma::EvenOddPrecParWilsonLinOp, Chroma::EvenOddPrecCloverOrbifoldLinOp, Chroma::EvenOddPrecCloverLinOp, and Chroma::EvenOddPrecCloverExtFieldLinOp.
|
inlinevirtual |
Return flops performed by the oddEvenLinOp.
Definition at line 226 of file eoprec_linop.h.
|
pure virtual |
Apply the the odd-odd block onto a source std::vector.
Implemented in Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, Chroma::EvenOddPrecParWilsonLinOp, Chroma::EvenOddPrecCloverOrbifoldLinOp, Chroma::EvenOddPrecCloverLinOp, and Chroma::EvenOddPrecCloverExtFieldLinOp.
|
inlinevirtual |
Return flops performed by the oddOddLinOp.
Definition at line 229 of file eoprec_linop.h.
|
inlinevirtual |
Apply the operator onto a source std::vector.
Implements Chroma::LinearOperator< T >.
Reimplemented in Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, Chroma::EvenOddPrecParWilsonLinOp, Chroma::EvenOddPrecCloverOrbifoldLinOp, Chroma::EvenOddPrecCloverLinOp, and Chroma::EvenOddPrecCloverExtFieldLinOp.
Definition at line 125 of file eoprec_linop.h.
References chi, Chroma::isign, psi, and tmp2.
|
inlinevirtual |
Only defined on the odd lattice.
Implements Chroma::LinearOperator< T >.
Reimplemented in Chroma::EvenOddPrecLogDetLinearOperator< T, P, Q >, and Chroma::EvenOddPrecLogDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >.
Definition at line 98 of file eoprec_linop.h.
|
inlinevirtual |
Apply the UNPRECONDITIONED operator onto a source std::vector.
Mainly intended for debugging
Definition at line 147 of file eoprec_linop.h.
References chi, Chroma::isign, psi, and tmp2.
Referenced by Chroma::Lunprec< T, P, Q >::operator()().