29 #ifndef OOMPH_GENERALISED_NEWTONIAN_TAXISYM_NAVIER_STOKES_ELEMENTS_HEADER
30 #define OOMPH_GENERALISED_NEWTONIAN_TAXISYM_NAVIER_STOKES_ELEMENTS_HEADER
34 #include <oomph-lib-config.h>
42 #include "../generic/Telements.h"
43 #include "../generic/error_estimator.h"
188 std::set<std::pair<Data*, unsigned>>& paired_load_data);
199 std::set<std::pair<Data*, unsigned>>& paired_pressure_data);
208 void output(std::ostream& outfile,
const unsigned& nplot)
221 void output(FILE* file_pt,
const unsigned& n_plot)
259 unsigned num_entries = 6;
260 if (flux.size() < num_entries)
262 std::ostringstream error_message;
263 error_message <<
"The flux vector has the wrong number of entries, "
264 << flux.size() <<
", whereas it should be at least "
265 << num_entries << std::endl;
267 OOMPH_CURRENT_FUNCTION,
268 OOMPH_EXCEPTION_LOCATION);
280 for (
unsigned i = 0;
i < 3;
i++)
282 flux[icount] = strainrate(
i,
i);
287 for (
unsigned i = 0;
i < 3;
i++)
289 for (
unsigned j =
i + 1; j < 3; j++)
291 flux[icount] = strainrate(
i, j);
312 std::list<std::pair<unsigned long, unsigned>>& dof_lookup_list)
const
315 unsigned n_node = this->
nnode();
321 std::pair<unsigned, unsigned> dof_lookup;
324 unsigned pressure_dof_number = 3;
327 for (
unsigned n = 0; n < n_press; n++)
339 dof_lookup.first = this->
eqn_number(local_eqn_number);
340 dof_lookup.second = pressure_dof_number;
343 dof_lookup_list.push_front(dof_lookup);
348 for (
unsigned n = 0; n < n_node; n++)
354 for (
unsigned v = 0; v < nv; v++)
364 dof_lookup.first = this->
eqn_number(local_eqn_number);
365 dof_lookup.second = v;
368 dof_lookup_list.push_front(dof_lookup);
442 ipt, psi, dpsidx, djacobian_dX, d_dpsidx_dX);
447 d_dtestdx_dX = d_dpsidx_dX;
691 return static_cast<int>(3);
715 std::set<std::pair<Data*, unsigned>>& paired_load_data);
726 std::set<std::pair<Data*, unsigned>>& paired_pressure_data);
735 void output(std::ostream& outfile,
const unsigned& nplot)
748 void output(FILE* file_pt,
const unsigned& n_plot)
786 unsigned num_entries = 6;
787 if (flux.size() < num_entries)
789 std::ostringstream error_message;
790 error_message <<
"The flux vector has the wrong number of entries, "
791 << flux.size() <<
", whereas it should be at least "
792 << num_entries << std::endl;
794 OOMPH_CURRENT_FUNCTION,
795 OOMPH_EXCEPTION_LOCATION);
807 for (
unsigned i = 0;
i < 3;
i++)
809 flux[icount] = strainrate(
i,
i);
814 for (
unsigned i = 0;
i < 3;
i++)
816 for (
unsigned j =
i + 1; j < 3; j++)
818 flux[icount] = strainrate(
i, j);
838 std::list<std::pair<unsigned long, unsigned>>& dof_lookup_list)
const
841 unsigned n_node = this->
nnode();
844 std::pair<unsigned, unsigned> dof_lookup;
847 for (
unsigned n = 0; n < n_node; n++)
853 for (
unsigned v = 0; v < nv; v++)
865 dof_lookup.first = this->
eqn_number(local_eqn_number);
868 dof_lookup.second = v;
871 dof_lookup_list.push_front(dof_lookup);
945 ipt, psi, dpsidx, djacobian_dX, d_dpsidx_dX);
950 d_dtestdx_dX = d_dpsidx_dX;
969 ppsi[2] = 1.0 -
s[0] -
s[1];
977 dppsidx(2, 0) = -1.0;
978 dppsidx(2, 1) = -1.0;
1013 psi[2] = 1.0 -
s[0] -
s[1];
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 ...
void pin(const unsigned &i)
Pin the i-th stored variable.
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...
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
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 ...
Base class for finite elements that can compute the quantities that are required for the Z2 error est...
FaceGeometry()
Constructor: Call constructor of base.
//////////////////////////////////////////////////////////////////// ////////////////////////////////...
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 void transform_derivatives(const DenseMatrix< double > &inverse_jacobian, DShape &dbasis) const
Convert derivative w.r.t.local coordinates to derivatives w.r.t the coordinates used to assemble the ...
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-...
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Return the local equation number corresponding to the i-th value at the n-th local node.
unsigned nnode() const
Return the number of nodes.
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...
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 ...
unsigned long eqn_number(const unsigned &ieqn_local) const
Return the global equation number corresponding to the ieqn_local-th local equation number.
int local_eqn_number(const unsigned long &ieqn_global) const
Return the local equation number corresponding to the ieqn_global-th global equation number....
Data *& internal_data_pt(const unsigned &i)
Return a pointer to i-th internal data object.
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...
void output(std::ostream &outfile)
Output function: x,y,[z],u,v,[w],p in tecplot format. Default number of plot points.
void strain_rate(const Vector< double > &s, DenseMatrix< double > &strain_rate) const
Strain-rate tensor: where (in that order)
///////////////////////////////////////////////////////////////////////////
void output(FILE *file_pt, const unsigned &n_plot)
Redirect output to NavierStokesEquations output.
int p_local_eqn(const unsigned &n) const
Return the local equation numbers for the pressure values.
void pshape_axi_nst(const Vector< double > &s, Shape &psi) const
Pressure shape functions at local coordinate s.
void unpin_all_internal_pressure_dofs()
Unpin all internal pressure dofs.
unsigned num_Z2_flux_terms()
Number of 'flux' terms for Z2 error estimation.
unsigned nrecovery_order()
Order of recovery shape functions for Z2 error estimation: Same order as unenriched shape functions.
Node * vertex_node_pt(const unsigned &j) const
Pointer to the j-th vertex node in the element.
void identify_load_data(std::set< std::pair< Data *, unsigned >> &paired_load_data)
Add to the set paired_load_data pairs of pointers to data objects and unsignedegers that index the va...
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 identify_pressure_data(std::set< std::pair< Data *, unsigned >> &paired_pressure_data)
Add to the set paired_pressure_data pairs containing.
void output(std::ostream &outfile, const unsigned &nplot)
Redirect output to NavierStokesEquations output.
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...
virtual unsigned required_nvalue(const unsigned &n) const
Number of values (pinned or dofs) required at local node n.
void get_Z2_flux(const Vector< double > &s, Vector< double > &flux)
Get 'flux' for Z2 error recovery: Upper triangular entries in strain rate tensor.
unsigned ndof_types() const
The number of "DOF types" that degrees of freedom in this element are sub-divided into: Velocity and ...
GeneralisedNewtonianAxisymmetricTCrouzeixRaviartElement(const GeneralisedNewtonianAxisymmetricTCrouzeixRaviartElement &dummy)=delete
Broken copy constructor.
void output(FILE *file_pt)
Redirect output to NavierStokesEquations output.
unsigned nvertex_node() const
Number of vertex nodes in the element.
void operator=(const GeneralisedNewtonianAxisymmetricTCrouzeixRaviartElement &)=delete
Broken assignment operator.
unsigned P_axi_nst_internal_index
Internal index that indicates at which internal datum the pressure is stored.
void output(std::ostream &outfile)
Redirect output to NavierStokesEquations output.
double p_axi_nst(const unsigned &i) const
Return the pressure values at internal dof i_internal (Discontinous pressure interpolation – no need ...
GeneralisedNewtonianAxisymmetricTCrouzeixRaviartElement()
Constructor, there are 3 internal values (for the pressure)
unsigned npres_axi_nst() const
Return number of pressure values.
double dpshape_and_dptest_eulerian_axi_nst(const Vector< double > &s, Shape &ppsi, DShape &dppsidx, Shape &ptest, DShape &dptestdx) const
Pressure shape and test functions and their derivs w.r.t. to global coords at local coordinate s (tak...
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 fix_pressure(const unsigned &p_dof, const double &p_value)
Pin p_dof-th pressure dof and set it to value specified by p_value.
///////////////////////////////////////////////////////////////////////// ///////////////////////////...
unsigned nvertex_node() const
Number of vertex nodes in the element.
Node * vertex_node_pt(const unsigned &j) const
Pointer to the j-th vertex node in the element.
static const unsigned Initial_Nvalue[]
Static array of ints to hold number of variables at node.
void output(std::ostream &outfile)
Redirect output to NavierStokesEquations output.
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.
GeneralisedNewtonianAxisymmetricTTaylorHoodElement(const GeneralisedNewtonianAxisymmetricTTaylorHoodElement &dummy)=delete
Broken copy constructor.
void identify_pressure_data(std::set< std::pair< Data *, unsigned >> &paired_pressure_data)
Add to the set paired_pressure_data pairs containing.
void output(FILE *file_pt, const unsigned &n_plot)
Redirect output to NavierStokesEquations output.
int p_nodal_index_axi_nst() const
Set the value at which the pressure is stored in the nodes.
void pshape_axi_nst(const Vector< double > &s, Shape &psi) const
Test whether the pressure dof p_dof hanging or not?
void unpin_proper_nodal_pressure_dofs()
Unpin the proper nodal pressure dofs.
double p_axi_nst(const unsigned &n_p) const
Access function for the pressure values at local pressure node n_p (const version)
void fix_pressure(const unsigned &p_dof, const double &p_value)
Pin p_dof-th pressure dof and set it to value specified by p_value.
unsigned p_index_axi_nst()
Which nodal value represents the pressure?
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 unpin_all_nodal_pressure_dofs()
Unpin all pressure dofs.
void operator=(const GeneralisedNewtonianAxisymmetricTTaylorHoodElement &)=delete
Broken assignment operator.
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 output(std::ostream &outfile, const unsigned &nplot)
Redirect output to NavierStokesEquations output.
unsigned ndof_types() const
The number of "DOF types" that degrees of freedom in this element are sub-divided into: Velocities an...
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 Pconv[]
Static array of ints to hold conversion from pressure node numbers to actual node numbers.
virtual double dpshape_and_dptest_eulerian_axi_nst(const Vector< double > &s, Shape &ppsi, DShape &dppsidx, Shape &ptest, DShape &dptestdx) const
Compute the pressure shape and test functions and derivatives w.r.t. global coords at local coordinat...
unsigned num_Z2_flux_terms()
Number of 'flux' terms for Z2 error estimation.
void pin_all_nodal_pressure_dofs()
Pin all nodal pressure dofs.
int p_local_eqn(const unsigned &n) const
Pointer to n_p-th pressure node.
unsigned npres_axi_nst() const
Return number of pressure values.
unsigned nrecovery_order()
Order of recovery shape functions for Z2 error estimation: Same order as shape functions.
GeneralisedNewtonianAxisymmetricTTaylorHoodElement()
Constructor, no internal data points.
void get_Z2_flux(const Vector< double > &s, Vector< double > &flux)
Get 'flux' for Z2 error recovery: Upper triangular entries in strain rate tensor.
void identify_load_data(std::set< std::pair< Data *, unsigned >> &paired_load_data)
Add to the set paired_load_data pairs containing.
void output(FILE *file_pt)
Redirect output to NavierStokesEquations output.
Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a gi...
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...
//////////////////////////////////////////////////////////////////// ////////////////////////////////...
//////////////////////////////////////////////////////////////////// ////////////////////////////////...