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

Even-odd preconditioned linear operator. More...

#include <seoprec_constdet_linop.h>

Inheritance diagram for Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >:
Chroma::SymEvenOddPrecLinearOperator< T, P, Q > Chroma::DiffLinearOperator< T, P, Q > Chroma::LinearOperator< T > Chroma::SymEvenOddPrecLogDetLinearOperator< LatticeFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > Chroma::SymEvenOddPrecLogDetLinearOperator< T, P, Q > Chroma::SymEvenOddPrecCloverLinOp

Public Member Functions

virtual ~SymEvenOddPrecConstDetLinearOperator ()
 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 unprecEvenEvenInvLinOp (T &chi, const T &psi, enum PlusMinus isign) const override=0
 Apply the inverse of the even-even block onto a source std::vector. More...
 
virtual void unprecOddOddInvLinOp (T &chi, const T &psi, enum PlusMinus isign) const override=0
 Apply the inverse of the odd-odd block onto a source std::vector. More...
 
virtual void unprecEvenEvenLinOp (T &chi, const T &psi, enum PlusMinus isign) const override=0
 Apply the even-even block onto a source std::vector. More...
 
virtual void unprecOddOddLinOp (T &chi, const T &psi, enum PlusMinus isign) const override=0
 Apply the odd-odd block onto a source std::vector. More...
 
virtual void unprecEvenOddLinOp (T &chi, const T &psi, enum PlusMinus isign) const override=0
 Apply the even-odd block onto a source std::vector. More...
 
virtual void unprecOddEvenLinOp (T &chi, const T &psi, enum PlusMinus isign) const override=0
 Apply the odd-even block onto a source std::vector. More...
 
virtual void derivUnprecEvenOddLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
 
virtual void derivUnprecOddEvenLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
 
virtual void derivEvenOddLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const override
 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 override
 Apply the the odd-even block onto a source std::vector. More...
 
- Public Member Functions inherited from Chroma::SymEvenOddPrecLinearOperator< T, P, Q >
virtual ~SymEvenOddPrecLinearOperator ()
 Virtual destructor to help with cleanup;. More...
 
const Subset & subset () const
 Only defined on the odd lattice. More...
 
virtual void evenOddLinOp (T &chi, const T &psi, enum PlusMinus isign) const
 Apply the EvenOdd Linop for which we have a category default) More...
 
virtual void oddEvenLinOp (T &chi, const T &psi, enum PlusMinus isign) const
 
virtual void operator() (T &chi, const T &psi, enum PlusMinus isign) const
 Apply the operator onto a source std::vector. More...
 
virtual void jacobiOp (T &chi, const T &psi, enum PlusMinus isign) const
 Apply the Jacobi Operator. 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 deriv (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
 Deriv. More...
 
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::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...
 
virtual unsigned long nFlops () const
 

Detailed Description

template<typename T, typename P, typename Q>
class Chroma::SymEvenOddPrecConstDetLinearOperator< 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 factorizing as

 M_unprec = M_diag x M'


M_diag = [   A_E,E    0   ]
         [   0      A_O,O ]

         [ 1        M_E,O ]
M' =     [                ]
         [ M_O,E      1   ]


M_E,O = A^{-1}_E,E D_E,O
M_O,E = A^{-1}_O,O D_E,O

We then do a schur precondition of M'

as M' = L M R

L  =   [  1      0  ]
       [            ]
       [  M_O,E  1  ]



R  =   [  1    M_E,O ]
       [             ]
       [  0      1   ]


M  =   [   1                0     ]
       [                          ]
       [   0                S     ]

where S = 1 - ( M_O,E )( M_E,O )

L^{-1} = [ 1 0 ] [ ] [- M_O,E 1 ]

R^{-1} = [ 1 - M_E,O ] [ ] [ 0 1 ]

For props we need to solve:

  M  x' = L^{-1} (M_diag)^{-1} b

and then x = R^{-1} x' (backsubstitution)

for HMC we have det(L)=1 det(R)=1 det(M_diag) is handled by TraceLog/LogDet calls to clover and we pseudofermionize only the 'S' operators

Structure: capture D_oe, D_eo, A_ee, A_oo, A^{-1}_oo and A^{-1}_ee as unprecEvenOddLinOp unprecOddEvenLinOp unprecEvenEvenLinOp unprecOddOddLinOp unprecOddOddInvLinOp unprecEvenEvenInvLinOp

then we can write category defaults for:

then evenOddLinOp is M_eo = A^{-1}_ee D_eo or h.c. oddEvenLinOp is M_oe = A^{-1}_oo D_oe or h.c.

the so called Jacobi Operator: [ 1 M_eo ] [ M_oe 1 ]

the Schur Operator: S = 1 - M_oe M_eo

the Unprec Operator: diag( A_ee A_oo ) M_jacobi

We can also write category default for the forces in terms of derivEvenOddLinOp and derivOddEvenLinOp

Const-detness or log-det ness will depend on how the derivEvenOdd and derivOddEven operators are coded

Definition at line 126 of file seoprec_constdet_linop.h.

Constructor & Destructor Documentation

◆ ~SymEvenOddPrecConstDetLinearOperator()

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

Virtual destructor to help with cleanup;.

Definition at line 130 of file seoprec_constdet_linop.h.

Member Function Documentation

◆ derivEvenOddLinOp()

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

◆ derivOddEvenLinOp()

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

◆ derivUnprecEvenOddLinOp()

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

◆ derivUnprecOddEvenLinOp()

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

◆ getFermBC()

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

◆ unprecEvenEvenInvLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >::unprecEvenEvenInvLinOp ( T chi,
const T psi,
enum PlusMinus  isign 
) const
overridepure virtual

◆ unprecEvenEvenLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >::unprecEvenEvenLinOp ( T chi,
const T psi,
enum PlusMinus  isign 
) const
overridepure virtual

◆ unprecEvenOddLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >::unprecEvenOddLinOp ( T chi,
const T psi,
enum PlusMinus  isign 
) const
overridepure virtual

◆ unprecOddEvenLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >::unprecOddEvenLinOp ( T chi,
const T psi,
enum PlusMinus  isign 
) const
overridepure virtual

◆ unprecOddOddInvLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >::unprecOddOddInvLinOp ( T chi,
const T psi,
enum PlusMinus  isign 
) const
overridepure virtual

◆ unprecOddOddLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >::unprecOddOddLinOp ( T chi,
const T psi,
enum PlusMinus  isign 
) const
overridepure virtual

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