CHROMA
two_flavor_monomial_w.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 
3 /*! @file
4  * @brief Two flavor Monomials - gauge action or fermion binlinear contributions for HMC
5  */
6 
7 #ifndef __two_flavor_monomial_w_h__
8 #define __two_flavor_monomial_w_h__
9 
18 
19 #include <typeinfo>
20 
21 namespace Chroma
22 {
23  //-------------------------------------------------------------------------------------------
24  //! Exact 2 degen flavor fermact monomial
25  /*! @ingroup monomial
26  *
27  * Exact 2 degen flavor fermact monomial. Preconditioning is not
28  * specified yet.
29  * Can supply a default dsdq and pseudoferm refresh algorithm
30  *
31  * CAVEAT: I assume there is only 1 pseudofermion field in the following
32  * so called TwoFlavorExact monomial.
33  */
34  template<typename P, typename Q, typename Phi>
36  {
37  public:
38  //! virtual destructor:
40 
41  //! Compute the total action
42  virtual Double S(const AbsFieldState<P,Q>& s) = 0;
43 
44  //! Compute dsdq for the system...
45  /*! Monomial of the form chi^dag*(M^dag*M)*chi */
46  virtual void dsdq(P& F, const AbsFieldState<P,Q>& s)
47  {
48  START_CODE();
49 
50  // Self Description/Encapsulation Rule
51  XMLWriter& xml_out = TheXMLLogWriter::Instance();
52  push(xml_out, "TwoFlavorExactWilsonTypeFermMonomial");
53 
54  /**** Identical code for unprec and even-odd prec case *****/
55 
56  // S_f chi^dag*(M^dag*M)^(-1)*chi
57  // Here, M is some operator.
58  //
59  // Need
60  // dS_f/dU = - psi^dag * [d(M^dag)*M + M^dag*dM] * psi, psi = (M^dag*M)^(-1)*chi
61  //
62  // In Balint's notation, the result is
63  // \dot{S} = -X^dag*\dot{M}^\dag*Y - Y^dag\dot{M}*X
64  // where
65  // X = (M^dag*M)^(-1)*chi Y = M*X = (M^dag)^(-1)*chi
66  // In Robert's notation, X -> psi .
67  //
69 
70  // Create a state for linop
72 
73  // Get system solver
75 
76  // Need way to get gauge state from AbsFieldState<P,Q>
78 
79  // Solution to linear system using chrono predictor.
80  Phi X;
81 
82  // CG Chrono predictor needs MdagM
83  //Handle< DiffLinearOperator<Phi,P,Q> > MdagM(FA.lMdagM(state));
84  // (getMDSolutionPredictor())(X, *MdagM, getPhi());
85 
86  // Solve MdagM X = eta
87  SystemSolverResults_t res = (*invMdagM)(X, getPhi(), getMDSolutionPredictor());
88  QDPIO::cout << "2Flav::invert, n_count = " << res.n_count << std::endl;
89 
90  // Insert std::vector -- Now done in the syssolver_mdagm
91  //(getMDSolutionPredictor()).newVector(X);
92 
93  Phi Y;
94 
95  (*M)(Y, X, PLUS);
96 
97  M->deriv(F, X, Y, MINUS);
98 
99  // fold M^dag into X^dag -> Y !!
100  P F_tmp;
101  M->deriv(F_tmp, Y, X, PLUS);
102  F += F_tmp;
103 
104  for(int mu=0; mu < F.size(); ++mu)
105  F[mu] *= Real(-1);
106 
107  // F now holds derivative with respect to possibly fat links
108  // now derive it with respect to the thin links if needs be
109  state->deriv(F);
110 
111  write(xml_out, "n_count", res.n_count);
112  monitorForces(xml_out, "Forces", F);
113 
114  pop(xml_out);
115 
116  END_CODE();
117  }
118 
119  //! Refresh pseudofermions
120  virtual void refreshInternalFields(const AbsFieldState<P,Q>& field_state)
121  {
122  START_CODE();
123 
124  // Heatbath all the fields
125 
126  // Get at the ferion action for piece i
128 
129  // Create a Connect State, apply fermionic boundaries
130  Handle< FermState<Phi,P,Q> > f_state(S_f.createState(field_state.getQ()));
131 
132  // Create a linear operator
133  Handle< DiffLinearOperator<Phi,P,Q> > M(S_f.linOp(f_state));
134 
135  Phi eta=zero;
136 
137  // Fill the eta field with gaussian noise
138  gaussian(eta, M->subset());
139 
140  // Account for fermion BC by modifying the proposed field
141  S_f.getFermBC().modifyF(eta);
142 
143  // Temporary: Move to correct normalisation
144  eta *= sqrt(0.5);
145 
146  // Now HIT IT with the ROCK!!!! (Or in this case M^{dagger})
147  (*M)(getPhi(), eta, MINUS);
148 
149  QDPIO::cout << "TwoFlavWilson4DMonomial: resetting Predictor after field refresh" << std::endl;
150  getMDSolutionPredictor().reset();
151 
152  END_CODE();
153  }
154 
155  //! Copy pseudofermions if any
156  virtual void setInternalFields(const Monomial<P,Q>& m)
157  {
158  START_CODE();
159 
160  try {
162 
163  getPhi() = fm.getPhi();
164  }
165  catch(std::bad_cast) {
166  QDPIO::cerr << "Failed to cast input Monomial to TwoFlavorExactWilsonTypeFermMonomial " << std::endl;
167  QDP_abort(1);
168  }
169 
170  END_CODE();
171  }
172 
173  //! Reset predictors
174  virtual void resetPredictors(void) {
175  getMDSolutionPredictor().reset();
176 
177  }
178 
179  protected:
180  //! Accessor for pseudofermion with Pf index i (read only)
181  virtual const Phi& getPhi(void) const = 0;
182 
183  //! mutator for pseudofermion with Pf index i
184  virtual Phi& getPhi(void) = 0;
185 
186  //! Get at fermion action
187  virtual const WilsonTypeFermAct<Phi,P,Q>& getFermAct(void) const = 0;
188 
189  //! Get inverter params
190  virtual const GroupXML_t& getInvParams(void) const = 0;
191 
192  //! Get the initial guess predictor
194  };
195 
196 
197  //-------------------------------------------------------------------------------------------
198  //! Exact 2 degen flavor unpreconditioned fermact monomial
199  /*! @ingroup monomial
200  *
201  * Exact 2 degen flavor unpreconditioned fermact monomial.
202  *
203  * CAVEAT: I assume there is only 1 pseudofermion field in the following
204  * so called TwoFlavorExact monomial.
205  */
206  template<typename P, typename Q, typename Phi>
208  {
209  public:
210  //! virtual destructor:
212 
213  //! Compute the total action
214  virtual Double S(const AbsFieldState<P,Q>& s)
215  {
216  START_CODE();
217 
218  // Self identification/encapsulation Rule
219  XMLWriter& xml_out = TheXMLLogWriter::Instance();
220  push(xml_out, "TwoFlavorExactUnprecWilsonTypeFermMonomial");
221 
222  // Grab the fermact
224 
225  // Make the state
227 
228  // Get system solver
230 
231  Phi X;
232 
233  // Energy calc doesnt use Chrono Predictor
234  X = zero;
235  QDPIO::cout << "TwoFlavWilson4DMonomial: resetting Predictor before energy calc solve" << std::endl;
237 
238  // Solve MdagM X = eta
239  SystemSolverResults_t res = (*invMdagM)(X, getPhi());
240  QDPIO::cout << "2Flav::invert, n_count = " << res.n_count << std::endl;
241 
242  // Action on the entire lattice
243  Double action = innerProductReal(getPhi(), X);
244 
245  write(xml_out, "n_count", res.n_count);
246  write(xml_out, "S", action);
247  pop(xml_out);
248 
249  END_CODE();
250 
251  return action;
252  }
253 
254 
255  protected:
256  //! Accessor for pseudofermion with Pf index i (read only)
257  virtual const Phi& getPhi(void) const = 0;
258 
259  //! mutator for pseudofermion with Pf index i
260  virtual Phi& getPhi(void) = 0;
261 
262  //! Get at fermion action
263  virtual const WilsonTypeFermAct<Phi,P,Q>& getFermAct(void) const = 0;
264 
265  //! Get inverter params
266  virtual const GroupXML_t& getInvParams(void) const = 0;
267 
268  //! Get at the chronological predcitor
270  };
271 
272 
273  //-------------------------------------------------------------------------------------------
274  //! Exact 2 degen flavor even-odd preconditioned fermact monomial
275  /*! @ingroup monomial
276  *
277  * Exact 2 degen flavor even-odd preconditioned fermact monomial.
278  * Can supply a default dsdq algorithm
279  */
280  template<typename P, typename Q, typename Phi, template <class,class,class> class EOFermActT,
281  template <class,class,class> class EOLinOpT>
283  {
284  public:
285  //! virtual destructor:
287 
288  //! Even even contribution (eg ln det Clover)
289  virtual Double S_even_even(const AbsFieldState<P,Q>& s) = 0;
290 
291  //! Compute the odd odd contribution (eg
293  {
294  START_CODE();
295 
296  XMLWriter& xml_out = TheXMLLogWriter::Instance();
297  push(xml_out, "S_odd_odd");
298 
299  const EOFermActT<Phi,P,Q>& FA = getFermAct();
300 
301  Handle< FermState<Phi,P,Q> > state = FA.createState(s.getQ());
302 
303  // Get system solver
304  Handle< MdagMSystemSolver<Phi> > invMdagM(FA.invMdagM(state, getInvParams()));
305 
306  Handle< EOLinOpT<Phi,P,Q> > M(FA.linOp(state));
307 
308  // Get the X fields
309  Phi X;
310 
311  // Action calc doesnt use chrono predictor use zero guess
312  X[ M->subset() ] = zero;
313 
314  // Energy calc doesnt use Chrono Predictor
315  QDPIO::cout << "TwoFlavWilson4DMonomial: resetting Predictor before energy calc solve" << std::endl;
317 
318  // Solve MdagM X = eta
319  SystemSolverResults_t res = (*invMdagM)(X, getPhi());
320  QDPIO::cout << "2Flav::invert, n_count = " << res.n_count << std::endl;
321 
322  // Action
323  Double action = innerProductReal(getPhi(), X, M->subset());
324 
325  write(xml_out, "n_count", res.n_count);
326  write(xml_out, "S_oo", action);
327  pop(xml_out);
328 
329  END_CODE();
330 
331  return action;
332  }
333 
334  //! Compute the total action
336  {
337  START_CODE();
338 
339  XMLWriter& xml_out=TheXMLLogWriter::Instance();
340  push(xml_out, "TwoFlavorExactEvenOddPrecWilsonTypeFermMonomial");
341 
342  Double action = this->S_even_even(s) + this->S_odd_odd(s);
343 
344  write(xml_out, "S", action);
345  pop(xml_out);
346 
347  END_CODE();
348 
349  return action;
350  }
351 
352  protected:
353  //! Get at fermion action
354  virtual const EOFermActT<Phi,P,Q>& getFermAct() const = 0;
355 
356  //! Get inverter params
357  virtual const GroupXML_t& getInvParams(void) const = 0;
358 
359  //! Accessor for pseudofermion with Pf index i (read only)
360  virtual const Phi& getPhi(void) const = 0;
361 
362  //! mutator for pseudofermion with Pf index i
363  virtual Phi& getPhi(void) = 0;
364 
366  };
367 
368  template<typename P, typename Q, typename Phi>
371 
372  template<typename P, typename Q, typename Phi>
375 
376  //------------------------------------------------------------------------
377  //! Exact 2 degen flavor even-odd preconditioned fermact monomial
378  /*! @ingroup monomial
379  *
380  * Exact 2 degen flavor even-odd preconditioned fermact monomial.
381  * Constand even even determinant so can supplyt
382  */
383  template<typename P, typename Q, typename Phi,
384  template<class,class,class> class EOFermActT,
385  template<class,class,class> class EOLinOpT>
387  public TwoFlavorExactEOPrecWilsonTypeFermMonomialT<P,Q,Phi,EOFermActT,EOLinOpT>
388  {
389  public:
390  //! virtual destructor:
392 
393  //! Even even contribution (eg For this kind of Monomial it is 0)
395  return Double(0);
396  }
397 
398 
399  // Inherit everything from Base Class
400  protected:
401  //! Get at fermion action
402  //! For now the prototype is the same as before -- wait until we
403  //! refactor these before making them EvenOddPrecConstDetWilsonType...
404  virtual const EOFermActT<Phi,P,Q>& getFermAct() const = 0;
405  };
406 
407  template<typename P, typename Q, typename Phi>
410 
411  template<typename P, typename Q, typename Phi>
414 
415  //------------------------------------------------------------------------
416  //! Exact 2 degen flavor even-odd preconditioned fermact monomial
417  /*! @ingroup monomial
418  *
419  * Exact 2 degen flavor even-odd preconditioned fermact monomial.
420  * Constand even even determinant so can supplyt
421  */
422  template<typename P, typename Q, typename Phi,
423  template<class,class,class> class EOFermActT,
424  template<class,class,class> class EOLinOpT>
426  : public TwoFlavorExactEOPrecWilsonTypeFermMonomialT<P,Q,Phi,EOFermActT,EOLinOpT>
427  {
428  public:
429  //! virtual destructor:
431 
432  //! Even even contribution
434  {
435  START_CODE();
436 
437  const EOFermActT<Phi,P,Q>& FA = getFermAct();
438  Handle< FermState<Phi,P,Q> > state = FA.createState(s.getQ());
439 
440  // Need way to get gauge state from AbsFieldState<P,Q>
441  Handle< EOLinOpT<Phi,P,Q> > M(FA.linOp(state));
442 
443  Double S_ee =(Double(-2)*M->logDetEvenEvenLinOp());
444  XMLWriter& xml_out = TheXMLLogWriter::Instance();
445  push(xml_out, "S_even_even");
446  write(xml_out, "S_ee", S_ee);
447  pop(xml_out);
448 
449  END_CODE();
450 
451  return S_ee;
452  }
453 
454  //! Compute the total action
456  {
457  START_CODE();
458 
459  XMLWriter& xml_out=TheXMLLogWriter::Instance();
460  push(xml_out, "TwoFlavorExactEvenOddPrecLogDetWilsonTypeFermMonomial");
461 
462  Double S_ee = this->S_even_even(s);
463 
464  Double S_oo = this->S_odd_odd(s);
465 
466  Double action = S_ee + S_oo;
467 
468  write(xml_out, "S", action);
469  pop(xml_out);
470 
471  END_CODE();
472 
473  return action;
474  }
475 
476  //! Compute dsdq for the system...
477  /*! Monomial of the form chi^dag*(M^dag*M)*chi + 2 TrLn A_ee */
478  virtual void dsdq(P& F, const AbsFieldState<P,Q>& s)
479  {
480  START_CODE();
481 
482  // Self Description/Encapsulation Rule
483  XMLWriter& xml_out = TheXMLLogWriter::Instance();
484  push(xml_out, "TwoFlavorExactEvenOddPrecLogDetWilsonTypeFermMonomial");
485 
486  /**** Identical code for unprec and even-odd prec case *****/
487 
488  // S_f chi^dag_{oo}*(M^dag*M)_{oo}^(-1)*chi_{oo} + 2Tr Ln M_{ee}
489  // Here, M is some operator.
490  //
491  // Need
492  // dS_f/dU = - psi^dag * [d(M^dag)*M + M^dag*dM] * psi
493  // + 2Tr [ M_{ee}^{-1} dM_{ee} ] , psi = (M^dag*M)^(-1)*chi
494  //
495 
496  // Create FermAct
497  const EOFermActT<Phi,P,Q>& FA = getFermAct();
498 
499  // Create a state for linop
500  Handle< FermState<Phi,P,Q> > state(FA.createState(s.getQ()));
501 
502  // Get system solver
503  Handle< MdagMSystemSolver<Phi> > invMdagM(FA.invMdagM(state, getInvParams()));
504 
505  //Create LinOp
506  Handle< EOLinOpT<Phi,P,Q> > M(FA.linOp(state));
507 
508  P F_tmp;
509 
510  // Do the force computation. deriv() in these linops refers only
511  // to the bit coming from the odd-odd bilinear -- this works in
512  // the normal way.
513  Phi X;
514 
515  // CG Chrono predictor needs MdagM
516  // Handle< DiffLinearOperator<Phi,P,Q> > MdagM(FA.lMdagM(state));
517  // (getMDSolutionPredictor())(X, *MdagM, getPhi());
518 
519  // Solve MdagM X = eta
520  SystemSolverResults_t res = (*invMdagM)(X, getPhi(),getMDSolutionPredictor());
521  QDPIO::cout << "2Flav::invert, n_count = " << res.n_count << std::endl;
522 
523  // Insert std::vector -- now done in syssolver
524  //(getMDSolutionPredictor()).newVector(X);
525 
526  Phi Y;
527  (*M)(Y, X, PLUS);
528 
529  M->deriv(F, X, Y, MINUS);
530 
531  // fold M^dag into X^dag -> Y !!
532 
533  M->deriv(F_tmp, Y, X, PLUS);
534  F += F_tmp;
535 
536  for(int mu=0; mu < F.size(); ++mu) {
537  F[mu] *= Real(-1);
538  }
539 
540 
541  M->derivLogDetEvenEvenLinOp(F_tmp, PLUS);
542  for(int mu =0; mu < Nd; mu++) {
543  F[mu] += Real(-2)*F_tmp[mu];
544  }
545 
546  state->deriv(F);
547  write(xml_out, "n_count", res.n_count);
548  monitorForces(xml_out, "Forces", F);
549  pop(xml_out);
550 
551  END_CODE();
552  }
553 
554  // Inherit everything from Base Class
555  protected:
556  //! Accessor for pseudofermion with Pf index i (read only)
557  virtual const Phi& getPhi(void) const = 0;
558 
559  //! mutator for pseudofermion with Pf index i
560  virtual Phi& getPhi(void) = 0;
561 
562  //! Get at fermion action
563  //! For now the prototype is the same as before -- wait until we
564  //! refactor these before making them EvenOddPrecConstDetWilsonType...
565  virtual const EOFermActT<Phi,P,Q>& getFermAct() const = 0;
566 
567  //! Get inverter params
568  virtual const GroupXML_t& getInvParams(void) const = 0;
569 
571  };
572 
573 template<typename P, typename Q, typename Phi>
577 
578 template<typename P, typename Q, typename Phi>
582 
583 
584 }
585 
586 
587 #endif
Monomials - gauge action or fermion binlinear contributions for HMC.
Chronological predictor for HMC.
Abstract interface for a Chronological Solution predictor.
Abstract field state.
Definition: field_state.h:27
virtual const Q & getQ(void) const =0
virtual DiffLinearOperator< T, Q, P > * linOp(Handle< FermState< T, P, Q > > state) const =0
Produce a linear operator for this action.
Even-odd preconditioned linear operator.
Even-odd preconditioned Wilson-like fermion action, specialised to clover like (gauge dependent diago...
Fermionic monomials (binlinears in fermion fields)
Definition: abs_monomial.h:243
virtual FermState< T, P, Q > * createState(const Q &q) const
Given links (coordinates Q) create the state needed for the linear operators.
Definition: fermact.h:59
Class for counted reference semantics.
Definition: handle.h:33
An abstract monomial class, for inexact algorithms.
Definition: abs_monomial.h:43
static T & Instance()
Definition: singleton.h:432
Even-odd preconditioned linear operator.
Symmetric even-odd preconditioned Wilson-like fermion action, specialised to clover like (gauge depen...
Exact 2 degen flavor even-odd preconditioned fermact monomial.
virtual const EOFermActT< Phi, P, Q > & getFermAct() const =0
Get at fermion action For now the prototype is the same as before – wait until we refactor these befo...
virtual Double S_even_even(const AbsFieldState< P, Q > &s)
Even even contribution (eg For this kind of Monomial it is 0)
Exact 2 degen flavor even-odd preconditioned fermact monomial.
virtual Double S_even_even(const AbsFieldState< P, Q > &s)
Even even contribution.
virtual void dsdq(P &F, const AbsFieldState< P, Q > &s)
Compute dsdq for the system...
virtual const GroupXML_t & getInvParams(void) const =0
Get inverter params.
virtual ~TwoFlavorExactEOPrecLogDetWilsonTypeFermMonomialT()
virtual destructor:
virtual const EOFermActT< Phi, P, Q > & getFermAct() const =0
Get at fermion action For now the prototype is the same as before – wait until we refactor these befo...
Double S(const AbsFieldState< P, Q > &s)
Compute the total action.
virtual AbsChronologicalPredictor4D< Phi > & getMDSolutionPredictor(void)=0
Get the initial guess predictor.
virtual const Phi & getPhi(void) const =0
Accessor for pseudofermion with Pf index i (read only)
virtual Phi & getPhi(void)=0
mutator for pseudofermion with Pf index i
Exact 2 degen flavor even-odd preconditioned fermact monomial.
virtual AbsChronologicalPredictor4D< Phi > & getMDSolutionPredictor(void)=0
Get the initial guess predictor.
virtual Phi & getPhi(void)=0
mutator for pseudofermion with Pf index i
virtual ~TwoFlavorExactEOPrecWilsonTypeFermMonomialT()
virtual destructor:
virtual Double S_odd_odd(const AbsFieldState< P, Q > &s)
Compute the odd odd contribution (eg.
virtual const EOFermActT< Phi, P, Q > & getFermAct() const =0
Get at fermion action.
Double S(const AbsFieldState< P, Q > &s)
Compute the total action.
virtual const GroupXML_t & getInvParams(void) const =0
Get inverter params.
virtual Double S_even_even(const AbsFieldState< P, Q > &s)=0
Even even contribution (eg ln det Clover)
virtual const Phi & getPhi(void) const =0
Accessor for pseudofermion with Pf index i (read only)
Exact 2 degen flavor unpreconditioned fermact monomial.
virtual Phi & getPhi(void)=0
mutator for pseudofermion with Pf index i
virtual const Phi & getPhi(void) const =0
Accessor for pseudofermion with Pf index i (read only)
virtual AbsChronologicalPredictor4D< Phi > & getMDSolutionPredictor(void)=0
Get at the chronological predcitor.
virtual const GroupXML_t & getInvParams(void) const =0
Get inverter params.
virtual const WilsonTypeFermAct< Phi, P, Q > & getFermAct(void) const =0
Get at fermion action.
virtual Double S(const AbsFieldState< P, Q > &s)
Compute the total action.
Exact 2 degen flavor fermact monomial.
virtual const Phi & getPhi(void) const =0
Accessor for pseudofermion with Pf index i (read only)
virtual void dsdq(P &F, const AbsFieldState< P, Q > &s)
Compute dsdq for the system...
virtual Phi & getPhi(void)=0
mutator for pseudofermion with Pf index i
virtual void resetPredictors(void)
Reset predictors.
virtual AbsChronologicalPredictor4D< Phi > & getMDSolutionPredictor(void)=0
Get the initial guess predictor.
virtual void refreshInternalFields(const AbsFieldState< P, Q > &field_state)
Refresh pseudofermions.
virtual const WilsonTypeFermAct< Phi, P, Q > & getFermAct(void) const =0
Get at fermion action.
virtual void setInternalFields(const Monomial< P, Q > &m)
Copy pseudofermions if any.
virtual const GroupXML_t & getInvParams(void) const =0
Get inverter params.
virtual Double S(const AbsFieldState< P, Q > &s)=0
Compute the total action.
Wilson-like fermion actions.
Definition: fermact.orig.h:344
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.
int mu
Definition: cool.cc:24
Even-odd const determinant Wilson-like fermact.
Even-odd const determinant Wilson-like fermact.
Helper function for calculating forces.
void write(XMLWriter &xml, const std::string &path, const AsqtadFermActParams &param)
Writer parameters.
void reset()
Reset the default gauge field state.
void monitorForces(XMLWriter &xml_out, const std::string &path, const multi1d< LatticeColorMatrix > &F)
Calculate and write out forces.
static int m[4]
Definition: make_seeds.cc:16
Nd
Definition: meslate.cc:74
multi1d< LatticeColorMatrix > P
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
gaussian(aux)
LinOpSysSolverMGProtoClover::Q Q
push(xml_out,"Condensates")
@ MINUS
Definition: chromabase.h:45
@ PLUS
Definition: chromabase.h:45
pop(xml_out)
LatticeFermion eta
Definition: mespbg5p_w.cc:37
START_CODE()
const WilsonTypeFermAct< multi1d< LatticeFermion > > Handle< const ConnectState > state
Definition: pbg5p_w.cc:28
const WilsonTypeFermAct< multi1d< LatticeFermion > > & S_f
Definition: pbg5p_w.cc:27
Double zero
Definition: invbicg.cc:106
multi1d< LatticeFermion > s(Ncb)
FloatingPoint< double > Double
Definition: gtest.h:7351
Symmetric even-odd const determinant Wilson-like fermact.
Symmetric even-odd const determinant Wilson-like fermact.
Hold group xml and type id.
Holds return info from SystemSolver call.
Definition: syssolver.h:17
multi1d< LatticeColorMatrix > P
Definition: t_clover.cc:13
Wilson-like fermion actions.
static INTERNAL_PRECISION F