48 #include <qdp-lapack.h>
49 #include <qdp_config.h>
55 namespace InlineDiscoEoEigCGEnv{
84 XMLReader paramtop(xml, path);
87 read(paramtop,
"version", version);
104 QDPIO::cerr <<
"Input parameter version " << version <<
" unsupported." << std::endl;
115 write(xml,
"version", version);
120 push(xml,
"FermionAction");
124 for(
int t(0);
t<param.
chi.size();
t++){
126 xml<<param.
chi[
t].xml;
137 XMLReader inputtop(xml, path);
141 if ( inputtop.count(
"evecs_file")!=0 )
169 XMLReader paramtop(xml_in, path);
171 if (paramtop.count(
"Frequency") == 1)
183 if (paramtop.count(
"xml_file") != 0)
190 QDPIO::cerr << __func__ <<
": Caught Exception reading XML: " << e << std::endl;
223 return ((
a.t_slice<
b.t_slice)||(
a.mom<
b.mom)||(
a.disp<
b.disp));
228 os <<
"KeyOperator_t:"
229 <<
" t_slice = " <<
d.t_slice
231 for (
int i=0;
i<
d.disp.size();
i++)
232 os <<
d.disp[
i] <<
" " ;
235 for (
int i=0;
i<
d.mom.size();
i++)
236 os <<
d.mom[
i] <<
" " ;
245 multi1d<ComplexD>
op ;
254 os <<
"ValOperator_t:\n";
255 for (
int i=0;
i<
d.op.size();
i++)
256 os <<
" gamma["<<
i<<
"] = "<<
d.op[
i] << std::endl ;
269 unsigned short int n ;
279 unsigned short int n ;
297 StandardOutputStream&
operator<<(StandardOutputStream& os,
const multi1d<short int>&
d){
300 for(
int i=1;
i <
d.size();
i++)
307 typedef LatticeFermion
T;
308 typedef multi1d<LatticeColorMatrix>
P;
309 typedef multi1d<LatticeColorMatrix>
Q;
316 std::istringstream xml_s(param.
action.
xml);
317 XMLReader fermacttop(xml_s);
318 QDPIO::cout <<
"FermAct = " << param.
action.
id << std::endl;
324 QDPIO::cout <<
"Try the various Wilson fermion factories" << std::endl;
330 state = Sf->createState(
u);
331 QDPIO::cout <<
"Suitable factory found: compute the trace quark prop"<<std::endl;
335 <<
": caught exception instantiating the action: " << e << std::endl;
349 else if(param.
action.
id ==
"CLOVER"){
354 QDPIO::cout<<
name<<
" : Tough luck dude! No code for you..."<<std::endl ;
363 multi1d<Complex>
HU ;
368 void do_disco(std::map< KeyOperator_t, ValOperator_t >& db,
369 const LatticeFermion& qbar,
370 const LatticeFermion&
q,
374 const multi1d<short int>& path,
375 const int& max_path_length ){
376 QDPIO::cout<<
" Computing Operator with path length "<<path.size()
377 <<
" on timeslice "<<
t<<
". Path: "<<path <<std::endl;
384 std::pair<KeyOperator_t, ValOperator_t> kv ;
387 kv.first.disp.resize(1);
388 kv.first.disp[0] = 0 ;
391 kv.first.disp = path ;
393 multi1d< multi1d<ComplexD> > foo(
p.numMom()) ;
394 for (
int m(0);
m <
p.numMom();
m++)
395 foo[
m].resize(Ns*Ns);
396 for(
int g(0);g<Ns*Ns;g++){
398 for (
int m(0);
m <
p.numMom();
m++){
400 foo[
m][g] =
sum(
p[
m]*cc,trb);
403 for (
int m(0);
m <
p.numMom();
m++){
404 for(
int i(0);
i<(
Nd-1);
i++)
405 kv.first.mom[
i] =
p.numToMom(
m)[
i] ;
407 kv.second.op = foo[
m];
408 std::pair<std::map< KeyOperator_t, ValOperator_t >::iterator,
bool> itbo;
410 itbo = db.insert(kv);
412 QDPIO::cout<<
"Inserting new entry in std::map\n";
415 for(
int i(0);
i<kv.second.op.size();
i++)
416 itbo.first->second.op[
i] += kv.second.op[
i] ;
420 if(path.size()<max_path_length){
421 QDPIO::cout<<
" attempt to add new path. "
422 <<
" current path length is : "<<path.size();
423 multi1d<short int> new_path(path.size()+1);
424 QDPIO::cout<<
" new path length is : "<<new_path.size()<<std::endl;
425 for(
int i(0);
i<path.size();
i++)
426 new_path[
i] = path[
i] ;
427 for(
int sign(-1);sign<2;sign+=2)
429 new_path[path.size()]= sign*(
mu+1) ;
431 bool back_track=false ;
433 if(path[path.size()-1] == -new_path[path.size()])
436 QDPIO::cout<<
" Added path: "<<new_path<<std::endl;
437 LatticeFermion q_mu ;
443 do_disco(db, qbar, q_mu,
p,
t, trb, new_path, max_path_length);
450 void do_disco(std::map< KeyOperator_t, ValOperator_t >& db,
451 const LatticeFermion& qbar,
452 const LatticeFermion&
q,
457 const multi1d<short int>& path,
458 const int& max_path_length ){
459 QDPIO::cout<<
" Computing Operator with path length "<<path.size()
460 <<
" on timeslice "<<
t<<
". Path: "<<path <<std::endl;
472 std::pair<KeyOperator_t, ValOperator_t> kv ;
475 kv.first.disp.resize(1);
476 kv.first.disp[0] = 0 ;
479 kv.first.disp = path ;
481 multi1d< multi1d<ComplexD> > foo(
p.numMom()) ;
482 for (
int m(0);
m <
p.numMom();
m++)
483 foo[
m].resize(Ns*Ns);
486 for(
int g(0);g<Ns*Ns;g++){
488 for (
int m(0);
m <
p.numMom();
m++){
490 foo[
m][g] =
sum(
p[
m]*cc,trb);
498 LatticeFermion qtmp =
zero ;
499 LatticeFermion qbar2 =
zero ;
500 Doo->evenOddLinOp(qtmp,
q,
PLUS);
501 Doo->evenEvenInvLinOp(qbar2,qtmp,
PLUS);
502 for(
int g(0);g<Ns*Ns;g++){
503 for (
int m(0);
m <
p.numMom();
m++){
504 LatticeFermion q2 =
zero ;
507 q2[t0set[
t]] =
p[
m]*(Gamma(g)*qbar2);
508 Doo->evenEvenInvLinOp(qtmp,q2,
PLUS);
509 Doo->oddEvenLinOp(
chi,qtmp,
PLUS);
514 for (
int m(0);
m <
p.numMom();
m++){
515 for(
int i(0);
i<(
Nd-1);
i++)
516 kv.first.mom[
i] =
p.numToMom(
m)[
i] ;
518 kv.second.op = foo[
m];
519 std::pair<std::map< KeyOperator_t, ValOperator_t >::iterator,
bool> itbo;
521 itbo = db.insert(kv);
523 QDPIO::cout<<
"Inserting new entry in std::map\n";
526 for(
int i(0);
i<kv.second.op.size();
i++)
527 itbo.first->second.op[
i] += kv.second.op[
i] ;
531 if(path.size()<max_path_length){
532 QDPIO::cout<<
" attempt to add new path. "
533 <<
" current path length is : "<<path.size();
534 multi1d<short int> new_path(path.size()+1);
535 QDPIO::cout<<
" new path length is : "<<new_path.size()<<std::endl;
536 for(
int i(0);
i<path.size();
i++)
537 new_path[
i] = path[
i] ;
538 for(
int sign(-1);sign<2;sign+=2)
540 new_path[path.size()]= sign*(
mu+1) ;
542 bool back_track=false ;
544 if(path[path.size()-1] == -new_path[path.size()])
547 QDPIO::cout<<
" Added path: "<<new_path<<std::endl;
548 LatticeFermion q_mu ;
554 do_disco(db, qbar, q_mu, Doo,
p,
t, trb, new_path, max_path_length);
561 void do_disco(std::map< KeyOperator_t, ValOperator_t >& db,
567 const multi1d<short int>& path){
568 QDPIO::cout<<
" Computing Operator with path length "<<path.size()
569 <<
" on timeslice "<<
t<<
". Path: "<<path <<std::endl;
574 std::pair<KeyOperator_t, ValOperator_t> kv ;
577 kv.first.disp.resize(1);
578 kv.first.disp[0] = 0 ;
581 kv.first.disp = path ;
585 multi1d< multi1d<ComplexD> > foo(
p.numMom()) ;
586 for (
int m(0);
m <
p.numMom();
m++){
587 foo[
m].resize(Ns*Ns);
588 for (
int g(0); g<Ns*Ns;g++){
592 for(
int g(0);g<Ns*Ns;g++){
593 for(
int col=0;col<3;col++){
596 ColorVector cv =
zero ;
597 Complex
z = cmplx(Real(1.0),0.0) ;
600 LatticeFermion V = tt ;
601 for (
int m(0);
m <
p.numMom();
m++){
603 LatticeFermion DV =
zero;
604 Doo->evenEvenInvLinOp(DV,V,
PLUS);
611 for (
int m(0);
m <
p.numMom();
m++){
612 for(
int i(0);
i<(
Nd-1);
i++)
613 kv.first.mom[
i] =
p.numToMom(
m)[
i] ;
615 kv.second.op = foo[
m];
616 std::pair<std::map< KeyOperator_t, ValOperator_t >::iterator,
bool> itbo;
618 itbo = db.insert(kv);
620 QDPIO::cout<<
"Inserting new entry in std::map\n";
623 for(
int i(0);
i<kv.second.op.size();
i++)
624 itbo.first->second.op[
i] += kv.second.op[
i] ;
630 void do_disco(std::map< KeyOperator_t, ValOperator_t >& db,
632 multi1d<LatticeFermion>& vec,
639 const multi1d<short int>& path){
641 QDPIO::cout<<
" Computing Operator with path length "<<path.size()
642 <<
" on timeslice "<<
t<<
". Path: "<<path <<std::endl;
647 std::pair<KeyOperator_t, ValOperator_t> kv ;
651 kv.first.disp.resize(1);
652 kv.first.disp[0] = 0 ;
655 kv.first.disp = path ;
657 int ldb = vec.size();
661 multi2d<Complex> B(Nrhs,ldb);
662 multi1d< multi1d<LatticeFermion> > DDvec(ldb);
664 for(
int i(0);
i<ldb;
i++){
665 DDvec[
i].resize(Ns*Ns);
668 std::cout<<
"We've initialized DDvec!\n";
670 for(
int i(0);
i<ldb;
i++){
671 LatticeFermion qtmp =
zero ;
672 LatticeFermion qtmp2 =
zero ;
673 LatticeFermion qtmp3 =
zero ;
674 Doo->evenOddLinOp(qtmp,vec[
i],
PLUS);
675 Doo->evenEvenInvLinOp(qtmp2,qtmp,
PLUS);
676 for(
int g(0);g<Ns*Ns;g++){
677 Doo->evenEvenInvLinOp(qtmp3,Gamma(g)*qtmp2,
PLUS);
680 Doo->oddEvenLinOp(qtmp,qtmp3,
PLUS);
681 Doo->oddOddLinOp(qtmp2,qtmp,
MINUS);
683 Doo->oddOddLinOp(qtmp,Gamma(g)*vec[
i],
MINUS);
685 DDvec[
i][g] = qtmp + qtmp2;
689 multi1d< multi1d<ComplexD> > foo(
p.numMom()) ;
690 for (
int m(0);
m <
p.numMom();
m++){
691 foo[
m].resize(Ns*Ns);
695 for(
int g(0);g<Ns*Ns;g++){
696 for (
int m(0);
m <
p.numMom();
m++){
697 for (
int i(0);
i<ldb;
i++){
698 for (
int j(0);
j<ldb;
j++){
705 #if BASE_PRECISION == 32
706 int r = QDPLapack::cpotrs(
U, Clsk.
Nvec, Nrhs, Clsk.
HU, Clsk.
ldh, B, ldb,
info);
708 int r = QDPLapack::zpotrs(
U, Clsk.
Nvec, Nrhs, Clsk.
HU, Clsk.
ldh, B, ldb,
info);
712 QDPIO::cout<<
"do_disco cpotrs r = "<<
r<<std::endl;
713 QDPIO::cout<<
"do_disco cpotrs info = "<<
info<<std::endl;
716 for (
int i(0);
i<ldb;
i++){
717 foo[
m][g] += ComplexD(B[
i][
i]);
721 for (
int m(0);
m <
p.numMom();
m++){
722 for(
int i(0);
i<(
Nd-1);
i++)
723 kv.first.mom[
i] =
p.numToMom(
m)[
i] ;
725 kv.second.op = foo[
m];
727 std::pair<std::map< KeyOperator_t, ValOperator_t >::iterator,
bool> itbo;
729 itbo = db.insert(kv);
730 if( !(itbo.second) ){
731 for(
int i(0);
i<kv.second.op.size();
i++)
732 itbo.first->second.op[
i] += kv.second.op[
i] ;
735 QDPIO::cout<<
"Inserting new entry in std::map\n";
738 if(path.size()<max_path_length){
739 QDPIO::cout<<
" attempt to add new path. "
740 <<
" current path length is : "<<path.size();
741 multi1d<short int> new_path(path.size()+1);
742 QDPIO::cout<<
" new path length is : "<<new_path.size()<<std::endl;
743 for(
int i(0);
i<path.size();
i++)
744 new_path[
i] = path[
i] ;
745 for(
int sign(-1);sign<2;sign+=2)
747 new_path[path.size()]= sign*(
mu+1) ;
749 bool back_track=false ;
751 if(path[path.size()-1] == -new_path[path.size()])
754 QDPIO::cout<<
" Added path: "<<new_path<<std::endl;
755 multi1d<LatticeFermion> vec_mu(vec.size()) ;
756 for(
int j(0);
j<vec.size();
j++){
762 do_disco(db, Clsk , vec_mu, param, Doo,
u,
t, trb,
p, new_path);
773 QDPIO::cout<<
name<<
" : Reading vecs from "
774 << evecs_file <<std::endl ;
783 QDPFileReader to(file_xml,evecs_file,QDPIO_SERIAL);
784 read(file_xml,
"/OptEigInfo/ncurEvals", Nvecs);
785 read(file_xml,
"/OptEigInfo/ldh", ldh);
790 Clsk.
evals.resize(ldh);
791 Clsk.
H.resize(ldh*ldh);
792 Clsk.
HU.resize(ldh*ldh);
794 for(
int v(0);v<Nvecs;v++){
795 XMLReader record_xml;
796 read(to, record_xml, vec[v]);
799 XMLReader record_xml;
801 read(to, record_xml, Clsk.
H);
802 read(to, record_xml, Clsk.
HU);
804 QDPIO::cout<<
name<<
" : Time to read vecs= "
805 << swatch.getTimeInSeconds() <<
" secs "<<std::endl ;
810 void PRchi(multi1d<multi1d< multi1d<LatticeFermion> > >& quarkstilde,
818 int ldb = vec.size();
824 for(
int n(0);
n<quarks.size();
n++){
825 for (
int it(0) ;
it < quarks[
n]->getNumTimeSlices() ; ++
it){
826 int t = quarks[
n]->getT0(
it) ;
827 int Nrhs = quarks[
n]->getDilSize(
it) ;
828 multi2d<Complex> B(Nrhs, ldb);
829 for(
int i(0);
i<ldb;
i++){
830 for(
int j = 0 ;
j < Nrhs ;
j++){
839 LatticeFermion qsrc = quarks[
n]->dilutedSource(
it,
j);
840 LatticeFermion SdagSchi =
zero ;
841 Doo->oddOddLinOp(SdagSchi,qsrc,
MINUS);
850 #if BASE_PRECISION == 32
851 int r = QDPLapack::cpotrs(
U, Clsk.
Nvec, Nrhs, Clsk.
HU, Clsk.
ldh, B, ldb,
info);
853 int r = QDPLapack::zpotrs(
U, Clsk.
Nvec, Nrhs, Clsk.
HU, Clsk.
ldh, B, ldb,
info);
855 QDPIO::cout<<
"PRchi cpotrs r = "<<
r<<std::endl;
856 QDPIO::cout<<
"PRchi cpotrs info = "<<
info<<std::endl;
858 for(
int j = 0 ;
j < Nrhs ;
j++){
859 LatticeFermion vB =
zero;
860 LatticeFermion
q = quarks[
n]->dilutedSolution(
it,
j);
861 for(
int i(0);
i<ldb;
i++)
862 vB += B[
j][
i]*vec[
i];
863 quarkstilde[
n][
it][
j] =
q - vB;
864 std::cout<<
"Norm of PRchi: "<<norm2(quarkstilde[
n][
it][
j])<<std::endl;
873 void PRchi(multi1d<multi1d< multi1d<LatticeFermion> > >& quarkstilde,
876 for(
int n(0);
n<quarks.size();
n++){
877 for (
int it(0) ;
it < quarks[
n]->getNumTimeSlices() ;
it++){
878 for (
int j(0) ;
j < quarks[
n]->getDilSize(
it) ;
j++){
879 quarkstilde[
n][
it][
j] = quarks[
n]->dilutedSolution(
it,
j);
897 push(xml_out,
"discoEigCG");
898 write(xml_out,
"update_no", update_no);
899 write(xml_out,
"xml_file", xml_file);
902 XMLFileWriter xml(xml_file);
903 func(update_no, xml);
906 func(update_no, xml_out);
926 XMLBufferWriter gauge_xml;
932 catch( std::bad_cast )
940 QDPIO::cerr <<
name <<
": std::map call failed: " << e
944 const multi1d<LatticeColorMatrix>&
u =
947 push(xml_out,
"discoEigCG");
948 write(xml_out,
"update_no", update_no);
950 QDPIO::cout <<
name <<
": Disconnected diagrams with eigCG vectors" << std::endl;
958 write(xml_out,
"Config_info", gauge_xml);
960 push(xml_out,
"Output_version");
961 write(xml_out,
"out_version", 1);
966 MesPlq(xml_out,
"Observables",
u);
981 multi1d< Handle< DilutionScheme<LatticeFermion> > > quarks(
N_quarks);
987 std::istringstream xml_d(dil_xml.
xml);
988 XMLReader diltop(xml_d);
989 QDPIO::cout <<
"Dilution type = " << dil_xml.
id << std::endl;
997 QDPIO::cerr <<
name <<
": Caught Exception constructing dilution scheme: " << e << std::endl;
1008 if (quarks[0]->getCfgInfo() != quarks[
n]->getCfgInfo()){
1009 QDPIO::cerr <<
name <<
" : Quarks do not contain the same cfg info";
1010 QDPIO::cerr <<
", quark "<<
n << std::endl;
1021 XMLBufferWriter top;
1022 write(top,
"Config_info", gauge_xml);
1023 XMLReader from(top);
1024 XMLReader from2(from,
"/Config_info");
1025 std::ostringstream os;
1030 if (cfgInfo != quarks[0]->getCfgInfo()){
1031 QDPIO::cerr <<
name <<
" : Quarks do not contain the same";
1032 QDPIO::cerr <<
" cfg info as the gauge field." ;
1033 QDPIO::cerr <<
"gauge: XX"<<cfgInfo<<
"XX quarks: XX" ;
1034 QDPIO::cerr << quarks[0]->getCfgInfo()<<
"XX"<< std::endl;
1039 int decay_dir = quarks[0]->getDecayDir();
1051 for(
int n = 1 ;
n < quarks.size();
n++){
1052 if(toBool(quarks[
n]->getSeed()==quarks[0]->getSeed())){
1053 QDPIO::cerr <<
name <<
": error, quark seeds are the same" << std::endl;
1057 if(toBool(quarks[
n]->getDecayDir()!=quarks[0]->getDecayDir())){
1058 QDPIO::cerr<<
name<<
": error, quark decay dirs do not match" <<std::endl;
1067 multi1d<LatticeFermion> vec;
1072 std::map< KeyOperator_t, ValOperator_t > data ;
1074 multi1d<multi1d< multi1d<LatticeFermion> > > quarkstilde(quarks.size());
1075 for(
int n(0);
n<quarks.size();
n++){
1076 quarkstilde[
n].resize(quarks[
n]->getNumTimeSlices());
1077 for (
int it(0) ;
it < quarks[
n]->getNumTimeSlices() ;
it++){
1078 quarkstilde[
n][
it].resize(quarks[
n]->getDilSize(
it));
1089 PRchi(quarkstilde, quarks);
1091 for(
int n(0);
n<quarks.size();
n++){
1092 for (
int it(0) ;
it < quarks[
n]->getNumTimeSlices() ;
it++){
1093 int t = quarks[
n]->getT0(
it) ;
1094 QDPIO::cout<<
" Doing quark: "<<
n <<std::endl ;
1095 QDPIO::cout<<
" quark: "<<
n <<
" has "<<quarks[
n]->getDilSize(
it);
1096 QDPIO::cout<<
" dilutions on time slice "<<
t <<std::endl ;
1097 for(
int i = 0 ;
i < quarks[
n]->getDilSize(
it) ;
i++){
1098 QDPIO::cout<<
" Doing dilution : "<<
i<<std::endl ;
1099 multi1d<short int>
d ;
1102 LatticeFermion qbar = quarks[
n]->dilutedSource(
it,
i);
1103 LatticeFermion
q = quarkstilde[
n][
it][
i];
1104 QDPIO::cout<<
" Starting recursion "<<std::endl ;
1109 QDPIO::cout<<
" done with recursion! "
1110 <<
" The length of the path is: "<<
d.size()<<std::endl ;
1112 QDPIO::cout<<
" Done with dilutions for quark: "<<
n <<std::endl ;
1120 std::map< KeyOperator_t, ValOperator_t >::iterator
it;
1122 for(
it=data.begin();
it!=data.end();
it++){
1123 key.
key() =
it->first ;
1124 val.
data().op.resize(
it->second.op.size()) ;
1125 for(
int i(0);
i<
it->second.op.size();
i++){
1126 val.
data().op[
i] =
it->second.op[
i]/toDouble(quarks.size());
1134 for (
int it(0) ;
it < quarks[0]->getNumTimeSlices() ;
it++){
1135 multi1d<short int>
d ;
1136 int t = quarks[0]->getT0(
it) ;
1142 for (
int it(0) ;
it < quarks[0]->getNumTimeSlices() ;
it++){
1143 multi1d<short int>
d ;
1144 int t = quarks[0]->getT0(
it) ;
1145 QDPIO::cout<<
" Starting recursion again"<<std::endl ;
1149 QDPIO::cout<<
" done with recursion! "
1150 <<
" The length of the path is: "<<
d.size()<<std::endl ;
1160 XMLBufferWriter file_xml;
1162 push(file_xml,
"DBMetaData");
1164 write(file_xml,
"lattSize", QDP::Layout::lattSize());
1165 write(file_xml,
"decay_dir", decay_dir);
1167 write(file_xml,
"Config_info", gauge_xml);
1171 qdp_db.setMaxUserInfoLen(file_str.size());
1175 qdp_db.insertUserdata(file_str);
1179 for(
it=data.begin();
it!=data.end();
it++){
1180 key.
key() =
it->first ;
1181 val.
data().op.resize(
it->second.op.size()) ;
1184 for(
int i(0);
i<
it->second.op.size();
i++)
1185 val.
data().op[
i] =
it->second.op[
i];
1186 qdp_db.insert(key,val) ;
1193 QDPIO::cout <<
name <<
": total time = "
1194 << snoop.getTimeInSeconds()
1195 <<
" secs" << std::endl;
1197 QDPIO::cout <<
name <<
": ran successfully" << std::endl;
Inline measurement factory.
Heavy Baryon (Qll) 2-pt function : Orginos and Savage.
Baryon spin and projector matrices.
Factory for producing baryon operators.
Even-odd preconditioned Clover-Dirac operator.
Even-odd preconditioned linear operator.
Even-odd preconditioned Wilson-Dirac operator.
Class for counted reference semantics.
Inline measurement of stochastic baryon operators.
void func(const unsigned long update_no, XMLWriter &xml_out)
Do the measurement.
void operator()(const unsigned long update_no, XMLWriter &xml_out)
Do the measurement.
Serializable value harness.
Serializable key harness.
Fourier transform phase factor support.
Function object used for constructing the time-slice set.
Parameters for Clover fermion action.
Random Z(N) source construction using dilution.
All dilution scheme factories.
Factory for dilution schemes.
Parallel transport a lattice field.
Even-odd const determinant Wilson-like fermact.
Fermion action factories.
All Wilson-type fermion actions.
void proginfo(XMLWriter &xml)
Print out basic information about this program.
std::string makeXMLFileName(std::string xml_file, unsigned long update_no)
Return a xml file name for inline measurements.
multi1d< GroupXML_t > readXMLArrayGroup(XMLReader &xml_in, const std::string &path, const std::string &type_name)
Read group and return as a std::string.
GroupXML_t readXMLGroup(XMLReader &xml_in, const std::string &path, const std::string &type_name)
Read group and return as a std::string.
Class for counted reference semantics.
Inline measurement of stochastic 3pt functions.
void savern(int iseed[4])
Named object function std::map.
static bool registered
Local registration flag.
void do_disco(std::map< KeyOperator_t, ValOperator_t > &db, const LatticeFermion &qbar, const LatticeFermion &q, const SftMom &p, const int &t, const Subset &trb, const multi1d< short int > &path, const int &max_path_length)
void PRchi(multi1d< multi1d< multi1d< LatticeFermion > > > &quarkstilde, const multi1d< Handle< DilutionScheme< LatticeFermion > > > &quarks, Handle< EvenOddPrecLinearOperator< T, P, Q > > &Doo, CholeskyFactors Clsk, multi1d< LatticeFermion > &vec, const Params::Param_t ¶m, const P &u)
Handle< EvenOddPrecLinearOperator< T, P, Q > > createOddOdd_Op(const Params::Param_t ¶m, const P &u)
void read(XMLReader &xml, const std::string &path, Params::Param_t ¶m)
void write(XMLWriter &xml, const std::string &path, const Params::Param_t ¶m)
void ReadOPTEigCGVecs(multi1d< LatticeFermion > &vec, CholeskyFactors &Clsk, const std::string &evecs_file)
multi1d< LatticeColorMatrix > P
std::ostream & operator<<(std::ostream &os, const KeyOperator_t &d)
bool registerAll()
Register all the factories.
multi1d< LatticeColorMatrix > Q
bool operator<(const KeyOperator_t &a, const KeyOperator_t &b)
QDPSubTypeTrait< typename BinaryReturn< C1, C2, FnLocalInnerProduct >::Type_t >::Type_t localInnerProduct(const QDPSubType< T1, C1 > &l, const QDPType< T2, C2 > &r)
BinaryReturn< C1, C2, FnInnerProduct >::Type_t innerProduct(const QDPSubType< T1, C1 > &s1, const QDPType< T2, C2 > &s2)
const int N_quarks
Number of quarks to be used in this construction.
Asqtad Staggered-Dirac operator.
for(cb=0;cb< Ncb;++cb) cp+
static multi1d< LatticeColorMatrix > u
push(xml_out,"Condensates")
multi1d< LatticeFermion > chi(Ncb)
void MesPlq(const multi1d< LatticeColorMatrixF3 > &u, multi2d< Double > &plane_plaq, Double &link)
const WilsonTypeFermAct< multi1d< LatticeFermion > > Handle< const ConnectState > state
Print out basic info about this program.
All quark smearing constructors.
Factory for producing quark smearing objects.
Fourier transform phase factor support.
All make sink constructors.
Factory for producing quark prop sinks.
Factory for producing quark smearing objects.
Params for clover ferm acts.
Hold group xml and type id.
multi1d< short int > disp
unsigned short int t_slice
SerialDBData< ValOperator_t > v
SerialDBKey< KeyOperator_t > k
multi1d< GroupXML_t > chi
struct Chroma::InlineDiscoEoEigCGEnv::Params::NamedObject_t named_obj
void write(XMLWriter &xml_out, const std::string &path)
struct Chroma::InlineDiscoEoEigCGEnv::Params::Param_t param
Params for wilson ferm acts.
multi1d< LatticeColorMatrix > U
Wilson fermion action parameters.
Volume source of Z(N) noise.