Commit dff88b81 authored by Nguyen, Thien Minh's avatar Nguyen, Thien Minh
Browse files

small update to support local single-site exp-val



Signed-off-by: default avatarThien Nguyen <nguyentm@ornl.gov>
parent 4da104a8
Loading
Loading
Loading
Loading
+29 −19
Original line number Diff line number Diff line
@@ -158,6 +158,13 @@ itensor::Index ITensorMPSVisitor::getSiteIndex(size_t site_id) {

double ITensorMPSVisitor::compute_expectation_z(
    const std::vector<size_t> &in_measureBits) {
  if (in_measureBits.size() == 1) {
    const auto site_idx = in_measureBits[0] + 1;
    auto ket = m_mps(site_idx);
    auto bra = itensor::dag(itensor::prime(ket, "Site"));
    auto Z_op = singleQubitTensor(getSiteIndex(site_idx), Z(in_measureBits[0]));
    return itensor::eltC(bra * Z_op * ket).real();
  } else {
    auto hamOp = xacc::container::contains(in_measureBits, 0)
                     ? singleQubitTensor(getSiteIndex(1), Z(0))
                     : singleQubitTensor(getSiteIndex(1), Identity(0));
@@ -181,6 +188,7 @@ double ITensorMPSVisitor::compute_expectation_z(
    auto bond_bra = itensor::dag(itensor::prime(bond_ket, "Site"));
    return itensor::eltC(bond_bra * hamOp * bond_ket).real();
  }
}

void ITensorMPSVisitor::finalize() {
  // Assign the exp-val-z (single Composite mode)
@@ -223,6 +231,8 @@ void ITensorMPSVisitor::applyTwoQubitGate(itensor::ITensor &in_gateTensor,
  // itensor::PrintData(wf);
  auto [U, S, V] = itensor::svd(wf, itensor::inds(m_mps(in_siteId1)),
                                {"Cutoff=", m_svdCutoff, "MaxDim=", m_maxDim});
  // std::cout << "Singular values:\n";
  // itensor::PrintData(S);
  m_mps.set(in_siteId1, U);
  m_mps.set(in_siteId2, S * V);
}