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

Time preconditioned linear operator. More...

#include <tprec_linop.h>

Inheritance diagram for Chroma::TimePrecLinearOperator< T, P, Q >:
Chroma::DiffLinearOperator< T, P, Q > Chroma::LinearOperator< T > Chroma::TimePrecLogDetLinearOperator< T, P, Q >

Public Member Functions

virtual ~TimePrecLinearOperator ()
 Virtual destructor to help with cleanup;. More...
 
const Subset & subset () const
 Defined on the entire lattice. More...
 
virtual const FermBC< T, P, Q > & getFermBC () const =0
 Return the fermion BC object for this linear operator. More...
 
int tDir () const =0
 The time direction. More...
 
virtual void timeLinOp (T &chi, const T &psi, enum PlusMinus isign) const =0
 Apply the time block onto a source std::vector. More...
 
virtual void timeInvLinOp (T &chi, const T &psi, enum PlusMinus isign) const =0
 Apply the inverse of the time block onto a source std::vector. More...
 
virtual void spaceLinOp (T &chi, const T &psi, enum PlusMinus isign) const =0
 Apply the the space 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 derivTimeLinOp (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 derivSpaceLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
 Apply the space block onto a source std::vector. More...
 
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 void derivUnprecLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
 Apply the derivative of the UNPRECONDITIONED 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...
 
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...
 
virtual unsigned long nFlops () const
 

Detailed Description

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

Time preconditioned linear operator.

Support for time preconditioned linear operators Given a matrix M written in block form:

M = D_t + D_s

The preconditioning consists of multiplying by the inverse of the time operator

This class is used to implement the resulting linear operator

 M'     =  1 +  D_t^(-1)*D_s

 M'^dag =  1 +  D_s^dag * (D_t^(-1))^dag

The non-symmetrical nature of the daggered version means the two cases (no-dagger and dagger) must be handled separately. This is in contrast to the standard (4D) even-odd precond. case where the the daggered version has the same structure, except the dagger is pushed down into the individual pieces.

Definition at line 40 of file tprec_linop.h.

Constructor & Destructor Documentation

◆ ~TimePrecLinearOperator()

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

Virtual destructor to help with cleanup;.

Definition at line 44 of file tprec_linop.h.

Member Function Documentation

◆ deriv()

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

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

Implemented in Chroma::TimePrecLogDetLinearOperator< T, P, Q >.

◆ derivSpaceLinOp()

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

Apply the space block onto a source std::vector.

Implemented in Chroma::TimePrecLogDetLinearOperator< T, P, Q >.

◆ derivTimeLinOp()

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

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

Implemented in Chroma::TimePrecLogDetLinearOperator< T, P, Q >.

◆ derivUnprecLinOp()

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

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

Mainly intended for debugging

Implemented in Chroma::TimePrecLogDetLinearOperator< T, P, Q >.

◆ getFermBC()

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

Return the fermion BC object for this linear operator.

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

Implemented in Chroma::TimePrecLogDetLinearOperator< T, P, Q >.

◆ operator()()

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

◆ spaceLinOp()

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

◆ subset()

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

Defined on the entire lattice.

Implements Chroma::LinearOperator< T >.

Reimplemented in Chroma::TimePrecLogDetLinearOperator< T, P, Q >.

Definition at line 47 of file tprec_linop.h.

◆ tDir()

template<typename T , typename P , typename Q >
int Chroma::TimePrecLinearOperator< T, P, Q >::tDir ( ) const
pure virtual

The time direction.

Implemented in Chroma::TimePrecLogDetLinearOperator< T, P, Q >.

◆ timeInvLinOp()

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

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

Implemented in Chroma::TimePrecLogDetLinearOperator< T, P, Q >.

Referenced by Chroma::TimePrecLinearOperator< T, P, Q >::operator()().

◆ timeLinOp()

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

Apply the time block onto a source std::vector.

This does not need to be optimized

Implemented in Chroma::TimePrecLogDetLinearOperator< T, P, Q >.

Referenced by Chroma::TimePrecLinearOperator< T, P, Q >::unprecLinOp().

◆ unprecLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::TimePrecLinearOperator< 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 98 of file tprec_linop.h.

References Chroma::chi(), Chroma::isign, Chroma::psi, Chroma::TimePrecLinearOperator< T, P, Q >::spaceLinOp(), Chroma::TimePrecLinearOperator< T, P, Q >::timeLinOp(), and tmp2.


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