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,
133 bool& was_already_built,
134 std::ofstream& new_nodes_file);
146 return dynamic_cast<OcTree*
>(Tree_pt);
152 return dynamic_cast<OcTree*
>(Tree_pt);
176 void setup_father_bounds();
185 void get_face_bcs(
const int& edge,
Vector<int>& bound_cons)
const;
194 void get_boundaries(
const int& edge, std::set<unsigned>& boundaries)
const;
211 void get_bcs(
int bound,
Vector<int>& bound_cons)
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,
228 std::ofstream& output_hangfile);
269 undeformed_macro_elem_pt);
282 void get_face_solid_bcs(
const int& edge,
289 void get_solid_bcs(
int bound,
Vector<int>& solid_bound_cons)
const;
296 bool& was_already_built,
297 std::ofstream& new_nodes_file)
299 using namespace OcTreeNames;
303 mesh_pt, new_node_pt, was_already_built, new_nodes_file);
306 if (was_already_built)
return;
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++)
358 s_lo[
i] = (s_lo[
i] + 1) / 2 - 1;
362 for (
int i = 0;
i < 3;
i++)
364 s_hi[
i] = s_lo[
i] + 1;
372 for (
unsigned i = 0;
i < 3;
i++)
376 0.5 * (s_lo[
i] + 1.0) *
380 0.5 * (s_hi[
i] + 1.0) *
394 for (
unsigned i0 = 0; i0 < n_p; i0++)
397 s_fraction[0] = local_one_d_fraction_of_node(i0, 0);
399 s[0] = s_lo[0] + (s_hi[0] - s_lo[0]) * s_fraction[0];
401 for (
unsigned i1 = 0; i1 < n_p; i1++)
404 s_fraction[1] = local_one_d_fraction_of_node(i1, 1);
406 s[1] = s_lo[1] + (s_hi[1] - s_lo[1]) * s_fraction[1];
408 for (
unsigned i2 = 0; i2 < n_p; i2++)
411 s_fraction[2] = local_one_d_fraction_of_node(i2, 2);
413 s[2] = s_lo[2] + (s_hi[2] - s_lo[2]) * s_fraction[2];
416 jnod = i0 + n_p * i1 + n_p * n_p * i2;
428 for (
unsigned i = 0;
i < 3;
i++)
440 elastic_node_pt->
x(
i) = x_fe[
i];
443 if (Use_undeformed_macro_element_for_new_lagrangian_coords)
445 elastic_node_pt->
xi(
i) = xi[
i];
449 elastic_node_pt->
xi(
i) = xi_fe[
i];
458 unsigned ntstorage = time_stepper_pt->
ntstorage();
463 for (
unsigned t = 1;
t < ntstorage;
t++)
470 for (
unsigned i = 0;
i < 3;
i++)
472 elastic_node_pt->
x(
t,
i) =
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Base class for all brick elements.
Definition: Qelements.h:1233
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
Definition: nodes.h:238
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
Definition: elements.h:2175
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
Definition: elements.cc:3962
virtual void get_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: elements.h:990
Definition: macro_element.h:73
double & x(const unsigned &i)
Return the i-th nodal coordinate.
Definition: nodes.h:1060
Definition: oomph_definitions.h:222
double & s_macro_ll(const unsigned &i)
Definition: Qelements.h:186
double & s_macro_ur(const unsigned &i)
Definition: Qelements.h:202
Base class for Solid Qelements.
Definition: Qelements.h:331
virtual void set_macro_elem_pt(MacroElement *macro_elem_pt)
Broken assignment operator.
Definition: Qelements.h:349
void get_x_and_xi(const Vector< double > &s, Vector< double > &x_fe, Vector< double > &x, Vector< double > &xi_fe, Vector< double > &xi) const
Definition: Qelements.h:379
Definition: refineable_elements.h:97
Definition: refineable_brick_element.h:68
static std::map< unsigned, DenseMatrix< int > > Father_bound
Definition: refineable_brick_element.h:172
unsigned required_nsons() const
A refineable brick element has eight sons.
Definition: refineable_brick_element.h:102
OcTree * octree_pt() const
Pointer to octree representation of this element.
Definition: refineable_brick_element.h:150
virtual void further_setup_hanging_nodes()=0
virtual Node * node_created_by_son_of_neighbour(const Vector< double > &s_fraction, bool &is_periodic)
Definition: refineable_brick_element.h:118
OcTree * octree_pt()
Pointer to octree representation of this element.
Definition: refineable_brick_element.h:144
Definition: Qelements.h:2259
Definition: refineable_elements.h:874
Refineable version of Solid brick elements.
Definition: refineable_brick_element.h:239
void build(Mesh *&mesh_pt, Vector< Node * > &new_node_pt, bool &was_already_built, std::ofstream &new_nodes_file)
Definition: refineable_brick_element.h:294
void set_macro_elem_pt(MacroElement *macro_elem_pt)
Final over-ride: Use version in QSolidElementBase.
Definition: refineable_brick_element.h:259
RefineableSolidQElement()
Constructor, just call the constructor of the RefineableQElement<2>
Definition: refineable_brick_element.h:242
void get_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: refineable_brick_element.h:274
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.
Definition: refineable_brick_element.h:265
virtual ~RefineableSolidQElement()
Broken assignment operator.
Definition: refineable_brick_element.h:255
Definition: Qelements.h:2286
MacroElement * Undeformed_macro_elem_pt
Pointer to the element's "undeformed" macro element (NULL by default)
Definition: elements.h:4076
unsigned nlagrangian_type() const
Definition: nodes.h:1877
double & xi(const unsigned &i)
Reference to i-th Lagrangian position.
Definition: nodes.h:1883
Definition: timesteppers.h:231
unsigned ntstorage() const
Definition: timesteppers.h:601
RealScalar s
Definition: level1_cplx_impl.h:130
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_zeta_op< typename DerivedX::Scalar >, const DerivedX, const DerivedQ > zeta(const Eigen::ArrayBase< DerivedX > &x, const Eigen::ArrayBase< DerivedQ > &q)
Definition: SpecialFunctionsArrayAPI.h:152
double max_error
Definition: MortaringCantileverCompareToNonMortaring.cpp:188
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
Vector< std::string > colour
Tecplot colours.
Definition: oomph_utilities.cc:1159
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
list x
Definition: plotDoE.py:28
t
Definition: plotPSD.py:36
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86