![]() |
|
Public Member Functions | |
HeatedCircularPenetratorElement (SolidNode *control_node_pt, const unsigned &index_of_contact_pressure, const unsigned &index_of_horizontal_displacement, const unsigned &index_of_vertical_displacement, double *r_pt) | |
void | surface_coordinate (const Vector< double > &x, Vector< double > &zeta) const |
Vector< double > | rigid_body_displacement () const |
Get rigid body displacement of reference point in penetrator. More... | |
void | set_original_centre (const Vector< double > &orig_centre) |
Vector< std::pair< Data *, unsigned > > | equilibrium_data () |
double | angle () const |
Angle of rotation around contact point. More... | |
void | set_angle (const double &angle) |
Set angle of rotation around contact point. More... | |
Mesh * | contact_element_mesh_pt () const |
void | set_contact_element_mesh_pt (Mesh *contact_element_mesh_pt) |
void | set_equilibrium_target_forces () |
Set target horizontal and vertical force to be in equilibrium. More... | |
double | target_weight () |
Target weight (returns zero if not imposed) More... | |
double | target_horizontal_force () |
Target horizontal force (returns zero if not imposed) More... | |
double | target_yc () |
Target vertical position of control point (returns zero if not imposed) More... | |
double | target_rotation_angle () |
Target rotation angle about contact point (returns zero if not imposed) More... | |
bool | yc_is_imposed () |
Is vertical positon of control node imposed? If false then weight imposed. More... | |
void | impose_weight (double *target_weight_pt) |
void | impose_yc (double *target_yc_pt) |
bool | rotation_angle_is_imposed () |
void | impose_horizontal_force (double *target_horizontal_force_pt) |
void | impose_rotation_angle (double *target_rotation_angle_pt) |
void | fill_in_contribution_to_residuals (Vector< double > &residuals) |
Fill in contribution to residuals. More... | |
Vector< double > | centre () const |
Get centre of penetrator. More... | |
double | centre (const unsigned &i) const |
Get centre of penetrator. More... | |
void | penetration (const Vector< double > &x, const Vector< double > &n, double &d, bool &intersection) const |
Get penetration for given point x. More... | |
double | temperature (const Vector< double > &x) const |
void | output (std::ostream &outfile, const unsigned &nplot) const |
Output coordinates of penetrator at nplot plot points. More... | |
void | position_from_zeta (const Vector< double > &zeta, Vector< double > &r) const |
Get position to surface, r, in terms of surface coordinate zeta. More... | |
Vector< double > | resulting_force () const |
Resulting force from all associated ContactElements. More... | |
double | radius () const |
Radius of penetrator. More... | |
![]() | |
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 ¤t_string) const |
virtual void | describe_local_dofs (std::ostream &out, const std::string ¤t_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 ¶meter_pt, Vector< double > &dres_dparam) |
virtual void | get_djacobian_dparameter (double *const ¶meter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam) |
virtual void | get_djacobian_and_dmass_matrix_dparameter (double *const ¶meter_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 unsigned | self_test () |
virtual void | compute_norm (Vector< double > &norm) |
virtual void | compute_norm (double &norm) |
virtual unsigned | ndof_types () const |
virtual void | get_dof_numbers_for_unknowns (std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const |
![]() | |
HeatedPenetrator () | |
Constructor. More... | |
virtual | ~HeatedPenetrator () |
Destructor. More... | |
![]() | |
Penetrator () | |
Constructor. More... | |
virtual | ~Penetrator () |
Destructor. More... | |
Private Attributes | |
double * | Radius_pt |
Pointer to radius of penetrator. More... | |
Vector< double > | Orig_centre |
SolidNode * | Control_node_pt |
Control node. More... | |
unsigned | Index_of_contact_pressure |
unsigned | Index_of_vertical_displacement |
Where is the vertical displacement (linear_elasticity) stored? More... | |
unsigned | Index_of_horizontal_displacement |
Where is the horizontal displacement (linear_elasticity) stored? More... | |
unsigned | External_data_index_of_traded_contact_pressure |
double * | Target_weight_pt |
double * | Target_horizontal_force_pt |
double * | Target_yc_pt |
double * | Target_rotation_angle_pt |
Mesh * | Contact_element_mesh_pt |
Mesh of contact elements that contribute to weight/horizontal force. More... | |
//////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
Penetrator that keeps circle in contact with a control node on target surface (made of solid contact face elements) – centre of the circular penetrator is located at
{\bf r}_c = {\bf R}_p + R {\bf e}_alpha
where {\bf R}_p is the position of the control point, R the radius of the circular penetrator, and {\bf e}_alpha is a unit vector inclined at an angle \alpha against the vertical. Penetration can be driven in two ways. (1) We impose the vertical position of the control point (by pseudo-hijacking the Lagrange-multiplier (representing the contact pressure) stored at the controlled node. This means that rather than determining the contact pressure from the no-penetration constraint, (which we know to be satisfied by construction) we determine it from the condition that {\bf R}_p \cdot {\bf e}_y = Y_c which is prescribed. We also impose the angle \alpha (stored as an internal Data value in the element) by solving it via the equation \alpha-\alpha_{prescribed} = 0. (2) We impose the weight (i.e. the vertical reaction force from the contact elements) by using the equation
\int p_c {\bf n} \cdot {\bf e}_y ds - W = 0
as the equation for the pseudo-hijacked contact pressure and similarly, use the horizontal force balance
\int p_c {\bf n} \cdot {\bf e}_x ds - H = 0
to determine the rotation angle. Here, W and H are prescribed and the integral is computed from the contact elements that potentially impact on the penetrator.
|
inline |
Constructor: Pass pointer to control node whose index_of_contact_pressure-th value represents the Lagrange multiplier (the discrete contact pressure) that has been traded for the vertical displacement/weight constraint. Also need the indices of the nodal values that store the horizontal/vertical displacement (linear elasticity).
References oomph::GeneralisedElement::add_internal_data(), centre(), Contact_element_mesh_pt, Control_node_pt, Index_of_contact_pressure, Index_of_horizontal_displacement, Index_of_vertical_displacement, oomph::GeneralisedElement::internal_data_pt(), oomph::oomph_info, Orig_centre, Radius_pt, oomph::Data::set_value(), Target_horizontal_force_pt, Target_rotation_angle_pt, Target_weight_pt, and Target_yc_pt.
|
inline |
Angle of rotation around contact point.
References oomph::GeneralisedElement::internal_data_pt(), and oomph::Data::value().
Referenced by centre(), ContactProblem< ELEMENT >::complete_problem_setup(), and set_angle().
Get centre of penetrator.
References plotDoE::rc.
Referenced by ContactProblem< ELEMENT >::doc_solution(), HeatedCircularPenetratorElement(), output(), penetration(), position_from_zeta(), rigid_body_displacement(), surface_coordinate(), and temperature().
Get centre of penetrator.
References angle(), Control_node_pt, cos(), i, Index_of_horizontal_displacement, Index_of_vertical_displacement, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, sin(), oomph::Node::value(), and oomph::Node::x().
|
inline |
Access to pointer to mesh of contact elements that contribute to force on penetrator
References Contact_element_mesh_pt.
Referenced by set_contact_element_mesh_pt().
|
inlinevirtual |
Vector of pairs identifying values (via a pair of pointer to Data object and index within it) that correspond to the Data values that are determined by the horizontal/vertical/... equilibrium equations.
Reimplemented from oomph::Penetrator.
References External_data_index_of_traded_contact_pressure, oomph::GeneralisedElement::external_data_pt(), Index_of_contact_pressure, oomph::GeneralisedElement::internal_data_pt(), Target_horizontal_force_pt, and Target_weight_pt.
|
inlinevirtual |
Fill in contribution to residuals.
Reimplemented from oomph::GeneralisedElement.
References Control_node_pt, External_data_index_of_traded_contact_pressure, oomph::GeneralisedElement::external_local_eqn(), Index_of_contact_pressure, Index_of_vertical_displacement, oomph::GeneralisedElement::internal_data_pt(), oomph::GeneralisedElement::internal_local_eqn(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, resulting_force(), Target_horizontal_force_pt, Target_rotation_angle_pt, Target_weight_pt, Target_yc_pt, oomph::Data::value(), oomph::Node::value(), and oomph::Node::x().
|
inline |
Impose horizontal force (rather than rotation about contact node). Target force specified via pointer.
References Target_horizontal_force_pt, and Target_rotation_angle_pt.
|
inline |
Impose rotation about contact node (rather than horizontal force) Target angle specified via pointer.
References Target_horizontal_force_pt, and Target_rotation_angle_pt.
|
inline |
Impose weight (rather than imposed displacement). Target weight specified via pointer.
References Target_weight_pt, and Target_yc_pt.
|
inline |
Impose vertical position of control node (rather than weight). Target vertical position of control node specified via pointer.
References Target_weight_pt, and Target_yc_pt.
|
inlinevirtual |
Output coordinates of penetrator at nplot plot points.
Implements oomph::Penetrator.
References centre(), cos(), j, BiharmonicTestFunctions2::Pi, and sin().
|
inlinevirtual |
Get penetration for given point x.
Implements oomph::Penetrator.
References centre(), min, n, sqrt(), and plotDoE::x.
|
inline |
Get position to surface, r, in terms of surface coordinate zeta.
References centre(), cos(), UniformPSDSelfTest::r, sin(), and Eigen::zeta().
|
inline |
Resulting force from all associated ContactElements.
References Contact_element_mesh_pt, e(), oomph::Mesh::element_pt(), i, and oomph::Mesh::nelement().
Referenced by fill_in_contribution_to_residuals(), and set_equilibrium_target_forces().
Get rigid body displacement of reference point in penetrator.
Reimplemented from oomph::Penetrator.
References centre(), i, n, and Orig_centre.
|
inline |
Is angle of rotation about control node imposed? If false then horizontal force is imposed.
References Target_rotation_angle_pt.
Referenced by ContactProblem< ELEMENT >::complete_problem_setup().
|
inline |
Set angle of rotation around contact point.
References angle(), oomph::GeneralisedElement::internal_data_pt(), and oomph::Data::set_value().
|
inline |
Set pointer to mesh of contact elements and setup external Data, i.e. Data that affects the residuals in this element. Also set the node pointed to by Control_node_pt as external Data for the elements in the contact mesh (unless they contain this node already).
References oomph::GeneralisedElement::add_external_data(), contact_element_mesh_pt(), Contact_element_mesh_pt, Control_node_pt, e(), External_data_index_of_traded_contact_pressure, oomph::Mesh::finite_element_pt(), oomph::GeneralisedElement::flush_external_data(), oomph::GeneralisedElement::internal_data_pt(), j, oomph::Mesh::nelement(), oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), and oomph::SolidNode::variable_position_pt().
Referenced by ContactProblem< ELEMENT >::complete_problem_setup().
|
inline |
Set target horizontal and vertical force to be in equilibrium.
References OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, resulting_force(), Target_horizontal_force_pt, and Target_weight_pt.
|
inline |
Set original centre of penetrator (for computation of rigid body displacement
References Orig_centre.
|
inlinevirtual |
Get surface coordinate along penetrator for given point x. We assume that point on the surface and given point share the same polar angle and return that polar angle
Reimplemented from oomph::Penetrator.
References atan2(), centre(), plotDoE::x, and Eigen::zeta().
|
inline |
|
inline |
Target rotation angle about contact point (returns zero if not imposed)
References Target_rotation_angle_pt.
|
inline |
Target weight (returns zero if not imposed)
References Target_weight_pt.
Referenced by ContactProblem< ELEMENT >::doc_solution().
|
inline |
|
inlinevirtual |
Get temperature on penetrator at point "associated" with point x using the same logic as for the position function). Here we assume that both points shrare the same polar angle relative to the centre of (circular!) penetrator
Implements oomph::HeatedPenetrator.
References atan2(), centre(), cos(), BiharmonicTestFunctions2::Pi, and plotDoE::x.
|
inline |
Is vertical positon of control node imposed? If false then weight imposed.
References Target_yc_pt.
Referenced by ContactProblem< ELEMENT >::complete_problem_setup().
|
private |
Mesh of contact elements that contribute to weight/horizontal force.
Referenced by contact_element_mesh_pt(), HeatedCircularPenetratorElement(), resulting_force(), and set_contact_element_mesh_pt().
|
private |
Control node.
Referenced by centre(), fill_in_contribution_to_residuals(), HeatedCircularPenetratorElement(), and set_contact_element_mesh_pt().
|
private |
Index of external data that contains the the contact pressure in its Index_of_contact_pressure-th value
Referenced by equilibrium_data(), fill_in_contribution_to_residuals(), and set_contact_element_mesh_pt().
|
private |
Index at which contact pressure (Lagr mult) is stored in nodal data associated with control node
Referenced by equilibrium_data(), fill_in_contribution_to_residuals(), and HeatedCircularPenetratorElement().
|
private |
Where is the horizontal displacement (linear_elasticity) stored?
Referenced by centre(), and HeatedCircularPenetratorElement().
|
private |
Where is the vertical displacement (linear_elasticity) stored?
Referenced by centre(), fill_in_contribution_to_residuals(), and HeatedCircularPenetratorElement().
Original centre of penetrator (origin for cylindrical polar coordinate system)
Referenced by HeatedCircularPenetratorElement(), rigid_body_displacement(), and set_original_centre().
|
private |
Pointer to radius of penetrator.
Referenced by HeatedCircularPenetratorElement(), and radius().
|
private |
Pointer to target horizontal force (null if rotation angle angle about control node is imposed)
Referenced by equilibrium_data(), fill_in_contribution_to_residuals(), HeatedCircularPenetratorElement(), impose_horizontal_force(), impose_rotation_angle(), set_equilibrium_target_forces(), and target_horizontal_force().
|
private |
Pointer to target rotation angle about control node (null if horizontal force is imposed)
Referenced by fill_in_contribution_to_residuals(), HeatedCircularPenetratorElement(), impose_horizontal_force(), impose_rotation_angle(), rotation_angle_is_imposed(), and target_rotation_angle().
|
private |
Pointer to target weight (null if vertical displacement of control node is imposed)
Referenced by equilibrium_data(), fill_in_contribution_to_residuals(), HeatedCircularPenetratorElement(), impose_weight(), impose_yc(), set_equilibrium_target_forces(), and target_weight().
|
private |
Pointer to target vertical displacement of control node (null if weight is imposed)
Referenced by fill_in_contribution_to_residuals(), HeatedCircularPenetratorElement(), impose_weight(), impose_yc(), target_yc(), and yc_is_imposed().