CHROMA
eoprec_linop.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 /*! @file
3  * @brief Base class for even-odd preconditioned 4D and 5D Linop
4  */
5 
6 #ifndef __eoprec_linop_h__
7 #define __eoprec_linop_h__
8 
9 #include "chromabase.h"
10 #include "linearop.h"
11 
12 using namespace QDP::Hints;
13 
14 namespace Chroma
15 {
16 
17  //----------------------------------------------------------------
18  //! Even-odd preconditioned linear operator
19  /*! @ingroup linop
20  *
21  * Support for even-odd preconditioned linear operators
22  * Given a matrix M written in block form:
23  *
24  * [ A D ]
25  * [ E,E E,O ]
26  * [ ]
27  * [ D A ]
28  * [ O,E O,O ]
29  *
30  * The preconditioning consists of using the triangular matrices
31  *
32  * [ 1 0 ]
33  * [ E,E E,O ]
34  * L = [ ]
35  * [ D A^(-1) 1 ]
36  * [ O,E E,E O,O ]
37  *
38  * and
39  *
40  * [ 1 A^{-1} D ]
41  * [ E,E EE E,O ]
42  * U = [ ]
43  * [ 0 1 ]
44  * [ O,E O,O ]
45  *
46  * The preconditioned matrix is formed from
47  *
48  * M' = L^-1 * M * U^-1
49  *
50  * where
51  *
52  * [ 1 0 ]
53  * [ E,E E,O ]
54  * L^(-1) = [ ]
55  * [ - D A^(-1) 1 ]
56  * [ O,E E,E O,O ]
57  *
58  * and
59  *
60  * [ 1 - A^(-1) D ]
61  * [ E,E E,E E,O ]
62  * U^(-1) = [ ]
63  * [ 0 1 ]
64  * [ O,E O,O ]
65  *
66  * Resulting in a new M
67  *
68  * [ A 0 ]
69  * [ E,E E,O ]
70  * [ ]
71  * [ 0 A - D A^(-1) D ]
72  * [ O,E O,O O,E E,E E,O ]
73  *
74  *
75  * This class is used to implement the resulting linear operator
76  *
77  * ~
78  * M = A(o,o) - D(o,e) . A^-1(e,e) . D(e,o)
79  *
80  * where A^{-1}_{ee} is independent of the gauge fields. This
81  * means that the det A_{ee} is an irrelevant constant and that
82  * the force term due to the A_{ee} part is zero.
83  *
84  * This structure suits most of the linear operators we use, and
85  * It simplifies the force term.
86  * By construction, the linear operator is ONLY defined on the odd subset
87  *
88  */
89 
90  template<typename T, typename P, typename Q>
92  {
93  public:
94  //! Virtual destructor to help with cleanup;
96 
97  //! Only defined on the odd lattice
98  const Subset& subset() const {return rb[1];}
99 
100  //! Return the fermion BC object for this linear operator
101  virtual const FermBC<T,P,Q>& getFermBC() const = 0;
102 
103  //! Apply the even-even block onto a source std::vector
104  /*! This does not need to be optimized */
105  virtual void evenEvenLinOp(T& chi, const T& psi,
106  enum PlusMinus isign) const = 0;
107 
108  //! Apply the inverse of the even-even block onto a source std::vector
109  virtual void evenEvenInvLinOp(T& chi, const T& psi,
110  enum PlusMinus isign) const = 0;
111 
112  //! Apply the the even-odd block onto a source std::vector
113  virtual void evenOddLinOp(T& chi, const T& psi,
114  enum PlusMinus isign) const = 0;
115 
116  //! Apply the the odd-even block onto a source std::vector
117  virtual void oddEvenLinOp(T& chi, const T& psi,
118  enum PlusMinus isign) const = 0;
119 
120  //! Apply the the odd-odd block onto a source std::vector
121  virtual void oddOddLinOp(T& chi, const T& psi,
122  enum PlusMinus isign) const = 0;
123 
124  //! Apply the operator onto a source std::vector
125  virtual void operator() (T& chi, const T& psi,
126  enum PlusMinus isign) const
127  {
128  T tmp1, tmp2; moveToFastMemoryHint(tmp1); moveToFastMemoryHint(tmp2);
129 
130  /* Tmp1 = D A^(-1) D Psi */
131  /* O O,E E,E E,O O */
132  evenOddLinOp(tmp1, psi, isign);
133  evenEvenInvLinOp(tmp2, tmp1, isign);
134  oddEvenLinOp(tmp1, tmp2, isign);
135 
136  /* Chi = A Psi - Tmp1 */
137  /* O O,O O O */
138  oddOddLinOp(chi, psi, isign);
139  chi[rb[1]] -= tmp1;
140 
141  getFermBC().modifyF(chi, rb[1]);
142  }
143 
144 
145  //! Apply the UNPRECONDITIONED operator onto a source std::vector
146  /*! Mainly intended for debugging */
147  virtual void unprecLinOp(T& chi, const T& psi,
148  enum PlusMinus isign) const
149  {
150  T tmp1, tmp2; moveToFastMemoryHint(tmp1); moveToFastMemoryHint(tmp2);
151 
152  /* Chi = A Psi + D Psi */
153  /* E E,E O E,O O */
154  evenEvenLinOp(tmp1, psi, isign);
155  evenOddLinOp(tmp2, psi, isign);
156  chi[rb[0]] = tmp1 + tmp2;
157 
158  /* Chi = A Psi - Tmp1 */
159  /* O O,O O O */
160  oddEvenLinOp(tmp1, psi, isign);
161  oddOddLinOp(tmp2, psi, isign);
162  chi[rb[1]] = tmp1 + tmp2;
163 
164  getFermBC().modifyF(chi);
165  }
166 
167 
168  //! Apply the even-even block onto a source std::vector
169  virtual void derivEvenEvenLinOp(P& ds_u, const T& chi, const T& psi,
170  enum PlusMinus isign) const = 0;
171 
172  //! Apply the the even-odd block onto a source std::vector
173  virtual void derivEvenOddLinOp(P& ds_u, const T& chi, const T& psi,
174  enum PlusMinus isign) const = 0;
175 
176  //! Apply the the odd-even block onto a source std::vector
177  virtual void derivOddEvenLinOp(P& ds_u, const T& chi, const T& psi,
178  enum PlusMinus isign) const = 0;
179 
180  //! Apply the the odd-odd block onto a source std::vector
181  virtual void derivOddOddLinOp(P& ds_u, const T& chi, const T& psi,
182  enum PlusMinus isign) const = 0;
183 
184  /*! Mainly intended for debugging */
185  virtual void derivUnprecLinOp(P& ds_u, const T& chi, const T& psi,
186  enum PlusMinus isign) const
187  {
188  T tmp1, tmp2; moveToFastMemoryHint(tmp1); moveToFastMemoryHint(tmp2);
189  P ds_tmp; // deriv routines should resize
190 
191  // ds_u = chi^dag * A'_ee * psi
192  derivEvenEvenLinOp(ds_u, chi, psi, isign);
193 
194  // ds_u += chi^dag * D'_eo * psi
195  derivEvenOddLinOp(ds_tmp, chi, psi, isign);
196  ds_u += ds_tmp;
197 
198  // ds_u += chi^dag * D'_oe * psi
199  derivOddEvenLinOp(ds_tmp, chi, psi, isign);
200  ds_u += ds_tmp;
201 
202  // ds_u += chi^dag * A'_oo * psi
203  derivOddOddLinOp(ds_tmp, chi, psi, isign);
204  ds_u += ds_tmp;
205 
206  getFermBC().zero(ds_u);
207  }
208 
209 
210  //! Apply the derivative of the operator onto a source std::vector
211  /*! User should make sure deriv routines do a resize.
212  * This function is left pure virtual - as derived
213  * functions need to override it
214  */
215  virtual void deriv(P& ds_u, const T& chi, const T& psi,
216  enum PlusMinus isign) const = 0;
217 
218 
219  //! Return flops performed by the evenEvenLinOp
220  virtual unsigned long evenEvenNFlops() const { return 0; }
221 
222  //! Return flops performed by the evenOddLinOp
223  virtual unsigned long evenOddNFlops() const { return 0; }
224 
225  //! Return flops performed by the oddEvenLinOp
226  virtual unsigned long oddEvenNFlops() const { return 0; }
227 
228  //! Return flops performed by the oddOddLinOp
229  virtual unsigned long oddOddNFlops() const { return 0; }
230 
231  //! Return flops performed by the evenEvenInvLinOp
232  virtual unsigned long evenEvenInvNFlops() const { return 0; }
233 
234  //! Return flops performed by the operator()
235  virtual unsigned long nFlops() const {
236  return 0;
237  }
238 
239  };
240 
241 
242  //----------------------------------------------------------------
243  //! Even-odd preconditioned linear operator including derivatives for arrays
244  /*! @ingroup linop
245  *
246  * Support for even-odd preconditioned linear operators with derivatives
247  *
248  * Given a matrix M written in block form:
249  *
250  * [ A D ]
251  * [ E,E E,O ]
252  * [ ]
253  * [ D A ]
254  * [ O,E O,O ]
255  *
256  * The preconditioning consists of using the triangular matrices
257  *
258  * [ 1 0 ]
259  * [ E,E E,O ]
260  * L = [ ]
261  * [ D A^(-1) 1 ]
262  * [ O,E E,E O,O ]
263  *
264  * and
265  *
266  * [ A D ]
267  * [ E,E E,O ]
268  * U = [ ]
269  * [ 0 1 ]
270  * [ O,E O,O ]
271  *
272  * The preconditioned matrix is formed from
273  *
274  * M' = L^-1 * M * U^-1
275  *
276  * where
277  *
278  * [ 1 0 ]
279  * [ E,E E,O ]
280  * L^(-1) = [ ]
281  * [ - D A^(-1) 1 ]
282  * [ O,E E,E O,O ]
283  *
284  * and
285  *
286  * [ A^(-1) - A^(-1) D ]
287  * [ E,E E,E E,O ]
288  * U^(-1) = [ ]
289  * [ 0 1 ]
290  * [ O,E O,O ]
291  *
292  * Resulting in a new M
293  *
294  * [ 1 0 ]
295  * [ E,E E,O ]
296  * [ ]
297  * [ 0 A - D A^(-1) D ]
298  * [ O,E O,O O,E E,E E,O ]
299  *
300  *
301  * This class is used to implement the resulting linear operator
302  *
303  * ~
304  * M = A(o,o) - D(o,e) . A^-1(e,e) . D(e,o)
305  *
306  * By construction, the linear operator is ONLY defined on the odd subset
307  *
308  */
309 
310  template<typename T, typename P, typename Q>
312  {
313  public:
314  //! Virtual destructor to help with cleanup;
316 
317  //! Only defined on the odd lattice
318  const Subset& subset() const {return rb[1];}
319 
320  //! Expected length of array index
321  virtual int size(void) const = 0;
322 
323  //! Return the fermion BC object for this linear operator
324  virtual const FermBC<T,P,Q>& getFermBC() const = 0;
325 
326  //! Apply the even-even block onto a source std::vector
327  /*! This does not need to be optimized */
328  virtual void evenEvenLinOp(multi1d<T>& chi, const multi1d<T>& psi,
329  enum PlusMinus isign) const = 0;
330 
331  //! Apply the inverse of the even-even block onto a source std::vector
332  virtual void evenEvenInvLinOp(multi1d<T>& chi, const multi1d<T>& psi,
333  enum PlusMinus isign) const = 0;
334 
335  //! Apply the the even-odd block onto a source std::vector
336  virtual void evenOddLinOp(multi1d<T>& chi, const multi1d<T>& psi,
337  enum PlusMinus isign) const = 0;
338 
339  //! Apply the the odd-even block onto a source std::vector
340  virtual void oddEvenLinOp(multi1d<T>& chi, const multi1d<T>& psi,
341  enum PlusMinus isign) const = 0;
342 
343  //! Apply the the odd-odd block onto a source std::vector
344  virtual void oddOddLinOp(multi1d<T>& chi, const multi1d<T>& psi,
345  enum PlusMinus isign) const = 0;
346 
347  //! Apply the operator onto a source std::vector
348  virtual void operator() (multi1d<T>& chi, const multi1d<T>& psi,
349  enum PlusMinus isign) const
350  {
351  multi1d<T> tmp1(size()); moveToFastMemoryHint(tmp1);
352  multi1d<T> tmp2(size()); moveToFastMemoryHint(tmp2);
353 
354  /* Tmp1 = D A^(-1) D Psi */
355  /* O O,E E,E E,O O */
356  evenOddLinOp(tmp1, psi, isign);
357  evenEvenInvLinOp(tmp2, tmp1, isign);
358  oddEvenLinOp(tmp1, tmp2, isign);
359 
360  /* Chi = A Psi - Tmp1 */
361  /* O O,O O O */
362  oddOddLinOp(chi, psi, isign);
363  for(int n=0; n < size(); ++n)
364  chi[n][rb[1]] -= tmp1[n];
365 
366  getFermBC().modifyF(chi, rb[1]);
367  }
368 
369 
370  //! Apply the UNPRECONDITIONED operator onto a source std::vector
371  /*! Mainly intended for debugging */
372  virtual void unprecLinOp(multi1d<T>& chi, const multi1d<T>& psi,
373  enum PlusMinus isign) const
374  {
375  multi1d<T> tmp1(size()); moveToFastMemoryHint(tmp1);
376  multi1d<T> tmp2(size()); moveToFastMemoryHint(tmp2);
377 
378  /* Chi = A Psi + D Psi */
379  /* E E,E O E,O O */
380  evenEvenLinOp(tmp1, psi, isign);
381  evenOddLinOp(tmp2, psi, isign);
382  for(int n=0; n < size(); ++n)
383  chi[n][rb[0]] = tmp1[n] + tmp2[n];
384 
385  /* Chi = D Psi + A Psi */
386  /* O O,E E O,O O */
387  oddEvenLinOp(tmp1, psi, isign);
388  oddOddLinOp(tmp2, psi, isign);
389  for(int n=0; n < size(); ++n)
390  chi[n][rb[1]] = tmp1[n] + tmp2[n];
391 
392  getFermBC().modifyF(chi);
393  }
394 
395 
396  //! Apply the even-even block onto a source std::vector
397  virtual void derivEvenEvenLinOp(P& ds_u, const multi1d<T>& chi, const multi1d<T>& psi,
398  enum PlusMinus isign) const = 0;
399 
400  //! Apply the the even-odd block onto a source std::vector
401  virtual void derivEvenOddLinOp(P& ds_u, const multi1d<T>& chi, const multi1d<T>& psi,
402  enum PlusMinus isign) const = 0;
403 
404  //! Apply the the odd-even block onto a source std::vector
405  virtual void derivOddEvenLinOp(P& ds_u, const multi1d<T>& chi, const multi1d<T>& psi,
406  enum PlusMinus isign) const = 0;
407 
408  //! Apply the the odd-odd block onto a source std::vector
409  virtual void derivOddOddLinOp(P& ds_u, const multi1d<T>& chi, const multi1d<T>& psi,
410  enum PlusMinus isign) const = 0;
411 
412  /*! Mainly intended for debugging */
413  virtual void derivUnprecLinOp(P& ds_u, const multi1d<T>& chi, const multi1d<T>& psi,
414  enum PlusMinus isign) const
415  {
416  T tmp1, tmp2; // if an array is used here, the space is not reserved
417  moveToFastMemoryHint(tmp1);
418  moveToFastMemoryHint(tmp2);
419 
420  P ds_tmp; // deriv routines should resize
421 
422  // ds_u = chi^dag * A'_ee * psi
423  derivEvenEvenLinOp(ds_u, chi, psi, isign);
424 
425  // ds_u += chi^dag * D'_eo * psi
426  derivEvenOddLinOp(ds_tmp, chi, psi, isign);
427  ds_u += ds_tmp;
428 
429  // ds_u += chi^dag * D'_oe * psi
430  derivOddEvenLinOp(ds_tmp, chi, psi, isign);
431  ds_u += ds_tmp;
432 
433  // ds_u += chi^dag * A'_oo * psi
434  derivOddOddLinOp(ds_tmp, chi, psi, isign);
435  ds_u += ds_tmp;
436 
437  getFermBC().zero(ds_u);
438  }
439 
440  //! Apply the operator onto a source std::vector
441  /*! User should make sure deriv routines do a resize.
442  * This function is left pure virtual - as derived
443  * functions need to override it
444  */
445  virtual void deriv(P& ds_u, const multi1d<T>& chi, const multi1d<T>& psi,
446  enum PlusMinus isign) const = 0;
447 
448  //! Apply the derivative of the UNPRECONDITIONED operator onto a source std::vector
449 
450  //! Return flops performed by the evenEvenLinOp
451  virtual unsigned long evenEvenNFlops() const { return 0; }
452 
453  //! Return flops performed by the evenOddLinOp
454  virtual unsigned long evenOddNFlops() const { return 0; }
455 
456  //! Return flops performed by the oddEvenLinOp
457  virtual unsigned long oddEvenNFlops() const { return 0; }
458 
459  //! Return flops performed by the oddOddLinOp
460  virtual unsigned long oddOddNFlops() const { return 0; }
461 
462  //! Return flops performed by the evenEvenInvLinOp
463  virtual unsigned long evenEvenInvNFlops() const { return 0; }
464 
465  //! Return flops performed by the operator()
466  virtual unsigned long nFlops() const {
467  return (this->oddOddNFlops()
468  +this->oddEvenNFlops()
469  +this->evenEvenInvNFlops()
470  +this->evenOddNFlops());
471  }
472 
473 
474  };
475 
476 
477 } // End namespace Chroma
478 
479 #endif
Primary include file for CHROMA library code.
Differentiable Linear Operator.
Definition: linearop.h:150
Differentiable Linear Operator.
Definition: linearop.h:98
Even-odd preconditioned linear operator including derivatives for arrays.
Definition: eoprec_linop.h:312
virtual void deriv(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the operator onto a source std::vector.
virtual unsigned long evenOddNFlops() const
Return flops performed by the evenOddLinOp.
Definition: eoprec_linop.h:454
const Subset & subset() const
Only defined on the odd lattice.
Definition: eoprec_linop.h:318
virtual void derivOddOddLinOp(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the the odd-odd block onto a source std::vector.
virtual int size(void) const =0
Expected length of array index.
virtual unsigned long evenEvenInvNFlops() const
Return flops performed by the evenEvenInvLinOp.
Definition: eoprec_linop.h:463
virtual void derivUnprecLinOp(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
Definition: eoprec_linop.h:413
virtual unsigned long oddEvenNFlops() const
Return flops performed by the oddEvenLinOp.
Definition: eoprec_linop.h:457
virtual unsigned long nFlops() const
Return flops performed by the operator()
Definition: eoprec_linop.h:466
virtual void derivOddEvenLinOp(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the the odd-even block onto a source std::vector.
virtual unsigned long evenEvenNFlops() const
Apply the derivative of the UNPRECONDITIONED operator onto a source std::vector.
Definition: eoprec_linop.h:451
virtual void evenOddLinOp(multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the the even-odd block onto a source std::vector.
virtual const FermBC< T, P, Q > & getFermBC() const =0
Return the fermion BC object for this linear operator.
virtual void oddEvenLinOp(multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the the odd-even block onto a source std::vector.
virtual void derivEvenOddLinOp(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the the even-odd block onto a source std::vector.
virtual void unprecLinOp(multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const
Apply the UNPRECONDITIONED operator onto a source std::vector.
Definition: eoprec_linop.h:372
virtual void derivEvenEvenLinOp(P &ds_u, const multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the even-even block onto a source std::vector.
virtual void evenEvenLinOp(multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the even-even block onto a source std::vector.
virtual void oddOddLinOp(multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the the odd-odd block onto a source std::vector.
virtual ~EvenOddPrecLinearOperatorArray()
Virtual destructor to help with cleanup;.
Definition: eoprec_linop.h:315
virtual void evenEvenInvLinOp(multi1d< T > &chi, const multi1d< T > &psi, enum PlusMinus isign) const =0
Apply the inverse of the even-even block onto a source std::vector.
virtual unsigned long oddOddNFlops() const
Return flops performed by the oddOddLinOp.
Definition: eoprec_linop.h:460
Even-odd preconditioned linear operator.
Definition: eoprec_linop.h:92
virtual void derivOddOddLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the odd-odd block onto a source std::vector.
virtual void oddOddLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the odd-odd block onto a source std::vector.
virtual unsigned long nFlops() const
Return flops performed by the operator()
Definition: eoprec_linop.h:235
virtual unsigned long evenEvenInvNFlops() const
Return flops performed by the evenEvenInvLinOp.
Definition: eoprec_linop.h:232
virtual void unprecLinOp(T &chi, const T &psi, enum PlusMinus isign) const
Apply the UNPRECONDITIONED operator onto a source std::vector.
Definition: eoprec_linop.h:147
virtual void oddEvenLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the odd-even block onto a source std::vector.
virtual unsigned long oddEvenNFlops() const
Return flops performed by the oddEvenLinOp.
Definition: eoprec_linop.h:226
virtual void evenOddLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the even-odd block onto a source std::vector.
virtual void evenEvenLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the even-even block onto a source std::vector.
virtual unsigned long evenOddNFlops() const
Return flops performed by the evenOddLinOp.
Definition: eoprec_linop.h:223
virtual void derivOddEvenLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the odd-even block onto a source std::vector.
virtual void derivUnprecLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const
Definition: eoprec_linop.h:185
virtual const FermBC< T, P, Q > & getFermBC() const =0
Return the fermion BC object for this linear operator.
virtual void derivEvenOddLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the the even-odd block onto a source std::vector.
virtual void derivEvenEvenLinOp(P &ds_u, const T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the even-even block onto a source std::vector.
virtual ~EvenOddPrecLinearOperator()
Virtual destructor to help with cleanup;.
Definition: eoprec_linop.h:95
const Subset & subset() const
Only defined on the odd lattice.
Definition: eoprec_linop.h:98
virtual unsigned long evenEvenNFlops() const
Return flops performed by the evenEvenLinOp.
Definition: eoprec_linop.h:220
virtual void evenEvenInvLinOp(T &chi, const T &psi, enum PlusMinus isign) const =0
Apply the inverse of the even-even block onto a source std::vector.
virtual unsigned long oddOddNFlops() const
Return flops performed by the oddOddLinOp.
Definition: eoprec_linop.h:229
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.
Base class for all fermion action boundary conditions.
Definition: fermbc.h:20
unsigned n
Definition: ldumul_w.cc:36
Linear Operators.
Double tmp2
Definition: mesq.cc:30
multi1d< Hadron2PtContraction_t > operator()(const multi1d< LatticeColorMatrix > &u)
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
LinOpSysSolverMGProtoClover::T T
chi
Definition: pade_trln_w.cc:24
psi
Definition: pade_trln_w.cc:191
multi1d< LatticeColorMatrix > P
Definition: t_clover.cc:13