30 #ifndef OOMPH_GEOMPACK_MESH_TEMPLATE_CC 31 #define OOMPH_GEOMPACK_MESH_TEMPLATE_CC 47 template <
class ELEMENT>
52 MeshChecker::assert_geometric_element<QElementGeometricBase,ELEMENT>(2,2);
55 unsigned nelem=Tmp_mesh_pt->nelement();
56 Element_pt.resize(nelem);
59 unsigned nnod=Tmp_mesh_pt->nnode();
63 unsigned nbound=Tmp_mesh_pt->nboundary();
64 set_nboundary(nbound);
67 for (
unsigned e=0;e<nelem;e++)
69 Element_pt[e]=
new ELEMENT;
74 if (finite_element_pt(0)->nnode()!=4)
76 std::string error_message =
77 "GeompackQuadMesh can currently only deal with\n";
78 error_message +=
"four noded quads! \n";
79 error_message +=
"Generalisation to higher-order elements should be \n";
80 error_message +=
"straightforward but hasn't been done yet.\n";
81 error_message +=
"Do you want to volunteer? \n";
83 throw OomphLibError(error_message,
84 OOMPH_CURRENT_FUNCTION,
85 OOMPH_EXCEPTION_LOCATION);
90 unsigned nnod_el=Tmp_mesh_pt->finite_element_pt(0)->nnode();
93 for (
unsigned e=0;e<nelem;e++)
96 for (
unsigned j=0;j<nnod_el;j++)
100 finite_element_pt(e)->construct_node(j,time_stepper_pt);
105 std::map<Node*,unsigned> global_number;
106 unsigned global_count=0;
108 for (
unsigned e=0;e<nelem;e++)
111 for (
unsigned j=0;j<nnod_el;j++)
115 Node* scaffold_node_pt=Tmp_mesh_pt->finite_element_pt(e)->node_pt(j);
119 unsigned j_global=global_number[scaffold_node_pt];
128 global_number[scaffold_node_pt]=global_count;
134 Node_pt[global_count-1]=finite_element_pt(e)->node_pt(j);
137 Node_pt[global_count-1]->x(0)=scaffold_node_pt->x(0);
138 Node_pt[global_count-1]->x(1)=scaffold_node_pt->x(1);
143 std::set<unsigned>* boundaries_pt;
144 scaffold_node_pt->get_boundaries_pt(boundaries_pt);
148 if (boundaries_pt!=0)
151 this->convert_to_boundary_node(Node_pt[global_count-1]);
153 for(std::set<unsigned>::iterator it=boundaries_pt->begin();
154 it!=boundaries_pt->end();++it)
156 add_boundary_node(*it,Node_pt[global_count-1]);
164 delete finite_element_pt(e)->node_pt(j);
169 finite_element_pt(e)->node_pt(j)=Node_pt[j_global-1];
void build_from_scaffold(TimeStepper *time_stepper_pt)
Build mesh from scaffold.