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

Even-odd preconditioned linear operator. More...

#include <eoprec_linop.h>

Inheritance diagram for Chroma::EvenOddPrecLinearOperator< T, P, Q >:
Chroma::DiffLinearOperator< T, P, Q > Chroma::LinearOperator< T > Chroma::EvenOddPrecConstDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > Chroma::EvenOddPrecLogDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > Chroma::EvenOddPrecConstDetLinearOperator< T, P, Q > Chroma::EvenOddPrecLogDetLinearOperator< T, P, Q > Chroma::EvenOddPrecParWilsonLinOp Chroma::EvenOddPrecTwmLinOpArray Chroma::EvenOddPrecWilsonLinOp Chroma::EvenOddPrecWilsonLinOp Chroma::EvenOddPrecCloverExtFieldLinOp Chroma::EvenOddPrecCloverLinOp Chroma::EvenOddPrecCloverOrbifoldLinOp Chroma::EvenOddPrecSLICLinOp Chroma::EvenOddPrecSLRCLinOp

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

Detailed Description

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

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.

Constructor & Destructor Documentation

◆ ~EvenOddPrecLinearOperator()

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

Virtual destructor to help with cleanup;.

Definition at line 95 of file eoprec_linop.h.

Member Function Documentation

◆ deriv()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperator< T, P, Q >::deriv ( P ds_u,
const T chi,
const T psi,
enum PlusMinus  isign 
) const
pure virtual

◆ derivEvenEvenLinOp()

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

◆ derivEvenOddLinOp()

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

◆ derivOddEvenLinOp()

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

◆ derivOddOddLinOp()

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

◆ derivUnprecLinOp()

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

Mainly intended for debugging

Definition at line 185 of file eoprec_linop.h.

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

◆ evenEvenInvLinOp()

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

◆ evenEvenInvNFlops()

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

Return flops performed by the evenEvenInvLinOp.

Definition at line 232 of file eoprec_linop.h.

◆ evenEvenLinOp()

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

◆ evenEvenNFlops()

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

Return flops performed by the evenEvenLinOp.

Definition at line 220 of file eoprec_linop.h.

◆ evenOddLinOp()

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

◆ evenOddNFlops()

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

Return flops performed by the evenOddLinOp.

Definition at line 223 of file eoprec_linop.h.

◆ getFermBC()

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

◆ nFlops()

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

◆ oddEvenLinOp()

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

◆ oddEvenNFlops()

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

Return flops performed by the oddEvenLinOp.

Definition at line 226 of file eoprec_linop.h.

◆ oddOddLinOp()

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

◆ oddOddNFlops()

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

Return flops performed by the oddOddLinOp.

Definition at line 229 of file eoprec_linop.h.

◆ operator()()

template<typename T , typename P , typename Q >
virtual void Chroma::EvenOddPrecLinearOperator< T, P, Q >::operator() ( T chi,
const T psi,
enum PlusMinus  isign 
) const
inlinevirtual

◆ subset()

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

◆ unprecLinOp()

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


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