27 #ifndef OOMPH_GENERALISED_NEWTONIAN_REFINEABLE_AXISYMMETRIC_NAVIER_STOKES_ELEMENTS_HEADER
28 #define OOMPH_GENERALISED_NEWTONIAN_REFINEABLE_AXISYMMETRIC_NAVIER_STOKES_ELEMENTS_HEADER
32 #include <oomph-lib-config.h>
36 #include "../generic/refineable_quad_element.h"
37 #include "../generic/error_estimator.h"
90 if (
flux.size() < num_entries)
92 std::ostringstream error_message;
93 error_message <<
"The flux vector has the wrong number of entries, "
94 <<
flux.size() <<
", whereas it should be " << num_entries
111 for (
unsigned i = 0;
i <
DIM;
i++)
113 flux[icount] = strainrate(
i,
i);
118 for (
unsigned i = 0;
i <
DIM;
i++)
120 for (
unsigned j =
i + 1;
j <
DIM;
j++)
122 flux[icount] = strainrate(
i,
j);
140 cast_father_element_pt =
dynamic_cast<
149 this->
Re_pt = cast_father_element_pt->
re_pt();
157 this->
G_pt = cast_father_element_pt->
g_pt();
182 unsigned n_node = this->
nnode();
197 unsigned n_u_dof = 0;
198 for (
unsigned l = 0; l < n_node; l++)
200 unsigned n_master = 1;
209 n_master = hang_info_pt->
nmaster();
218 for (
unsigned m = 0;
m < n_master;
m++)
242 du_ddata.resize(n_u_dof, 0.0);
243 global_eqn_number.resize(n_u_dof, 0);
248 for (
unsigned l = 0; l < n_node; l++)
250 unsigned n_master = 1;
251 double hang_weight = 1.0;
260 n_master = hang_info_pt->
nmaster();
269 for (
unsigned m = 0;
m < n_master;
m++)
299 global_eqn_number[count] = global_eqn;
301 du_ddata[count] = psi[l] * hang_weight;
325 unsigned n_element = element_pt.size();
326 for (
unsigned e = 0;
e < n_element;
e++)
341 unsigned n_element = element_pt.size();
342 for (
unsigned e = 0;
e < n_element;
e++)
377 double*
const& parameter_pt,
421 unsigned n_node = this->
nnode();
424 for (
unsigned n = 0;
n < n_node;
n++)
434 unsigned n_node = this->
nnode();
437 for (
unsigned n = 0;
n < n_node;
n++)
444 for (
unsigned l = 0; l < n_pres; l++)
449 nod_pt->
unpin(p_index);
513 values.resize(
DIM + 1, 0.0);
516 for (
unsigned i = 0;
i <
DIM;
i++)
536 values.resize(
DIM + 1);
539 for (
unsigned i = 0;
i <
DIM + 1;
i++)
545 unsigned n_node =
nnode();
552 for (
unsigned i = 0;
i <
DIM;
i++)
556 for (
unsigned l = 0; l < n_node; l++)
624 if (n_value ==
static_cast<int>(
DIM))
627 unsigned total_index = 0;
629 unsigned NNODE_1D = 2;
634 for (
unsigned i = 0;
i < 2;
i++)
643 else if (
s[
i] == 1.0)
645 index[
i] = NNODE_1D - 1;
651 double float_index = 0.5 * (1.0 +
s[
i]) * (NNODE_1D - 1);
652 index[
i] =
int(float_index);
655 double excess = float_index - index[
i];
666 index[
i] *
static_cast<unsigned>(
pow(
static_cast<float>(NNODE_1D),
667 static_cast<int>(
i)));
706 return this->
nnode();
714 const int& n_value)
const
723 return this->
shape(s, psi);
740 GeneralisedNewtonianAxisymmetricQTaylorHoodElement>
757 FaceGeometry<GeneralisedNewtonianAxisymmetricQTaylorHoodElement>>
784 for (
unsigned l = 0; l < n_pres; l++)
809 using namespace QuadTreeNames;
818 double av_press = 0.0;
821 for (
unsigned ison = 0; ison < 4; ison++)
938 values.resize(
DIM, 0.0);
941 for (
unsigned i = 0;
i <
DIM;
i++)
966 for (
unsigned i = 0;
i <
DIM;
i++)
972 unsigned n_node =
nnode();
979 for (
unsigned i = 0;
i <
DIM;
i++)
983 for (
unsigned l = 0; l < n_node; l++)
1004 using namespace QuadTreeNames;
1023 else if (son_type ==
SE)
1029 else if (son_type ==
NE)
1036 else if (son_type ==
NW)
1044 cast_father_el_pt =
dynamic_cast<
1076 GeneralisedNewtonianAxisymmetricQCrouzeixRaviartElement>
1093 FaceGeometry<GeneralisedNewtonianAxisymmetricQCrouzeixRaviartElement>>
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
long & eqn_number(const unsigned &i)
Return the equation number of the i-th stored variable.
Definition: nodes.h:367
void pin(const unsigned &i)
Pin the i-th stored variable.
Definition: nodes.h:385
void unpin(const unsigned &i)
Unpin the i-th stored variable.
Definition: nodes.h:391
void set_value(const unsigned &i, const double &value_)
Definition: nodes.h:271
double value(const unsigned &i) const
Definition: nodes.h:293
Definition: error_estimator.h:79
FaceGeometry()
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:1096
FaceGeometry()
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:760
FaceGeometry()
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:1079
FaceGeometry()
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:743
Definition: elements.h:4998
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
Definition: elements.h:2175
double nodal_value(const unsigned &n, const unsigned &i) const
Definition: elements.h:2593
static const double Node_location_tolerance
Definition: elements.h:1374
virtual unsigned nvertex_node() const
Definition: elements.h:2491
virtual void shape(const Vector< double > &s, Shape &psi) const =0
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
virtual Node * get_node_at_local_coordinate(const Vector< double > &s) const
Definition: elements.cc:3882
virtual Node * vertex_node_pt(const unsigned &j) const
Definition: elements.h:2500
virtual unsigned nnode_1d() const
Definition: elements.h:2218
virtual double local_one_d_fraction_of_node(const unsigned &n1d, const unsigned &i)
Definition: elements.h:1858
Data *& internal_data_pt(const unsigned &i)
Return a pointer to i-th internal data object.
Definition: elements.h:622
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:119
double *& re_st_pt()
Pointer to product of Reynolds and Strouhal number (=Womersley number)
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:438
virtual unsigned u_index_axi_nst(const unsigned &i) const
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:546
void(*&)(const double &time, const Vector< double > &x, Vector< double > &f) axi_nst_body_force_fct_pt()
Access function for the body-force pointer.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:506
double * ReInvRo_pt
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:165
double *& viscosity_ratio_pt()
Pointer to Viscosity Ratio.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:500
Vector< double > *& g_pt()
Pointer to Vector of gravitational components.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:474
double *& density_ratio_pt()
Pointer to Density ratio.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:487
double * Viscosity_Ratio_pt
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:145
double * ReInvFr_pt
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:161
double(*&)(const double &time, const Vector< double > &x) source_fct_pt()
Access function for the source-function pointer.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:514
double * Re_pt
Pointer to global Reynolds number.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:154
double * Density_Ratio_pt
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:149
void(* Body_force_fct_pt)(const double &time, const Vector< double > &x, Vector< double > &result)
Pointer to body force function.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:171
double *& re_invro_pt()
Pointer to global inverse Froude number.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:462
double * ReSt_pt
Pointer to global Reynolds number x Strouhal number (=Womersley)
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:157
double(* Source_fct_pt)(const double &time, const Vector< double > &x)
Pointer to volumetric source function.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:176
double *& re_invfr_pt()
Pointer to global inverse Froude number.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:450
double interpolated_p_axi_nst(const Vector< double > &s) const
Return FE interpolated pressure at local coordinate s.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:1080
Vector< double > * G_pt
Pointer to global gravity Vector.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:168
double *& re_pt()
Pointer to Reynolds number.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:432
bool ALE_is_disabled
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:188
void strain_rate(const Vector< double > &s, DenseMatrix< double > &strain_rate) const
Definition: generalised_newtonian_axisym_navier_stokes_elements.cc:749
void interpolated_u_axi_nst(const Vector< double > &s, Vector< double > &veloc) const
Compute vector of FE interpolated velocity u at local coordinate s.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:944
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:1313
unsigned npres_axi_nst() const
Return number of pressure values.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:1388
unsigned P_axi_nst_internal_index
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:1321
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:1616
static const unsigned Pconv[]
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:1624
virtual int p_nodal_index_axi_nst() const
Which nodal value represents the pressure?
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:1682
unsigned npres_axi_nst() const
Return number of pressure values.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:1695
void pshape_axi_nst(const Vector< double > &s, Shape &psi) const
Pressure shape functions at local coordinate s.
Definition: generalised_newtonian_axisym_navier_stokes_elements.h:1867
double const & master_weight(const unsigned &i) const
Return weight for dofs on i-th master node.
Definition: nodes.h:808
Node *const & master_node_pt(const unsigned &i) const
Return a pointer to the i-th master node.
Definition: nodes.h:791
unsigned nmaster() const
Return the number of master nodes.
Definition: nodes.h:785
Definition: matrices.h:74
HangInfo *const & hanging_pt() const
Definition: nodes.h:1228
bool is_hanging() const
Test whether the node is geometrically hanging.
Definition: nodes.h:1285
Definition: oomph_definitions.h:222
A Rank 3 Tensor class.
Definition: matrices.h:1370
Definition: refineable_elements.h:97
virtual RefineableElement * father_element_pt() const
Return a pointer to the father element.
Definition: refineable_elements.h:539
Refineable version of the Axisymmetric Navier–Stokes equations.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:49
double geometric_jacobian(const Vector< double > &x)
Fill in the geometric Jacobian, which in this case is r.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:129
virtual void pin_elemental_redundant_nodal_pressure_dofs()
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:63
void fill_in_generic_residual_contribution_axi_nst(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, unsigned flag)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.cc:38
void dinterpolated_u_axi_nst_ddata(const Vector< double > &s, const unsigned &i, Vector< double > &du_ddata, Vector< unsigned > &global_eqn_number)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:176
void fill_in_generic_dresidual_contribution_axi_nst(double *const ¶meter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam, unsigned flag)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:376
static void pin_redundant_nodal_pressures(const Vector< GeneralisedElement * > &element_pt)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:320
virtual Node * pressure_node_pt(const unsigned &n_p)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:53
void get_Z2_flux(const Vector< double > &s, Vector< double > &flux)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:83
virtual void get_dresidual_dnodal_coordinates(RankThreeTensor< double > &dresidual_dnodal_coordinates)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.cc:1557
void fill_in_contribution_to_hessian_vector_products(Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:390
static void unpin_all_pressure_dofs(const Vector< GeneralisedElement * > &element_pt)
Unpin all pressure dofs in elements listed in vector.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:336
unsigned num_Z2_flux_terms()
Number of 'flux' terms for Z2 error estimation.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:75
virtual void unpin_elemental_pressure_dofs()=0
Unpin all pressure dofs in the element.
RefineableGeneralisedNewtonianAxisymmetricNavierStokesEquations()
Empty Constructor.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:67
void further_build()
Further build: pass the pointers down to the sons.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:136
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:777
void further_build()
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:998
void get_interpolated_values(const unsigned &t, const Vector< double > &s, Vector< double > &values)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:956
void rebuild_from_sons(Mesh *&mesh_pt)
Rebuild from sons: Reconstruct pressure from the (merged) sons.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:807
unsigned ncont_interpolated_values() const
Number of continuously interpolated values: 3 (velocities)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:801
RefineableGeneralisedNewtonianAxisymmetricQCrouzeixRaviartElement()
Constructor:
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:792
unsigned nvertex_node() const
Number of vertex nodes in the element.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:915
Node * vertex_node_pt(const unsigned &j) const
Pointer to the j-th vertex node in the element.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:922
void further_setup_hanging_nodes()
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:992
void get_interpolated_values(const Vector< double > &s, Vector< double > &values)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:932
unsigned nrecovery_order()
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:909
void unpin_elemental_pressure_dofs()
Unpin all the internal pressure freedoms.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:780
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:410
unsigned required_nvalue(const unsigned &n) const
Number of values (pinned or dofs) required at node n.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:467
void get_interpolated_values(const Vector< double > &s, Vector< double > &values)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:506
void get_interpolated_values(const unsigned &t, const Vector< double > &s, Vector< double > &values)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:529
unsigned nvertex_node() const
Number of vertex nodes in the element.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:490
void pin_elemental_redundant_nodal_pressure_dofs()
Unpin the proper nodal pressure dofs.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:431
Node * interpolating_node_pt(const unsigned &n, const int &n_value)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:580
Node * pressure_node_pt(const unsigned &n_p)
Pointer to n_p-th pressure node.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:413
RefineableGeneralisedNewtonianAxisymmetricQTaylorHoodElement()
Constructor:
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:456
unsigned ninterpolating_node(const int &n_value)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:697
Node * vertex_node_pt(const unsigned &j) const
Pointer to the j-th vertex node in the element.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:496
unsigned ncont_interpolated_values() const
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:474
Node * get_interpolating_node_at_local_coordinate(const Vector< double > &s, const int &n_value)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:619
void rebuild_from_sons(Mesh *&mesh_pt)
Rebuild from sons: empty.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:480
void unpin_elemental_pressure_dofs()
Unpin all pressure dofs.
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:419
double local_one_d_fraction_of_interpolating_node(const unsigned &n1d, const unsigned &i, const int &n_value)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:598
unsigned ninterpolating_node_1d(const int &n_value)
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:682
void further_setup_hanging_nodes()
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:570
unsigned nrecovery_order()
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:484
void interpolating_basis(const Vector< double > &s, Shape &psi, const int &n_value) const
Definition: generalised_newtonian_refineable_axisym_navier_stokes_elements.h:712
QuadTree * quadtree_pt()
Pointer to quadtree representation of this element.
Definition: refineable_quad_element.h:152
void setup_hang_for_value(const int &value_id)
Definition: refineable_quad_element.cc:1506
Definition: Qelements.h:2259
RefineableElement * object_pt() const
Definition: tree.h:88
Tree * father_pt() const
Return pointer to father: NULL if it's a root node.
Definition: tree.h:235
int son_type() const
Return son type.
Definition: tree.h:214
Tree * son_pt(const int &son_index) const
Definition: tree.h:103
RealScalar s
Definition: level1_cplx_impl.h:130
int * m
Definition: level2_cplx_impl.h:294
#define DIM
Definition: linearised_navier_stokes_elements.h:44
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625
void flux(const double &time, const Vector< double > &x, double &flux)
Get flux applied along boundary x=0.
Definition: pretend_melt.cc:59
@ SE
Definition: quadtree.h:57
@ NW
Definition: quadtree.h:58
@ NE
Definition: quadtree.h:59
@ SW
Definition: quadtree.h:56
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
void product(const MatrixType &m)
Definition: product.h:42
const char Y
Definition: test/EulerAngles.cpp:32
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2