oomph::AxisymmetricPVDEquationsWithPressure Class Referenceabstract

#include <axisym_solid_elements.h>

+ Inheritance diagram for oomph::AxisymmetricPVDEquationsWithPressure:

Public Member Functions

 AxisymmetricPVDEquationsWithPressure ()
 Constructor, by default the element is not incompressible. More...
 
ConstitutiveLaw *& constitutive_law_pt ()
 Return the constitutive law pointer. More...
 
void get_stress (const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma, DenseMatrix< double > &Gup, double &pressure_stress, double &kappa)
 
void get_stress (const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma, DenseMatrix< double > &Gup, double &detG)
 
bool is_incompressible () const
 Return whether the material is incompressible. More...
 
void set_incompressible ()
 Set the material to be incompressible. More...
 
void set_compressible ()
 Set the material to be compressible. More...
 
virtual unsigned nsolid_pres () const =0
 Return the number of solid pressure degrees of freedom. More...
 
virtual double solid_p (const unsigned &l)=0
 Return the lth solid pressures. More...
 
void fill_in_contribution_to_residuals (Vector< double > &residuals)
 Return the residuals. More...
 
void fill_in_contribution_to_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 Return the residuals and the jacobian. More...
 
void fill_in_generic_residual_contribution_axisym_pvd_with_pressure (Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
 
double compute_physical_size () const
 Overload/implement the size function. More...
 
double interpolated_solid_p (const Vector< double > &s)
 Return the interpolated_solid_pressure. More...
 
void output (std::ostream &outfile)
 Overload the output function. More...
 
void output (std::ostream &outfile, const unsigned &n_plot)
 Output function. More...
 
void output (FILE *file_pt)
 Overload the output function. More...
 
void output (FILE *file_pt, const unsigned &n_plot)
 Output function. More...
 
- Public Member Functions inherited from oomph::SolidFiniteElement
void set_lagrangian_dimension (const unsigned &lagrangian_dimension)
 
virtual bool has_internal_solid_data ()
 
 SolidFiniteElement ()
 Constructor: Set defaults. More...
 
virtual ~SolidFiniteElement ()
 Destructor to clean up any allocated memory. More...
 
 SolidFiniteElement (const SolidFiniteElement &)=delete
 Broken copy constructor. More...
 
unsigned ngeom_data () const
 Broken assignment operator. More...
 
Datageom_data_pt (const unsigned &j)
 
void identify_geometric_data (std::set< Data * > &geometric_data_pt)
 
double zeta_nodal (const unsigned &n, const unsigned &k, const unsigned &i) const
 
virtual void get_x_and_xi (const Vector< double > &s, Vector< double > &x_fe, Vector< double > &x, Vector< double > &xi_fe, Vector< double > &xi) const
 
virtual void set_macro_elem_pt (MacroElement *macro_elem_pt)
 
virtual void set_macro_elem_pt (MacroElement *macro_elem_pt, MacroElement *undeformed_macro_elem_pt)
 
void set_undeformed_macro_elem_pt (MacroElement *undeformed_macro_elem_pt)
 
MacroElementundeformed_macro_elem_pt ()
 Access function to pointer to "undeformed" macro element. More...
 
double dshape_lagrangian (const Vector< double > &s, Shape &psi, DShape &dpsidxi) const
 
virtual double dshape_lagrangian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidxi) const
 
double d2shape_lagrangian (const Vector< double > &s, Shape &psi, DShape &dpsidxi, DShape &d2psidxi) const
 
virtual double d2shape_lagrangian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidxi, DShape &d2psidxi) const
 
unsigned lagrangian_dimension () const
 
unsigned nnodal_lagrangian_type () const
 
Nodeconstruct_node (const unsigned &n)
 Construct the local node n and return a pointer to it. More...
 
Nodeconstruct_node (const unsigned &n, TimeStepper *const &time_stepper_pt)
 
Nodeconstruct_boundary_node (const unsigned &n)
 
Nodeconstruct_boundary_node (const unsigned &n, TimeStepper *const &time_stepper_pt)
 
virtual void assign_all_generic_local_eqn_numbers (const bool &store_local_dof_pt)
 
void describe_local_dofs (std::ostream &out, const std::string &current_string) const
 
double raw_lagrangian_position (const unsigned &n, const unsigned &i) const
 
double raw_lagrangian_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double lagrangian_position (const unsigned &n, const unsigned &i) const
 Return i-th Lagrangian coordinate at local node n. More...
 
double lagrangian_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const
 
virtual double interpolated_xi (const Vector< double > &s, const unsigned &i) const
 
virtual void interpolated_xi (const Vector< double > &s, Vector< double > &xi) const
 
virtual void interpolated_dxids (const Vector< double > &s, DenseMatrix< double > &dxids) const
 
virtual void J_lagrangian (const Vector< double > &s) const
 
virtual double J_lagrangian_at_knot (const unsigned &ipt) const
 
SolidInitialCondition *& solid_ic_pt ()
 Pointer to object that describes the initial condition. More...
 
void enable_solve_for_consistent_newmark_accel ()
 
void disable_solve_for_consistent_newmark_accel ()
 Set to reset the problem being solved to be the standard problem. More...
 
MultiplierFctPtmultiplier_fct_pt ()
 
MultiplierFctPt multiplier_fct_pt () const
 
virtual void get_residuals_for_solid_ic (Vector< double > &residuals)
 
void fill_in_residuals_for_solid_ic (Vector< double > &residuals)
 
void fill_in_jacobian_for_solid_ic (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
void fill_in_jacobian_for_newmark_accel (DenseMatrix< double > &jacobian)
 
void compute_norm (double &el_norm)
 
int position_local_eqn (const unsigned &n, const unsigned &k, const unsigned &j) const
 
- Public Member Functions inherited from oomph::FiniteElement
void set_dimension (const unsigned &dim)
 
void set_nodal_dimension (const unsigned &nodal_dim)
 
void set_nnodal_position_type (const unsigned &nposition_type)
 Set the number of types required to interpolate the coordinate. More...
 
void set_n_node (const unsigned &n)
 
int nodal_local_eqn (const unsigned &n, const unsigned &i) const
 
double dJ_eulerian_at_knot (const unsigned &ipt, Shape &psi, DenseMatrix< double > &djacobian_dX) const
 
 FiniteElement ()
 Constructor. More...
 
virtual ~FiniteElement ()
 
 FiniteElement (const FiniteElement &)=delete
 Broken copy constructor. More...
 
virtual bool local_coord_is_valid (const Vector< double > &s)
 Broken assignment operator. More...
 
virtual void move_local_coord_back_into_element (Vector< double > &s) const
 
void get_centre_of_gravity_and_max_radius_in_terms_of_zeta (Vector< double > &cog, double &max_radius) const
 
virtual void local_coordinate_of_node (const unsigned &j, Vector< double > &s) const
 
virtual void local_fraction_of_node (const unsigned &j, Vector< double > &s_fraction)
 
virtual double local_one_d_fraction_of_node (const unsigned &n1d, const unsigned &i)
 
MacroElementmacro_elem_pt ()
 Access function to pointer to macro element. More...
 
void get_x (const Vector< double > &s, Vector< double > &x) const
 
void get_x (const unsigned &t, const Vector< double > &s, Vector< double > &x)
 
virtual void get_x_from_macro_element (const Vector< double > &s, Vector< double > &x) const
 
virtual void get_x_from_macro_element (const unsigned &t, const Vector< double > &s, Vector< double > &x)
 
virtual void set_integration_scheme (Integral *const &integral_pt)
 Set the spatial integration scheme. More...
 
Integral *const & integral_pt () const
 Return the pointer to the integration scheme (const version) More...
 
virtual void shape (const Vector< double > &s, Shape &psi) const =0
 
virtual void shape_at_knot (const unsigned &ipt, Shape &psi) const
 
virtual void dshape_local (const Vector< double > &s, Shape &psi, DShape &dpsids) const
 
virtual void dshape_local_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsids) const
 
virtual void d2shape_local (const Vector< double > &s, Shape &psi, DShape &dpsids, DShape &d2psids) const
 
virtual void d2shape_local_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsids, DShape &d2psids) const
 
virtual double J_eulerian (const Vector< double > &s) const
 
virtual double J_eulerian_at_knot (const unsigned &ipt) const
 
void check_J_eulerian_at_knots (bool &passed) const
 
void check_jacobian (const double &jacobian) const
 
double dshape_eulerian (const Vector< double > &s, Shape &psi, DShape &dpsidx) const
 
virtual double dshape_eulerian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidx) const
 
virtual double dshape_eulerian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsi, DenseMatrix< double > &djacobian_dX, RankFourTensor< double > &d_dpsidx_dX) const
 
double d2shape_eulerian (const Vector< double > &s, Shape &psi, DShape &dpsidx, DShape &d2psidx) const
 
virtual double d2shape_eulerian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidx, DShape &d2psidx) const
 
virtual void assign_nodal_local_eqn_numbers (const bool &store_local_dof_pt)
 
virtual void describe_nodal_local_dofs (std::ostream &out, const std::string &current_string) const
 
Node *& node_pt (const unsigned &n)
 Return a pointer to the local node n. More...
 
Node *const & node_pt (const unsigned &n) const
 Return a pointer to the local node n (const version) More...
 
unsigned nnode () const
 Return the number of nodes. More...
 
virtual unsigned nnode_1d () const
 
double raw_nodal_position (const unsigned &n, const unsigned &i) const
 
double raw_nodal_position (const unsigned &t, const unsigned &n, const unsigned &i) const
 
double raw_dnodal_position_dt (const unsigned &n, const unsigned &i) const
 
double raw_dnodal_position_dt (const unsigned &n, const unsigned &j, const unsigned &i) const
 
double raw_nodal_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double raw_nodal_position_gen (const unsigned &t, const unsigned &n, const unsigned &k, const unsigned &i) const
 
