7 int nrefine=
static_cast<int>(ToRemove.size());
10 for(
int i=0;i<nrefine;++i)
12 vector<int>
const& edges=tess.
GetCellEdges(ToRemove[static_cast<size_t>(i)]);
13 int nedge=
static_cast<int>(edges.size());
15 for(
int j=0;j<nedge;++j)
17 Edge const& edge=tess.
GetEdge(edges[static_cast<size_t>(j)]);
25 res.push_back(ToRemove[static_cast<size_t>(i)]);
31 (vector<double>
const& merits,vector<int>
const&
35 vector<double> merits2;
36 if(merits.size()!=candidates.size())
37 throw UniversalError(
"Merits and Candidates don't have same size in RemovalStrategy");
39 vector<int> bad_neigh;
40 int n=
static_cast<int>(merits.size());
45 vector<int> neigh=tess.
GetNeighbors(candidates[static_cast<size_t>(i)]);
46 int nneigh=
static_cast<int>(neigh.size());
47 if(find(bad_neigh.begin(),bad_neigh.end(),candidates[
static_cast<size_t>(i)])!=
52 for(
int j=0;j<nneigh;++j)
54 if(binary_search(candidates.begin(),candidates.end(),neigh[
static_cast<size_t>(j)]))
56 if(merits[static_cast<size_t>(i)]<merits[
static_cast<size_t>(lower_bound(candidates.begin(),
57 candidates.end(),neigh[
static_cast<size_t>(j)])-candidates.begin())])
62 if(fabs(merits[static_cast<size_t>(i)]-merits[
static_cast<size_t>(lower_bound(candidates.begin(),
63 candidates.end(),neigh[
static_cast<size_t>(j)])-candidates.begin())])<1e-9)
65 if(find(bad_neigh.begin(),bad_neigh.end(),neigh[
static_cast<size_t>(j)])==
67 bad_neigh.push_back(neigh[static_cast<size_t>(j)]);
74 result.push_back(candidates[static_cast<size_t>(i)]);
75 merits2.push_back(merits[static_cast<size_t>(i)]);
84 sort(ToRemove.begin(),ToRemove.end());
85 int n=int(ToRemove.size());
88 vector<int> edges=tess.
GetCellEdges(ToRemove[static_cast<size_t>(i)]);
90 for(
int j=0;j<static_cast<int>(edges.size());++j)
92 Edge temp=tess.
GetEdge(edges[static_cast<size_t>(j)]);
95 if(temp.
neighbors.first==ToRemove[static_cast<size_t>(i)])
97 if(binary_search(ToRemove.begin(),ToRemove.end(),temp.
102 if(binary_search(ToRemove.begin(),ToRemove.end(),temp.
Abstract class for tessellation.
vector< int > RemoveNearBoundary(vector< int > const &ToRemove, Tessellation const &tess) const
Removed from the list cells near periodic boundaries.
virtual int GetPointNo(void) const =0
Get Total number of mesh generating points.
Container for error reports.
void CheckOutput(Tessellation const &tess, vector< int > &ToRemove) const
Checks if the removed list is good, throws an error if not.
Interface between two cells.
virtual Edge const & GetEdge(int index) const =0
Returns edge (interface between cells)
virtual ~RemovalStrategy(void)
Virtual destructor.
std::pair< int, int > neighbors
Neighboring cells.
Abstract class for coarsening scheme.
vector< int > RemoveNeighbors(vector< double > const &merits, vector< int > const &candidates, Tessellation const &tess) const
Removes neighboring points and cells near the boundary which are not rigid walls. ...
virtual vector< int > const & GetCellEdges(int index) const =0
Returns the indexes of a cell's edges.
virtual vector< int > GetNeighbors(int index) const =0
Returns the indeces of the neighbors.