76 const unsigned n_dim = 3;
106 for (
unsigned i = 0;
i <
n_dim;
i++)
121 for (
unsigned i = 0;
i <
n_dim;
i++)
143 double norm = 1.0 /
sqrt(N[0] * N[0] + N[1] * N[1] + N[2] * N[2]);
144 for (
unsigned i = 0;
i < 3;
i++)
158 const unsigned n_dim = 3;
191 for (
unsigned i = 0;
i <
n_dim;
i++)
197 for (
unsigned j = 0;
j < 3;
j++)
217 for (
unsigned i = 0;
i <
n_dim;
i++)
233 for (
unsigned j = 0;
j < 3;
j++)
254 for (
unsigned i = 0;
i < 3;
i++)
262 double a[2][2], A[2][2],
aup[2][2],
Aup[2][2];
265 for (
unsigned al = 0;
al < 2;
al++)
267 for (
unsigned be = 0;
be < 2;
be++)
273 for (
unsigned k = 0;
k < 3;
k++)
314 double b[2][2], B[2][2];
340 for (
unsigned i = 0;
i < 2;
i++)
342 for (
unsigned j = 0;
j < 2;
j++)
361 const unsigned n_dim = 3;
416 for (
unsigned i = 0;
i <
n_dim;
i++)
422 for (
unsigned j = 0;
j < 3;
j++)
442 for (
unsigned i = 0;
i <
n_dim;
i++)
458 for (
unsigned j = 0;
j < 3;
j++)
479 for (
unsigned i = 0;
i < 3;
i++)
488 double a[2][2], A[2][2],
aup[2][2],
Aup[2][2], gamma[2][2];
491 for (
unsigned al = 0;
al < 2;
al++)
493 for (
unsigned be = 0;
be < 2;
be++)
499 for (
unsigned k = 0;
k < 3;
k++)
540 double b[2][2], B[2][2];
572 for (
unsigned i = 0;
i < 2;
i++)
574 for (
unsigned j = 0;
j < 2;
j++)
581 double Et[2][2][2][2];
593 for (
unsigned i = 0;
i < 2;
i++)
595 for (
unsigned j = 0;
j < 2;
j++)
597 for (
unsigned k = 0;
k < 2;
k++)
599 for (
unsigned l = 0;
l < 2;
l++)
627 unsigned mix[2][2] = {{0, 2}, {2, 1}};
661 for (
unsigned i = 0;
i < 3;
i++)
680 for (
unsigned i2 = 0;
i2 < 3;
i2++)
696 for (
unsigned al = 0;
al < 2;
al++)
698 for (
unsigned be = 0;
be < 2;
be++)
706 for (
unsigned ga = 0;
ga < 2;
ga++)
708 for (
unsigned de = 0;
de < 2;
de++)
814 std::string error_message =
815 "Warning: Not sure if the energy is computed correctly\n";
816 error_message +=
" for nonzero prestress\n";
847 for (
unsigned i = 0;
i <
n_dim;
i++)
854 for (
unsigned j = 0;
j < 3;
j++)
877 for (
unsigned i = 0;
i <
n_dim;
i++)
889 for (
unsigned j = 0;
j < 3;
j++)
899 for (
unsigned i = 0;
i <
n_dim;
i++)
917 for (
unsigned i = 0;
i < 3;
i++)
926 double a[2][2], A[2][2],
aup[2][2],
Aup[2][2], gamma[2][2];
929 for (
unsigned al = 0;
al < 2;
al++)
931 for (
unsigned be = 0;
be < 2;
be++)
937 for (
unsigned k = 0;
k <
n_dim;
k++)
978 double b[2][2], B[2][2];
1010 for (
unsigned i = 0;
i < 2;
i++)
1012 for (
unsigned j = 0;
j < 2;
j++)
1019 double Et[2][2][2][2];
1026 for (
unsigned i = 0;
i < 2;
i++)
1028 for (
unsigned j = 0;
j < 2;
j++)
1030 for (
unsigned k = 0;
k < 2;
k++)
1032 for (
unsigned l = 0;
l < 2;
l++)
1045 for (
unsigned i = 0;
i < 2;
i++)
1047 for (
unsigned j = 0;
j < 2;
j++)
1049 for (
unsigned k = 0;
k < 2;
k++)
1051 for (
unsigned l = 0;
l < 2;
l++)
1054 Et[
i][
j][
k][
l] * (gamma[
i][
j] * gamma[
k][
l] +
1086 const unsigned n_dim = 3;
1145 for (
unsigned i = 0;
i <
n_dim;
i++)
1174 for (
unsigned i = 0;
i <
n_dim;
i++)
1192 for (
unsigned al = 0;
al < 2;
al++)
1194 for (
unsigned be = 0;
be < 2;
be++)
1199 for (
unsigned k = 0;
k <
n_dim;
k++)
1207 double A_det = A[0][0] * A[1][1] - A[0][1] * A[1][0];
1217 for (
unsigned i = 0;
i <
n_dim;
i++)
1338 throw OomphLibError(
"Undeformed_midplane_pt has not been set",
1339 "FSIDiagHermiteShellElement::dposition_dlagrangian_"
1340 "at_local_coordinate()",
1366 drdxi.initialise(0.0);
1375 for (
unsigned i = 0;
i <
n_dim;
i++)
1402 std::pair<unsigned long, unsigned>
dof_lookup;
1570 double lambda = 0.0;
1631 for (
unsigned i = 0;
i < 3;
i++)
1634 for (
unsigned k = 0;
k < 4;
k++)
1641 double backup =
nod_pt->x_gen(
k,
i);
1703 s[0] = -1.0 +
l * 2.0 / (
n_plot - 1);
1715 double lambda = 0.0;
1716 for (
unsigned j = 0;
j < 2;
j++)
1718 for (
unsigned k = 0;
k < 2;
k++)
1751 double max_error = 0.0;
1771 if (max_error > 1.0e-14)
1773 oomph_info <<
"Warning: Max. error between J_via_s J_via_ipt "
1774 << max_error << std::endl;
1793 std::pair<unsigned long, unsigned>
dof_lookup;
1835 for (
unsigned j = 0;
j <
n_val;
j++)
void output(std::ostream &outfile)
Output function – forward to broken version in FiniteElement until somebody decides what exactly they...
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 fill_in_contribution_to_residuals(Vector< double > &residuals)
Fill in the element's contribution to its residual vector.
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 ...
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
Class of matrices containing doubles, and stored as a DenseMatrix<double>, but with solving functiona...
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 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...
FaceElements are elements that coincide with the faces of higher-dimensional "bulk" elements....
int & face_index()
Index of the face (a number that uniquely identifies the face in the element)
Vector< double > local_coordinate_in_bulk(const Vector< double > &s) const
Return vector of local coordinates in bulk element, given the local coordinates in this FaceElement.
double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s. Overloaded to get information from bulk...
void bulk_position_type_resize(const unsigned &i)
Resize the storage for bulk_position_type to i entries.
FiniteElement *& bulk_element_pt()
Pointer to higher-dimensional "bulk" element.
double J_eulerian(const Vector< double > &s) const
Return the Jacobian of mapping from local to global coordinates at local position s....
double J_eulerian_at_knot(const unsigned &ipt) const
Return the Jacobian of the mapping from local to global coordinates at the ipt-th integration point O...
Vector< unsigned > Nbulk_value
A vector that will hold the number of data values at the nodes that are associated with the "bulk" el...
unsigned & bulk_position_type(const unsigned &i)
Return the position type in the "bulk" element that corresponds to position type i on the FaceElement...
void resize_nodes(Vector< unsigned > &nadditional_data_values)
Provide additional storage for a specified number of values at the nodes of the FaceElement....
FaceGeometry class definition: This policy class is used to allow construction of face elements that ...
A general Finite Element class.
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
void set_nnodal_position_type(const unsigned &nposition_type)
Set the number of types required to interpolate the coordinate.
unsigned nnodal_position_type() const
Return the number of coordinate types that the element requires to interpolate the geometry between t...
double dnodal_position_gen_dt(const unsigned &n, const unsigned &k, const unsigned &i) const
i-th component of time derivative (velocity) of the generalised position, dx(k,i)/dt at local node n....
double size() const
Calculate the size of the element (length, area, volume,...) in Eulerian computational coordinates....
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Return the local equation number corresponding to the i-th value at the n-th local node.
double nodal_position_gen(const unsigned &n, const unsigned &k, const unsigned &i) const
Return the value of the k-th type of the i-th positional variable at the local node n.
unsigned nnode() const
Return the number of nodes.
virtual double interpolated_dxdt(const Vector< double > &s, const unsigned &i, const unsigned &t)
Return t-th time-derivative of the i-th FE-interpolated Eulerian coordinate at local coordinate s.
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
virtual void build_face_element(const int &face_index, FaceElement *face_element_pt)
Function for building a lower dimensional FaceElement on the specified face of the FiniteElement....
double raw_dnodal_position_gen_dt(const unsigned &n, const unsigned &k, const unsigned &i) const
i-th component of time derivative (velocity) of the generalised position, dx(k,i)/dt at local node n....
unsigned nodal_dimension() const
Return the required Eulerian dimension of the nodes in this element.
double raw_nodal_position_gen(const unsigned &n, const unsigned &k, const unsigned &i) const
Return the value of the k-th type of the i-th positional variable at the local node n....
void fill_in_jacobian_from_external_by_fd(Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
Calculate the contributions to the jacobian from the external degrees of freedom using finite differe...
unsigned ndof() const
Return the number of equations/dofs in the element.
unsigned long eqn_number(const unsigned &ieqn_local) const
Return the global equation number corresponding to the ieqn_local-th local equation number.
virtual void get_residuals(Vector< double > &residuals)
Calculate the vector of residuals of the equations in the element. By default initialise the vector t...
unsigned ndim() const
Access function to # of Eulerian coordinates.
virtual void d2position(const Vector< double > &zeta, RankThreeTensor< double > &ddrdzeta) const
2nd derivative of position Vector w.r.t. to coordinates: = ddrdzeta(alpha,beta,i)....
unsigned nlagrangian() const
Access function to # of Lagrangian coordinates.
An element that solves the Kirchhoff-Love shell theory equations using Hermite interpolation (displac...
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.
virtual double knot(const unsigned &i, const unsigned &j) const =0
Return local coordinate s[j] of i-th integration point.
virtual unsigned nweight() const =0
Return the number of integration points of the scheme.
virtual double weight(const unsigned &i) const =0
Return weight of i-th integration point.
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...
const double & lambda_sq() const
Return the timescale ratio (non-dimensional 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)
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,.
const double & h() const
Return the wall thickness to undeformed radius ratio.
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...
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 get_normal(const Vector< double > &s, Vector< double > &N)
Get normal vector.
static double Default_h_value
Static default value for the thickness ratio.
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...
static double Default_nu_value
Static default value for the Poisson's ratio.
const double & nu() const
Return the Poisson's 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 (*....
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 ...
GeomObject * Undeformed_midplane_pt
Pointer to the GeomObject that specifies the undeformed midplane of the shell.
Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a gi...
double value(const unsigned &i) const
Return i-th value (dofs or pinned) at this node either directly or via hanging node representation....
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...
double interpolated_xi(const Vector< double > &s, const unsigned &i) const
Return i-th FE-interpolated Lagrangian coordinate xi[i] at local coordinate s. Overloaded from SolidF...
double lagrangian_position_gen(const unsigned &n, const unsigned &k, const unsigned &i) const
Return Generalised Lagrangian coordinate at local node n. ‘Direction’ i, ‘Type’ k.
double raw_lagrangian_position_gen(const unsigned &n, const unsigned &k, const unsigned &i) const
Return Generalised Lagrangian coordinate at local node n. ‘Direction’ i, ‘Type’ k....
double dshape_lagrangian(const Vector< double > &s, Shape &psi, DShape &dpsidxi) const
Calculate shape functions and derivatives w.r.t. Lagrangian coordinates at local coordinate s....
bool Solve_for_consistent_newmark_accel_flag
Flag to indicate which system of equations to solve when assigning initial conditions for time-depend...
virtual double d2shape_lagrangian_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsidxi, DShape &d2psidxi) const
Return the geometric shape functions and also first and second derivatives w.r.t. Lagrangian coordina...
int position_local_eqn(const unsigned &n, const unsigned &k, const unsigned &j) const
Access function that returns the local equation number that corresponds to the j-th coordinate of the...
virtual double interpolated_xi(const Vector< double > &s, const unsigned &i) const
Return i-th FE-interpolated Lagrangian coordinate xi[i] at local coordinate s.
virtual void fill_in_jacobian_from_solid_position_by_fd(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Use finite differences to calculate the Jacobian entries corresponding to the solid positions....
double d2shape_lagrangian(const Vector< double > &s, Shape &psi, DShape &dpsidxi, DShape &d2psidxi) const
Compute the geometric shape functions and also first and second derivatives w.r.t....
void fill_in_jacobian_for_newmark_accel(DenseMatrix< double > &jacobian)
Fill in the contributions of the Jacobian matrix for the consistent assignment of the initial "accele...
TAdvectionDiffusionReactionElement<NREAGENT,DIM,NNODE_1D> elements are isoparametric triangular DIM-d...
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
OomphInfo oomph_info
Single (global) instantiation of the OomphInfo object – this is used throughout the library as a "rep...