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.