26 #ifndef OOMPH_TUBE_MESH_HEADER
27 #define OOMPH_TUBE_MESH_HEADER
30 #include "../generic/refineable_brick_mesh.h"
31 #include "../generic/macro_element.h"
32 #include "../generic/domain.h"
33 #include "../generic/algebraic_elements.h"
34 #include "../generic/brick_mesh.h"
35 #include "../generic/macro_element_node_update_element.h"
55 template<
class ELEMENT>
67 const Vector<double>& centreline_limits,
68 const Vector<double>& theta_positions,
69 const Vector<double>& radius_box,
70 const unsigned& nlayer,
71 TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper);
123 template<
class ELEMENT>
125 public RefineableBrickMesh<ELEMENT>
139 const Vector<double>& centreline_limits,
140 const Vector<double>& theta_positions,
141 const Vector<double>& radius_box,
142 const unsigned& nlayer,
143 TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper)
152 for (
unsigned ielem = 0; ielem < TubeMesh<ELEMENT>::nelement(); ielem++)
154 dynamic_cast<RefineableQElement<3>*
>(
156 ->set_macro_elem_pt(this->
Domain_pt->macro_element_pt(ielem));
162 Vector<TreeRoot*> trees_pt;
163 for (
unsigned iel = 0; iel < TubeMesh<ELEMENT>::nelement(); iel++)
166 ELEMENT* ref_el_pt =
dynamic_cast<ELEMENT*
>(el_pt);
167 OcTreeRoot* octree_root_pt =
new OcTreeRoot(ref_el_pt);
168 trees_pt.push_back(octree_root_pt);
170 this->Forest_pt =
new OcTreeForest(trees_pt);
174 unsigned success_flag =
175 dynamic_cast<OcTreeForest*
>(this->Forest_pt)->self_test();
176 if (success_flag == 0)
178 oomph_info <<
"Successfully built octree forest " << std::endl;
182 throw OomphLibError(
"Trouble in building octree forest ",
183 OOMPH_CURRENT_FUNCTION,
184 OOMPH_EXCEPTION_LOCATION);
///////////////////////////////////////////////////////////////// ///////////////////////////////////...
RefineableTubeMesh(GeomObject *wall_pt, const Vector< double > ¢reline_limits, const Vector< double > &theta_positions, const Vector< double > &radius_box, const unsigned &nlayer, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor for adaptive deformable quarter tube mesh class. Pass pointer to geometric object that sp...
virtual ~RefineableTubeMesh()
Destructor: empty.
Tube as a domain. The entire domain must be defined by a GeomObject with the following convention: ze...
3D tube mesh class. The domain is specified by the GeomObject that identifies the entire volume....
GeomObject *& volume_pt()
Access function to GeomObject representing wall.
TubeDomain * domain_pt() const
Access function to underlying domain.
GeomObject * Volume_pt
Pointer to the geometric object that represents the curved wall.
TubeMesh(GeomObject *wall_pt, const Vector< double > ¢reline_limits, const Vector< double > &theta_positions, const Vector< double > &radius_box, const unsigned &nlayer, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass pointer to geometric object that specifies the volume, start and end coordinates fo...
TubeDomain * domain_pt()
Access function to domain.
TubeDomain * Domain_pt
Pointer to domain.
virtual ~TubeMesh()
Destructor: empty.
////////////////////////////////////////////////////////////////////// //////////////////////////////...