CHROMA
|
Even-odd preconditioned linear operator. More...
#include <eoprec_constdet_linop.h>
Public Member Functions | |
virtual | ~EvenOddPrecConstDetLinearOperator () |
Virtual destructor to help with cleanup;. More... | |
virtual const FermBC< T, P, Q > & | getFermBC () const =0 |
Return the fermion BC object for this linear operator. More... | |
virtual void | deriv (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const |
Apply the derivative of the operator onto a source std::vector. More... | |
virtual void | derivEvenEvenLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const |
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 |
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 |
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 |
Apply the the odd-odd block onto a source std::vector. More... | |
virtual void | derivEvenEvenLinOpMP (P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const |
virtual void | derivEvenOddLinOpMP (P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const |
virtual void | derivOddEvenLinOpMP (P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const |
virtual void | derivOddOddLinOpMP (P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const |
virtual void | derivMultipole (P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const |
Apply the derivative of the operator onto a source std::vector. More... | |
Public Member Functions inherited from Chroma::EvenOddPrecLinearOperator< T, P, Q > | |
virtual | ~EvenOddPrecLinearOperator () |
Virtual destructor to help with cleanup;. More... | |
const Subset & | subset () const |
Only defined on the odd lattice. 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 | derivUnprecLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const |
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... | |
Public Member Functions inherited from Chroma::DiffLinearOperator< T, P, Q > | |
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... | |
Public Member Functions inherited from Chroma::LinearOperator< T > | |
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 90 of file eoprec_constdet_linop.h.
|
inlinevirtual |
Virtual destructor to help with cleanup;.
Definition at line 94 of file eoprec_constdet_linop.h.
|
inlinevirtual |
Apply the derivative of the operator onto a source std::vector.
User should make sure deriv routines do a resize
Implements Chroma::EvenOddPrecLinearOperator< T, P, Q >.
Definition at line 101 of file eoprec_constdet_linop.h.
References chi, Chroma::isign, Chroma::MINUS, mu, Nd, Chroma::PLUS, psi, and tmp2.
|
inlinevirtual |
Apply the even-even block onto a source std::vector.
Implements Chroma::EvenOddPrecLinearOperator< T, P, Q >.
Reimplemented in Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, and Chroma::EvenOddPrecParWilsonLinOp.
Definition at line 144 of file eoprec_constdet_linop.h.
|
inlinevirtual |
Definition at line 176 of file eoprec_constdet_linop.h.
References Nd, and Chroma::zero.
|
inlinevirtual |
Apply the the even-odd block onto a source std::vector.
Implements Chroma::EvenOddPrecLinearOperator< T, P, Q >.
Reimplemented in Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, and Chroma::EvenOddPrecParWilsonLinOp.
Definition at line 152 of file eoprec_constdet_linop.h.
|
inlinevirtual |
Definition at line 195 of file eoprec_constdet_linop.h.
References chi, i, Chroma::isign, Nd, psi, and Chroma::zero.
|
inlinevirtual |
Apply the derivative of the operator onto a source std::vector.
User should make sure deriv routines do a resize
Reimplemented from Chroma::DiffLinearOperator< T, P, Q >.
Definition at line 242 of file eoprec_constdet_linop.h.
References chi, i, Chroma::isign, Chroma::MINUS, mu, Nd, Chroma::PLUS, psi, and tmp2.
|
inlinevirtual |
Apply the the odd-even block onto a source std::vector.
Implements Chroma::EvenOddPrecLinearOperator< T, P, Q >.
Reimplemented in Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, and Chroma::EvenOddPrecParWilsonLinOp.
Definition at line 160 of file eoprec_constdet_linop.h.
|
inlinevirtual |
Definition at line 209 of file eoprec_constdet_linop.h.
References chi, i, Chroma::isign, Nd, psi, and Chroma::zero.
|
inlinevirtual |
Apply the the odd-odd block onto a source std::vector.
Implements Chroma::EvenOddPrecLinearOperator< T, P, Q >.
Reimplemented in Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, and Chroma::EvenOddPrecParWilsonLinOp.
Definition at line 168 of file eoprec_constdet_linop.h.
|
inlinevirtual |
Definition at line 223 of file eoprec_constdet_linop.h.
References Nd, and Chroma::zero.
|
pure virtual |
Return the fermion BC object for this linear operator.
Implements Chroma::EvenOddPrecLinearOperator< T, P, Q >.
Implemented in Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecWilsonLinOp, Chroma::EvenOddPrecTwmLinOpArray, and Chroma::EvenOddPrecParWilsonLinOp.