31 #ifndef OOMPH_KIRCHHOFF_LOVE_SHELL_ELEMENTS_HEADER 32 #define OOMPH_KIRCHHOFF_LOVE_SHELL_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/stored_shape_function_elements.h" 44 #include "../generic/matrices.h" 89 (
double A[2][2],
double Aup[2][2]);
132 const unsigned &intpt,
153 Ignore_membrane_terms=
false;
218 const double &
h()
const {
return *
H_pt;}
251 void get_energy(
double& pot_en,
double& kin_en);
277 void output(std::ostream &outfile,
const unsigned &n_plot)
284 void output(FILE* file_pt,
const unsigned &n_plot)
295 (
double A[2][2],
double Aup[2][2])
298 double det = A[0][0]*A[1][1] - A[0][1]*A[1][0];
301 Aup[0][0] = A[1][1]/det;
302 Aup[0][1] = -A[0][1]/det;
303 Aup[1][0] = -A[1][0]/det;
304 Aup[1][1] = A[0][0]/det;
335 void output_with_time_dep_quantities(std::ostream &outfile,
336 const unsigned &n_plot);
342 void output(std::ostream &outfile,
const unsigned &n_plot);
348 void output(FILE* file_pt,
const unsigned &n_plot);
425 const unsigned &intpt,
432 if (Compute_rate_of_work_by_load_with_fluid_load_only)
434 fluid_load_vector(intpt,N,load);
460 Normal_points_into_fluid(true),
461 Compute_rate_of_work_by_load_with_fluid_load_only(false)
465 setup_fsi_wall_element(n_lagr,n_dim);
482 void dposition_dlagrangian_at_local_coordinate(
491 Compute_rate_of_work_by_load_with_fluid_load_only=
true;
493 Compute_rate_of_work_by_load_with_fluid_load_only=
false;
521 fluid_load_vector(intpt,N,fsi_load);
525 if (!Normal_points_into_fluid) {sign = -1.0;}
528 for(
unsigned i=0;
i<3;
i++)
530 load[
i] += sign*fsi_load[
i];
544 this->fill_in_jacobian_from_external_interaction_by_fd(jacobian);
562 std::list<std::pair<unsigned long,unsigned> >& dof_lookup_list)
const;
621 "Don't call empty constructor for ClampedHermiteShellBoundaryConditionElement",
622 OOMPH_CURRENT_FUNCTION,
623 OOMPH_EXCEPTION_LOCATION);
631 "ClampedHermiteShellBoundaryConditionElement");
638 "ClampedHermiteShellBoundaryConditionElement");
644 Normal_to_clamping_plane[0]=normal_to_clamping_plane[0];
645 Normal_to_clamping_plane[1]=normal_to_clamping_plane[1];
646 Normal_to_clamping_plane[2]=normal_to_clamping_plane[2];
666 for (
unsigned i=0;
i<n;
i++)
668 for (
unsigned j=0;j<m;j++)
684 for (
unsigned i=0;
i<n;
i++)
686 for (
unsigned j=0;j<m;j++)
694 for (
unsigned i=0;
i<n1;
i++)
696 for (
unsigned j=0;j<n2;j++)
698 for (
unsigned k=0;k<n3;k++)
712 void output(std::ostream &outfile,
const unsigned &n_plot);
721 void output(FILE* file_pt,
const unsigned &n_plot)
738 std::list<std::pair<unsigned long,unsigned> >& dof_lookup_list)
const;
double load_rate_of_work()
Get integral of instantaneous rate of work done on the wall due to the load returned by the virtual f...
unsigned nindex2() const
Return the range of index 2 of the shape function object.
Class of matrices containing doubles, and stored as a DenseMatrix<double>, but with solving functiona...
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...
void broken_copy(const std::string &class_name)
Issue error message and terminate execution.
unsigned long nindex3() const
Return the range of index 3 of the derivatives of the shape functions.
static double Default_lambda_sq_value
Static default value for the timescale ratio (1.0 for natural scaling)
void enable_membrane_terms()
Set to renable the calculation of membrane terms (default)
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.
bool Normal_points_into_fluid
Boolean flag to indicate whether the normal is directed into the fluid.
virtual void output(std::ostream &outfile)
Output the element data — typically the values at the nodes in a format suitable for post-processing...
double * Nu_pt
Pointer to Poisson's ratio.
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)
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Return the jacobian is calculated by finite differences by default,.
unsigned ndof_types() const
The number of "DOF types" that degrees of freedom in this element are sub-divided into: Just the soli...
void set_normal_pointing_out_of_fluid()
Set the normal computed by KirchhoffLoveShellEquations::get_normal(...) to point out of the fluid...
const double & lambda_sq() const
Return the timescale ratio (non-dimensional density)
double *& lambda_sq_pt()
Return a pointer to timescale ratio (nondim density)
A general Finite Element class.
void(*&)(const Vector< double > &xi, const Vector< double > &x, const Vector< double > &N, Vector< double > &load) load_vector_fct_pt()
Access to the load vector function pointer.
void set_normal_pointing_into_fluid()
Set the normal computed by KirchhoffLoveShellEquations::get_normal(...) to point into the fluid...
void output(FILE *file_pt)
Overload the output function.
bool Ignore_membrane_terms
Boolean flag to ignore membrane terms.
unsigned long nindex2() const
Return the range of index 2 of the derivatives of the shape functions.
static double Zero_prestress
Static default for prestress (set to zero)
double calculate_contravariant(double A[2][2], double Aup[2][2])
Invert a DIM by DIM matrix.
void output(std::ostream &outfile, const unsigned &n_plot)
Generic FiniteElement output function.
GeomObject * Undeformed_midplane_pt
Pointer to the GeomObject that specifies the undeformed midplane of the shell.
std::pair< double, double > get_strain_and_bend(const Vector< double > &s, DenseDoubleMatrix &strain, DenseDoubleMatrix &bend)
Get strain and bending tensors; returns pair comprising the determinant of the undeformed (*...
unsigned ndof_types() const
The number of "DOF types" that degrees of freedom in this element are sub-divided into: Just the soli...
void output(FILE *file_pt)
static double Default_nu_value
Static default value for the Poisson's ratio.
static double Default_h_value
Static default value for the thickness ratio.
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)
Overload the output function.
bool Compute_rate_of_work_by_load_with_fluid_load_only
Boolean flag to indicate if rate-of-work by load is to be based on the fluid traction only...
DenseMatrix< double * > Prestress_pt
Pointer to membrane pre-stress terms – should probably generalise this to function pointers at some ...
void disable_membrane_terms()
Set to disable the calculation of membrane terms.
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. coordinate and normal vector and...
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Overload the standard fill in residuals contribution.
const double & nu() const
Return the Poisson's ratio.
const double & h() const
Return the wall thickness to undeformed radius ratio.
void set_prestress_pt(const unsigned &i, const unsigned &j, double *value_pt)
Set pointer to (i,j)-th component of second Piola Kirchhoff membrane prestress to specified value (au...
void output(FILE *file_pt, const unsigned &n_plot)
Generic FiniteElement output function.
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(* 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...
ClampedHermiteShellBoundaryConditionElement(const ClampedHermiteShellBoundaryConditionElement &dummy)
Broken copy constructor.
void shape(const double &s, double *Psi)
Definition for 1D Lagrange shape functions. The value of all the shape functions at the local coordin...
HermiteShellElement()
Constructor, there are no internal data points.
void shape(const Vector< double > &s, Shape &psi) const
Calculate the geometric shape functions at local coordinate s. Set any "superfluous" shape functions ...
FSIDiagHermiteShellElement()
Constructor: Create shell element as FSIWallElement (and thus, by inheritance, a GeomObject) with two...
DiagHermiteShellElement()
Constructor, there are no internal data points.
unsigned long nindex1() const
Return the range of index 1 of the derivatives of the shape functions.
double * H_pt
Pointer to dimensionless wall thickness.
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 ...
Vector< double > Normal_to_clamping_plane
Normal vector to the clamping plane.
void broken_assign(const std::string &class_name)
Issue error message and terminate execution.
double prestress(const unsigned &i, const unsigned &j)
Return (i,j)-th component of second Piola Kirchhoff membrane prestress.
virtual void load_vector_for_rate_of_work_computation(const unsigned &intpt, const Vector< double > &xi, const Vector< double > &x, const Vector< double > &N, Vector< double > &load)
Get the load vector for the computation of the rate of work done by the load. Can switch between full...
void output(std::ostream &outfile)
Overload the output function.
void fill_in_contribution_to_residuals_shell(Vector< double > &residuals)
Return the residuals for the equations of KL shell theory.
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...
unsigned nindex1() const
Return the range of index 1 of the shape function object.
Class for dense matrices, storing all the values of the matrix as a pointer to a pointer with assorte...
double *& nu_pt()
Return a pointer to the Poisson ratio.
void dshape_local(const Vector< double > &s, Shape &psi, DShape &dpsids) const
Calculate the geometric shape functions at local coordinate s. Set any "superfluous" shape functions ...
double *& h_pt()
Return a pointer to the non-dim wall thickness.
double fluid_load_rate_of_work()
Get integral of instantaneous rate of work done on the wall due to the fluid load returned by the fun...
ClampedHermiteShellBoundaryConditionElement()
Broken empty constructor.
GeomObject *& undeformed_midplane_pt()
Return a reference to geometric object that specifies the shell's undeformed geometry.
KirchhoffLoveShellEquations()
Constructor: Initialise physical parameter values to defaults.
double * Lambda_sq_pt
Pointer to timescale ratio (non-dimensional density)
void output(std::ostream &outfile)
Generic FiniteElement output function.
virtual void load_vector_for_rate_of_work_computation(const unsigned &intpt, const Vector< double > &xi, const Vector< double > &x, const Vector< double > &N, Vector< double > &load)
Get the load vector for the computation of the rate of work done by the load. Here we simply forward ...
void operator=(const ClampedHermiteShellBoundaryConditionElement &)
Broken assignment operator.
FaceGeometry()
Constructor [this was only required explicitly from gcc 4.5.2 onwards...].
void get_energy(double &pot_en, double &kin_en)
Get potential (strain) and kinetic energy of the element.
void output(FILE *file_pt)
Generic FiniteElement output function.
SolidFiniteElement class.
~FSIDiagHermiteShellElement()
Destructor: empty.
void get_normal(const Vector< double > &s, Vector< double > &N)
Get normal vector.
void output(std::ostream &outfile)
void set_symmetry_line(const Vector< double > &normal_to_clamping_plane)
Set normal vector to clamping plane.
void resize(const unsigned long &n)