From 889866f166f8396fb4526bf5e4d35d5c88a22f60 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Thu, 8 Jul 2021 21:55:18 +0200 Subject: [PATCH] reg3:: subcubes:: optimized connection creation --- reg3.cpp | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/reg3.cpp b/reg3.cpp index a7be30bd..2357c069 100644 --- a/reg3.cpp +++ b/reg3.cpp @@ -664,6 +664,16 @@ EX namespace reg3 { tmatrices_cell.resize(isize(acells)); int failures = 0; + + vector > > > which_cell; + which_cell.resize(isize(allh)); + + for(cell *c: acells) { + int id = local_id[c].second; + for(int i=0; itype; i++) + which_cell[c->master->fieldval][bucketer(ss[id].face_centers[i])].emplace_back(c, i); + } + for(cell *c: acells) { int id = local_id[c].second; auto& tmcell = tmatrices_cell[local_id[c].first]; @@ -673,15 +683,18 @@ EX namespace reg3 { int found = 0; hyperpoint ctr = ss[id].face_centers[i]; for(auto& va: vertex_adjacencies[c->master->fieldval]) { - for(auto c1: acells_by_master[va.h_id]) if(va.move_sequence.size() || c != c1) { + hyperpoint ctr1 = iso_inverse(va.T) * ctr; + auto bucket = bucketer(ctr1); + for(auto p: which_cell[va.h_id][bucket]) { + cell *c1 = p.first; + int j = p.second; + if(c == c1 && va.move_sequence.empty()) continue; int id1 = local_id[c1].second; - for(int j=0; jtype; j++) { - if(hdist(ctr, va.T * ss[id1].face_centers[j]) < 1e-6) { - c->c.connect(i, c1, j, false); - if(!found) tmcell.push_back(ss[id].from_cellcenter * va.T * ss[id1].to_cellcenter); - foundtab_ids.emplace_back(va.h_id, id1, j); - found++; - } + if(hdist(ctr1, ss[id1].face_centers[j]) < 1e-6) { + c->c.connect(i, c1, j, false); + if(!found) tmcell.push_back(ss[id].from_cellcenter * va.T * ss[id1].to_cellcenter); + foundtab_ids.emplace_back(va.h_id, id1, j); + found++; } } }