CHROMA
|
Time preconditioned linear operator. More...
#include <tprec_logdet_linop.h>
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 |
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.
|
inlinevirtual |
Virtual destructor to help with cleanup;.
Definition at line 60 of file tprec_logdet_linop.h.
|
inlinevirtual |
Apply the derivative of the operator onto a source std::vector.
User should make sure deriv routines do a resize
Implements Chroma::TimePrecLinearOperator< T, P, Q >.
Definition at line 102 of file tprec_logdet_linop.h.
References Chroma::chi(), Chroma::TimePrecLogDetLinearOperator< T, P, Q >::derivSpaceLinOp(), Chroma::TimePrecLogDetLinearOperator< T, P, Q >::derivTimeLinOp(), Chroma::isign, Chroma::MINUS, Chroma::PLUS, Chroma::psi, Chroma::TimePrecLogDetLinearOperator< T, P, Q >::spaceLinOp(), Chroma::TimePrecLogDetLinearOperator< T, P, Q >::timeInvLinOp(), tmp2, and tmp3.
|
inlinevirtual |
Get the force from the Time Trace Log.
Definition at line 164 of file tprec_logdet_linop.h.
|
inlinevirtual |
Apply the space block onto a source std::vector.
Implements Chroma::TimePrecLinearOperator< T, P, Q >.
Definition at line 93 of file tprec_logdet_linop.h.
Referenced by Chroma::TimePrecLogDetLinearOperator< T, P, Q >::deriv(), and Chroma::TimePrecLogDetLinearOperator< T, P, Q >::derivUnprecLinOp().
|
inlinevirtual |
Apply the even-even block onto a source std::vector.
Implements Chroma::TimePrecLinearOperator< T, P, Q >.
Definition at line 85 of file tprec_logdet_linop.h.
Referenced by Chroma::TimePrecLogDetLinearOperator< T, P, Q >::deriv(), and Chroma::TimePrecLogDetLinearOperator< T, P, Q >::derivUnprecLinOp().
|
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.
|
pure virtual |
Return the fermion BC object for this linear operator.
Implements Chroma::TimePrecLinearOperator< T, P, Q >.
|
pure virtual |
Get the log det of the even even part.
|
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().
|
inlinevirtual |
Defined on the entire lattice.
Reimplemented from Chroma::TimePrecLinearOperator< T, P, Q >.
Definition at line 63 of file tprec_logdet_linop.h.
|
pure virtual |
The time direction.
Implements Chroma::TimePrecLinearOperator< T, P, Q >.
|
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().
|
pure virtual |
Apply the time block onto a source std::vector.
This does not need to be optimized
Implements Chroma::TimePrecLinearOperator< T, P, Q >.