20 using BRanks =
typename Tb::Ranks;
22 auto const toleranceLocal =
27 [&](
auto const... seq)
30 MHNop.template core<seq>()...);
50 reshape<1, 1>(std::get<0>(psiphiA)) =
52 reshape<1, 1>(std::get<D>(psiphiA)) =
67 reshape<1, 1>(std::get<0>(psiphib)) =
69 reshape<1, 1>(std::get<D>(psiphib)) =
77 orthogonalize<pRC::Position::Right>(
x.template core<k>());
79 x.template core<k>() = q;
80 x.template core<k - 1>() =
81 contract<2, 0>(
x.template core<k - 1>(), l);
84 std::get<k>(psiphiA) =
85 contract<1, 2, 1, 3>(conj(
x.template core<k>()),
86 contract<2, 3, 1, 3>(op.template core<k>(),
87 eval(contract<2, 2>(
x.template core<k>(),
88 std::get<k + 1>(psiphiA)))));
90 std::get<k>(psiphib) =
91 contract<1, 2, 1, 2>(conj(
x.template core<k>()),
92 eval(contract<2, 1>(b.template core<k>(),
93 std::get<k + 1>(psiphib))));
104 auto const Ak = matricize(permute<0, 2, 4, 1, 3, 5>(
105 contract<1, 0>(std::get<k>(psiphiA),
106 eval(contract<3, 1>(op.template core<k>(),
107 std::get<k + 1>(psiphiA))))));
109 linearize(contract<1, 0>(std::get<k>(psiphib),
110 eval(contract<2, 1>(b.template core<k>(),
111 std::get<k + 1>(psiphib)))));
117 linearize(
x.template core<k>()), toleranceLocal);
120 auto const [q, r] = orthogonalize<pRC::Position::Left>(sol);
121 x.template core<k>() = q;
122 x.template core<k + 1>() =
123 contract<1, 0>(r,
x.template core<k + 1>());
126 std::get<k + 1>(psiphiA) =
127 contract<1, 0, 0, 3>(conj(
x.template core<k>()),
128 contract<2, 0, 0, 3>(op.template core<k>(),
129 eval(contract<0, 2>(
x.template core<k>(),
130 std::get<k>(psiphiA)))));
133 std::get<k + 1>(psiphib) =
134 contract<0, 1, 2, 0>(conj(
x.template core<k>()),
135 eval(contract<0, 1>(b.template core<k>(),
136 std::get<k>(psiphib))));
145 auto const Ak = matricize(permute<0, 2, 4, 1, 3, 5>(
146 contract<1, 0>(std::get<k>(psiphiA),
147 eval(contract<3, 1>(op.template core<k>(),
148 std::get<k + 1>(psiphiA))))));
150 linearize(contract<1, 0>(std::get<k>(psiphib),
151 eval(contract<2, 1>(b.template core<k>(),
152 std::get<k + 1>(psiphib)))));
158 linearize(
x.template core<k>()), toleranceLocal);
162 orthogonalize<pRC::Position::Right>(sol);
163 x.template core<k>() = q;
164 x.template core<k - 1>() =
165 contract<2, 0>(
x.template core<k - 1>(), l);
169 std::get<k>(psiphiA) =
170 contract<1, 2, 1, 3>(conj(
x.template core<k>()),
171 contract<2, 3, 1, 3>(op.template core<k>(),
172 eval(contract<2, 2>(
x.template core<k>(),
173 std::get<k + 1>(psiphiA)))));
176 std::get<k>(psiphib) =
177 contract<1, 2, 1, 2>(conj(
x.template core<k>()),
178 eval(contract<2, 1>(b.template core<k>(),
179 std::get<k + 1>(psiphib))));