31 #ifndef OOMPH_KIRCHHOFF_LOVE_BEAM_ELEMENTS_HEADER 32 #define OOMPH_KIRCHHOFF_LOVE_BEAM_ELEMENTS_HEADER 36 #include <oomph-lib-config.h> 40 #include "../generic/hermite_elements.h" 41 #include "../generic/geom_objects.h" 42 #include "../generic/fsi.h" 43 #include "../generic/block_preconditioner.h" 237 const double &
h()
const {
return *
H_pt;}
300 void get_energy(
double& pot_en,
double& kin_en);
304 void get_energy(
double &stretch,
double &bend,
double &kin_en);
327 void output(std::ostream &outfile);
330 void output(std::ostream &outfile,
const unsigned &n_plot);
334 void output(
const unsigned&
t, std::ostream &outfile,
const unsigned &n_plot)
const;
337 void output(FILE* file_pt);
340 void output(FILE* file_pt,
const unsigned &n_plot);
344 void output(
const unsigned& t, FILE* file_pt,
const unsigned &n_plot)
const;
369 Normal_points_into_fluid(true)
373 setup_fsi_wall_element(n_lagr,n_dim);
390 void dposition_dlagrangian_at_local_coordinate(
416 fluid_load_vector(intpt,N,fsi_load);
420 if (!Normal_points_into_fluid) {sign = -1.0;}
423 for(
unsigned i=0;
i<2;
i++)
425 load[
i] += sign*fsi_load[
i];
438 this->fill_in_jacobian_from_external_interaction_by_fd(jacobian);
451 const bool& use_coordinate_as_initial_guess=
false);
469 std::list<std::pair<unsigned long,unsigned> >& dof_lookup_list)
const;
531 "Don't call empty constructor for ClampedSlidingHermiteBeamBoundaryConditionElement ",
532 OOMPH_CURRENT_FUNCTION,
533 OOMPH_EXCEPTION_LOCATION);
542 "ClampedSlidingHermiteBeamBoundaryConditionElement");
562 Vector_to_symmetry_line[0]=vector_to_symmetry_line[0];
563 Vector_to_symmetry_line[1]=vector_to_symmetry_line[1];
564 Normal_to_symmetry_line[0]=normal_to_symmetry_line[0];
565 Normal_to_symmetry_line[1]=normal_to_symmetry_line[1];
579 void output(std::ostream &outfile,
const unsigned &n_plot)
589 void output(FILE* file_pt,
const unsigned &n_plot)
void broken_copy(const std::string &class_name)
Issue error message and terminate execution.
virtual void load_vector(const unsigned &intpt, const Vector< double > &xi, const Vector< double > &x, const Vector< double > &N, Vector< double > &load)
Get the load vector: Pass number of integration point (dummy), Lagr. and Eulerian coordinate and norm...
ClampedSlidingHermiteBeamBoundaryConditionElement(const ClampedSlidingHermiteBeamBoundaryConditionElement &dummy)
Broken copy constructor.
This is a base class for all SolidFiniteElements that participate in FSI computations. These elements provide interfaces and generic funcionality for the two additional roles that SolidFiniteElements play in FSI problems:They parameterise the domain boundary for the fluid domain. To allow them to play this role, FSIWallElements are derived from the SolidFiniteElement and the GeomObject class, indicating that the every specific FSIWallElement must implement the pure virtual function GeomObject::position(...) which should compute the position vector to a point in the SolidFiniteElement, parametrised by its local coordinates.In FSI problems fluid exerts a traction onto the wall and this traction must be added to any other load terms (such as an external pressure acting on an elastic pipe) that are already applied to the SolidFiniteElements by other means.
const double & sigma0() const
Return the axial prestress.
Vector< double > Vector_to_symmetry_line
Vector to some point on the symmetry line along which the end of the beam is sliding.
void output(std::ostream &outfile, const unsigned &n_plot)
Output function – forward to broken version in FiniteElement until somebody decides what exactly the...
virtual void output(std::ostream &outfile)
Output the element data — typically the values at the nodes in a format suitable for post-processing...
double *& sigma0_pt()
Return a pointer to axial prestress.
void wall_profile(const Vector< double > &xi, const Vector< double > &x, double &h_ratio)
Get the wall profile: Pass Lagrangian & Eulerian coordinate and return the wall profile (not all of t...
KirchhoffLoveBeamEquations()
Constructor. Set default values for all physical parameters and zero traction.
unsigned ndof_types() const
The number of "DOF types" that degrees of freedom in this element are sub-divided into: Just the soli...
static void Unit_profile_fct(const Vector< double > &xi, const Vector< double > &x, double &h_ratio)
Default profile function (constant thickness 'h_0')
virtual void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Get FE jacobian and residuals (Jacobian done by finite differences)
A general Finite Element class.
void(* Wall_profile_fct_pt)(const Vector< double > &xi, const Vector< double > &x, double &h_ratio)
Pointer to wall profile function: Its arguments are: Lagrangian coordinate, Eulerian coordinate...
HermiteBeamElement()
Constructor (empty)
double *& h_pt()
Return a pointer to non-dim. wall thickness.
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Return the residuals for the equations of Kirchhoff-Love beam theory with linear constitutive equatio...
FaceGeometry()
Constructor [this was only required explicitly from gcc 4.5.2 onwards...].
ClampedSlidingHermiteBeamBoundaryConditionElement()
Broken empty constructor.
void(* Load_vector_fct_pt)(const Vector< double > &xi, const Vector< double > &x, const Vector< double > &N, Vector< double > &load)
Pointer to load vector function: Its arguments are: Lagrangian coordinate, Eulerian coordinate...
virtual void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Get the Jacobian and residuals. Wrapper to generic FSI version; that catches the case when we replace...
Vector< double > Normal_to_symmetry_line
Normal vector to the symmetry line along which the end of the beam is sliding.
void load_vector(const unsigned &intpt, const Vector< double > &xi, const Vector< double > &x, const Vector< double > &N, Vector< double > &load)
Get the load vector: Pass number of the integration point, Lagr. coordinate, Eulerian coordinate and ...
~FSIHermiteBeamElement()
Destructor: empty.
const double & h() const
Return the non-dimensional wall thickness.
FSIHermiteBeamElement()
Constructor: Create beam element as FSIWallElement (and thus, by inheritance, a GeomObject). By default, we assume that the normal vector computed by KirchhoffLoveBeamEquations::get_normal(...) points into the fluid. If this is not the case, overwrite this with the access function FSIHermiteBeamElement::set_normal_pointing_out_of_fluid()
void get_normal(const Vector< double > &s, Vector< double > &N)
Get normal vector on wall.
double * H_pt
Pointer to wall thickness.
const double & lambda_sq() const
Return the timescale ratio (non-dimensional density)
static double Default_lambda_sq_value
Static default value for timescale ratio (1.0 – for natural scaling)
virtual void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned > > &dof_lookup_list) const
Create a list of pairs for the unknowns that this element is "in charge of" – ignore any unknowns as...
void output(std::ostream &outfile)
static void Zero_traction_fct(const Vector< double > &xi, const Vector< double > &x, const Vector< double > &N, Vector< double > &load)
Default load function (zero traction)
Hermite Kirchhoff Love beam. Implements KirchhoffLoveBeamEquations using 2-node Hermite elements as t...
static double Default_h_value
Static default value for non-dim wall thickness.
void fill_in_contribution_to_residuals_beam(Vector< double > &residuals)
Return the residuals for the equations of Kirchhoff-Love beam theory with linear constitutive equatio...
double * Lambda_sq_pt
Pointer to Timescale ratio (non-dim. density)
GeomObject *& undeformed_beam_pt()
Return a Pointer to geometric object that specifies the beam's undeformed geometry.
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function – forward to broken version in FiniteElement until somebody decides what exa...
void set_normal_pointing_out_of_fluid()
Set the normal computed by KirchhoffLoveBeamEquations::get_normal(...) to point out of the fluid...
void(*&)(const Vector< double > &xi, const Vector< double > &x, const Vector< double > &N, Vector< double > &load) load_vector_fct_pt()
Reference to the load vector function pointer.
void set_normal_pointing_into_fluid()
Set the normal computed by KirchhoffLoveBeamEquations::get_normal(...) to point into the fluid...
void get_non_unit_tangent(const Vector< double > &s, Vector< double > &r, Vector< double > &drds)
Get position vector to and non-unit tangent vector on wall: dr/ds.
void set_symmetry_line(const Vector< double > &vector_to_symmetry_line, const Vector< double > &normal_to_symmetry_line)
Broken assignment operator.
GeomObject * Undeformed_beam_pt
Pointer to the GeomObject that specifies the beam's undeformed midplane.
void get_energy(double &pot_en, double &kin_en)
Get potential (strain) and kinetic energy of the element.
void set_nodal_dimension(const unsigned &nodal_dim)
Set the dimension of the nodes in the element. This will typically only be required when constructing...
void locate_zeta(const Vector< double > &zeta, GeomObject *&geom_object_pt, Vector< double > &s, const bool &use_coordinate_as_initial_guess=false)
For a given value of zeta, the "global" intrinsic coordinate of a mesh of FiniteElements represented ...
void(*&)(const Vector< double > &xi, const Vector< double > &x, double &h_ratio) wall_profile_fct_pt()
Reference to the wall thickness ratio profile function pointer.
double * Sigma0_pt
Pointer to axial prestress.
void output(FILE *file_pt)
static double Default_sigma0_value
Static default value for 2nd Piola Kirchhoff prestress.
SolidFiniteElement class.
bool Normal_points_into_fluid
double *& lambda_sq_pt()
Return a pointer to timescale ratio (nondim density)