27 #ifndef OOMPH_ANNULAR_MESH_HEADER
28 #define OOMPH_ANNULAR_MESH_HEADER
44 template<
class ELEMENT>
50 const double& azimuthal_fraction,
51 const unsigned& ntheta,
57 ntheta, nr, 1.0, 1.0, periodic, time_stepper_pt)
60 MeshChecker::assert_geometric_element<QElementGeometricBase, ELEMENT>(2);
69 const double& azimuthal_fraction,
70 const unsigned& ntheta,
77 ntheta, nr, 1.0, 1.0, periodic, time_stepper_pt)
80 MeshChecker::assert_geometric_element<QElementGeometricBase, ELEMENT>(2);
91 const double& azimuthal_fraction,
105 template<
class ELEMENT>
112 const bool& periodic,
113 const double& azimuthal_fraction,
114 const unsigned& ntheta,
120 ntheta, nr, 1.0, 1.0, periodic, time_stepper_pt),
122 periodic, azimuthal_fraction, ntheta, nr, a, h, time_stepper_pt)
125 MeshChecker::assert_geometric_element<QElementGeometricBase, ELEMENT>(2);
133 for (
unsigned ielem = 0; ielem < nel; ielem++)
152 for (
unsigned i = 0;
i < nr;
i++)
154 left_root_pt[
i] =
dynamic_cast<ELEMENT*
>(this->
element_pt(
i * ntheta))
159 dynamic_cast<ELEMENT*
>(this->
element_pt((
i + 1) * ntheta - 1))
165 using namespace QuadTreeNames;
166 for (
unsigned i = 0;
i < nr;
i++)
168 left_root_pt[
i]->neighbour_pt(
W) = right_root_pt[
i];
169 left_root_pt[
i]->set_neighbour_periodic(
W);
171 right_root_pt[
i]->neighbour_pt(
E) = left_root_pt[
i];
172 right_root_pt[
i]->set_neighbour_periodic(
E);
180 const bool& periodic,
181 const double& azimuthal_fraction,
182 const unsigned& ntheta,
189 ntheta, nr, 1.0, 1.0, periodic, time_stepper_pt),
191 periodic, azimuthal_fraction, ntheta, nr, a, h, phi, time_stepper_pt)
194 MeshChecker::assert_geometric_element<QElementGeometricBase, ELEMENT>(2);
201 for (
unsigned ielem = 0; ielem < nel; ielem++)
220 for (
unsigned i = 0;
i < nr;
i++)
222 left_root_pt[
i] =
dynamic_cast<ELEMENT*
>(this->
element_pt(
i * ntheta))
227 dynamic_cast<ELEMENT*
>(this->
element_pt((
i + 1) * ntheta - 1))
233 using namespace QuadTreeNames;
234 for (
unsigned i = 0;
i < nr;
i++)
236 left_root_pt[
i]->neighbour_pt(
W) = right_root_pt[
i];
237 left_root_pt[
i]->set_neighbour_periodic(
W);
239 right_root_pt[
i]->neighbour_pt(
E) = left_root_pt[
i];
240 right_root_pt[
i]->set_neighbour_periodic(
E);
MacroElement * macro_element_pt(const unsigned &i)
Access to i-th macro element.
static Steady< 0 > Default_TimeStepper
Default Steady Timestepper, to be used in default arguments to Mesh constructors.
virtual void node_update(const bool &update_all_solid_nodes=false)
Update nodal positions in response to changes in the domain shape. Uses the FiniteElement::get_x(....
const Vector< GeneralisedElement * > & element_pt() const
Return reference to the Vector of elements.
unsigned long nelement() const
Return number of elements in the mesh.
RectangularQuadMesh is a two-dimensional mesh of Quad elements with Nx elements in the "x" (horizonal...
Refineable version of QElement<2,NNODE_1D>.
Intermediate mesh class that implements the mesh adaptation functions specified in the TreeBasedRefin...
void setup_quadtree_forest()
Set up QuadTreeForest. Wipes any existing tree structure below the minimum refinement level and regar...
/////////////////////////////////////////////////////////////////// /////////////////////////////////...
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.
AnnularDomain * Domain_pt
Pointer to domain.
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.
////////////////////////////////////////////////////////////////////// //////////////////////////////...
2D annular mesh with a unit circle in the middle and a layer of thickness h surrounding it.
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.
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.
void wrap_into_annular_shape(const double &a, const double &h, const double &azimuthal_fraction, const double &phi)
Wrap mesh into annular shape.
A slight extension to the standard template vector class so that we can include "graceful" array rang...
//////////////////////////////////////////////////////////////////// ////////////////////////////////...