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

Even-odd preconditioned linear operator. More...

#include <seoprec_logdet_linop.h>

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

Public Member Functions

virtual ~SymEvenOddPrecLogDetLinearOperator ()
 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 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 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 unprecOddOddLinOp (T &chi, const T &psi, enum PlusMinus isign) const override=0
 Apply the the odd-odd 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 unprecEvenOddLinOp (T &chi, const T &psi, enum PlusMinus isign) const override=0
 Apply the 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 the odd-even block onto a source std::vector. More...
 
virtual void derivUnprecEvenEvenLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
 
virtual void derivUnprecOddOddLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
 
virtual void derivUnprecEvenOddLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const override=0
 
virtual void derivUnprecOddEvenLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const override=0
 
virtual void derivUnprecEvenEvenInvLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
 deriv of A^{-1} = - A^{-1} deriv(A) A^{-1} More...
 
virtual void derivUnprecOddOddInvLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
 deriv of A^{-1} = - A^{-1} deriv(A) A^{-1} More...
 
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...
 
virtual void derivLogDetEvenEvenLinOp (P &ds_u, enum PlusMinus isign) const =0
 Get the force from the EvenEven Trace Log. More...
 
virtual Double logDetEvenEvenLinOp (void) const =0
 Get the log det of the even even part. More...
 
virtual void derivLogDetOddOddLinOp (P &ds_u, enum PlusMinus isign) const =0
 Get the force from the OddOdd Trace Log. More...
 
virtual Double logDetOddOddLinOp (void) const =0
 Get the log det of the odd odd part. More...
 
- Public Member Functions inherited from Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >
virtual ~SymEvenOddPrecConstDetLinearOperator ()
 Virtual destructor to help with cleanup;. More...
 
- Public Member Functions inherited from Chroma::SymEvenOddPrecLinearOperator< T, P, Q >
virtual ~SymEvenOddPrecLinearOperator ()
 Virtual destructor to help with cleanup;. 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::SymEvenOddPrecLogDetLinearOperator< 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 132 of file seoprec_logdet_linop.h.

Constructor & Destructor Documentation

◆ ~SymEvenOddPrecLogDetLinearOperator()

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

Virtual destructor to help with cleanup;.

Definition at line 136 of file seoprec_logdet_linop.h.

Member Function Documentation

◆ derivEvenOddLinOp()

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

Apply the the even-odd block onto a source std::vector.

Reimplemented from Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >.

Definition at line 220 of file seoprec_logdet_linop.h.

References chi, Chroma::isign, Chroma::MINUS, Chroma::PLUS, psi, and tmp.

◆ derivLogDetEvenEvenLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::SymEvenOddPrecLogDetLinearOperator< T, P, Q >::derivLogDetEvenEvenLinOp ( P ds_u,
enum PlusMinus  isign 
) const
pure virtual

Get the force from the EvenEven Trace Log.

Implemented in Chroma::SymEvenOddPrecCloverLinOp.

◆ derivLogDetOddOddLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::SymEvenOddPrecLogDetLinearOperator< T, P, Q >::derivLogDetOddOddLinOp ( P ds_u,
enum PlusMinus  isign 
) const
pure virtual

Get the force from the OddOdd Trace Log.

Implemented in Chroma::SymEvenOddPrecCloverLinOp.

◆ derivOddEvenLinOp()

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

Apply the the odd-even block onto a source std::vector.

Reimplemented from Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >.

Definition at line 251 of file seoprec_logdet_linop.h.

References chi, Chroma::isign, Chroma::MINUS, Chroma::PLUS, psi, and tmp.

◆ derivUnprecEvenEvenInvLinOp()

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

deriv of A^{-1} = - A^{-1} deriv(A) A^{-1}

Definition at line 186 of file seoprec_logdet_linop.h.

References chi, Chroma::isign, Chroma::MINUS, mu, Nd, Chroma::PLUS, psi, and Chroma::zero.

◆ derivUnprecEvenEvenLinOp()

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

◆ derivUnprecEvenOddLinOp()

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

◆ derivUnprecOddEvenLinOp()

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

◆ derivUnprecOddOddInvLinOp()

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

deriv of A^{-1} = - A^{-1} deriv(A) A^{-1}

Definition at line 203 of file seoprec_logdet_linop.h.

References chi, Chroma::isign, Chroma::MINUS, mu, Nd, Chroma::PLUS, psi, and Chroma::zero.

◆ derivUnprecOddOddLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::SymEvenOddPrecLogDetLinearOperator< T, P, Q >::derivUnprecOddOddLinOp ( 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::SymEvenOddPrecLogDetLinearOperator< T, P, Q >::getFermBC ( ) const
pure virtual

Return the fermion BC object for this linear operator.

Implements Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >.

Implemented in Chroma::SymEvenOddPrecCloverLinOp.

◆ logDetEvenEvenLinOp()

template<typename T , typename P , typename Q >
virtual Double Chroma::SymEvenOddPrecLogDetLinearOperator< T, P, Q >::logDetEvenEvenLinOp ( void  ) const
pure virtual

Get the log det of the even even part.

Implemented in Chroma::SymEvenOddPrecCloverLinOp.

◆ logDetOddOddLinOp()

template<typename T , typename P , typename Q >
virtual Double Chroma::SymEvenOddPrecLogDetLinearOperator< T, P, Q >::logDetOddOddLinOp ( void  ) const
pure virtual

Get the log det of the odd odd part.

Implemented in Chroma::SymEvenOddPrecCloverLinOp.

◆ subset()

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

Only defined on the odd lattice.

Reimplemented from Chroma::SymEvenOddPrecLinearOperator< T, P, Q >.

Definition at line 139 of file seoprec_logdet_linop.h.

◆ unprecEvenEvenInvLinOp()

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

Apply the inverse of the even-even block onto a source std::vector.

Implements Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >.

Implemented in Chroma::SymEvenOddPrecCloverLinOp.

◆ unprecEvenEvenLinOp()

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

Apply the even-even block onto a source std::vector.

This does not need to be optimized

Implements Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >.

Implemented in Chroma::SymEvenOddPrecCloverLinOp.

◆ unprecEvenOddLinOp()

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

Apply the the even-odd block onto a source std::vector.

Implements Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >.

Implemented in Chroma::SymEvenOddPrecCloverLinOp.

◆ unprecOddEvenLinOp()

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

Apply the the odd-even block onto a source std::vector.

Implements Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >.

Implemented in Chroma::SymEvenOddPrecCloverLinOp.

◆ unprecOddOddInvLinOp()

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

Apply the inverse of the odd-odd block onto a source std::vector.

Implements Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >.

Implemented in Chroma::SymEvenOddPrecCloverLinOp.

◆ unprecOddOddLinOp()

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

Apply the the odd-odd block onto a source std::vector.

Implements Chroma::SymEvenOddPrecConstDetLinearOperator< T, P, Q >.

Implemented in Chroma::SymEvenOddPrecCloverLinOp.


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