26#ifndef OOMPH_TUBE_MESH_TEMPLATE_CC
27#define OOMPH_TUBE_MESH_TEMPLATE_CC
39 template<
class ELEMENT>
46 : Volume_pt(volume_pt)
49 MeshChecker::assert_geometric_element<QElementGeometricBase, ELEMENT>(3);
176 for (
unsigned i = 0;
i < 3;
i++)
178 double error = std::fabs(
185 oomph_info <<
"Error in node killing for i " <<
i <<
" "
186 <<
error << std::endl;
268 for (
unsigned i = 0;
i < 3;
i++)
270 double error = std::fabs(
277 oomph_info <<
"Error in node killing for i " <<
i <<
" "
278 <<
error << std::endl;
308 for (
unsigned i = 0;
i < 3;
i++)
310 double error = std::fabs(
317 oomph_info <<
"Error in node killing for i " <<
i <<
" "
318 <<
error << std::endl;
418 for (
unsigned i = 0;
i < 3;
i++)
420 double error = std::fabs(
427 oomph_info <<
"Error in node killing for i " <<
i <<
" "
428 <<
error << std::endl;
458 for (
unsigned i = 0;
i < 3;
i++)
460 double error = std::fabs(
467 oomph_info <<
"Error in node killing for i " <<
i <<
" "
468 <<
error << std::endl;
484 if ((
i0 == 0) && (
i1 != 0))
497 for (
unsigned i = 0;
i < 3;
i++)
499 double error = std::fabs(
506 oomph_info <<
"Error in node killing for i " <<
i <<
" "
507 <<
error << std::endl;
608 for (
unsigned i = 0;
i < 3;
i++)
610 double error = std::fabs(
617 oomph_info <<
"Error in node killing for i " <<
i <<
" "
618 <<
error << std::endl;
648 for (
unsigned i = 0;
i < 3;
i++)
650 double error = std::fabs(
657 oomph_info <<
"Error in node killing for i " <<
i <<
" "
658 <<
error << std::endl;
673 if ((
i1 == 0) && (
i0 !=
n_p - 1))
686 for (
unsigned i = 0;
i < 3;
i++)
688 double error = std::fabs(
695 oomph_info <<
"Error in node killing for i " <<
i <<
" "
696 <<
error << std::endl;
797 for (
unsigned i = 0;
i < 3;
i++)
799 double error = std::fabs(
806 oomph_info <<
"Error in node killing for i " <<
i <<
" "
807 <<
error << std::endl;
837 for (
unsigned i = 0;
i < 3;
i++)
839 double error = std::fabs(
846 oomph_info <<
"Error in node killing for i " <<
i <<
" "
847 <<
error << std::endl;
875 for (
unsigned i = 0;
i < 3;
i++)
877 double error = std::fabs(
884 oomph_info <<
"Error in node killing for i " <<
i <<
" "
885 <<
error << std::endl;
900 if ((
i1 == 0) && (
i0 !=
n_p - 1))
913 for (
unsigned i = 0;
i < 3;
i++)
915 double error = std::fabs(
922 oomph_info <<
"Error in node killing for i " <<
i <<
" "
923 <<
error << std::endl;
998 <<
"The most probable cause is that the domain is not\n"
999 <<
"compatible with the mesh.\n"
1000 <<
"For the TubeMesh, the domain must be\n"
1001 <<
"topologically consistent with a quarter tube with a\n"
1002 <<
"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...
/////////////////////////////////////////////////////////////////////
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.
std::vector< bool > Boundary_coordinate_exists
Vector of boolean data that indicates whether the boundary coordinates have been set for the boundary...
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,...
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....
//////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////// //////////////////////////////...
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
//////////////////////////////////////////////////////////////////// ////////////////////////////////...
OomphInfo oomph_info
Single (global) instantiation of the OomphInfo object – this is used throughout the library as a "rep...