33 #ifndef OOMPH_DISPLACEMENT_CONTROL_ELEMENT_HEADER 34 #define OOMPH_DISPLACEMENT_CONTROL_ELEMENT_HEADER 39 #include <oomph-lib-config.h> 132 const unsigned& controlled_direction,
133 double* control_position_value_pt,
143 if (displacement_control_load_pt->
nvalue()!=1)
146 "Displacement control data must only contain a single value!\n",
147 OOMPH_CURRENT_FUNCTION,
148 OOMPH_EXCEPTION_LOCATION);
163 for (
unsigned j=0;j<nnode;j++)
189 const unsigned& controlled_direction,
190 double* control_position_value_pt) :
211 for (
unsigned j=0;j<nnode;j++)
287 std::list<std::pair<unsigned long,unsigned> >& dof_lookup_list)
const 293 std::pair<unsigned long,unsigned> dof_lookup;
299 if (local_eqn_number>=0)
303 dof_lookup.first = this->
eqn_number(local_eqn_number);
304 dof_lookup.second = 0;
307 dof_lookup_list.push_front(dof_lookup);
A Generalised Element class.
void broken_copy(const std::string &class_name)
Issue error message and terminate execution.
SolidFiniteElement * Controlled_element_pt
Pointer to SolidFiniteElement at which control displacement is applied.
Vector< double > Controlled_point
Vector of local coordinates of point at which control displacement is applied.
Data * displacement_control_load_pt() const
Pointer to Data object whose one-and-only value represents the load that is adjusted to allow displac...
bool Load_data_created_internally
Flag to indicate if load data was created internally or externally (and is therefore stored in the el...
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
unsigned add_external_data(Data *const &data_pt, const bool &fd=true)
unsigned ndof_types() const
The number of "DOF" that degrees of freedom in this element are sub-divided into: Just the control pr...
void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned > > &dof_lookup_list) const
Create a list of pairs for all unknowns in this element, so that the first entry in each pair contain...
unsigned long eqn_number(const unsigned &ieqn_local) const
Return the global equation number corresponding to the ieqn_local-th local equation number...
void operator=(const DisplacementControlElement &)
Broken assignment operator.
A class that represents a collection of data; each Data object may contain many different individual ...
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
unsigned Controlled_direction
Coordinate direction in which the displacement of the control point is controlled.
void assign_additional_local_eqn_numbers()
Store local equation number of displacement control equation.
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.
unsigned Load_data_index
In which component (in the vector of the element's internal or external Data) is the load stored...
Data * Displacement_control_load_pt
Pointer to Data item whose one-and-only value contains the load value that is being adjusted to allow...
void broken_assign(const std::string &class_name)
Issue error message and terminate execution.
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Add the element's contribution to its residual vector: The displacement constraint. [Note: Jacobian is computed automatically by finite-differencing].
unsigned add_internal_data(Data *const &data_pt, const bool &fd=true)
Add a (pointer to an) internal data object to the element and return the index required to obtain it ...
int Displ_ctrl_local_eqn
Local equation number of the control-displacement equation.
int local_eqn_number(const unsigned long &ieqn_global) const
Return the local equation number corresponding to the ieqn_global-th global equation number...
unsigned nnode() const
Return the number of nodes.
SolidFiniteElement class.
double * Control_position_value_pt
Pointer to the value that stores the prescribed coordinate of the control point.
int external_local_eqn(const unsigned &i, const unsigned &j)
Return the local equation number corresponding to the j-th value stored at the i-th external data...
DisplacementControlElement(SolidFiniteElement *controlled_element_pt, const Vector< double > &controlled_point, const unsigned &controlled_direction, double *control_position_value_pt, Data *displacement_control_load_pt)
Constructor. Pass:
DisplacementControlElement(const DisplacementControlElement &)
Broken copy constructor.
DisplacementControlElement(SolidFiniteElement *controlled_element_pt, const Vector< double > &controlled_point, const unsigned &controlled_direction, double *control_position_value_pt)
Constructor. Pass:
int internal_local_eqn(const unsigned &i, const unsigned &j) const
Return the local equation number corresponding to the j-th value stored at the i-th internal data...