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();
Base class for algebraic elements.
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)....
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...
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.
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).