30 #ifndef OOMPH_BACKWARD_STEP_MESH_TEMPLATE_CC 31 #define OOMPH_BACKWARD_STEP_MESH_TEMPLATE_CC 51 template<
class ELEMENT>
55 const unsigned& nx_cut_out,
56 const unsigned& ny_cut_out,
62 MeshChecker::assert_geometric_element<QElementGeometricBase,ELEMENT>(2);
65 std::map<Node*,bool> keep;
70 for (
unsigned i=0;
i<nx;
i++)
72 for (
unsigned j=0;j<ny;j++)
75 if ((
i>(nx_cut_out-1))&&(j<ny_cut_out))
77 el_killed_pt.push_back(el_pt);
81 el_retained_pt.push_back(el_pt);
82 unsigned nnod_el=el_pt->
nnode();
83 for (
unsigned jj=0;jj<nnod_el;jj++)
94 std::map<Node*,std::set<unsigned> > boundaries;
95 unsigned nnod=this->nnode();
96 for (
unsigned j=0;j<nnod;j++)
98 std::set<unsigned>* aux_pt=0;
99 this->node_pt(j)->get_boundaries_pt(aux_pt);
102 boundaries[this->node_pt(j)]=(*aux_pt);
107 this->remove_boundary_nodes();
110 this->set_nboundary(6);
114 this->Node_pt.clear();
115 for (
unsigned j=0;j<nnod;j++)
117 Node* nod_pt=node_backup_pt[j];
120 this->Node_pt.push_back(nod_pt);
121 std::set<unsigned> aux=boundaries[nod_pt];
122 for (std::set<unsigned>::iterator it=boundaries[nod_pt].begin();
123 it!=boundaries[nod_pt].end();it++)
127 this->add_boundary_node(b,nod_pt);
132 delete node_backup_pt[j];
137 unsigned i=nx_cut_out-1;
138 for (
unsigned j=0;j<ny_cut_out;j++)
142 for (
unsigned jj=0;jj<nnod_1d;jj++)
144 unsigned jnod=(nnod_1d-1)+jj*nnod_1d;
148 this->convert_to_boundary_node(nod_pt);
150 this->add_boundary_node(1,el_pt->
node_pt(jnod));
155 unsigned j=ny_cut_out;
156 for (
unsigned i=nx_cut_out;i<nx;i++)
160 for (
unsigned jj=0;jj<nnod_1d;jj++)
166 this->convert_to_boundary_node(nod_pt);
168 this->add_boundary_node(2,el_pt->
node_pt(jnod));
175 this->Element_pt.clear();
176 unsigned n_retained=el_retained_pt.size();
177 for (
unsigned e=0;
e<n_retained;
e++)
179 this->Element_pt.push_back(el_retained_pt[
e]);
181 unsigned n_killed=el_killed_pt.size();
182 for (
unsigned e=0;
e<n_killed;
e++)
184 delete el_killed_pt[
e];
189 this->setup_boundary_element_info();
A general Finite Element class.
Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a gi...
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
void build_mesh(const unsigned &nx, const unsigned &ny, const unsigned &nx_cut_out, const unsigned &ny_cut_out, const double &lx, const double &ly)
Actual build function.
virtual unsigned nnode_1d() const
Return the number of nodes along one edge of the element Default is to return zero — must be overloa...
virtual bool is_on_boundary() const
Test whether the Node lies on a boundary. The "bulk" Node cannot lie on a boundary, so return false. This will be overloaded by BoundaryNodes.
unsigned nnode() const
Return the number of nodes.