![]() |
|
#include <displacement_control_element.h>
Public Member Functions | |
DisplacementControlElement (SolidFiniteElement *controlled_element_pt, const Vector< double > &controlled_point, const unsigned &controlled_direction, double *control_position_value_pt, Data *displacement_control_load_pt) | |
DisplacementControlElement (SolidFiniteElement *controlled_element_pt, const Vector< double > &controlled_point, const unsigned &controlled_direction, double *control_position_value_pt) | |
DisplacementControlElement (const DisplacementControlElement &)=delete | |
Broken copy constructor. More... | |
void | operator= (const DisplacementControlElement &)=delete |
Broken assignment operator. More... | |
Data * | displacement_control_load_pt () const |
void | assign_additional_local_eqn_numbers () |
Store local equation number of displacement control equation. More... | |
void | fill_in_contribution_to_residuals (Vector< double > &residuals) |
unsigned | ndof_types () const |
void | get_dof_numbers_for_unknowns (std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const |
![]() | |
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) |
Protected Attributes | |
Data * | Displacement_control_load_pt |
double * | Control_position_value_pt |
unsigned | Controlled_direction |
SolidFiniteElement * | Controlled_element_pt |
Pointer to SolidFiniteElement at which control displacement is applied. More... | |
Vector< double > | Controlled_point |
bool | Load_data_created_internally |
unsigned | Load_data_index |
int | Displ_ctrl_local_eqn |
Local equation number of the control-displacement equation. More... | |
Displacement control element: In the "normal" formulation of solid mechanics problems, the external load is given and the displacement throughout the solid body is computed. For highly nonlinear problems it is sometimes helpful to re-formulate the problem by prescribing the position of a selected control point and treating the (scalar) load level required to achieve this deformation as an unknown. As an example consider the buckling of pressure-loaded, thin-walled elastic shells. The load-displacement characteristics of such structures tend to be highly nonlinear and bifurcations from the structure's pre-buckling state often occur via sub-critical bifurcations. If we have some a-priori knowledge of the expected deformation (for example, during the non-axisymmetric buckling of a circular cylindrical shell certain material points will be displaced radially inwards), it is advantageous to prescribe the radial displacement of a carefully selected control point and treat the external pressure as an unknown.
DisplacementControlElements
facilitate the use of such methods. They require the specification of
controlled_element_pt
, to a SolidFiniteElement
andcontrolled_point
which contains the local coordinates of the control point in that SolidFiniteElement
.controlled_direction
. in which the displacement is controlled.control_position_value_pt
, that specifies the desired value of the prescribed coordinate after the deformation (i.e. if controlled_direction=1
then *control_position_value_pt
specifies the \( x_1 \) coordinate of the control point in the deformed configuration.)The DisplacementControlElement
has two constructors:
Data
object whose one-and-only value contains the scalar load level that is "traded" for the displacement constraint. This is appropriate if the load Data
has already been created (and is included in the overall equation numbering procedure) by some other element. In that case the DisplacementControlElement
treats the (already existing) Data
object external Data
.Data
object (with a single value) is created by the constructor of the DisplacementControlElement
and stored in its internal Data
. Once the DisplacementControlElement
has been included in one of the Problem's
meshes, it is therefore automatically included in the equation numbering procedure. The (pointer to) the newly created Data
is accessible via the access function displacement_control_load_pt()
. It can be used to make make the unknown load level accessible to the load function that drives the deformation.Note: The element inherits from the BlockPreconditionableElementBase and can be used in the block-preconditioning context. The element is "in charge" of the control load (if it's been created internally) and classifies it as its one-and-only "DOF type"
|
inline |
Constructor. Pass:
SolidFiniteElement
that contains the control pointThe load Data
is treated as external Data
for this element.
References oomph::GeneralisedElement::add_external_data(), Controlled_element_pt, displacement_control_load_pt(), Displacement_control_load_pt, j, Load_data_created_internally, Load_data_index, oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), oomph::Data::nvalue(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and oomph::SolidNode::variable_position_pt().
|
inline |
Constructor. Pass:
SolidFiniteElement
that contains the control pointThe pointer to a Data item whose one-and-only value contains the load value that is being adjusted to allow displacement control is created internally (and stored in the element's internal Data
. It is accessible (for use the load function) via the access function displacement_control_load_pt()
References oomph::GeneralisedElement::add_external_data(), oomph::GeneralisedElement::add_internal_data(), Controlled_element_pt, Displacement_control_load_pt, j, Load_data_created_internally, Load_data_index, oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), and oomph::SolidNode::variable_position_pt().
|
delete |
Broken copy constructor.
|
inlinevirtual |
Store local equation number of displacement control equation.
Reimplemented from oomph::GeneralisedElement.
References Displ_ctrl_local_eqn, oomph::GeneralisedElement::external_local_eqn(), oomph::GeneralisedElement::internal_local_eqn(), Load_data_created_internally, and Load_data_index.
|
inline |
Pointer to Data object whose one-and-only value represents the load that is adjusted to allow displacement control
References Displacement_control_load_pt.
Referenced by DisplacementControlElement(), and FSICollapsibleChannelProblem< ELEMENT >::FSICollapsibleChannelProblem().
|
inlinevirtual |
Add the element's contribution to its residual vector: The displacement constraint. [Note: Jacobian is computed automatically by finite-differencing]
Reimplemented from oomph::GeneralisedElement.
References Control_position_value_pt, Controlled_direction, Controlled_element_pt, Controlled_point, Displ_ctrl_local_eqn, and oomph::FiniteElement::interpolated_x().
|
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 type" that this unknown is associated with. (Function can obviously only be called if the equation numbering scheme has been set up.) The only dof this element is in charge of is the control load, provided it's been created as internal Data.
Reimplemented from oomph::GeneralisedElement.
References Displ_ctrl_local_eqn, oomph::GeneralisedElement::eqn_number(), Load_data_created_internally, and oomph::GeneralisedElement::local_eqn_number().
|
inlinevirtual |
The number of "DOF" that degrees of freedom in this element are sub-divided into: Just the control pressure.
Reimplemented from oomph::GeneralisedElement.
|
delete |
Broken assignment operator.
|
protected |
Pointer to the value that stores the prescribed coordinate of the control point
Referenced by fill_in_contribution_to_residuals().
|
protected |
Coordinate direction in which the displacement of the control point is controlled
Referenced by fill_in_contribution_to_residuals().
|
protected |
Pointer to SolidFiniteElement at which control displacement is applied.
Referenced by DisplacementControlElement(), and fill_in_contribution_to_residuals().
Vector of local coordinates of point at which control displacement is applied
Referenced by fill_in_contribution_to_residuals().
|
protected |
Local equation number of the control-displacement equation.
Referenced by assign_additional_local_eqn_numbers(), fill_in_contribution_to_residuals(), and get_dof_numbers_for_unknowns().
|
protected |
Pointer to Data item whose one-and-only value contains the load value that is being adjusted to allow displacement control.
Referenced by displacement_control_load_pt(), and DisplacementControlElement().
|
protected |
Flag to indicate if load data was created internally or externally (and is therefore stored in the element's internal or external Data)
Referenced by assign_additional_local_eqn_numbers(), DisplacementControlElement(), and get_dof_numbers_for_unknowns().
|
protected |
In which component (in the vector of the element's internal or external Data) is the load stored?
Referenced by assign_additional_local_eqn_numbers(), and DisplacementControlElement().