|
| CircularPenetratorElement (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) |
|
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...
|
|
void | output (std::ostream &outfile, const unsigned &nplot) const |
| Output coordinates of penetrator at nplot plot points. More...
|
|
Vector< double > | resulting_force () const |
| Resulting force from all associated ContactElements. More...
|
|
double | radius () const |
| Radius of penetrator. More...
|
|
| CircularPenetratorElement (SolidNode *control_node_pt, const unsigned &index_of_contact_pressure, double *r_pt) |
|
virtual | ~CircularPenetratorElement () |
| Virtual destructor. More...
|
|
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...
|
|
void | output (std::ostream &outfile, const unsigned &nplot) const |
| Output coordinates of penetrator at nplot plot points. 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 |
|
| Penetrator () |
| Constructor. More...
|
|
virtual | ~Penetrator () |
| Destructor. More...
|
|
virtual Vector< double > | rigid_body_displacement () const |
|
virtual void | surface_coordinate (const Vector< double > &x, Vector< double > &zeta) const |
|
|
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 |
|
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_all_generic_local_eqn_numbers (const bool &store_local_dof_pt) |
|
virtual void | assign_additional_local_eqn_numbers () |
|
int | internal_local_eqn (const unsigned &i, const unsigned &j) const |
|
int | external_local_eqn (const unsigned &i, const unsigned &j) |
|
void | fill_in_jacobian_from_internal_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false) |
|
void | fill_in_jacobian_from_internal_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false) |
|
void | fill_in_jacobian_from_external_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false) |
|
void | fill_in_jacobian_from_external_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false) |
|
virtual void | update_before_internal_fd () |
|
virtual void | reset_after_internal_fd () |
|
virtual void | update_in_internal_fd (const unsigned &i) |
|
virtual void | reset_in_internal_fd (const unsigned &i) |
|
virtual void | update_before_external_fd () |
|
virtual void | reset_after_external_fd () |
|
virtual void | update_in_external_fd (const unsigned &i) |
|
virtual void | reset_in_external_fd (const unsigned &i) |
|
virtual void | fill_in_contribution_to_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian) |
|
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 ¶meter_pt, Vector< double > &dres_dparam) |
|
virtual void | fill_in_contribution_to_djacobian_dparameter (double *const ¶meter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam) |
|
virtual void | fill_in_contribution_to_djacobian_and_dmass_matrix_dparameter (double *const ¶meter_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) |
|
static DenseMatrix< double > | Dummy_matrix |
|
static std::deque< double * > | Dof_pt_deque |
|
//////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
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.