CHROMA
|
Even-odd preconditioned linear operator including derivatives for arrays. More...
#include <eoprec_linop.h>
Public Member Functions | |
virtual | ~EvenOddPrecLinearOperatorArray () |
Virtual destructor to help with cleanup;. More... | |
const Subset & | subset () const |
Only defined on the odd lattice. More... | |
virtual int | size (void) const =0 |
Expected length of array index. More... | |
virtual const FermBC< T, P, Q > & | getFermBC () const =0 |
Return the fermion BC object for this linear operator. More... | |
virtual void | evenEvenLinOp (multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0 |
Apply the even-even block onto a source std::vector. More... | |
virtual void | evenEvenInvLinOp (multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0 |
Apply the inverse of the even-even block onto a source std::vector. More... | |
virtual void | evenOddLinOp (multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0 |
Apply the the even-odd block onto a source std::vector. More... | |
virtual void | oddEvenLinOp (multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0 |
Apply the the odd-even block onto a source std::vector. More... | |
virtual void | oddOddLinOp (multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0 |
Apply the the odd-odd block onto a source std::vector. More... | |
virtual void | operator() (multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const |
Apply the operator onto a source std::vector. More... | |
virtual void | unprecLinOp (multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const |
Apply the UNPRECONDITIONED operator onto a source std::vector. More... | |
virtual void | derivEvenEvenLinOp (P &ds_u, const multi1d< T > &chi, const multi1d< 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 multi1d< T > &chi, const multi1d< 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 multi1d< T > &chi, const multi1d< 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 multi1d< T > &chi, const multi1d< 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 multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const |
virtual void | deriv (P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0 |
Apply the operator onto a source std::vector. More... | |
virtual unsigned long | evenEvenNFlops () const |
Apply the derivative of the UNPRECONDITIONED operator onto a source std::vector. 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::DiffLinearOperatorArray< T, P, Q > | |
virtual | ~DiffLinearOperatorArray () |
Virtual destructor to help with cleanup;. More... | |
virtual void | deriv (P &ds_u, const multi1d< T > &chi, const multi1d< 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::LinearOperatorArray< T > | |
virtual | ~LinearOperatorArray () |
Virtual destructor to help with cleanup;. More... | |
virtual void | operator() (multi1d< T > &chi, const multi1d< 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 including derivatives for arrays.
Support for even-odd preconditioned linear operators with derivatives
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
[ A D ] [ E,E 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
[ A^(-1) - A^(-1) D ] [ E,E E,E E,O ]
U^(-1) = [ ] [ 0 1 ] [ O,E O,O ]
Resulting in a new M
[ 1 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)
By construction, the linear operator is ONLY defined on the odd subset
Definition at line 311 of file eoprec_linop.h.
|
inlinevirtual |
Virtual destructor to help with cleanup;.
Definition at line 315 of file eoprec_linop.h.
|
pure virtual |
Apply 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::DiffLinearOperatorArray< T, P, Q >.
Implemented in Chroma::EvenOddPrecLogDetLinearOperatorArray< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperatorArray< T, P, Q >, and Chroma::EvenOddPrecConstDetLinearOperatorArray< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >.
|
pure virtual |
Apply the even-even block onto a source std::vector.
Implemented in Chroma::EvenOddPrecLogDetLinearOperatorArray< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperatorArray< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperatorArray< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecGenNEFDWLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
|
pure virtual |
Apply the the even-odd block onto a source std::vector.
Implemented in Chroma::EvenOddPrecLogDetLinearOperatorArray< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperatorArray< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperatorArray< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecGenNEFDWLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
|
pure virtual |
Apply the the odd-even block onto a source std::vector.
Implemented in Chroma::EvenOddPrecLogDetLinearOperatorArray< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperatorArray< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperatorArray< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecGenNEFDWLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
|
pure virtual |
Apply the the odd-odd block onto a source std::vector.
Implemented in Chroma::EvenOddPrecLogDetLinearOperatorArray< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperatorArray< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperatorArray< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecGenNEFDWLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
|
inlinevirtual |
Mainly intended for debugging
Definition at line 413 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::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecOvDWLinOpArray, Chroma::EvenOddPrecNEFDWLinOpArray, Chroma::EvenOddPrecGenNEFDWLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
|
inlinevirtual |
Return flops performed by the evenEvenInvLinOp.
Reimplemented in Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
Definition at line 463 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::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecOvDWLinOpArray, Chroma::EvenOddPrecNEFDWLinOpArray, Chroma::EvenOddPrecGenNEFDWLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
|
inlinevirtual |
Apply the derivative of the UNPRECONDITIONED operator onto a source std::vector.
Return flops performed by the evenEvenLinOp
Reimplemented in Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
Definition at line 451 of file eoprec_linop.h.
|
pure virtual |
Apply the the even-odd block onto a source std::vector.
Implemented in Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecOvDWLinOpArray, Chroma::EvenOddPrecNEFDWLinOpArray, Chroma::EvenOddPrecGenNEFDWLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
|
inlinevirtual |
Return flops performed by the evenOddLinOp.
Reimplemented in Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
Definition at line 454 of file eoprec_linop.h.
|
pure virtual |
Return the fermion BC object for this linear operator.
Implements Chroma::DiffLinearOperatorArray< T, P, Q >.
Implemented in Chroma::EvenOddPrecConstDetLinearOperatorArray< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecLogDetLinearOperatorArray< T, P, Q >, Chroma::EvenOddPrecConstDetLinearOperatorArray< T, P, Q >, Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecOvDWLinOpArray, Chroma::EvenOddPrecNEFDWLinOpArray, Chroma::EvenOddPrecGenNEFDWLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
|
inlinevirtual |
Return flops performed by the operator()
Reimplemented from Chroma::LinearOperatorArray< T >.
Reimplemented in Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
Definition at line 466 of file eoprec_linop.h.
|
pure virtual |
Apply the the odd-even block onto a source std::vector.
Implemented in Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecOvDWLinOpArray, Chroma::EvenOddPrecNEFDWLinOpArray, Chroma::EvenOddPrecGenNEFDWLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
|
inlinevirtual |
Return flops performed by the oddEvenLinOp.
Reimplemented in Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
Definition at line 457 of file eoprec_linop.h.
|
pure virtual |
Apply the the odd-odd block onto a source std::vector.
Implemented in Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecOvDWLinOpArray, Chroma::EvenOddPrecNEFDWLinOpArray, Chroma::EvenOddPrecGenNEFDWLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
|
inlinevirtual |
Return flops performed by the oddOddLinOp.
Reimplemented in Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
Definition at line 460 of file eoprec_linop.h.
|
inlinevirtual |
Apply the operator onto a source std::vector.
Implements Chroma::LinearOperatorArray< T >.
Definition at line 348 of file eoprec_linop.h.
References chi, Chroma::isign, n, psi, and tmp2.
|
pure virtual |
Expected length of array index.
Implements Chroma::LinearOperatorArray< T >.
Implemented in Chroma::EvenOddPrecConstDetLinearOperatorArray< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecConstDetLinearOperatorArray< T, P, Q >, Chroma::EvenOddPrecDWLikeLinOpBaseArray< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >, Chroma::EvenOddPrecLogDetLinearOperatorArray< T, P, Q >, Chroma::EvenOddPrecDWLikeLinOpBaseArray< T, P, Q >, Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray, Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray, Chroma::EvenOddPrecOvExtLinOpArray, Chroma::EvenOddPrecOvDWLinOpArray, Chroma::EvenOddPrecNEFDWLinOpArray, Chroma::EvenOddPrecGenNEFDWLinOpArray, Chroma::EvenOddPrecHtContFrac5DLinOpArray, and Chroma::EvenOddPrecDWLinOpArray.
|
inlinevirtual |
Only defined on the odd lattice.
Implements Chroma::LinearOperatorArray< T >.
Reimplemented in Chroma::EvenOddPrecLogDetLinearOperatorArray< T, P, Q >, and Chroma::EvenOddPrecConstDetLinearOperatorArray< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > >.
Definition at line 318 of file eoprec_linop.h.
|
inlinevirtual |
Apply the UNPRECONDITIONED operator onto a source std::vector.
Mainly intended for debugging
Definition at line 372 of file eoprec_linop.h.
References chi, Chroma::isign, n, psi, and tmp2.