CHROMA
fermact.orig.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 
3 /*! @file
4  * @brief Class structure for fermion actions
5  */
6 
7 #ifndef __fermact_h__
8 #define __fermact_h__
9 
10 #include "chromabase.h"
11 #include "fermbc.h"
12 #include "state.h"
13 #include "create_state.h"
14 #include "linearop.h"
15 #include "prec_constdet_linop.h"
16 #include "prec_logdet_linop.h"
17 #include "lmdagm.h"
18 #include "eo_prec_linop.h"
19 #include "syssolver.h"
20 #include "io/xml_group_reader.h"
25 
26 namespace Chroma
27 {
28  //! Base class for quadratic matter actions (e.g., fermions)
29  /*! @ingroup actions
30  *
31  * Supports creation and application for quadratic actions.
32  * This is basically a foundry class with additional operations.
33  *
34  * The class holds info on the particulars of a bi-local action,
35  * but it DOES NOT hold gauge fields. A specific dirac-operator
36  * is a functional of the gauge fields, hence when a dirac-operator
37  * is needed, it is created.
38  *
39  * The FermState holds gauge fields and whatever auxilliary info
40  * is needed to create a specific dirac operator (linear operator)
41  * on some background gauge field.
42  *
43  * The FermBC is the type of boundary conditions used for this action
44  *
45  * The linop and lmdagm functions create a linear operator on a
46  * fixed FermState
47  *
48  * The qprop solves for the full linear system undoing all preconditioning.
49  * No direct functions are provided (or needed) to call a linear system
50  * solver - that is a stand-alone function in the generic programming sense.
51  *
52  */
53  template<typename T, typename P, typename Q>
54  class FermionAction
55  {
56  public:
57  //! Virtual destructor to help with cleanup;
58  virtual ~FermionAction() {}
59 
60  //! Given links (coordinates Q) create the state needed for the linear operators
61  virtual FermState<T,P,Q>* createState(const Q& q) const
62  {
63  return getCreateState()(q);
64  }
65 
66  //! Given links (coordinates Q) create a state with additional info held by the XMLReader
67  /*!
68  * THIS FUNCTION SHOULD DISAPPEAR.
69  * This function is only really used by the overlap operators to hand
70  * around the StateInfo stuff. We are moving to have this stuff live within
71  * the FermState
72  */
73  virtual FermState<T,P,Q>* createState(const Q& q,
74  XMLReader& reader,
75  const std::string& path) const
76  {
77  return createState(q);
78  }
79 
80  //! Return the fermion BC object for this action
81  virtual const FermBC<T,P,Q>& getFermBC() const
82  {
83  return getCreateState().getBC();
84  }
85 
86  //! Return the factory object that produces a state
87  /*!
88  * The user will supply the FermState in a derived class
89  *
90  * This method is public for the simple reason that
91  * a fermact might be nested, in which case the container would
92  * forward this function call to the children.
93  */
94  virtual const CreateFermState<T,P,Q>& getCreateState() const = 0;
95 
96  //! Return quark prop solver, solution of unpreconditioned system
98  const GroupXML_t& invParam) const = 0;
99 
100  //! Given a complete propagator as a source, this does all the inversions needed
101  /*!
102  * \param q_sol quark propagator ( Write )
103  * \param q_src source ( Read )
104  * \param xml_out diagnostic output ( Modify )
105  * \param state gauge connection state ( Read )
106  * \param invParam inverter parameters ( Read )
107  * \param quarkSpinType compute only a non-relativistic prop ( Read )
108  * \param ncg_had number of solver iterations ( Write )
109  */
110  virtual void quarkProp(typename PropTypeTraits<T>::Type_t& q_sol,
111  XMLWriter& xml_out,
112  const typename PropTypeTraits<T>::Type_t& q_src,
114  const GroupXML_t& invParam,
115  QuarkSpinType quarkSpinType,
116  int& ncg_had) const = 0;
117 
118  //! Given a complete propagator as a source, this does all the inversions needed
119  /*!
120  * Provides a default version
121  *
122  * \param q_sol quark propagator ( Write )
123  * \param q_src source ( Read )
124  * \param xml_out diagnostic output ( Modify )
125  * \param state gauge connection state ( Read )
126  * \param invParam inverter parameters ( Read )
127  * \param quarkSpinType compute only a non-relativistic prop ( Read )
128  * \param ncg_had number of solver iterations ( Write )
129  * \param t_src time slice of source ( Read )
130  * \param j_decay direction of decay ( Read )
131  * \param obsvP compute currents and residual mass ( Read )
132  * \param ncg_had number of solver iterations ( Write )
133  */
134  virtual void quarkProp(typename PropTypeTraits<T>::Type_t& q_sol,
135  XMLWriter& xml_out,
136  const typename PropTypeTraits<T>::Type_t& q_src,
137  int t_src, int j_decay,
139  const GroupXML_t& invParam,
140  QuarkSpinType quarkSpinType,
141  bool obsvP,
142  int& ncg_had) const
143  {
144  quarkProp(q_sol, xml_out, q_src, state, invParam, quarkSpinType, ncg_had);
145  }
146 
147  };
148 
149 
150  //-------------------------------------------------------------------------------------------
151  //! Base class for quadratic matter actions (e.g., fermions)
152  /*! @ingroup actions
153  *
154  * Supports creation and application for quadratic actions.
155  * This is basically a foundry class with additional operations.
156  *
157  * The class holds info on the particulars of a bi-local action,
158  * but it DOES NOT hold gauge fields. A specific dirac-operator
159  * is a functional of the gauge fields, hence when a dirac-operator
160  * is needed, it is created.
161  *
162  * The FermState<T,P,Q> holds gauge fields and whatever auxilliary info
163  * is needed to create a specific dirac operator (linear operator)
164  * on some background gauge field.
165  *
166  * The FermBC is the type of boundary conditions used for this action
167  *
168  * The linop and lmdagm functions create a linear operator on a
169  * fixed FermState
170  *
171  * The qprop solves for the full linear system undoing all preconditioning.
172  * No direct functions are provided (or needed) to call a linear system
173  * solver - that is a stand-alone function in the generic programming sense.
174  *
175  */
176  template<typename T, typename P, typename Q>
177  class FermAct4D : public FermionAction<T,P,Q>
178  {
179  public:
180  //! Virtual destructor to help with cleanup;
181  virtual ~FermAct4D() {}
182 
183  //! Produce a linear operator for this action
185 
186  //! Produce a linear operator M^dag.M for this action
188 
189  //! Return a linear operator solver for this action to solve M*psi=chi
191  const GroupXML_t& invParam) const = 0;
192 
193  //! Return a linear operator solver for this action to solve MdagM*psi=chi
195  const GroupXML_t& invParam) const = 0;
196 
197  //! Return a multi-shift linear operator solver for this action to solve (MdagM+shift)*psi=chi
199  const GroupXML_t& invParam) const = 0;
200 
201  //! Return quark prop solver, solution of unpreconditioned system
202  /*! Default implementation provided */
204  const GroupXML_t& invParam) const;
205  };
206 
207 
208  //-------------------------------------------------------------------------------------------
209  //! Base class for quadratic matter actions (e.g., fermions)
210  /*! @ingroup actions
211  *
212  * Supports creation and application for quadratic actions with derivatives
213  * This is basically a foundry class with additional operations.
214  */
215  template<typename T, typename P, typename Q>
216  class DiffFermAct4D : public FermAct4D<T,P,Q>
217  {
218  public:
219  //! Virtual destructor to help with cleanup;
220  virtual ~DiffFermAct4D() {}
221 
222  //! Produce a linear operator for this action
224 
225  //! Produce a linear operator M^dag.M for this action
227  };
228 
229 
230  //-------------------------------------------------------------------------------------------
231  //! Base class of quadratic matter actions (e.g., fermions) living in an extra dimension
232  /*! @ingroup actions
233  *
234  * Supports creation and application for quadratic actions, specialized
235  * to support arrays of matter fields
236  *
237  * The class holds info on the particulars of a bi-local action,
238  * but it DOES NOT hold gauge fields. A specific dirac-operator
239  * is a functional of the gauge fields, hence when a dirac-operator
240  * is needed, it is created.
241  *
242  * The FermState holds gauge fields and whatever auxilliary info
243  * is needed to create a specific dirac operator (linear operator)
244  * on some background gauge field.
245  *
246  * The FermBC is the type of boundary conditions used for this action
247  *
248  * The linop and lmdagm functions create a linear operator on a
249  * fixed FermState
250  *
251  * The qprop solves for the full linear system undoing all preconditioning.
252  * No direct functions are provided (or needed) to call a linear system
253  * solver - that is a stand-alone function in the generic programming sense.
254  *
255  */
256  template<typename T, typename P, typename Q>
257  class FermAct5D : public FermionAction<T,P,Q>
258  {
259  public:
260  //! Virtual destructor to help with cleanup;
261  virtual ~FermAct5D() {}
262 
263  //! Return the quark mass
264  virtual Real getQuarkMass() const = 0;
265 
266  //! Expected length of array index
267  virtual int size() const = 0;
268 
269  //! Produce a linear operator for this action
271 
272  //! Produce a linear operator M^dag.M for this action
274 
275  //! Produce a Pauli-Villars linear operator for this action
277 
278  //! Return a linear operator solver for this action to solve M*psi=chi
280  const GroupXML_t& invParam) const = 0;
281 
282  //! Return a linear operator solver for this action to solve MdagM*psi=chi
284  const GroupXML_t& invParam) const = 0;
285 
286  //! Return a linear operator solver for this action to solve PV*psi=chi
287  /*! Do we need this critter? */
289  const GroupXML_t& invParam) const = 0;
290 
291  //! Return a linear operator solver for this action to solve PV^dag*PV*psi=chi
292  /*! This is used in two-flavor molecdyn monomials */
294  const GroupXML_t& invParam) const = 0;
295 
296  //! Return a multi-shift linear operator solver for this action to solve (MdagM+shift)*psi=chi
298  const GroupXML_t& invParam) const = 0;
299 
300  //! Return a multi-shift linear operator solver for this action to solve (PV^dag*PV+shift)*psi=chi
302  const GroupXML_t& invParam) const = 0;
303 
304  //! Return quark prop solver, solution of unpreconditioned system
305  /*! Default implementation provided */
307  const GroupXML_t& invParam) const;
308  };
309 
310 
311  //-------------------------------------------------------------------------------------------
312  //! Base class of quadratic matter actions (e.g., fermions) living in an extra dimension
313  /*! @ingroup actions
314  *
315  * Supports creation and application for quadratic actions, specialized
316  * to support arrays of matter fields including derivatives
317  */
318  template<typename T, typename P, typename Q>
319  class DiffFermAct5D : public FermAct5D<T,P,Q>
320  {
321  public:
322  //! Virtual destructor to help with cleanup;
323  virtual ~DiffFermAct5D() {}
324 
325  //! Produce a linear operator for this action
327 
328  //! Produce a linear operator M^dag.M for this action
330 
331  //! Produce a Pauli-Villars linear operator for this action
333  };
334 
335 
336  //-------------------------------------------------------------------------------------------
337  //! Wilson-like fermion actions
338  /*! @ingroup actions
339  *
340  * Wilson-like fermion actions
341  */
342  template<typename T, typename P, typename Q>
343  class WilsonTypeFermAct : public DiffFermAct4D<T,P,Q>
344  {
345  public:
346  //! Virtual destructor to help with cleanup;
347  virtual ~WilsonTypeFermAct() {}
348 
349  //! Produce a linear operator M^dag.M for this action
350  /*! Default implementation */
352  {
353  return new DiffMdagMLinOp<T,P,Q>(this->linOp(state));
354  }
355 
356  //! Produce a hermitian version of the linear operator
358 
359  //! Return a linear operator solver for this action to solve M*psi=chi
360  /*! Default implementation */
362  const GroupXML_t& invParam) const;
363 
364  //! Return a linear operator solver for this action to solve MdagM*psi=chi
365  /*! Default implementation */
367  const GroupXML_t& invParam) const;
368 
369  //! Return a multi-shift linear operator solver for this action to solve (MdagM+shift)*psi=chi
371  const GroupXML_t& invParam) const;
372 
373  //! Given a complete propagator as a source, this does all the inversions needed
374  /*!
375  * Provides a default version
376  *
377  * \param q_sol quark propagator ( Write )
378  * \param q_src source ( Read )
379  * \param xml_out diagnostic output ( Modify )
380  * \param state gauge connection state ( Read )
381  * \param invParam inverter parameters ( Read )
382  * \param quarkSpinType compute only a non-relativistic prop ( Read )
383  * \param ncg_had number of solver iterations ( Write )
384  */
385  virtual void quarkProp(typename PropTypeTraits<T>::Type_t& q_sol,
386  XMLWriter& xml_out,
387  const typename PropTypeTraits<T>::Type_t& q_src,
389  const GroupXML_t& invParam,
390  QuarkSpinType quarkSpinType,
391  int& ncg_had) const;
392  };
393 
394 
395  //-------------------------------------------------------------------------------------------
396  //! Wilson-like fermion actions
397  /*! @ingroup actions
398  *
399  * Wilson-like fermion actions
400  */
401  template<typename T, typename P, typename Q>
402  class WilsonTypeFermAct5D : public DiffFermAct5D<T,P,Q>
403  {
404  public:
405  //! Virtual destructor to help with cleanup;
406  virtual ~WilsonTypeFermAct5D() {}
407 
408  //! Produce a linear operator M^dag.M for this action
409  /*! Default implementation */
411  {
412  return new DiffMdagMLinOpArray<T,P,Q>(this->linOp(state));
413  }
414 
415  //! Produce a hermitian version of the linear operator
417 
418  //! Return a linear operator solver for this action to solve M*psi=chi
419  /*! Default implementation provided */
421  const GroupXML_t& invParam) const;
422 
423  //! Return a linear operator solver for this action to solve MdagM*psi=chi
424  /*! Default implementation provided */
426  const GroupXML_t& invParam) const;
427 
428  //! Return a linear operator solver for this action to solve PV*psi=chi
429  /*!
430  * Default implementation provided
431  *
432  * Do we need this critter?
433  */
435  const GroupXML_t& invParam) const;
436 
437  //! Return a linear operator solver for this action to solve PV^dag*PV*psi=chi
438  /*! Default implementation provided */
440  const GroupXML_t& invParam) const;
441 
442  //! Return a multi-shift linear operator solver for this action to solve (MdagM+shift)*psi=chi
443  /*! Default implementation provided */
445  const GroupXML_t& invParam) const;
446 
447  //! Return a multi-shift linear operator solver for this action to solve (PV^dag*PV+shift)*psi=chi
448  /*! Default implementation provided */
450  const GroupXML_t& invParam) const;
451 
452  //! Produce an unpreconditioned linear operator projecting 5D to 4D (the inverse of qprop below)
454  const Real& m_q,
455  const GroupXML_t& invParam) const = 0;
456 
457  //! Produce a DeltaLs = 1-epsilon^2(H) operator
459  const GroupXML_t& invParam) const = 0;
460 
461  //! Given a complete propagator as a source, this does all the inversions needed
462  /*!
463  * Provides a default version
464  *
465  * \param q_sol quark propagator ( Write )
466  * \param q_src source ( Read )
467  * \param xml_out diagnostic output ( Modify )
468  * \param state gauge connection state ( Read )
469  * \param invParam inverter parameters ( Read )
470  * \param quarkSpinType compute only a non-relativistic prop ( Read )
471  * \param ncg_had number of solver iterations ( Write )
472  */
473  virtual void quarkProp(typename PropTypeTraits<T>::Type_t& q_sol,
474  XMLWriter& xml_out,
475  const typename PropTypeTraits<T>::Type_t& q_src,
477  const GroupXML_t& invParam,
478  QuarkSpinType quarkSpinType,
479  int& ncg_had) const;
480  };
481 
482 
483  //-------------------------------------------------------------------------------------------
484  //! Unpreconditioned Wilson-like fermion actions with derivatives
485  /*! @ingroup actions
486  *
487  * Unpreconditioned like Wilson-like fermion actions
488  */
489  template<typename T, typename P, typename Q>
491  {
492  public:
493  //! Virtual destructor to help with cleanup;
495 
496  //! Produce a linear operator for this action
498  };
499 
500 
501 
502  //! Even-odd preconditioned Wilson-like fermion actions including derivatives
503  /*! @ingroup actions
504  *
505  * Even-odd preconditioned like Wilson-like fermion actions
506  */
507  template<typename T, typename P, typename Q>
508  class EvenOddPrecWilsonTypeFermAct : public WilsonTypeFermAct<T,P,Q>
509  {
510  public:
511  //! Virtual destructor to help with cleanup;
513 
514  //! Override to produce an even-odd prec. linear operator for this action
515  /*! Covariant return rule - override base class function */
517 
518  //! Return quark prop solver, solution of unpreconditioned system
519  /*! Default implementation provided */
521  const GroupXML_t& invParam) const;
522  };
523 
524  //! Even-odd preconditioned Wilson-like fermion actions specialised to Wilson Like (gauge independent diagonal term) actions.
525  /*! @ingroup actions
526  *
527  * Even-odd preconditioned like Wilson-like fermion actions
528  */
529  template<typename T, typename P, typename Q>
531  {
532  public:
533  //! Virtual destructor to help with cleanup;
535 
536  //! Override to produce an even-odd prec. linear operator for this action
537  /*! Covariant return rule - override base class function */
539 
540  };
541 
542  //! Even-odd preconditioned Wilson-like fermion action, specialised to clover like (gauge dependent diagonal term with exactly known derivative) structure
543  /*! @ingroup actions
544  *
545  * Even-odd preconditioned like Wilson-like fermion actions
546  */
547  template<typename T, typename P, typename Q>
549  {
550  public:
551  //! Virtual destructor to help with cleanup;
553 
554  //! Override to produce an even-odd prec. linear operator for this action
555  /*! Covariant return rule - override base class function */
557 
558  };
559 
560 
561 
562  //-------------------------------------------------------------------------------------------
563  //! Unpreconditioned Wilson-like fermion actions in extra dims with derivatives
564  /*! @ingroup actions
565  *
566  * Unpreconditioned like Wilson-like fermion actions
567  * Here, use arrays of matter fields.
568  */
569  template<typename T, typename P, typename Q>
571  {
572  public:
573  //! Virtual destructor to help with cleanup;
575 
576  //! Produce a linear operator for this action
578 
579  //! Produce a Pauli-Villars linear operator for this action
581  };
582 
583 
584 
585  //! Even-odd preconditioned Wilson-like fermion actions including derivatives
586  /*! @ingroup actions
587  *
588  * Even-odd preconditioned like Wilson-like fermion actions
589  * Here, use arrays of matter fields.
590  */
591  template<typename T, typename P, typename Q>
593  {
594  public:
595  //! Virtual destructor to help with cleanup;
597 
598  //! Override to produce an even-odd prec. linear operator for this action
599  /*! Covariant return rule - override base class function */
601 
602  //! Override to produce an even-odd prec. Pauli-Villars linear operator for this action
603  /*! Covariant return rule - override base class function */
605 
606  //! Return quark prop solver, solution of unpreconditioned system
607  /*! Default implementation provided */
609  const GroupXML_t& invParam) const;
610  };
611 
612  //! Even-odd preconditioned Wilson-like fermion actions including derivatives
613  /*! @ingroup actions
614  *
615  * Even-odd preconditioned like Wilson-like fermion actions
616  * Here, use arrays of matter fields.
617  */
618  template<typename T, typename P, typename Q>
620  {
621  public:
622  //! Virtual destructor to help with cleanup;
624 
625  //! Override to produce an even-odd prec. linear operator for this action
626  /*! Covariant return rule - override base class function */
628 
629  //! Override to produce an even-odd prec. Pauli-Villars linear operator for this action
630  /*! Covariant return rule - override base class function */
632 
633  };
634 
635 
636  //-------------------------------------------------------------------------------------------
637  //! Staggered-like fermion actions
638  /*! @ingroup actions
639  *
640  * Staggered-like fermion actions
641  */
642  template<typename T, typename P, typename Q>
643  class StaggeredTypeFermAct : public DiffFermAct4D<T,P,Q>
644  {
645  public:
646  //! Virtual destructor to help with cleanup;
648 
649  //! Return the quark mass
650  virtual const Real getQuarkMass() const = 0;
651 
652  //! Return a linear operator solver for this action to solve M*psi=chi
653  /*! Default implementation provided */
655  const GroupXML_t& invParam) const;
656 
657  //! Return a linear operator solver for this action to solve MdagM*psi=chi
658  /*! Default implementation provided */
660  const GroupXML_t& invParam) const;
661 
662  //! Return a multi-shift linear operator solver for this action to solve (MdagM+shift)*psi=chi
664  const GroupXML_t& invParam) const;
665 
666  //! Given a complete propagator as a source, this does all the inversions needed
667  /*!
668  * Provides a default version
669  *
670  * \param q_sol quark propagator ( Write )
671  * \param q_src source ( Read )
672  * \param xml_out diagnostic output ( Modify )
673  * \param state gauge connection state ( Read )
674  * \param invParam inverter parameters ( Read )
675  * \param quarkSpinType compute only a non-relativistic prop ( Read )
676  * \param ncg_had number of solver iterations ( Write )
677  */
678  virtual void quarkProp(typename PropTypeTraits<T>::Type_t& q_sol,
679  XMLWriter& xml_out,
680  const typename PropTypeTraits<T>::Type_t& q_src,
682  const GroupXML_t& invParam,
683  QuarkSpinType quarkSpinType,
684  int& ncg_had) const;
685  };
686 
687 
688  //-------------------------------------------------------------------------------------------
689  //! Staggered-like fermion actions with derivatives
690  /*! @ingroup actions
691  *
692  * Staggered-like fermion actions
693  */
694  template<typename T, typename P, typename Q>
696  {
697  public:
698  //! Virtual destructor to help with cleanup;
700 
701  //! Override to produce an even-odd prec. linear operator for this action
702  /*! Covariant return rule - override base class function */
704  };
705 
706 
707  //! Even-odd preconditioned Staggered-like fermion actions
708  /*! @ingroup actions
709  *
710  * Even-odd preconditioned like Staggered-like fermion actions
711  */
712  template<typename T, typename P, typename Q>
714  {
715  public:
716  //! Virtual destructor to help with cleanup;
718 
719  //! Override to produce an even-odd prec. linear operator for this action
720  /*! Covariant return rule - override base class function */
722 
723  //! Return quark prop solver, solution of unpreconditioned system
724  /*! Default implementation provided */
726  const GroupXML_t& invParam) const;
727  };
728 
729 }
730 
731 
732 #endif
Primary include file for CHROMA library code.
Create a fermion connection state.
Definition: create_state.h:69
Base class for quadratic matter actions (e.g., fermions)
Definition: fermact.h:224
virtual ~DiffFermAct4D()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:220
virtual DiffLinearOperator< T, Q, P > * lMdagM(Handle< FermState< T, P, Q > > state) const =0
Produce a linear operator M^dag.M for this action.
virtual DiffLinearOperator< T, Q, P > * linOp(Handle< FermState< T, P, Q > > state) const =0
Produce a linear operator for this action.
Base class of quadratic matter actions (e.g., fermions) living in an extra dimension.
Definition: fermact.h:344
virtual DiffLinearOperatorArray< T, P, Q > * linOp(Handle< FermState< T, P, Q > > state) const =0
Produce a linear operator for this action.
virtual ~DiffFermAct5D()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:323
virtual DiffLinearOperatorArray< T, P, Q > * lMdagM(Handle< FermState< T, P, Q > > state) const =0
Produce a linear operator M^dag.M for this action.
virtual DiffLinearOperatorArray< T, P, Q > * linOpPV(Handle< FermState< T, P, Q > > state) const =0
Produce a Pauli-Villars linear operator for this action.
Differentiable Linear Operator.
Definition: linearop.h:150
Differentiable Linear Operator.
Definition: linearop.h:98
M^dag.M linear operator over arrays.
Definition: lmdagm.h:247
Differentiable M^dag.M linear operator.
Definition: lmdagm.h:160
Even odd Linear Operator (for staggered like things )
Definition: eo_linop.h:28
Even-odd preconditioned linear operator including derivatives for arrays.
Even-odd preconditioned linear operator.
Even-odd preconditioned Wilson-like fermion actions including derivatives.
virtual EvenOddPrecConstDetLinearOperatorArray< T, P, Q > * linOpPV(Handle< FermState< T, P, Q > > state) const =0
Override to produce an even-odd prec. Pauli-Villars linear operator for this action.
virtual EvenOddPrecConstDetLinearOperatorArray< T, P, Q > * linOp(Handle< FermState< T, P, Q > > state) const =0
Override to produce an even-odd prec. linear operator for this action.
virtual ~EvenOddPrecConstDetWilsonTypeFermAct5D()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:623
Even-odd preconditioned Wilson-like fermion actions specialised to Wilson Like (gauge independent dia...
virtual ~EvenOddPrecConstDetWilsonTypeFermAct()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:534
virtual EvenOddPrecConstDetLinearOperator< T, P, Q > * linOp(Handle< FermState< T, P, Q > > state) const =0
Override to produce an even-odd prec. linear operator for this action.
Even-odd preconditioned linear operator including derivatives for arrays.
Definition: eoprec_linop.h:312
Even-odd preconditioned linear operator.
Definition: eoprec_linop.h:92
Even-odd preconditioned linear operator.
Even-odd preconditioned Wilson-like fermion action, specialised to clover like (gauge dependent diago...
virtual EvenOddPrecLogDetLinearOperator< T, P, Q > * linOp(Handle< FermState< T, P, Q > > state) const =0
Override to produce an even-odd prec. linear operator for this action.
virtual ~EvenOddPrecLogDetWilsonTypeFermAct()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:552
Even-odd preconditioned Wilson-like fermion actions including derivatives.
virtual ~EvenOddPrecWilsonTypeFermAct5D()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:596
virtual EvenOddPrecLinearOperatorArray< T, P, Q > * linOp(Handle< FermState< T, P, Q > > state) const =0
Override to produce an even-odd prec. linear operator for this action.
virtual SystemSolverArray< T > * qpropT(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return quark prop solver, solution of unpreconditioned system.
virtual EvenOddPrecLinearOperatorArray< T, P, Q > * linOpPV(Handle< FermState< T, P, Q > > state) const =0
Override to produce an even-odd prec. Pauli-Villars linear operator for this action.
Even-odd preconditioned Wilson-like fermion actions including derivatives.
virtual ~EvenOddPrecWilsonTypeFermAct()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:512
virtual EvenOddPrecLinearOperator< T, P, Q > * linOp(Handle< FermState< T, P, Q > > state) const =0
Override to produce an even-odd prec. linear operator for this action.
virtual SystemSolver< T > * qprop(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return quark prop solver, solution of unpreconditioned system.
Even-odd preconditioned Staggered-like fermion actions.
Definition: fermact.orig.h:714
virtual SystemSolver< T > * qprop(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return quark prop solver, solution of unpreconditioned system.
virtual EvenOddLinearOperator< T, P, Q > * linOp(Handle< FermState< T, P, Q > > state) const =0
Override to produce an even-odd prec. linear operator for this action.
virtual ~EvenOddStaggeredTypeFermAct()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:717
Base class for quadratic matter actions (e.g., fermions)
Definition: fermact.h:176
virtual LinearOperator< T > * lMdagM(Handle< FermState< T, P, Q > > state) const =0
Produce a linear operator M^dag.M for this action.
virtual LinOpSystemSolver< T > * invLinOp(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const =0
Return a linear operator solver for this action to solve M*psi=chi.
virtual SystemSolver< T > * qprop(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return quark prop solver, solution of unpreconditioned system.
virtual MdagMMultiSystemSolver< T > * mInvMdagM(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const =0
Return a multi-shift linear operator solver for this action to solve (MdagM+shift)*psi=chi.
virtual MdagMSystemSolver< T > * invMdagM(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const =0
Return a linear operator solver for this action to solve MdagM*psi=chi.
virtual ~FermAct4D()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:181
virtual LinearOperator< T > * linOp(Handle< FermState< T, P, Q > > state) const =0
Produce a linear operator for this action.
Base class of quadratic matter actions (e.g., fermions) living in an extra dimension.
Definition: fermact.h:265
virtual MdagMSystemSolverArray< T > * invMdagM(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const =0
Return a linear operator solver for this action to solve MdagM*psi=chi.
virtual ~FermAct5D()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:261
virtual LinOpSystemSolverArray< T > * invLinOp(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const =0
Return a linear operator solver for this action to solve M*psi=chi.
virtual LinearOperatorArray< T > * linOpPV(Handle< FermState< T, P, Q > > state) const =0
Produce a Pauli-Villars linear operator for this action.
virtual LinOpSystemSolverArray< T > * invLinOpPV(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const =0
Return a linear operator solver for this action to solve PV*psi=chi.
virtual MdagMMultiSystemSolverArray< T > * mInvMdagM(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const =0
Return a multi-shift linear operator solver for this action to solve (MdagM+shift)*psi=chi.
virtual MdagMMultiSystemSolverArray< T > * mInvMdagMPV(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const =0
Return a multi-shift linear operator solver for this action to solve (PV^dag*PV+shift)*psi=chi.
virtual Real getQuarkMass() const =0
Return the quark mass.
virtual int size() const =0
Expected length of array index.
virtual LinearOperatorArray< T > * linOp(Handle< FermState< T, P, Q > > state) const =0
Produce a linear operator for this action.
virtual MdagMSystemSolverArray< T > * invMdagMPV(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const =0
Return a linear operator solver for this action to solve PV^dag*PV*psi=chi.
virtual LinearOperatorArray< T > * lMdagM(Handle< FermState< T, P, Q > > state) const =0
Produce a linear operator M^dag.M for this action.
virtual SystemSolverArray< T > * qpropT(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return quark prop solver, solution of unpreconditioned system.
Base class for all fermion action boundary conditions.
Definition: fermbc.h:20
Support class for fermion actions and linear operators.
Definition: state.h:94
Base class for quadratic matter actions (e.g., fermions)
Definition: fermact.h:53
virtual void quarkProp(typename PropTypeTraits< T >::Type_t &q_sol, XMLWriter &xml_out, const typename PropTypeTraits< T >::Type_t &q_src, Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam, QuarkSpinType quarkSpinType, int &ncg_had) const =0
Given a complete propagator as a source, this does all the inversions needed.
virtual void quarkProp(typename PropTypeTraits< T >::Type_t &q_sol, XMLWriter &xml_out, const typename PropTypeTraits< T >::Type_t &q_src, int t_src, int j_decay, Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam, QuarkSpinType quarkSpinType, bool obsvP, int &ncg_had) const
Given a complete propagator as a source, this does all the inversions needed.
Definition: fermact.orig.h:134
virtual FermState< T, P, Q > * createState(const Q &q, XMLReader &reader, const std::string &path) const
Given links (coordinates Q) create a state with additional info held by the XMLReader.
Definition: fermact.orig.h:73
virtual const FermBC< T, P, Q > & getFermBC() const
Return the fermion BC object for this action.
Definition: fermact.orig.h:81
virtual const CreateFermState< T, P, Q > & getCreateState() const =0
Return the factory object that produces a state.
virtual SystemSolver< T > * qprop(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const =0
Return quark prop solver, solution of unpreconditioned system.
virtual ~FermionAction()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:58
virtual FermState< T, P, Q > * createState(const Q &q) const
Given links (coordinates Q) create the state needed for the linear operators.
Definition: fermact.orig.h:61
Class for counted reference semantics.
Definition: handle.h:33
SystemSolver disambiguator.
SystemSolver disambiguator.
Linear Operator to arrays.
Definition: linearop.h:61
Linear Operator.
Definition: linearop.h:27
SystemSolver disambiguator.
SystemSolver disambiguator.
Staggered-like fermion actions.
Definition: fermact.orig.h:644
virtual LinOpSystemSolver< T > * invLinOp(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return a linear operator solver for this action to solve M*psi=chi.
virtual MdagMMultiSystemSolver< T > * mInvMdagM(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return a multi-shift linear operator solver for this action to solve (MdagM+shift)*psi=chi.
virtual MdagMSystemSolver< T > * invMdagM(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return a linear operator solver for this action to solve MdagM*psi=chi.
virtual void quarkProp(typename PropTypeTraits< T >::Type_t &q_sol, XMLWriter &xml_out, const typename PropTypeTraits< T >::Type_t &q_src, Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam, QuarkSpinType quarkSpinType, int &ncg_had) const
Given a complete propagator as a source, this does all the inversions needed.
virtual const Real getQuarkMass() const =0
Return the quark mass.
virtual ~StaggeredTypeFermAct()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:647
Linear system solvers of arrays.
Definition: syssolver.h:62
Linear system solvers.
Definition: syssolver.h:34
Unpreconditioned linear operator including derivatives.
Definition: linearop.h:203
Unpreconditioned linear operator including derivatives.
Definition: linearop.h:185
Staggered-like fermion actions with derivatives.
Definition: fermact.orig.h:696
virtual UnprecLinearOperator< T, P, Q > * linOp(Handle< FermState< T, P, Q > > state) const =0
Override to produce an even-odd prec. linear operator for this action.
virtual ~UnprecStaggeredTypeFermAct()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:699
Unpreconditioned Wilson-like fermion actions in extra dims with derivatives.
Definition: fermact.orig.h:571
virtual ~UnprecWilsonTypeFermAct5D()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:574
virtual UnprecLinearOperatorArray< T, P, Q > * linOpPV(Handle< FermState< T, P, Q > > state) const =0
Produce a Pauli-Villars linear operator for this action.
virtual UnprecLinearOperatorArray< T, P, Q > * linOp(Handle< FermState< T, P, Q > > state) const =0
Produce a linear operator for this action.
Unpreconditioned Wilson-like fermion actions with derivatives.
Definition: fermact.orig.h:491
virtual ~UnprecWilsonTypeFermAct()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:494
virtual UnprecLinearOperator< T, P, Q > * linOp(Handle< FermState< T, P, Q > > state) const =0
Produce a linear operator for this action.
Wilson-like fermion actions.
Definition: fermact.orig.h:403
virtual MdagMMultiSystemSolverArray< T > * mInvMdagM(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return a multi-shift linear operator solver for this action to solve (MdagM+shift)*psi=chi.
virtual LinearOperatorArray< T > * hermitianLinOp(Handle< FermState< T, P, Q > > state) const =0
Produce a hermitian version of the linear operator.
virtual LinearOperator< T > * DeltaLs(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const =0
Produce a DeltaLs = 1-epsilon^2(H) operator.
virtual LinOpSystemSolverArray< T > * invLinOpPV(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return a linear operator solver for this action to solve PV*psi=chi.
virtual void quarkProp(typename PropTypeTraits< T >::Type_t &q_sol, XMLWriter &xml_out, const typename PropTypeTraits< T >::Type_t &q_src, Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam, QuarkSpinType quarkSpinType, int &ncg_had) const
Given a complete propagator as a source, this does all the inversions needed.
virtual MdagMSystemSolverArray< T > * invMdagM(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return a linear operator solver for this action to solve MdagM*psi=chi.
virtual ~WilsonTypeFermAct5D()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:406
virtual MdagMSystemSolverArray< T > * invMdagMPV(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return a linear operator solver for this action to solve PV^dag*PV*psi=chi.
virtual LinearOperator< T > * linOp4D(Handle< FermState< T, P, Q > > state, const Real &m_q, const GroupXML_t &invParam) const =0
Produce an unpreconditioned linear operator projecting 5D to 4D (the inverse of qprop below)
virtual MdagMMultiSystemSolverArray< T > * mInvMdagMPV(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return a multi-shift linear operator solver for this action to solve (PV^dag*PV+shift)*psi=chi.
virtual LinOpSystemSolverArray< T > * invLinOp(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return a linear operator solver for this action to solve M*psi=chi.
virtual DiffLinearOperatorArray< T, P, Q > * lMdagM(Handle< FermState< T, P, Q > > state) const
Produce a linear operator M^dag.M for this action.
Definition: fermact.orig.h:410
Wilson-like fermion actions.
Definition: fermact.orig.h:344
virtual ~WilsonTypeFermAct()
Virtual destructor to help with cleanup;.
Definition: fermact.orig.h:347
virtual DiffLinearOperator< T, P, Q > * lMdagM(Handle< FermState< T, P, Q > > state) const
Produce a linear operator M^dag.M for this action.
Definition: fermact.orig.h:351
virtual MdagMMultiSystemSolver< T > * mInvMdagM(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return a multi-shift linear operator solver for this action to solve (MdagM+shift)*psi=chi.
virtual void quarkProp(typename PropTypeTraits< T >::Type_t &q_sol, XMLWriter &xml_out, const typename PropTypeTraits< T >::Type_t &q_src, Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam, QuarkSpinType quarkSpinType, int &ncg_had) const
Given a complete propagator as a source, this does all the inversions needed.
virtual MdagMSystemSolver< T > * invMdagM(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return a linear operator solver for this action to solve MdagM*psi=chi.
virtual LinOpSystemSolver< T > * invLinOp(Handle< FermState< T, P, Q > > state, const GroupXML_t &invParam) const
Return a linear operator solver for this action to solve M*psi=chi.
virtual LinearOperator< T > * hermitianLinOp(Handle< FermState< T, P, Q > > state) const =0
Produce a hermitian version of the linear operator.
Create a connection state.
Enum for what spin components of a quark prop to compute.
Fermion action boundary conditions.
QuarkSpinType
Quark spin type.
Linear Operators.
M^dag*M composition of a linear operator.
int j_decay
Definition: meslate.cc:22
Double q
Definition: mesq.cc:17
Disambiguator for multi-shift MdagM system solvers.
Handle< FermBC< LatticeStaggeredFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > > reader(XMLReader &xml_in, const std::string &path)
Helper function for the FermionAction readers.
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
LinOpSysSolverMGProtoClover::Q Q
const WilsonTypeFermAct< multi1d< LatticeFermion > > Handle< const ConnectState > state
Definition: pbg5p_w.cc:28
::std::string string
Definition: gtest.h:1979
Support class for fermion actions and linear operators.
Hold group xml and type id.
SystemSolver disambiguator.
Linear system solvers.
Disambiguator for LinOp system solvers.
Disambiguator for MdagM system solvers.
Read an XML group as a std::string.