From 761e1fc5f7923452d10be7577ffc096cfbd7804e Mon Sep 17 00:00:00 2001 From: York Date: Tue, 24 Mar 2020 23:06:58 +0800 Subject: [PATCH 1/3] fix a bug --- src/blocked_tensor/blocked_tensor.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/blocked_tensor/blocked_tensor.cc b/src/blocked_tensor/blocked_tensor.cc index 53d2ec4..bfaa9b3 100644 --- a/src/blocked_tensor/blocked_tensor.cc +++ b/src/blocked_tensor/blocked_tensor.cc @@ -1534,13 +1534,12 @@ void LabeledBlockedTensor::contract_batched(const LabeledBlockedTensorBatchedPro batch_mo_space_keys = BlockedTensor::label_to_block_keys(batched_indices); } else { - std::vector pre_key; for (const std::vector &uik : unique_indices_keys) { std::vector term_key(uik.begin(), uik.begin() + batched_size); - if (pre_key != term_key) { + if (std::find(batch_mo_space_keys.begin(), batch_mo_space_keys.end(), term_key) == + batch_mo_space_keys.end()) { batch_mo_space_keys.push_back(term_key); - pre_key = term_key; } } } From e867ad8b38354f7499f0a1d166ad1ee5e513fe2c Mon Sep 17 00:00:00 2001 From: York Date: Tue, 24 Mar 2020 23:47:07 +0800 Subject: [PATCH 2/3] add the test case --- test/test_blocks.cc | 55 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/test/test_blocks.cc b/test/test_blocks.cc index b650781..37b00c4 100644 --- a/test/test_blocks.cc +++ b/test/test_blocks.cc @@ -2414,6 +2414,59 @@ double test_Oia_equal_Cbu_Guv_Tivab_expert() return diff_oo; } +double test_batched_incomplete_result_blocks_expert() { + BlockedTensor::set_expert_mode(true); + BlockedTensor::reset_mo_spaces(); + + std::vector core_mos{0, 1, 2}; + std::vector actv_mos{3, 4}; + std::vector virt_mos{5, 6, 7, 8, 9}; + + std::vector aux_mos{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; + + BlockedTensor::add_mo_space("c", "m,n", core_mos, NoSpin); + BlockedTensor::add_mo_space("a", "u,v", actv_mos, NoSpin); + BlockedTensor::add_mo_space("v", "e,f", virt_mos, NoSpin); + + BlockedTensor::add_composite_mo_space("h", "i,j,k,l", {"c", "a"}); + BlockedTensor::add_composite_mo_space("p", "a,b,c,d", {"a", "v"}); + BlockedTensor::add_composite_mo_space("g", "p,q,r,s", {"c", "a", "v"}); + + BlockedTensor::add_mo_space("L", "g", aux_mos, NoSpin); + + std::vector od_hhpp_blocks{"hhpv", "hhva", "hcaa", "caaa"}; + + auto B = BlockedTensor::build(tensor_type, "B", {"Lgg"}); + auto T2 = BlockedTensor::build(tensor_type, "T2", {"hhpp"}); + auto C2 = BlockedTensor::build(tensor_type, "C2", od_hhpp_blocks); + auto X2 = BlockedTensor::build(tensor_type, "X2", od_hhpp_blocks); + + auto init_random = [](BlockedTensor A) { + for (const std::string& block : A.block_labels()) { + std::vector& data = A.block(block).data(); + for (size_t i = 0, size = data.size(); i < size; ++i) { + data[i] = double(std::rand()) / double(RAND_MAX); + } + } + }; + + init_random(B); + init_random(T2); + init_random(C2); + X2["pqrs"] = C2["pqrs"]; + + C2["ijes"] += batched("e", B["gae"] * B["gbs"] * T2["ijab"]); + C2["ijus"] += batched("u", B["gau"] * B["gbs"] * T2["ijab"]); + C2["ijms"] += batched("m", B["gam"] * B["gbs"] * T2["ijab"]); + + X2["ijrs"] += batched("r,", B["gar"] * B["gbs"] * T2["ijab"]); + X2["pqrs"] -= C2["pqrs"]; + + BlockedTensor::set_expert_mode(false); + + return X2.norm(0); +} + int main(int argc, char *argv[]) { printf(ANSI_COLOR_RESET); @@ -2598,6 +2651,8 @@ int main(int argc, char *argv[]) std::make_tuple( kPass, test_Oia_equal_Cbu_Guv_Tivab_expert, "O[\"ia\"] = C[\"bu\"] * G[\"uv\"] * T[\"ivab\"]"), + std::make_tuple(kPass, test_batched_incomplete_result_blocks_expert, + "C[\"ijrs\"] = batched(\"r,\", B[\"gar\"] * B[\"gbs\"] * T[\"ijab\"])") }; std::vector> results; From 20365cbba480237f72456dbe9c8e20a034db94c3 Mon Sep 17 00:00:00 2001 From: York Date: Tue, 24 Mar 2020 23:54:21 +0800 Subject: [PATCH 3/3] change test description --- test/test_blocks.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_blocks.cc b/test/test_blocks.cc index 37b00c4..435c60a 100644 --- a/test/test_blocks.cc +++ b/test/test_blocks.cc @@ -2652,7 +2652,7 @@ int main(int argc, char *argv[]) kPass, test_Oia_equal_Cbu_Guv_Tivab_expert, "O[\"ia\"] = C[\"bu\"] * G[\"uv\"] * T[\"ivab\"]"), std::make_tuple(kPass, test_batched_incomplete_result_blocks_expert, - "C[\"ijrs\"] = batched(\"r,\", B[\"gar\"] * B[\"gbs\"] * T[\"ijab\"])") + "C[\"ijrs\"] += batched(\"r,\", B[\"gar\"] * B[\"gbs\"] * T[\"ijab\"])") }; std::vector> results;