49 const unsigned& nx_cut_out,
50 const unsigned& ny_cut_out,
55 MeshChecker::assert_geometric_element<QElementGeometricBase, ELEMENT>(2);
58 std::map<Node*, bool> keep;
61 Vector<FiniteElement*> el_retained_pt;
62 Vector<FiniteElement*> el_killed_pt;
63 for (
unsigned i = 0; i < nx; i++)
65 for (
unsigned j = 0; j < ny; j++)
67 FiniteElement* el_pt = this->finite_element_pt(i + nx * j);
68 if ((i > (nx_cut_out - 1)) && (j < ny_cut_out))
70 el_killed_pt.push_back(el_pt);
74 el_retained_pt.push_back(el_pt);
75 unsigned nnod_el = el_pt->nnode();
76 for (
unsigned jj = 0; jj < nnod_el; jj++)
78 keep[el_pt->node_pt(jj)] =
true;
86 std::map<Node*, std::set<unsigned>> boundaries;
87 unsigned nnod = this->nnode();
88 for (
unsigned j = 0; j < nnod; j++)
90 std::set<unsigned>* aux_pt = 0;
91 this->node_pt(j)->get_boundaries_pt(aux_pt);
94 boundaries[this->node_pt(j)] = (*aux_pt);
99 this->remove_boundary_nodes();
102 this->set_nboundary(6);
105 Vector<Node*> node_backup_pt(this->Node_pt);
106 this->Node_pt.clear();
107 for (
unsigned j = 0; j < nnod; j++)
109 Node* nod_pt = node_backup_pt[j];
112 this->Node_pt.push_back(nod_pt);
113 std::set<unsigned> aux = boundaries[nod_pt];
114 for (std::set<unsigned>::iterator it = boundaries[nod_pt].begin();
115 it != boundaries[nod_pt].end();
120 this->add_boundary_node(b, nod_pt);
125 delete node_backup_pt[j];
130 unsigned i = nx_cut_out - 1;
131 for (
unsigned j = 0; j < ny_cut_out; j++)
133 FiniteElement* el_pt = this->finite_element_pt(i + nx * j);
134 unsigned nnod_1d = el_pt->nnode_1d();
135 for (
unsigned jj = 0; jj < nnod_1d; jj++)
137 unsigned jnod = (nnod_1d - 1) + jj * nnod_1d;
138 if (!(el_pt->node_pt(jnod)->is_on_boundary()))
140 Node* nod_pt = el_pt->node_pt(jnod);
141 this->convert_to_boundary_node(nod_pt);
143 this->add_boundary_node(1, el_pt->node_pt(jnod));
148 unsigned j = ny_cut_out;
149 for (
unsigned i = nx_cut_out; i < nx; i++)
151 FiniteElement* el_pt = this->finite_element_pt(i + nx * j);
152 unsigned nnod_1d = el_pt->nnode_1d();
153 for (
unsigned jj = 0; jj < nnod_1d; jj++)
156 if (!(el_pt->node_pt(jnod)->is_on_boundary()))
158 Node* nod_pt = el_pt->node_pt(jnod);
159 this->convert_to_boundary_node(nod_pt);
161 this->add_boundary_node(2, el_pt->node_pt(jnod));
166 this->Element_pt.clear();
167 unsigned n_retained = el_retained_pt.size();
168 for (
unsigned e = 0; e < n_retained; e++)
170 this->Element_pt.push_back(el_retained_pt[e]);
172 unsigned n_killed = el_killed_pt.size();
173 for (
unsigned e = 0; e < n_killed; e++)
175 delete el_killed_pt[e];
180 this->setup_boundary_element_info();