32 #ifndef OOMPH_GENERALISED_NEWTONIAN_AXISYMMETRIC_NAVIER_STOKES_ELEMENTS_HEADER 33 #define OOMPH_GENERALISED_NEWTONIAN_AXISYMMETRIC_NAVIER_STOKES_ELEMENTS_HEADER 37 #include <oomph-lib-config.h> 43 #include "../generic/Qelements.h" 44 #include "../generic/fsi.h" 45 #include "../generic/projection.h" 46 #include "../generic/generalised_newtonian_constitutive_models.h" 302 virtual int p_local_eqn(
const unsigned &n)
const=0;
341 Shape &test)
const=0;
354 for(
unsigned i=0;
i<3;
i++) {result[
i] = 0.0;}
359 (*Body_force_fct_pt)(time,x,result);
385 for(
unsigned i=0;
i<2;
i++)
389 for(
unsigned j=0;j<3;j++)
391 d_body_force_dx(j,
i)=(body_force_pls[j]-body_force[j])/eps_fd;
432 double source_pls = 0.0;
434 for(
unsigned i=0;
i<2;
i++)
438 gradient[
i] = (source_pls-source)/eps_fd;
476 double*
const ¶meter_pt,
496 Use_extrapolated_strainrate_to_compute_second_invariant(false),
497 ALE_is_disabled(false)
580 Use_extrapolated_strainrate_to_compute_second_invariant=
false;
586 Use_extrapolated_strainrate_to_compute_second_invariant=
true;
628 const unsigned n_time = time_stepper_pt->
ntstorage();
631 for(
unsigned t=0;
t<n_time;
t++)
644 ALE_is_disabled=
true;
653 ALE_is_disabled=
false;
658 virtual double p_axi_nst(
const unsigned &n_p)
const=0;
671 double& max_invariant,
672 double& min_viscosity,
673 double& max_viscosity)
const;
728 const unsigned& which_one=0);
741 const unsigned& nplot)
const 748 for (
unsigned iplot=0;iplot<num_plot_points;iplot++)
767 std::stringstream error_stream;
769 <<
"Axisymmetric Navier-Stokes Elements only store 4 fields " 773 OOMPH_CURRENT_FUNCTION,
774 OOMPH_EXCEPTION_LOCATION);
797 std::stringstream error_stream;
799 <<
"Axisymmetric Navier-Stokes Elements only store 4 fields " 803 OOMPH_CURRENT_FUNCTION,
804 OOMPH_EXCEPTION_LOCATION);
814 for(
unsigned i=0;
i<2;
i++)
820 for(
unsigned i=0;
i<3;
i++)
840 void output(std::ostream &outfile,
const unsigned &nplot);
853 void output(FILE* file_pt,
const unsigned &nplot);
859 const unsigned &nplot,
866 const unsigned &nplot,
873 const unsigned &nplot,
884 double& error,
double& norm);
929 residuals,jacobian,mass_matrix,2);
937 dresidual_dnodal_coordinates);
965 double*
const ¶meter_pt,
972 parameter_pt,dres_dparam,djac_dparam,dmass_matrix_dparam,2);
981 unsigned n_node =
nnode();
987 for (
unsigned i=0;
i<3;
i++)
994 for(
unsigned l=0;l<n_node;l++)
1003 const unsigned &
i)
const 1006 unsigned n_node =
nnode();
1016 double interpolated_u = 0.0;
1018 for(
unsigned l=0;l<n_node;l++)
1020 interpolated_u +=
nodal_value(l,u_nodal_index)*psi[l];
1023 return(interpolated_u);
1031 const unsigned &
i)
const 1034 unsigned n_node =
nnode();
1044 double interpolated_u = 0.0;
1046 for(
unsigned l=0;l<n_node;l++)
1048 interpolated_u +=
nodal_value(t,l,u_nodal_index)*psi[l];
1051 return(interpolated_u);
1067 unsigned n_node =
nnode();
1078 for(
unsigned l=0;l<n_node;l++)
1082 if(global_eqn >= 0) {++n_u_dof;}
1086 du_ddata.resize(n_u_dof,0.0);
1087 global_eqn_number.resize(n_u_dof,0);
1092 for(
unsigned l=0;l<n_node;l++)
1096 if (global_eqn >= 0)
1099 global_eqn_number[count] = global_eqn;
1101 du_ddata[count] = psi[l];
1120 double interpolated_p = 0.0;
1122 for(
unsigned l=0;l<n_pres;l++)
1127 return(interpolated_p);
1134 const unsigned &j)
const 1137 const unsigned n_node =
nnode();
1142 DShape dpsifds(n_node,2);
1151 double interpolated_duds = 0.0;
1154 for(
unsigned l=0;l<n_node;l++)
1156 interpolated_duds +=
nodal_value(l,u_nodal_index)*dpsifds(l,j);
1159 return(interpolated_duds);
1166 const unsigned &j)
const 1169 const unsigned n_node =
nnode();
1174 DShape dpsifdx(n_node,2);
1183 double interpolated_dudx = 0.0;
1186 for(
unsigned l=0;l<n_node;l++)
1188 interpolated_dudx +=
nodal_value(l,u_nodal_index)*dpsifdx(l,j);
1191 return(interpolated_dudx);
1197 const unsigned &
i)
const 1200 const unsigned n_node =
nnode();
1209 double interpolated_dudt = 0.0;
1212 for(
unsigned l=0;l<n_node;l++)
1217 return(interpolated_dudt);
1227 const unsigned &k)
const 1230 const unsigned n_node =
nnode();
1235 DShape dpsifds(n_node,2);
1262 inverse_jacobian,dpsifds,d_dpsifdx_dX);
1268 double interpolated_d_dudx_dX = 0.0;
1271 for(
unsigned l=0;l<n_node;l++)
1273 interpolated_d_dudx_dX +=
1274 nodal_value(l,u_nodal_index)*d_dpsifdx_dX(p,q,l,k);
1277 return(interpolated_d_dudx_dX);
1284 double result = 0.0;
1297 const unsigned n_dim =
dim();
1301 for(
unsigned ipt=0;ipt<n_intpt;ipt++)
1342 static const unsigned Initial_Nvalue[];
1371 const unsigned &ipt,
1433 void output(std::ostream &outfile,
const unsigned &n_plot)
1443 void output(FILE* file_pt,
const unsigned &n_plot)
1461 std::list<std::pair<unsigned long,unsigned> >& dof_lookup_list)
const;
1482 for(
unsigned i=0;
i<9;
i++)
1485 dtestdx(
i,0) = dpsidx(
i,0);
1486 dtestdx(
i,1) = dpsidx(
i,1);
1506 for(
unsigned i=0;
i<9;
i++)
1509 dtestdx(
i,0) = dpsidx(
i,0);
1510 dtestdx(
i,1) = dpsidx(
i,1);
1534 djacobian_dX,d_dpsidx_dX);
1538 for(
unsigned i=0;
i<9;
i++)
1542 for(
unsigned k=0;k<2;k++)
1544 dtestdx(
i,k) = dpsidx(
i,k);
1546 for(
unsigned p=0;p<2;p++)
1548 for(
unsigned q=0;q<9;q++)
1550 d_dtestdx_dX(p,q,
i,k) = d_dpsidx_dX(p,q,
i,k);
1579 for(
unsigned i=0;
i<3;
i++) test[
i] = psi[
i];
1624 static const unsigned Initial_Nvalue[];
1630 static const unsigned Pconv[];
1653 const unsigned &ipt,
1678 {
return Initial_Nvalue[n];}
1712 void output(std::ostream &outfile,
const unsigned &n_plot)
1721 void output(FILE* file_pt,
const unsigned &n_plot)
1739 std::list<std::pair<unsigned long, unsigned> >& dof_lookup_list)
const;
1761 for(
unsigned i=0;
i<9;
i++)
1764 dtestdx(
i,0) = dpsidx(
i,0);
1765 dtestdx(
i,1) = dpsidx(
i,1);
1786 for(
unsigned i=0;
i<9;
i++)
1789 dtestdx(
i,0) = dpsidx(
i,0);
1790 dtestdx(
i,1) = dpsidx(
i,1);
1814 djacobian_dX,d_dpsidx_dX);
1818 for(
unsigned i=0;
i<9;
i++)
1822 for(
unsigned k=0;k<2;k++)
1824 dtestdx(
i,k) = dpsidx(
i,k);
1826 for(
unsigned p=0;p<2;p++)
1828 for(
unsigned q=0;q<9;q++)
1830 d_dtestdx_dX(p,q,
i,k) = d_dpsidx_dX(p,q,
i,k);
1848 double psi1[2], psi2[2];
1855 for(
unsigned i=0;
i<2;
i++)
1857 for(
unsigned j=0;j<2;j++)
1860 psi[2*
i + j] = psi2[
i]*psi1[j];
1874 for(
unsigned i=0;
i<4;
i++) test[
i] = psi[
i];
1905 template<
class TAYLOR_HOOD_ELEMENT>
1927 unsigned nnod=this->
nnode();
1928 for (
unsigned j=0;j<nnod;j++)
1931 data_values.push_back(std::make_pair(this->
node_pt(j),fld));
1938 unsigned Pconv_size=3;
1939 for (
unsigned j=0;j<Pconv_size;j++)
1942 unsigned vertex_index=this->Pconv[j];
1943 data_values.push_back(std::make_pair(this->
node_pt(vertex_index),fld));
1987 unsigned n_dim=this->
dim();
1988 unsigned n_node=this->
nnode();
1995 Shape psif(n_node),testf(n_node);
1996 DShape dpsifdx(n_node,n_dim), dtestfdx(n_node,n_dim);
2005 Shape testf(n_node);
2006 DShape dpsifdx(n_node,n_dim), dtestfdx(n_node,n_dim);
2020 const unsigned &fld,
2023 unsigned n_node=this->
nnode();
2043 double interpolated_u = 0.0;
2046 for(
unsigned l=0;l<n_node;l++)
2048 interpolated_u += this->
nodal_value(t,l,u_nodal_index)*psi[l];
2050 return interpolated_u;
2065 return this->
nnode();
2092 template<
class ELEMENT>
2106 template<
class ELEMENT>
2119 template<
class CROUZEIX_RAVIART_ELEMENT>
2141 const unsigned n_node=this->
nnode();
2142 for (
unsigned n=0;n<n_node;n++)
2145 data_values.push_back(std::make_pair(this->
node_pt(n),fld));
2154 for(
unsigned j=0;j<n_press;j++)
2156 data_values.push_back(
2201 unsigned n_dim=this->
dim();
2202 unsigned n_node=this->
nnode();
2209 Shape psif(n_node),testf(n_node);
2210 DShape dpsifdx(n_node,n_dim), dtestfdx(n_node,n_dim);
2219 Shape testf(n_node);
2220 DShape dpsifdx(n_node,n_dim), dtestfdx(n_node,n_dim);
2234 const unsigned &fld,
2262 return this->
nnode();
2289 template<
class ELEMENT>
2303 template<
class ELEMENT>
unsigned nhistory_values_for_coordinate_projection()
Number of positional history values (includes current value!)
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 ...
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)
double * Density_Ratio_pt
Pointer to the density ratio (relative to the density used in the definition of the Reynolds number) ...
double *& re_invfr_pt()
Pointer to global inverse Froude number.
Crouzeix Raviart upgraded to become projectable.
static Vector< double > Default_Gravity_vector
Static default value for the gravity vector.
virtual unsigned required_nvalue(const unsigned &n) const
Number of values that must be stored at local node n by the element. The default is 0...
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...
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 output(FILE *file_pt, const unsigned &n_plot)
Redirect output to NavierStokesEquations output.
void use_extrapolated_strainrate_to_compute_second_invariant()
Use extrapolation for non-Newtonian const eqn.
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 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-...
void disable_ALE()
Disable ALE, i.e. assert the mesh is not moving – you do this at your own risk!
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 fl...
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.
double compute_physical_size() const
Compute the volume of the element.
void fix_pressure(const unsigned &p_dof, const double &pvalue)
Function to fix the internal pressure dof idof_internal.
GeneralisedNewtonianAxisymmetricQTaylorHoodElement()
Constructor, no internal data points.
GeneralisedNewtonianConstitutiveEquation< 3 > * Constitutive_eqn_pt
Pointer to the generalised Newtonian constitutive equation.
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...
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...
Vector< double > * G_pt
Pointer to global gravity Vector.
void fill_in_contribution_to_dresiduals_dparameter(double *const ¶meter_pt, Vector< double > &dres_dparam)
Compute the element's residual Vector.
double *& viscosity_ratio_pt()
Pointer to Viscosity Ratio.
const double Pi
50 digits from maple
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...
virtual void get_dresidual_dnodal_coordinates(RankThreeTensor< double > &dresidual_dnodal_coordinates)
Compute derivatives of elemental residual vector with respect to nodal coordinates. This function computes these terms analytically and overwrites the default implementation in the FiniteElement base class. dresidual_dnodal_coordinates(l,i,j) = d res(l) / dX_{ij}.
unsigned nscalar_paraview() const
Number of scalars/fields output by this element. Reimplements broken virtual function in base class...
double *& re_pt()
Pointer to Reynolds number.
GeneralisedNewtonianAxisymmetricNavierStokesEquations()
Constructor: NULL the body force and source function.
double * ReInvRo_pt
Pointer to global Reynolds number x inverse Rossby number (used when in a rotating frame) ...
double interpolated_dudt_axi_nst(const Vector< double > &s, const unsigned &i) const
double interpolated_duds_axi_nst(const Vector< double > &s, const unsigned &i, const unsigned &j) const
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...
unsigned nvalue_of_field(const unsigned &fld)
Return number of values in field fld.
virtual int p_nodal_index_axi_nst() const
Which nodal value represents the pressure?
A general Finite Element class.
GeneralisedNewtonianConstitutiveEquation< 3 > *& constitutive_eqn_pt()
Access function for the constitutive equation pointer.
void(* UnsteadyExactSolutionFctPt)(const double &, const Vector< double > &, Vector< double > &)
Function pointer for function that computes Vector-valued time-dependent function as ...
static double Default_Physical_Constant_Value
Static default value for the physical constants (all initialised to zero)
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
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...
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...
const double & re() const
Reynolds number.
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...
double interpolated_dudx_axi_nst(const Vector< double > &s, const unsigned &i, const unsigned &j) const
long & eqn_number(const unsigned &i)
Return the equation number of the i-th stored variable.
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...
void output(FILE *file_pt)
Redirect output to NavierStokesEquations output.
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 ...
void(* Body_force_fct_pt)(const double &time, const Vector< double > &x, Vector< double > &result)
Pointer to body force function.
GeneralisedNewtonianAxisymmetric Taylor Hood upgraded to become projectable.
virtual double weight(const unsigned &i) const =0
Return weight of i-th integration point.
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...
void pin(const unsigned &i)
Pin the i-th stored variable.
double * Re_pt
Pointer to global Reynolds number.
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 ndof_types() const
Returns the number of "DOF types" that degrees of freedom in this element are sub-divided into: Veloc...
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 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(*&)(const double &time, const Vector< double > &x) source_fct_pt()
Access function for the source-function pointer.
double * ReInvFr_pt
Pointer to global Reynolds number x inverse Froude number (= Bond number / Capillary 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.
void output(std::ostream &outfile, const unsigned &n_plot)
Redirect output to NavierStokesEquations output.
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...
TimeStepper *& time_stepper_pt()
Access function for pointer to time stepper: Null if object is not time-dependent.
double interpolated_u_axi_nst(const Vector< double > &s, const unsigned &i) const
Return FE interpolated velocity u[i] at local coordinate s.
double(* Source_fct_pt)(const double &time, const Vector< double > &x)
Pointer to volumetric source function.
unsigned nodal_dimension() const
Return the required Eulerian dimension of the nodes in this element.
const double & re_st() const
Product of Reynolds and Strouhal number (=Womersley number)
int local_equation(const unsigned &fld, const unsigned &j)
Return local equation number of value j in field fld.
double dissipation() const
Return integral of dissipation over element.
void output(FILE *file_pt)
Output function: x,y,[z],u,v,[w],p in tecplot format. Default number of plot points.
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Function pointer for function that computes vector-valued steady "exact solution" as ...
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
int local_equation(const unsigned &fld, const unsigned &j)
Return local equation number of value j in field fld.
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...
unsigned nhistory_values_for_coordinate_projection()
Number of positional history values (includes current value!)
static bool Pre_multiply_by_viscosity_ratio
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...
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...
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
virtual int p_nodal_index_axi_nst() const
Which nodal value represents the pressure?
virtual void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned > > &dof_lookup_list) const
Create a list of pairs for the unknowns that this element is "in charge of" – ignore any unknowns as...
static int Pressure_not_stored_at_node
Static "magic" number that indicates that the pressure is not stored at a node.
Vector< double > *& g_pt()
Pointer to Vector of gravitational components.
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. Plot at a given number of plot points and compute L2 error and L2 norm of velocity solution over element.
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 ...
virtual double knot(const unsigned &i, const unsigned &j) const =0
Return local coordinate s[j] of i-th integration point.
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 * ReSt_pt
Pointer to global Reynolds number x Strouhal number (=Womersley)
Data *& internal_data_pt(const unsigned &i)
Return a pointer to i-th internal data object.
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...
GeneralisedNewtonianAxisymmetricQCrouzeixRaviartElement()
Constructor, there are three internal values (for the pressure)
double get_source_fct(const double &time, const unsigned &ipt, const Vector< double > &x)
Calculate the source fct at given time and Eulerian position.
double interpolated_p_axi_nst(const Vector< double > &s) const
Return FE interpolated pressure at local coordinate s.
A class that represents a collection of data; each Data object may contain many different individual ...
static Vector< double > Gamma
Vector to decide whether the stress-divergence form is used or not.
virtual void get_source_fct_gradient(const double &time, const unsigned &ipt, const Vector< double > &x, Vector< double > &gradient)
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...
double pressure_integral() const
Integral of pressure over element.
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 strain_rate(const Vector< double > &s, DenseMatrix< double > &strain_rate) const
Strain-rate tensor: where (in that order)
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...
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...
void output(std::ostream &outfile)
Redirect output to NavierStokesEquations output.
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...
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
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...
double *& re_st_pt()
Pointer to product of Reynolds and Strouhal number (=Womersley number)
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.
void pshape_axi_nst(const Vector< double > &s, Shape &psi) const
Pressure shape functions at local coordinate s.
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...
double p_axi_nst(const unsigned &i) const
Return the pressure values at internal dof i_internal (Discontinous pressure interpolation – no need...
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_invro() const
Global Reynolds number multiplied by inverse Rossby number.
void use_current_strainrate_to_compute_second_invariant()
Switch to fully implict evaluation of non-Newtonian const eqn.
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...
unsigned ntstorage() const
Return the number of doubles required to represent history (one for steady)
unsigned ndof_types() const
The number of "DOF types" that degrees of freedom in this element are sub-divided into: Velocity and ...
unsigned ntstorage() const
Return total number of doubles stored per value to record time history of each value (one for steady ...
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...
bool Use_extrapolated_strainrate_to_compute_second_invariant
unsigned P_axi_nst_internal_index
unsigned dim() const
Return the spatial dimension of the element, i.e. the number of local coordinates required to paramet...
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 unsigned u_index_axi_nst(const unsigned &i) const
Return the index at which the i-th unknown velocity component.
double *& density_ratio_pt()
Pointer to Density ratio.
int p_local_eqn(const unsigned &n) const
Overload the access function for the pressure's local equation numbers.
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...
void fix_pressure(const unsigned &n_p, const double &pvalue)
Fix the pressure at local pressure node n_p.
virtual unsigned nweight() const =0
Return the number of integration points of the scheme.
unsigned npres_axi_nst() const
Return number of pressure values.
bool ALE_is_disabled
Boolean flag to indicate if ALE formulation is disabled when the time-derivatives are computed...
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
std::string string(const unsigned &i)
Return the i-th string or "" if the relevant string hasn't been defined.
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(std::ostream &outfile, const unsigned &n_plot)
Redirect output to NavierStokesEquations output.
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 output(FILE *file_pt, const unsigned &n_plot)
Redirect output to NavierStokesEquations output.
void interpolated_u_axi_nst(const Vector< double > &s, Vector< double > &veloc) const
Compute vector of FE interpolated velocity u at local coordinate s.
unsigned n_u_nst() const
Return the number of velocity components for use in general FluidInterface class. ...
void pshape_axi_nst(const Vector< double > &s, Shape &psi) const
Pressure shape functions at local coordinate s.
void enable_ALE()
(Re-)enable ALE, i.e. take possible mesh motion into account when evaluating the time-derivative. Note: By default, ALE is enabled, at the expense of possibly creating unnecessary work in problems where the mesh is, in fact, stationary.
virtual unsigned npres_axi_nst() const =0
Function to return number of pressure degrees of freedom.
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. Function prints as many components as are returned in solution Vector.
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 ...
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.
bool is_steady() const
Flag to indicate if a timestepper has been made steady (possibly temporarily to switch off time-depen...
static double Default_Physical_Ratio_Value
Static default value for the physical ratios (all are initialised to one)
const double & viscosity_ratio() const
Viscosity ratio for element: Element's viscosity relative to the viscosity used in the definition of ...
double kin_energy() const
Get integral of kinetic energy over element.
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...
std::string scalar_name_paraview(const unsigned &i) const
Name of the i-th scalar field. Default implementation returns V1 for the first one, V2 for the second etc. Can (should!) be overloaded with more meaningful names in specific elements.
int p_local_eqn(const unsigned &n) const
Overload the access function for the pressure's local.
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...
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Compute the element's residual Vector.
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 nnode() const
Return the number of nodes.
Base class for time-stepping schemes. Timestepper provides an approximation of the temporal derivativ...
double *& re_invro_pt()
Pointer to global inverse Froude 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...
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
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...
void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
static double Default_fd_jacobian_step
Double used for the default finite difference step in elemental jacobian calculations.
const double & re_invfr() const
Global inverse Froude number.
virtual double J_eulerian(const Vector< double > &s) const
Return the Jacobian of mapping from local to global coordinates at local position s...
double * Viscosity_Ratio_pt
Pointer to the viscosity ratio (relative to the viscosity used in the definition of the Reynolds numb...
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...
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 p_axi_nst(const unsigned &n_p) const
Access function for the pressure values at local pressure node n_p (const version) ...
const double & density_ratio() const
Density ratio for element: Element's density relative to the viscosity used in the definition of the ...
unsigned nfields_for_projection()
Number of fields to be projected: dim+1, corresponding to velocity components and pressure...
static DenseMatrix< double > Dummy_matrix
Empty dense matrix used as a dummy argument to combined residual and jacobian functions in the case w...
unsigned nvalue_of_field(const unsigned &fld)
Return number of values in field fld.
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...
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)...
const Vector< double > & g() const
Vector of gravitational components.
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...
void output(std::ostream &outfile)
Redirect output to NavierStokesEquations output.
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...
void shape< 2 >(const double &s, double *Psi)
1D shape functions specialised to linear order (2 Nodes)
unsigned npres_axi_nst() const
Return number of pressure values.
void output(FILE *file_pt)
Redirect output to NavierStokesEquations output.