41 int GeneralisedNewtonianAxisymmetricNavierStokesEquations::
42 Pressure_not_stored_at_node = -100;
45 double GeneralisedNewtonianAxisymmetricNavierStokesEquations::
46 Default_Physical_Constant_Value = 0.0;
49 double GeneralisedNewtonianAxisymmetricNavierStokesEquations::
50 Default_Physical_Ratio_Value = 1.0;
58 bool GeneralisedNewtonianAxisymmetricNavierStokesEquations::
59 Pre_multiply_by_viscosity_ratio =
false;
79 throw OomphLibError(
"Computation of diagonal of pressure mass matrix is "
80 "not impmented yet.\n",
182 outfile <<
"ZONE" << std::endl;
188 for (
unsigned ipt = 0;
ipt < Nintpt;
ipt++)
191 for (
unsigned i = 0;
i < 2;
i++)
206 double W = w *
J * x[0];
212 for (
unsigned i = 0;
i < 3;
i++)
220 for (
unsigned i = 0;
i < 2;
i++)
226 for (
unsigned i = 0;
i < 3;
i++)
259 outfile <<
"ZONE" << std::endl;
265 for (
unsigned ipt = 0;
ipt < Nintpt;
ipt++)
268 for (
unsigned i = 0;
i < 2;
i++)
283 double W = w *
J * x[0];
289 for (
unsigned i = 0;
i < 3;
i++)
297 for (
unsigned i = 0;
i < 2;
i++)
303 for (
unsigned i = 0;
i < 3;
i++)
320 const unsigned&
nplot,
349 for (
unsigned i = 0;
i < 2;
i++)
375 const unsigned&
nplot,
405 for (
unsigned i = 0;
i < 2;
i++)
431 std::ostream&
outfile,
const unsigned&
nplot,
const unsigned&
t)
459 for (
unsigned i = 0;
i < 2;
i++)
470 for (
unsigned i = 0;
i < 3;
i++)
474 interpolated_u[
i] = 0.0;
483 for (
unsigned i = 0;
i < 2;
i++)
489 for (
unsigned i = 0;
i < 3;
i++)
491 outfile << interpolated_u[
i] <<
" ";
524 for (
unsigned i = 0;
i < 2;
i++)
530 for (
unsigned i = 0;
i < 3;
i++)
570 for (
unsigned i = 0;
i < 2;
i++)
577 for (
unsigned i = 0;
i < 3;
i++)
605 "Check the dissipation calculation for axisymmetric NSt",
619 for (
unsigned ipt = 0;
ipt < Nintpt;
ipt++)
622 for (
unsigned i = 0;
i < 2;
i++)
639 for (
unsigned i = 0;
i < 3;
i++)
641 for (
unsigned j = 0;
j < 3;
j++)
673 if ((N.size() == 3) && (N[2] != 0.0))
676 "Unit normal passed into this fct should either be 2D (r,z) or have a "
677 "zero component in the theta-direction",
698 double second_invariant =
707 for (
unsigned i = 0;
i < 3;
i++)
710 for (
unsigned j = 0;
j < 3;
j++)
724 "Check the dissipation calculation for axisymmetric NSt",
734 for (
unsigned i = 0;
i < 3;
i++)
736 for (
unsigned j = 0;
j < 3;
j++)
755 std::ostringstream error_message;
756 error_message <<
"The strain rate has incorrect dimensions "
758 <<
" Not 3" << std::endl;
791 for (
unsigned i = 0;
i < 3; ++
i)
858 std::ostringstream error_message;
859 error_message <<
"The strain rate has incorrect dimensions "
861 <<
" Not 3" << std::endl;
865 "GeneralisedNewtonianAxisymmetricNavierStokeEquations::strain_rate()",
908 for (
unsigned i = 0;
i < 3; ++
i)
983 std::ostringstream error_message;
984 error_message <<
"The strain rate has incorrect dimensions "
986 <<
" Not 3" << std::endl;
1008 for (
unsigned i = 0;
i < 3;
i++)
1010 for (
unsigned j = 0;
j < 3;
j++)
1029 "Check the kinetic energy calculation for axisymmetric NSt",
1043 for (
unsigned ipt = 0;
ipt < Nintpt;
ipt++)
1046 for (
unsigned i = 0;
i < 2;
i++)
1059 for (
unsigned i = 0;
i < 3;
i++)
1087 for (
unsigned ipt = 0;
ipt < Nintpt;
ipt++)
1090 for (
unsigned i = 0;
i < 2;
i++)
1137 for (
unsigned ipt = 0;
ipt < Nintpt;
ipt++)
1147 double second_invariant =
1174 if (
ndof() == 0)
return;
1187 for (
unsigned i = 0;
i < 3; ++
i)
1219 for (
unsigned ipt = 0;
ipt < Nintpt;
ipt++)
1242 double interpolated_p = 0.0;
1261 for (
unsigned i = 0;
i < 2;
i++)
1267 for (
unsigned i = 0;
i < 3;
i++)
1274 for (
unsigned j = 0;
j < 2;
j++)
1288 for (
unsigned i = 0;
i < 2;
i++)
1383 for (
unsigned i = 0;
i < 3;
i++)
1401 for (
unsigned m = 0;
m < 3;
m++)
1403 for (
unsigned n = 0;
n < 3;
n++)
1637 (1.0 +
Gamma[0]) * interpolated_dudx(0, 0) *
1643 (interpolated_dudx(0, 1) +
Gamma[0] * interpolated_dudx(1, 0)) *
1648 interpolated_u[0] *
testf[
l] * W /
r;
1657 (
r * interpolated_u[0] * interpolated_dudx(0, 0) -
1658 interpolated_u[2] * interpolated_u[2] +
1659 r * interpolated_u[1] * interpolated_dudx(0, 1)) *
1665 for (
unsigned k = 0;
k < 2;
k++)
1668 interpolated_dudx(0,
k) *
testf[
l] * W;
1703 interpolated_dudx(0, 0) *
dtestfdx(
l, 0) * W;
1716 (interpolated_dudx(0, 1) +
1717 Gamma[0] * interpolated_dudx(1, 0)) *
1731 interpolated_u[0] *
testf[
l] * W /
r;
1744 (
r *
psif[
l2] * interpolated_dudx(0, 0) +
1752 for (
unsigned k = 0;
k < 2;
k++)
1773 interpolated_dudx(0, 0) *
dtestfdx(
l, 0) * W;
1786 (interpolated_dudx(0, 1) +
1787 Gamma[0] * interpolated_dudx(1, 0)) *
1798 interpolated_u[0] *
testf[
l] * W /
r;
1803 interpolated_dudx(0, 1) *
1818 interpolated_dudx(0, 0) *
dtestfdx(
l, 0) * W;
1828 (interpolated_dudx(0, 1) +
1829 Gamma[0] * interpolated_dudx(1, 0)) *
1840 interpolated_u[0] *
testf[
l] * W /
r;
1911 (interpolated_dudx(1, 0) +
Gamma[1] * interpolated_dudx(0, 1)) *
1916 (1.0 +
Gamma[1]) * interpolated_dudx(1, 1) *
1926 (
r * interpolated_u[0] * interpolated_dudx(1, 0) +
1927 r * interpolated_u[1] * interpolated_dudx(1, 1)) *
1933 for (
unsigned k = 0;
k < 2;
k++)
1936 interpolated_dudx(1,
k) *
testf[
l] * W;
1964 (interpolated_dudx(1, 0) +
1965 Gamma[1] * interpolated_dudx(0, 1)) *
1976 interpolated_dudx(1, 1) *
dtestfdx(
l, 1) * W;
1981 interpolated_dudx(1, 0) *
2010 (interpolated_dudx(1, 0) +
2011 Gamma[1] * interpolated_dudx(0, 1)) *
2025 interpolated_dudx(1, 1) *
dtestfdx(
l, 1) * W;
2039 r *
psif[
l2] * interpolated_dudx(1, 1) +
2047 for (
unsigned k = 0;
k < 2;
k++)
2067 (interpolated_dudx(1, 0) +
2068 Gamma[1] * interpolated_dudx(0, 1)) *
2074 interpolated_dudx(1, 1) *
dtestfdx(
l, 1) * W;
2124 (
r * interpolated_dudx(2, 0) -
Gamma[0] * interpolated_u[2]) *
2129 interpolated_dudx(2, 1) *
dtestfdx(
l, 1) * W;
2134 ((interpolated_u[2] /
r) -
Gamma[0] * interpolated_dudx(2, 0)) *
2145 (
r * interpolated_u[0] * interpolated_dudx(2, 0) +
2146 interpolated_u[0] * interpolated_u[2] +
2147 r * interpolated_u[1] * interpolated_dudx(2, 1)) *
2153 for (
unsigned k = 0;
k < 2;
k++)
2156 interpolated_dudx(2,
k) *
testf[
l] * W;
2179 (
r * interpolated_dudx(2, 0) -
2180 Gamma[0] * interpolated_u[2]) *
2186 interpolated_dudx(2, 1) *
dtestfdx(
l, 1) * W;
2191 ((interpolated_u[2] /
r) -
2192 Gamma[0] * interpolated_dudx(2, 0)) *
2199 (
r *
psif[
l2] * interpolated_dudx(2, 0) +
2200 psif[
l2] * interpolated_u[2]) *
2217 (
r * interpolated_dudx(2, 0) -
2218 Gamma[0] * interpolated_u[2]) *
2224 interpolated_dudx(2, 1) *
dtestfdx(
l, 1) * W;
2229 ((interpolated_u[2] /
r) -
2230 Gamma[0] * interpolated_dudx(2, 0)) *
2236 interpolated_dudx(2, 1) *
2266 (
r * interpolated_dudx(2, 0) -
2267 Gamma[0] * interpolated_u[2]) *
2281 interpolated_dudx(2, 1) *
dtestfdx(
l, 1) * W;
2294 ((interpolated_u[2] /
r) -
2295 Gamma[0] * interpolated_dudx(2, 0)) *
2310 interpolated_u[0] *
psif[
l2] +
2317 for (
unsigned k = 0;
k < 2;
k++)
2354 (interpolated_u[0] +
r * interpolated_dudx(0, 0) +
2355 r * interpolated_dudx(1, 1)) *
2361 (interpolated_u[0] +
r * interpolated_dudx(0, 0) +
2362 r * interpolated_dudx(1, 1)) *
2425 "This has not been checked for generalised Newtonian elements!",
2446 for (
unsigned i = 0;
i < 3;
i++)
2504 for (
unsigned q = 0; q <
n_node; q++)
2510 if (
nod_pt->has_auxiliary_node_update_fct_pt())
2517 warning_stream <<
"\nThe functionality to evaluate the additional"
2518 <<
"\ncontribution to the deriv of the residual eqn"
2519 <<
"\nw.r.t. the nodal coordinates which comes about"
2520 <<
"\nif a node's values are updated using an auxiliary"
2521 <<
"\nnode update function has NOT been tested for"
2522 <<
"\naxisymmetric Navier-Stokes elements. Use at your"
2523 <<
"\nown risk" << std::endl;
2525 "GeneralisedNewtonianAxisymmetricNavierStokesEquations:"
2526 ":get_dresidual_dnodal_coordinates",
2531 for (
unsigned i = 0;
i < 3;
i++)
2537 for (
unsigned p = 0;
p < 2;
p++)
2547 nod_pt->perform_auxiliary_node_update_fct();
2550 for (
unsigned i = 0;
i < 3;
i++)
2561 nod_pt->perform_auxiliary_node_update_fct();
2573 for (
unsigned i = 0;
i < 2;
i++)
2601 double interpolated_p = 0.0;
2622 for (
unsigned i = 0;
i < 2;
i++)
2628 for (
unsigned i = 0;
i < 3;
i++)
2636 for (
unsigned j = 0;
j < 2;
j++)
2650 for (
unsigned i = 0;
i < 2;
i++)
2658 for (
unsigned q = 0; q <
n_node; q++)
2661 for (
unsigned p = 0;
p < 2;
p++)
2664 for (
unsigned i = 0;
i < 3;
i++)
2667 for (
unsigned k = 0;
k < 2;
k++)
2735 for (
unsigned p = 0;
p < 2;
p++)
2738 for (
unsigned q = 0; q <
n_node; q++)
2757 interpolated_dudx(0, 0) *
dtestfdx(
l, 0);
2761 (interpolated_dudx(0, 1) +
Gamma[0] * interpolated_dudx(1, 0)) *
2772 (
r * interpolated_u[0] * interpolated_dudx(0, 0) -
2773 interpolated_u[2] * interpolated_u[2] +
2774 r * interpolated_u[1] * interpolated_dudx(0, 1)) *
2780 for (
unsigned k = 0;
k < 2;
k++)
2783 interpolated_dudx(0,
k) *
testf_;
2825 (interpolated_dudx(0, 1) +
2826 Gamma[0] * interpolated_dudx(1, 0)) *
2834 (interpolated_dudx(0, 1) +
2835 Gamma[0] * interpolated_dudx(1, 0)) *
2840 for (
unsigned k = 0;
k < 2;
k++)
2884 for (
unsigned k = 0;
k < 2;
k++)
2936 for (
unsigned p = 0;
p < 2;
p++)
2939 for (
unsigned q = 0; q <
n_node; q++)
2959 (interpolated_dudx(1, 0) +
Gamma[1] * interpolated_dudx(0, 1)) *
2963 interpolated_dudx(1, 1) *
dtestfdx(
l, 1);
2970 (
r * interpolated_u[0] * interpolated_dudx(1, 0) +
2971 r * interpolated_u[1] * interpolated_dudx(1, 1)) *
2977 for (
unsigned k = 0;
k < 2;
k++)
2980 interpolated_dudx(1,
k) *
testf_;
3016 (interpolated_dudx(1, 0) +
3017 Gamma[1] * interpolated_dudx(0, 1)) *
3020 (1.0 +
Gamma[1]) * interpolated_dudx(1, 1) *
3026 Gamma[1] * interpolated_dudx(0, 1)) *
3028 (1.0 +
Gamma[1]) * interpolated_dudx(1, 1) *
3033 for (
unsigned k = 0;
k < 2;
k++)
3078 for (
unsigned k = 0;
k < 2;
k++)
3111 for (
unsigned p = 0;
p < 2;
p++)
3114 for (
unsigned q = 0; q <
n_node; q++)
3133 (
r * interpolated_dudx(2, 0) -
Gamma[0] * interpolated_u[2]) *
3140 ((interpolated_u[2] /
r) -
Gamma[0] * interpolated_dudx(2, 0)) *
3148 (
r * interpolated_u[0] * interpolated_dudx(2, 0) +
3149 interpolated_u[0] * interpolated_u[2] +
3150 r * interpolated_u[1] * interpolated_dudx(2, 1)) *
3156 for (
unsigned k = 0;
k < 2;
k++)
3159 interpolated_dudx(2,
k) *
testf_;
3206 for (
unsigned k = 0;
k < 2;
k++)
3262 for (
unsigned k = 0;
k < 2;
k++)
3306 for (
unsigned p = 0;
p < 2;
p++)
3309 for (
unsigned q = 0; q <
n_node; q++)
3315 double aux = -
r * source;
3318 aux += (interpolated_u[0] +
r * interpolated_dudx(0, 0) +
3319 r * interpolated_dudx(1, 1));
3340 (interpolated_dudx(0, 0) + interpolated_dudx(1, 1)) *
psif[q];
3381 <<
"Cannot compute analytic jacobian for parameter addressed by "
3405 diff_re_inv_fr =
true;
3409 diff_re_inv_ro =
true;
3421 for (
unsigned i = 0;
i < 3; ++
i)
3454 for (
unsigned ipt = 0;
ipt < Nintpt;
ipt++)
3477 double interpolated_p = 0.0;
3496 for (
unsigned i = 0;
i < 2;
i++)
3503 for (
unsigned i = 0;
i < 3;
i++)
3510 for (
unsigned j = 0;
j < 2;
j++)
3524 for (
unsigned i = 0;
i < 2;
i++)
3599 (
r * interpolated_u[0] * interpolated_dudx(0, 0) -
3600 interpolated_u[2] * interpolated_u[2] +
3601 r * interpolated_u[1] * interpolated_dudx(0, 1)) *
3610 for (
unsigned k = 0;
k < 2;
k++)
3613 interpolated_dudx(0,
k) *
testf[
l] *
3672 (
r *
psif[
l2] * interpolated_dudx(0, 0) +
3681 for (
unsigned k = 0;
k < 2;
k++)
3787 (
r * interpolated_u[0] * interpolated_dudx(1, 0) +
3788 r * interpolated_u[1] * interpolated_dudx(1, 1)) *
3797 for (
unsigned k = 0;
k < 2;
k++)
3800 interpolated_dudx(1,
k) *
testf[
l] *
3874 r *
psif[
l2] * interpolated_dudx(1, 1) +
3882 for (
unsigned k = 0;
k < 2;
k++)
3946 (
r * interpolated_u[0] * interpolated_dudx(2, 0) +
3947 interpolated_u[0] * interpolated_u[2] +
3948 r * interpolated_u[1] * interpolated_dudx(2, 1)) *
3957 for (
unsigned k = 0;
k < 2;
k++)
3960 interpolated_dudx(2,
k) *
testf[
l] *
3988 (
r *
psif[
l2] * interpolated_dudx(2, 0) +
3989 psif[
l2] * interpolated_u[2]) *
4059 interpolated_u[0] *
psif[
l2] +
4069 for (
unsigned k = 0;
k < 2;
k++)
4108 for (
unsigned i = 0;
i < 3; ++
i)
4140 for (
unsigned ipt = 0;
ipt < Nintpt;
ipt++)
4172 for (
unsigned i = 0;
i < 2;
i++)
4178 for (
unsigned i = 0;
i < 3;
i++)
4185 for (
unsigned j = 0;
j < 2;
j++)
4469 const unsigned n_vec = C.nrow();
4470 for (
unsigned i = 0;
i <
n_dof;
i++)
4472 for (
unsigned k = 0;
k <
n_dof;
k++)
4477 for (
unsigned v = 0;
v <
n_vec;
v++)
4542 for (
unsigned v = 0;
v <
nv;
v++)
4567 {3, 3, 3, 3, 3, 3, 3, 3, 3};
4620 for (
unsigned v = 0;
v <
nv;
v++)
4649 4, 3, 4, 3, 3, 3, 4, 3, 4};
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.
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
virtual double J_eulerian(const Vector< double > &s) const
Return the Jacobian of mapping from local to global coordinates at local position s.
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 std::string tecplot_zone_string(const unsigned &nplot) const
Return string for tecplot zone header (when plotting nplot points in each "coordinate direction")
double size() const
Calculate the size of the element (length, area, volume,...) in Eulerian computational coordinates....
virtual void shape(const Vector< double > &s, Shape &psi) const =0
Calculate the geometric shape functions at local coordinate s. This function must be overloaded for e...
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.
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Function pointer for function that computes vector-valued steady "exact solution" as .
virtual void get_s_plot(const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
Get cector of local coordinates of plot point i (when plotting nplot points in each "coordinate direc...
virtual unsigned nplot_points(const unsigned &nplot) const
Return total number of plot points (when plotting nplot points in each "coordinate direction")
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 ...
double dshape_eulerian(const Vector< double > &s, Shape &psi, DShape &dpsidx) const
Compute the geometric shape functions and also first derivatives w.r.t. global coordinates at local c...
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
virtual double J_eulerian_at_knot(const unsigned &ipt) const
Return the Jacobian of the mapping from local to global coordinates at the ipt-th integration point.
double raw_dnodal_position_dt(const unsigned &n, const unsigned &i) const
Return the i-th component of nodal velocity: dx/dt at local node n. Do not use the hanging node repre...
double raw_nodal_value(const unsigned &n, const unsigned &i) const
Return the i-th value stored at local node n but do NOT take hanging nodes into account.
double raw_nodal_position(const unsigned &n, const unsigned &i) const
Return the i-th coordinate at local node n. Do not use the hanging node representation....
virtual void write_tecplot_zone_footer(std::ostream &outfile, const unsigned &nplot) const
Add tecplot zone "footer" to output stream (when plotting nplot points in each "coordinate direction"...
void(* UnsteadyExactSolutionFctPt)(const double &, const Vector< double > &, Vector< double > &)
Function pointer for function that computes Vector-valued time-dependent function as .
virtual void shape_at_knot(const unsigned &ipt, Shape &psi) const
Return the geometric shape function at the ipt-th integration point.
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.
unsigned long eqn_number(const unsigned &ieqn_local) const
Return the global equation number corresponding to the ieqn_local-th local equation number.
int local_eqn_number(const unsigned long &ieqn_global) const
Return the local equation number corresponding to the ieqn_global-th global equation number....
double *& re_pt()
Pointer to Reynolds number.
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...
void get_pressure_and_velocity_mass_matrix_diagonal(Vector< double > &press_mass_diag, Vector< double > &veloc_mass_diag, const unsigned &which_one=0)
Compute the diagonal of the velocity/pressure mass matrices. If which one=0, both are computed,...
static bool Pre_multiply_by_viscosity_ratio
Static boolean telling us whether we pre-multiply the pressure and continuity by the viscosity ratio.
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 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)
Compute the derivative of residuals for the Navier–Stokes equations; with respect to a parameeter fla...
void fill_in_contribution_to_hessian_vector_products(Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
Compute the hessian tensor vector products required to perform continuation of bifurcations analytica...
double *& re_invfr_pt()
Pointer to global inverse Froude number.
void output(std::ostream &outfile)
Output function: x,y,[z],u,v,[w],p in tecplot format. Default number of plot points.
double dissipation() const
Return integral of dissipation over element.
void compute_error(std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
Validate against exact solution at given time Solution is provided via function pointer....
double kin_energy() const
Get integral of kinetic energy over element.
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...
double pressure_integral() const
Integral of pressure over element.
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.
void max_and_min_invariant_and_viscosity(double &min_invariant, double &max_invariant, double &min_viscosity, double &max_viscosity) const
Get max. and min. strain rate invariant and visocosity over all integration points in element.
bool Use_extrapolated_strainrate_to_compute_second_invariant
GeneralisedNewtonianConstitutiveEquation< 3 > * Constitutive_eqn_pt
Pointer to the generalised Newtonian constitutive equation.
static Vector< double > Default_Gravity_vector
Static default value for the gravity vector.
void output_veloc(std::ostream &outfile, const unsigned &nplot, const unsigned &t)
Output function: x,y,[z],u,v,[w] in tecplot format. nplot points in each coordinate direction at time...
double * Re_pt
Pointer to global Reynolds number.
const double & re() const
Reynolds number.
virtual void get_dresidual_dnodal_coordinates(RankThreeTensor< double > &dresidual_dnodal_coordinates)
Compute derivatives of elemental residual vector with respect to nodal coordinates....
void output_fct(std::ostream &outfile, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output exact solution specified via function pointer at a given number of plot points....
double *& re_st_pt()
Pointer to product of Reynolds and Strouhal number (=Womersley 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.
void traction(const Vector< double > &s, const Vector< double > &N, Vector< double > &traction) const
Compute traction (on the viscous scale) at local coordinate s for outer unit normal N.
virtual void get_viscosity_ratio_axisym_nst(const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, double &visc_ratio)
Calculate the viscosity ratio relative to the viscosity used in the definition of the Reynolds number...
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.
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.
double interpolated_p_axi_nst(const Vector< double > &s) const
Return FE interpolated pressure at local coordinate s.
virtual void fill_in_generic_residual_contribution_axi_nst(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, unsigned flag)
Compute the residuals for the Navier–Stokes equations; flag=2 or 1 or 0: compute the Jacobian and/or ...
double *& re_invro_pt()
Pointer to global inverse Froude number.
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...
void interpolated_u_axi_nst(const Vector< double > &s, Vector< double > &veloc) const
Compute vector of FE interpolated velocity u at local coordinate s.
void get_traction(const Vector< double > &s, const Vector< double > &N, Vector< double > &traction) const
Compute traction at local coordinate s for outer unit normal N.
static const unsigned Initial_Nvalue[]
Static array of ints to hold required number of variables at nodes.
int p_local_eqn(const unsigned &n) const
Overload the access function for the pressure's local equation numbers.
void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned > > &dof_lookup_list) const
Create a list of pairs for all unknowns in this element, so that the first entry in each pair contain...
virtual unsigned required_nvalue(const unsigned &n) const
Number of values (pinned or dofs) required at local node n.
unsigned npres_axi_nst() const
Return number of pressure values.
static const unsigned Pconv[]
Static array of ints to hold conversion from pressure node numbers to actual node numbers.
static const unsigned Initial_Nvalue[]
Static array of ints to hold number of variables at node.
void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned > > &dof_lookup_list) const
Create a list of pairs for all unknowns in this element, so that the first entry in each pair contain...
void get_traction(const Vector< double > &s, const Vector< double > &N, Vector< double > &traction) const
Compute traction at local coordinate s for outer unit normal N.
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 ...
TimeStepper *& time_stepper_pt()
Access function for pointer to time stepper: Null if object is not time-dependent.
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.
double & x(const unsigned &i)
Return the i-th nodal coordinate.
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....
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...
Base class for time-stepping schemes. Timestepper provides an approximation of the temporal derivativ...
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 & dt(const unsigned &t=0)
Return the value of the t-th stored timestep (t=0: present; t>0: previous).
double second_invariant(const DenseMatrix< double > &tensor)
Compute second invariant of tensor.
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).