58 for (
unsigned i = 0;
i < 3; ++
i)
121 for (
unsigned ipt = 0;
ipt < Nintpt;
ipt++)
124 for (
unsigned i = 0;
i <
DIM;
i++)
144 double interpolated_p = 0.0;
166 for (
unsigned i = 0;
i <
DIM;
i++)
172 for (
unsigned i = 0;
i <
DIM + 1;
i++)
178 for (
unsigned j = 0;
j <
DIM;
j++)
192 for (
unsigned i = 0;
i < 2;
i++)
280 for (
unsigned i = 0;
i < 3;
i++)
287 for (
unsigned m = 0;
m < 3;
m++)
289 for (
unsigned n = 0;
n < 3;
n++)
505 for (
unsigned i = 0;
i <
DIM + 1;
i++)
553 interpolated_dudx(0, 0) *
dtestfdx(
l, 0) * W *
558 (interpolated_dudx(0, 1) +
559 Gamma[0] * interpolated_dudx(1, 0)) *
573 (
r * interpolated_u[0] * interpolated_dudx(0, 0) -
574 interpolated_u[2] * interpolated_u[2] +
575 r * interpolated_u[1] * interpolated_dudx(0, 1)) *
581 for (
unsigned k = 0;
k < 2;
k++)
584 interpolated_dudx(0,
k) *
testf[
l] * W *
615 (interpolated_dudx(1, 0) +
616 Gamma[1] * interpolated_dudx(0, 1)) *
621 interpolated_dudx(1, 1) *
dtestfdx(
l, 1) * W *
631 (
r * interpolated_u[0] * interpolated_dudx(1, 0) +
632 r * interpolated_u[1] * interpolated_dudx(1, 1)) *
638 for (
unsigned k = 0;
k < 2;
k++)
641 interpolated_dudx(1,
k) *
testf[
l] * W *
665 (
r * interpolated_dudx(2, 0) -
666 Gamma[0] * interpolated_u[2]) *
675 ((interpolated_u[2] /
r) -
676 Gamma[0] * interpolated_dudx(2, 0)) *
687 (
r * interpolated_u[0] * interpolated_dudx(2, 0) +
688 interpolated_u[0] * interpolated_u[2] +
689 r * interpolated_u[1] * interpolated_dudx(2, 1)) *
695 for (
unsigned k = 0;
k < 2;
k++)
698 interpolated_dudx(2,
k) *
testf[
l] * W *
742 for (
unsigned i2 = 0;
i2 <
DIM + 1;
i2++)
796 (1.0 +
Gamma[0]) * interpolated_dudx(0, 0) *
814 (interpolated_dudx(0, 1) +
815 Gamma[0] * interpolated_dudx(1, 0)) *
833 (1.0 +
Gamma[0]) * interpolated_u[0] *
849 (
r *
psif[
l2] * interpolated_dudx(0, 0) +
857 for (
unsigned k = 0;
k < 2;
k++)
879 (1.0 +
Gamma[0]) * interpolated_dudx(0, 0) *
897 (interpolated_dudx(0, 1) +
898 Gamma[0] * interpolated_dudx(1, 0)) *
912 (1.0 +
Gamma[0]) * interpolated_u[0] *
920 interpolated_dudx(0, 1) *
testf[
l] * W *
936 (1.0 +
Gamma[0]) * interpolated_dudx(0, 0) *
950 (interpolated_dudx(0, 1) +
951 Gamma[0] * interpolated_dudx(1, 0)) *
965 (1.0 +
Gamma[0]) * interpolated_u[0] *
1009 (interpolated_dudx(1, 0) +
1010 Gamma[1] * interpolated_dudx(0, 1)) *
1024 (1.0 +
Gamma[1]) * interpolated_dudx(1, 1) *
1032 interpolated_dudx(1, 0) *
testf[
l] * W *
1065 (interpolated_dudx(1, 0) +
1066 Gamma[1] * interpolated_dudx(0, 1)) *
1085 (1.0 +
Gamma[1]) * interpolated_dudx(1, 1) *
1102 r *
psif[
l2] * interpolated_dudx(1, 1) +
1109 for (
unsigned k = 0;
k < 2;
k++)
1133 (interpolated_dudx(1, 0) +
1134 Gamma[1] * interpolated_dudx(0, 1)) *
1142 (1.0 +
Gamma[1]) * interpolated_dudx(1, 1) *
1163 (
r * interpolated_dudx(2, 0) -
1164 Gamma[0] * interpolated_u[2]) *
1172 interpolated_dudx(2, 1) *
dtestfdx(
l, 1) *
1179 ((interpolated_u[2] /
r) -
1180 Gamma[0] * interpolated_dudx(2, 0)) *
1187 (
r *
psif[
l2] * interpolated_dudx(2, 0) +
1188 psif[
l2] * interpolated_u[2]) *
1207 (
r * interpolated_dudx(2, 0) -
1208 Gamma[0] * interpolated_u[2]) *
1216 interpolated_dudx(2, 1) *
dtestfdx(
l, 1) *
1223 ((interpolated_u[2] /
r) -
1224 Gamma[0] * interpolated_dudx(2, 0)) *
1231 interpolated_dudx(2, 1) *
testf[
l] * W *
1265 (
r * interpolated_dudx(2, 0) -
1266 Gamma[0] * interpolated_u[2]) *
1284 interpolated_dudx(2, 1) *
dtestfdx(
l, 1) *
1301 ((interpolated_u[2] /
r) -
1302 Gamma[0] * interpolated_dudx(2, 0)) *
1318 interpolated_u[0] *
psif[
l2] +
1325 for (
unsigned k = 0;
k < 2;
k++)
1459 (interpolated_u[0] +
r * interpolated_dudx(0, 0) +
1460 r * interpolated_dudx(1, 1)) *
1492 for (
unsigned i2 = 0;
i2 <
DIM + 1;
i2++)
1563 "RefineableGeneralisedNewtonianAxisymmetricNavierStokesEquations::\n";
1564 function +=
"get_dresidual_dnodal_coordinates(...)";
1584 for (
unsigned i = 0;
i < 3;
i++)
1677 for (std::map<Node*, unsigned>::iterator
it =
1686 unsigned q =
it->second;
1689 if (
nod_pt->has_auxiliary_node_update_fct_pt())
1696 warning_stream <<
"\nThe functionality to evaluate the additional"
1697 <<
"\ncontribution to the deriv of the residual eqn"
1698 <<
"\nw.r.t. the nodal coordinates which comes about"
1699 <<
"\nif a node's values are updated using an auxiliary"
1700 <<
"\nnode update function has NOT been tested for"
1701 <<
"\nrefineable axisymmetric Navier-Stokes elements."
1702 <<
"\nUse at your own risk" << std::endl;
1704 "RefineableGeneralisedNewtonianAxisymmetricNavierStokes"
1705 "Equations::get_dresidual_dnodal_coordinates",
1710 for (
unsigned i = 0;
i < 3;
i++)
1716 for (
unsigned p = 0;
p < 2;
p++)
1726 nod_pt->perform_auxiliary_node_update_fct();
1729 for (
unsigned i = 0;
i < 3;
i++)
1740 nod_pt->perform_auxiliary_node_update_fct();
1755 for (
unsigned i = 0;
i < 2;
i++)
1784 double interpolated_p = 0.0;
1805 for (
unsigned i = 0;
i < 2;
i++)
1811 for (
unsigned i = 0;
i < 3;
i++)
1819 for (
unsigned j = 0;
j < 2;
j++)
1833 for (
unsigned i = 0;
i < 2;
i++)
1846 for (
unsigned p = 0;
p < 2;
p++)
1849 for (
unsigned i = 0;
i < 3;
i++)
1852 for (
unsigned k = 0;
k < 2;
k++)
1959 for (
unsigned p = 0;
p < 2;
p++)
1981 interpolated_dudx(0, 0) *
dtestfdx(
l, 0);
1984 (interpolated_dudx(0, 1) +
1985 Gamma[0] * interpolated_dudx(1, 0)) *
1996 (
r * interpolated_u[0] * interpolated_dudx(0, 0) -
1997 interpolated_u[2] * interpolated_u[2] +
1998 r * interpolated_u[1] * interpolated_dudx(0, 1)) *
2004 for (
unsigned k = 0;
k < 2;
k++)
2007 interpolated_dudx(0,
k) *
testf_;
2049 (interpolated_dudx(0, 1) +
2050 Gamma[0] * interpolated_dudx(1, 0)) *
2059 (interpolated_dudx(0, 1) +
2060 Gamma[0] * interpolated_dudx(1, 0)) *
2065 for (
unsigned k = 0;
k < 2;
k++)
2151 for (
unsigned p = 0;
p < 2;
p++)
2159 for (
unsigned k = 0;
k < 2;
k++)
2234 for (
unsigned p = 0;
p < 2;
p++)
2256 (interpolated_dudx(1, 0) +
2257 Gamma[1] * interpolated_dudx(0, 1)) *
2261 interpolated_dudx(1, 1) *
dtestfdx(
l, 1);
2268 (
r * interpolated_u[0] * interpolated_dudx(1, 0) +
2269 r * interpolated_u[1] * interpolated_dudx(1, 1)) *
2275 for (
unsigned k = 0;
k < 2;
k++)
2278 interpolated_dudx(1,
k) *
testf_;
2314 (interpolated_dudx(1, 0) +
2315 Gamma[1] * interpolated_dudx(0, 1)) *
2318 (1.0 +
Gamma[1]) * interpolated_dudx(1, 1) *
2324 Gamma[1] * interpolated_dudx(0, 1)) *
2326 (1.0 +
Gamma[1]) * interpolated_dudx(1, 1) *
2331 for (
unsigned k = 0;
k < 2;
k++)
2410 for (
unsigned p = 0;
p < 2;
p++)
2427 for (
unsigned k = 0;
k < 2;
k++)
2481 for (
unsigned p = 0;
p < 2;
p++)
2503 (
r * interpolated_dudx(2, 0) -
Gamma[0] * interpolated_u[2]) *
2510 ((interpolated_u[2] /
r) -
2511 Gamma[0] * interpolated_dudx(2, 0)) *
2519 (
r * interpolated_u[0] * interpolated_dudx(2, 0) +
2520 interpolated_u[0] * interpolated_u[2] +
2521 r * interpolated_u[1] * interpolated_dudx(2, 1)) *
2527 for (
unsigned k = 0;
k < 2;
k++)
2530 interpolated_dudx(2,
k) *
testf_;
2577 for (
unsigned k = 0;
k < 2;
k++)
2663 for (
unsigned p = 0;
p < 2;
p++)
2685 for (
unsigned k = 0;
k < 2;
k++)
2769 for (
unsigned p = 0;
p < 2;
p++)
2778 double aux = -
r * source;
2781 aux += (interpolated_u[0] +
r * interpolated_dudx(0, 0) +
2782 r * interpolated_dudx(1, 1));
2802 aux += (interpolated_dudx(0, 0) + interpolated_dudx(1, 1)) *
2859 for (
unsigned p = 0;
p < 2;
p++)
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
double nodal_value(const unsigned &n, const unsigned &i) const
Return the i-th value stored at local node n. Produces suitably interpolated values for hanging nodes...
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Return the local equation number corresponding to the i-th value at the n-th local node.
unsigned nnode() const
Return the number of nodes.
double nodal_position(const unsigned &n, const unsigned &i) const
Return the i-th coordinate at local node n. If the node is hanging, the appropriate interpolation is ...
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
double dnodal_position_dt(const unsigned &n, const unsigned &i) const
Return the i-th component of nodal velocity: dx/dt at local node n.
static double Default_fd_jacobian_step
Double used for the default finite difference step in elemental jacobian calculations.
unsigned ndof() const
Return the number of equations/dofs in the element.
virtual void get_source_fct_gradient(const double &time, const unsigned &ipt, const Vector< double > &x, Vector< double > &gradient)
Get gradient of source term at (Eulerian) position x. Computed via function pointer (if set) or by fi...
virtual unsigned u_index_axi_nst(const unsigned &i) const
Return the index at which the i-th unknown velocity component is stored. The default value,...
virtual int p_local_eqn(const unsigned &n) const =0
Access function for the local equation number information for the pressure. p_local_eqn[n] = local eq...
virtual void extrapolated_strain_rate(const Vector< double > &s, DenseMatrix< double > &strain_rate) const
Extrapolated strain-rate tensor: where (in that order) based on the previous time steps evaluated a...
virtual void pshape_axi_nst(const Vector< double > &s, Shape &psi) const =0
Compute the pressure shape functions at local coordinate s.
static Vector< double > Gamma
Vector to decide whether the stress-divergence form is used or not.
virtual unsigned npres_axi_nst() const =0
Function to return number of pressure degrees of freedom.
bool Use_extrapolated_strainrate_to_compute_second_invariant
GeneralisedNewtonianConstitutiveEquation< 3 > * Constitutive_eqn_pt
Pointer to the generalised Newtonian constitutive equation.
const double & re() const
Reynolds number.
double du_dt_axi_nst(const unsigned &n, const unsigned &i) const
i-th component of du/dt at local node n. Uses suitably interpolated value for hanging nodes.
double get_source_fct(const double &time, const unsigned &ipt, const Vector< double > &x)
Calculate the source fct at given time and Eulerian position.
virtual void get_body_force_axi_nst(const double &time, const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &result)
Calculate the body force fct at a given time and Eulerian position.
virtual int p_nodal_index_axi_nst() const
Which nodal value represents the pressure?
const Vector< double > & g() const
Vector of gravitational components.
const double & viscosity_ratio() const
Viscosity ratio for element: Element's viscosity relative to the viscosity used in the definition of ...
virtual double p_axi_nst(const unsigned &n_p) const =0
Pressure at local pressure "node" n_p Uses suitably interpolated value for hanging nodes.
const double & re_st() const
Product of Reynolds and Strouhal number (=Womersley number)
virtual double dshape_and_dtest_eulerian_at_knot_axi_nst(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
Compute the shape functions and derivatives w.r.t. global coords at ipt-th integration point Return J...
const double & re_invfr() const
Global inverse Froude number.
bool ALE_is_disabled
Boolean flag to indicate if ALE formulation is disabled when the time-derivatives are computed....
const double & re_invro() const
Global Reynolds number multiplied by inverse Rossby number.
void strain_rate(const Vector< double > &s, DenseMatrix< double > &strain_rate) const
Strain-rate tensor: where (in that order)
const double & density_ratio() const
Density ratio for element: Element's density relative to the viscosity used in the definition of the ...
virtual void get_body_force_gradient_axi_nst(const double &time, const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, DenseMatrix< double > &d_body_force_dx)
Get gradient of body force term at (Eulerian) position x. Computed via function pointer (if set) or b...
virtual double viscosity(const double &second_invariant_of_rate_of_strain_tensor)=0
Function implementing the constitutive model Input: second invariant of the rate of strain Output: th...
virtual double dviscosity_dinvariant(const double &second_invariant_of_rate_of_strain_tensor)=0
Function returning the derivative of the viscosity w.r.t. the second invariant of the rate of strain ...
Class that contains data for hanging nodes.
Node *const & master_node_pt(const unsigned &i) const
Return a pointer to the i-th master node.
virtual double knot(const unsigned &i, const unsigned &j) const =0
Return local coordinate s[j] of i-th integration point.
virtual unsigned nweight() const =0
Return the number of integration points of the scheme.
virtual double weight(const unsigned &i) const =0
Return weight of i-th integration point.
Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a gi...
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
bool is_hanging() const
Test whether the node is geometrically hanging.
HangInfo *const & hanging_pt() const
Return pointer to hanging node data (this refers to the geometric hanging node status) (const version...
An OomphLibError object which should be thrown when an run-time error is encountered....
An OomphLibWarning object which should be created as a temporary object to issue a warning....
std::map< Node *, unsigned > shape_controlling_node_lookup()
Return lookup scheme for unique number associated with any of the nodes that actively control the sha...
unsigned nshape_controlling_nodes()
Number of shape-controlling nodes = the number of non-hanging nodes plus the number of master nodes a...
int local_hang_eqn(Node *const &node_pt, const unsigned &i)
Access function that returns the local equation number for the hanging node variables (values stored ...
void fill_in_generic_residual_contribution_axi_nst(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, unsigned flag)
Add element's contribution to the elemental residual vector and/or Jacobian matrix and mass matrix fl...
virtual void get_dresidual_dnodal_coordinates(RankThreeTensor< double > &dresidual_dnodal_coordinates)
Compute derivatives of elemental residual vector with respect to nodal coordinates....
virtual Node * pressure_node_pt(const unsigned &n_p)
Pointer to n_p-th pressure node (Default: NULL, indicating that pressure is not based on nodal interp...
A Class for shape functions. In simple cases, the shape functions have only one index that can be tho...
TAdvectionDiffusionReactionElement<NREAGENT,DIM,NNODE_1D> elements are isoparametric triangular DIM-d...
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
Time *const & time_pt() const
Access function for the pointer to time (const version)
double & time()
Return the current value of the continuous time.
double second_invariant(const DenseMatrix< double > &tensor)
Compute second invariant of tensor.
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).