27#ifndef OOMPH_FULL_CIRCLE_MESH_TEMPLATE_HEADER
28#define OOMPH_FULL_CIRCLE_MESH_TEMPLATE_HEADER
30#ifndef OOMPH_FULL_CIRCLE_MESH_HEADER
31#error __FILE__ should only be included from full_circle_mesh.h.
41 template<
class ELEMENT>
53 "This mesh is hard coded to only work for the case when there are 5 "
54 "elements: the central square and 4 surrounding elements, but you gave "
55 "vectors inconsistent with this.";
62 MeshChecker::assert_geometric_element<QElementGeometricBase, ELEMENT>(2);
74 const unsigned nelem = 5;
196 for (
unsigned i = 0;
i < 2;
i++)
198 double error = std::fabs(
205 oomph_info <<
"Error in node killing for i " <<
i <<
" "
206 <<
error << std::endl;
279 for (
unsigned i = 0;
i < 2;
i++)
281 double error = std::fabs(
288 oomph_info <<
"Error in node killing for i " <<
i <<
" "
289 <<
error << std::endl;
304 if ((
i0 == 0) && (
i1 != 0))
315 for (
unsigned i = 0;
i < 2;
i++)
317 double error = std::fabs(
324 oomph_info <<
"Error in node killing for i " <<
i <<
" "
325 <<
error << std::endl;
397 for (
unsigned i = 0;
i < 2;
i++)
399 double error = std::fabs(
406 oomph_info <<
"Error in node killing for i " <<
i <<
" "
407 <<
error << std::endl;
422 if ((
i1 == 0) && (
i0 !=
n_p - 1))
433 for (
unsigned i = 0;
i < 2;
i++)
435 double error = std::fabs(
442 oomph_info <<
"Error in node killing for i " <<
i <<
" "
443 <<
error << std::endl;
514 for (
unsigned i = 0;
i < 2;
i++)
516 double error = std::fabs(
523 oomph_info <<
"Error in node killing for i " <<
i <<
" "
524 <<
error << std::endl;
550 for (
unsigned i = 0;
i < 2;
i++)
552 double error = std::fabs(
559 oomph_info <<
"Error in node killing for i " <<
i <<
" "
560 <<
error << std::endl;
575 if ((
i1 == 0) && (
i0 !=
n_p - 1))
586 for (
unsigned i = 0;
i < 2;
i++)
588 double error = std::fabs(
595 oomph_info <<
"Error in node killing for i " <<
i <<
" "
596 <<
error << std::endl;
647 <<
"The most probable cause is that the domain is not\n"
648 <<
"compatible with the mesh.\n"
649 <<
"For the FullCircleMesh, the domain must be\n"
650 <<
"topologically consistent with a quarter tube with a\n"
651 <<
"non-curved centreline.\n";
MacroElement * macro_element_pt(const unsigned &i)
Access to i-th macro element.
double size() const
Calculate the size of the element (length, area, volume,...) in Eulerian computational coordinates....
virtual Node * construct_node(const unsigned &n)
Construct the local node n and return a pointer to the newly created node object.
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
virtual unsigned nnode_1d() const
Return the number of nodes along one edge of the element Default is to return zero — must be overload...
Topologically circular domain, e.g. a tube cross section. The entire domain must be defined by a Geom...
FullCircleDomain * Domain_pt
Pointer to domain.
GeomObject *& area_pt()
Access function to GeomObject representing wall.
FullCircleMesh(GeomObject *wall_pt, const Vector< double > &theta_positions, const Vector< double > &radius_box, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass pointer to geometric object that specifies the area; values of theta at which divid...
A geometric object is an object that provides a parametrised description of its shape via the functio...
void macro_map(const Vector< double > &s, Vector< double > &r)
The mapping from local to global coordinates at the current time : r(s)
void add_boundary_node(const unsigned &b, Node *const &node_pt)
Add a (pointer to) a node to the b-th boundary.
Vector< Node * > Node_pt
Vector of pointers to nodes.
FiniteElement * finite_element_pt(const unsigned &e) const
Upcast (downcast?) to FiniteElement (needed to access FiniteElement member functions).
void set_nboundary(const unsigned &nbound)
Set the number of boundaries in the mesh.
Node *& node_pt(const unsigned long &n)
Return pointer to global node n.
void convert_to_boundary_node(Node *&node_pt, const Vector< FiniteElement * > &finite_element_pt)
A function that upgrades an ordinary node to a boundary node We shouldn't ever really use this,...
void set_boundary_coordinate_exists(const unsigned &i)
Set boundary coordinate on the i-th boundary to be existing.
Vector< GeneralisedElement * > Element_pt
Vector of pointers to generalised elements.
Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a gi...
double & x(const unsigned &i)
Return the i-th nodal coordinate.
An OomphLibError object which should be thrown when an run-time error is encountered....
void setup_boundary_element_info()
Setup lookup schemes which establish whic elements are located next to mesh's boundaries (wrapper to ...
TAdvectionDiffusionReactionElement<NREAGENT,DIM,NNODE_1D> elements are isoparametric triangular DIM-d...
Base class for time-stepping schemes. Timestepper provides an approximation of the temporal derivativ...
const double Pi
50 digits from maple
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
OomphInfo oomph_info
Single (global) instantiation of the OomphInfo object – this is used throughout the library as a "rep...