26#ifndef OOMPH_REFINEABLE_QUAD_SPECTRAL_ELEMENT_HEADER
27#define OOMPH_REFINEABLE_QUAD_SPECTRAL_ELEMENT_HEADER
32#include <oomph-lib-config.h>
53 LeakCheckNames::RefineableQSpectralElement<2> _build += 1;
74 LeakCheckNames::RefineableQSpectralElement<2> _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);
115 if (this->node_pt(
jnod) == 0)
129 "refineable spectral elements yet",
146 using namespace QuadTreeNames;
192 this->tree_pt()->son_pt(
son)->object_pt());
204 else if (
i0 ==
n_p - 1)
229 else if (
i1 ==
n_p - 1)
264 this->node_pt(
jnod) =
265 this->construct_boundary_node(
jnod, time_stepper_pt);
272 unsigned nval = this->node_pt(
jnod)->nvalue();
273 for (
unsigned k = 0;
k <
nval;
k++)
277 this->node_pt(
jnod)->pin(
k);
295 std::string error_message =
296 "We have a SolidNode outside a refineable SolidElement\n";
298 "during mesh refinement -- this doesn't make sense\n";
308 for (
unsigned k = 0;
k <
n_dim;
k++)
319 for (std::set<unsigned>::iterator
it =
boundaries.begin();
336 this->node_pt(
jnod)->set_coordinates_on_boundary(*
it,
zeta);
345 this->node_pt(
jnod) =
346 this->construct_node(
jnod, time_stepper_pt);
363 for (
unsigned t = 0;
t < ntstorage;
t++)
365 using namespace QuadTreeNames;
371 for (
unsigned i = 0;
i < 2;
i++)
379 for (
unsigned t = 0;
t < ntstorage;
t++)
387 for (
unsigned k = 0;
k < this->node_pt(
jnod)->nvalue();
k++)
406 std::string error_message =
407 "Have not implemented rebuilding from sons for";
408 error_message +=
"Algebraic Spectral elements yet\n";
412 "RefineableQSpectralElement::rebuild_from_sons()",
424 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.
virtual bool nodes_built()
Overload the nodes built function.
void rebuild_from_sons(Mesh *&mesh_pt)
The only thing to add is rebuild from sons.
RefineableQSpectralElement(const RefineableQSpectralElement< 2 > &dummy)=delete
Broken copy constructor.
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).