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();
////////////////////////////////////////////////////////////////////
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)....
//////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////// //////////////////////////////...
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.
//////////////////////////////////////////////////////////////////// ////////////////////////////////...