26#ifndef OOMPH_REFINEABLE_BRICK_SPECTRAL_ELEMENT_HEADER
27#define OOMPH_REFINEABLE_BRICK_SPECTRAL_ELEMENT_HEADER
32#include <oomph-lib-config.h>
53 LeakCheckNames::RefineableQSpectralElement<3> _build += 1;
74 LeakCheckNames::RefineableQSpectralElement<3> _build -= 1;
83 if (this->node_pt(0) == 0)
90 TimeStepper* time_stepper_pt = this->node_pt(0)->time_stepper_pt();
91 unsigned ntstorage = time_stepper_pt->
ntstorage();
96 unsigned n_p = this->nnode_1d();
100 s_fraction[0] = this->local_one_d_fraction_of_node(
i0, 0);
107 s_fraction[1] = this->local_one_d_fraction_of_node(
i1, 1);
114 s_fraction[2] = this->local_one_d_fraction_of_node(
i2, 2);
122 if (this->node_pt(
jnod) == 0)
136 "refineable spectral elements yet",
154 using namespace OcTreeNames;
256 this->tree_pt()->son_pt(
son)->object_pt());
267 else if (
i0 ==
n_p - 1)
292 else if (
i1 ==
n_p - 1)
344 else if (
i2 ==
n_p - 1)
397 this->node_pt(
jnod) =
398 this->construct_boundary_node(
jnod, time_stepper_pt);
405 unsigned nval = this->node_pt(
jnod)->nvalue();
406 for (
unsigned k = 0;
k <
nval;
k++)
410 this->node_pt(
jnod)->pin(
k);
428 std::string error_message =
"We have a SolidNode outside "
429 "a refineable SolidElement\n";
431 "during mesh refinement -- this doesn't make sense\n";
441 for (
unsigned k = 0;
k <
n_dim;
k++)
452 for (std::set<unsigned>::iterator
it =
boundaries.begin();
469 this->node_pt(
jnod)->set_coordinates_on_boundary(*
it,
478 this->node_pt(
jnod) =
479 this->construct_node(
jnod, time_stepper_pt);
495 for (
unsigned t = 0;
t < ntstorage;
t++)
502 for (
unsigned i = 0;
i < 3;
i++)
510 for (
unsigned t = 0;
t < ntstorage;
t++)
518 for (
unsigned k = 0;
k < this->node_pt(
jnod)->nvalue();
k++)
537 std::string error_message =
538 "Have not implemented rebuilding from sons for";
539 error_message +=
"Algebraic Spectral elements yet\n";
543 "RefineableQSpectralElement::rebuild_from_sons()",
556 unsigned n_node = this->nnode();
////////////////////////////////////////////////////////////////////
double size() const
Calculate the size of the element (length, area, volume,...) in Eulerian computational coordinates....
void get_x(const Vector< double > &s, Vector< double > &x) const
Global coordinates as function of local coordinates. Either via FE representation or via macro-elemen...
unsigned ndim() const
Access function to # of Eulerian coordinates.
void add_boundary_node(const unsigned &b, Node *const &node_pt)
Add a (pointer to) a node to the b-th boundary.
void add_node_pt(Node *const &node_pt)
Add a (pointer to a) node to the mesh.
bool boundary_coordinate_exists(const unsigned &i) const
Indicate whether the i-th boundary has an intrinsic coordinate.
Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a gi...
An OomphLibError object which should be thrown when an run-time error is encountered....
RefineableElements are FiniteElements that may be subdivided into children to provide a better local ...
A class that is used to template the refineable Q elements by dimension. It's really nothing more tha...
virtual ~RefineableQSpectralElement()
Broken assignment operator.
void rebuild_from_sons(Mesh *&mesh_pt)
The only thing to add is rebuild from sons.
RefineableQSpectralElement(const RefineableQSpectralElement< 3 > &dummy)=delete
Broken copy constructor.
virtual bool nodes_built()
Overload the nodes built function.
RefineableQSpectralElement()
Constructor.
A class that is used to template the refineable Q spectral elements by dimension. It's really nothing...
A Class for nodes that deform elastically (i.e. position is an unknown in the problem)....
//////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////// //////////////////////////////...
unsigned ntstorage() const
Return the number of doubles required to represent history (one for steady)
static const int OMEGA
Default value for an unassigned neighbour.
//////////////////////////////////////////////////////////////////// ////////////////////////////////...