27 #ifndef OOMPH_KIRCHHOFF_LOVE_SHELL_ELEMENTS_HEADER
28 #define OOMPH_KIRCHHOFF_LOVE_SHELL_ELEMENTS_HEADER
32 #include <oomph-lib-config.h>
36 #include "../generic/hermite_elements.h"
37 #include "../generic/geom_objects.h"
38 #include "../generic/fsi.h"
39 #include "../generic/stored_shape_function_elements.h"
40 #include "../generic/matrices.h"
124 const unsigned& intpt,
213 const double&
nu()
const
219 const double&
h()
const
270 void get_energy(
double& pot_en,
double& kin_en);
299 void output(std::ostream& outfile,
const unsigned& n_plot)
311 void output(FILE* file_pt,
const unsigned& n_plot)
325 double det = A[0][0] * A[1][1] - A[0][1] * A[1][0];
328 Aup[0][0] = A[1][1] / det;
329 Aup[0][1] = -A[0][1] / det;
330 Aup[1][0] = -A[1][0] / det;
331 Aup[1][1] = A[0][0] / det;
359 const unsigned& n_plot);
368 void output(std::ostream& outfile,
const unsigned& n_plot);
377 void output(FILE* file_pt,
const unsigned& n_plot);
443 const unsigned& intpt,
555 for (
unsigned i = 0;
i < 3;
i++)
557 load[
i] += sign * fsi_load[
i];
589 std::list<std::pair<unsigned long, unsigned>>& dof_lookup_list)
const;
644 "ClampedHermiteShellBoundaryConditionElement",
645 OOMPH_CURRENT_FUNCTION,
646 OOMPH_EXCEPTION_LOCATION);
681 for (
unsigned i = 0;
i < n;
i++)
683 for (
unsigned j = 0; j < m; j++)
699 for (
unsigned i = 0;
i < n;
i++)
701 for (
unsigned j = 0; j < m; j++)
706 unsigned n1 = dpsids.
nindex1();
707 unsigned n2 = dpsids.
nindex2();
708 unsigned n3 = dpsids.
nindex3();
709 for (
unsigned i = 0;
i < n1;
i++)
711 for (
unsigned j = 0; j < n2; j++)
713 for (
unsigned k = 0; k < n3; k++)
715 dpsids(
i, j, k) = 0.0;
730 void output(std::ostream& outfile,
const unsigned& n_plot);
742 void output(FILE* file_pt,
const unsigned& n_plot)
761 std::list<std::pair<unsigned long, unsigned>>& dof_lookup_list)
const;
///////////////////////////////////////////////////////////////////// ///////////////////////////////...
void output(std::ostream &outfile)
Output function – forward to broken version in FiniteElement until somebody decides what exactly they...
unsigned ndof_types() const
The number of "DOF types" that degrees of freedom in this element are sub-divided into: Just the soli...
ClampedHermiteShellBoundaryConditionElement()
Broken empty constructor.
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...
void set_symmetry_line(const Vector< double > &normal_to_clamping_plane)
Set normal vector to clamping plane.
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 ...
void operator=(const ClampedHermiteShellBoundaryConditionElement &)=delete
Broken assignment operator.
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Fill in the element's contribution to its residual vector.
ClampedHermiteShellBoundaryConditionElement(const ClampedHermiteShellBoundaryConditionElement &dummy)=delete
Broken copy constructor.
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function – forward to broken version in FiniteElement until somebody decides what exac...
Vector< double > Normal_to_clamping_plane
Normal vector to the clamping plane.
void shape(const Vector< double > &s, Shape &psi) const
Calculate the geometric shape functions at local coordinate s. Set any "superfluous" shape functions ...
void output(FILE *file_pt)
C-style output function – forward to broken version in FiniteElement until somebody decides what exac...
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
unsigned long nindex3() const
Return the range of index 3 of the derivatives of the shape functions.
unsigned long nindex2() const
Return the range of index 2 of the derivatives of the shape functions.
unsigned long nindex1() const
Return the range of index 1 of the derivatives of the shape functions.
Class of matrices containing doubles, and stored as a DenseMatrix<double>, but with solving functiona...
void resize(const unsigned long &n)
Resize to a square nxn matrix; any values already present will be transfered.
An element that solves the Kirchhoff-Love shell theory equations using Hermite interpolation (displac...
DiagHermiteShellElement()
Constructor, there are no internal data points.
void fill_in_jacobian_from_external_interaction_by_fd(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Calculate the contributions to the jacobian from all external interaction degrees of freedom (geometr...
///////////////////////////////////////////////////////////////////// ///////////////////////////////...
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 ...
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...
void set_normal_pointing_out_of_fluid()
Set the normal computed by KirchhoffLoveShellEquations::get_normal(...) to point out of the fluid.
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.
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...
FSIDiagHermiteShellElement()
Constructor: Create shell element as FSIWallElement (and thus, by inheritance, a GeomObject) with two...
~FSIDiagHermiteShellElement()
Destructor: empty.
void dposition_dlagrangian_at_local_coordinate(const Vector< double > &s, DenseMatrix< double > &drdxi) const
Derivative of position vector w.r.t. the SolidFiniteElement's Lagrangian coordinates; evaluated at cu...
unsigned ndof_types() const
The number of "DOF types" that degrees of freedom in this element are sub-divided into: Just the soli...
bool Normal_points_into_fluid
Boolean flag to indicate whether the normal is directed into the fluid.
void set_normal_pointing_into_fluid()
Set the normal computed by KirchhoffLoveShellEquations::get_normal(...) to point into the fluid.
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...
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 setup_fsi_wall_element(const unsigned &nlagr_solid, const unsigned &ndim_fluid)
Setup: Assign storage – pass the Eulerian dimension of the "adjacent" fluid elements and the number o...
void fluid_load_vector(const unsigned &intpt, const Vector< double > &N, Vector< double > &load)
Get FE Jacobian by systematic finite differencing w.r.t. nodal positition Data, internal and external...
int & face_index()
Index of the face (a number that uniquely identifies the face in the element)
FaceGeometry()
Constructor [this was only required explicitly from gcc 4.5.2 onwards...].
//////////////////////////////////////////////////////////////////// ////////////////////////////////...
A general Finite Element class.
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...
virtual void output(std::ostream &outfile)
Output the element data — typically the values at the nodes in a format suitable for post-processing.
/////////////////////////////////////////////////////////////////////
An element that solves the Kirchhoff-Love shell theory equations using Hermite interpolation (displac...
void output(FILE *file_pt)
Overload the output function.
void output_with_time_dep_quantities(std::ostream &outfile, const unsigned &n_plot)
Output position veloc and accel.
void output(std::ostream &outfile)
Overload the output function.
HermiteShellElement()
Constructor, there are no internal data points.
A class for elements that solves the equations of Kirchhoff Love shell thin-shell theory.
void fill_in_contribution_to_residuals_shell(Vector< double > &residuals)
Helper function to Return the residuals for the equations of KL shell theory. This is used to prevent...
double *& lambda_sq_pt()
Return a pointer to timescale ratio (nondim density)
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)
const double & nu() const
Return the Poisson's ratio.
double *& h_pt()
Return a pointer to the non-dim wall thickness.
void output(FILE *file_pt, const unsigned &n_plot)
Generic FiniteElement output function.
bool Ignore_membrane_terms
Boolean flag to ignore membrane terms.
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Return the jacobian is calculated by finite differences by default,.
double * H_pt
Pointer to dimensionless wall thickness.
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.
KirchhoffLoveShellEquations()
Constructor: Initialise physical parameter values to defaults.
void output(std::ostream &outfile, const unsigned &n_plot)
Generic FiniteElement output function.
double prestress(const unsigned &i, const unsigned &j)
Return (i,j)-th component of second Piola Kirchhoff membrane prestress.
static double Default_lambda_sq_value
Static default value for the timescale ratio (1.0 for natural scaling)
double calculate_contravariant(double A[2][2], double Aup[2][2])
Invert a DIM by DIM matrix.
DenseMatrix< double * > Prestress_pt
Pointer to membrane pre-stress terms – should probably generalise this to function pointers at some p...
double * Lambda_sq_pt
Pointer to timescale ratio (non-dimensional density)
static double Zero_prestress
Static default for prestress (set to zero)
void get_energy(double &pot_en, double &kin_en)
Get potential (strain) and kinetic energy of the element.
void output(std::ostream &outfile)
Generic FiniteElement output function.
void get_normal(const Vector< double > &s, Vector< double > &N)
Get normal vector.
const double & lambda_sq() const
Return the timescale ratio (non-dimensional density)
double * Nu_pt
Pointer to Poisson's ratio.
static double Default_h_value
Static default value for the thickness ratio.
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Overload the standard fill in residuals contribution.
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...
GeomObject *& undeformed_midplane_pt()
Return a reference to geometric object that specifies the shell's undeformed geometry.
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,...
static double Default_nu_value
Static default value for the Poisson's 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...
double *& nu_pt()
Return a pointer to the Poisson ratio.
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...
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 (*....
void enable_membrane_terms()
Set to renable the calculation of membrane terms (default)
void output(FILE *file_pt)
Generic FiniteElement output function.
void disable_membrane_terms()
Set to disable the calculation of membrane terms.
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 ...
const double & h() const
Return the wall thickness to undeformed radius ratio.
GeomObject * Undeformed_midplane_pt
Pointer to the GeomObject that specifies the undeformed midplane of the shell.
An OomphLibError object which should be thrown when an run-time error is encountered....
A Class for shape functions. In simple cases, the shape functions have only one index that can be tho...
unsigned nindex1() const
Return the range of index 1 of the shape function object.
unsigned nindex2() const
Return the range of index 2 of the shape function object.
SolidQHermiteElements in which we assume the local and global coordinates to be aligned so that the J...
SolidFaceElements combine FaceElements and SolidFiniteElements and overload various functions so they...
////////////////////////////////////////////////////////////////////// //////////////////////////////...
////////////////////////////////////////////////////////////////////
void output(std::ostream &outfile)
Overload the output function.
void shape(const double &s, double *Psi)
Definition for 1D Lagrange shape functions. The value of all the shape functions at the local coordin...
//////////////////////////////////////////////////////////////////// ////////////////////////////////...