26#ifndef OOMPH_TUBE_MESH_TEMPLATE_HEADER
27#define OOMPH_TUBE_MESH_TEMPLATE_HEADER
29#ifndef OOMPH_TUBE_MESH_HEADER
30#error __FILE__ should only be included from tube_mesh.h.
40 template<
class ELEMENT>
47 : Volume_pt(volume_pt)
50 MeshChecker::assert_geometric_element<QElementGeometricBase, ELEMENT>(3);
177 for (
unsigned i = 0;
i < 3;
i++)
179 double error = std::fabs(
186 oomph_info <<
"Error in node killing for i " <<
i <<
" "
187 <<
error << std::endl;
266 for (
unsigned i = 0;
i < 3;
i++)
268 double error = std::fabs(
275 oomph_info <<
"Error in node killing for i " <<
i <<
" "
276 <<
error << std::endl;
306 for (
unsigned i = 0;
i < 3;
i++)
308 double error = std::fabs(
315 oomph_info <<
"Error in node killing for i " <<
i <<
" "
316 <<
error << std::endl;
415 for (
unsigned i = 0;
i < 3;
i++)
417 double error = std::fabs(
424 oomph_info <<
"Error in node killing for i " <<
i <<
" "
425 <<
error << std::endl;
455 for (
unsigned i = 0;
i < 3;
i++)
457 double error = std::fabs(
464 oomph_info <<
"Error in node killing for i " <<
i <<
" "
465 <<
error << std::endl;
480 if ((
i0 == 0) && (
i1 != 0))
493 for (
unsigned i = 0;
i < 3;
i++)
495 double error = std::fabs(
502 oomph_info <<
"Error in node killing for i " <<
i <<
" "
503 <<
error << std::endl;
604 for (
unsigned i = 0;
i < 3;
i++)
606 double error = std::fabs(
613 oomph_info <<
"Error in node killing for i " <<
i <<
" "
614 <<
error << std::endl;
644 for (
unsigned i = 0;
i < 3;
i++)
646 double error = std::fabs(
653 oomph_info <<
"Error in node killing for i " <<
i <<
" "
654 <<
error << std::endl;
669 if ((
i1 == 0) && (
i0 !=
n_p - 1))
682 for (
unsigned i = 0;
i < 3;
i++)
684 double error = std::fabs(
691 oomph_info <<
"Error in node killing for i " <<
i <<
" "
692 <<
error << std::endl;
792 for (
unsigned i = 0;
i < 3;
i++)
794 double error = std::fabs(
801 oomph_info <<
"Error in node killing for i " <<
i <<
" "
802 <<
error << std::endl;
832 for (
unsigned i = 0;
i < 3;
i++)
834 double error = std::fabs(
841 oomph_info <<
"Error in node killing for i " <<
i <<
" "
842 <<
error << std::endl;
870 for (
unsigned i = 0;
i < 3;
i++)
872 double error = std::fabs(
879 oomph_info <<
"Error in node killing for i " <<
i <<
" "
880 <<
error << std::endl;
895 if ((
i1 == 0) && (
i0 !=
n_p - 1))
908 for (
unsigned i = 0;
i < 3;
i++)
910 double error = std::fabs(
917 oomph_info <<
"Error in node killing for i " <<
i <<
" "
918 <<
error << std::endl;
992 <<
"The most probable cause is that the domain is not\n"
993 <<
"compatible with the mesh.\n"
994 <<
"For the TubeMesh, the domain must be\n"
995 <<
"topologically consistent with a quarter tube with a\n"
996 <<
"non-curved centreline.\n";
void setup_boundary_element_info()
Setup lookup schemes which establish whic elements are located next to mesh's boundaries (wrapper to ...
MacroElement * macro_element_pt(const unsigned &i)
Access to i-th macro element.
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...
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....
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...
Tube as a domain. The entire domain must be defined by a GeomObject with the following convention: ze...
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
Pointer to domain.
GeomObject *& volume_pt()
Access function to GeomObject representing wall.
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...