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

Time preconditioned linear operator. More...

#include <tprec_logdet_linop.h>

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

Public Member Functions

virtual ~TimePrecLogDetLinearOperator ()
 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 derivTimeLinOp (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 derivSpaceLinOp (P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
 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
 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
 Apply the derivative of the UNPRECONDITIONED operator onto a source std::vector. More...
 
virtual void derivLogDetTimeLinOp (P &ds_u, enum PlusMinus isign) const
 Get the force from the Time Trace Log. More...
 
virtual Double logDetTimeLinOp (void) const =0
 Get the log det of the even even part. More...
 
- Public Member Functions inherited from Chroma::TimePrecLinearOperator< T, P, Q >
virtual ~TimePrecLinearOperator ()
 Virtual destructor to help with cleanup;. 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...
 
- 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::TimePrecLogDetLinearOperator< 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.

Here we assume D_t does depend on the gauge fields, and that we can exactly simulate the determinant without pseudofermion fields. We know det D_t and can write it in the action as exp( log det D_t ) = exp( Tr Ln D_t )

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

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

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

hence we have functions logDetTimeLinOp() and derivTimeLinOp() and derivLogDetTimeLinOp()

Definition at line 56 of file tprec_logdet_linop.h.

Constructor & Destructor Documentation

◆ ~TimePrecLogDetLinearOperator()

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

Virtual destructor to help with cleanup;.

Definition at line 60 of file tprec_logdet_linop.h.

Member Function Documentation

◆ deriv()

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

◆ derivLogDetTimeLinOp()

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

Get the force from the Time Trace Log.

Definition at line 164 of file tprec_logdet_linop.h.

◆ derivSpaceLinOp()

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

◆ derivTimeLinOp()

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

◆ derivUnprecLinOp()

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

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

Mainly intended for debugging

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

Definition at line 148 of file tprec_logdet_linop.h.

References Chroma::chi(), Chroma::TimePrecLogDetLinearOperator< T, P, Q >::derivSpaceLinOp(), Chroma::TimePrecLogDetLinearOperator< T, P, Q >::derivTimeLinOp(), Chroma::isign, and Chroma::psi.

◆ getFermBC()

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

Return the fermion BC object for this linear operator.

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

◆ logDetTimeLinOp()

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

Get the log det of the even even part.

◆ spaceLinOp()

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

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

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

Referenced by Chroma::TimePrecLogDetLinearOperator< T, P, Q >::deriv().

◆ subset()

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

Defined on the entire lattice.

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

Definition at line 63 of file tprec_logdet_linop.h.

◆ tDir()

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

The time direction.

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

◆ timeInvLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::TimePrecLogDetLinearOperator< 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.

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

Referenced by Chroma::TimePrecLogDetLinearOperator< T, P, Q >::deriv().

◆ timeLinOp()

template<typename T , typename P , typename Q >
virtual void Chroma::TimePrecLogDetLinearOperator< 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

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


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