44 for(
int n = 0;
n < length; ++
n)
50 for(
int n = 0;
n > length; --
n)
61 namespace GroupBaryonOperatorEnv
70 XMLReader inputtop(xml, path);
76 XMLReader inputtop(xml, path);
82 XMLReader inputtop(xml, path);
95 XMLReader inputtop(xml, path);
118 XMLReader paramtop( xml, path );
124 int NumberofQuarks = 3;
128 read( paramtop,
"Param/Name",
name );
129 read( paramtop,
"Param/version", version );
130 QDPIO::cout<<
name <<
" Version " << version <<std::endl;
136 QDPIO::cerr <<
name <<
": parameter version " << version <<
" unsupported." << std::endl;
139 read( paramtop,
"Param/LattSize",
nrow );
147 QDPIO::cout<<
"Main input file is " <<
InputFileName <<std::endl;
151 for(
int i=0;
i < NumberofQuarks; ++
i)
dilution[
i ].N = 4;
162 write( xml,
"version", version );
181 multi1d<int> ijk( 3 );
215 QDPIO::cerr<<
"say what? "<<ord<<
" "<<
i<<
" "<<
j<<
" "<<
k<<
" "<<which<<std::endl;
218 return ( ijk[ which ] );
225 multi1d<int> ijk( 3 );
259 QDPIO::cerr<<
"Say what? "<<ord<<
" "<<
i<<
" "<<
j<<
" "<<
k<<
" "<<which<<std::endl;
262 return ( ijk[ which ] );
295 XMLReader smeartop( xml_s );
297 QDPIO::cout <<
"Source quark smearing type = "
310 XMLReader smeartop( xml_s );
312 QDPIO::cout <<
"Sink quark smearing type = "
325 QDPIO::cerr <<
name <<
": Caught Exception smearing: " << e << std::endl;
333 multi1d<GroupBaryonOp>& AB, multi1d<GroupBaryonOp>& CB,
334 multi1d<GroupBaryonQQQ>& AQQQ, multi1d<GroupBaryonQQQ>& CQQQ )
339 #ifdef REDUCETOTIMEDILUTION
406 for(
int j=0;
j < 3; ++
j)
427 #ifdef MAKE_SINK_OPERATORS
434 #ifdef MAKE_SOURCE_OPERATORS
444 #ifdef MAKE_SINK_OPERATORS
447 #ifdef MAKE_SOURCE_OPERATORS
455 #ifdef MAKE_SINK_OPERATORS
460 AB[
n ].baryonoperator.orderings.resize( 1 );
461 for(
int ord=0; ord < 1; ++ord)
468 AB[
n ].baryonoperator.orderings[ ord ].op(
i,
j,
k ).ind.resize(1);
471 AB[
n ].baryonoperator.orderings[ ord ].op(
i,
j,
k ).ind[ 0 ].elem( 0,
t ) = cmplx( Real(0), Real(0) );
474 AB[
n ].baryonoperator.version = 1;
478 AB[
n ].baryonoperator.quarkOrderings.resize(1);
479 AB[
n ].baryonoperator.quarkOrderings[0].resize(3);
480 AB[
n ].baryonoperator.quarkOrderings[0][0] = 0;
481 AB[
n ].baryonoperator.quarkOrderings[0][1] = 1;
482 AB[
n ].baryonoperator.quarkOrderings[0][2] = 2;
484 #ifdef MAKE_SOURCE_OPERATORS
487 CB[
n ].baryonoperator.orderings.resize( 1 );
488 for(
int ord=0; ord < 1; ++ord)
495 CB[
n ].baryonoperator.orderings[ ord ].op(
i,
j,
k ).ind.resize(1);
497 for(
int t=0;
t<
params.
nrow[3]; ++
t) CB[
n ].baryonoperator.orderings[ ord ].op(
i,
j,
k ).ind[ 0 ].elem( 0,
t ) = cmplx( Real(0), Real(0) );
500 CB[
n ].baryonoperator.version = 1;
504 CB[
n ].baryonoperator.quarkOrderings.resize(1);
505 CB[
n ].baryonoperator.quarkOrderings[0].resize(3);
506 CB[
n ].baryonoperator.quarkOrderings[0][0] = 0;
507 CB[
n ].baryonoperator.quarkOrderings[0][1] = 1;
508 CB[
n ].baryonoperator.quarkOrderings[0][2] = 2;
514 int q0spin,q1spin,q2spin,q0disp,q1disp,q2disp,nbops;
515 reader >> hash >> q0spin >> q1spin >> q2spin >> q0disp >> q1disp >> q2disp >> dL >> nbops;
516 #ifdef MAKE_SINK_OPERATORS
517 AQQQ[
i ].quark[ 0 ].spin = q0spin -1;
518 AQQQ[
i ].quark[ 1 ].spin = q1spin -1;
519 AQQQ[
i ].quark[ 2 ].spin = q2spin -1;
520 AQQQ[
i ].quark[ 0 ].displacement = q0disp;
521 AQQQ[
i ].quark[ 1 ].displacement = q1disp;
522 AQQQ[
i ].quark[ 2 ].displacement = q2disp;
523 AQQQ[
i ].NBaryonOps = nbops;
524 for(
int j=0;
j < 3; ++
j)
528 AQQQ[
i ].quark[
j ].disp_len = dL;
532 AQQQ[
i ].quark[
j ].disp_len = -dL;
536 #ifdef MAKE_SOURCE_OPERATORS
537 CQQQ[
i ].quark[ 0 ].spin = q0spin -1;
538 CQQQ[
i ].quark[ 1 ].spin = q1spin -1;
539 CQQQ[
i ].quark[ 2 ].spin = q2spin -1;
540 CQQQ[
i ].quark[ 0 ].displacement = q0disp;
541 CQQQ[
i ].quark[ 1 ].displacement = q1disp;
542 CQQQ[
i ].quark[ 2 ].displacement = q2disp;
543 CQQQ[
i ].NBaryonOps = nbops;
544 for(
int j=0;
j < 3; ++
j)
548 CQQQ[
i ].quark[
j ].disp_len = dL;
552 CQQQ[
i ].quark[
j ].disp_len = -dL;
556 #ifdef MAKE_SINK_OPERATORS
557 for(
int j=0;
j < 3; ++
j)
561 AQQQ[
i ].quark[
j ].disp_dir = 0;
562 AQQQ[
i ].quark[
j ].disp_len = 0;
563 AQQQ[
i ].quark[
j ].disp_ind = 0;
567 AQQQ[
i ].quark[
j ].disp_dir = AQQQ[
i ].quark[
j ].displacement - 1;
568 AQQQ[
i ].quark[
j ].disp_ind = AQQQ[
i ].quark[
j ].displacement;
569 AQQQ[
i ].quark[
j ].disp_len = dL;
573 AQQQ[
i ].quark[
j ].disp_dir = -AQQQ[
i ].quark[
j ].displacement - 1;
574 AQQQ[
i ].quark[
j ].disp_ind = -AQQQ[
i ].quark[
j ].displacement + 3;
575 AQQQ[
i ].quark[
j ].disp_len = -dL;
578 AQQQ[
i ].coef.resize( AQQQ[
i ].NBaryonOps );
579 AQQQ[
i ].whichBaryonOps.resize( AQQQ[
i ].NBaryonOps );
580 AQQQ[
i ].baryon.resize( AQQQ[
i ].NBaryonOps );
584 for(
int n=0;
n < AQQQ[
i ].NBaryonOps; ++
n)
588 reader >> AQQQ[
i ].whichBaryonOps[
n ];
591 AQQQ[
i ].coef[
n ] = cmplx( re, im );
595 AQQQ[
i ].baryon[
n ] = &AB[ (AQQQ[
i ].whichBaryonOps[
n ]) ];
598 #ifdef MAKE_SOURCE_OPERATORS
599 for(
int j=0;
j < 3; ++
j)
603 CQQQ[
i ].quark[
j ].disp_dir = 0;
604 CQQQ[
i ].quark[
j ].disp_len = 0;
605 CQQQ[
i ].quark[
j ].disp_ind = 0;
609 CQQQ[
i ].quark[
j ].disp_dir = CQQQ[
i ].quark[
j ].displacement - 1;
610 CQQQ[
i ].quark[
j ].disp_ind = CQQQ[
i ].quark[
j ].displacement;
611 CQQQ[
i ].quark[
j ].disp_len = dL;
615 CQQQ[
i ].quark[
j ].disp_dir = -CQQQ[
i ].quark[
j ].displacement - 1;
616 CQQQ[
i ].quark[
j ].disp_ind = -CQQQ[
i ].quark[
j ].displacement + 3;
617 CQQQ[
i ].quark[
j ].disp_len = -dL;
620 CQQQ[
i ].coef.resize( CQQQ[
i ].NBaryonOps );
621 CQQQ[
i ].whichBaryonOps.resize( CQQQ[
i ].NBaryonOps );
622 CQQQ[
i ].baryon.resize( CQQQ[
i ].NBaryonOps );
626 for(
int n=0;
n < CQQQ[
i ].NBaryonOps; ++
n)
630 reader >> CQQQ[
i ].whichBaryonOps[
n ];
633 CQQQ[
i ].coef[
n ] = cmplx( re, im );
637 CQQQ[
i ].baryon[
n ] = &CB[ (CQQQ[
i ].whichBaryonOps[
n ]) ];
648 #ifdef MAKE_SOURCE_OPERATORS
651 int spinCount, flipsign;
654 for(
int j=0;
j < 3; ++
j)
656 if ( CQQQ[
i ].quark[
j ].spin > 1 ) spinCount++;
658 if ( spinCount % 2 ) flipsign = 1;
663 for(
int n=0;
n < CQQQ[
i ].NBaryonOps; ++
n)
670 CQQQ[
i ].coef[
n ] *= cmplx( Real(-1), Real(0) );
675 CQQQ[
i ].baryon[
n ] = &CB[ CQQQ[
i ].whichBaryonOps[
n ] ];
681 for(
int n=0;
n < 3; ++
n)
693 QDPIO::cout <<
"Reading input from text file DONE " << std::endl;
704 QDPIO::cerr <<
name <<
": spatial mask size incorrect 1" << std::endl;
709 QDPIO::cerr <<
name <<
": spatial mask incorrect 2" << std::endl;
712 multi1d<int> lookup_dir(
Nd - 1 );
717 lookup_dir[
j ] =
mu;
723 QDPIO::cerr <<
name <<
": spatial mask incorrect 3" << std::endl;
731 QDPIO::cerr <<
name <<
": color mask incorrect 6" << std::endl;
739 QDPIO::cerr <<
name <<
": spin mask incorrect 7" << std::endl;
749 LatticeFermion quark_noise;
752 LatticeFermion quark_source =
zero;
757 LatticeColorVector colvec = peekSpin( quark_noise, spin_source );
758 LatticeColorVector dest =
zero;
762 LatticeComplex comp = peekColor( colvec, color_source );
763 pokeColor( dest, comp, color_source );
765 pokeSpin( quark_source, dest, spin_source );
767 quark_noise = quark_source;
769 LatticeBoolean mask =
false;
772 LatticeBoolean btmp =
true;
780 quark_source = where( mask, quark_noise, Fermion(
zero ) );
790 const multi1d<LatticeFermion>&
q,
796 disp_quarks.resize( 3 );
797 for(
int i=0;
i < disp_quarks.size(); ++
i)
800 std::map<int, LatticeFermion>& disp_q = disp_quarks[
i ];
803 if ( disp_q.find( term_q.
displacement ) == disp_q.end() )
812 LatticeFermion qq =
q[
i ];
814 disp_q.insert( std::make_pair( term_q.
displacement, qq ) );
825 const LatticeFermion& q1,
826 const LatticeFermion& q2,
827 const LatticeFermion& q3,
833 multi1d<LatticeFermion>
q( 3 );
854 const LatticeFermion& q2,
855 const LatticeFermion& q3
864 const LatticeFermion& q2,
865 const LatticeFermion& q3,
869 multi1d<LatticeComplex>
d(1);
879 const LatticeFermion& q2,
880 const LatticeFermion& q3,
886 QDPIO::cerr<<
" code only works for Nc=3 and Ns=4\n";
893 multi1d< std::map<int, LatticeFermion> > disp_quarks;
900 LatticeColorVector c0 = peekSpin( disp_quarks[ 0 ].find(
quark[ qindices[ 0 ] ].
displacement ) ->second,
901 quark[ qindices[ 0 ] ].spin );
902 LatticeColorVector c1 = peekSpin( disp_quarks[ 1 ].find(
quark[ qindices[ 1 ] ].
displacement ) ->second,
903 quark[ qindices[ 1 ] ].spin );
904 LatticeColorVector c2 = peekSpin( disp_quarks[ 2 ].find(
quark[ qindices[ 2 ] ].
displacement ) ->second,
905 quark[ qindices[ 2 ] ].spin );
918 d = colorContract( c0, c1, c2 );
933 multi1d<LatticeComplex>
935 const LatticeFermion& q2,
936 const LatticeFermion& q3,
942 QDPIO::cerr<<
" code only works for Nc=3 and Ns=4\n";
950 multi1d< std::map<int, LatticeFermion> > disp_quarks;
955 multi1d<LatticeComplex>
d( 1 );
958 LatticeColorVector c0 = peekSpin( disp_quarks[ 0 ].find(
quark[ qindices[ 0 ] ].
displacement ) ->second,
959 quark[ qindices[ 0 ] ].spin );
960 LatticeColorVector c1 = peekSpin( disp_quarks[ 1 ].find(
quark[ qindices[ 1 ] ].
displacement ) ->second,
961 quark[ qindices[ 1 ] ].spin );
962 LatticeColorVector c2 = peekSpin( disp_quarks[ 2 ].find(
quark[ qindices[ 2 ] ].
displacement ) ->second,
963 quark[ qindices[ 2 ] ].spin );
976 d[ 0 ] = colorContract( c0, c1, c2 );
983 multi1d<LatticeComplex>
d( 1 );
999 int op_size3 =
orderings[ 0 ].op.size3();
1000 int op_size2 =
orderings[ 0 ].op.size2();
1001 int op_size1 =
orderings[ 0 ].op.size1();
1002 int ind_size =
orderings[ 0 ].op( 0, 0, 0 ).ind.size();
1003 int elem_size2 =
orderings[ 0 ].op( 0, 0, 0 ).ind[ 0 ].elem.size2();
1004 int elem_size1 =
orderings[ 0 ].op( 0, 0, 0 ).ind[ 0 ].elem.size1();
1005 Complex ord_sizes, op_sizes1, op_sizes2, elem_sizes;
1006 ord_sizes = cmplx( Real( orderings_size ), Real(
zero ) );
1007 op_sizes1 = cmplx( Real( op_size2 ), Real( op_size1 ) );
1008 op_sizes2 = cmplx( Real( op_size3 ), Real( ind_size ) );
1009 elem_sizes = cmplx( Real( elem_size2 ), Real( elem_size1 ) );
1010 multi1d<Complex> baryop_1d( 4 + orderings_size * op_size3 * op_size2 * op_size1 * ind_size * elem_size2 * elem_size1 );
1013 baryop_1d[ cnt++ ] = ord_sizes;
1014 baryop_1d[ cnt++ ] = op_sizes1;
1015 baryop_1d[ cnt++ ] = op_sizes2;
1016 baryop_1d[ cnt++ ] = elem_sizes;
1027 if ( cnt != baryop_1d.size() )
1029 QDPIO::cerr <<
": size mismatch in BaryonOperator_t serialization " << cnt << std::endl;
1044 const multi1d<LatticeColorMatrix>&
u )
1058 bool success =
true;
Factory for producing baryon operators.
Primary include file for CHROMA library code.
void init(const Params &p)
SpinMatrix spin_rotate_mat
multi1d< QuarkTerm_t > quark
void smearDisplaceQuarks(multi1d< std::map< int, LatticeFermion > > &disp_quarks, const LatticeFermion &q1, const LatticeFermion &q2, const LatticeFermion &q3, int *qindices) const
First smear then displace the quarks.
multi1d< LatticeComplex > operator()(const LatticeFermion &quark1, const LatticeFermion &quark2, const LatticeFermion &quark3, int *qindices, enum PlusMinus isign) const
Compute the operator.
GroupBaryonQQQ()
Hide partial constructor.
void displaceQuarks(multi1d< std::map< int, LatticeFermion > > &disp_quarks, const multi1d< LatticeFermion > &q, int *qindices) const
Construct array of std::maps of displacements.
Class for counted reference semantics.
Random Z(N) source construction using dilution.
Basis rotation matrix from Dirac to Degrand-Rossi (and reverse)
Parallel transport a lattice field.
Construct group baryon operators.
SpinMatrixD DiracToDRMat()
The Dirac to Degrand-Rossi spin transformation matrix (and reverse)
void read(XMLReader &xml, const std::string &path, GroupBaryonOperatorEnv::Params::Qprop_t::Solutions_t &input)
Reader.
GroupXML_t readXMLGroup(XMLReader &xml_in, const std::string &path, const std::string &type_name)
Read group and return as a std::string.
LatticePropagator displacement(const multi1d< LatticeColorMatrix > &u, const LatticePropagator &chi, int length, int dir)
Apply a displacement operator to a lattice field.
void zN_src(LatticeFermion &a, int N)
Volume source of Z(N) noise.
All link smearing constructors.
Factory for producing link smearing objects.
void savern(int iseed[4])
static bool registered
Local registration flag.
int DilSwapInv(int ord, int i, int j, int k, int which)
void ReadTextInput(Params ¶ms, multi1d< GroupBaryonOp > &AB, multi1d< GroupBaryonOp > &CB, multi1d< GroupBaryonQQQ > &AQQQ, multi1d< GroupBaryonQQQ > &CQQQ)
Reader.
bool registerAll()
Register all the factories.
void write(XMLWriter &xml, const std::string &path, const GroupBaryonOperatorEnv::Params ¶m)
int DilSwap(int ord, int i, int j, int k, int which)
bool registerAll()
Register all the factories.
bool registerAll()
Register all the factories.
bool registerAll()
Register all the factories.
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.
static multi1d< LatticeColorMatrix > u
push(xml_out,"Condensates")
multi1d< LatticeFermion > chi(Ncb)
void displacementSub(const multi1d< LatticeColorMatrix > &u, LatticeFermion &chi, int length, int dir)
multi1d< LatticeFermion > s(Ncb)
All quark smearing constructors.
Factory for producing quark smearing objects.
Quark source or sink smearing.
Fourier transform phase factor support.
All make sink constructors.
Factory for producing quark prop sinks.
Factory for producing quark smearing objects.
multi1d< BaryonOperatorInsertion_t > orderings
multi1d< Complex > serialize()
Serialize generalized operator object.
multi1d< std::string > soln_file_names
multi1d< Solutions_t > solns
multi1d< multi1d< int > > spatial_mask
multi1d< int > color_mask
multi1d< int > spatial_mask_size
multi1d< LatticeColorMatrix > u
std::string baryon_operator
multi1d< dilution_t > dilution
multi1d< multi1d< int > > NH
PropSinkSmear_t sink_smearing
struct Chroma::GroupBaryonOperatorEnv::Params::Qprop_t qprop
struct Chroma::GroupBaryonOperatorEnv::Params::param_t param
multi1d< multi1d< int > > SnkOrderings
multi1d< multi1d< int > > SrcOrderings
struct Chroma::GroupBaryonOperatorEnv::Params::gaugestuff_t gaugestuff
multi1d< std::string > Names
void writeXML(XMLWriter &in, const std::string &path) const
std::string InputFileName
PropSourceSmear_t source_smearing
Volume source of Z(N) noise.