26#ifndef OOMPH_REFINEABLE_BRICK_ELEMENT_HEADER
27#define OOMPH_REFINEABLE_BRICK_ELEMENT_HEADER
31#include <oomph-lib-config.h>
78 LeakCheckNames::RefineableQElement<3> _build += 1;
97 LeakCheckNames::RefineableQElement<3> _build -= 1;
131 virtual void build(
Mesh*& mesh_pt,
138 void check_integrity(
double& max_error);
141 void output_corners(std::ostream&
outfile,
const std::string& colour)
const;
146 return dynamic_cast<OcTree*
>(Tree_pt);
152 return dynamic_cast<OcTree*
>(Tree_pt);
176 void setup_father_bounds();
194 void get_boundaries(
const int&
edge, std::set<unsigned>&
boundaries)
const;
215 void interpolated_zeta_on_face(
const unsigned& boundary,
222 void setup_hang_for_value(
const int&
value_id);
226 virtual void oc_hang_helper(
const int&
value_id,
269 undeformed_macro_elem_pt);
282 void get_face_solid_bcs(
const int&
edge,
299 using namespace OcTreeNames;
311 int son_type = octree_pt()->son_type();
317 Tree_pt->father_pt()->object_pt());
328 "We can't handle generalised nodal positions (yet).\n",
345 unsigned n_p = nnode_1d();
352 s_lo = octree_pt()->Direction_to_vector[son_type];
356 for (
int i = 0;
i < 3;
i++)
362 for (
int i = 0;
i < 3;
i++)
371 Undeformed_macro_elem_pt =
father_el_pt->Undeformed_macro_elem_pt;
372 for (
unsigned i = 0;
i < 3;
i++)
376 0.5 * (
s_lo[
i] + 1.0) *
380 0.5 * (
s_hi[
i] + 1.0) *
428 for (
unsigned i = 0;
i < 3;
i++)
443 if (Use_undeformed_macro_element_for_new_lagrangian_coords)
458 unsigned ntstorage = time_stepper_pt->
ntstorage();
463 for (
unsigned t = 1;
t < ntstorage;
t++)
470 for (
unsigned i = 0;
i < 3;
i++)
Base class for all brick elements.
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
virtual void get_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Calculate the elemental Jacobian matrix "d equation / d variable".
Base class for MacroElement s that are used during mesh refinement in domains with curvlinear and/or ...
Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a gi...
OcTree class: Recursively defined, generalised octree.
An OomphLibError object which should be thrown when an run-time error is encountered....
Base class for Solid Qelements.
virtual void set_macro_elem_pt(MacroElement *macro_elem_pt)
Broken assignment operator.
RefineableElements are FiniteElements that may be subdivided into children to provide a better local ...
static std::map< unsigned, DenseMatrix< int > > Father_bound
Coincidence between son nodal points and father boundaries: Father_bound[nnode_1d](nnode_son,...
unsigned required_nsons() const
A refineable brick element has eight sons.
OcTree * octree_pt()
Pointer to octree representation of this element.
virtual void further_setup_hanging_nodes()=0
Perform additional hanging node procedures for variables that are not interpolated by all nodes (e....
virtual Node * node_created_by_son_of_neighbour(const Vector< double > &s_fraction, bool &is_periodic)
If a neighbouring element has already created a node at a position corresponding to the local fractio...
OcTree * octree_pt() const
Pointer to octree representation of this element.
A class that is used to template the refineable Q elements by dimension. It's really nothing more tha...
RefineableSolidElements are SolidFiniteElements that may be subdivided into children to provide a bet...
void build(Mesh *&mesh_pt, Vector< Node * > &new_node_pt, bool &was_already_built, std::ofstream &new_nodes_file)
Build the element, i.e. give it nodal positions, apply BCs, etc. Incl. documention into new_nodes_fil...
void set_macro_elem_pt(MacroElement *macro_elem_pt)
Final over-ride: Use version in QSolidElementBase.
RefineableSolidQElement()
Constructor, just call the constructor of the RefineableQElement<2>
void get_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Use the generic finite difference routine defined in RefineableSolidElement to calculate the Jacobian...
RefineableSolidQElement(const RefineableSolidQElement< 3 > &dummy)=delete
Broken copy constructor.
void set_macro_elem_pt(MacroElement *macro_elem_pt, MacroElement *undeformed_macro_elem_pt)
Final over-ride: Use version in QSolidElementBase.
virtual ~RefineableSolidQElement()
Broken assignment operator.
A class that is used to template the solid refineable Q elements by dimension. It's really nothing mo...
A Class for nodes that deform elastically (i.e. position is an unknown in the problem)....
unsigned nlagrangian_type() const
Number of types of Lagrangian coordinates used to interpolate the Lagrangian coordinates within the e...
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)
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).