28 #ifndef OOMPH_GENERALISED_NEWTONIAN_AXISYMMETRIC_NAVIER_STOKES_ELEMENTS_HEADER
29 #define OOMPH_GENERALISED_NEWTONIAN_AXISYMMETRIC_NAVIER_STOKES_ELEMENTS_HEADER
33 #include <oomph-lib-config.h>
39 #include "../generic/Qelements.h"
40 #include "../generic/fsi.h"
41 #include "../generic/projection.h"
42 #include "../generic/generalised_newtonian_constitutive_models.h"
202 DShape& dtestdx)
const = 0;
212 DShape& dtestdx)
const = 0;
234 Shape& test)
const = 0;
247 for (
unsigned i = 0;
i < 3;
i++)
255 (*Body_force_fct_pt)(time, x, result);
281 for (
unsigned i = 0;
i < 2;
i++)
285 for (
unsigned j = 0; j < 3; j++)
287 d_body_force_dx(j,
i) =
288 (body_force_pls[j] - body_force[j]) / eps_fd;
334 double source_pls = 0.0;
336 for (
unsigned i = 0;
i < 2;
i++)
340 gradient[
i] = (source_pls - source) / eps_fd;
378 double*
const& parameter_pt,
420 const double&
re()
const
587 for (
unsigned t = 0;
t < n_time;
t++)
615 virtual double p_axi_nst(
const unsigned& n_p)
const = 0;
630 double& max_invariant,
631 double& min_viscosity,
632 double& max_viscosity)
const;
689 const unsigned& which_one = 0);
702 const unsigned& nplot)
const
709 for (
unsigned iplot = 0; iplot < num_plot_points; iplot++)
727 std::stringstream error_stream;
729 <<
"Axisymmetric Navier-Stokes Elements only store 4 fields "
732 OOMPH_CURRENT_FUNCTION,
733 OOMPH_EXCEPTION_LOCATION);
756 std::stringstream error_stream;
758 <<
"Axisymmetric Navier-Stokes Elements only store 4 fields "
761 error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
771 for (
unsigned i = 0;
i < 2;
i++)
777 for (
unsigned i = 0;
i < 3;
i++)
797 void output(std::ostream& outfile,
const unsigned& nplot);
810 void output(FILE* file_pt,
const unsigned& nplot);
816 const unsigned& nplot,
823 const unsigned& nplot,
830 const unsigned& nplot,
889 residuals, jacobian, mass_matrix, 2);
916 double*
const& parameter_pt,
932 double*
const& parameter_pt,
939 parameter_pt, dres_dparam, djac_dparam, dmass_matrix_dparam, 2);
948 unsigned n_node =
nnode();
954 for (
unsigned i = 0;
i < 3;
i++)
961 for (
unsigned l = 0; l < n_node; l++)
970 const unsigned&
i)
const
973 unsigned n_node =
nnode();
983 double interpolated_u = 0.0;
985 for (
unsigned l = 0; l < n_node; l++)
987 interpolated_u +=
nodal_value(l, u_nodal_index) * psi[l];
990 return (interpolated_u);
998 const unsigned&
i)
const
1001 unsigned n_node =
nnode();
1011 double interpolated_u = 0.0;
1013 for (
unsigned l = 0; l < n_node; l++)
1015 interpolated_u +=
nodal_value(
t, l, u_nodal_index) * psi[l];
1018 return (interpolated_u);
1034 unsigned n_node =
nnode();
1044 unsigned n_u_dof = 0;
1045 for (
unsigned l = 0; l < n_node; l++)
1049 if (global_eqn >= 0)
1056 du_ddata.resize(n_u_dof, 0.0);
1057 global_eqn_number.resize(n_u_dof, 0);
1062 for (
unsigned l = 0; l < n_node; l++)
1066 if (global_eqn >= 0)
1069 global_eqn_number[count] = global_eqn;
1071 du_ddata[count] = psi[l];
1090 double interpolated_p = 0.0;
1092 for (
unsigned l = 0; l < n_pres; l++)
1094 interpolated_p +=
p_axi_nst(l) * psi[l];
1097 return (interpolated_p);
1104 const unsigned& j)
const
1107 const unsigned n_node =
nnode();
1112 DShape dpsifds(n_node, 2);
1121 double interpolated_duds = 0.0;
1124 for (
unsigned l = 0; l < n_node; l++)
1126 interpolated_duds +=
nodal_value(l, u_nodal_index) * dpsifds(l, j);
1129 return (interpolated_duds);
1136 const unsigned& j)
const
1139 const unsigned n_node =
nnode();
1144 DShape dpsifdx(n_node, 2);
1153 double interpolated_dudx = 0.0;
1156 for (
unsigned l = 0; l < n_node; l++)
1158 interpolated_dudx +=
nodal_value(l, u_nodal_index) * dpsifdx(l, j);
1161 return (interpolated_dudx);
1167 const unsigned&
i)
const
1170 const unsigned n_node =
nnode();
1179 double interpolated_dudt = 0.0;
1182 for (
unsigned l = 0; l < n_node; l++)
1187 return (interpolated_dudt);
1197 const unsigned& k)
const
1200 const unsigned n_node =
nnode();
1205 DShape dpsifds(n_node, 2);
1232 det, jacobian, djacobian_dX, inverse_jacobian, dpsifds, d_dpsifdx_dX);
1238 double interpolated_d_dudx_dX = 0.0;
1241 for (
unsigned l = 0; l < n_node; l++)
1243 interpolated_d_dudx_dX +=
1244 nodal_value(l, u_nodal_index) * d_dpsifdx_dX(p, q, l, k);
1247 return (interpolated_d_dudx_dX);
1254 double result = 0.0;
1267 const unsigned n_dim =
dim();
1271 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
1274 for (
unsigned i = 0;
i < n_dim;
i++)
1280 for (
unsigned i = 0;
i < n_dim_eulerian;
i++)
1292 result += x[0] * w * J;
1336 const unsigned& ipt,
1346 const unsigned& ipt,
1419 void output(std::ostream& outfile,
const unsigned& n_plot)
1433 void output(FILE* file_pt,
const unsigned& n_plot)
1453 std::list<std::pair<unsigned long, unsigned>>& dof_lookup_list)
const;
1474 for (
unsigned i = 0;
i < 9;
i++)
1477 dtestdx(
i, 0) = dpsidx(
i, 0);
1478 dtestdx(
i, 1) = dpsidx(
i, 1);
1500 for (
unsigned i = 0;
i < 9;
i++)
1503 dtestdx(
i, 0) = dpsidx(
i, 0);
1504 dtestdx(
i, 1) = dpsidx(
i, 1);
1520 const unsigned& ipt,
1531 ipt, psi, dpsidx, djacobian_dX, d_dpsidx_dX);
1535 for (
unsigned i = 0;
i < 9;
i++)
1539 for (
unsigned k = 0; k < 2; k++)
1541 dtestdx(
i, k) = dpsidx(
i, k);
1543 for (
unsigned p = 0; p < 2; p++)
1545 for (
unsigned q = 0; q < 9; q++)
1547 d_dtestdx_dX(p, q,
i, k) = d_dpsidx_dX(p, q,
i, k);
1575 for (
unsigned i = 0;
i < 3;
i++) test[
i] = psi[
i];
1639 const unsigned& ipt,
1649 const unsigned& ipt,
1726 void output(std::ostream& outfile,
const unsigned& n_plot)
1739 void output(FILE* file_pt,
const unsigned& n_plot)
1759 std::list<std::pair<unsigned long, unsigned>>& dof_lookup_list)
const;
1780 for (
unsigned i = 0;
i < 9;
i++)
1783 dtestdx(
i, 0) = dpsidx(
i, 0);
1784 dtestdx(
i, 1) = dpsidx(
i, 1);
1806 for (
unsigned i = 0;
i < 9;
i++)
1809 dtestdx(
i, 0) = dpsidx(
i, 0);
1810 dtestdx(
i, 1) = dpsidx(
i, 1);
1826 const unsigned& ipt,
1837 ipt, psi, dpsidx, djacobian_dX, d_dpsidx_dX);
1841 for (
unsigned i = 0;
i < 9;
i++)
1845 for (
unsigned k = 0; k < 2; k++)
1847 dtestdx(
i, k) = dpsidx(
i, k);
1849 for (
unsigned p = 0; p < 2; p++)
1851 for (
unsigned q = 0; q < 9; q++)
1853 d_dtestdx_dX(p, q,
i, k) = d_dpsidx_dX(p, q,
i, k);
1870 double psi1[2], psi2[2];
1877 for (
unsigned i = 0;
i < 2;
i++)
1879 for (
unsigned j = 0; j < 2; j++)
1882 psi[2 *
i + j] = psi2[
i] * psi1[j];
1896 for (
unsigned i = 0;
i < 4;
i++) test[
i] = psi[
i];
1928 template<
class TAYLOR_HOOD_ELEMENT>
1948 unsigned nnod = this->
nnode();
1949 for (
unsigned j = 0; j < nnod; j++)
1952 data_values.push_back(std::make_pair(this->
node_pt(j), fld));
1959 unsigned Pconv_size = 3;
1960 for (
unsigned j = 0; j < Pconv_size; j++)
1963 unsigned vertex_index = this->Pconv[j];
1964 data_values.push_back(
1965 std::make_pair(this->
node_pt(vertex_index), fld));
2008 unsigned n_dim = this->
dim();
2009 unsigned n_node = this->
nnode();
2014 this->pshape_axi_nst(
s, psi);
2016 Shape psif(n_node), testf(n_node);
2017 DShape dpsifdx(n_node, n_dim), dtestfdx(n_node, n_dim);
2020 double J = this->dshape_and_dtest_eulerian_axi_nst(
2021 s, psif, dpsifdx, testf, dtestfdx);
2026 Shape testf(n_node);
2027 DShape dpsifdx(n_node, n_dim), dtestfdx(n_node, n_dim);
2030 double J = this->dshape_and_dtest_eulerian_axi_nst(
2031 s, psi, dpsifdx, testf, dtestfdx);
2040 const unsigned& fld,
2043 unsigned n_node = this->
nnode();
2048 return this->interpolated_p_axi_nst(
s);
2054 unsigned u_nodal_index = this->u_index_axi_nst(fld);
2060 this->
shape(s, psi);
2063 double interpolated_u = 0.0;
2066 for (
unsigned l = 0; l < n_node; l++)
2068 interpolated_u += this->
nodal_value(t, l, u_nodal_index) * psi[l];
2070 return interpolated_u;
2080 return this->npres_axi_nst();
2084 return this->
nnode();
2094 return this->p_local_eqn(j);
2098 const unsigned u_nodal_index = this->u_index_axi_nst(fld);
2109 template<
class ELEMENT>
2123 template<
class ELEMENT>
2136 template<
class CROUZEIX_RAVIART_ELEMENT>
2156 const unsigned n_node = this->
nnode();
2157 for (
unsigned n = 0; n < n_node; n++)
2160 data_values.push_back(std::make_pair(this->
node_pt(n), fld));
2167 const unsigned n_press = this->npres_axi_nst();
2169 for (
unsigned j = 0; j < n_press; j++)
2171 data_values.push_back(std::make_pair(
2215 unsigned n_dim = this->
dim();
2216 unsigned n_node = this->
nnode();
2221 this->pshape_axi_nst(
s, psi);
2223 Shape psif(n_node), testf(n_node);
2224 DShape dpsifdx(n_node, n_dim), dtestfdx(n_node, n_dim);
2227 double J = this->dshape_and_dtest_eulerian_axi_nst(
2228 s, psif, dpsifdx, testf, dtestfdx);
2233 Shape testf(n_node);
2234 DShape dpsifdx(n_node, n_dim), dtestfdx(n_node, n_dim);
2237 double J = this->dshape_and_dtest_eulerian_axi_nst(
2238 s, psi, dpsifdx, testf, dtestfdx);
2247 const unsigned& fld,
2256 return this->interpolated_p_axi_nst(
s);
2261 return this->interpolated_u_axi_nst(
t,
s, fld);
2271 return this->npres_axi_nst();
2275 return this->
nnode();
2285 return this->p_local_eqn(j);
2289 const unsigned u_nodal_index = this->u_index_axi_nst(fld);
2300 template<
class ELEMENT>
2314 template<
class ELEMENT>
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
A class that represents a collection of data; each Data object may contain many different individual ...
long & eqn_number(const unsigned &i)
Return the equation number of the i-th stored variable.
void pin(const unsigned &i)
Pin the i-th stored variable.
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
void set_value(const unsigned &i, const double &value_)
Set the i-th stored data value to specified value. The only reason that we require an explicit set fu...
double value(const unsigned &i) const
Return i-th stored value. This function is not virtual so that it can be inlined. This means that if ...
unsigned ntstorage() const
Return total number of doubles stored per value to record time history of each value (one for steady ...
//////////////////////////////////////////////////////////////////// ////////////////////////////////...
A general Finite Element class.
virtual unsigned nplot_points_paraview(const unsigned &nplot) const
Return the number of actual plot points for paraview plot with parameter nplot. Broken virtual; can b...
virtual double J_eulerian(const Vector< double > &s) const
Return the Jacobian of mapping from local to global coordinates at local position s.
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
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 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-...
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 .
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
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 double local_to_eulerian_mapping(const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
Calculate the mapping from local to Eulerian coordinates, given the derivatives of the shape function...
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...
virtual void dshape_local(const Vector< double > &s, Shape &psi, DShape &dpsids) const
Function to compute the geometric shape functions and derivatives w.r.t. local coordinates at local c...
virtual void d_dshape_eulerian_dnodal_coordinates(const double &det_jacobian, const DenseMatrix< double > &jacobian, const DenseMatrix< double > &djacobian_dX, const DenseMatrix< double > &inverse_jacobian, const DShape &dpsids, RankFourTensor< double > &d_dpsidx_dX) const
A template-free interface that calculates the derivative w.r.t. the nodal coordinates of the derivat...
unsigned nodal_dimension() const
Return the required Eulerian dimension of the nodes in this element.
void(* UnsteadyExactSolutionFctPt)(const double &, const Vector< double > &, Vector< double > &)
Function pointer for function that computes Vector-valued time-dependent function as .
virtual void dJ_eulerian_dnodal_coordinates(const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
A template-free interface that calculates the derivative of the jacobian of a mapping with respect to...
static double Default_fd_jacobian_step
Double used for the default finite difference step in elemental jacobian calculations.
unsigned add_internal_data(Data *const &data_pt, const bool &fd=true)
Add a (pointer to an) internal data object to the element and return the index required to obtain it ...
Data *& internal_data_pt(const unsigned &i)
Return a pointer to i-th internal data object.
static DenseMatrix< double > Dummy_matrix
Empty dense matrix used as a dummy argument to combined residual and jacobian functions in the case w...
int internal_local_eqn(const unsigned &i, const unsigned &j) const
Return the local equation number corresponding to the j-th value stored at the i-th internal data.
A class for elements that solve the unsteady axisymmetric Navier–Stokes equations in cylindrical pola...
unsigned u_index_nst(const unsigned &i) const
Return the index at which the i-th unknown velocity component is stored with a common interface for u...
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...
double *& re_st_pt()
Pointer to product of Reynolds and Strouhal number (=Womersley number)
void fill_in_contribution_to_djacobian_dparameter(double *const ¶meter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam)
Compute the element's residual Vector and the jacobian matrix Virtual function can be overloaded by h...
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 void extrapolated_strain_rate(const unsigned &ipt, DenseMatrix< double > &strain_rate) const
Extrapolated strain-rate tensor: where (in that order) based on the previous time steps evaluated a...
virtual void dinterpolated_u_axi_nst_ddata(const Vector< double > &s, const unsigned &i, Vector< double > &du_ddata, Vector< unsigned > &global_eqn_number)
Compute the derivatives of the i-th component of velocity at point s with respect to all data that ca...
const double & re_invro() const
Global Reynolds number multiplied by inverse Rossby number.
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...
void fill_in_contribution_to_djacobian_and_dmass_matrix_dparameter(double *const ¶meter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam)
Add the element's contribution to its residuals vector, jacobian matrix and mass matrix.
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...
double interpolated_u_axi_nst(const Vector< double > &s, const unsigned &i) const
Return FE interpolated velocity u[i] at local coordinate s.
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(*&)(const double &time, const Vector< double > &x, Vector< double > &f) axi_nst_body_force_fct_pt()
Access function for the body-force pointer.
double interpolated_d_dudx_dX_axi_nst(const Vector< double > &s, const unsigned &p, const unsigned &q, const unsigned &i, const unsigned &k) const
Return FE interpolated derivatives w.r.t. nodal coordinates X_{pq} of the spatial derivatives of the ...
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.
virtual void pshape_axi_nst(const Vector< double > &s, Shape &psi, Shape &test) const =0
Compute the pressure shape and test functions at local coordinate s.
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....
unsigned n_u_nst() const
Return the number of velocity components for use in general FluidInterface class.
double * ReInvRo_pt
Pointer to global Reynolds number x inverse Rossby number (used when in a rotating frame)
const double & viscosity_ratio() const
Viscosity ratio for element: Element's viscosity relative to the viscosity used in the definition of ...
void output(FILE *file_pt)
Output function: x,y,[z],u,v,[w],p in tecplot format. Default number of plot points.
double *& viscosity_ratio_pt()
Pointer to Viscosity Ratio.
Vector< double > *& g_pt()
Pointer to Vector of gravitational components.
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.
const double & re_st() const
Product of Reynolds and Strouhal number (=Womersley number)
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 enable_ALE()
(Re-)enable ALE, i.e. take possible mesh motion into account when evaluating the time-derivative....
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.
void use_current_strainrate_to_compute_second_invariant()
Switch to fully implict evaluation of non-Newtonian const eqn.
std::string scalar_name_paraview(const unsigned &i) const
Name of the i-th scalar field. Default implementation returns V1 for the first one,...
const double & re_invfr() const
Global inverse Froude number.
double compute_physical_size() const
Compute the volume of the element.
bool Use_extrapolated_strainrate_to_compute_second_invariant
double *& density_ratio_pt()
Pointer to Density ratio.
GeneralisedNewtonianConstitutiveEquation< 3 > * Constitutive_eqn_pt
Pointer to the generalised Newtonian constitutive equation.
double * Viscosity_Ratio_pt
Pointer to the viscosity ratio (relative to the viscosity used in the definition of the Reynolds numb...
static Vector< double > Default_Gravity_vector
Static default value for the gravity vector.
double * ReInvFr_pt
Pointer to global Reynolds number x inverse Froude number (= Bond number / Capillary number)
static int Pressure_not_stored_at_node
Static "magic" number that indicates that the pressure is not stored at a node.
double(*&)(const double &time, const Vector< double > &x) source_fct_pt()
Access function for the source-function pointer.
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.
GeneralisedNewtonianAxisymmetricNavierStokesEquations()
Constructor: NULL the body force and source function.
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....
virtual double dshape_and_dtest_eulerian_at_knot_axi_nst(const unsigned &ipt, Shape &psi, DShape &dpsidx, RankFourTensor< double > &d_dpsidx_dX, Shape &test, DShape &dtestdx, RankFourTensor< double > &d_dtestdx_dX, DenseMatrix< double > &djacobian_dX) const =0
Shape/test functions and derivs w.r.t. to global coords at integration point ipt; return Jacobian of ...
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....
GeneralisedNewtonianConstitutiveEquation< 3 > *& constitutive_eqn_pt()
Access function for the constitutive equation pointer.
void fill_in_contribution_to_dresiduals_dparameter(double *const ¶meter_pt, Vector< double > &dres_dparam)
Compute the element's residual Vector.
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.
void point_output_data(const Vector< double > &s, Vector< double > &data)
Output solution in data vector at local cordinates s: r,z,u_r,u_z,u_phi,p.
double * Density_Ratio_pt
Pointer to the density ratio (relative to the density used in the definition of the Reynolds number)
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 double dshape_and_dtest_eulerian_axi_nst(const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
Compute the shape functions and derivatives w.r.t. global coords at local coordinate s....
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Compute the element's residual Vector.
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...
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Compute the element's residual Vector and the jacobian matrix Virtual function can be overloaded by h...
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.
void(* Body_force_fct_pt)(const double &time, const Vector< double > &x, Vector< double > &result)
Pointer to body force function.
double *& re_invro_pt()
Pointer to global inverse Froude number.
double interpolated_duds_axi_nst(const Vector< double > &s, const unsigned &i, const unsigned &j) const
Return FE interpolated derivatives of velocity component u[i] w.r.t spatial local coordinate directio...
double * ReSt_pt
Pointer to global Reynolds number x Strouhal number (=Womersley)
virtual int p_nodal_index_axi_nst() const
Which nodal value represents the pressure?
unsigned nscalar_paraview() const
Number of scalars/fields output by this element. Reimplements broken virtual function in base class.
double(* Source_fct_pt)(const double &time, const Vector< double > &x)
Pointer to volumetric source function.
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.
static double Default_Physical_Constant_Value
Static default value for the physical constants (all initialised to zero)
static double Default_Physical_Ratio_Value
Static default value for the physical ratios (all are initialised to one)
double *& re_invfr_pt()
Pointer to global inverse Froude number.
double interpolated_p_axi_nst(const Vector< double > &s) const
Return FE interpolated pressure at local coordinate s.
const double & density_ratio() const
Density ratio for element: Element's density relative to the viscosity used in the definition of the ...
double interpolated_dudx_axi_nst(const Vector< double > &s, const unsigned &i, const unsigned &j) const
Return FE interpolated derivatives of velocity component u[i] w.r.t spatial global coordinate directi...
double interpolated_dudt_axi_nst(const Vector< double > &s, const unsigned &i) const
Return FE interpolated derivatives of velocity component u[i] w.r.t time at local coordinate s.
double interpolated_u_axi_nst(const unsigned &t, const Vector< double > &s, const unsigned &i) const
Return FE interpolated velocity u[i] 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 ...
void scalar_value_paraview(std::ofstream &file_out, const unsigned &i, const unsigned &nplot) const
Write values of the i-th scalar field at the plot points. Needs to be implemented for each new specif...
void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Add the element's contribution to its residuals vector, jacobian matrix and mass matrix.
void use_extrapolated_strainrate_to_compute_second_invariant()
Use extrapolation for non-Newtonian const eqn.
Vector< double > * G_pt
Pointer to global gravity Vector.
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...
double *& re_pt()
Pointer to Reynolds number.
const Vector< double > & g() const
Vector of gravitational components.
bool ALE_is_disabled
Boolean flag to indicate if ALE formulation is disabled when the time-derivatives are computed....
void disable_ALE()
Disable ALE, i.e. assert the mesh is not moving – you do this at your own risk!
void strain_rate(const Vector< double > &s, DenseMatrix< double > &strain_rate) const
Strain-rate tensor: where (in that order)
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 pshape_axi_nst(const Vector< double > &s, Shape &psi) const
Pressure shape functions at local coordinate s.
double p_axi_nst(const unsigned &i) const
Return the pressure values at internal dof i_internal (Discontinous pressure interpolation – no need ...
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.
double dshape_and_dtest_eulerian_at_knot_axi_nst(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Velocity shape and test functions and their derivs w.r.t. to global coords at ipt-th integation point...
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...
static const unsigned Initial_Nvalue[]
Static array of ints to hold required number of variables at nodes.
double dshape_and_dtest_eulerian_axi_nst(const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Velocity shape and test functions and their derivs w.r.t. to global coords at local coordinate s (tak...
int p_local_eqn(const unsigned &n) const
Overload the access function for the pressure's local equation numbers.
void output(std::ostream &outfile, const unsigned &n_plot)
Redirect output to NavierStokesEquations output.
virtual unsigned required_nvalue(const unsigned &n) const
Number of values (pinned or dofs) required at local node n.
void output(FILE *file_pt)
Redirect output to NavierStokesEquations output.
GeneralisedNewtonianAxisymmetricQCrouzeixRaviartElement()
Constructor, there are three internal values (for the pressure)
void fix_pressure(const unsigned &p_dof, const double &pvalue)
Function to fix the internal pressure dof idof_internal.
void output(std::ostream &outfile)
Redirect output to NavierStokesEquations output.
void output(FILE *file_pt, const unsigned &n_plot)
Redirect output to NavierStokesEquations output.
unsigned npres_axi_nst() const
Return number of pressure values.
unsigned ndof_types() const
The number of "DOF types" that degrees of freedom in this element are sub-divided into: Velocity and ...
unsigned P_axi_nst_internal_index
Internal index that indicates at which internal data the pressure is stored.
/////////////////////////////////////////////////////////////////////////
virtual unsigned required_nvalue(const unsigned &n) const
Number of values (pinned or dofs) required at node n. Can be overwritten for hanging node version.
void output(FILE *file_pt, const unsigned &n_plot)
Redirect output to NavierStokesEquations output.
GeneralisedNewtonianAxisymmetricQTaylorHoodElement()
Constructor, no internal data points.
void output(std::ostream &outfile)
Redirect output to NavierStokesEquations output.
static const unsigned Pconv[]
Static array of ints to hold conversion from pressure node numbers to actual node numbers.
unsigned ndof_types() const
Returns the number of "DOF types" that degrees of freedom in this element are sub-divided into: Veloc...
virtual int p_nodal_index_axi_nst() const
Which nodal value represents the pressure?
unsigned npres_axi_nst() const
Return number of pressure values.
void output(std::ostream &outfile, const unsigned &n_plot)
Redirect output to NavierStokesEquations output.
void pshape_axi_nst(const Vector< double > &s, Shape &psi) const
Pressure shape functions at local coordinate s.
int p_local_eqn(const unsigned &n) const
Overload the access function for the pressure's local equation numbers.
double dshape_and_dtest_eulerian_at_knot_axi_nst(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Velocity shape and test functions and their derivs w.r.t. to global coords at local coordinate s (tak...
static const unsigned Initial_Nvalue[]
Static array of ints to hold number of variables at node.
void output(FILE *file_pt)
Redirect output to NavierStokesEquations output.
double p_axi_nst(const unsigned &n_p) const
Access function for the pressure values at local pressure node n_p (const version)
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.
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...
double dshape_and_dtest_eulerian_axi_nst(const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Velocity shape and test functions and their derivs w.r.t. to global coords at local coordinate s (tak...
void fix_pressure(const unsigned &n_p, const double &pvalue)
Fix the pressure at local pressure node n_p.
Crouzeix Raviart upgraded to become projectable.
unsigned nvalue_of_field(const unsigned &fld)
Return number of values in field fld.
double get_field(const unsigned &t, const unsigned &fld, const Vector< double > &s)
Return interpolated field fld at local coordinate s, at time level t (t=0: present; t>0: history valu...
unsigned nhistory_values_for_coordinate_projection()
Number of positional history values (includes current value!)
unsigned nhistory_values_for_projection(const unsigned &fld)
Number of history values to be stored for fld-th field. Whatever the timestepper has set up for the v...
int local_equation(const unsigned &fld, const unsigned &j)
Return local equation number of value j in field fld.
Vector< std::pair< Data *, unsigned > > data_values_of_field(const unsigned &fld)
Specify the values associated with field fld. The information is returned in a vector of pairs which ...
double jacobian_and_shape_of_field(const unsigned &fld, const Vector< double > &s, Shape &psi)
Return Jacobian of mapping and shape functions of field fld at local coordinate s.
unsigned nfields_for_projection()
Number of fields to be projected: dim+1, corresponding to velocity components and pressure.
GeneralisedNewtonianAxisymmetric Taylor Hood upgraded to become projectable.
double jacobian_and_shape_of_field(const unsigned &fld, const Vector< double > &s, Shape &psi)
Return Jacobian of mapping and shape functions of field fld at local coordinate s.
Vector< std::pair< Data *, unsigned > > data_values_of_field(const unsigned &fld)
Specify the values associated with field fld. The information is returned in a vector of pairs which ...
int local_equation(const unsigned &fld, const unsigned &j)
Return local equation number of value j in field fld.
unsigned nfields_for_projection()
Number of fields to be projected: dim+1, corresponding to velocity components and pressure.
unsigned nhistory_values_for_projection(const unsigned &fld)
Number of history values to be stored for fld-th field. Whatever the timestepper has set up for the v...
unsigned nhistory_values_for_coordinate_projection()
Number of positional history values (includes current value!)
unsigned nvalue_of_field(const unsigned &fld)
Return number of values in field fld.
double get_field(const unsigned &t, const unsigned &fld, const Vector< double > &s)
Return interpolated field fld at local coordinate s, at time level t (t=0: present; t>0: history valu...
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.
//////////////////////////////////////////////////////////////////// ////////////////////////////////...
A GeneralisedNewtonianConstitutiveEquation class defining a Newtonian fluid.
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
An OomphLibError object which should be thrown when an run-time error is encountered....
/////////////////////////////////////////////////////////////////////// /////////////////////////////...
Wrapper class for projectable elements. Adds "projectability" to the underlying ELEMENT.
/////////////////////////////////////////////////////////////////////// /////////////////////////////...
////////////////////////////////////////////////////////////////// //////////////////////////////////...
////////////////////////////////////////////////////////////////// //////////////////////////////////...
A Class for shape functions. In simple cases, the shape functions have only one index that can be tho...
////////////////////////////////////////////////////////////////////// //////////////////////////////...
unsigned ntstorage() const
Return the number of doubles required to represent history (one for steady)
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
bool is_steady() const
Flag to indicate if a timestepper has been made steady (possibly temporarily to switch off time-depen...
std::string string(const unsigned &i)
Return the i-th string or "" if the relevant string hasn't been defined.
const double Pi
50 digits from maple
void shape< 2 >(const double &s, double *Psi)
1D shape functions specialised to linear order (2 Nodes)
std::string to_string(T object, unsigned float_precision=8)
Conversion function that should work for anything with operator<< defined (at least all basic types).
//////////////////////////////////////////////////////////////////// ////////////////////////////////...