780 typedef bg::model::point<NekDouble, 3, bg::cs::cartesian> BPoint;
781 typedef std::pair<BPoint, unsigned int> PointPair;
787 Array<OneD, Array<OneD, int> > vidmap;
792 vidmap = Array<OneD, Array<OneD, int> > (niso);
795 for(i = 0; i < niso; ++i)
799 m_ntris += iso[i]->m_ntris;
806 for(i = 0; i < niso; ++i)
810 m_nvert += iso[i]->m_nvert;
814 vector< vector<int> > isocon;
816 vector<int> global_to_unique_map;
817 global_to_unique_map.resize(m_nvert);
819 vector< pair<int,int> > global_to_iso_map;
820 global_to_iso_map.resize(m_nvert);
824 std::vector<PointPair> inPoints;
825 for(i = 0; i < niso; ++i)
827 for(id1 = 0; id1 < iso[i]->m_nvert; ++id1)
829 inPoints.push_back(PointPair(BPoint( iso[i]->
m_x[id1],
831 iso[i]->
m_z[id1]), id2));
832 global_to_unique_map[id2]=id2;
833 global_to_iso_map[id2] = make_pair(i,id1);
841 cout <<
"\t Process building tree ..." << endl;
845 bgi::rtree<PointPair, bgi::rstar<16> > rtree;
846 rtree.insert(inPoints.begin(), inPoints.end());
849 int unique_index = 0;
856 "Nearest verts",prog);
859 BPoint queryPoint = inPoints[i].first;
864 if(global_to_unique_map[i] < unique_index)
870 std::vector<PointPair> result;
871 rtree.query(bgi::nearest(queryPoint, 10), std::back_inserter(result));
876 for(id1 = 0; id1 < result.size(); ++id1)
878 NekDouble dist = bg::distance(queryPoint, result[id1].first);
881 id2 = result[id1].second;
884 if(global_to_unique_map[id2] <unique_index)
886 new_index = global_to_unique_map[id2];
892 new_index = unique_index;
897 global_to_unique_map[i] = new_index;
898 for(
auto &it : samept)
900 global_to_unique_map[it] = new_index;
910 m_nvert = unique_index;
915 for(n = 0; n < niso; ++n)
917 for(i = 0; i < iso[n]->m_ntris; ++i,nelmt++)
921 m_vid[3*nelmt+j] = global_to_unique_map[iso[n]->m_vid[3*i+j]+cnt];
924 cnt += iso[n]->m_nvert;
934 for(i = 0; i < iso[0]->m_fields.size(); ++i)
939 for(n = 0; n < global_to_unique_map.size(); ++n)
942 m_x[global_to_unique_map[n]] = bg::get<0>(inPoints[n].first);
943 m_y[global_to_unique_map[n]] = bg::get<1>(inPoints[n].first);
944 m_z[global_to_unique_map[n]] = bg::get<2>(inPoints[n].first);
946 int isoid = global_to_iso_map[n].first;
947 int ptid = global_to_iso_map[n].second;
948 for(j = 0; j <
m_fields.size(); ++j)
950 m_fields[j][global_to_unique_map[n]] = iso[isoid]->
int PrintProgressbar(const int position, const int goal, const std::string message, int lastprogress=-1)
Prints a progressbar.
std::vector< NekDouble > m_z
static const NekDouble kNekZeroTol
std::vector< std::vector< NekDouble > > m_fields
std::vector< NekDouble > m_y
std::vector< NekDouble > m_x