From e18fc8248caf0fa0b0ecd5280a02ba1e15b0451b Mon Sep 17 00:00:00 2001
From: Thien Nguyen <nguyentm@ornl.gov>
Date: Tue, 12 Oct 2021 09:15:54 -0400
Subject: [PATCH] Need to re-create a placeholder tensor in the self process
 group after dereplicate

Signed-off-by: Thien Nguyen <nguyentm@ornl.gov>
---
 tnqvm/visitors/exatn-mps/ExaTnMpsVisitor.cpp | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/tnqvm/visitors/exatn-mps/ExaTnMpsVisitor.cpp b/tnqvm/visitors/exatn-mps/ExaTnMpsVisitor.cpp
index 50f5a36..8166a03 100644
--- a/tnqvm/visitors/exatn-mps/ExaTnMpsVisitor.cpp
+++ b/tnqvm/visitors/exatn-mps/ExaTnMpsVisitor.cpp
@@ -2110,9 +2110,14 @@ void ExatnMpsVisitor::applyTwoQubitGate(xacc::Instruction& in_gateInstruction)
           const bool checkRank =
               m_rightSharedProcessGroup->rankIsIn(m_rank + 1, &neighborRank);
           assert(checkRank);
+          const auto tensorShape = exatn::getTensor(qubitTensorName)->getShape();
           const bool dereplicateTensorOk = exatn::dereplicateTensorSync(
               *m_rightSharedProcessGroup, qubitTensorName, neighborRank);
           assert(dereplicateTensorOk);
+          auto recreated = exatn::createTensorSync(
+              *m_selfProcessGroup, qubitTensorName,
+              exatn::TensorElementType::COMPLEX64, tensorShape);
+          assert(recreated);
         }
     }
     else if (indexInRange(qMax, m_qubitRange))
-- 
GitLab