27 int main(
int argc,
char **argv)
34 QDPIO::cout <<
"linkage=" <<
linkage_hack() << std::endl;
37 multi1d<int> nrow(
Nd);
38 for(
int i=0;
i <
Nd-1;
i++) {
44 Layout::setLattSize(nrow);
47 QDPIO::cout <<
"t_temp_prec" << std::endl;
51 multi1d<LatticeColorMatrix>
u(
Nd);
52 XMLReader gauge_file_xml, gauge_xml;
59 push(xml_out,
"t_temp_prec");
64 MesPlq(xml_out,
"Observables",
u);
72 multi1d<int> boundary(
Nd);
81 XMLReader xml_in(
"./t_temp_prec.ini.xml");
84 read(xml_in,
"/tempPrec/UnprecFermAct/FermAct", fermact);
85 read(xml_in,
"/tempPrec/PrecFermAct/FermAct", prec_fermact);
86 read(xml_in,
"/tempPrec/ILUPrecFermAct/FermAct", ilu_fermact);
88 typedef LatticeFermion
T;
89 typedef multi1d<LatticeColorMatrix>
P;
90 typedef multi1d<LatticeColorMatrix>
Q;
97 "/tempPrec/UnprecFermAct") );
104 "/tempPrec/PrecFermAct") );
106 UnprecSpaceCentralPrecTimeWilsonFermAct& S_unprec_s_cprec_t =
107 dynamic_cast< UnprecSpaceCentralPrecTimeWilsonFermAct&
>(*S_prec);
113 "/tempPrec/ILUPrecFermAct") );
125 UnprecSCprecTWilsonLinOp& D_temp_prec =
dynamic_cast<UnprecSCprecTWilsonLinOp&
>(*D_temp_prec_handle);
131 ILUPrecSCprecTWilsonLinOp& D_temp_prec2 =
dynamic_cast< ILUPrecSCprecTWilsonLinOp&
>(*D_tprec2_handle);
134 LatticeFermion psi1, psi2, tmp1,
tmp2;
141 D_temp_prec.getFermBC().modifyF(
chi);
144 tmp1 = Gamma(15)*
chi;
145 D_temp_prec.invCRightLinOp(
tmp2, tmp1,
PLUS);
146 psi1 = Gamma(15)*
tmp2;
149 D_temp_prec.invCLeftLinOp(psi2,
chi,
MINUS);
151 QDPIO::cout <<
" Gamma5_1 = " << sqrt( norm2(diff) / norm2(psi1) ) << std::endl;
156 tmp1 = Gamma(15)*
chi;
157 D_temp_prec.invCLeftLinOp(
tmp2, tmp1,
PLUS);
158 psi1 = Gamma(15)*
tmp2;
161 D_temp_prec.invCRightLinOp(psi2,
chi,
MINUS);
163 QDPIO::cout <<
" Gamma5_2 = " << sqrt( norm2(diff) / norm2(psi1) ) << std::endl;
170 D_temp_prec.invCRightLinOp(tmp1,
chi,
PLUS);
171 D_temp_prec.invCLeftLinOp(
tmp2, tmp1,
PLUS);
172 D_temp_prec.spaceLinOp(psi2,
chi,
PLUS);
176 QDPIO::cout <<
" D_1 + = " << sqrt( norm2(diff)/norm2(psi1) ) << std::endl;
184 D_temp_prec.invCLeftLinOp(tmp1,
chi,
MINUS);
185 D_temp_prec.invCRightLinOp(
tmp2, tmp1,
MINUS);
186 D_temp_prec.spaceLinOp(psi2,
chi,
MINUS);
190 QDPIO::cout <<
" D_1 - = " << sqrt( norm2(diff)/norm2(psi1) ) << std::endl;
193 multi1d<LatticeColorMatrix> u_2(1);
194 multi1d<LatticeColorMatrix> u_inv(1);
198 PScalar<PColorMatrix< RComplex<REAL>, 3> > munit;
199 munit = Real(1).elem();
205 munit = Real(1).elem();
206 for(
int site=all.start(); site <= all.end(); site++) {
207 u_2[0].elem(site) += munit;
208 D_temp_prec.invert3by3( u_inv[0].elem(site), u_2[0].elem(site) );
211 LatticeColorMatrix identityP = u_2[0]*u_inv[0];
212 LatticeColorMatrix ident;
213 for(
int site=all.start(); site <= all.end(); site++) {
214 identityP.elem(site) -= munit;
215 ident.elem(site) = munit;
218 QDPIO::cout <<
"|| I - u_2*inv ||/ || 1 || = " << sqrt( norm2( identityP ) / norm2(ident) ) << std::endl;
224 LatticeHalfFermion chi_half;
225 LatticeHalfFermion psi_half;
226 LatticeHalfFermion chi2_half;
227 LatticeHalfFermion diff_half;
230 D_temp_prec.TOp(psi_half, chi_half,
PLUS);
231 D_temp_prec.invTOp(chi2_half, psi_half,
PLUS);
233 diff_half = chi2_half - chi_half;
234 QDPIO::cout <<
" || diff || / || chi_half || = " << sqrt(norm2(diff_half) / norm2(chi_half)) << std::endl;
237 D_temp_prec.TOp(psi_half, chi_half,
MINUS);
238 D_temp_prec.invTOp(chi2_half, psi_half,
MINUS);
240 diff_half = chi2_half - chi_half;
241 QDPIO::cout <<
" || diff || / || chi_half || = " << sqrt(norm2(diff_half) / norm2(chi_half)) << std::endl;
246 D_temp_prec.getFermBC().modifyF(
chi);
248 D_temp_prec.cLeftLinOp(psi1,
chi,
PLUS);
249 D_temp_prec.invCLeftLinOp(tmp1, psi1,
PLUS);
252 QDPIO::cout <<
" CL CL_INV + = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
255 D_temp_prec.cLeftLinOp(psi1,
chi,
MINUS);
256 D_temp_prec.invCLeftLinOp(tmp1, psi1,
MINUS);
259 QDPIO::cout <<
" CL CL_INV - = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
261 D_temp_prec.invCLeftLinOp(psi1,
chi,
PLUS);
262 D_temp_prec.cLeftLinOp(tmp1, psi1,
PLUS);
265 QDPIO::cout <<
" CL_INV CL + = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
267 D_temp_prec.invCLeftLinOp(psi1,
chi,
MINUS);
268 D_temp_prec.cLeftLinOp(tmp1, psi1,
MINUS);
271 QDPIO::cout <<
" CL_INV CL - = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
276 D_temp_prec.getFermBC().modifyF(
chi);
277 D_temp_prec.cRightLinOp(psi1,
chi,
PLUS);
278 D_temp_prec.invCRightLinOp(tmp1, psi1,
PLUS);
281 QDPIO::cout <<
" CR CR_INV + = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
283 D_temp_prec.cRightLinOp(psi1,
chi,
MINUS);
284 D_temp_prec.invCRightLinOp(tmp1, psi1,
MINUS);
287 QDPIO::cout <<
" CR CR_INV - = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
289 D_temp_prec.invCRightLinOp(psi1,
chi,
PLUS);
290 D_temp_prec.cRightLinOp(tmp1, psi1,
PLUS);
293 QDPIO::cout <<
" CR_INV CR + = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
295 D_temp_prec.invCRightLinOp(psi1,
chi,
MINUS);
296 D_temp_prec.cRightLinOp(tmp1, psi1,
MINUS);
299 QDPIO::cout <<
" CR_INV CR - = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
304 D_temp_prec.unprecLinOp(psi2,
chi,
PLUS);
306 QDPIO::cout <<
" D_2 + = " << sqrt( norm2(diff) / norm2(psi1) ) << std::endl;
309 D_temp_prec.unprecLinOp(psi2,
chi,
MINUS);
311 QDPIO::cout <<
" D_2 - = " << sqrt( norm2(diff) / norm2(psi1) ) << std::endl;
319 QDPIO::cout <<
"ILU Prec Op: " << std::endl;
322 tmp1 = Gamma(15)*
chi;
323 D_temp_prec2.invCRightLinOp(
tmp2, tmp1,
PLUS);
324 psi1 = Gamma(15)*
tmp2;
327 D_temp_prec2.invCLeftLinOp(psi2,
chi,
MINUS);
329 QDPIO::cout <<
" Gamma5_1 = " << sqrt( norm2(diff) / norm2(psi1) ) << std::endl;
334 tmp1 = Gamma(15)*
chi;
335 D_temp_prec2.invCLeftLinOp(
tmp2, tmp1,
PLUS);
336 psi1 = Gamma(15)*
tmp2;
339 D_temp_prec2.invCRightLinOp(psi2,
chi,
MINUS);
341 QDPIO::cout <<
" Gamma5_2 = " << sqrt( norm2(diff) / norm2(psi1) ) << std::endl;
345 D_temp_prec2.getFermBC().modifyF(
chi);
346 D_temp_prec2.cLeftLinOp(psi1,
chi,
PLUS);
347 D_temp_prec2.invCLeftLinOp(tmp1, psi1,
PLUS);
350 QDPIO::cout <<
" CL CL_INV + = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
353 D_temp_prec2.cLeftLinOp(psi1,
chi,
MINUS);
354 D_temp_prec2.invCLeftLinOp(tmp1, psi1,
MINUS);
357 QDPIO::cout <<
" CL CL_INV - = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
359 D_temp_prec2.invCLeftLinOp(psi1,
chi,
PLUS);
360 D_temp_prec2.cLeftLinOp(tmp1, psi1,
PLUS);
363 QDPIO::cout <<
" CL_INV CL + = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
365 D_temp_prec2.invCLeftLinOp(psi1,
chi,
MINUS);
366 D_temp_prec2.cLeftLinOp(tmp1, psi1,
MINUS);
369 QDPIO::cout <<
" CL_INV CL - = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
374 D_temp_prec2.getFermBC().modifyF(
chi);
375 D_temp_prec2.cRightLinOp(psi1,
chi,
PLUS);
376 D_temp_prec2.invCRightLinOp(tmp1, psi1,
PLUS);
379 QDPIO::cout <<
" CR CR_INV + = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
381 D_temp_prec2.cRightLinOp(psi1,
chi,
MINUS);
382 D_temp_prec2.invCRightLinOp(tmp1, psi1,
MINUS);
385 QDPIO::cout <<
" CR CR_INV - = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
387 D_temp_prec2.invCRightLinOp(psi1,
chi,
PLUS);
388 D_temp_prec2.cRightLinOp(tmp1, psi1,
PLUS);
391 QDPIO::cout <<
" CR_INV CR + = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
393 D_temp_prec2.invCRightLinOp(psi1,
chi,
MINUS);
394 D_temp_prec2.cRightLinOp(tmp1, psi1,
MINUS);
397 QDPIO::cout <<
" CR_INV CR - = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
402 D_temp_prec2.unprecLinOp(psi2,
chi,
PLUS);
404 QDPIO::cout <<
" D_2 + = " << sqrt( norm2(diff) / norm2(psi1) ) << std::endl;
407 D_temp_prec2.unprecLinOp(psi2,
chi,
MINUS);
409 QDPIO::cout <<
" D_2 - = " << sqrt( norm2(diff) / norm2(psi1) ) << std::endl;
421 p.anisoParam.anisoP =
true;
422 p.anisoParam.t_dir = 3;
423 p.anisoParam.xi_0 = 2.464;
424 p.anisoParam.nu = 0.95;
427 QDPIO::cout <<
"ILU Prec Clover Op: " << std::endl;
428 ILUPrecSCprecTCloverLinOp D_temp_prec_clover(fs,
p );
432 tmp1 = Gamma(15)*
chi;
433 D_temp_prec_clover.invCRightLinOp(
tmp2, tmp1,
PLUS);
434 psi1 = Gamma(15)*
tmp2;
437 D_temp_prec_clover.invCLeftLinOp(psi2,
chi,
MINUS);
439 QDPIO::cout <<
" Gamma5_1 = " << sqrt( norm2(diff) / norm2(psi1) ) << std::endl;
444 tmp1 = Gamma(15)*
chi;
445 D_temp_prec_clover.invCLeftLinOp(
tmp2, tmp1,
PLUS);
446 psi1 = Gamma(15)*
tmp2;
449 D_temp_prec_clover.invCRightLinOp(psi2,
chi,
MINUS);
451 QDPIO::cout <<
" Gamma5_2 = " << sqrt( norm2(diff) / norm2(psi1) ) << std::endl;
455 D_temp_prec_clover.getFermBC().modifyF(
chi);
456 D_temp_prec_clover.cLeftLinOp(psi1,
chi,
PLUS);
457 D_temp_prec_clover.invCLeftLinOp(tmp1, psi1,
PLUS);
460 QDPIO::cout <<
" CL CL_INV + = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
463 D_temp_prec_clover.cLeftLinOp(psi1,
chi,
MINUS);
464 D_temp_prec_clover.invCLeftLinOp(tmp1, psi1,
MINUS);
467 QDPIO::cout <<
" CL CL_INV - = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
469 D_temp_prec_clover.invCLeftLinOp(psi1,
chi,
PLUS);
470 D_temp_prec_clover.cLeftLinOp(tmp1, psi1,
PLUS);
473 QDPIO::cout <<
" CL_INV CL + = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
475 D_temp_prec_clover.invCLeftLinOp(psi1,
chi,
MINUS);
476 D_temp_prec_clover.cLeftLinOp(tmp1, psi1,
MINUS);
479 QDPIO::cout <<
" CL_INV CL - = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
484 D_temp_prec_clover.getFermBC().modifyF(
chi);
485 D_temp_prec_clover.cRightLinOp(psi1,
chi,
PLUS);
486 D_temp_prec_clover.invCRightLinOp(tmp1, psi1,
PLUS);
489 QDPIO::cout <<
" CR CR_INV + = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
491 D_temp_prec_clover.cRightLinOp(psi1,
chi,
MINUS);
492 D_temp_prec_clover.invCRightLinOp(tmp1, psi1,
MINUS);
495 QDPIO::cout <<
" CR CR_INV - = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
497 D_temp_prec_clover.invCRightLinOp(psi1,
chi,
PLUS);
498 D_temp_prec_clover.cRightLinOp(tmp1, psi1,
PLUS);
501 QDPIO::cout <<
" CR_INV CR + = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
503 D_temp_prec_clover.invCRightLinOp(psi1,
chi,
MINUS);
504 D_temp_prec_clover.cRightLinOp(tmp1, psi1,
MINUS);
507 QDPIO::cout <<
" CR_INV CR - = " << sqrt(norm2(diff)/norm2(
chi)) << std::endl;
512 D_temp_prec_clover.unprecLinOp(psi2,
chi,
PLUS);
514 QDPIO::cout <<
" D_2 + = " << sqrt( norm2(diff) / norm2(psi1) ) << std::endl;
517 D_temp_prec_clover.unprecLinOp(psi2,
chi,
MINUS);
519 QDPIO::cout <<
" D_2 - = " << sqrt( norm2(diff) / norm2(psi1) ) << std::endl;
523 EO3DPrecSCprecTWilsonLinOp D_schur_tprec(fs,
Mass, aniso);
525 QDPIO::cout <<
"Schur Style preconditioning tests " << std::endl;
526 QDPIO::cout <<
"================================= " << std::endl;
530 for(
int cb=0;
cb < 2;
cb++) {
533 tmp1[rb3[
cb]] = Gamma(15)*
chi;
534 D_schur_tprec.invCRightLinOp(
tmp2, tmp1,
PLUS,
cb);
535 psi1[rb3[
cb]] = Gamma(15)*
tmp2;
538 D_schur_tprec.invCLeftLinOp(psi2,
chi,
MINUS,
cb);
539 diff[rb3[
cb]] = psi2 - psi1;
540 QDPIO::cout <<
"cb="<<
cb<<
" Gamma5_1 = " << sqrt( norm2(diff,rb3[
cb]) / norm2(psi1,rb3[
cb]) ) << std::endl;
545 tmp1[rb3[
cb]] = Gamma(15)*
chi;
546 D_schur_tprec.invCLeftLinOp(
tmp2, tmp1,
PLUS,
cb);
547 psi1[rb3[
cb]] = Gamma(15)*
tmp2;
550 D_schur_tprec.invCRightLinOp(psi2,
chi,
MINUS,
cb);
551 diff[rb3[
cb]] = psi2 - psi1;
552 QDPIO::cout <<
"cb="<<
cb<<
" Gamma5_2 = " << sqrt( norm2(diff, rb3[
cb]) / norm2(psi1,rb3[
cb]) ) << std::endl;
556 D_schur_tprec.cLeftLinOp(psi1,
chi,
PLUS,
cb);
557 D_schur_tprec.invCLeftLinOp(tmp1, psi1,
PLUS,
cb);
559 diff[rb3[
cb]] = tmp1 -
chi;
560 QDPIO::cout <<
"cb="<<
cb<<
" CL CL_INV + = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
563 D_schur_tprec.cLeftLinOp(psi1,
chi,
MINUS,
cb);
564 D_schur_tprec.invCLeftLinOp(tmp1, psi1,
MINUS,
cb);
566 diff[rb3[
cb]] = tmp1 -
chi;
567 QDPIO::cout <<
"cb="<<
cb<<
" CL CL_INV - = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
569 D_schur_tprec.invCLeftLinOp(psi1,
chi,
PLUS,
cb);
570 D_schur_tprec.cLeftLinOp(tmp1, psi1,
PLUS,
cb);
572 diff[rb3[
cb]] = tmp1 -
chi;
573 QDPIO::cout <<
"cb="<<
cb<<
" CL_INV CL + = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
575 D_schur_tprec.invCLeftLinOp(psi1,
chi,
MINUS,
cb);
576 D_schur_tprec.cLeftLinOp(tmp1, psi1,
MINUS,
cb);
578 diff[rb3[
cb]] = tmp1 -
chi;
579 QDPIO::cout <<
"cb="<<
cb<<
" CL_INV CL - = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
583 D_schur_tprec.cRightLinOp(psi1,
chi,
PLUS,
cb);
584 D_schur_tprec.invCRightLinOp(tmp1, psi1,
PLUS,
cb);
586 diff[rb3[
cb]] = tmp1 -
chi;
587 QDPIO::cout <<
"cb="<<
cb<<
" CR CR_INV + = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
589 D_schur_tprec.cRightLinOp(psi1,
chi,
MINUS,
cb);
590 D_schur_tprec.invCRightLinOp(tmp1, psi1,
MINUS,
cb);
592 diff[rb3[
cb]] = tmp1 -
chi;
593 QDPIO::cout <<
"cb="<<
cb<<
" CR CR_INV - = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
595 D_schur_tprec.invCRightLinOp(psi1,
chi,
PLUS,
cb);
596 D_schur_tprec.cRightLinOp(tmp1, psi1,
PLUS,
cb);
598 diff[rb3[
cb]] = tmp1 -
chi;
599 QDPIO::cout <<
"cb="<<
cb<<
" CR_INV CR + = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
601 D_schur_tprec.invCRightLinOp(psi1,
chi,
MINUS,
cb);
602 D_schur_tprec.cRightLinOp(tmp1, psi1,
MINUS,
cb);
604 diff[rb3[
cb]] = tmp1 -
chi;
605 QDPIO::cout <<
"cb="<<
cb<<
" CR_INV CR - = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
611 D_schur_tprec.cRightLinOp(tmp1,
chi,
PLUS, 0);
612 D_schur_tprec.cRightLinOp(tmp1,
chi,
PLUS, 1);
616 D_schur_tprec.cLeftLinOp(psi1,
tmp2,
PLUS, 0);
617 D_schur_tprec.cLeftLinOp(psi1,
tmp2,
PLUS, 1);
621 D_schur_tprec.evenEvenLinOp(psi2,
chi,
PLUS);
622 D_schur_tprec.evenOddLinOp(tmp1,
chi,
PLUS);
623 psi2[rb3[0]] += tmp1;
625 D_schur_tprec.oddOddLinOp(psi2,
chi,
PLUS);
626 D_schur_tprec.oddEvenLinOp(tmp1,
chi,
PLUS);
627 psi2[rb3[1]] += tmp1;
630 for(
int cb=0;
cb < 2;
cb++) {
631 diff[rb3[
cb]] = psi2 - psi1;
632 QDPIO::cout <<
"cb="<<
cb<<
" D+ = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
637 D_schur_tprec.unprecLinOp(psi2,
chi,
PLUS);
638 for(
int cb=0;
cb < 2;
cb++) {
639 diff[rb3[
cb]] = psi2 - psi1;
640 QDPIO::cout <<
"cb="<<
cb<<
" D+ = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
645 D_schur_tprec.cLeftLinOp(tmp1,
chi,
MINUS, 0);
646 D_schur_tprec.cLeftLinOp(tmp1,
chi,
MINUS, 1);
650 D_schur_tprec.cRightLinOp(psi1,
tmp2,
MINUS, 0);
651 D_schur_tprec.cRightLinOp(psi1,
tmp2,
MINUS, 1);
656 D_schur_tprec.evenEvenLinOp(psi2,
chi,
MINUS);
657 D_schur_tprec.evenOddLinOp(tmp1,
chi,
MINUS);
658 psi2[rb3[0]] += tmp1;
660 D_schur_tprec.oddOddLinOp(psi2,
chi,
MINUS);
661 D_schur_tprec.oddEvenLinOp(tmp1,
chi,
MINUS);
662 psi2[rb3[1]] += tmp1;
665 for(
int cb=0;
cb < 2;
cb++) {
666 diff[rb3[
cb]] = psi2 - psi1;
667 QDPIO::cout <<
"cb="<<
cb<<
" D- = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
672 D_schur_tprec.unprecLinOp(psi2,
chi,
MINUS);
673 for(
int cb=0;
cb < 2;
cb++) {
674 diff[rb3[
cb]] = psi2 - psi1;
675 QDPIO::cout <<
"cb="<<
cb<<
" D- = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
681 EO3DPrecSCprecTCloverLinOp D_schur_clov_tprec(fs,
p);
684 D_schur_clov_tprec.unprecLinOp(psi2,
chi,
PLUS);
685 for(
int cb=0;
cb < 2;
cb++) {
686 diff[rb3[
cb]] = psi2 - psi1;
687 QDPIO::cout <<
"cb="<<
cb<<
" D+ = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
692 D_schur_clov_tprec.unprecLinOp(psi2,
chi,
MINUS);
693 for(
int cb=0;
cb < 2;
cb++) {
694 diff[rb3[
cb]] = psi2 - psi1;
695 QDPIO::cout <<
"cb="<<
cb<<
" D- = " << sqrt(norm2(diff,rb3[
cb])/norm2(
chi,rb3[
cb])) << std::endl;
Primary include file for CHROMA in application codes.
virtual FermState< T, P, Q > * createState(const Q &q) const
Given links (coordinates Q) create the state needed for the linear operators.
Class for counted reference semantics.
ILUPreconditioned Spatial, Central Temporal Preconditioned Wilson-like fermion actions with derivativ...
virtual ILUPrecSpaceCentralPrecTimeLinearOperator< T, P, Q > * linOp(Handle< FermState< T, P, Q > > state) const =0
Produce a linear operator for this action.
Unpreconditioned Clover-Dirac operator.
Unpreconditioned Wilson fermion action.
UnprecLinearOperator< T, P, Q > * linOp(Handle< FermState< T, P, Q > > state) const
Produce a linear operator for this action.
Unpreconditioned Wilson-Dirac operator.
void read(XMLReader &xml, const std::string &path, AsqtadFermActParams ¶m)
Read parameters.
void unitarityCheck(const multi1d< LatticeColorMatrixF3 > &u)
Check the unitarity of color matrix in SU(N)
void HotSt(multi1d< LatticeColorMatrix > &u)
Set a gauge field from a sample of (almost) Haar measure.
void gaugeStartup(XMLReader &gauge_file_xml, XMLReader &gauge_xml, multi1d< LatticeColorMatrix > &u, Cfg_t &cfg)
Initialize the gauge fields.
void proginfo(XMLWriter &xml)
Print out basic information about this program.
multi1d< LatticeColorMatrix > P
bool registerAll()
Register all the factories.
Asqtad Staggered-Dirac operator.
static multi1d< LatticeColorMatrix > u
LinOpSysSolverMGProtoClover::Q Q
const WilsonTypeFermAct< multi1d< LatticeFermion > > Handle< const ConnectState > const multi1d< Real > & Mass
push(xml_out,"Condensates")
LinOpSysSolverMGProtoClover::T T
void initialize(int *argc, char ***argv)
Chroma initialisation routine.
void finalize(void)
Chroma finalization routine.
multi1d< LatticeFermion > chi(Ncb)
void MesPlq(const multi1d< LatticeColorMatrixF3 > &u, multi2d< Double > &plane_plaq, Double &link)
XMLFileWriter & getXMLOutputInstance()
Get xml output instance.
Gauge configuration structure.
Params for clover ferm acts.
bool linkage_hack()
To insure linking of code, place the registered code flags here.
int main(int argc, char **argv)