4template<
typename Scalar>
22 vector<tuple<int,int,int,int,Scalar> >
foursite;
24 map<tuple<int,int,int,int>,Scalar>
Umap;
27template<
typename MODEL>
45 vector<Mpo<typename MODEL::Symmetry,typename MODEL::Scalar_> >
Hmpo_foursite;
48template<
typename MODEL>
68template<
typename MODEL>
80 :
UU(UU_input),
U(U_input),
VUMPS(VUMPS_input),
x(x_input),
y(y_input),
VERB(VERB_input)
82 assert(
UU.rows() ==
UU.cols());
83 L =
static_cast<size_t>(
UU.rows());
89 for (
int i=0; i<
L; ++i)
98 Lred = *std::max_element(
x.begin(),
x.end())+1;
113 assert(
UU.rows() ==
UU.cols());
114 L =
static_cast<size_t>(
UU.rows());
120 for (
int i=0; i<
L; ++i)
129 Lred = *std::max_element(
x.begin(),
x.end())+1;
130 lout <<
"Lred=" <<
Lred << endl;
140 template<
class Dummy =
typename MODEL::Symmetry>
141 typename std::enable_if<Dummy::IS_SPIN_SU2(),
void>::type
compute_raw();
143 template<
class Dummy =
typename MODEL::Symmetry>
144 typename std::enable_if<!Dummy::IS_SPIN_SU2(),
void>::type
compute_raw();
146 template<
class Dummy =
typename MODEL::Symmetry>
147 typename std::enable_if<Dummy::IS_SPIN_SU2(),
void>::type
compute_MPO();
149 template<
class Dummy =
typename MODEL::Symmetry>
150 typename std::enable_if<!Dummy::IS_SPIN_SU2(),
void>::type
compute_MPO();
155 MODEL
sum_all(
const ArrayXXcd &hopping)
const;
172 map<tuple<int,int,int,int>,
typename MODEL::Scalar_>
Umap;
185template<
typename MODEL>
190 ss <<
"HubbardKspace:" << endl;
191 ss <<
"#spin_exchange: " << Raw.spin_exchange.size()+Raw.density_density.size() << endl;
192 ss <<
"#corr_hopping: " << Raw.corr_hopping.size()+Raw.corr_hoppingB.size() << endl;
193 ss <<
"#pair_hopping: " << Raw.pair_hopping.size() << endl;
194 ss <<
"#nonlocal_spin: " << Raw.nonlocal_spin.size()+Raw.nonlocal_spinB.size() << endl;
195 ss <<
"#corr_hopping3: " << Raw.corr_hopping3.size()+Raw.corr_hopping3B.size() << endl;
196 ss <<
"#doublon_decay: " << Raw.doublon_decay.size() << endl;
197 ss <<
"#foursite: " << Raw.foursite.size() << endl;
198 ss <<
"#total: " << Raw.spin_exchange.size()+Raw.density_density.size()+Raw.corr_hopping.size()+Raw.corr_hoppingB.size()+Raw.pair_hopping.size()+Raw.nonlocal_spin.size()+Raw.nonlocal_spinB.size()+Raw.corr_hopping3.size()+Raw.corr_hopping3B.size()+Raw.doublon_decay.size()+Raw.foursite.size() <<endl;
202template<
typename MODEL>
203template<
typename Dummy>
207 vector<tuple<int,int,int,int> > terms_1site;
208 vector<tuple<int,int,int,int> > terms_2site;
209 vector<tuple<int,int,int,int> > terms_3site;
210 vector<tuple<int,int,int,int> > terms_4site;
213 for (
int k=0; k<L; ++k)
214 for (
int l=0; l<L; ++l)
215 for (
int m=0; m<L; ++m)
216 for (
int n=0; n<L; ++n)
224 complex<double> Uelement_ = 0.;
225 for (
int i=0; i<L; ++i)
227 Uelement_ += conj(UU(i,k))*UU(i,l)*conj(UU(i,m))*UU(i,n);
229 typename MODEL::Scalar_ Uelement;
230 if constexpr(is_same<typename MODEL::Scalar_,double>::value)
232 if (abs(Uelement_.imag()) > 1e-10)
234 lout << termcolor::red <<
"Warning: Non-zero imaginary part of transformed matrix element=" << Uelement_.imag() << termcolor::reset << endl;
236 Uelement = Uelement_.real();
240 Uelement = Uelement_;
242 if (abs(Uelement) > 1e-8)
244 auto Vklmn = make_tuple(k,l,m,n);
249 Umap[Vklmn] = U*Uelement;
253 terms_1site.push_back(Vklmn);
255 else if (s.size() == 2)
257 terms_2site.push_back(Vklmn);
259 else if (s.size() == 3)
261 terms_3site.push_back(Vklmn);
263 else if (s.size() == 4)
265 terms_4site.push_back(Vklmn);
274 for (
int t=0; t<terms_1site.size(); ++t)
276 size_t i = get<0>(terms_1site[t]);
277 Terms.HubbardU_kspace.push_back(make_tuple(i,real(Umap[make_tuple(i,i,i,i)])));
279 Hterms.HubbardU_kspace = Terms.HubbardU_kspace;
282 while (terms_2site.size() != 0)
284 for (
int t=0; t<terms_2site.size(); ++t)
286 int k1 = get<0>(terms_2site[t]);
287 int k2 = get<1>(terms_2site[t]);
288 int k3 = get<2>(terms_2site[t]);
289 int k4 = get<3>(terms_2site[t]);
291 if (k1==k4 and k2==k3 and k1!=k2)
296 auto Vijji = make_tuple(i,j,j,i);
297 auto Vjiij = make_tuple(j,i,i,j);
298 auto Viijj = make_tuple(i,i,j,j);
299 auto Vjjii = make_tuple(j,j,i,i);
301 Raw.spin_exchange.push_back(make_tuple(i,j,Umap[Vijji]));
304 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Vijji), terms_2site.end());
305 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Vjiij), terms_2site.end());
306 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Viijj), terms_2site.end());
307 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Vjjii), terms_2site.end());
310 else if (k1==k2 and k2==k3 and k1!=k4)
315 auto Viiij = make_tuple(i,i,i,j);
316 auto Vijii = make_tuple(i,j,i,i);
318 auto Viiji = make_tuple(i,i,j,i);
319 auto Vjiii = make_tuple(j,i,i,i);
321 Raw.corr_hopping.push_back(make_tuple(i,j,Umap[Viiij]));
324 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Vjiii), terms_2site.end());
325 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Vijii), terms_2site.end());
326 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Viiji), terms_2site.end());
327 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Viiij), terms_2site.end());
330 else if (k1==k3 and k2==k4 and k1!=k2)
335 auto Vijij = make_tuple(i,j,i,j);
336 auto Vjiji = make_tuple(j,i,j,i);
338 Raw.pair_hopping.push_back(make_tuple(i,j,Umap[Vijij]));
341 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Vijij), terms_2site.end());
342 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Vjiji), terms_2site.end());
349 while (terms_3site.size() != 0)
351 for (
int t=0; t<terms_3site.size(); ++t)
353 int k1 = get<0>(terms_3site[t]);
354 int k2 = get<1>(terms_3site[t]);
355 int k3 = get<2>(terms_3site[t]);
356 int k4 = get<3>(terms_3site[t]);
364 auto Viijk = make_tuple(i,i,j,k);
365 auto Viikj = make_tuple(i,i,k,j);
366 auto Vjkii = make_tuple(j,k,i,i);
367 auto Vkjii = make_tuple(k,j,i,i);
369 Raw.corr_hopping3.push_back(make_tuple(i,j,k,Umap[Viijk]));
372 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Viijk), terms_3site.end());
373 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Viikj), terms_3site.end());
374 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vjkii), terms_3site.end());
375 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vkjii), terms_3site.end());
384 auto Vijik = make_tuple(i,j,i,k);
385 auto Vikij = make_tuple(i,k,i,j);
386 auto Vjiki = make_tuple(j,i,k,i);
387 auto Vkiji = make_tuple(k,i,j,i);
389 Raw.doublon_decay.push_back(make_tuple(i,j,k,Umap[Vijik]));
392 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vijik), terms_3site.end());
393 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vikij), terms_3site.end());
394 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vjiki), terms_3site.end());
395 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vkiji), terms_3site.end());
404 auto Vijki = make_tuple(i,j,k,i);
405 auto Vkiij = make_tuple(k,i,i,j);
406 auto Vjiik = make_tuple(j,i,i,k);
407 auto Vikji = make_tuple(i,k,j,i);
409 Raw.nonlocal_spin.push_back(make_tuple(i,j,k,Umap[Vijki]));
412 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vijki), terms_3site.end());
413 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vkiij), terms_3site.end());
414 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vjiik), terms_3site.end());
415 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vikji), terms_3site.end());
422 while (terms_4site.size() != 0)
424 for (
int t=0; t<terms_4site.size(); ++t)
426 int k1 = get<0>(terms_4site[t]);
427 int k3 = get<1>(terms_4site[t]);
428 int k2 = get<2>(terms_4site[t]);
429 int k4 = get<3>(terms_4site[t]);
436 auto Vikjl = make_tuple(i,k,j,l);
437 auto Vjlik = make_tuple(j,l,i,k);
438 auto Vjkil = make_tuple(j,k,i,l);
439 auto Viljk = make_tuple(i,l,j,k);
441 auto Vkilj = make_tuple(k,i,l,j);
442 auto Vljki = make_tuple(l,j,k,i);
443 auto Vkjli = make_tuple(k,j,l,i);
444 auto Vlikj = make_tuple(l,i,k,j);
446 Raw.foursite.push_back(make_tuple(i,j,k,l,Umap[Vikjl]));
453 terms_4site.erase(std::remove(terms_4site.begin(), terms_4site.end(), Vikjl), terms_4site.end());
454 terms_4site.erase(std::remove(terms_4site.begin(), terms_4site.end(), Vjlik), terms_4site.end());
455 terms_4site.erase(std::remove(terms_4site.begin(), terms_4site.end(), Vjkil), terms_4site.end());
456 terms_4site.erase(std::remove(terms_4site.begin(), terms_4site.end(), Viljk), terms_4site.end());
458 terms_4site.erase(std::remove(terms_4site.begin(), terms_4site.end(), Vkilj), terms_4site.end());
459 terms_4site.erase(std::remove(terms_4site.begin(), terms_4site.end(), Vljki), terms_4site.end());
460 terms_4site.erase(std::remove(terms_4site.begin(), terms_4site.end(), Vkjli), terms_4site.end());
461 terms_4site.erase(std::remove(terms_4site.begin(), terms_4site.end(), Vlikj), terms_4site.end());
467template<
typename MODEL>
468template<
typename Dummy>
477 Terms.Hmpo_spin_exchange.resize(Raw.spin_exchange.size());
478 Terms.Hmpo_pair_hopping.resize(Raw.pair_hopping.size());
479 Terms.Hmpo_corr_hopping.resize(Raw.corr_hopping.size());
481 Hterms.H2_spin_exchange.resize(Raw.spin_exchange.size());
482 Hterms.H2_pair_hopping.resize(Raw.pair_hopping.size());
483 Hterms.H2_corr_hopping.resize(Raw.corr_hopping.size());
486 for (
int t=0; t<Raw.spin_exchange.size(); ++t)
488 int i = get<0>(Raw.spin_exchange[t]);
489 int j = get<1>(Raw.spin_exchange[t]);
490 double lambda = real(get<2>(Raw.spin_exchange[t]));
492 if (VERB>0) lout <<
"spin exchange: " << i <<
", " << j <<
", λ=" << lambda << endl;
495 auto SdagS = Hdummy.SdagS(x[i],x[j],y[i],y[j]); SdagS.scale(-2.*lambda);
496 Terms.Hmpo_spin_exchange[s] =
sum(Terms.Hmpo_spin_exchange[s],SdagS);
499 auto nn = Hdummy.nn(x[i],x[j],y[i],y[j]); nn.scale(0.5*lambda);
500 Terms.Hmpo_spin_exchange[s] =
sum(Terms.Hmpo_spin_exchange[s],nn);
501 Hterms.H2_spin_exchange[s] = MODEL(Terms.Hmpo_spin_exchange[s],dummy_params);
502 s = (s+1)%Terms.Hmpo_spin_exchange.size();
506 for (
int t=0; t<Raw.corr_hopping.size(); ++t)
508 int i = get<0>(Raw.corr_hopping[t]);
509 int j = get<1>(Raw.corr_hopping[t]);
510 typename MODEL::Scalar_ lambda = get<2>(Raw.corr_hopping[t]);
514 auto T1 = Hdummy.cdagn_c(x[i],x[j],y[i],y[j]); T1.scale(lambda);
515 auto T2 = Hdummy.cdag_nc(x[j],x[i],y[j],y[i]); T2.scale(
conjIfcomplex(lambda));
516 auto Term =
sum(T1,T2);
518 if (VERB>0) lout <<
"corr_hopping: " << i <<
", " << j <<
", lambda=" << lambda << endl;
520 Terms.Hmpo_corr_hopping[s] =
sum(Terms.Hmpo_corr_hopping[s],Term);
521 Hterms.H2_corr_hopping[s] = MODEL(Terms.Hmpo_corr_hopping[s],dummy_params);
522 s = (s+1)%Terms.Hmpo_corr_hopping.size();
526 for (
int t=0; t<Raw.pair_hopping.size(); ++t)
528 int i = get<0>(Raw.pair_hopping[t]);
529 int j = get<1>(Raw.pair_hopping[t]);
530 typename MODEL::Scalar_ lambda = get<2>(Raw.pair_hopping[t]);
534 lout <<
"pair hopping: " << i <<
", " << j <<
", λ=" << lambda <<
", Q="
535 << Hdummy.cdagcdag(x[i],y[i]).Qtarget() <<
", "
536 << Hdummy.cc(x[j],y[j]).Qtarget()
542 auto T1 =
prod(Hdummy.cdagcdag(x[i],y[i]),Hdummy.cc(x[j],y[j])); T1.scale(lambda);
543 auto T2 =
prod(Hdummy.cdagcdag(x[j],y[j]),Hdummy.cc(x[i],y[i])); T2.scale(
conjIfcomplex(lambda));
544 auto Term =
sum(T1,T2);
546 Terms.Hmpo_pair_hopping[s] =
sum(Terms.Hmpo_pair_hopping[s],Term);
547 Hterms.H2_pair_hopping[s] = MODEL(Terms.Hmpo_pair_hopping[s],dummy_params);
548 s = (s+1)%Terms.Hmpo_pair_hopping.size();
551 Terms.Hmpo_corr_hopping3.resize(Raw.corr_hopping3.size());
552 Terms.Hmpo_nonlocal_spin.resize(Raw.nonlocal_spin.size());
553 Terms.Hmpo_doublon_decay.resize(Raw.doublon_decay.size());
555 Hterms.H3_corr_hopping3.resize(Raw.corr_hopping3.size());
556 Hterms.H3_nonlocal_spin.resize(Raw.nonlocal_spin.size());
557 Hterms.H3_doublon_decay.resize(Raw.doublon_decay.size());
560 for (
int t=0; t<Raw.corr_hopping3.size(); ++t)
562 int i = get<0>(Raw.corr_hopping3[t]);
563 int j = get<1>(Raw.corr_hopping3[t]);
564 int k = get<2>(Raw.corr_hopping3[t]);
565 typename MODEL::Scalar_ lambda = get<3>(Raw.corr_hopping3[t]);
569 auto T1 =
prod(Hdummy.n(x[i],y[i]), Hdummy.cdagc(x[j],x[k],y[j],y[k])); T1.scale(0.5*lambda);
570 auto T2 =
prod(Hdummy.cdagc(x[k],x[j],y[k],y[j]), Hdummy.n(x[i],y[i])); T2.scale(0.5*
conjIfcomplex(lambda));
571 auto Term =
sum(T1,T2);
572 Terms.Hmpo_corr_hopping3[s] =
sum(Terms.Hmpo_corr_hopping3[s],Term);
573 Hterms.H3_corr_hopping3[s] = MODEL(Terms.Hmpo_corr_hopping3[s],dummy_params);
574 s = (s+1)%Terms.Hmpo_corr_hopping3.size();
578 for (
int t=0; t<Raw.nonlocal_spin.size(); ++t)
580 int i = get<0>(Raw.nonlocal_spin[t]);
581 int j = get<1>(Raw.nonlocal_spin[t]);
582 int k = get<2>(Raw.nonlocal_spin[t]);
583 typename MODEL::Scalar_ lambda = get<3>(Raw.nonlocal_spin[t]);
585 double factor = sqrt(2)*sqrt(3)*sqrt(3);
588 auto T1 =
prod(Hdummy.S(x[i],y[i],factor), Hdummy.cdagc3(x[j],x[k],y[j],y[k])); T1.scale(lambda);
589 auto T2 =
prod(Hdummy.cdagc3(x[k],x[j],y[k],y[j]), Hdummy.Sdag(x[i],y[i],factor)); T2.scale(
conjIfcomplex(lambda));
590 auto Term =
sum(T1,T2);
591 Terms.Hmpo_nonlocal_spin[s] =
sum(Terms.Hmpo_nonlocal_spin[s],Term);
592 Hterms.H3_nonlocal_spin[s] = MODEL(Terms.Hmpo_nonlocal_spin[s],dummy_params);
602 s = (s+1)%Terms.Hmpo_nonlocal_spin.size();
606 for (
int t=0; t<Raw.doublon_decay.size(); ++t)
608 int i = get<0>(Raw.doublon_decay[t]);
609 int j = get<1>(Raw.doublon_decay[t]);
610 int k = get<2>(Raw.doublon_decay[t]);
611 typename MODEL::Scalar_ lambda = get<3>(Raw.doublon_decay[t]);
615 lout <<
"doublon decay: cdagcdag_" << i <<
", cc1_" << j <<
"_" << k <<
", λ=" << lambda <<
", Q="
616 << Hdummy.cdagcdag(x[i],y[i]).Qtarget() <<
", "
617 << Hdummy.cc1(x[j],x[k],y[j],y[k]).Qtarget()
623 auto T1 =
prod(Hdummy.cdagcdag(x[i],y[i]), Hdummy.cc1(x[j],x[k],y[j],y[k])); T1.scale(lambda);
624 auto T2 =
prod(Hdummy.cdagcdag1(x[j],x[k],y[j],y[k]), Hdummy.cc(x[i],y[i])); T2.scale(
conjIfcomplex(lambda));
625 auto Term =
diff(T2,T1);
626 Terms.Hmpo_doublon_decay[s] =
sum(Terms.Hmpo_doublon_decay[s],Term);
627 Hterms.H3_doublon_decay[s] = MODEL(Terms.Hmpo_doublon_decay[s],dummy_params);
628 s = (s+1)%Terms.Hmpo_doublon_decay.size();
631 Terms.Hmpo_foursite.resize(Raw.foursite.size());
633 Hterms.H4.resize(Raw.foursite.size());
636 for (
int t=0; t<Raw.foursite.size(); ++t)
638 int i = get<0>(Raw.foursite[t]);
639 int j = get<1>(Raw.foursite[t]);
640 int k = get<2>(Raw.foursite[t]);
641 int l = get<3>(Raw.foursite[t]);
642 typename MODEL::Scalar_ lambda = get<4>(Raw.foursite[t]);
646 lout <<
"foursite: " << i <<
", " << j <<
", " << k <<
", " << l <<
", λ=" << lambda <<
", Q="
647 << Hdummy.cdagcdag1(x[i],x[j],y[i],y[j]).Qtarget() <<
", "
648 << Hdummy.cc1(x[k],x[l],y[k],y[l]).Qtarget() <<
", "
649 << Hdummy.cdagcdag1(x[l],x[k],y[l],y[k]).Qtarget() <<
", "
650 << Hdummy.cc1(x[j],x[i],y[j],y[i]).Qtarget()
656 auto T1 =
prod(Hdummy.cdagcdag1(x[i],x[j],y[i],y[j]), Hdummy.cc1(x[k],x[l],y[k],y[l])); T1.scale(-lambda);
657 auto T2 =
prod(Hdummy.cdagcdag1(x[l],x[k],y[l],y[k]), Hdummy.cc1(x[j],x[i],y[j],y[i])); T2.scale(-
conjIfcomplex(lambda));
658 auto Term =
sum(T1,T2);
660 Terms.Hmpo_foursite[s] =
sum(Terms.Hmpo_foursite[s],Term);
661 Hterms.H4[s] = MODEL(Terms.Hmpo_foursite[s],dummy_params);
662 s = (s+1)%Terms.Hmpo_foursite.size();
666template<
typename MODEL>
667template<
typename Dummy>
671 vector<tuple<int,int,int,int> > terms_1site;
672 vector<tuple<int,int,int,int> > terms_2site;
673 vector<tuple<int,int,int,int> > terms_3site;
674 vector<tuple<int,int,int,int> > terms_4site;
677 for (
int k=0; k<L; ++k)
678 for (
int l=0; l<L; ++l)
679 for (
int m=0; m<L; ++m)
680 for (
int n=0; n<L; ++n)
688 complex<double> Uelement_ = 0.;
689 for (
int i=0; i<L; ++i)
691 Uelement_ += conj(UU(i,k))*UU(i,l)*conj(UU(i,m))*UU(i,n);
693 typename MODEL::Scalar_ Uelement;
694 if constexpr(is_same<typename MODEL::Scalar_,double>::value)
696 if (abs(Uelement_.imag()) > 1e-10)
698 lout << termcolor::red <<
"Warning: Non-zero imaginary part of transformed matrix element=" << Uelement_.imag() << termcolor::reset << endl;
700 Uelement = Uelement_.real();
704 Uelement = Uelement_;
706 if (abs(Uelement) > 1e-8)
708 auto Vklmn = make_tuple(k,l,m,n);
709 Umap[Vklmn] = U*Uelement;
713 terms_1site.push_back(Vklmn);
715 else if (s.size() == 2)
717 terms_2site.push_back(Vklmn);
719 else if (s.size() == 3)
721 terms_3site.push_back(Vklmn);
723 else if (s.size() == 4)
725 terms_4site.push_back(Vklmn);
734 for (
int t=0; t<terms_1site.size(); ++t)
736 size_t i = get<0>(terms_1site[t]);
737 Terms.HubbardU_kspace.push_back(make_tuple(i,real(Umap[make_tuple(i,i,i,i)])));
739 Hterms.HubbardU_kspace = Terms.HubbardU_kspace;
742 while (terms_2site.size() != 0)
744 for (
int t=0; t<terms_2site.size(); ++t)
746 int k1 = get<0>(terms_2site[t]);
747 int k2 = get<1>(terms_2site[t]);
748 int k3 = get<2>(terms_2site[t]);
749 int k4 = get<3>(terms_2site[t]);
751 if (k1==k4 and k2==k3)
756 auto Vijji = make_tuple(i,j,j,i);
757 auto Vjiij = make_tuple(j,i,i,j);
759 Raw.spin_exchange.push_back(make_tuple(i,j,Umap[Vijji]));
762 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Vijji), terms_2site.end());
763 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Vjiij), terms_2site.end());
766 else if (k1==k2 and k3==k4)
771 auto Viijj = make_tuple(i,i,j,j);
773 Raw.density_density.push_back(make_tuple(i,j,Umap[Viijj]));
776 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Viijj), terms_2site.end());
779 else if (k1==k2 and k2==k3)
784 auto Viiij = make_tuple(i,i,i,j);
785 auto Viiji = make_tuple(i,i,j,i);
787 Raw.corr_hopping.push_back(make_tuple(i,j,Umap[Viiij]));
790 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Viiij), terms_2site.end());
791 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Viiji), terms_2site.end());
794 else if (k1==k3 and k3==k4)
799 auto Vijii = make_tuple(i,j,i,i);
800 auto Vjiii = make_tuple(j,i,i,i);
802 Raw.corr_hoppingB.push_back(make_tuple(i,j,Umap[Vijii]));
805 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Vijii), terms_2site.end());
806 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Vjiii), terms_2site.end());
809 else if (k1==k3 and k2==k4)
814 auto Vijij = make_tuple(i,j,i,j);
815 auto Vjiji = make_tuple(j,i,j,i);
817 Raw.pair_hopping.push_back(make_tuple(i,j,Umap[Vijij]));
820 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Vijij), terms_2site.end());
821 terms_2site.erase(std::remove(terms_2site.begin(), terms_2site.end(), Vjiji), terms_2site.end());
832 while (terms_3site.size() != 0)
834 for (
int t=0; t<terms_3site.size(); ++t)
836 int k1 = get<0>(terms_3site[t]);
837 int k2 = get<1>(terms_3site[t]);
838 int k3 = get<2>(terms_3site[t]);
839 int k4 = get<3>(terms_3site[t]);
848 auto Viijk = make_tuple(i,i,j,k);
849 auto Viikj = make_tuple(i,i,k,j);
851 Raw.corr_hopping3.push_back(make_tuple(i,j,k,Umap[Viijk]));
854 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Viijk), terms_3site.end());
855 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Viikj), terms_3site.end());
864 auto Vijkk = make_tuple(i,j,k,k);
865 auto Vjikk = make_tuple(j,i,k,k);
867 Raw.corr_hopping3B.push_back(make_tuple(i,j,k,Umap[Vijkk]));
870 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vijkk), terms_3site.end());
871 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vjikk), terms_3site.end());
880 auto Vijki = make_tuple(i,j,k,i);
881 auto Vjiik = make_tuple(j,i,i,k);
883 Raw.nonlocal_spin.push_back(make_tuple(i,j,k,Umap[Vijki]));
886 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vijki), terms_3site.end());
887 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vjiik), terms_3site.end());
896 auto Vijjk = make_tuple(i,j,j,k);
897 auto Vjikj = make_tuple(j,i,k,j);
899 Raw.nonlocal_spinB.push_back(make_tuple(i,j,k,Umap[Vijjk]));
902 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vijjk), terms_3site.end());
903 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vjikj), terms_3site.end());
912 auto Vijik = make_tuple(i,j,i,k);
913 auto Vjiki = make_tuple(j,i,k,i);
915 Raw.doublon_decay.push_back(make_tuple(i,j,k,Umap[Vijik]));
918 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vijik), terms_3site.end());
919 terms_3site.erase(std::remove(terms_3site.begin(), terms_3site.end(), Vjiki), terms_3site.end());
930 while (terms_4site.size() != 0)
932 for (
int t=0; t<terms_4site.size(); ++t)
934 int k1 = get<0>(terms_4site[t]);
935 int k2 = get<1>(terms_4site[t]);
936 int k3 = get<2>(terms_4site[t]);
937 int k4 = get<3>(terms_4site[t]);
944 auto Vijkl = make_tuple(i,j,k,l);
945 auto Vjilk = make_tuple(j,i,l,k);
947 Raw.foursite.push_back(make_tuple(i,j,k,l,Umap[Vijkl]));
948 lout <<
"i=" << i <<
", j=" << j <<
", k=" << k <<
", l=" << l <<
", 4s: " <<
"Vikjl=" << Umap[Vijkl] <<
", Vjilk=" << Umap[Vjilk] << endl;
950 terms_4site.erase(std::remove(terms_4site.begin(), terms_4site.end(), Vijkl), terms_4site.end());
951 terms_4site.erase(std::remove(terms_4site.begin(), terms_4site.end(), Vjilk), terms_4site.end());
957template<
typename MODEL>
958template<
typename Dummy>
965 for (
int t=0; t<Raw.spin_exchange.size(); ++t)
967 int i = get<0>(Raw.spin_exchange[t]);
968 int j = get<1>(Raw.spin_exchange[t]);
969 typename MODEL::Scalar_ lambda = get<2>(Raw.spin_exchange[t]);
971 OPERATOR hop1 =
prod(Hdummy.template cdagc<UP,UP>(i,j),Hdummy.template cdagc<DN,DN>(j,i)); hop1.scale(lambda);
972 OPERATOR hop2 =
prod(Hdummy.template cdagc<UP,UP>(j,i),Hdummy.template cdagc<DN,DN>(i,j)); hop2.scale(conj(lambda));
973 OPERATOR hop12 =
sum(hop1,hop2);
975 Terms.Hmpo_spin_exchange.push_back(hop12);
976 Hterms.H2_spin_exchange.push_back(MODEL(hop12,dummy_params));
978 for (
int t=0; t<Raw.density_density.size(); ++t)
980 int i = get<0>(Raw.density_density[t]);
981 int j = get<1>(Raw.density_density[t]);
982 double lambda = real(get<2>(Raw.density_density[t]));
984 OPERATOR hop12 =
prod(Hdummy.template n<UP>(i),Hdummy.template n<DN>(j)); hop12.scale(lambda);
986 Terms.Hmpo_spin_exchange.push_back(hop12);
987 Hterms.H2_spin_exchange.push_back(MODEL(hop12,dummy_params));
989 for (
int t=0; t<Raw.corr_hopping.size(); ++t)
991 int i = get<0>(Raw.corr_hopping[t]);
992 int j = get<1>(Raw.corr_hopping[t]);
993 typename MODEL::Scalar_ lambda = get<2>(Raw.corr_hopping[t]);
995 OPERATOR hop1 =
prod(Hdummy.template n<UP>(i),Hdummy.template cdagc<DN,DN>(i,j)); hop1.scale(lambda);
996 OPERATOR hop2 =
prod(Hdummy.template n<UP>(i),Hdummy.template cdagc<DN,DN>(j,i)); hop2.scale(conj(lambda));
997 OPERATOR hop12 =
sum(hop1,hop2);
999 Terms.Hmpo_corr_hopping.push_back(hop12);
1000 Hterms.H2_corr_hopping.push_back(MODEL(hop12,dummy_params));
1002 for (
int t=0; t<Raw.corr_hoppingB.size(); ++t)
1004 int i = get<0>(Raw.corr_hoppingB[t]);
1005 int j = get<1>(Raw.corr_hoppingB[t]);
1006 typename MODEL::Scalar_ lambda = get<2>(Raw.corr_hoppingB[t]);
1008 OPERATOR hop1 =
prod(Hdummy.template cdagc<UP,UP>(i,j),Hdummy.template n<DN>(i)); hop1.scale(lambda);
1009 OPERATOR hop2 =
prod(Hdummy.template cdagc<UP,UP>(j,i),Hdummy.template n<DN>(i)); hop2.scale(conj(lambda));
1010 OPERATOR hop12 =
sum(hop1,hop2);
1012 Terms.Hmpo_corr_hopping.push_back(hop12);
1013 Hterms.H2_corr_hopping.push_back(MODEL(hop12,dummy_params));
1015 for (
int t=0; t<Raw.pair_hopping.size(); ++t)
1017 int i = get<0>(Raw.pair_hopping[t]);
1018 int j = get<1>(Raw.pair_hopping[t]);
1019 typename MODEL::Scalar_ lambda = get<2>(Raw.pair_hopping[t]);
1021 OPERATOR hop1 =
prod(Hdummy.template cdagc<UP,UP>(i,j),Hdummy.template cdagc<DN,DN>(i,j)); hop1.scale(lambda);
1022 OPERATOR hop2 =
prod(Hdummy.template cdagc<UP,UP>(j,i),Hdummy.template cdagc<DN,DN>(j,i)); hop2.scale(conj(lambda));
1023 OPERATOR hop12 =
sum(hop1,hop2);
1025 Terms.Hmpo_pair_hopping.push_back(hop12);
1026 Hterms.H2_pair_hopping.push_back(MODEL(hop12,dummy_params));
1029 for (
int t=0; t<Raw.corr_hopping3.size(); ++t)
1031 int i = get<0>(Raw.corr_hopping3[t]);
1032 int j = get<1>(Raw.corr_hopping3[t]);
1033 int k = get<2>(Raw.corr_hopping3[t]);
1034 typename MODEL::Scalar_ lambda = get<3>(Raw.corr_hopping3[t]);
1036 OPERATOR hop1 =
prod(Hdummy.template n<UP>(i),Hdummy.template cdagc<DN,DN>(j,k)); hop1.scale(lambda);
1037 OPERATOR hop2 =
prod(Hdummy.template n<UP>(i),Hdummy.template cdagc<DN,DN>(k,j)); hop2.scale(conj(lambda));
1038 OPERATOR hop12 =
sum(hop1,hop2);
1040 Terms.Hmpo_corr_hopping3.push_back(hop12);
1041 Hterms.H3_corr_hopping3.push_back(MODEL(hop12,dummy_params));
1043 for (
int t=0; t<Raw.corr_hopping3B.size(); ++t)
1045 int i = get<0>(Raw.corr_hopping3B[t]);
1046 int j = get<1>(Raw.corr_hopping3B[t]);
1047 int k = get<2>(Raw.corr_hopping3B[t]);
1048 typename MODEL::Scalar_ lambda = get<3>(Raw.corr_hopping3B[t]);
1050 OPERATOR hop1 =
prod(Hdummy.template cdagc<UP,UP>(i,j),Hdummy.template n<DN>(k)); hop1.scale(lambda);
1051 OPERATOR hop2 =
prod(Hdummy.template cdagc<UP,UP>(j,i),Hdummy.template n<DN>(k)); hop2.scale(conj(lambda));
1052 OPERATOR hop12 =
sum(hop1,hop2);
1054 Terms.Hmpo_corr_hopping3.push_back(hop12);
1055 Hterms.H3_corr_hopping3.push_back(MODEL(hop12,dummy_params));
1057 for (
int t=0; t<Raw.nonlocal_spin.size(); ++t)
1059 int i = get<0>(Raw.nonlocal_spin[t]);
1060 int j = get<1>(Raw.nonlocal_spin[t]);
1061 int k = get<2>(Raw.nonlocal_spin[t]);
1062 typename MODEL::Scalar_ lambda = get<3>(Raw.nonlocal_spin[t]);
1064 OPERATOR hop1 =
prod(Hdummy.template cdagc<UP,UP>(i,j),Hdummy.template cdagc<DN,DN>(k,i)); hop1.scale(lambda);
1065 OPERATOR hop2 =
prod(Hdummy.template cdagc<UP,UP>(j,i),Hdummy.template cdagc<DN,DN>(i,k)); hop2.scale(conj(lambda));
1066 OPERATOR hop12 =
sum(hop1,hop2);
1068 Terms.Hmpo_nonlocal_spin.push_back(hop12);
1069 Hterms.H3_nonlocal_spin.push_back(MODEL(hop12,dummy_params));
1071 for (
int t=0; t<Raw.nonlocal_spinB.size(); ++t)
1073 int i = get<0>(Raw.nonlocal_spinB[t]);
1074 int j = get<1>(Raw.nonlocal_spinB[t]);
1075 int k = get<2>(Raw.nonlocal_spinB[t]);
1076 typename MODEL::Scalar_ lambda = get<3>(Raw.nonlocal_spinB[t]);
1078 OPERATOR hop1 =
prod(Hdummy.template cdagc<UP,UP>(i,j),Hdummy.template cdagc<DN,DN>(j,k)); hop1.scale(lambda);
1079 OPERATOR hop2 =
prod(Hdummy.template cdagc<UP,UP>(j,i),Hdummy.template cdagc<DN,DN>(k,j)); hop2.scale(conj(lambda));
1080 OPERATOR hop12 =
sum(hop1,hop2);
1082 Terms.Hmpo_nonlocal_spin.push_back(hop12);
1083 Hterms.H3_nonlocal_spin.push_back(MODEL(hop12,dummy_params));
1085 for (
int t=0; t<Raw.doublon_decay.size(); ++t)
1087 int i = get<0>(Raw.doublon_decay[t]);
1088 int j = get<1>(Raw.doublon_decay[t]);
1089 int k = get<2>(Raw.doublon_decay[t]);
1090 typename MODEL::Scalar_ lambda = get<3>(Raw.doublon_decay[t]);
1092 OPERATOR hop1 =
prod(Hdummy.template cdagc<UP,UP>(i,j),Hdummy.template cdagc<DN,DN>(i,k)); hop1.scale(lambda);
1093 OPERATOR hop2 =
prod(Hdummy.template cdagc<UP,UP>(j,i),Hdummy.template cdagc<DN,DN>(k,i)); hop2.scale(conj(lambda));
1094 OPERATOR hop12 =
sum(hop1,hop2);
1096 Terms.Hmpo_doublon_decay.push_back(hop12);
1097 Hterms.H3_doublon_decay.push_back(MODEL(hop12,dummy_params));
1100 for (
int t=0; t<Raw.foursite.size(); ++t)
1102 int i = get<0>(Raw.foursite[t]);
1103 int j = get<1>(Raw.foursite[t]);
1104 int k = get<2>(Raw.foursite[t]);
1105 int l = get<3>(Raw.foursite[t]);
1106 typename MODEL::Scalar_ lambda = get<4>(Raw.foursite[t]);
1108 OPERATOR hop1 =
prod(Hdummy.template cdagc<UP,UP>(i,j),Hdummy.template cdagc<DN,DN>(k,l)); hop1.scale(lambda);
1109 OPERATOR hop2 =
prod(Hdummy.template cdagc<UP,UP>(j,i),Hdummy.template cdagc<DN,DN>(l,k)); hop2.scale(conj(lambda));
1110 OPERATOR hop12 =
sum(hop1,hop2);
1112 Terms.Hmpo_foursite.push_back(hop12);
1113 Hterms.H4.push_back(MODEL(hop12,dummy_params));
1254 Hterms.HubbardU_kspace = Terms.HubbardU_kspace;
1257template<
typename MODEL>
1261 auto res = Terms.Hmpo_spin_exchange[0];
1263 for (
int s=1; s<Terms.Hmpo_spin_exchange.size(); ++s) res =
sum(res,Terms.Hmpo_spin_exchange[s]);
1264 for (
int s=0; s<Terms.Hmpo_density_density.size(); ++s) res =
sum(res,Terms.Hmpo_density_density[s]);
1265 for (
int s=0; s<Terms.Hmpo_pair_hopping.size(); ++s) res =
sum(res,Terms.Hmpo_pair_hopping[s]);
1266 for (
int s=0; s<Terms.Hmpo_corr_hopping.size(); ++s) res =
sum(res,Terms.Hmpo_corr_hopping[s]);
1267 for (
int s=0; s<Terms.Hmpo_corr_hopping3.size(); ++s) res =
sum(res,Terms.Hmpo_corr_hopping3[s]);
1268 for (
int s=0; s<Terms.Hmpo_nonlocal_spin.size(); ++s) res =
sum(res,Terms.Hmpo_nonlocal_spin[s]);
1269 for (
int s=0; s<Terms.Hmpo_doublon_decay.size(); ++s) res =
sum(res,Terms.Hmpo_doublon_decay[s]);
1270 for (
int s=0; s<Terms.Hmpo_foursite.size(); ++s) res =
sum(res,Terms.Hmpo_foursite[s]);
1272 return MODEL(res,dummy_params);
1275template<
typename MODEL>
1277sum_all (
const ArrayXXcd &hoppingRealSpace)
const
1279 ArrayXXcd hopping = (UU.adjoint() * hoppingRealSpace.matrix() * UU).array();
1282 auto [i,Uval] = Terms.HubbardU_kspace[0];
1287 for (
int t=1; t<Terms.HubbardU_kspace.size(); ++t)
1289 auto [i,Uval] = Terms.HubbardU_kspace[t];
1292 res =
sum(res,dtmp);
1295 for (
int i=0; i<L; ++i)
1296 for (
int j=0; j<L; ++j)
1298 if (abs(hopping(i,j)) > 1e-10)
1303 ntmp.
scale(-hopping(i,i));
1304 res =
sum(res,ntmp);
1310 htmp = Hdummy.cdagc(x[i], x[j], y[i], y[j]); htmp.
scale(-hopping(i,j));
1311 res =
sum(res,htmp);
1319 for (
int s=0; s<Terms.Hmpo_spin_exchange.size(); ++s) res =
sum(res,Terms.Hmpo_spin_exchange[s]);
1320 for (
int s=0; s<Terms.Hmpo_density_density.size(); ++s) res =
sum(res,Terms.Hmpo_density_density[s]);
1321 for (
int s=0; s<Terms.Hmpo_pair_hopping.size(); ++s) res =
sum(res,Terms.Hmpo_pair_hopping[s]);
1322 for (
int s=0; s<Terms.Hmpo_corr_hopping.size(); ++s) res =
sum(res,Terms.Hmpo_corr_hopping[s]);
1323 for (
int s=0; s<Terms.Hmpo_corr_hopping3.size(); ++s) res =
sum(res,Terms.Hmpo_corr_hopping3[s]);
1324 for (
int s=0; s<Terms.Hmpo_nonlocal_spin.size(); ++s) res =
sum(res,Terms.Hmpo_nonlocal_spin[s]);
1325 for (
int s=0; s<Terms.Hmpo_doublon_decay.size(); ++s) res =
sum(res,Terms.Hmpo_doublon_decay[s]);
1326 for (
int s=0; s<Terms.Hmpo_foursite.size(); ++s) res =
sum(res,Terms.Hmpo_foursite[s]);
1328 return MODEL(res,dummy_params);
1331template<
typename MODEL>
1335 auto res = Terms.Hmpo_spin_exchange[0];
1337 for (
int s=1; s<Terms.Hmpo_spin_exchange.size(); ++s) res =
sum(res,Terms.Hmpo_spin_exchange[s]);
1338 for (
int s=0; s<Terms.Hmpo_density_density.size(); ++s) res =
sum(res,Terms.Hmpo_density_density[s]);
1339 for (
int s=0; s<Terms.Hmpo_pair_hopping.size(); ++s) res =
sum(res,Terms.Hmpo_pair_hopping[s]);
1340 for (
int s=0; s<Terms.Hmpo_corr_hopping.size(); ++s) res =
sum(res,Terms.Hmpo_corr_hopping[s]);
1342 for (
int s=0; s<Terms.Hmpo_corr_hopping3.size(); ++s) res =
sum(res,Terms.Hmpo_corr_hopping3[s]);
1343 for (
int s=0; s<Terms.Hmpo_nonlocal_spin.size(); ++s) res =
sum(res,Terms.Hmpo_nonlocal_spin[s]);
1344 for (
int s=0; s<Terms.Hmpo_doublon_decay.size(); ++s) res =
sum(res,Terms.Hmpo_doublon_decay[s]);
1346 for (
int s=0; s<Terms.Hmpo_foursite.size(); ++s) res =
sum(res,Terms.Hmpo_foursite[s]);
1351template<
typename MODEL>
1355 auto res = Terms.Hmpo_spin_exchange[0];
1357 for (
int s=1; s<Terms.Hmpo_spin_exchange.size(); ++s) res =
sum(res,Terms.Hmpo_spin_exchange[s]);
1358 for (
int s=0; s<Terms.Hmpo_density_density.size(); ++s) res =
sum(res,Terms.Hmpo_density_density[s]);
1359 for (
int s=0; s<Terms.Hmpo_pair_hopping.size(); ++s) res =
sum(res,Terms.Hmpo_pair_hopping[s]);
1360 for (
int s=0; s<Terms.Hmpo_corr_hopping.size(); ++s) res =
sum(res,Terms.Hmpo_corr_hopping[s]);
1365template<
typename MODEL>
1369 auto res = Terms.Hmpo_spin_exchange[0];
1371 for (
int s=1; s<Terms.Hmpo_spin_exchange.size(); ++s) res =
sum(res,Terms.Hmpo_spin_exchange[s]);
1372 for (
int s=0; s<Terms.Hmpo_density_density.size(); ++s) res =
sum(res,Terms.Hmpo_density_density[s]);
1373 for (
int s=0; s<Terms.Hmpo_pair_hopping.size(); ++s) res =
sum(res,Terms.Hmpo_pair_hopping[s]);
1374 for (
int s=0; s<Terms.Hmpo_corr_hopping.size(); ++s) res =
sum(res,Terms.Hmpo_corr_hopping[s]);
1376 return MODEL(res,dummy_params);
1379template<
typename MODEL>
1383 auto res = Terms.Hmpo_spin_exchange[0];
1385 for (
int s=0; s<Terms.Hmpo_corr_hopping3.size(); ++s) res =
sum(res,Terms.Hmpo_corr_hopping3[s]);
1386 for (
int s=0; s<Terms.Hmpo_nonlocal_spin.size(); ++s) res =
sum(res,Terms.Hmpo_nonlocal_spin[s]);
1387 for (
int s=0; s<Terms.Hmpo_doublon_decay.size(); ++s) res =
sum(res,Terms.Hmpo_doublon_decay[s]);
1389 return MODEL(res,dummy_params);
1392template<
typename MODEL>
1396 auto res = Terms.Hmpo_spin_exchange[0];
1398 for (
int s=0; s<Terms.Hmpo_foursite.size(); ++s) res =
sum(res,Terms.Hmpo_foursite[s]);
1400 return MODEL(res,dummy_params);
Hamiltonian sum(const Hamiltonian &H1, const Hamiltonian &H2, DMRG::VERBOSITY::OPTION VERBOSITY=DMRG::VERBOSITY::SILENT)
Hamiltonian prod(const Hamiltonian &H1, const Hamiltonian &H2, const qarray< Hamiltonian::Symmetry::Nq > &Qtot=Hamiltonian::Symmetry::qvacuum(), DMRG::VERBOSITY::OPTION VERBOSITY=DMRG::VERBOSITY::SILENT)
Mpo< Symmetry, Scalar > diff(const Mpo< Symmetry, Scalar > &H1, const Mpo< Symmetry, Scalar > &H2, DMRG::VERBOSITY::OPTION VERBOSITY=DMRG::VERBOSITY::SILENT)
double conjIfcomplex(double x)
HubbardKspace(const MatrixXcd &UU_input, double U_input, DMRG::VERBOSITY::OPTION VERB_input=DMRG::VERBOSITY::SILENT, bool VUMPS_input=false, vector< int > x_input={}, vector< int > y_input={})
Mpo< typename MODEL::Symmetry, typename MODEL::Scalar_ > sum_all_mpo() const
KspaceHTerms< MODEL > get_Hterms() const
DMRG::VERBOSITY::OPTION VERB
vector< Param > dummy_params
HubbardKspace(const MatrixXcd &UU_input, double U_input, const vector< Param > ¶ms, DMRG::VERBOSITY::OPTION VERB_input=DMRG::VERBOSITY::SILENT, bool VUMPS_input=false, vector< int > x_input={}, vector< int > y_input={})
std::enable_if< Dummy::IS_SPIN_SU2(), void >::type compute_MPO()
KspaceRawTerms< typename MODEL::Scalar_ > Raw
map< tuple< int, int, int, int >, typename MODEL::Scalar_ > Umap
std::enable_if< Dummy::IS_SPIN_SU2(), void >::type compute_raw()
Mpo< typename MODEL::Symmetry, typename MODEL::Scalar_ > OPERATOR
KspaceMpoTerms< MODEL > Terms
Mpo< typename MODEL::Symmetry, typename MODEL::Scalar_ > sum_2site_mpo() const
KspaceHTerms< MODEL > Hterms
void scale(const Scalar factor, const Scalar offset=0., const std::size_t power=0ul, const double tolerance=1.e-14)
vector< MODEL > H3_doublon_decay
vector< MODEL > H2_corr_hopping
vector< MODEL > H2_pair_hopping
vector< tuple< size_t, double > > HubbardU_kspace
vector< MODEL > H3_corr_hopping3
vector< MODEL > H3_nonlocal_spin
vector< MODEL > H2_spin_exchange
vector< Mpo< typename MODEL::Symmetry, typename MODEL::Scalar_ > > Hmpo_foursite
vector< Mpo< typename MODEL::Symmetry, typename MODEL::Scalar_ > > Hmpo_pair_hopping
vector< Mpo< typename MODEL::Symmetry, typename MODEL::Scalar_ > > Hmpo_spin_exchange
vector< Mpo< typename MODEL::Symmetry, typename MODEL::Scalar_ > > Hmpo_density_density
vector< tuple< size_t, double > > HubbardU_kspace
vector< Mpo< typename MODEL::Symmetry, typename MODEL::Scalar_ > > Hmpo_corr_hopping
vector< Mpo< typename MODEL::Symmetry, typename MODEL::Scalar_ > > Hmpo_corr_hopping3
vector< Mpo< typename MODEL::Symmetry, typename MODEL::Scalar_ > > Hmpo_nonlocal_spin
vector< Mpo< typename MODEL::Symmetry, typename MODEL::Scalar_ > > Hmpo_doublon_decay
map< tuple< int, int, int, int >, Scalar > Umap
vector< tuple< int, int, int, Scalar > > doublon_decay
vector< tuple< int, int, int, int, Scalar > > foursite
vector< tuple< int, int, int, Scalar > > nonlocal_spin
vector< tuple< int, int, int, Scalar > > nonlocal_spinB
vector< tuple< int, int, Scalar > > spin_exchange
vector< tuple< int, int, Scalar > > density_density
vector< tuple< int, int, int, Scalar > > corr_hopping3
vector< tuple< int, int, Scalar > > pair_hopping
vector< tuple< int, int, Scalar > > corr_hopping
vector< tuple< int, int, int, Scalar > > corr_hopping3B
vector< tuple< int, int, Scalar > > corr_hoppingB