31 #ifndef OOMPH_ANNULAR_MESH_HEADER 32 #define OOMPH_ANNULAR_MESH_HEADER 50 template<
class ELEMENT>
59 const unsigned &ntheta,
const unsigned &nr,
60 const double& a,
const double &h, TimeStepper* time_stepper_pt
61 = &Mesh::Default_TimeStepper) :
63 periodic,time_stepper_pt)
66 MeshChecker::assert_geometric_element<QElementGeometricBase,ELEMENT>(2);
75 const unsigned &ntheta,
const unsigned &nr,
76 const double& a,
const double &h,
77 const double& phi, TimeStepper* time_stepper_pt
78 = &Mesh::Default_TimeStepper) :
80 periodic,time_stepper_pt)
83 MeshChecker::assert_geometric_element<QElementGeometricBase,ELEMENT>(2);
94 const double& azimuthal_fraction,
109 template<
class ELEMENT>
111 public virtual RefineableQuadMesh<ELEMENT>
118 const double& azimuthal_fraction,
119 const unsigned &ntheta,
123 TimeStepper* time_stepper_pt
124 = &Mesh::Default_TimeStepper) :
126 periodic,time_stepper_pt),
128 nr,a,h,time_stepper_pt)
131 MeshChecker::assert_geometric_element<QElementGeometricBase,ELEMENT>(2);
139 unsigned nel=this->nelement();
140 for (
unsigned ielem=0;ielem<nel;ielem++)
142 dynamic_cast<RefineableQElement<2>*
>(this->element_pt(ielem))->
143 set_macro_elem_pt(this->Domain_pt->macro_element_pt(ielem));
151 this->setup_quadtree_forest();
157 Vector<TreeRoot*> left_root_pt(nr);
158 Vector<TreeRoot*> right_root_pt(nr);
159 for(
unsigned i=0;i<nr;i++)
162 dynamic_cast<ELEMENT*
>(this->element_pt(i*ntheta))->
163 tree_pt()->root_pt();
166 dynamic_cast<ELEMENT*
>(this->element_pt((i+1)*ntheta-1))->
167 tree_pt()->root_pt();
171 using namespace QuadTreeNames;
172 for(
unsigned i=0;i<nr;i++)
174 left_root_pt[i]->neighbour_pt(W) = right_root_pt[i];
175 left_root_pt[i]->set_neighbour_periodic(W);
177 right_root_pt[i]->neighbour_pt(E) = left_root_pt[i];
178 right_root_pt[i]->set_neighbour_periodic(E);
187 const double& azimuthal_fraction,
188 const unsigned &ntheta,
193 TimeStepper* time_stepper_pt
194 = &Mesh::Default_TimeStepper) :
196 periodic,time_stepper_pt),
198 nr,a,h,phi,time_stepper_pt)
201 MeshChecker::assert_geometric_element<QElementGeometricBase,ELEMENT>(2);
208 unsigned nel=this->nelement();
209 for (
unsigned ielem=0;ielem<nel;ielem++)
211 dynamic_cast<RefineableQElement<2>*
>(this->element_pt(ielem))->
212 set_macro_elem_pt(this->Domain_pt->macro_element_pt(ielem));
220 this->setup_quadtree_forest();
226 Vector<TreeRoot*> left_root_pt(nr);
227 Vector<TreeRoot*> right_root_pt(nr);
228 for(
unsigned i=0;i<nr;i++)
231 dynamic_cast<ELEMENT*
>(this->element_pt(i*ntheta))->
232 tree_pt()->root_pt();
235 dynamic_cast<ELEMENT*
>(this->element_pt((i+1)*ntheta-1))->
236 tree_pt()->root_pt();
240 using namespace QuadTreeNames;
241 for(
unsigned i=0;i<nr;i++)
243 left_root_pt[i]->neighbour_pt(W) = right_root_pt[i];
244 left_root_pt[i]->set_neighbour_periodic(W);
246 right_root_pt[i]->neighbour_pt(E) = left_root_pt[i];
247 right_root_pt[i]->set_neighbour_periodic(E);
void wrap_into_annular_shape(const double &a, const double &h, const double &azimuthal_fraction, const double &phi)
Wrap mesh into annular shape.
AnnularDomain * Domain_pt
Pointer to domain.
TwoDAnnularMesh(const bool &periodic, const double &azimuthal_fraction, const unsigned &ntheta, const unsigned &nr, const double &a, const double &h, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor.
RefineableTwoDAnnularMesh(const bool &periodic, const double &azimuthal_fraction, const unsigned &ntheta, const unsigned &nr, const double &a, const double &h, const double &phi, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor; rotate mesh by angle phi.
TwoDAnnularMesh(const bool &periodic, const double &azimuthal_fraction, const unsigned &ntheta, const unsigned &nr, const double &a, const double &h, const double &phi, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor; rotate mesh by angle phi.
RefineableTwoDAnnularMesh(const bool &periodic, const double &azimuthal_fraction, const unsigned &ntheta, const unsigned &nr, const double &a, const double &h, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor.