oomph::AxisymmetricLinearElasticityEquations Class Reference

#include <axisym_linear_elasticity_elements.h>

+ Inheritance diagram for oomph::AxisymmetricLinearElasticityEquations:

Public Member Functions

 AxisymmetricLinearElasticityEquations ()
 Constructor. More...
 
unsigned required_nvalue (const unsigned &n) const
 Number of values required at node n. More...
 
void fill_in_contribution_to_residuals (Vector< double > &residuals)
 
void fill_in_contribution_to_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
void get_strain (const Vector< double > &s, DenseMatrix< double > &strain)
 Get strain (3x3 entries; r, z, phi) More...
 
void output_fct (std::ostream &outfile, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
 Output exact solution: r,z, u_r, u_z, u_theta. More...
 
void output_fct (std::ostream &outfile, const unsigned &nplot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
 
void output (std::ostream &outfile)
 Output: r,z, u_r, u_z, u_theta. More...
 
void output (std::ostream &outfile, const unsigned &n_plot)
 Output: r,z, u_r, u_z, u_theta. More...
 
void output (FILE *file_pt)
 C-style output: r,z, u_r, u_z, u_theta. More...
 
void output (FILE *file_pt, const unsigned &n_plot)
 Output: r,z, u_r, u_z, u_theta. More...
 
void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
 
void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
 
- Public Member Functions inherited from oomph::AxisymmetricLinearElasticityEquationsBase
virtual unsigned u_index_axisymmetric_linear_elasticity (const unsigned &i) const
 
double d2u_dt2_axisymmetric_linear_elasticity (const unsigned &n, const unsigned &i) const
 d^2u/dt^2 at local node n More...
 
double du_dt_axisymmetric_linear_elasticity (const unsigned &n, const unsigned &i) const
 du/dt at local node n More...
 
void interpolated_u_axisymmetric_linear_elasticity (const Vector< double > &s, Vector< double > &disp) const
 Compute vector of FE interpolated displacement u at local coordinate s. More...
 
double interpolated_u_axisymmetric_linear_elasticity (const Vector< double > &s, const unsigned &i) const
 
void interpolated_du_dt_axisymmetric_linear_elasticity (const Vector< double > &s, Vector< double > &du_dt) const
 Compute vector of FE interpolated velocity du/dt at local coordinate s. More...
 
void interpolated_d2u_dt2_axisymmetric_linear_elasticity (const Vector< double > &s, Vector< double > &d2u_dt2) const
 Compute vector of FE interpolated accel d2u/dt2 at local coordinate s. More...
 
 AxisymmetricLinearElasticityEquationsBase ()
 
double *& youngs_modulus_pt ()
 Return the pointer to Young's modulus. More...
 
double youngs_modulus () const
 Access function to Young's modulus. More...
 
doublenu () const
 Access function for Poisson's ratio. More...
 
double *& nu_pt ()
 Access function for pointer to Poisson's ratio. More...
 
double *& lambda_sq_pt ()
 Access function for pointer to timescale ratio (nondim density) More...
 
const doublelambda_sq () const
 Access function for timescale ratio (nondim density) More...
 
BodyForceFctPtbody_force_fct_pt ()
 Access function: Pointer to body force function. More...
 
BodyForceFctPt body_force_fct_pt () const
 Access function: Pointer to body force function (const version) More...
 
void body_force (const double &time, const Vector< double > &x, Vector< double > &b) const
 
unsigned ndof_types () const
 
void get_dof_numbers_for_unknowns (std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) 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)
 
virtual void set_macro_elem_pt (MacroElement *macro_elem_pt)
 
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_local_dofs (std::ostream &out, const std::string &current_string) const
 
virtual void describe_nodal_local_dofs (std::ostream &out, const std::string &current_string) const
 
virtual void assign_all_generic_local_eqn_numbers (const bool &store_local_dof_pt)
 
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 ()
 
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
 
virtual Nodeconstruct_node (const unsigned &n)
 
virtual Nodeconstruct_node (const unsigned &n, TimeStepper *const &time_stepper_pt)
 
virtual Nodeconstruct_boundary_node (const unsigned &n)
 
virtual Nodeconstruct_boundary_node (const unsigned &n, TimeStepper *const &time_stepper_pt)
 
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)
 
unsigned ngeom_data () const
 
Datageom_data_pt (const unsigned &j)
 
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)
 
virtual double zeta_nodal (const unsigned &n, const unsigned &k, const unsigned &i) const
 
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 void identify_geometric_data (std::set< Data * > &geometric_data_pt)
 
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 double compute_physical_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, 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, 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 void compute_norm (double &norm)
 
- 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 void fill_in_generic_contribution_to_residuals_axisymmetric_linear_elasticity (Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
 
- 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)
 
void fill_in_contribution_to_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
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)
 

Additional Inherited Members

- Public Types inherited from oomph::AxisymmetricLinearElasticityEquationsBase
typedef void(* BodyForceFctPt) (const double &time, const Vector< double > &x, Vector< double > &b)
 
- 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::AxisymmetricLinearElasticityEquationsBase
doubleYoungs_modulus_pt
 Pointer to the Young's modulus. More...
 
doubleNu_pt
 Pointer to Poisson's ratio. More...
 
doubleLambda_sq_pt
 Timescale ratio (non-dim. density) More...
 
BodyForceFctPt Body_force_fct_pt
 Pointer to body force function. More...
 
- 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::AxisymmetricLinearElasticityEquationsBase
static double Default_youngs_modulus_value
 
static double Default_lambda_sq_value
 Static default value for timescale ratio (1.0 for natural scaling) More...
 
- 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 axisymmetric (in cylindrical polars) equations of linear elasticity

Constructor & Destructor Documentation

◆ AxisymmetricLinearElasticityEquations()

oomph::AxisymmetricLinearElasticityEquations::AxisymmetricLinearElasticityEquations ( )
inline

Constructor.

437 {}

Member Function Documentation

◆ compute_error() [1/2]

void oomph::AxisymmetricLinearElasticityEquations::compute_error ( std::ostream &  outfile,
FiniteElement::SteadyExactSolutionFctPt  exact_soln_pt,
double error,
double norm 
)
virtual

Validate against exact solution. Solution is provided via function pointer. Plot at a given number of plot points and compute L2 error and L2 norm of displacement solution over element

Validate against exact solution 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.

Reimplemented from oomph::FiniteElement.

667  {
668  error = 0.0;
669  norm = 0.0;
670 
671  // Vector of local coordinates
672  Vector<double> s(2);
673 
674  // Vector for coordinates
675  Vector<double> x(2);
676 
677  // Set the value of n_intpt
678  unsigned n_intpt = this->integral_pt()->nweight();
679 
680  outfile << "ZONE" << std::endl;
681 
682  // Exact solution Vector (u_r, u_z, u_theta)
683  Vector<double> exact_soln(9);
684 
685  // Loop over the integration points
686  for (unsigned ipt = 0; ipt < n_intpt; ipt++)
687  {
688  // Assign values of s
689  for (unsigned i = 0; i < 2; i++)
690  {
691  s[i] = this->integral_pt()->knot(ipt, i);
692  }
693 
694  // Get the integral weight
695  double w = this->integral_pt()->weight(ipt);
696 
697  // Get jacobian of mapping
698  double J = this->J_eulerian(s);
699 
700  // Premultiply the weights and the Jacobian
701  double W = w * J;
702 
703  // Get x position as Vector
704  this->interpolated_x(s, x);
705 
706  // Get exact solution at this point
707  (*exact_soln_pt)(x, exact_soln);
708 
709  // Displacement error
710  for (unsigned i = 0; i < 3; i++)
711  {
712  norm += (exact_soln[i] * exact_soln[i]) * W;
713  error += ((exact_soln[i] -
715  (exact_soln[i] -
717  W;
718  }
719 
720 
721  // Output r,z coordinates
722  for (unsigned i = 0; i < 2; i++)
723  {
724  outfile << x[i] << " ";
725  }
726 
727  // Output ur_error, uz_error, uth_error
728  for (unsigned i = 0; i < 3; i++)
729  {
730  outfile << exact_soln[i] -
732  << " ";
733  }
734  outfile << std::endl;
735  }
736  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
JacobiRotation< float > J
Definition: Jacobi_makeJacobi.cpp:3
RowVector3d w
Definition: Matrix_resize_int.cpp:3
void interpolated_u_axisymmetric_linear_elasticity(const Vector< double > &s, Vector< double > &disp) const
Compute vector of FE interpolated displacement u at local coordinate s.
Definition: axisym_linear_elasticity_elements.h:131
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
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
Definition: elements.h:1963
virtual double J_eulerian(const Vector< double > &s) const
Definition: elements.cc:4103
virtual double knot(const unsigned &i, const unsigned &j) const =0
Return local coordinate s[j] of i-th integration point.
virtual unsigned nweight() const =0
Return the number of integration points of the scheme.
virtual double weight(const unsigned &i) const =0
Return weight of i-th integration point.
RealScalar s
Definition: level1_cplx_impl.h:130
void exact_soln(const double &time, const Vector< double > &x, Vector< double > &soln)
Definition: unstructured_two_d_curved.cc:301
int error
Definition: calibrate.py:297
@ W
Definition: quadtree.h:63
list x
Definition: plotDoE.py:28

References calibrate::error, ProblemParameters::exact_soln(), i, oomph::FiniteElement::integral_pt(), oomph::AxisymmetricLinearElasticityEquationsBase::interpolated_u_axisymmetric_linear_elasticity(), oomph::FiniteElement::interpolated_x(), J, oomph::FiniteElement::J_eulerian(), oomph::Integral::knot(), oomph::Integral::nweight(), s, w, oomph::QuadTreeNames::W, oomph::Integral::weight(), and plotDoE::x.

◆ compute_error() [2/2]

void oomph::AxisymmetricLinearElasticityEquations::compute_error ( std::ostream &  outfile,
FiniteElement::UnsteadyExactSolutionFctPt  exact_soln_pt,
const double time,
double error,
double norm 
)
virtual

Validate against exact solution. Time-dependent version

Validate against exact solution 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.

Reimplemented from oomph::FiniteElement.

750  {
751  error = 0.0;
752  norm = 0.0;
753 
754  // Vector of local coordinates
755  Vector<double> s(2);
756 
757  // Vector for coordinates
758  Vector<double> x(2);
759 
760  // Set the value of n_intpt
761  unsigned n_intpt = this->integral_pt()->nweight();
762 
763  outfile << "ZONE" << std::endl;
764 
765  // Exact solution Vector (u_r, u_z, u_theta)
766  Vector<double> exact_soln(9);
767 
768  // Loop over the integration points
769  for (unsigned ipt = 0; ipt < n_intpt; ipt++)
770  {
771  // Assign values of s
772  for (unsigned i = 0; i < 2; i++)
773  {
774  s[i] = this->integral_pt()->knot(ipt, i);
775  }
776 
777  // Get the integral weight
778  double w = this->integral_pt()->weight(ipt);
779 
780  // Get jacobian of mapping
781  double J = this->J_eulerian(s);
782 
783  // Premultiply the weights and the Jacobian
784  double W = w * J;
785 
786  // Get x position as Vector
787  this->interpolated_x(s, x);
788 
789  // Get exact solution at this point
790  (*exact_soln_pt)(time, x, exact_soln);
791 
792  // Displacement error
793  for (unsigned i = 0; i < 3; i++)
794  {
795  norm += (exact_soln[i] * exact_soln[i]) * W;
796  error += ((exact_soln[i] -
798  (exact_soln[i] -
800  W;
801  }
802 
803 
804  // Output r,z coordinates
805  for (unsigned i = 0; i < 2; i++)
806  {
807  outfile << x[i] << " ";
808  }
809 
810  // Output ur_error, uz_error, uth_error
811  for (unsigned i = 0; i < 3; i++)
812  {
813  outfile << exact_soln[i] -
815  << " ";
816  }
817  outfile << std::endl;
818  }
819  }

References calibrate::error, ProblemParameters::exact_soln(), i, oomph::FiniteElement::integral_pt(), oomph::AxisymmetricLinearElasticityEquationsBase::interpolated_u_axisymmetric_linear_elasticity(), oomph::FiniteElement::interpolated_x(), J, oomph::FiniteElement::J_eulerian(), oomph::Integral::knot(), oomph::Integral::nweight(), s, w, oomph::QuadTreeNames::W, oomph::Integral::weight(), and plotDoE::x.

◆ fill_in_contribution_to_jacobian()

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

The jacobian is calculated by finite differences by default, We need only to take finite differences w.r.t. positional variables For this element

Reimplemented from oomph::GeneralisedElement.

459  {
460  // Add the contribution to the residuals
461  this
462  ->fill_in_generic_contribution_to_residuals_axisymmetric_linear_elasticity(
463  residuals, jacobian, 1);
464  }

◆ fill_in_contribution_to_residuals()

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

Return the residuals for the equations (the discretised principle of virtual displacements)

Reimplemented from oomph::GeneralisedElement.

448  {
450  residuals, GeneralisedElement::Dummy_matrix, 0);
451  }
virtual void fill_in_generic_contribution_to_residuals_axisymmetric_linear_elasticity(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Definition: axisym_linear_elasticity_elements.cc:163
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227

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

◆ fill_in_generic_contribution_to_residuals_axisymmetric_linear_elasticity()

void oomph::AxisymmetricLinearElasticityEquations::fill_in_generic_contribution_to_residuals_axisymmetric_linear_elasticity ( Vector< double > &  residuals,
DenseMatrix< double > &  jacobian,
unsigned  flag 
)
protectedvirtual

Private helper function to compute residuals and (if requested via flag) also the Jacobian matrix.

Compute the residuals for the axisymmetric (in cyl. polars) linear elasticity equations in. Flag indicates if we want Jacobian too.

165  {
166  // Find out how many nodes there are
167  unsigned n_node = this->nnode();
168 
169  // Get continuous time from timestepper of first node
170  double time = node_pt(0)->time_stepper_pt()->time_pt()->time();
171 
172 #ifdef PARANOID
173  // Find out how many positional dofs there are
174  unsigned n_position_type = this->nnodal_position_type();
175 
176  if (n_position_type != 1)
177  {
178  throw OomphLibError("AxisymmetricLinearElasticity is not yet implemented "
179  "for more than one position type",
182  }
183 #endif
184 
185  // Find the indices at which the local displacements are stored
186  unsigned u_nodal_index[3];
187  for (unsigned i = 0; i < 3; i++)
188  {
189  u_nodal_index[i] = this->u_index_axisymmetric_linear_elasticity(i);
190  }
191 
192  // Get elastic parameters
193  double nu_local = this->nu();
194  double youngs_modulus_local = this->youngs_modulus();
195 
196  // Obtain Lame parameters from Young's modulus and Poisson's ratio
197  double lambda = youngs_modulus_local * nu_local / (1.0 + nu_local) /
198  (1.0 - 2.0 * nu_local);
199  double mu = youngs_modulus_local / 2.0 / (1.0 + nu_local);
200 
201 
202  // Lambda squared --- time scaling, NOT sqaure of Lame parameter lambda
203  const double lambda_sq = this->lambda_sq();
204 
205  // Set up memory for the shape functions
206  Shape psi(n_node);
207 
208  // Derivs only w.r.t. r [0] and z [1]
209  DShape dpsidx(n_node, 2);
210 
211  // Set the value of Nintpt -- the number of integration points
212  unsigned n_intpt = this->integral_pt()->nweight();
213 
214  // Set the vector to hold the local coordinates in the element
215  Vector<double> s(2);
216 
217  // Integers to store the local equation numbers
218  int local_eqn = 0, local_unknown = 0;
219 
220  // Loop over the integration points
221  for (unsigned ipt = 0; ipt < n_intpt; ipt++)
222  {
223  // Assign the values of s
224  for (unsigned i = 0; i < 2; ++i)
225  {
226  s[i] = this->integral_pt()->knot(ipt, i);
227  }
228 
229  // Get the integral weight
230  double w = this->integral_pt()->weight(ipt);
231 
232  // Call the derivatives of the shape functions (and get Jacobian)
233  double J = this->dshape_eulerian_at_knot(ipt, psi, dpsidx);
234 
235  // Storage for Eulerian coordinates (r,z; initialised to zero)
236  Vector<double> interpolated_x(2, 0.0);
237 
238  // Displacements u_r,u_z,u_theta
239  Vector<double> interpolated_u(3, 0.0);
240 
241  // Calculate interpolated values of the derivatives w.r.t.
242  // Eulerian coordinates
243  DenseMatrix<double> interpolated_dudx(3, 2, 0.0);
244 
245  Vector<double> d2u_dt2(3, 0.0);
246 
247  // Calculate displacements and derivatives
248  for (unsigned l = 0; l < n_node; l++)
249  {
250  // Calculate the coordinates
251  for (unsigned i = 0; i < 2; i++)
252  {
253  interpolated_x[i] += this->raw_nodal_position(l, i) * psi(l);
254  }
255  // Get the nodal displacements
256  for (unsigned i = 0; i < 3; i++)
257  {
258  const double u_value = this->raw_nodal_value(l, u_nodal_index[i]);
259 
260  interpolated_u[i] += u_value * psi(l);
261 
262  d2u_dt2[i] += d2u_dt2_axisymmetric_linear_elasticity(l, i) * psi(l);
263 
264  // Loop over derivative directions
265  for (unsigned j = 0; j < 2; j++)
266  {
267  interpolated_dudx(i, j) += u_value * dpsidx(l, j);
268  }
269  }
270  }
271 
272  // Get body force
273  Vector<double> b(3);
274  this->body_force(time, interpolated_x, b);
275 
276  // Premultiply the weights and the Jacobian
277  double W = w * J;
278 
279  //=====EQUATIONS OF AXISYMMETRIC LINEAR ELASTICITY ========
280 
281  // define shorthand notation for regularly-occurring terms
282  double r = interpolated_x[0];
283  double rsq = pow(r, 2);
284 
285  // r component of displacement
286  double ur = interpolated_u[0];
287 
288  // theta component of displacement
289  double uth = interpolated_u[2];
290 
291  // derivatives w.r.t. r and z:
292  double durdr = interpolated_dudx(0, 0);
293  double durdz = interpolated_dudx(0, 1);
294  double duzdr = interpolated_dudx(1, 0);
295  double duzdz = interpolated_dudx(1, 1);
296  double duthdr = interpolated_dudx(2, 0);
297  double duthdz = interpolated_dudx(2, 1);
298 
299  // storage for terms required for analytic Jacobian
300  double G_r, G_z, G_theta;
301 
302  // Loop over the test functions, nodes of the element
303  for (unsigned l = 0; l < n_node; l++)
304  {
305  // Loop over the displacement components
306  for (unsigned a = 0; a < 3; a++)
307  {
308  // Get the equation number
309  local_eqn = this->nodal_local_eqn(l, u_nodal_index[a]);
310 
311  /*IF it's not a boundary condition*/
312  if (local_eqn >= 0)
313  {
314  // Acceleration and body force
315  residuals[local_eqn] +=
316  (lambda_sq * d2u_dt2[a] - b[a]) * psi(l) * r * W;
317 
318  // Three components of the stress divergence term:
319  // a=0: r; a=1: z; a=2: theta
320 
321  // r-equation
322  if (a == 0)
323  {
324  residuals[local_eqn] += (mu * (2.0 * durdr * dpsidx(l, 0) +
325  +dpsidx(l, 1) * (durdz + duzdr) +
326  2.0 * psi(l) / pow(r, 2) * (ur)) +
327  lambda * (durdr + ur / r + duzdz) *
328  (dpsidx(l, 0) + psi(l) / r)) *
329  r * W;
330  }
331  // z-equation
332  else if (a == 1)
333  {
334  residuals[local_eqn] +=
335  (mu * (dpsidx(l, 0) * (durdz + duzdr) +
336  2.0 * duzdz * dpsidx(l, 1)) +
337  lambda * (durdr + ur / r + duzdz) * dpsidx(l, 1)) *
338  r * W;
339  }
340  // theta-equation
341  else if (a == 2)
342  {
343  residuals[local_eqn] +=
344  (mu * ((duthdr - uth / r) * (dpsidx(l, 0) - psi(l) / r) +
345  dpsidx(l, 1) * (duthdz))) *
346  r * W;
347  }
348  // error: a should be 0, 1 or 2
349  else
350  {
351  throw OomphLibError("a should equal 0, 1 or 2",
354  }
355 
356  // Jacobian entries
357  if (flag)
358  {
359  // Loop over the displacement basis functions again
360  for (unsigned l2 = 0; l2 < n_node; l2++)
361  {
362  // define terms used to obtain entries of current row in the
363  // Jacobian:
364 
365  // terms for rows of Jacobian matrix corresponding to r-equation
366  if (a == 0)
367  {
368  G_r =
369  (mu * (2.0 * dpsidx(l2, 0) * dpsidx(l, 0) +
370  2.0 / rsq * psi(l2) * psi(l) +
371  dpsidx(l2, 1) * dpsidx(l, 1)) +
372  lambda * (dpsidx(l2, 0) + psi(l2) / r) *
373  (dpsidx(l, 0) + psi(l) / r) +
374  lambda_sq * node_pt(l2)->time_stepper_pt()->weight(2, 0) *
375  psi(l2) * psi(l)) *
376  r * W;
377 
378  G_z = (mu * dpsidx(l2, 0) * dpsidx(l, 1) +
379  lambda * dpsidx(l2, 1) * (dpsidx(l, 0) + psi(l) / r)) *
380  r * W;
381 
382  G_theta = 0;
383  }
384 
385  // terms for rows of Jacobian matrix corresponding to z-equation
386  else if (a == 1)
387  {
388  G_r =
389  (mu * dpsidx(l2, 1) * dpsidx(l, 0) +
390  lambda * (dpsidx(l2, 0) + psi(l2) / r) * dpsidx(l, 1)) *
391  r * W;
392 
393  G_z =
394  (mu * (dpsidx(l2, 0) * dpsidx(l, 0) +
395  2.0 * dpsidx(l2, 1) * dpsidx(l, 1)) +
396  lambda * dpsidx(l2, 1) * dpsidx(l, 1) +
397  lambda_sq * node_pt(l2)->time_stepper_pt()->weight(2, 0) *
398  psi(l2) * psi(l)) *
399  r * W;
400 
401  G_theta = 0;
402  }
403 
404  // terms for rows of Jacobian matrix corresponding to
405  // theta-equation
406  else if (a == 2)
407  {
408  G_r = 0;
409 
410  G_z = 0;
411 
412  G_theta =
413  (mu * ((dpsidx(l2, 0) - psi(l2) / r) *
414  (dpsidx(l, 0) - psi(l) / r) +
415  dpsidx(l2, 1) * dpsidx(l, 1)) +
416  lambda_sq * node_pt(l2)->time_stepper_pt()->weight(2, 0) *
417  psi(l2) * psi(l)) *
418  r * W;
419  }
420 
421  // Loop over the displacement components
422  for (unsigned c = 0; c < 3; c++)
423  {
424  // Get local unknown
425  local_unknown = this->nodal_local_eqn(l2, u_nodal_index[c]);
426 
427  // If the local unknown is not pinned
428  if (local_unknown >= 0)
429  {
430  if (c == 0)
431  {
432  jacobian(local_eqn, local_unknown) += G_r;
433  }
434  else if (c == 1)
435  {
436  jacobian(local_eqn, local_unknown) += G_z;
437  }
438  else if (c == 2)
439  {
440  jacobian(local_eqn, local_unknown) += G_theta;
441  }
442  }
443  }
444  }
445  } // End of jacobian calculation
446 
447  } // End of if not boundary condition
448  } // End of loop over coordinate directions
449  } // End of loop over shape functions
450  } // End of loop over integration points
451  }
cout<< "The eigenvalues of A are:"<< endl<< ces.eigenvalues()<< endl;cout<< "The matrix of eigenvectors, V, is:"<< endl<< ces.eigenvectors()<< endl<< endl;complex< float > lambda
Definition: ComplexEigenSolver_compute.cpp:9
Scalar * b
Definition: benchVecAdd.cpp:17
double d2u_dt2_axisymmetric_linear_elasticity(const unsigned &n, const unsigned &i) const
d^2u/dt^2 at local node n
Definition: axisym_linear_elasticity_elements.h:67
double & nu() const
Access function for Poisson's ratio.
Definition: axisym_linear_elasticity_elements.h:278
const double & lambda_sq() const
Access function for timescale ratio (nondim density)
Definition: axisym_linear_elasticity_elements.h:306
virtual unsigned u_index_axisymmetric_linear_elasticity(const unsigned &i) const
Definition: axisym_linear_elasticity_elements.h:60
double youngs_modulus() const
Access function to Young's modulus.
Definition: axisym_linear_elasticity_elements.h:272
void body_force(const double &time, const Vector< double > &x, Vector< double > &b) const
Definition: axisym_linear_elasticity_elements.h:325
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
Definition: nodes.h:238
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
Definition: elements.h:2175
unsigned nnodal_position_type() const
Definition: elements.h:2463
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Definition: elements.h:1432
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
virtual double dshape_eulerian_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsidx) const
Definition: elements.cc:3325
double raw_nodal_value(const unsigned &n, const unsigned &i) const
Definition: elements.h:2576
double raw_nodal_position(const unsigned &n, const unsigned &i) const
Definition: elements.cc:1686
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
Definition: timesteppers.h:594
Time *const & time_pt() const
Access function for the pointer to time (const version)
Definition: timesteppers.h:572
double & time()
Return the current value of the continuous time.
Definition: timesteppers.h:123
const Scalar * a
Definition: level2_cplx_impl.h:32
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625
std::complex< double > mu
Definition: time_harmonic_fourier_decomposed_linear_elasticity/cylinder/cylinder.cc:52
r
Definition: UniformPSDSelfTest.py:20
int c
Definition: calibrate.py:100
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References a, b, oomph::AxisymmetricLinearElasticityEquationsBase::body_force(), calibrate::c, oomph::AxisymmetricLinearElasticityEquationsBase::d2u_dt2_axisymmetric_linear_elasticity(), oomph::FiniteElement::dshape_eulerian_at_knot(), i, oomph::FiniteElement::integral_pt(), oomph::FiniteElement::interpolated_x(), J, j, oomph::Integral::knot(), lambda, oomph::AxisymmetricLinearElasticityEquationsBase::lambda_sq(), Global_Parameters::mu, oomph::FiniteElement::nnodal_position_type(), oomph::FiniteElement::nnode(), oomph::FiniteElement::nodal_local_eqn(), oomph::FiniteElement::node_pt(), oomph::AxisymmetricLinearElasticityEquationsBase::nu(), oomph::Integral::nweight(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, Eigen::bfloat16_impl::pow(), UniformPSDSelfTest::r, oomph::FiniteElement::raw_nodal_position(), oomph::FiniteElement::raw_nodal_value(), s, oomph::Time::time(), oomph::TimeStepper::time_pt(), oomph::Data::time_stepper_pt(), oomph::AxisymmetricLinearElasticityEquationsBase::u_index_axisymmetric_linear_elasticity(), w, oomph::QuadTreeNames::W, oomph::Integral::weight(), oomph::TimeStepper::weight(), and oomph::AxisymmetricLinearElasticityEquationsBase::youngs_modulus().

Referenced by fill_in_contribution_to_residuals().

◆ get_strain()

void oomph::AxisymmetricLinearElasticityEquations::get_strain ( const Vector< double > &  s,
DenseMatrix< double > &  strain 
)

Get strain (3x3 entries; r, z, phi)

/////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////

57  {
58  // Find out how many nodes there are
59  unsigned n_node = this->nnode();
60 
61 
62 #ifdef PARANOID
63  // Find out how many positional dofs there are
64  unsigned n_position_type = this->nnodal_position_type();
65 
66  if (n_position_type != 1)
67  {
68  throw OomphLibError("AxisymmetricLinearElasticity is not yet implemented "
69  "for more than one position type",
72  }
73 #endif
74 
75  // Find the indices at which the local displacements are stored
76  unsigned u_nodal_index[3];
77  for (unsigned i = 0; i < 3; i++)
78  {
79  u_nodal_index[i] = this->u_index_axisymmetric_linear_elasticity(i);
80  }
81 
82  // Set up memory for the shape functions
83  Shape psi(n_node);
84 
85  // Derivs only w.r.t. r [0] and z [1]
86  DShape dpsidx(n_node, 2);
87 
88  // Storage for Eulerian coordinates (r,z; initialised to zero)
89  Vector<double> interpolated_x(2, 0.0);
90 
91  // Displacements u_r,u_z,u_theta
92  Vector<double> interpolated_u(3, 0.0);
93 
94  // Calculate interpolated values of the derivatives w.r.t.
95  // Eulerian coordinates
96  DenseMatrix<double> interpolated_dudx(3, 2, 0.0);
97 
98 
99  // Calculate displacements and derivatives
100  for (unsigned l = 0; l < n_node; l++)
101  {
102  // Calculate the coordinates
103  for (unsigned i = 0; i < 2; i++)
104  {
105  interpolated_x[i] += this->raw_nodal_position(l, i) * psi(l);
106  }
107 
108  // Get the nodal displacements
109  for (unsigned i = 0; i < 3; i++)
110  {
111  const double u_value = this->raw_nodal_value(l, u_nodal_index[i]);
112  interpolated_u[i] += u_value * psi(l);
113 
114  // Loop over derivative directions
115  for (unsigned j = 0; j < 2; j++)
116  {
117  interpolated_dudx(i, j) += u_value * dpsidx(l, j);
118  }
119  }
120  }
121 
122 
123  // define shorthand notation for regularly-occurring terms
124  double r = interpolated_x[0];
125 
126  // r component of displacement
127  double ur = interpolated_u[0];
128 
129  // theta component of displacement
130  double uth = interpolated_u[2];
131 
132  // derivatives w.r.t. r and z:
133  double durdr = interpolated_dudx(0, 0);
134  double durdz = interpolated_dudx(0, 1);
135  double duzdr = interpolated_dudx(1, 0);
136  double duzdz = interpolated_dudx(1, 1);
137  double duthdr = interpolated_dudx(2, 0);
138  double duthdz = interpolated_dudx(2, 1);
139 
140 
141  // e_rr
142  strain(0, 0) = durdr;
143  // e_rz
144  strain(0, 1) = 0.5 * (durdz + duzdr);
145  strain(1, 0) = 0.5 * (durdz + duzdr);
146  // e_rphi
147  strain(0, 2) = 0.5 * (duthdr - uth / r);
148  strain(2, 0) = 0.5 * (duthdr - uth / r);
149  // e_zz
150  strain(1, 1) = duzdz;
151  // e_zphi
152  strain(1, 2) = 0.5 * duthdz;
153  strain(2, 1) = 0.5 * duthdz;
154  // e_phiphi
155  strain(2, 2) = ur / r;
156  }

References i, oomph::FiniteElement::interpolated_x(), j, oomph::FiniteElement::nnodal_position_type(), oomph::FiniteElement::nnode(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, UniformPSDSelfTest::r, oomph::FiniteElement::raw_nodal_position(), oomph::FiniteElement::raw_nodal_value(), and oomph::AxisymmetricLinearElasticityEquationsBase::u_index_axisymmetric_linear_elasticity().

Referenced by oomph::TAxisymmetricLinearElasticityElement< NNODE_1D >::get_Z2_flux().

◆ output() [1/4]

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

C-style output: r,z, u_r, u_z, u_theta.

Reimplemented from oomph::FiniteElement.

Reimplemented in oomph::TAxisymmetricLinearElasticityElement< NNODE_1D >, and oomph::QAxisymmetricLinearElasticityElement< NNODE_1D >.

494  {
495  unsigned n_plot = 5;
496  output(file_pt, n_plot);
497  }
void output(std::ostream &outfile)
Output: r,z, u_r, u_z, u_theta.
Definition: axisym_linear_elasticity_elements.h:483

References output().

◆ output() [2/4]

void oomph::AxisymmetricLinearElasticityEquations::output ( FILE *  file_pt,
const unsigned n_plot 
)
virtual

Output: r,z, u_r, u_z, u_theta.

C-style output:r,z, u_r, u_z, u_theta.

Reimplemented from oomph::FiniteElement.

Reimplemented in oomph::TAxisymmetricLinearElasticityElement< NNODE_1D >, and oomph::QAxisymmetricLinearElasticityElement< NNODE_1D >.

622  {
623  // Vector of local coordinates
624  Vector<double> s(2);
625 
626  // Tecplot header info
627  fprintf(file_pt, "%s", this->tecplot_zone_string(nplot).c_str());
628 
629  // Loop over plot points
630  unsigned num_plot_points = this->nplot_points(nplot);
631  for (unsigned iplot = 0; iplot < num_plot_points; iplot++)
632  {
633  // Get local coordinates of plot point
634  this->get_s_plot(iplot, nplot, s);
635 
636  // Coordinates
637  for (unsigned i = 0; i < 2; i++)
638  {
639  fprintf(file_pt, "%g ", this->interpolated_x(s, i));
640  }
641 
642  // Displacement
643  for (unsigned i = 0; i < 3; i++)
644  {
645  fprintf(file_pt,
646  "%g ",
648  }
649  }
650  fprintf(file_pt, "\n");
651 
652  // Write tecplot footer (e.g. FE connectivity lists)
653  this->write_tecplot_zone_footer(file_pt, nplot);
654  }
virtual std::string tecplot_zone_string(const unsigned &nplot) const
Definition: elements.h:3161
virtual void get_s_plot(const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
Definition: elements.h:3148
virtual unsigned nplot_points(const unsigned &nplot) const
Definition: elements.h:3186
virtual void write_tecplot_zone_footer(std::ostream &outfile, const unsigned &nplot) const
Definition: elements.h:3174

References oomph::FiniteElement::get_s_plot(), i, oomph::AxisymmetricLinearElasticityEquationsBase::interpolated_u_axisymmetric_linear_elasticity(), oomph::FiniteElement::interpolated_x(), oomph::FiniteElement::nplot_points(), s, oomph::FiniteElement::tecplot_zone_string(), and oomph::FiniteElement::write_tecplot_zone_footer().

◆ output() [3/4]

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

◆ output() [4/4]

void oomph::AxisymmetricLinearElasticityEquations::output ( std::ostream &  outfile,
const unsigned n_plot 
)
virtual

Output: r,z, u_r, u_z, u_theta.

Reimplemented from oomph::FiniteElement.

Reimplemented in oomph::TAxisymmetricLinearElasticityElement< NNODE_1D >, and oomph::QAxisymmetricLinearElasticityElement< NNODE_1D >.

560  {
561  // Set output Vector
562  Vector<double> s(2);
563  Vector<double> x(2);
564  Vector<double> u(3);
565  Vector<double> du_dt(3);
566  Vector<double> d2u_dt2(3);
567 
568 
569  // Tecplot header info
570  outfile << this->tecplot_zone_string(nplot);
571 
572  // Loop over plot points
573  unsigned num_plot_points = this->nplot_points(nplot);
574  for (unsigned iplot = 0; iplot < num_plot_points; iplot++)
575  {
576  // Get local coordinates of plot point
577  this->get_s_plot(iplot, nplot, s);
578 
579  // Get Eulerian coordinates and displacements
580  this->interpolated_x(s, x);
584 
585  // Output the r,z,..
586  for (unsigned i = 0; i < 2; i++)
587  {
588  outfile << x[i] << " ";
589  }
590 
591  // Output displacement
592  for (unsigned i = 0; i < 3; i++)
593  {
594  outfile << u[i] << " ";
595  }
596 
597  // Output veloc
598  for (unsigned i = 0; i < 3; i++)
599  {
600  outfile << du_dt[i] << " ";
601  }
602 
603  // Output accel
604  for (unsigned i = 0; i < 3; i++)
605  {
606  outfile << d2u_dt2[i] << " ";
607  }
608 
609  outfile << std::endl;
610  }
611 
612  // Write tecplot footer (e.g. FE connectivity lists)
613  this->write_tecplot_zone_footer(outfile, nplot);
614  }
void interpolated_d2u_dt2_axisymmetric_linear_elasticity(const Vector< double > &s, Vector< double > &d2u_dt2) const
Compute vector of FE interpolated accel d2u/dt2 at local coordinate s.
Definition: axisym_linear_elasticity_elements.h:221
void interpolated_du_dt_axisymmetric_linear_elasticity(const Vector< double > &s, Vector< double > &du_dt) const
Compute vector of FE interpolated velocity du/dt at local coordinate s.
Definition: axisym_linear_elasticity_elements.h:194

References oomph::FiniteElement::get_s_plot(), i, oomph::AxisymmetricLinearElasticityEquationsBase::interpolated_d2u_dt2_axisymmetric_linear_elasticity(), oomph::AxisymmetricLinearElasticityEquationsBase::interpolated_du_dt_axisymmetric_linear_elasticity(), oomph::AxisymmetricLinearElasticityEquationsBase::interpolated_u_axisymmetric_linear_elasticity(), oomph::FiniteElement::interpolated_x(), oomph::FiniteElement::nplot_points(), s, oomph::FiniteElement::tecplot_zone_string(), oomph::FiniteElement::write_tecplot_zone_footer(), and plotDoE::x.

◆ output_fct() [1/2]

void oomph::AxisymmetricLinearElasticityEquations::output_fct ( std::ostream &  outfile,
const unsigned nplot,
const double time,
FiniteElement::UnsteadyExactSolutionFctPt  exact_soln_pt 
)
virtual

Output exact solution: r,z, u_r, u_z, u_theta Time dependent version

Output exact solution r,z, u_r, u_z, u_theta Time dependent version

Reimplemented from oomph::FiniteElement.

512  {
513  // Vector of local coordinates
514  Vector<double> s(2);
515 
516  // Vector for coordintes
517  Vector<double> x(2);
518 
519  // Tecplot header info
520  outfile << this->tecplot_zone_string(nplot);
521 
522  // Exact solution Vector
523  Vector<double> exact_soln(9);
524 
525  // Loop over plot points
526  unsigned num_plot_points = this->nplot_points(nplot);
527  for (unsigned iplot = 0; iplot < num_plot_points; iplot++)
528  {
529  // Get local coordinates of plot point
530  this->get_s_plot(iplot, nplot, s);
531 
532  // Get x position as Vector
533  this->interpolated_x(s, x);
534 
535  // Get exact solution at this point
536  (*exact_soln_pt)(time, x, exact_soln);
537 
538  // Output r,z,...,u_exact,...
539  for (unsigned i = 0; i < 2; i++)
540  {
541  outfile << x[i] << " ";
542  }
543 
544  for (unsigned i = 0; i < 9; i++)
545  {
546  outfile << exact_soln[i] << " ";
547  }
548  outfile << std::endl;
549  }
550 
551  // Write tecplot footer (e.g. FE connectivity lists)
552  this->write_tecplot_zone_footer(outfile, nplot);
553  }

References ProblemParameters::exact_soln(), oomph::FiniteElement::get_s_plot(), i, oomph::FiniteElement::interpolated_x(), oomph::FiniteElement::nplot_points(), s, oomph::FiniteElement::tecplot_zone_string(), oomph::FiniteElement::write_tecplot_zone_footer(), and plotDoE::x.

◆ output_fct() [2/2]

void oomph::AxisymmetricLinearElasticityEquations::output_fct ( std::ostream &  outfile,
const unsigned nplot,
FiniteElement::SteadyExactSolutionFctPt  exact_soln_pt 
)
virtual

Output exact solution: r,z, u_r, u_z, u_theta.

Output exact solution r,z, u_r, u_z, u_theta.

Reimplemented from oomph::FiniteElement.

460  {
461  // Vector of local coordinates
462  Vector<double> s(2);
463 
464  // Vector for coordintes
465  Vector<double> x(2);
466 
467  // Tecplot header info
468  outfile << this->tecplot_zone_string(nplot);
469 
470  // Exact solution Vector
471  Vector<double> exact_soln(9);
472 
473  // Loop over plot points
474  unsigned num_plot_points = this->nplot_points(nplot);
475  for (unsigned iplot = 0; iplot < num_plot_points; iplot++)
476  {
477  // Get local coordinates of plot point
478  this->get_s_plot(iplot, nplot, s);
479 
480  // Get x position as Vector
481  this->interpolated_x(s, x);
482 
483  // Get exact solution at this point
484  (*exact_soln_pt)(x, exact_soln);
485 
486  // Output r,z,...,u_exact,...
487  for (unsigned i = 0; i < 2; i++)
488  {
489  outfile << x[i] << " ";
490  }
491 
492  for (unsigned i = 0; i < 3; i++)
493  {
494  outfile << exact_soln[i] << " ";
495  }
496  outfile << std::endl;
497  }
498 
499  // Write tecplot footer (e.g. FE connectivity lists)
500  this->write_tecplot_zone_footer(outfile, nplot);
501  }

References ProblemParameters::exact_soln(), oomph::FiniteElement::get_s_plot(), i, oomph::FiniteElement::interpolated_x(), oomph::FiniteElement::nplot_points(), s, oomph::FiniteElement::tecplot_zone_string(), oomph::FiniteElement::write_tecplot_zone_footer(), and plotDoE::x.

◆ required_nvalue()

unsigned oomph::AxisymmetricLinearElasticityEquations::required_nvalue ( const unsigned n) const
inlinevirtual

Number of values required at node n.

Reimplemented from oomph::FiniteElement.

441  {
442  return 3;
443  }

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