double raw_dnodal_position_gen_dt (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double raw_dnodal_position_gen_dt (const unsigned &j, const unsigned &n, const unsigned &k, const unsigned &i) const
 
double nodal_position (const unsigned &n, const unsigned &i) const
 
double nodal_position (const unsigned &t, const unsigned &n, const unsigned &i) const
 
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. More...
 
double dnodal_position_dt (const unsigned &n, const unsigned &j, const unsigned &i) const
 
double nodal_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double nodal_position_gen (const unsigned &t, const unsigned &n, const unsigned &k, const unsigned &i) const
 
double dnodal_position_gen_dt (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double dnodal_position_gen_dt (const unsigned &j, const unsigned &n, const unsigned &k, const unsigned &i) const
 
virtual void get_dresidual_dnodal_coordinates (RankThreeTensor< double > &dresidual_dnodal_coordinates)
 
virtual void disable_ALE ()
 
virtual void enable_ALE ()
 
virtual unsigned required_nvalue (const unsigned &n) const
 
unsigned nnodal_position_type () const
 
bool has_hanging_nodes () const
 
unsigned nodal_dimension () const
 Return the required Eulerian dimension of the nodes in this element. More...
 
virtual unsigned nvertex_node () const
 
virtual Nodevertex_node_pt (const unsigned &j) const
 
int get_node_number (Node *const &node_pt) const
 
virtual Nodeget_node_at_local_coordinate (const Vector< double > &s) const
 
double raw_nodal_value (const unsigned &n, const unsigned &i) const
 
double raw_nodal_value (const unsigned &t, const unsigned &n, const unsigned &i) const
 
double nodal_value (const unsigned &n, const unsigned &i) const
 
double nodal_value (const unsigned &t, const unsigned &n, const unsigned &i) const
 
unsigned dim () const
 
virtual ElementGeometry::ElementGeometry element_geometry () const
 Return the geometry type of the element (either Q or T usually). More...
 
virtual double interpolated_x (const Vector< double > &s, const unsigned &i) const
 Return FE interpolated coordinate x[i] at local coordinate s. More...
 
virtual double interpolated_x (const unsigned &t, const Vector< double > &s, const unsigned &i) const
 
virtual void interpolated_x (const Vector< double > &s, Vector< double > &x) const
 Return FE interpolated position x[] at local coordinate s as Vector. More...
 
virtual void interpolated_x (const unsigned &t, const Vector< double > &s, Vector< double > &x) const
 
virtual double interpolated_dxdt (const Vector< double > &s, const unsigned &i, const unsigned &t)
 
virtual void interpolated_dxdt (const Vector< double > &s, const unsigned &t, Vector< double > &dxdt)
 
void position (const Vector< double > &zeta, Vector< double > &r) const
 
void position (const unsigned &t, const Vector< double > &zeta, Vector< double > &r) const
 
void dposition_dt (const Vector< double > &zeta, const unsigned &t, Vector< double > &drdt)
 
void interpolated_zeta (const Vector< double > &s, Vector< double > &zeta) const
 
void locate_zeta (const Vector< double > &zeta, GeomObject *&geom_object_pt, Vector< double > &s, const bool &use_coordinate_as_initial_guess=false)
 
virtual void node_update ()
 
virtual void identify_field_data_for_interactions (std::set< std::pair< Data *, unsigned >> &paired_field_data)
 
virtual double s_min () const
 Min value of local coordinate. More...
 
virtual double s_max () const
 Max. value of local coordinate. More...
 
double size () const
 
virtual void point_output_data (const Vector< double > &s, Vector< double > &data)
 
void point_output (std::ostream &outfile, const Vector< double > &s)
 
virtual unsigned nplot_points_paraview (const unsigned &nplot) const
 
virtual unsigned nsub_elements_paraview (const unsigned &nplot) const
 
void output_paraview (std::ofstream &file_out, const unsigned &nplot) const
 
virtual void write_paraview_output_offset_information (std::ofstream &file_out, const unsigned &nplot, unsigned &counter) const
 
virtual void write_paraview_type (std::ofstream &file_out, const unsigned &nplot) const
 
virtual void write_paraview_offsets (std::ofstream &file_out, const unsigned &nplot, unsigned &offset_sum) const
 
virtual unsigned nscalar_paraview () const
 
virtual void scalar_value_paraview (std::ofstream &file_out, const unsigned &i, const unsigned &nplot) const
 
virtual void scalar_value_fct_paraview (std::ofstream &file_out, const unsigned &i, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt) const
 
virtual void scalar_value_fct_paraview (std::ofstream &file_out, const unsigned &i, const unsigned &nplot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt) const
 
virtual std::string scalar_name_paraview (const unsigned &i) const
 
virtual void output (const unsigned &t, std::ostream &outfile, const unsigned &n_plot) const
 
virtual void output_fct (std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
 Output an exact solution over the element. More...
 
virtual void output_fct (std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
 Output a time-dependent exact solution over the element. More...
 
virtual void output_fct (std::ostream &outfile, const unsigned &n_plot, const double &time, const SolutionFunctorBase &exact_soln) const
 Output a time-dependent exact solution over the element. More...
 
virtual void get_s_plot (const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
 
virtual std::string tecplot_zone_string (const unsigned &nplot) const
 
virtual void write_tecplot_zone_footer (std::ostream &outfile, const unsigned &nplot) const
 
virtual void write_tecplot_zone_footer (FILE *file_pt, const unsigned &nplot) const
 
virtual unsigned nplot_points (const unsigned &nplot) const
 
virtual void compute_error (FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
 Calculate the norm of the error and that of the exact solution. More...
 
virtual void compute_error (FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
 Calculate the norm of the error and that of the exact solution. More...
 
virtual void compute_error (FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_abs_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error)
 
void integrate_fct (FiniteElement::SteadyExactSolutionFctPt integrand_fct_pt, Vector< double > &integral)
 Integrate Vector-valued function over element. More...
 
void integrate_fct (FiniteElement::UnsteadyExactSolutionFctPt integrand_fct_pt, const double &time, Vector< double > &integral)
 Integrate Vector-valued time-dep function over element. More...
 
virtual void build_face_element (const int &face_index, FaceElement *face_element_pt)
 
virtual unsigned self_test ()
 
virtual unsigned get_bulk_node_number (const int &face_index, const unsigned &i) const
 
virtual int face_outer_unit_normal_sign (const int &face_index) const
 Get the sign of the outer unit normal on the face given by face_index. More...
 
virtual unsigned nnode_on_face () const
 
void face_node_number_error_check (const unsigned &i) const
 Range check for face node numbers. More...
 
virtual CoordinateMappingFctPt face_to_bulk_coordinate_fct_pt (const int &face_index) const
 
virtual BulkCoordinateDerivativesFctPt bulk_coordinate_derivatives_fct_pt (const int &face_index) const
 
- Public Member Functions inherited from oomph::GeneralisedElement
 GeneralisedElement ()
 Constructor: Initialise all pointers and all values to zero. More...
 
virtual ~GeneralisedElement ()
 Virtual destructor to clean up any memory allocated by the object. More...
 
 GeneralisedElement (const GeneralisedElement &)=delete
 Broken copy constructor. More...
 
void operator= (const GeneralisedElement &)=delete
 Broken assignment operator. More...
 
Data *& internal_data_pt (const unsigned &i)
 Return a pointer to i-th internal data object. More...
 
Data *const & internal_data_pt (const unsigned &i) const
 Return a pointer to i-th internal data object (const version) More...
 
Data *& external_data_pt (const unsigned &i)
 Return a pointer to i-th external data object. More...
 
Data *const & external_data_pt (const unsigned &i) const
 Return a pointer to i-th external data object (const version) More...
 
unsigned long eqn_number (const unsigned &ieqn_local) const
 
int local_eqn_number (const unsigned long &ieqn_global) const
 
unsigned add_external_data (Data *const &data_pt, const bool &fd=true)
 
bool external_data_fd (const unsigned &i) const
 
void exclude_external_data_fd (const unsigned &i)
 
void include_external_data_fd (const unsigned &i)
 
void flush_external_data ()
 Flush all external data. More...
 
void flush_external_data (Data *const &data_pt)
 Flush the object addressed by data_pt from the external data array. More...
 
unsigned ninternal_data () const
 Return the number of internal data objects. More...
 
unsigned nexternal_data () const
 Return the number of external data objects. More...
 
unsigned ndof () const
 Return the number of equations/dofs in the element. More...
 
void dof_vector (const unsigned &t, Vector< double > &dof)
 Return the vector of dof values at time level t. More...
 
void dof_pt_vector (Vector< double * > &dof_pt)
 Return the vector of pointers to dof values. More...
 
void set_internal_data_time_stepper (const unsigned &i, TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
 
void assign_internal_eqn_numbers (unsigned long &global_number, Vector< double * > &Dof_pt)
 
void describe_dofs (std::ostream &out, const std::string &current_string) const
 
void add_internal_value_pt_to_map (std::map< unsigned, double * > &map_of_value_pt)
 
virtual void assign_local_eqn_numbers (const bool &store_local_dof_pt)
 
virtual void complete_setup_of_dependencies ()
 
virtual void get_residuals (Vector< double > &residuals)
 
virtual void get_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
virtual void get_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &mass_matrix)
 
virtual void get_jacobian_and_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
 
virtual void get_dresiduals_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam)
 
virtual void get_djacobian_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam)
 
virtual void get_djacobian_and_dmass_matrix_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam)
 
virtual void get_hessian_vector_products (Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
 
virtual void get_inner_products (Vector< std::pair< unsigned, unsigned >> const &history_index, Vector< double > &inner_product)
 
virtual void get_inner_product_vectors (Vector< unsigned > const &history_index, Vector< Vector< double >> &inner_product_vector)
 
virtual void compute_norm (Vector< double > &norm)
 
virtual unsigned ndof_types () const
 
virtual void get_dof_numbers_for_unknowns (std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const
 
- Public Member Functions inherited from oomph::GeomObject
 GeomObject ()
 Default constructor. More...
 
 GeomObject (const unsigned &ndim)
 
 GeomObject (const unsigned &nlagrangian, const unsigned &ndim)
 
 GeomObject (const unsigned &nlagrangian, const unsigned &ndim, TimeStepper *time_stepper_pt)
 
 GeomObject (const GeomObject &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const GeomObject &)=delete
 Broken assignment operator. More...
 
virtual ~GeomObject ()
 (Empty) destructor More...
 
unsigned nlagrangian () const
 Access function to # of Lagrangian coordinates. More...
 
unsigned ndim () const
 Access function to # of Eulerian coordinates. More...
 
void set_nlagrangian_and_ndim (const unsigned &n_lagrangian, const unsigned &n_dim)
 Set # of Lagrangian and Eulerian coordinates. More...
 
TimeStepper *& time_stepper_pt ()
 
TimeSteppertime_stepper_pt () const
 
virtual void position (const double &t, const Vector< double > &zeta, Vector< double > &r) const
 
virtual void dposition (const Vector< double > &zeta, DenseMatrix< double > &drdzeta) const
 
virtual void d2position (const Vector< double > &zeta, RankThreeTensor< double > &ddrdzeta) const
 
virtual void d2position (const Vector< double > &zeta, Vector< double > &r, DenseMatrix< double > &drdzeta, RankThreeTensor< double > &ddrdzeta) const
 

Protected Member Functions

virtual int solid_p_local_eqn (const unsigned &i)=0
 
virtual void solid_pshape (const Vector< double > &s, Shape &psi) const =0
 Return the solid pressure shape functions. More...
 
void solid_pshape_at_knot (const unsigned &ipt, Shape &psi) const
 Return the stored solid shape functions at the knots. More...
 
- Protected Member Functions inherited from oomph::SolidFiniteElement
void fill_in_generic_jacobian_for_solid_ic (Vector< double > &residuals, DenseMatrix< double > &jacobian, const unsigned &flag)
 
void set_nnodal_lagrangian_type (const unsigned &nlagrangian_type)
 
virtual double local_to_lagrangian_mapping (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
double local_to_lagrangian_mapping (const DShape &dpsids, DenseMatrix< double > &inverse_jacobian) const
 
virtual double local_to_lagrangian_mapping_diagonal (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
virtual void assign_solid_local_eqn_numbers (const bool &store_local_dof)
 Assign local equation numbers for the solid equations in the element. More...
 
void describe_solid_local_dofs (std::ostream &out, const std::string &current_string) const
 Classifies dofs locally for solid specific aspects. More...
 
void fill_in_contribution_to_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
virtual void fill_in_jacobian_from_solid_position_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
void fill_in_jacobian_from_solid_position_by_fd (DenseMatrix< double > &jacobian)
 
virtual void update_before_solid_position_fd ()
 
virtual void reset_after_solid_position_fd ()
 
virtual void update_in_solid_position_fd (const unsigned &i)
 
virtual void reset_in_solid_position_fd (const unsigned &i)
 
- Protected Member Functions inherited from oomph::FiniteElement
virtual void assemble_local_to_eulerian_jacobian (const DShape &dpsids, DenseMatrix< double > &jacobian) const
 
virtual void assemble_local_to_eulerian_jacobian2 (const DShape &d2psids, DenseMatrix< double > &jacobian2) const
 
virtual void assemble_eulerian_base_vectors (const DShape &dpsids, DenseMatrix< double > &interpolated_G) const
 
template<unsigned DIM>
double invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
virtual double invert_jacobian_mapping (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
virtual double local_to_eulerian_mapping (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
double local_to_eulerian_mapping (const DShape &dpsids, DenseMatrix< double > &inverse_jacobian) const
 
virtual double local_to_eulerian_mapping_diagonal (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
virtual void dJ_eulerian_dnodal_coordinates (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<unsigned DIM>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
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
 
template<unsigned DIM>
void d_dshape_eulerian_dnodal_coordinates_templated_helper (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
 
virtual void transform_derivatives (const DenseMatrix< double > &inverse_jacobian, DShape &dbasis) const
 
void transform_derivatives_diagonal (const DenseMatrix< double > &inverse_jacobian, DShape &dbasis) const
 
virtual void transform_second_derivatives (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
template<unsigned DIM>
void transform_second_derivatives_template (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
template<unsigned DIM>
void transform_second_derivatives_diagonal (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
virtual void fill_in_jacobian_from_nodal_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
void fill_in_jacobian_from_nodal_by_fd (DenseMatrix< double > &jacobian)
 
virtual void update_before_nodal_fd ()
 
virtual void reset_after_nodal_fd ()
 
virtual void update_in_nodal_fd (const unsigned &i)
 
virtual void reset_in_nodal_fd (const unsigned &i)
 
template<>
double invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 Zero-d specialisation of function to calculate inverse of jacobian mapping. More...
 
template<>
double invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 One-d specialisation of function to calculate inverse of jacobian mapping. More...
 
template<>
double invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 Two-d specialisation of function to calculate inverse of jacobian mapping. More...
 
template<>
double invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
template<>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<>
void d_dshape_eulerian_dnodal_coordinates_templated_helper (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
 
template<>
void d_dshape_eulerian_dnodal_coordinates_templated_helper (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
 
template<>
void d_dshape_eulerian_dnodal_coordinates_templated_helper (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
 
template<>
void d_dshape_eulerian_dnodal_coordinates_templated_helper (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
 
template<>
void transform_second_derivatives_template (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
template<>
void transform_second_derivatives_template (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
template<>
void transform_second_derivatives_diagonal (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
template<>
void transform_second_derivatives_diagonal (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
- Protected Member Functions inherited from oomph::GeneralisedElement
unsigned add_internal_data (Data *const &data_pt, const bool &fd=true)
 
bool internal_data_fd (const unsigned &i) const
 
void exclude_internal_data_fd (const unsigned &i)
 
void include_internal_data_fd (const unsigned &i)
 
void clear_global_eqn_numbers ()
 
void add_global_eqn_numbers (std::deque< unsigned long > const &global_eqn_numbers, std::deque< double * > const &global_dof_pt)
 
virtual void assign_internal_and_external_local_eqn_numbers (const bool &store_local_dof_pt)
 
virtual void assign_additional_local_eqn_numbers ()
 
int internal_local_eqn (const unsigned &i, const unsigned &j) const
 
int external_local_eqn (const unsigned &i, const unsigned &j)
 
void fill_in_jacobian_from_internal_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
void fill_in_jacobian_from_internal_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
void fill_in_jacobian_from_external_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
void fill_in_jacobian_from_external_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
virtual void update_before_internal_fd ()
 
virtual void reset_after_internal_fd ()
 
virtual void update_in_internal_fd (const unsigned &i)
 
virtual void reset_in_internal_fd (const unsigned &i)
 
virtual void update_before_external_fd ()
 
virtual void reset_after_external_fd ()
 
virtual void update_in_external_fd (const unsigned &i)
 
virtual void reset_in_external_fd (const unsigned &i)
 
virtual void fill_in_contribution_to_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &mass_matrix)
 
virtual void fill_in_contribution_to_jacobian_and_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
 
virtual void fill_in_contribution_to_dresiduals_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam)
 
virtual void fill_in_contribution_to_djacobian_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam)
 
virtual void fill_in_contribution_to_djacobian_and_dmass_matrix_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam)
 
virtual void fill_in_contribution_to_hessian_vector_products (Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
 
virtual void fill_in_contribution_to_inner_products (Vector< std::pair< unsigned, unsigned >> const &history_index, Vector< double > &inner_product)
 
virtual void fill_in_contribution_to_inner_product_vectors (Vector< unsigned > const &history_index, Vector< Vector< double >> &inner_product_vector)
 

Private Attributes

ConstitutiveLawConstitutive_law_pt
 Pointer to constitutive law. More...
 
bool Incompressible
 Boolean to determine whether the solid is incompressible or not. More...
 

Additional Inherited Members

- Public Types inherited from oomph::SolidFiniteElement
typedef double(* MultiplierFctPt) (const Vector< double > &xi)
 
- Public Types inherited from oomph::FiniteElement
typedef void(* SteadyExactSolutionFctPt) (const Vector< double > &, Vector< double > &)
 
typedef void(* UnsteadyExactSolutionFctPt) (const double &, const Vector< double > &, Vector< double > &)
 
- Static Public Attributes inherited from oomph::FiniteElement
static double Tolerance_for_singular_jacobian = 1.0e-16
 Tolerance below which the jacobian is considered singular. More...
 
static bool Accept_negative_jacobian = false
 
static bool Suppress_output_while_checking_for_inverted_elements
 
- Static Public Attributes inherited from oomph::GeneralisedElement
static bool Suppress_warning_about_repeated_internal_data
 
static bool Suppress_warning_about_repeated_external_data = true
 
static double Default_fd_jacobian_step = 1.0e-8
 
- Protected Attributes inherited from oomph::SolidFiniteElement
MacroElementUndeformed_macro_elem_pt
 Pointer to the element's "undeformed" macro element (NULL by default) More...
 
SolidInitialConditionSolid_ic_pt
 Pointer to object that specifies the initial condition. More...
 
bool Solve_for_consistent_newmark_accel_flag
 
- Protected Attributes inherited from oomph::FiniteElement
MacroElementMacro_elem_pt
 Pointer to the element's macro element (NULL by default) More...
 
- Protected Attributes inherited from oomph::GeomObject
unsigned NLagrangian
 Number of Lagrangian (intrinsic) coordinates. More...
 
unsigned Ndim
 Number of Eulerian coordinates. More...
 
TimeStepperGeom_object_time_stepper_pt
 
- Static Protected Attributes inherited from oomph::FiniteElement
static const unsigned Default_Initial_Nvalue = 0
 Default value for the number of values at a node. More...
 
static const double Node_location_tolerance = 1.0e-14
 
static const unsigned N2deriv [] = {0, 1, 3, 6}
 
- Static Protected Attributes inherited from oomph::GeneralisedElement
static DenseMatrix< doubleDummy_matrix
 
static std::deque< double * > Dof_pt_deque
 

Detailed Description

A class for elements that solve the equations of solid mechanics, based on the principle of virtual displacements in axisymmetric coordinates in a formulation that allows for incompressibility or near incompressibility.

Constructor & Destructor Documentation

◆ AxisymmetricPVDEquationsWithPressure()

oomph::AxisymmetricPVDEquationsWithPressure::AxisymmetricPVDEquationsWithPressure ( )
inline

Constructor, by default the element is not incompressible.

684  {
685  }
bool Incompressible
Boolean to determine whether the solid is incompressible or not.
Definition: axisym_solid_elements.h:667
ConstitutiveLaw * Constitutive_law_pt
Pointer to constitutive law.
Definition: axisym_solid_elements.h:664

Member Function Documentation

◆ compute_physical_size()

double oomph::AxisymmetricPVDEquationsWithPressure::compute_physical_size ( ) const
inlinevirtual

Overload/implement the size function.

Reimplemented from oomph::FiniteElement.

1133  {
1134  unsigned n_node = nnode();
1135  unsigned n_position_type = 1;
1136 
1137  // Set up memory for the shape functions
1138  Shape psi(n_node, n_position_type);
1139  DShape dpsidxi(n_node, n_position_type, 2);
1140 
1141  // Set sum to zero
1142  double sum = 0.0;
1143  // Set the value of n_intpt
1144  unsigned n_intpt = integral_pt()->nweight();
1145 
1146  // Loop over the integration points
1147  // Loop in s1 direction*
1148  for (unsigned ipt = 0; ipt < n_intpt; ipt++)
1149  {
1150  // Get the integral weight
1151  double w = integral_pt()->weight(ipt);
1152  // Call the derivatives of the shape function wrt lagrangian coordinates
1153  double J = dshape_lagrangian_at_knot(ipt, psi, dpsidxi);
1154  // Premultiply the weights and the Jacobian
1155  double W = w * J;
1156 
1157  // Calculate the local Lagrangian coordinates, position components
1158  // and the derivatives of global position components
1159  // wrt lagrangian coordinates
1160  double interpolated_xi[2] = {0.0, 0.0};
1161  double interpolated_X[2] = {0.0, 0.0};
1162  double interpolated_dXdxi[2][2];
1163 
1164  // Initialise interpolated_dXdxi to zero
1165  for (unsigned i = 0; i < 2; i++)
1166  {
1167  for (unsigned j = 0; j < 2; j++)
1168  {
1169  interpolated_dXdxi[i][j] = 0.0;
1170  }
1171  }
1172 
1173  // Calculate displacements and derivatives
1174  for (unsigned l = 0; l < n_node; l++)
1175  {
1176  // Loop over positional dofs
1177  for (unsigned k = 0; k < n_position_type; k++)
1178  {
1179  // Loop over displacement components (deformed position)
1180  for (unsigned i = 0; i < 2; i++)
1181  {
1182  // Set the value of the lagrangian coordinate
1183  interpolated_xi[i] +=
1184  lagrangian_position_gen(l, k, i) * psi(l, k);
1185  // Set the value of the position component
1186  interpolated_X[i] += nodal_position_gen(l, k, i) * psi(l, k);
1187  // Loop over Lagrangian derivative directions
1188  for (unsigned j = 0; j < 2; j++)
1189  {
1190  // Calculate dX[i]/dxi_{j}
1191  interpolated_dXdxi[i][j] +=
1192  nodal_position_gen(l, k, i) * dpsidxi(l, k, j);
1193  }
1194  }
1195  }
1196  }
1197 
1198  // Now calculate the deformed metric tensor
1200  // r row
1201  G(0, 0) = interpolated_dXdxi[0][0] * interpolated_dXdxi[0][0] +
1202  interpolated_dXdxi[1][0] * interpolated_dXdxi[1][0];
1203  G(0, 1) = interpolated_dXdxi[0][0] *
1204  (interpolated_dXdxi[0][1] - interpolated_X[1]) +
1205  interpolated_dXdxi[1][0] *
1206  (interpolated_dXdxi[1][1] + interpolated_X[0]);
1207  G(0, 2) = 0.0;
1208  // theta row
1209  G(1, 0) = G(0, 1);
1210  G(1, 1) = (interpolated_dXdxi[0][1] - interpolated_X[1]) *
1211  (interpolated_dXdxi[0][1] - interpolated_X[1]) +
1212  (interpolated_dXdxi[1][1] + interpolated_X[0]) *
1213  (interpolated_dXdxi[1][1] + interpolated_X[0]);
1214  G(1, 2) = 0.0;
1215  // phi row
1216  G(2, 0) = 0.0;
1217  G(2, 1) = 0.0;
1218  G(2, 2) = (interpolated_X[0] * sin(interpolated_xi[1]) +
1219  interpolated_X[1] * cos(interpolated_xi[1])) *
1220  (interpolated_X[0] * sin(interpolated_xi[1]) +
1221  interpolated_X[1] * cos(interpolated_xi[1]));
1222 
1223  // Calculate the determinant of the metric tensor
1224  double detG = G(0, 0) * G(1, 1) * G(2, 2) - G(0, 1) * G(1, 0) * G(2, 2);
1225 
1226  // Add the appropriate weight to the integral, i.e. sqrt of metric
1227  // tensor
1228  sum += W * sqrt(detG);
1229  }
1230 
1231  // Return the volume
1232  return (2.0 * MathematicalConstants::Pi * sum);
1233  }
AnnoyingScalar cos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:136
AnnoyingScalar sin(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:137
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
int i
Definition: BiCGSTAB_step_by_step.cpp:9
JacobiRotation< float > G
Definition: Jacobi_makeGivens.cpp:2
JacobiRotation< float > J
Definition: Jacobi_makeJacobi.cpp:3
RowVector3d w
Definition: Matrix_resize_int.cpp:3
double nodal_position_gen(const unsigned &n, const unsigned &k, const unsigned &i) const
Definition: elements.h:2349
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
Definition: elements.h:1963
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.
double lagrangian_position_gen(const unsigned &n, const unsigned &k, const unsigned &i) const
Definition: elements.h:3912
virtual double interpolated_xi(const Vector< double > &s, const unsigned &i) const
Definition: elements.cc:7104
virtual double dshape_lagrangian_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsidxi) const
Definition: elements.cc:6737
char char char int int * k
Definition: level2_impl.h:374
const double Pi
50 digits from maple
Definition: oomph_utilities.h:157
@ W
Definition: quadtree.h:63
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References cos(), oomph::SolidFiniteElement::dshape_lagrangian_at_knot(), G, i, oomph::FiniteElement::integral_pt(), oomph::SolidFiniteElement::interpolated_xi(), J, j, k, oomph::SolidFiniteElement::lagrangian_position_gen(), oomph::FiniteElement::nnode(), oomph::FiniteElement::nodal_position_gen(), oomph::Integral::nweight(), oomph::MathematicalConstants::Pi, sin(), sqrt(), w, oomph::QuadTreeNames::W, and oomph::Integral::weight().

◆ constitutive_law_pt()

ConstitutiveLaw*& oomph::AxisymmetricPVDEquationsWithPressure::constitutive_law_pt ( )
inline

Return the constitutive law pointer.

689  {
690  return Constitutive_law_pt;
691  }

References Constitutive_law_pt.

◆ fill_in_contribution_to_jacobian()

void oomph::AxisymmetricPVDEquationsWithPressure::fill_in_contribution_to_jacobian ( Vector< double > &  residuals,
DenseMatrix< double > &  jacobian 
)
inlinevirtual

Return the residuals and the jacobian.

Reimplemented from oomph::GeneralisedElement.

782  {
783  // Call the generic routine with the flag set to 1
785  residuals, jacobian, 1);
786  // Call the finite difference routine for the displacements
788  }
void fill_in_generic_residual_contribution_axisym_pvd_with_pressure(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Definition: axisym_solid_elements.h:792
virtual void fill_in_jacobian_from_solid_position_by_fd(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: elements.cc:6985

References fill_in_generic_residual_contribution_axisym_pvd_with_pressure(), and oomph::SolidFiniteElement::fill_in_jacobian_from_solid_position_by_fd().

◆ fill_in_contribution_to_residuals()

void oomph::AxisymmetricPVDEquationsWithPressure::fill_in_contribution_to_residuals ( Vector< double > &  residuals)
inlinevirtual

Return the residuals.

Reimplemented from oomph::GeneralisedElement.

772  {
773  // Call the generic residuals function with flag set to 0
774  // using a dummy matrix argument
776  residuals, GeneralisedElement::Dummy_matrix, 0);
777  }
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227

References oomph::GeneralisedElement::Dummy_matrix, and fill_in_generic_residual_contribution_axisym_pvd_with_pressure().

◆ fill_in_generic_residual_contribution_axisym_pvd_with_pressure()

void oomph::AxisymmetricPVDEquationsWithPressure::fill_in_generic_residual_contribution_axisym_pvd_with_pressure ( Vector< double > &  residuals,
DenseMatrix< double > &  jacobian,
unsigned  flag 
)
inline

Return the residuals for the equations of solid mechanics formulated in the incompressible case!

794  {
795  // Set the number of Lagrangian coordinates
796  unsigned n_lagrangian = 2;
797  // Find out how many nodes there are
798  unsigned n_node = nnode();
799  // Find out how many positional dofs there are
800  unsigned n_position_type = nnodal_position_type();
801  // Find out how many pressure dofs there are
802  unsigned n_solid_pres = nsolid_pres();
803 
804  // Integers to store the local equation and unknown numbers
805  int local_eqn = 0, local_unknown = 0;
806 
807  // Set up memory for the shape functions
808  Shape psi(n_node, n_position_type);
809  DShape dpsidxi(n_node, n_position_type, n_lagrangian);
810 
811  // Set up memory for the pressure shape functions
812  Shape psisp(n_solid_pres);
813 
814  // Set the value of n_intpt
815  unsigned n_intpt = integral_pt()->nweight();
816 
817  // Loop over the integration points
818  for (unsigned ipt = 0; ipt < n_intpt; ipt++)
819  {
820  // Get the integral weight
821  double w = integral_pt()->weight(ipt);
822  // Call the derivatives of the shape functions
823  double J = dshape_lagrangian_at_knot(ipt, psi, dpsidxi);
824  // Call the pressure shape functions
825  solid_pshape_at_knot(ipt, psisp);
826 
827  // Premultiply the weights and the Jacobian
828  double W = w * J;
829 
830  // Calculate the local Lagrangian coordinates, position components
831  // and the derivatives of global position components
832  // wrt lagrangian coordinates
833  double interpolated_xi[2] = {0.0, 0.0};
834  double interpolated_X[2] = {0.0, 0.0};
835  double interpolated_dXdxi[2][2];
836  double interpolated_solid_p = 0.0;
837 
838  // Initialise interpolated_dXdxi to zero
839  for (unsigned i = 0; i < 2; i++)
840  {
841  for (unsigned j = 0; j < 2; j++)
842  {
843  interpolated_dXdxi[i][j] = 0.0;
844  }
845  }
846 
847  // Calculate displacements and derivatives
848  for (unsigned l = 0; l < n_node; l++)
849  {
850  // Loop over positional dofs
851  for (unsigned k = 0; k < n_position_type; k++)
852  {
853  // Loop over displacement components (deformed position)
854  for (unsigned i = 0; i < 2; i++)
855  {
856  // Set the value of the lagrangian coordinate
857  interpolated_xi[i] +=
858  lagrangian_position_gen(l, k, i) * psi(l, k);
859  // Set the value of the position component
860  interpolated_X[i] += nodal_position_gen(l, k, i) * psi(l, k);
861  // Loop over Lagrangian derivative directions
862  for (unsigned j = 0; j < 2; j++)
863  {
864  // Calculate dX[i]/dxi_{j}
865  interpolated_dXdxi[i][j] +=
866  nodal_position_gen(l, k, i) * dpsidxi(l, k, j);
867  }
868  }
869  }
870  }
871 
872  // Calculate the local internal pressure
873  for (unsigned l = 0; l < n_solid_pres; l++)
874  {
875  interpolated_solid_p += solid_p(l) * psisp[l];
876  }
877 
878  // We are now in a position to calculate the undeformed metric tensor
879  DenseMatrix<double> g(3);
880  // r row
881  g(0, 0) = 1.0;
882  g(0, 1) = 0.0;
883  g(0, 2) = 0.0;
884  // theta row
885  g(1, 0) = 0.0;
886  g(1, 1) = interpolated_xi[0] * interpolated_xi[0];
887  g(1, 2) = 0.0;
888  // phi row
889  g(2, 0) = 0.0;
890  g(2, 1) = 0.0;
891  g(2, 2) = interpolated_xi[0] * interpolated_xi[0] *
893 
894  // Find the determinant of the undeformed metric tensor
895  double detg = g(0, 0) * g(1, 1) * g(2, 2);
896 
897  // Now multiply the weight by the square-root of the determinant of the
898  // undeformed metric tensor r^2 sin(theta)
899  W *= sqrt(detg);
900 
901  // Now calculate the deformed metric tensor
903  // r row
904  G(0, 0) = interpolated_dXdxi[0][0] * interpolated_dXdxi[0][0] +
905  interpolated_dXdxi[1][0] * interpolated_dXdxi[1][0];
906  G(0, 1) = interpolated_dXdxi[0][0] *
907  (interpolated_dXdxi[0][1] - interpolated_X[1]) +
908  interpolated_dXdxi[1][0] *
909  (interpolated_dXdxi[1][1] + interpolated_X[0]);
910  G(0, 2) = 0.0;
911  // theta row
912  G(1, 0) = G(0, 1);
913  G(1, 1) = (interpolated_dXdxi[0][1] - interpolated_X[1]) *
914  (interpolated_dXdxi[0][1] - interpolated_X[1]) +
915  (interpolated_dXdxi[1][1] + interpolated_X[0]) *
916  (interpolated_dXdxi[1][1] + interpolated_X[0]);
917  G(1, 2) = 0.0;
918  // phi row
919  G(2, 0) = 0.0;
920  G(2, 1) = 0.0;
921  G(2, 2) = (interpolated_X[0] * sin(interpolated_xi[1]) +
922  interpolated_X[1] * cos(interpolated_xi[1])) *
923  (interpolated_X[0] * sin(interpolated_xi[1]) +
924  interpolated_X[1] * cos(interpolated_xi[1]));
925 
926 
927  // Now calculate the stress tensor from the constitutive law
928  DenseMatrix<double> sigma(3), Gup(3);
929  double detG = 0.0, pressure_stress = 0.0, kappa = 0.0;
930  // If it's incompressible call one form of the constitutive law
931  if (Incompressible)
932  {
933  get_stress(g, G, sigma, Gup, detG);
934  }
935  // Otherwise call another form
936  else
937  {
938  get_stress(g, G, sigma, Gup, pressure_stress, kappa);
939  }
940 
941 
942  //=====EQUATIONS OF ELASTICITY FROM PRINCIPLE OF VIRTUAL
943  // DISPLACEMENTS========
944 
945  // Loop over the test functions, nodes of the element
946  for (unsigned l = 0; l < n_node; l++)
947  {
948  // Loop of types of dofs
949  for (unsigned k = 0; k < n_position_type; k++)
950  {
951  // Radial displacemenet component
952  unsigned i = 0;
953  local_eqn = position_local_eqn(l, k, i);
954  /*IF it's not a boundary condition*/
955  if (local_eqn >= 0)
956  {
957  // Add the term for variations in radial position
958  residuals[local_eqn] +=
959  ((sigma(0, 1) + interpolated_solid_p * Gup(0, 1)) *
960  interpolated_dXdxi[1][0] +
961  (sigma(1, 1) + interpolated_solid_p * Gup(1, 1)) *
962  (interpolated_dXdxi[1][1] + interpolated_X[0]) +
963  (sigma(2, 2) + interpolated_solid_p * Gup(2, 2)) *
964  sin(interpolated_xi[1]) *
965  (interpolated_X[0] * sin(interpolated_xi[1]) +
966  interpolated_X[1] * cos(interpolated_xi[1]))) *
967  psi(l, k) * W;
968 
969  // Add the terms for the variations in dX_{r}/dxi_{j}
970  for (unsigned j = 0; j < 2; j++)
971  {
972  residuals[local_eqn] +=
973  ((sigma(j, 0) + interpolated_solid_p * Gup(j, 0)) *
974  interpolated_dXdxi[0][0] +
975  (sigma(j, 1) + interpolated_solid_p * Gup(j, 1)) *
976  (interpolated_dXdxi[0][1] - interpolated_X[1])) *
977  dpsidxi(l, k, j) * W;
978  }
979 
980  // Can add in the pressure jacobian terms
981  if (flag)
982  {
983  // Loop over the pressure nodes
984  for (unsigned l2 = 0; l2 < n_solid_pres; l2++)
985  {
986  local_unknown = solid_p_local_eqn(l2);
987  // If it's not a boundary condition
988  if (local_unknown >= 0)
989  {
990  jacobian(local_eqn, local_unknown) +=
991  (psisp[l2] * Gup(0, 1) * interpolated_dXdxi[1][0] +
992  psisp[l2] * Gup(1, 1) *
993  (interpolated_dXdxi[1][1] + interpolated_X[0]) +
994  psisp[l2] * Gup(2, 2) * sin(interpolated_xi[1]) *
995  (interpolated_X[0] * sin(interpolated_xi[1]) +
996  interpolated_X[1] * cos(interpolated_xi[1]))) *
997  psi(l, k) * W;
998 
999  // Add the terms for the variations in dX_{r}/dxi_{j}
1000  for (unsigned j = 0; j < 2; j++)
1001  {
1002  jacobian(local_eqn, local_unknown) +=
1003  (psisp[l2] * Gup(j, 0) * interpolated_dXdxi[0][0] +
1004  psisp[l2] * Gup(j, 1) *
1005  (interpolated_dXdxi[0][1] - interpolated_X[1])) *
1006  dpsidxi(l, k, j) * W;
1007  }
1008  } // End of if not boundary condition
1009  }
1010  } // End of if(flag)
1011  } // End of if Position_local_eqn
1012 
1013  // Theta displacement component
1014  i = 1;
1015  local_eqn = position_local_eqn(l, k, i);
1016  /*IF it's not a boundary condition*/
1017  if (local_eqn >= 0)
1018  {
1019  // Add the term for variations in azimuthal position
1020  residuals[local_eqn] +=
1021  (-(sigma(0, 1) + interpolated_solid_p * Gup(0, 1)) *
1022  interpolated_dXdxi[0][0] -
1023  (sigma(1, 1) + interpolated_solid_p * Gup(1, 1)) *
1024  (interpolated_dXdxi[0][1] - interpolated_X[1]) +
1025  (sigma(2, 2) + interpolated_solid_p * Gup(2, 2)) *
1026  cos(interpolated_xi[1]) *
1027  (interpolated_X[0] * sin(interpolated_xi[1]) +
1028  interpolated_X[1] * cos(interpolated_xi[1]))) *
1029  psi(l, k) * W;
1030 
1031  // Add the terms for the variations in dX_{theta}/dxi_{j}
1032  for (unsigned j = 0; j < 2; j++)
1033  {
1034  residuals[local_eqn] +=
1035  ((sigma(j, 0) + interpolated_solid_p * Gup(j, 0)) *
1036  interpolated_dXdxi[1][0] +
1037  (sigma(j, 1) + interpolated_solid_p * Gup(j, 1)) *
1038  (interpolated_dXdxi[1][1] + interpolated_X[0])) *
1039  dpsidxi(l, k, j) * W;
1040  }
1041 
1042  // Can add in the pressure jacobian terms
1043  if (flag)
1044  {
1045  // Loop over the pressure nodes
1046  for (unsigned l2 = 0; l2 < n_solid_pres; l2++)
1047  {
1048  local_unknown = solid_p_local_eqn(l2);
1049  // If it's not a boundary condition
1050  if (local_unknown >= 0)
1051  {
1052  // Add the term for variations in azimuthal position
1053  jacobian(local_eqn, local_unknown) +=
1054  (-psisp[l2] * Gup(0, 1) * interpolated_dXdxi[0][0] -
1055  psisp[l2] * Gup(1, 1) *
1056  (interpolated_dXdxi[0][1] - interpolated_X[1]) +
1057  psisp[l2] * Gup(2, 2) * cos(interpolated_xi[1]) *
1058  (interpolated_X[0] * sin(interpolated_xi[1]) +
1059  interpolated_X[1] * cos(interpolated_xi[1]))) *
1060  psi(l, k) * W;
1061 
1062  // Add the terms for the variations in dX_{theta}/dxi_{j}
1063  for (unsigned j = 0; j < 2; j++)
1064  {
1065  jacobian(local_eqn, local_unknown) +=
1066  (psisp[l2] * Gup(j, 0) * interpolated_dXdxi[1][0] +
1067  psisp[l2] * Gup(j, 1) *
1068  (interpolated_dXdxi[1][1] + interpolated_X[0])) *
1069  dpsidxi(l, k, j) * W;
1070  }
1071  }
1072  }
1073  } // End of if(flag)
1074  } // End of Position_local_eqn
1075  } // End of loop over type of dof
1076  } // End of loop over shape functions
1077 
1078 
1079  //======================CONSTRAINT EQUATIONS FOR THE PRESSURE===========
1080 
1081 
1082  // Now loop over the pressure degrees of freedom
1083  for (unsigned l = 0; l < n_solid_pres; l++)
1084  {
1085  local_eqn = solid_p_local_eqn(l);
1086  // If it's not a bondary condition
1087  if (local_eqn >= 0)
1088  {
1089  // For true incompressibility we need the ratio of determinants of
1090  // the metric tensors to be exactly 1.0
1091  if (Incompressible)
1092  {
1093  residuals[local_eqn] += (detG / detg - 1.0) * psisp[l] * W;
1094 
1095  // No Jacobian terms since the pressure does not feature
1096  // in the incompressibility constraint
1097  }
1098  else
1099  {
1100  // Otherwise the pressure must be that calculated by the
1101  // constitutive law
1102  residuals[local_eqn] +=
1103  (kappa * interpolated_solid_p - pressure_stress) * psisp[l] * W;
1104 
1105  // Add in the jacobian terms
1106  if (flag)
1107  {
1108  // Loop over the pressure nodes again
1109  for (unsigned l2 = 0; l2 < n_solid_pres; l2++)
1110  {
1111  local_unknown = solid_p_local_eqn(l2);
1112  // If not a boundary condition
1113  if (local_unknown >= 0)
1114  {
1115  jacobian(local_eqn, local_unknown) +=
1116  kappa * psisp[l2] * psisp[l] * W;
1117  }
1118  }
1119  } // End of jacobian terms
1120  } // End of else
1121 
1122  } // End of if not boundary condition
1123  }
1124 
1125  } // End of loop over integration points
1126  }
void solid_pshape_at_knot(const unsigned &ipt, Shape &psi) const
Return the stored solid shape functions at the knots.
Definition: axisym_solid_elements.cc:35
virtual unsigned nsolid_pres() const =0
Return the number of solid pressure degrees of freedom.
virtual int solid_p_local_eqn(const unsigned &i)=0
double interpolated_solid_p(const Vector< double > &s)
Return the interpolated_solid_pressure.
Definition: axisym_solid_elements.h:1236
virtual double solid_p(const unsigned &l)=0
Return the lth solid pressures.
void get_stress(const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma, DenseMatrix< double > &Gup, double &pressure_stress, double &kappa)
Definition: axisym_solid_elements.h:695
unsigned nnodal_position_type() const
Definition: elements.h:2463
int position_local_eqn(const unsigned &n, const unsigned &k, const unsigned &j) const
Definition: elements.h:4137
int sigma
Definition: calibrate.py:179

References cos(), oomph::SolidFiniteElement::dshape_lagrangian_at_knot(), G, get_stress(), i, Incompressible, oomph::FiniteElement::integral_pt(), interpolated_solid_p(), oomph::SolidFiniteElement::interpolated_xi(), J, j, k, oomph::SolidFiniteElement::lagrangian_position_gen(), oomph::FiniteElement::nnodal_position_type(), oomph::FiniteElement::nnode(), oomph::FiniteElement::nodal_position_gen(), nsolid_pres(), oomph::Integral::nweight(), oomph::SolidFiniteElement::position_local_eqn(), calibrate::sigma, sin(), solid_p(), solid_p_local_eqn(), solid_pshape_at_knot(), sqrt(), w, oomph::QuadTreeNames::W, and oomph::Integral::weight().

Referenced by fill_in_contribution_to_jacobian(), and fill_in_contribution_to_residuals().

◆ get_stress() [1/2]

void oomph::AxisymmetricPVDEquationsWithPressure::get_stress ( const DenseMatrix< double > &  g,
const DenseMatrix< double > &  G,
DenseMatrix< double > &  sigma,
DenseMatrix< double > &  Gup,
double detG 
)
inline

Return the stress tensor, as calculated from the constitutive law in the "true" incompresible formulation

727  {
728 #ifdef PARANOID
729  // If the pointer to the constitutive law hasn't been set, issue an error
730  if (Constitutive_law_pt == 0)
731  {
732  std::string error_message =
733  "Elements derived from AxisymmetricPVDEquationsWithPressure";
734  error_message += " must have a constitutive law :\n ";
735  error_message +=
736  "set one using the constitutive_law_pt() member function\n";
737 
738  throw OomphLibError(
740  }
741 #endif
743  g, G, sigma, Gup, detG);
744  }
virtual void calculate_second_piola_kirchhoff_stress(const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma)=0
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References oomph::ConstitutiveLaw::calculate_second_piola_kirchhoff_stress(), Constitutive_law_pt, G, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, calibrate::sigma, and oomph::Global_string_for_annotation::string().

◆ get_stress() [2/2]

void oomph::AxisymmetricPVDEquationsWithPressure::get_stress ( const DenseMatrix< double > &  g,
const DenseMatrix< double > &  G,
DenseMatrix< double > &  sigma,
DenseMatrix< double > &  Gup,
double pressure_stress,
double kappa 
)
inline

Return the stress tensor, as calculated from the constitutive law in the Near-incompresible formulation

701  {
702 #ifdef PARANOID
703  // If the pointer to the constitutive law hasn't been set, issue an error
704  if (Constitutive_law_pt == 0)
705  {
706  std::string error_message =
707  "Elements derived from AxisymmetricPVDEquationsWithPressure";
708  error_message += " must have a constitutive law :\n ";
709  error_message +=
710  "set one using the constitutive_law_pt() member function\n";
711 
712  throw OomphLibError(
714  }
715 #endif
717  g, G, sigma, Gup, pressure_stress, kappa);
718  }

References oomph::ConstitutiveLaw::calculate_second_piola_kirchhoff_stress(), Constitutive_law_pt, G, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, calibrate::sigma, and oomph::Global_string_for_annotation::string().

Referenced by fill_in_generic_residual_contribution_axisym_pvd_with_pressure().

◆ interpolated_solid_p()

double oomph::AxisymmetricPVDEquationsWithPressure::interpolated_solid_p ( const Vector< double > &  s)
inline

Return the interpolated_solid_pressure.

1237  {
1238  // Find number of nodes
1239  unsigned n_solid_pres = nsolid_pres();
1240  // Local shape function
1241  Shape psisp(n_solid_pres);
1242  // Find values of shape function
1243  solid_pshape(s, psisp);
1244 
1245  // Initialise value of solid_p
1246  double interpolated_solid_p = 0.0;
1247  // Loop over the local nodes and sum
1248  for (unsigned l = 0; l < n_solid_pres; l++)
1249  {
1250  interpolated_solid_p += solid_p(l) * psisp[l];
1251  }
1252 
1253  return (interpolated_solid_p);
1254  }
virtual void solid_pshape(const Vector< double > &s, Shape &psi) const =0
Return the solid pressure shape functions.
RealScalar s
Definition: level1_cplx_impl.h:130

References nsolid_pres(), s, solid_p(), and solid_pshape().

Referenced by fill_in_generic_residual_contribution_axisym_pvd_with_pressure(), and output().

◆ is_incompressible()

bool oomph::AxisymmetricPVDEquationsWithPressure::is_incompressible ( ) const
inline

Return whether the material is incompressible.

748  {
749  return Incompressible;
750  }

References Incompressible.

◆ nsolid_pres()

virtual unsigned oomph::AxisymmetricPVDEquationsWithPressure::nsolid_pres ( ) const
pure virtual

Return the number of solid pressure degrees of freedom.

Implemented in oomph::AxisymQPVDElementWithPressure.

Referenced by fill_in_generic_residual_contribution_axisym_pvd_with_pressure(), and interpolated_solid_p().

◆ output() [1/4]

void oomph::AxisymmetricPVDEquationsWithPressure::output ( FILE *  file_pt)
inlinevirtual

Overload the output function.

Reimplemented from oomph::FiniteElement.

Reimplemented in oomph::AxisymQPVDElementWithPressure.

1299  {
1300  FiniteElement::output(file_pt);
1301  }
virtual void output(std::ostream &outfile)
Definition: elements.h:3050

References oomph::FiniteElement::output().

◆ output() [2/4]

void oomph::AxisymmetricPVDEquationsWithPressure::output ( FILE *  file_pt,
const unsigned n_plot 
)
inlinevirtual

Output function.

Reimplemented from oomph::FiniteElement.

Reimplemented in oomph::AxisymQPVDElementWithPressure.

1306  {
1307  // Set the output Vector
1308  Vector<double> s(2);
1309 
1310  // Tecplot header info
1311  fprintf(file_pt, "ZONE I=%i, J=%i\n", n_plot, n_plot);
1312 
1313  // Loop over element nodes
1314  for (unsigned l2 = 0; l2 < n_plot; l2++)
1315  {
1316  s[1] = -1.0 + l2 * 2.0 / (n_plot - 1);
1317  for (unsigned l1 = 0; l1 < n_plot; l1++)
1318  {
1319  s[0] = -1.0 + l1 * 2.0 / (n_plot - 1);
1320 
1321  double x_r = interpolated_x(s, 0), x_theta = interpolated_x(s, 1);
1322  double theta = interpolated_xi(s, 1);
1323  // Output the x,y,u,v
1324  // First output x and y assuming phi = 0
1325  // outfile << x_r*sin(theta) + x_theta*cos(theta) << " " <<
1326  // x_r*cos(theta) - x_theta*sin(theta) << " ";
1327  fprintf(file_pt,
1328  "%g %g ",
1329  x_r * sin(theta) + x_theta * cos(theta),
1330  x_r * cos(theta) - x_theta * sin(theta));
1331 
1332  // Now output the true variables
1333  for (unsigned i = 0; i < 2; i++)
1334  fprintf(file_pt, "%g ", interpolated_x(s, i));
1335  for (unsigned i = 0; i < 2; i++)
1336  fprintf(file_pt, "%g ", interpolated_xi(s, i));
1337  fprintf(file_pt, "\n");
1338  }
1339  }
1340  fprintf(file_pt, "\n");
1341  }
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
Definition: elements.cc:3962
double theta
Definition: two_d_biharmonic.cc:236

References cos(), i, oomph::FiniteElement::interpolated_x(), oomph::SolidFiniteElement::interpolated_xi(), s, sin(), and BiharmonicTestFunctions2::theta.

◆ output() [3/4]

void oomph::AxisymmetricPVDEquationsWithPressure::output ( std::ostream &  outfile)
inlinevirtual

Overload the output function.

Reimplemented from oomph::FiniteElement.

Reimplemented in oomph::AxisymQPVDElementWithPressure.

1258  {
1259  FiniteElement::output(outfile);
1260  }

References oomph::FiniteElement::output().

Referenced by oomph::AxisymQPVDElementWithPressure::output().

◆ output() [4/4]

void oomph::AxisymmetricPVDEquationsWithPressure::output ( std::ostream &  outfile,
const unsigned n_plot 
)
inlinevirtual

Output function.

Reimplemented from oomph::FiniteElement.

Reimplemented in oomph::AxisymQPVDElementWithPressure.

1264  {
1265  // Set the output Vector
1266  Vector<double> s(2);
1267 
1268  // Tecplot header info
1269  outfile << "ZONE I=" << n_plot << ", J=" << n_plot << std::endl;
1270 
1271  // Loop over element nodes
1272  for (unsigned l2 = 0; l2 < n_plot; l2++)
1273  {
1274  s[1] = -1.0 + l2 * 2.0 / (n_plot - 1);
1275  for (unsigned l1 = 0; l1 < n_plot; l1++)
1276  {
1277  s[0] = -1.0 + l1 * 2.0 / (n_plot - 1);
1278 
1279  double x_r = interpolated_x(s, 0), x_theta = interpolated_x(s, 1);
1280  double theta = interpolated_xi(s, 1);
1281  // Output the x,y,u,v
1282  // First output x and y assuming phi = 0
1283  outfile << x_r * sin(theta) + x_theta * cos(theta) << " "
1284  << x_r * cos(theta) - x_theta * sin(theta) << " ";
1285  outfile << interpolated_solid_p(s) << " ";
1286  // Now output the true variables
1287  for (unsigned i = 0; i < 2; i++)
1288  outfile << interpolated_x(s, i) << " ";
1289  for (unsigned i = 0; i < 2; i++)
1290  outfile << interpolated_xi(s, i) << " ";
1291  outfile << std::endl;
1292  }
1293  }
1294  outfile << std::endl;
1295  }

References cos(), i, interpolated_solid_p(), oomph::FiniteElement::interpolated_x(), oomph::SolidFiniteElement::interpolated_xi(), s, sin(), and BiharmonicTestFunctions2::theta.

◆ set_compressible()

void oomph::AxisymmetricPVDEquationsWithPressure::set_compressible ( )
inline

Set the material to be compressible.

760  {
761  Incompressible = false;
762  }

References Incompressible.

◆ set_incompressible()

void oomph::AxisymmetricPVDEquationsWithPressure::set_incompressible ( )
inline

Set the material to be incompressible.

754  {
755  Incompressible = true;
756  }

References Incompressible.

◆ solid_p()

virtual double oomph::AxisymmetricPVDEquationsWithPressure::solid_p ( const unsigned l)
pure virtual

◆ solid_p_local_eqn()

virtual int oomph::AxisymmetricPVDEquationsWithPressure::solid_p_local_eqn ( const unsigned i)
protectedpure virtual

Access function that returns the local equation number for the n-th solid pressure value.

Implemented in oomph::AxisymQPVDElementWithPressure.

Referenced by fill_in_generic_residual_contribution_axisym_pvd_with_pressure().

◆ solid_pshape()

virtual void oomph::AxisymmetricPVDEquationsWithPressure::solid_pshape ( const Vector< double > &  s,
Shape psi 
) const
protectedpure virtual

Return the solid pressure shape functions.

Implemented in oomph::AxisymQPVDElementWithPressure.

Referenced by interpolated_solid_p(), and solid_pshape_at_knot().

◆ solid_pshape_at_knot()

void oomph::AxisymmetricPVDEquationsWithPressure::solid_pshape_at_knot ( const unsigned ipt,
Shape psi 
) const
protected

Return the stored solid shape functions at the knots.

Solid pressure shape function evaluated at integration point.

37  {
38  // Storage for local coordinates of the integration point
39  Vector<double> s(2);
40  // Set the local coordinates
41  for (unsigned i = 0; i < 2; i++)
42  {
43  s[i] = this->integral_pt()->knot(ipt, i);
44  }
45  // Get the shape function
46  solid_pshape(s, psi);
47  }
virtual double knot(const unsigned &i, const unsigned &j) const =0
Return local coordinate s[j] of i-th integration point.

References i, oomph::FiniteElement::integral_pt(), oomph::Integral::knot(), s, and solid_pshape().

Referenced by fill_in_generic_residual_contribution_axisym_pvd_with_pressure().

Member Data Documentation

◆ Constitutive_law_pt

ConstitutiveLaw* oomph::AxisymmetricPVDEquationsWithPressure::Constitutive_law_pt
private

Pointer to constitutive law.

Referenced by constitutive_law_pt(), and get_stress().

◆ Incompressible

bool oomph::AxisymmetricPVDEquationsWithPressure::Incompressible
private

Boolean to determine whether the solid is incompressible or not.

Referenced by fill_in_generic_residual_contribution_axisym_pvd_with_pressure(), is_incompressible(), set_compressible(), and set_incompressible().


The documentation for this class was generated from the following files: