SyTen

◆ genIINode() [2/2]

Tensor< 2 > syten::genIINode ( Basis const &  b1,
Basis const &  b2 
)

Generates a node with two incoming bases b1 and b2.

A dummy trivially transforming vacuum basis is created to join the two incoming bases.

–b1–→[ ] [ genIINode(b1, b2) ] (– dummy vacuum basis –→) –b2–→[ ]

Remarks
To build a proper IONode from an IINode and an OONode, you a) need to connect the two adjointed legs (or the two unadjointed legs) and b) connect either the two first legs or the two second legs. That is, given an incoming basis b, you need to use:

auto i = genIINode(b); // first leg: b, second leg: ba auto i = genIINode(b, b.adjointed()); // equivalent to the above auto o = genOONode(b.flipped()); // first leg: bf, second leg: bfa auto o = genOONode(b.flipped(), b.flippedAdjointed()); // equivalent to the above auto io = prod<1>(i, o, {-1, 1}, {-2, 1}); // connect two second legs and two adjointed legs!

Remarks
Combinations which connect the first to the second leg will lead to wrong minus signs for \( \mathrm{SU}(2) \) symmetries, combinations which connect an adjointed to an unadjointed leg will lead to empty tensors for \( \mathrm{U}(1) \) and \( \mathbb{Z}_k \) symmetries.

References syten::Basis::dir, Inc, kronVector(), syten::Basis::numSymmetries, syten::RepRegister::Decomp::productDecomp(), and SYTEN_ASSERT.

Referenced by syten::MPS::build_exchange_tensors_above(), syten::MPS::build_exchange_tensors_below(), syten::MPS::TEBD::build_local_T(), syten::MPS::dot(), syten::STensorImpl::gen_ii(), genIINode(), genOONode(), syten::IPEPS::genRandomCompleteState(), syten::Pyten::init_tensor(), syten::IPEPS::FullCTM::init_vac(), insertIOFullHalf(), insertIOSplitHalf(), syten::MPS::left_complement(), syten::IPEPS::mult(), syten::MPS::SwappableTEBD::split_rank6_into_mpos(), and syten::MPS::TDVP::Worker::sweepLeftTwoSite().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: