oomph::PVDEquationsBase< DIM > Class Template Referenceabstract

#include <solid_elements.h>

+ Inheritance diagram for oomph::PVDEquationsBase< DIM >:

Public Types

typedef void(* IsotropicGrowthFctPt) (const Vector< double > &xi, double &gamma)
 
typedef double(* PrestressFctPt) (const unsigned &i, const unsigned &j, const Vector< double > &xi)
 
typedef void(* BodyForceFctPt) (const double &t, const Vector< double > &xi, Vector< double > &b)
 
- 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 > &)
 

Public Member Functions

 PVDEquationsBase ()
 
ConstitutiveLaw *& constitutive_law_pt ()
 Return the constitutive law pointer. More...
 
const doublelambda_sq () const
 Access function for timescale ratio (nondim density) More...
 
double *& lambda_sq_pt ()
 Access function for pointer to timescale ratio (nondim density) More...
 
IsotropicGrowthFctPtisotropic_growth_fct_pt ()
 Access function: Pointer to isotropic growth function. More...
 
PrestressFctPtprestress_fct_pt ()
 Access function: Pointer to pre-stress function. More...
 
IsotropicGrowthFctPt isotropic_growth_fct_pt () const
 Access function: Pointer to isotropic growth function (const version) 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 enable_inertia ()
 Switch on solid inertia. More...
 
void disable_inertia ()
 Switch off solid inertia. More...
 
bool is_inertia_enabled () const
 Access function to flag that switches inertia on/off (const version) More...
 
virtual unsigned npres_solid () const
 
virtual int solid_p_local_eqn (const unsigned &i) const
 
virtual int solid_p_nodal_index () const
 
virtual void unpin_elemental_solid_pressure_dofs ()=0
 Unpin all solid pressure dofs in the element. More...
 
virtual void pin_elemental_redundant_nodal_solid_pressures ()
 Pin the element's redundant solid pressures (needed for refinement) More...
 
virtual void get_stress (const Vector< double > &s, DenseMatrix< double > &sigma)=0
 
void get_strain (const Vector< double > &s, DenseMatrix< double > &strain) const
 Return the strain tensor. More...
 
void get_energy (double &pot_en, double &kin_en)
 Get potential (strain) and kinetic energy. More...
 
void get_deformed_covariant_basis_vectors (const Vector< double > &s, DenseMatrix< double > &def_covariant_basis)
 
void get_principal_stress (const Vector< double > &s, DenseMatrix< double > &principal_stress_vector, Vector< double > &principal_stress)
 
virtual void get_isotropic_growth (const unsigned &ipt, const Vector< double > &s, const Vector< double > &xi, double &gamma) const
 
void body_force (const Vector< double > &xi, Vector< double > &b) const
 
unsigned ndof_types () const
 returns the number of DOF types associated with this element. More...
 
void get_dof_numbers_for_unknowns (std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const
 
void enable_evaluate_jacobian_by_fd ()
 Set Jacobian to be evaluated by FD? Else: Analytically. More...
 
void disable_evaluate_jacobian_by_fd ()
 Set Jacobian to be evaluated analytically Else: by FD. More...
 
bool is_jacobian_evaluated_by_fd () const
 Return the flag indicating whether the jacobian is evaluated by fd. More...
 
double prestress (const unsigned &i, const unsigned &j, const Vector< double > xi)
 
- 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 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 (std::ostream &outfile)
 
virtual void output (std::ostream &outfile, const unsigned &n_plot)
 
virtual void output (const unsigned &t, std::ostream &outfile, const unsigned &n_plot) const
 
virtual void output (FILE *file_pt)
 
virtual void output (FILE *file_pt, const unsigned &n_plot)
 
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)
 
- 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
 

Static Public Member Functions

static void pin_redundant_nodal_solid_pressures (const Vector< GeneralisedElement * > &element_pt)
 
static void unpin_all_solid_pressure_dofs (const Vector< GeneralisedElement * > &element_pt)
 Unpin all pressure dofs in elements listed in vector. More...
 

Protected Attributes

IsotropicGrowthFctPt Isotropic_growth_fct_pt
 Pointer to isotropic growth function. More...
 
PrestressFctPt Prestress_fct_pt
 Pointer to prestress function. More...
 
ConstitutiveLawConstitutive_law_pt
 Pointer to the constitutive law. More...
 
doubleLambda_sq_pt
 Timescale ratio (non-dim. density) More...
 
bool Unsteady
 Flag that switches inertia on/off. More...
 
BodyForceFctPt Body_force_fct_pt
 Pointer to body force function. More...
 
bool Evaluate_jacobian_by_fd
 Use FD to evaluate Jacobian. More...
 
- 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

static double Default_lambda_sq_value = 1.0
 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
 

Static Private Attributes

static int Solid_pressure_not_stored_at_node = -100
 

Additional Inherited Members

- 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 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)
 
virtual void fill_in_contribution_to_residuals (Vector< double > &residuals)
 
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)
 

Detailed Description

template<unsigned DIM>
class oomph::PVDEquationsBase< DIM >

A base class for elements that solve the equations of solid mechanics, based on the principle of virtual displacements in Cartesian coordinates. Combines a few generic functions that are shared by PVDEquations and PVDEquationsWithPressure.

Member Typedef Documentation

◆ BodyForceFctPt

template<unsigned DIM>
typedef void(* oomph::PVDEquationsBase< DIM >::BodyForceFctPt) (const double &t, const Vector< double > &xi, Vector< double > &b)

Function pointer to function that specifies the body force as a function of the Lagrangian coordinates and time FCT(t,xi,b) – xi and b are Vectors!

◆ IsotropicGrowthFctPt

template<unsigned DIM>
typedef void(* oomph::PVDEquationsBase< DIM >::IsotropicGrowthFctPt) (const Vector< double > &xi, double &gamma)

Function pointer to function that specifies the isotropic growth as a function of the Lagrangian coordinates FCT(xi,gamma(xi)) – xi is a Vector!

◆ PrestressFctPt

template<unsigned DIM>
typedef double(* oomph::PVDEquationsBase< DIM >::PrestressFctPt) (const unsigned &i, const unsigned &j, const Vector< double > &xi)

Function pointer to function that specifies the pre-stress sigma_0(i,j) as a function of the Lagrangian coordinates FCT(i,j,xi) – xi is a Vector!

Constructor & Destructor Documentation

◆ PVDEquationsBase()

template<unsigned DIM>
oomph::PVDEquationsBase< DIM >::PVDEquationsBase ( )
inline

Constructor: Set null pointers for constitutive law and for isotropic growth function. Set physical parameter values to default values, enable inertia and set body force to zero. Default evaluation of Jacobian: analytically rather than by FD.

94  Unsteady(true),
97  {
98  }
bool Unsteady
Flag that switches inertia on/off.
Definition: solid_elements.h:421
static double Default_lambda_sq_value
Static default value for timescale ratio (1.0 – for natural scaling)
Definition: solid_elements.h:427
BodyForceFctPt Body_force_fct_pt
Pointer to body force function.
Definition: solid_elements.h:424
ConstitutiveLaw * Constitutive_law_pt
Pointer to the constitutive law.
Definition: solid_elements.h:415
IsotropicGrowthFctPt Isotropic_growth_fct_pt
Pointer to isotropic growth function.
Definition: solid_elements.h:409
PrestressFctPt Prestress_fct_pt
Pointer to prestress function.
Definition: solid_elements.h:412
bool Evaluate_jacobian_by_fd
Use FD to evaluate Jacobian.
Definition: solid_elements.h:430
double * Lambda_sq_pt
Timescale ratio (non-dim. density)
Definition: solid_elements.h:418

Member Function Documentation

◆ body_force()

template<unsigned DIM>
void oomph::PVDEquationsBase< DIM >::body_force ( const Vector< double > &  xi,
Vector< double > &  b 
) const
inline

Evaluate body force at Lagrangian coordinate xi at present time (returns zero vector if no body force function pointer has been set)

288  {
289  // If no function has been set, return zero vector
290  if (Body_force_fct_pt == 0)
291  {
292  // Get spatial dimension of element
293  unsigned n = dim();
294  for (unsigned i = 0; i < n; i++)
295  {
296  b[i] = 0.0;
297  }
298  }
299  else
300  {
301  // Get time from timestepper of first node (note that this must
302  // work -- body force only makes sense for elements that can be
303  // deformed and given that the deformation of solid finite elements
304  // is controlled by their nodes, nodes must exist!)
305  double time = node_pt(0)->time_stepper_pt()->time_pt()->time();
306 
307  // Now evaluate the body force
308  (*Body_force_fct_pt)(time, xi, b);
309  }
310  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Scalar * b
Definition: benchVecAdd.cpp:17
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 dim() const
Definition: elements.h:2611
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

References b, oomph::PVDEquationsBase< DIM >::Body_force_fct_pt, oomph::FiniteElement::dim(), i, n, oomph::FiniteElement::node_pt(), oomph::Time::time(), oomph::TimeStepper::time_pt(), and oomph::Data::time_stepper_pt().

Referenced by oomph::RefineableQDPVDElement< DIM, NNODE_1D >::fill_in_generic_contribution_to_residuals_pvd().

◆ body_force_fct_pt() [1/2]

template<unsigned DIM>
BodyForceFctPt& oomph::PVDEquationsBase< DIM >::body_force_fct_pt ( )
inline

◆ body_force_fct_pt() [2/2]

template<unsigned DIM>
BodyForceFctPt oomph::PVDEquationsBase< DIM >::body_force_fct_pt ( ) const
inline

Access function: Pointer to body force function (const version)

147  {
148  return Body_force_fct_pt;
149  }

References oomph::PVDEquationsBase< DIM >::Body_force_fct_pt.

◆ constitutive_law_pt()

template<unsigned DIM>
ConstitutiveLaw*& oomph::PVDEquationsBase< DIM >::constitutive_law_pt ( )
inline

◆ disable_evaluate_jacobian_by_fd()

template<unsigned DIM>
void oomph::PVDEquationsBase< DIM >::disable_evaluate_jacobian_by_fd ( )
inline

Set Jacobian to be evaluated analytically Else: by FD.

381  {
382  Evaluate_jacobian_by_fd = false;
383  }

References oomph::PVDEquationsBase< DIM >::Evaluate_jacobian_by_fd.

◆ disable_inertia()

template<unsigned DIM>
void oomph::PVDEquationsBase< DIM >::disable_inertia ( )
inline

Switch off solid inertia.

159  {
160  Unsteady = false;
161  }

References oomph::PVDEquationsBase< DIM >::Unsteady.

◆ enable_evaluate_jacobian_by_fd()

template<unsigned DIM>
void oomph::PVDEquationsBase< DIM >::enable_evaluate_jacobian_by_fd ( )
inline

Set Jacobian to be evaluated by FD? Else: Analytically.

375  {
377  }

References oomph::PVDEquationsBase< DIM >::Evaluate_jacobian_by_fd.

◆ enable_inertia()

template<unsigned DIM>
void oomph::PVDEquationsBase< DIM >::enable_inertia ( )
inline

Switch on solid inertia.

153  {
154  Unsteady = true;
155  }

References oomph::PVDEquationsBase< DIM >::Unsteady.

◆ get_deformed_covariant_basis_vectors()

template<unsigned DIM>
void oomph::PVDEquationsBase< DIM >::get_deformed_covariant_basis_vectors ( const Vector< double > &  s,
DenseMatrix< double > &  def_covariant_basis 
)

Return the deformed covariant basis vectors at specified local coordinate: def_covariant_basis(i,j) is the j-th component of the i-th basis vector.

1199  {
1200  // Find out how many nodes there are
1201  unsigned n_node = nnode();
1202 
1203  // Find out how many positional dofs there are
1204  unsigned n_position_type = this->nnodal_position_type();
1205 
1206  // Set up memory for the shape functions
1207  Shape psi(n_node, n_position_type);
1208  DShape dpsidxi(n_node, n_position_type, DIM);
1209 
1210 
1211  // Call the derivatives of the shape functions (ignore Jacobian)
1212  (void)dshape_lagrangian(s, psi, dpsidxi);
1213 
1214 
1215  // Initialise to zero
1216  for (unsigned i = 0; i < DIM; i++)
1217  {
1218  for (unsigned j = 0; j < DIM; j++)
1219  {
1220  def_covariant_basis(i, j) = 0.0;
1221  }
1222  }
1223 
1224  // Calculate displacements and derivatives
1225  for (unsigned l = 0; l < n_node; l++)
1226  {
1227  // Loop over positional dofs
1228  for (unsigned k = 0; k < n_position_type; k++)
1229  {
1230  // Loop over displacement components (deformed position)
1231  for (unsigned i = 0; i < DIM; i++)
1232  {
1233  // Loop over derivative directions (i.e. base vectors)
1234  for (unsigned j = 0; j < DIM; j++)
1235  {
1236  def_covariant_basis(j, i) +=
1237  nodal_position_gen(l, k, i) * dpsidxi(l, k, j);
1238  }
1239  }
1240  }
1241  }
1242  }
unsigned nnodal_position_type() const
Definition: elements.h:2463
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
double dshape_lagrangian(const Vector< double > &s, Shape &psi, DShape &dpsidxi) const
Definition: elements.cc:6710
RealScalar s
Definition: level1_cplx_impl.h:130
char char char int int * k
Definition: level2_impl.h:374
#define DIM
Definition: linearised_navier_stokes_elements.h:44
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References DIM, i, j, k, and s.

◆ get_dof_numbers_for_unknowns()

template<unsigned DIM>
void oomph::PVDEquationsBase< DIM >::get_dof_numbers_for_unknowns ( std::list< std::pair< unsigned long, unsigned >> &  dof_lookup_list) const
inlinevirtual

Create a list of pairs for all unknowns in this element, so that the first entry in each pair contains the global equation number of the unknown, while the second one contains the number of the "DOF" that this unknown is associated with. (Function can obviously only be called if the equation numbering scheme has been set up.) E.g. in a 3D problem there are 3 types of DOF: 0 - x displacement 1 - y displacement 2 - z displacement

Reimplemented from oomph::GeneralisedElement.

Reimplemented in oomph::PVDEquationsWithPressure< DIM >, oomph::PseudoSolidNodeUpdateElement< TCrouzeixRaviartElement< 2 >, TPVDBubbleEnrichedElement< 2, 3 > >, oomph::PseudoSolidNodeUpdateElement< TTaylorHoodElement< 2 >, TPVDElement< 2, 3 > >, oomph::PseudoSolidNodeUpdateElement< GeneralisedNewtonianAxisymmetricTTaylorHoodElement, TPVDElement< 2, 3 > >, oomph::PseudoSolidNodeUpdateElement< AxisymmetricTTaylorHoodElement, TPVDElement< 2, 3 > >, and oomph::PseudoSolidNodeUpdateElement< GeneralisedNewtonianTTaylorHoodElement< 2 >, TPVDElement< 2, 3 > >.

331  {
332  // temporary pair (used to store dof lookup prior to being added to list
333  std::pair<unsigned, unsigned> dof_lookup;
334 
335  // number of nodes
336  const unsigned n_node = this->nnode();
337 
338  // Get the number of position dofs and dimensions at the node
339  const unsigned n_position_type = nnodal_position_type();
340  const unsigned nodal_dim = nodal_dimension();
341 
342  // Integer storage for local unknown
343  int local_unknown = 0;
344 
345  // Loop over the nodes
346  for (unsigned n = 0; n < n_node; n++)
347  {
348  // Loop over position dofs
349  for (unsigned k = 0; k < n_position_type; k++)
350  {
351  // Loop over dimension
352  for (unsigned i = 0; i < nodal_dim; i++)
353  {
354  // If the variable is free
355  local_unknown = position_local_eqn(n, k, i);
356 
357  // ignore pinned values
358  if (local_unknown >= 0)
359  {
360  // store dof lookup in temporary pair: First entry in pair
361  // is global equation number; second entry is dof type
362  dof_lookup.first = this->eqn_number(local_unknown);
363  dof_lookup.second = i;
364 
365  // add to list
366  dof_lookup_list.push_front(dof_lookup);
367  }
368  }
369  }
370  }
371  }
unsigned nodal_dimension() const
Return the required Eulerian dimension of the nodes in this element.
Definition: elements.h:2484
unsigned long eqn_number(const unsigned &ieqn_local) const
Definition: elements.h:704
int position_local_eqn(const unsigned &n, const unsigned &k, const unsigned &j) const
Definition: elements.h:4137

References oomph::GeneralisedElement::eqn_number(), i, k, n, oomph::FiniteElement::nnodal_position_type(), oomph::FiniteElement::nnode(), oomph::FiniteElement::nodal_dimension(), and oomph::SolidFiniteElement::position_local_eqn().

◆ get_energy()

template<unsigned DIM>
void oomph::PVDEquationsBase< DIM >::get_energy ( double pot_en,
double kin_en 
)

Get potential (strain) and kinetic energy.

830  {
831  // Initialise
832  pot_en = 0;
833  kin_en = 0;
834 
835  // Set the value of n_intpt
836  unsigned n_intpt = this->integral_pt()->nweight();
837 
838  // Set the Vector to hold local coordinates
839  Vector<double> s(DIM);
840 
841  // Find out how many nodes there are
842  const unsigned n_node = this->nnode();
843 
844  // Find out how many positional dofs there are
845  const unsigned n_position_type = this->nnodal_position_type();
846 
847  // Set up memory for the shape functions
848  Shape psi(n_node, n_position_type);
849  DShape dpsidxi(n_node, n_position_type, DIM);
850 
851  // Timescale ratio (non-dim density)
852  double lambda_sq = this->lambda_sq();
853 
854  // Loop over the integration points
855  for (unsigned ipt = 0; ipt < n_intpt; ipt++)
856  {
857  // Assign values of s
858  for (unsigned i = 0; i < DIM; i++)
859  {
860  s[i] = this->integral_pt()->knot(ipt, i);
861  }
862 
863  // Get the integral weight
864  double w = this->integral_pt()->weight(ipt);
865 
866  // Call the derivatives of the shape functions and get Jacobian
867  double J = this->dshape_lagrangian_at_knot(ipt, psi, dpsidxi);
868 
869  // Storage for Lagrangian coordinates and velocity (initialised to zero)
870  Vector<double> interpolated_xi(DIM, 0.0);
871  Vector<double> veloc(DIM, 0.0);
872 
873  // Calculate lagrangian coordinates
874  for (unsigned l = 0; l < n_node; l++)
875  {
876  // Loop over positional dofs
877  for (unsigned k = 0; k < n_position_type; k++)
878  {
879  // Loop over displacement components (deformed position)
880  for (unsigned i = 0; i < DIM; i++)
881  {
882  // Calculate the Lagrangian coordinates
883  interpolated_xi[i] +=
884  this->lagrangian_position_gen(l, k, i) * psi(l, k);
885 
886  // Calculate the velocity components (if unsteady solve)
887  if (this->Unsteady)
888  {
889  veloc[i] += this->dnodal_position_gen_dt(l, k, i) * psi(l, k);
890  }
891  }
892  }
893  }
894 
895  // Get isotropic growth factor
896  double gamma = 1.0;
898 
899  // Premultiply the undeformed volume ratio (from the isotropic
900  // growth), the weights and the Jacobian
901  double W = gamma * w * J;
902 
904  DenseMatrix<double> strain(DIM, DIM);
905 
906  // Now calculate the stress tensor from the constitutive law
907  this->get_stress(s, sigma);
908 
909  // Add pre-stress
910  for (unsigned i = 0; i < DIM; i++)
911  {
912  for (unsigned j = 0; j < DIM; j++)
913  {
914  sigma(i, j) += prestress(i, j, interpolated_xi);
915  }
916  }
917 
918  // get the strain
919  this->get_strain(s, strain);
920 
921  // Initialise
922  double local_pot_en = 0;
923  double veloc_sq = 0;
924 
925  // Compute integrals
926  for (unsigned i = 0; i < DIM; i++)
927  {
928  for (unsigned j = 0; j < DIM; j++)
929  {
930  local_pot_en += sigma(i, j) * strain(i, j);
931  }
932  veloc_sq += veloc[i] * veloc[i];
933  }
934 
935  pot_en += 0.5 * local_pot_en * W;
936  kin_en += lambda_sq * 0.5 * veloc_sq * W;
937  }
938  }
JacobiRotation< float > J
Definition: Jacobi_makeJacobi.cpp:3
RowVector3d w
Definition: Matrix_resize_int.cpp:3
double dnodal_position_gen_dt(const unsigned &n, const unsigned &k, const unsigned &i) const
Definition: elements.h:2369
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
Definition: elements.h:1963
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.
double prestress(const unsigned &i, const unsigned &j, const Vector< double > xi)
Definition: solid_elements.h:393
virtual void get_isotropic_growth(const unsigned &ipt, const Vector< double > &s, const Vector< double > &xi, double &gamma) const
Definition: solid_elements.h:267
void get_strain(const Vector< double > &s, DenseMatrix< double > &strain) const
Return the strain tensor.
Definition: solid_elements.cc:47
virtual void get_stress(const Vector< double > &s, DenseMatrix< double > &sigma)=0
const double & lambda_sq() const
Access function for timescale ratio (nondim density)
Definition: solid_elements.h:108
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
int sigma
Definition: calibrate.py:179
Mdouble gamma(Mdouble gamma_in)
This is the gamma function returns the true value for the half integer value.
Definition: ExtendedMath.cc:116
@ W
Definition: quadtree.h:63

References DIM, mathsFunc::gamma(), i, J, j, k, s, calibrate::sigma, w, and oomph::QuadTreeNames::W.

◆ get_isotropic_growth()

template<unsigned DIM>
virtual void oomph::PVDEquationsBase< DIM >::get_isotropic_growth ( const unsigned ipt,
const Vector< double > &  s,
const Vector< double > &  xi,
double gamma 
) const
inlinevirtual

Evaluate isotropic growth function at Lagrangian coordinate xi and/or local coordinate s. (returns 1, i.e. no growth, if no function pointer has been set) This function is virtual to allow overloading in multi-physics problems where the growth function might be determined by another system of equations

Reimplemented in QThermalPVDElement< DIM >.

271  {
272  // If no function has been set, return 1
273  if (Isotropic_growth_fct_pt == 0)
274  {
275  gamma = 1.0;
276  }
277  else
278  {
279  // Get isotropic growth
280  (*Isotropic_growth_fct_pt)(xi, gamma);
281  }
282  }

References mathsFunc::gamma(), and oomph::PVDEquationsBase< DIM >::Isotropic_growth_fct_pt.

Referenced by oomph::RefineableQDPVDElement< DIM, NNODE_1D >::fill_in_generic_contribution_to_residuals_pvd().

◆ get_principal_stress()

template<unsigned DIM>
void oomph::PVDEquationsBase< DIM >::get_principal_stress ( const Vector< double > &  s,
DenseMatrix< double > &  principal_stress_vector,
Vector< double > &  principal_stress 
)

Compute principal stress vectors and (scalar) principal stresses at specified local coordinate. principal_stress_vector(i,j) is the j-th component of the i-th principal stress vector.

/////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// Compute principal stress vectors and (scalar) principal stresses at specified local coordinate: principal_stress_vector(i,j) is the j-th component of the i-th principal stress vector.

1075  {
1076  // Compute contravariant ("upper") 2nd Piola Kirchhoff stress
1077  DenseDoubleMatrix sigma(DIM, DIM);
1078  get_stress(s, sigma);
1079 
1080  // Lagrangian coordinates
1081  Vector<double> xi(DIM);
1082  this->interpolated_xi(s, xi);
1083 
1084  // Add pre-stress
1085  for (unsigned i = 0; i < DIM; i++)
1086  {
1087  for (unsigned j = 0; j < DIM; j++)
1088  {
1089  sigma(i, j) += this->prestress(i, j, xi);
1090  }
1091  }
1092 
1093  // Get covariant base vectors in deformed configuration
1094  DenseMatrix<double> lower_deformed_basis(DIM);
1095  get_deformed_covariant_basis_vectors(s, lower_deformed_basis);
1096 
1097  // Work out covariant ("lower") metric tensor
1098  DenseDoubleMatrix lower_metric(DIM);
1099  for (unsigned i = 0; i < DIM; i++)
1100  {
1101  for (unsigned j = 0; j < DIM; j++)
1102  {
1103  lower_metric(i, j) = 0.0;
1104  for (unsigned k = 0; k < DIM; k++)
1105  {
1106  lower_metric(i, j) +=
1107  lower_deformed_basis(i, k) * lower_deformed_basis(j, k);
1108  }
1109  }
1110  }
1111 
1112  // Work out cartesian components of contravariant ("upper") basis vectors
1113  DenseMatrix<double> upper_deformed_basis(DIM);
1114 
1115  // Loop over RHSs
1116  Vector<double> rhs(DIM);
1117  Vector<double> aux(DIM);
1118  for (unsigned k = 0; k < DIM; k++)
1119  {
1120  for (unsigned l = 0; l < DIM; l++)
1121  {
1122  rhs[l] = lower_deformed_basis(l, k);
1123  }
1124 
1125  lower_metric.solve(rhs, aux);
1126 
1127  for (unsigned l = 0; l < DIM; l++)
1128  {
1129  upper_deformed_basis(l, k) = aux[l];
1130  }
1131  }
1132 
1133  // Eigenvalues (=principal stresses) and eigenvectors
1135 
1136  // Get eigenvectors of contravariant 2nd Piola Kirchoff stress
1137  sigma.eigenvalues_by_jacobi(principal_stress, ev);
1138 
1139  // ev(j,i) is the i-th component of the j-th eigenvector
1140  // relative to the deformed "lower variance" basis!
1141  // Work out cartesian components of eigenvectors by multiplying
1142  // the "lower variance components" by these "upper variance" basis
1143  // vectors
1144 
1145  // Loop over cartesian compnents
1146  for (unsigned i = 0; i < DIM; i++)
1147  {
1148  // Initialise the row
1149  for (unsigned j = 0; j < DIM; j++)
1150  {
1151  principal_stress_vector(j, i) = 0.0;
1152  }
1153 
1154  // Loop over basis vectors
1155  for (unsigned j = 0; j < DIM; j++)
1156  {
1157  for (unsigned k = 0; k < DIM; k++)
1158  {
1159  principal_stress_vector(j, i) +=
1160  upper_deformed_basis(k, i) * ev(j, k);
1161  }
1162  }
1163  }
1164 
1165  // Scaling factor to turn these vectors into unit vectors
1166  Vector<double> norm(DIM);
1167  for (unsigned i = 0; i < DIM; i++)
1168  {
1169  norm[i] = 0.0;
1170  for (unsigned j = 0; j < DIM; j++)
1171  {
1172  norm[i] += pow(principal_stress_vector(i, j), 2);
1173  }
1174  norm[i] = sqrt(norm[i]);
1175  }
1176 
1177 
1178  // Scaling and then multiplying by eigenvalue gives the principal stress
1179  // vectors
1180  for (unsigned i = 0; i < DIM; i++)
1181  {
1182  for (unsigned j = 0; j < DIM; j++)
1183  {
1184  principal_stress_vector(j, i) =
1185  ev(j, i) / norm[j] * principal_stress[j];
1186  }
1187  }
1188  }
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
void get_deformed_covariant_basis_vectors(const Vector< double > &s, DenseMatrix< double > &def_covariant_basis)
Definition: solid_elements.cc:1197
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625

References DIM, i, j, k, Eigen::bfloat16_impl::pow(), s, calibrate::sigma, oomph::DoubleMatrixBase::solve(), and sqrt().

◆ get_strain()

template<unsigned DIM>
void oomph::PVDEquationsBase< DIM >::get_strain ( const Vector< double > &  s,
DenseMatrix< double > &  strain 
) const

Return the strain tensor.

Compute the strain tensor at local coordinate s.

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

49  {
50 #ifdef PARANOID
51  if ((strain.ncol() != DIM) || (strain.nrow() != DIM))
52  {
53  std::ostringstream error_message;
54  error_message << "Strain matrix is " << strain.ncol() << " x "
55  << strain.nrow() << ", but dimension of the equations is "
56  << DIM << std::endl;
57  throw OomphLibError(
58  error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
59  }
60 #endif
61 
62  // Find out how many nodes there are in the element
63  const unsigned n_node = nnode();
64 
65  // Find out how many position types there are
66  const unsigned n_position_type = this->nnodal_position_type();
67 
68  // Set up memory for the shape and test functions
69  Shape psi(n_node, n_position_type);
70  DShape dpsidxi(n_node, n_position_type, DIM);
71 
72  // Call the derivatives of the shape functions
73  (void)dshape_lagrangian(s, psi, dpsidxi);
74 
75  // Calculate interpolated values of the derivative of global position
76  DenseMatrix<double> interpolated_G(DIM);
77 
78  // Initialise to zero
79  for (unsigned i = 0; i < DIM; i++)
80  {
81  for (unsigned j = 0; j < DIM; j++)
82  {
83  interpolated_G(i, j) = 0.0;
84  }
85  }
86 
87  // Storage for Lagrangian coordinates (initialised to zero)
88  Vector<double> interpolated_xi(DIM, 0.0);
89 
90  // Loop over nodes
91  for (unsigned l = 0; l < n_node; l++)
92  {
93  // Loop over the positional dofs
94  for (unsigned k = 0; k < n_position_type; k++)
95  {
96  // Loop over velocity components
97  for (unsigned i = 0; i < DIM; i++)
98  {
99  // Calculate the Lagrangian coordinates
100  interpolated_xi[i] +=
101  this->lagrangian_position_gen(l, k, i) * psi(l, k);
102 
103  // Loop over derivative directions
104  for (unsigned j = 0; j < DIM; j++)
105  {
106  interpolated_G(j, i) +=
107  this->nodal_position_gen(l, k, i) * dpsidxi(l, k, j);
108  }
109  }
110  }
111  }
112 
113  // Get isotropic growth factor
114  double gamma = 1.0;
115  // Dummy integration point
116  unsigned ipt = 0;
118 
119  // We use Cartesian coordinates as the reference coordinate
120  // system. In this case the undeformed metric tensor is always
121  // the identity matrix -- stretched by the isotropic growth
122  double diag_entry = pow(gamma, 2.0 / double(DIM));
124  for (unsigned i = 0; i < DIM; i++)
125  {
126  for (unsigned j = 0; j < DIM; j++)
127  {
128  if (i == j)
129  {
130  g(i, j) = diag_entry;
131  }
132  else
133  {
134  g(i, j) = 0.0;
135  }
136  }
137  }
138 
139 
140  // Declare and calculate the deformed metric tensor
142 
143  // Assign values of G
144  for (unsigned i = 0; i < DIM; i++)
145  {
146  // Do upper half of matrix
147  for (unsigned j = i; j < DIM; j++)
148  {
149  // Initialise G(i,j) to zero
150  G(i, j) = 0.0;
151  // Now calculate the dot product
152  for (unsigned k = 0; k < DIM; k++)
153  {
154  G(i, j) += interpolated_G(i, k) * interpolated_G(j, k);
155  }
156  }
157  // Matrix is symmetric so just copy lower half
158  for (unsigned j = 0; j < i; j++)
159  {
160  G(i, j) = G(j, i);
161  }
162  }
163 
164  // Fill in the strain tensor
165  for (unsigned i = 0; i < DIM; i++)
166  {
167  for (unsigned j = 0; j < DIM; j++)
168  {
169  strain(i, j) = 0.5 * (G(i, j) - g(i, j));
170  }
171  }
172  }
JacobiRotation< float > G
Definition: Jacobi_makeGivens.cpp:2
unsigned long nrow() const
Return the number of rows of the matrix.
Definition: matrices.h:485
unsigned long ncol() const
Return the number of columns of the matrix.
Definition: matrices.h:491
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References DIM, G, mathsFunc::gamma(), i, j, k, oomph::DenseMatrix< T >::ncol(), oomph::DenseMatrix< T >::nrow(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, Eigen::bfloat16_impl::pow(), and s.

Referenced by oomph::RefineablePVDEquations< DIM >::get_Z2_flux(), oomph::RefineablePVDEquationsWithPressure< DIM >::get_Z2_flux(), oomph::TPVDElement< DIM, NNODE_1D >::get_Z2_flux(), oomph::TPVDBubbleEnrichedElement< DIM, NNODE_1D >::get_Z2_flux(), and oomph::TPVDElementWithContinuousPressure< DIM >::get_Z2_flux().

◆ get_stress()

template<unsigned DIM>
virtual void oomph::PVDEquationsBase< DIM >::get_stress ( const Vector< double > &  s,
DenseMatrix< double > &  sigma 
)
pure virtual

Return the 2nd Piola Kirchoff stress tensor, as calculated from the constitutive law at specified local coordinate (needed by get_principal_stress(...), so I'm afraid I will have to insist that you implement it...

Implemented in oomph::PVDEquationsWithPressure< DIM >, and oomph::PVDEquations< DIM >.

◆ is_inertia_enabled()

template<unsigned DIM>
bool oomph::PVDEquationsBase< DIM >::is_inertia_enabled ( ) const
inline

Access function to flag that switches inertia on/off (const version)

165  {
166  return Unsteady;
167  }

References oomph::PVDEquationsBase< DIM >::Unsteady.

Referenced by oomph::RefineablePVDEquations< DIM >::further_build(), and oomph::RefineablePVDEquationsWithPressure< DIM >::further_build().

◆ is_jacobian_evaluated_by_fd()

template<unsigned DIM>
bool oomph::PVDEquationsBase< DIM >::is_jacobian_evaluated_by_fd ( ) const
inline

Return the flag indicating whether the jacobian is evaluated by fd.

387  {
389  }

References oomph::PVDEquationsBase< DIM >::Evaluate_jacobian_by_fd.

Referenced by oomph::RefineablePVDEquations< DIM >::further_build(), and oomph::RefineablePVDEquationsWithPressure< DIM >::further_build().

◆ isotropic_growth_fct_pt() [1/2]

template<unsigned DIM>
IsotropicGrowthFctPt& oomph::PVDEquationsBase< DIM >::isotropic_growth_fct_pt ( )
inline

◆ isotropic_growth_fct_pt() [2/2]

template<unsigned DIM>
IsotropicGrowthFctPt oomph::PVDEquationsBase< DIM >::isotropic_growth_fct_pt ( ) const
inline

Access function: Pointer to isotropic growth function (const version)

135  {
137  }

References oomph::PVDEquationsBase< DIM >::Isotropic_growth_fct_pt.

◆ lambda_sq()

template<unsigned DIM>
const double& oomph::PVDEquationsBase< DIM >::lambda_sq ( ) const
inline

Access function for timescale ratio (nondim density)

109  {
110  return *Lambda_sq_pt;
111  }

References oomph::PVDEquationsBase< DIM >::Lambda_sq_pt.

Referenced by oomph::RefineableQDPVDElement< DIM, NNODE_1D >::fill_in_generic_contribution_to_residuals_pvd().

◆ lambda_sq_pt()

template<unsigned DIM>
double*& oomph::PVDEquationsBase< DIM >::lambda_sq_pt ( )
inline

Access function for pointer to timescale ratio (nondim density)

116  {
117  return Lambda_sq_pt;
118  }

References oomph::PVDEquationsBase< DIM >::Lambda_sq_pt.

Referenced by oomph::RefineablePVDEquations< DIM >::further_build(), and oomph::RefineablePVDEquationsWithPressure< DIM >::further_build().

◆ ndof_types()

◆ npres_solid()

◆ pin_elemental_redundant_nodal_solid_pressures()

template<unsigned DIM>
virtual void oomph::PVDEquationsBase< DIM >::pin_elemental_redundant_nodal_solid_pressures ( )
inlinevirtual

Pin the element's redundant solid pressures (needed for refinement)

Reimplemented in oomph::RefineableQPVDElementWithContinuousPressure< DIM >.

196 {}

Referenced by oomph::PVDEquationsBase< DIM >::pin_redundant_nodal_solid_pressures().

◆ pin_redundant_nodal_solid_pressures()

template<unsigned DIM>
static void oomph::PVDEquationsBase< DIM >::pin_redundant_nodal_solid_pressures ( const Vector< GeneralisedElement * > &  element_pt)
inlinestatic

Loop over all elements in Vector (which typically contains all the elements in a refineable solid mesh) and pin the nodal solid pressure degrees of freedom that are not being used. Function uses the member function

  • PVDEquationsBase<DIM>:: pin_elemental_redundant_nodal_pressure_dofs()

which is empty by default and should be implemented for elements with nodal solid pressure degrees of freedom (e.g. solid elements with continuous pressure interpolation.)

210  {
211  // Loop over all elements
212  unsigned n_element = element_pt.size();
213  for (unsigned e = 0; e < n_element; e++)
214  {
215  dynamic_cast<PVDEquationsBase<DIM>*>(element_pt[e])
217  }
218  }
Array< double, 1, 3 > e(1./3., 0.5, 2.)
virtual void pin_elemental_redundant_nodal_solid_pressures()
Pin the element's redundant solid pressures (needed for refinement)
Definition: solid_elements.h:196

References e(), and oomph::PVDEquationsBase< DIM >::pin_elemental_redundant_nodal_solid_pressures().

Referenced by SolidProblem< ELEMENT_TYPE >::prepareForSolve().

◆ prestress()

template<unsigned DIM>
double oomph::PVDEquationsBase< DIM >::prestress ( const unsigned i,
const unsigned j,
const Vector< double xi 
)
inline

Return (i,j)-th component of second Piola Kirchhoff membrane prestress at Lagrangian coordinate xi

396  {
397  if (Prestress_fct_pt == 0)
398  {
399  return 0.0;
400  }
401  else
402  {
403  return (*Prestress_fct_pt)(i, j, xi);
404  }
405  }

References i, j, and oomph::PVDEquationsBase< DIM >::Prestress_fct_pt.

Referenced by oomph::RefineableQDPVDElement< DIM, NNODE_1D >::fill_in_generic_contribution_to_residuals_pvd().

◆ prestress_fct_pt()

template<unsigned DIM>
PrestressFctPt& oomph::PVDEquationsBase< DIM >::prestress_fct_pt ( )
inline

Access function: Pointer to pre-stress function.

129  {
130  return Prestress_fct_pt;
131  }

References oomph::PVDEquationsBase< DIM >::Prestress_fct_pt.

◆ solid_p_local_eqn()

template<unsigned DIM>
virtual int oomph::PVDEquationsBase< DIM >::solid_p_local_eqn ( const unsigned i) const
inlinevirtual

Return the local degree of freedom associated with the i-th solid pressure. Default is that there are none.

Reimplemented in oomph::TPVDElementWithContinuousPressure< DIM >, oomph::QPVDElementWithContinuousPressure< DIM >, and oomph::QPVDElementWithPressure< DIM >.

179  {
180  return -1;
181  }

Referenced by oomph::PVDEquationsWithPressure< DIM >::get_dof_numbers_for_unknowns().

◆ solid_p_nodal_index()

◆ unpin_all_solid_pressure_dofs()

template<unsigned DIM>
static void oomph::PVDEquationsBase< DIM >::unpin_all_solid_pressure_dofs ( const Vector< GeneralisedElement * > &  element_pt)
inlinestatic

Unpin all pressure dofs in elements listed in vector.

223  {
224  // Loop over all elements
225  unsigned n_element = element_pt.size();
226  for (unsigned e = 0; e < n_element; e++)
227  {
228  dynamic_cast<PVDEquationsBase<DIM>*>(element_pt[e])
230  }
231  }
virtual void unpin_elemental_solid_pressure_dofs()=0
Unpin all solid pressure dofs in the element.

References e(), and oomph::PVDEquationsBase< DIM >::unpin_elemental_solid_pressure_dofs().

◆ unpin_elemental_solid_pressure_dofs()

Member Data Documentation

◆ Body_force_fct_pt

◆ Constitutive_law_pt

◆ Default_lambda_sq_value

template<unsigned DIM>
double oomph::PVDEquationsBase< DIM >::Default_lambda_sq_value = 1.0
staticprotected

Static default value for timescale ratio (1.0 – for natural scaling)

◆ Evaluate_jacobian_by_fd

◆ Isotropic_growth_fct_pt

◆ Lambda_sq_pt

◆ Prestress_fct_pt

template<unsigned DIM>
PrestressFctPt oomph::PVDEquationsBase< DIM >::Prestress_fct_pt
protected

◆ Solid_pressure_not_stored_at_node

template<unsigned DIM>
int oomph::PVDEquationsBase< DIM >::Solid_pressure_not_stored_at_node = -100
staticprivate

Static "magic" number that indicates that the solid pressure is not stored at a node

/////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////// "Magic" number that indicates that the solid pressure is not stored at a node. It is a negative number that cannot be -1 because that is used to represent the positional hanging scheme in Hanging_pt objects

Referenced by oomph::PVDEquationsBase< DIM >::solid_p_nodal_index().

◆ Unsteady


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