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

Even-odd preconditioned linear operator. More...

#include <eoprec_logdet_linop.h>

Inheritance diagram for Chroma::EvenOddPrecLogDetLinearOperator< T, P, Q >:
Chroma::EvenOddPrecLinearOperator< T, P, Q > Chroma::DiffLinearOperator< T, P, Q > Chroma::LinearOperator< T >

Public Member Functions

virtual ~EvenOddPrecLogDetLinearOperator ()
 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 deriv (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
 Apply the derivative of the operator onto a source std::vector. 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...
 
virtual void derivEvenEvenLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
 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
 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
 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
 Apply the the odd-odd block onto a source std::vector. More...
 
virtual void derivEvenEvenLinOpMP (P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
 
virtual void derivEvenOddLinOpMP (P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
 
virtual void derivOddEvenLinOpMP (P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
 
virtual void derivOddOddLinOpMP (P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
 
virtual void derivLogDetEvenEvenLinOp (P &ds_u, enum PlusMinus isign) const
 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...
 
- Public Member Functions inherited from Chroma::EvenOddPrecLinearOperator< T, P, Q >
virtual ~EvenOddPrecLinearOperator ()
 Virtual destructor to help with cleanup;. 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 derivUnprecLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
 
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...
 
- 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::EvenOddPrecLogDetLinearOperator< 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} does depend on the gauge fields but we can exactly simulate the determinant without pseudofermion fields since we know det A_{ee} and can write it in the action as exp( log det A ) = exp( Tr Ln A )

Since we can explicitly evaluate Tr Ln A for the action, we can also evaluate the force contribution

d/dt ( Tr Ln A ) = Tr ( (d/dt)A A^{-1} )

and d/dt ( A^{-1} ) = A^{-1} [ (d/dt)A ] A^{-1}

hence we have functions logDetEvenEvenLinOp() and derivEvenEvenLinOp() and derivLogDetEvenEvenLinOp()

Definition at line 100 of file eoprec_logdet_linop.h.

Constructor & Destructor Documentation

◆ ~EvenOddPrecLogDetLinearOperator()

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

Virtual destructor to help with cleanup;.

Definition at line 104 of file eoprec_logdet_linop.h.

Member Function Documentation

◆ deriv()

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

Apply the derivative of the operator onto a source std::vector.

User should make sure deriv routines do a resize

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

Definition at line 114 of file eoprec_logdet_linop.h.

References chi, Chroma::isign, Chroma::MINUS, Chroma::PLUS, psi, tmp2, and tmp3.

◆ derivEvenEvenLinOp()

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

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

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

Reimplemented in Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, and Chroma::EvenOddPrecCloverLinOp.

Definition at line 210 of file eoprec_logdet_linop.h.

◆ derivEvenEvenLinOpMP()

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

Reimplemented in Chroma::EvenOddPrecCloverLinOp.

Definition at line 243 of file eoprec_logdet_linop.h.

References chi, i, Chroma::isign, Nd, psi, and Chroma::zero.

◆ derivEvenOddLinOp()

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

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

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

Reimplemented in Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, and Chroma::EvenOddPrecCloverLinOp.

Definition at line 218 of file eoprec_logdet_linop.h.

◆ derivEvenOddLinOpMP()

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

Definition at line 257 of file eoprec_logdet_linop.h.

References chi, i, Chroma::isign, Nd, psi, and Chroma::zero.

◆ derivLogDetEvenEvenLinOp()

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

Get the force from the EvenEven Trace Log.

Reimplemented in Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, and Chroma::EvenOddPrecCloverLinOp.

Definition at line 300 of file eoprec_logdet_linop.h.

◆ derivMultipole()

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

Apply the derivative of the operator onto a source std::vector.

User should make sure deriv routines do a resize

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

Definition at line 161 of file eoprec_logdet_linop.h.

References chi, i, Chroma::isign, Chroma::MINUS, Chroma::PLUS, psi, tmp2, and tmp3.

◆ derivOddEvenLinOp()

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

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

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

Reimplemented in Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, and Chroma::EvenOddPrecCloverLinOp.

Definition at line 226 of file eoprec_logdet_linop.h.

◆ derivOddEvenLinOpMP()

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

Definition at line 271 of file eoprec_logdet_linop.h.

References chi, i, Chroma::isign, Nd, psi, and Chroma::zero.

◆ derivOddOddLinOp()

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

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

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

Reimplemented in Chroma::EvenOddPrecSLRCLinOp, Chroma::EvenOddPrecSLICLinOp, and Chroma::EvenOddPrecCloverLinOp.

Definition at line 234 of file eoprec_logdet_linop.h.

◆ derivOddOddLinOpMP()

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

Reimplemented in Chroma::EvenOddPrecCloverLinOp.

Definition at line 285 of file eoprec_logdet_linop.h.

References chi, i, Chroma::isign, Nd, psi, and Chroma::zero.

◆ getFermBC()

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

◆ logDetEvenEvenLinOp()

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

◆ subset()

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

Only defined on the odd lattice.

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

Definition at line 107 of file eoprec_logdet_linop.h.


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