39 template<
unsigned DIM>
48 template<
unsigned DIM>
49 int GeneralisedNewtonianNavierStokesEquations<
50 DIM>::Pressure_not_stored_at_node = -100;
53 template<
unsigned DIM>
54 double GeneralisedNewtonianNavierStokesEquations<
55 DIM>::Default_Physical_Constant_Value = 0.0;
58 template<
unsigned DIM>
59 double GeneralisedNewtonianNavierStokesEquations<
60 DIM>::Default_Physical_Ratio_Value = 1.0;
63 template<
unsigned DIM>
64 Vector<double> GeneralisedNewtonianNavierStokesEquations<
65 DIM>::Default_Gravity_vector(DIM, 0.0);
69 template<
unsigned DIM>
70 bool GeneralisedNewtonianNavierStokesEquations<
71 DIM>::Pre_multiply_by_viscosity_ratio =
false;
80 template<
unsigned DIM>
106 for (
unsigned i = 0;
i <
n_dim;
i++)
115 unsigned n_pres = npres_nst();
136 for (
unsigned i = 0;
i <
n_dim;
i++)
155 for (
unsigned i = 0;
i <
n_dim;
i++)
199 template<
unsigned DIM>
219 outfile <<
"ZONE" << std::endl;
228 for (
unsigned i = 0;
i <
DIM;
i++)
249 for (
unsigned i = 0;
i <
DIM;
i++)
257 for (
unsigned i = 0;
i <
DIM;
i++)
263 for (
unsigned i = 0;
i <
DIM;
i++)
278 template<
unsigned DIM>
298 outfile <<
"ZONE" << std::endl;
307 for (
unsigned i = 0;
i <
DIM;
i++)
328 for (
unsigned i = 0;
i <
DIM;
i++)
336 for (
unsigned i = 0;
i <
DIM;
i++)
342 for (
unsigned i = 0;
i <
DIM;
i++)
356 template<
unsigned DIM>
359 const unsigned&
nplot,
388 for (
unsigned i = 0;
i <
DIM;
i++)
412 template<
unsigned DIM>
415 const unsigned&
nplot,
445 for (
unsigned i = 0;
i <
DIM;
i++)
470 template<
unsigned DIM>
472 std::ostream&
outfile,
const unsigned&
nplot,
const unsigned&
t)
499 for (
unsigned i = 0;
i <
DIM;
i++)
502 interpolated_u[
i] = 0.0;
514 for (
unsigned i = 0;
i <
DIM;
i++)
520 for (
unsigned i = 0;
i <
DIM;
i++)
522 outfile << interpolated_u[
i] <<
" ";
538 template<
unsigned DIM>
556 for (
unsigned i = 0;
i <
DIM;
i++)
562 for (
unsigned i = 0;
i <
DIM;
i++)
564 outfile << interpolated_u_nst(
s,
i) <<
" ";
568 outfile << interpolated_p_nst(
s) <<
" ";
585 template<
unsigned DIM>
603 for (
unsigned i = 0;
i <
DIM;
i++)
609 for (
unsigned i = 0;
i <
DIM;
i++)
630 template<
unsigned DIM>
670 for (
unsigned i = 0;
i <
DIM;
i++)
675 for (
unsigned j = 0;
j <
DIM;
j++)
677 interpolated_dudx(
i,
j) = 0.0;
685 for (
unsigned i = 0;
i <
DIM;
i++)
696 for (
unsigned j = 0;
j <
DIM;
j++)
698 interpolated_dudx(
i,
j) +=
706 for (
unsigned i = 0;
i <
DIM;
i++)
709 for (
unsigned k = 0;
k <
DIM;
k++)
717 for (
unsigned i = 0;
i <
DIM;
i++)
723 for (
unsigned i = 0;
i <
DIM;
i++)
725 outfile << interpolated_u_nst(
s,
i) <<
" ";
729 outfile << interpolated_p_nst(
s) <<
" ";
732 for (
unsigned i = 0;
i <
DIM;
i++)
761 template<
unsigned DIM>
780 std::string error_message =
781 "Can't output vorticity in 1D - in fact, what do you mean\n";
782 error_message +=
"by the 1D Navier-Stokes equations?\n";
799 for (
unsigned i = 0;
i <
DIM;
i++)
829 template<
unsigned DIM>
833 "Check the dissipation calculation for GeneralisedNewtonian NSt",
850 for (
unsigned i = 0;
i <
DIM;
i++)
867 for (
unsigned i = 0;
i <
DIM;
i++)
869 for (
unsigned j = 0;
j <
DIM;
j++)
886 template<
unsigned DIM>
895 if (!Use_extrapolated_strainrate_to_compute_second_invariant)
905 double second_invariant =
908 double visc = Constitutive_eqn_pt->viscosity(second_invariant);
911 double press = interpolated_p_nst(
s);
914 for (
unsigned i = 0;
i <
DIM;
i++)
917 for (
unsigned j = 0;
j <
DIM;
j++)
930 template<
unsigned DIM>
945 if (!Use_extrapolated_strainrate_to_compute_second_invariant)
955 double second_invariant =
958 double visc = Constitutive_eqn_pt->viscosity(second_invariant);
961 double press = interpolated_p_nst(
s);
964 for (
unsigned i = 0;
i <
DIM;
i++)
968 for (
unsigned j = 0;
j <
DIM;
j++)
982 template<
unsigned DIM>
987 "Check the dissipation calculation for GeneralisedNewtonian NSt",
997 for (
unsigned i = 0;
i <
DIM;
i++)
999 for (
unsigned j = 0;
j <
DIM;
j++)
1011 template<
unsigned DIM>
1018 std::ostringstream error_message;
1019 error_message <<
"The strain rate has incorrect dimensions "
1021 <<
" Not " <<
DIM << std::endl;
1042 for (
unsigned i = 0;
i <
DIM;
i++)
1044 for (
unsigned j = 0;
j <
DIM;
j++)
1051 for (
unsigned i = 0;
i <
DIM;
i++)
1056 for (
unsigned j = 0;
j <
DIM;
j++)
1067 for (
unsigned i = 0;
i <
DIM;
i++)
1070 for (
unsigned j = 0;
j <
DIM;
j++)
1081 template<
unsigned DIM>
1090 std::ostringstream error_message;
1091 error_message <<
"The strain rate has incorrect dimensions "
1093 <<
" Not " <<
DIM << std::endl;
1115 for (
unsigned k = 0;
k <
DIM;
k++)
1126 for (
unsigned i = 0;
i <
DIM;
i++)
1128 for (
unsigned j = 0;
j <
DIM;
j++)
1135 for (
unsigned i = 0;
i <
DIM;
i++)
1140 for (
unsigned j = 0;
j <
DIM;
j++)
1151 for (
unsigned i = 0;
i <
DIM;
i++)
1154 for (
unsigned j = 0;
j <
DIM;
j++)
1163 for (
unsigned k = 0;
k <
DIM;
k++)
1174 template<
unsigned DIM>
1181 std::ostringstream error_message;
1182 error_message <<
"The strain rate has incorrect dimensions "
1184 <<
" Not " <<
DIM << std::endl;
1206 for (
unsigned i = 0;
i <
DIM;
i++)
1208 for (
unsigned j = 0;
j <
DIM;
j++)
1232 std::ostringstream error_message;
1233 error_message <<
"Computation of vorticity in 2D requires a 1D vector\n"
1234 <<
"which contains the only non-zero component of the\n"
1235 <<
"vorticity vector. You've passed a vector of size "
1260 for (
unsigned i = 0;
i <
DIM;
i++)
1262 for (
unsigned j = 0;
j <
DIM;
j++)
1269 for (
unsigned i = 0;
i <
DIM;
i++)
1274 for (
unsigned j = 0;
j <
DIM;
j++)
1299 std::ostringstream error_message;
1300 error_message <<
"Computation of vorticity in 3D requires a 3D vector\n"
1301 <<
"which contains the only non-zero component of the\n"
1302 <<
"vorticity vector. You've passed a vector of size "
1327 for (
unsigned i = 0;
i <
DIM;
i++)
1329 for (
unsigned j = 0;
j <
DIM;
j++)
1336 for (
unsigned i = 0;
i <
DIM;
i++)
1341 for (
unsigned j = 0;
j <
DIM;
j++)
1365 template<
unsigned DIM>
1369 "Check the kinetic energy calculation for GeneralisedNewtonian NSt",
1386 for (
unsigned i = 0;
i <
DIM;
i++)
1399 for (
unsigned i = 0;
i <
DIM;
i++)
1414 template<
unsigned DIM>
1434 unsigned u_index[
DIM];
1435 for (
unsigned i = 0;
i <
DIM;
i++)
1437 u_index[
i] = this->u_index_nst(
i);
1456 for (
unsigned i = 0;
i <
DIM;
i++)
1472 for (
unsigned i = 0;
i <
DIM;
i++)
1476 for (
unsigned j = 0;
j <
DIM;
j++)
1478 interpolated_dudx(
i,
j) +=
1485 for (
unsigned i = 0;
i <
DIM;
i++)
1487 for (
unsigned k = 0;
k <
DIM;
k++)
1497 for (
unsigned i = 0;
i <
DIM;
i++)
1512 template<
unsigned DIM>
1529 for (
unsigned i = 0;
i <
DIM;
i++)
1544 double press = interpolated_p_nst(
s);
1557 template<
unsigned DIM>
1571 unsigned Nintpt = integral_pt()->nweight();
1577 for (
unsigned ipt = 0;
ipt < Nintpt;
ipt++)
1580 for (
unsigned i = 0;
i <
DIM;
i++)
s[
i] = integral_pt()->knot(
ipt,
i);
1587 double second_invariant =
1591 double viscosity = Constitutive_eqn_pt->viscosity(second_invariant);
1606 template<
unsigned DIM>
1614 if (
ndof() == 0)
return;
1623 unsigned n_pres = npres_nst();
1627 for (
unsigned i = 0;
i <
DIM;
i++)
1647 double scaled_re = re() * density_ratio();
1665 double J = dshape_and_dtest_eulerian_at_knot_nst(
1676 double interpolated_p = 0.0;
1685 interpolated_p += p_nst(
l) *
psip[
l];
1693 for (
unsigned i = 0;
i <
DIM;
i++)
1702 for (
unsigned j = 0;
j <
DIM;
j++)
1715 for (
unsigned i = 0;
i <
DIM;
i++)
1728 if (!Use_extrapolated_strainrate_to_compute_second_invariant)
1742 double viscosity = Constitutive_eqn_pt->viscosity(second_invariant);
1755 if (!Use_extrapolated_strainrate_to_compute_second_invariant)
1759 Constitutive_eqn_pt->dviscosity_dinvariant(second_invariant);
1773 for (
unsigned i = 0;
i <
DIM;
i++)
1775 for (
unsigned j = 0;
j <
DIM;
j++)
1783 for (
unsigned k = 0;
k <
DIM;
k++)
1807 for (
unsigned k = 0;
k <
DIM;
k++)
1810 for (
unsigned i = 0;
i <
DIM;
i++)
1812 for (
unsigned j = 0;
j <
DIM;
j++)
1818 for (
unsigned m = 0;
m <
DIM;
m++)
1820 for (
unsigned n = 0;
n <
DIM;
n++)
1839 for (
unsigned k = 0;
k <
DIM;
k++)
1842 for (
unsigned i = 0;
i <
DIM;
i++)
1844 for (
unsigned j = 0;
j <
DIM;
j++)
1863 for (
unsigned i = 0;
i <
DIM;
i++)
1877 if (Pre_multiply_by_viscosity_ratio)
1891 for (
unsigned k = 0;
k <
DIM;
k++)
1895 (interpolated_dudx(
i,
k) + Gamma[
i] * interpolated_dudx(
k,
i)) *
1905 for (
unsigned k = 0;
k <
DIM;
k++)
1935 for (
unsigned k = 0;
k <
DIM;
k++)
1944 !Use_extrapolated_strainrate_to_compute_second_invariant)
1946 for (
unsigned k = 0;
k <
DIM;
k++)
1950 (interpolated_dudx(
i,
k) +
1951 Gamma[
i] * interpolated_dudx(
k,
i)) *
1981 for (
unsigned k = 0;
k <
DIM;
k++)
2002 if (Pre_multiply_by_viscosity_ratio)
2034 double aux = -source;
2037 for (
unsigned k = 0;
k <
DIM;
k++)
2040 aux += interpolated_dudx(
k,
k);
2044 if (Pre_multiply_by_viscosity_ratio)
2066 if (Pre_multiply_by_viscosity_ratio)
2092 template<
unsigned DIM>
2110 template<
unsigned DIM>
2129 template<
unsigned DIM>
2141 const unsigned n_node = nnode();
2144 double time = node_pt(0)->time_stepper_pt()->time_pt()->time();
2147 const unsigned n_pres = npres_nst();
2151 for (
unsigned i = 0;
i <
DIM;
i++)
2179 const unsigned n_intpt = integral_pt()->nweight();
2186 double scaled_re = re() * density_ratio();
2199 for (
unsigned q = 0; q <
n_node; q++)
2204 if (
nod_pt->has_auxiliary_node_update_fct_pt())
2210 for (
unsigned i = 0;
i <
DIM;
i++)
2216 for (
unsigned p = 0;
p <
DIM;
p++)
2226 nod_pt->perform_auxiliary_node_update_fct();
2236 nod_pt->perform_auxiliary_node_update_fct();
2248 for (
unsigned i = 0;
i <
DIM;
i++)
2250 s[
i] = integral_pt()->knot(
ipt,
i);
2254 const double w = integral_pt()->weight(
ipt);
2257 const double J = dshape_and_dtest_eulerian_at_knot_nst(
ipt,
2271 double interpolated_p = 0.0;
2281 interpolated_p += p_nst(
l) *
psip[
l];
2290 for (
unsigned i = 0;
i <
DIM;
i++)
2295 interpolated_x[
i] += raw_nodal_position(
l,
i) *
psif[
l];
2299 for (
unsigned j = 0;
j <
DIM;
j++)
2306 if (!ALE_is_disabled)
2312 for (
unsigned i = 0;
i <
DIM;
i++)
2320 for (
unsigned q = 0; q <
n_node; q++)
2323 for (
unsigned p = 0;
p <
DIM;
p++)
2325 for (
unsigned i = 0;
i <
DIM;
i++)
2327 for (
unsigned k = 0;
k <
DIM;
k++)
2344 node_pt(0)->position_time_stepper_pt()->weight(1, 0);
2350 get_body_force_nst(time,
ipt,
s, interpolated_x, body_force);
2353 const double source = get_source_nst(time,
ipt, interpolated_x);
2360 get_body_force_gradient_nst(
2378 for (
unsigned i = 0;
i <
DIM;
i++)
2388 for (
unsigned p = 0;
p <
DIM;
p++)
2391 for (
unsigned q = 0; q <
n_node; q++)
2409 for (
unsigned k = 0;
k <
DIM;
k++)
2412 (interpolated_dudx(
i,
k) +
2413 Gamma[
i] * interpolated_dudx(
k,
i)) *
2423 for (
unsigned k = 0;
k <
DIM;
k++)
2426 if (!ALE_is_disabled)
2447 for (
unsigned k = 0;
k <
DIM;
k++)
2450 Gamma[
i] * interpolated_dudx(
k,
i)) *
2458 for (
unsigned k = 0;
k <
DIM;
k++)
2461 if (!ALE_is_disabled)
2467 if (!ALE_is_disabled)
2470 interpolated_dudx(
i,
p) *
testf(
l);
2486 for (
unsigned k = 0;
k <
DIM;
k++)
2490 if (!ALE_is_disabled)
2517 for (
unsigned p = 0;
p <
DIM;
p++)
2520 for (
unsigned q = 0; q <
n_node; q++)
2526 double aux = -source;
2529 for (
unsigned k = 0;
k <
DIM;
k++)
2531 aux += interpolated_dudx(
k,
k);
2543 for (
unsigned k = 0;
k <
DIM;
k++)
2576 2, 2, 2, 2, 2, 2, 2, 2, 2};
2583 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
2584 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};
2590 template<
unsigned DIM>
2592 const unsigned&
n)
const
2594 return Initial_Nvalue[
n];
2607 template<
unsigned DIM>
2612 unsigned u_index[
DIM];
2613 for (
unsigned i = 0;
i <
DIM;
i++)
2615 u_index[
i] = this->u_index_nst(
i);
2624 for (
unsigned i = 0;
i <
DIM;
i++)
2644 template<
unsigned DIM>
2654 for (
unsigned j = 0;
j <
nval;
j++)
2671 template<
unsigned DIM>
2680 unsigned n_press = this->npres_nst();
2716 for (
unsigned v = 0;
v <
nv;
v++)
2746 {3, 2, 3, 2, 2, 2, 3, 2, 3};
2757 {4, 3, 4, 3, 3, 3, 4, 3, 4, 3, 3, 3, 3, 3,
2758 3, 3, 3, 3, 4, 3, 4, 3, 3, 3, 4, 3, 4};
2763 0, 2, 6, 8, 18, 20, 24, 26};
2774 template<
unsigned DIM>
2779 unsigned u_index[
DIM];
2780 for (
unsigned i = 0;
i <
DIM;
i++)
2782 u_index[
i] = this->u_index_nst(
i);
2791 for (
unsigned i = 0;
i <
DIM;
i++)
2810 template<
unsigned DIM>
2815 unsigned p_index =
static_cast<unsigned>(this->p_nodal_index_nst());
2818 unsigned n_pres = npres_nst();
2837 template<
unsigned DIM>
2858 for (
unsigned v = 0;
v <
nv;
v++)
bool ALE_is_disabled
Boolean flag to indicate if ALE formulation is disabled when time-derivatives are computed....
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")
virtual double dshape_eulerian_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsidx) const
Return the geometric shape functions and also first derivatives w.r.t. global coordinates at the ipt-...
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 dim() const
Return the spatial dimension of the element, i.e. the number of local coordinates required to paramet...
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 .
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.
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.
Data *& internal_data_pt(const unsigned &i)
Return a pointer to i-th internal data object.
int local_eqn_number(const unsigned long &ieqn_global) const
Return the local equation number corresponding to the ieqn_global-th global equation number....
unsigned ninternal_data() const
Return the number of internal data objects.
A class for elements that solve the cartesian Navier–Stokes equations, templated by the dimension DIM...
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....
void output(std::ostream &outfile)
Output function: x,y,[z],u,v,[w],p in tecplot format. Default number of plot points.
virtual void fill_in_generic_residual_contribution_nst(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, unsigned flag)
Compute the residuals for the Navier–Stokes equations. Flag=1 (or 0): do (or don't) compute the Jacob...
void get_traction(const Vector< double > &s, const Vector< double > &N, Vector< double > &traction)
Compute traction (on the viscous scale) exerted onto the fluid at local coordinate s....
void strain_rate(const Vector< double > &s, DenseMatrix< double > &strain_rate) const
Strain-rate tensor: 1/2 (du_i/dx_j + du_j/dx_i)
double pressure_integral() const
Integral of pressure over element.
virtual void extrapolated_strain_rate(const Vector< double > &s, DenseMatrix< double > &strain_rate) const
Extrapolated strain-rate tensor: 1/2 (du_i/dx_j + du_j/dx_i) based on the previous time steps evaluat...
void full_output(std::ostream &outfile)
Full output function: x,y,[z],u,v,[w],p,du/dt,dv/dt,[dw/dt],dissipation in tecplot format....
double dissipation() const
Return integral of dissipation over element.
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,...
void output_vorticity(std::ostream &outfile, const unsigned &nplot)
Output function: x,y,[z], [omega_x,omega_y,[and/or omega_z]] in tecplot format. nplot points in each ...
void get_vorticity(const Vector< double > &s, Vector< double > &vorticity) const
Compute the vorticity vector at local coordinate s.
double d_kin_energy_dt() const
Get integral of time derivative of kinetic energy over element.
static Vector< double > Gamma
Vector to decide whether the stress-divergence form is used or not.
virtual void fill_in_generic_dresidual_contribution_nst(double *const ¶meter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam, unsigned flag)
Compute the derivatives of the residuals for the Navier–Stokes equations with respect to a parameter ...
double kin_energy() const
Get integral of kinetic energy 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....
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...
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...
Crouzeix_Raviart elements are Navier–Stokes elements with quadratic interpolation for velocities and ...
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 identify_load_data(std::set< std::pair< Data *, unsigned > > &paired_load_data)
Add to the set paired_load_data pairs containing.
void identify_pressure_data(std::set< std::pair< Data *, unsigned > > &paired_pressure_data)
Add to the set paired_pressure_data pairs containing.
virtual unsigned required_nvalue(const unsigned &n) const
Number of values (pinned or dofs) required at local node n.
Taylor–Hood elements are Navier–Stokes elements with quadratic interpolation for velocities and posit...
void identify_pressure_data(std::set< std::pair< Data *, unsigned > > &paired_pressure_data)
Add to the set paired_pressure_data pairs containing.
void identify_load_data(std::set< std::pair< Data *, unsigned > > &paired_load_data)
Add to the set paired_load_data pairs containing.
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...
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...
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....
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...
unsigned required_nvalue(const unsigned &n) const
Access function for Nvalue: # of ‘values’ (pinned or dofs) at node n (always returns the same value a...
TAdvectionDiffusionReactionElement()
Constructor: Call constructors for TElement and AdvectionDiffusionReaction equations.
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).