CHROMA
Public Member Functions | List of all members
Chroma::EvenOddPrecLinearOperatorArray< T, P, Q > Class Template Referenceabstract

Even-odd preconditioned linear operator including derivatives for arrays. More...

#include <eoprec_linop.h>

Inheritance diagram for Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >:
Chroma::DiffLinearOperatorArray< T, P, Q > Chroma::LinearOperatorArray< T > Chroma::EvenOddPrecConstDetLinearOperatorArray< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > Chroma::EvenOddPrecConstDetLinearOperatorArray< T, P, Q > Chroma::EvenOddPrecLogDetLinearOperatorArray< T, P, Q > Chroma::EvenOddPrecDWLikeLinOpBaseArray< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > Chroma::EvenOddPrecHtContFrac5DLinOpArray Chroma::EvenOddPrecOvExtLinOpArray Chroma::EvenOddPrecOvlapContFrac5DLinOpBaseArray Chroma::EvenOddPrecOvlapContFrac5DPVLinOpArray Chroma::EvenOddPrecDWLikeLinOpBaseArray< T, P, Q > Chroma::EvenOddPrecDWLinOpArray Chroma::EvenOddPrecGenNEFDWLinOpArray Chroma::EvenOddPrecNEFDWLinOpArray Chroma::EvenOddPrecOvDWLinOpArray Chroma::OptEvenOddPrecOvlapContFrac5DLinOpArray Chroma::QDPEvenOddPrecOvlapContFrac5DLinOpArray

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...
 

Detailed Description

template<typename T, typename P, typename Q>
class Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >

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.

Constructor & Destructor Documentation

◆ ~EvenOddPrecLinearOperatorArray()

template<typename T , typename P , typename Q >
virtual Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::~EvenOddPrecLinearOperatorArray ( )
inlinevirtual

Virtual destructor to help with cleanup;.

Definition at line 315 of file eoprec_linop.h.

Member Function Documentation

◆ deriv()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::deriv ( P ds_u,
const multi1d< T > &  chi,
const multi1d< T > &  psi,
enum PlusMinus  isign 
) const
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 > >.

◆ derivEvenEvenLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::derivEvenEvenLinOp ( P ds_u,
const multi1d< T > &  chi,
const multi1d< T > &  psi,
enum PlusMinus  isign 
) const
pure virtual

◆ derivEvenOddLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::derivEvenOddLinOp ( P ds_u,
const multi1d< T > &  chi,
const multi1d< T > &  psi,
enum PlusMinus  isign 
) const
pure virtual

◆ derivOddEvenLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::derivOddEvenLinOp ( P ds_u,
const multi1d< T > &  chi,
const multi1d< T > &  psi,
enum PlusMinus  isign 
) const
pure virtual

◆ derivOddOddLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::derivOddOddLinOp ( P ds_u,
const multi1d< T > &  chi,
const multi1d< T > &  psi,
enum PlusMinus  isign 
) const
pure virtual

◆ derivUnprecLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::derivUnprecLinOp ( P ds_u,
const multi1d< T > &  chi,
const multi1d< T > &  psi,
enum PlusMinus  isign 
) const
inlinevirtual

Mainly intended for debugging

Definition at line 413 of file eoprec_linop.h.

References chi, Chroma::isign, psi, and tmp2.

◆ evenEvenInvLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::evenEvenInvLinOp ( multi1d< T > &  chi,
const multi1d< T > &  psi,
enum PlusMinus  isign 
) const
pure virtual

◆ evenEvenInvNFlops()

template<typename T , typename P , typename Q >
virtual unsigned long Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::evenEvenInvNFlops ( void  ) const
inlinevirtual

◆ evenEvenLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::evenEvenLinOp ( multi1d< T > &  chi,
const multi1d< T > &  psi,
enum PlusMinus  isign 
) const
pure virtual

◆ evenEvenNFlops()

template<typename T , typename P , typename Q >
virtual unsigned long Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::evenEvenNFlops ( void  ) const
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.

◆ evenOddLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::evenOddLinOp ( multi1d< T > &  chi,
const multi1d< T > &  psi,
enum PlusMinus  isign 
) const
pure virtual

◆ evenOddNFlops()

template<typename T , typename P , typename Q >
virtual unsigned long Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::evenOddNFlops ( void  ) const
inlinevirtual

◆ getFermBC()

template<typename T , typename P , typename Q >
virtual const FermBC<T,P,Q>& Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::getFermBC ( ) const
pure virtual

◆ nFlops()

template<typename T , typename P , typename Q >
virtual unsigned long Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::nFlops ( void  ) const
inlinevirtual

◆ oddEvenLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::oddEvenLinOp ( multi1d< T > &  chi,
const multi1d< T > &  psi,
enum PlusMinus  isign 
) const
pure virtual

◆ oddEvenNFlops()

template<typename T , typename P , typename Q >
virtual unsigned long Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::oddEvenNFlops ( void  ) const
inlinevirtual

◆ oddOddLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::oddOddLinOp ( multi1d< T > &  chi,
const multi1d< T > &  psi,
enum PlusMinus  isign 
) const
pure virtual

◆ oddOddNFlops()

template<typename T , typename P , typename Q >
virtual unsigned long Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::oddOddNFlops ( void  ) const
inlinevirtual

◆ operator()()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::operator() ( multi1d< T > &  chi,
const multi1d< T > &  psi,
enum PlusMinus  isign 
) const
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.

◆ size()

template<typename T , typename P , typename Q >
virtual int Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::size ( void  ) const
pure virtual

◆ subset()

template<typename T , typename P , typename Q >
const Subset& Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::subset ( void  ) const
inlinevirtual

◆ unprecLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperatorArray< T, P, Q >::unprecLinOp ( multi1d< T > &  chi,
const multi1d< T > &  psi,
enum PlusMinus  isign 
) const
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.


The documentation for this class was generated from the following file: