61 unsigned n_dim=load.size();
62 for (
unsigned i=0;
i<n_dim;
i++) {load[
i]=0.0;}
89 std::ostringstream error_message;
90 error_message <<
"Normal vector should have dimension 2, not" 91 << N.size() << std::endl;
94 OOMPH_CURRENT_FUNCTION,
95 OOMPH_EXCEPTION_LOCATION);
99 std::ostringstream error_message;
100 error_message <<
"Position vector should have dimension 2, not" 101 << r.size() << std::endl;
104 OOMPH_CURRENT_FUNCTION,
105 OOMPH_EXCEPTION_LOCATION);
110 std::ostringstream error_message;
111 error_message <<
"Local coordinate should have dimension 1, not" 112 << s.size() << std::endl;
115 OOMPH_CURRENT_FUNCTION,
116 OOMPH_EXCEPTION_LOCATION);
127 unsigned n_node =
nnode();
135 Shape psi(n_node,n_position_type);
138 DShape dpsidxi(n_node,n_position_type,n_lagrangian);
149 for(
unsigned i=0;
i<n_dim;
i++)
153 for(
unsigned j=0;j<n_lagrangian;j++) {interpolated_A(j,
i) = 0.0;}
157 for(
unsigned i=0;
i<n_dim;
i++)
160 for(
unsigned l=0;l<n_node;l++)
163 for(
unsigned k=0;k<n_position_type;k++)
168 for(
unsigned j=0;j<n_lagrangian;j++)
177 double length=pow(interpolated_A(0,0),2) + pow(interpolated_A(0,1),2);
180 N[0] = -interpolated_A(0,1)/sqrt(length);
181 N[1] = interpolated_A(0,0)/sqrt(length);
198 std::ostringstream error_message;
199 error_message <<
"Tangent vector should have dimension 2, not" 200 << drds.size() << std::endl;
203 OOMPH_CURRENT_FUNCTION,
204 OOMPH_EXCEPTION_LOCATION);
208 std::ostringstream error_message;
209 error_message <<
"Position vector should have dimension 2, not" 210 << r.size() << std::endl;
213 OOMPH_CURRENT_FUNCTION,
214 OOMPH_EXCEPTION_LOCATION);
219 std::ostringstream error_message;
220 error_message <<
"Local coordinate should have dimension 1, not" 221 << s.size() << std::endl;
224 OOMPH_CURRENT_FUNCTION,
225 OOMPH_EXCEPTION_LOCATION);
236 unsigned n_node =
nnode();
244 Shape psi(n_node,n_position_type);
247 DShape dpsids(n_node,n_position_type,n_lagrangian);
255 for(
unsigned i=0;
i<n_dim;
i++)
262 for(
unsigned i=0;
i<n_dim;
i++)
265 for(
unsigned l=0;l<n_node;l++)
268 for(
unsigned k=0;k<n_position_type;k++)
304 const unsigned n_node =
nnode();
318 Shape psi(n_node,n_position_type);
321 DShape dpsidxi(n_node,n_position_type,n_lagrangian);
324 DShape d2psidxi(n_node,n_position_type,n_lagrangian);
332 const double HoR_0 =
h();
333 const double sigma_0=
sigma0();
337 for(
unsigned ipt=0;ipt<n_intpt;ipt++)
356 for(
unsigned i=0;
i<n_dim;
i++)
361 for(
unsigned j=0;j<n_lagrangian;j++) {interpolated_A(j,
i) = 0.0;}
363 for(
unsigned j=0;j<n_lagrangian;j++) {interpolated_dAdxi(j,
i) = 0.0;}
367 for(
unsigned l=0;l<n_node;l++)
370 for(
unsigned k=0;k<n_position_type;k++)
374 for(
unsigned i=0;
i<n_lagrangian;
i++)
378 for(
unsigned i=0;
i<n_dim;
i++)
385 for(
unsigned j=0;j<n_lagrangian;j++)
386 {interpolated_A(j,
i) +=
390 for(
unsigned j=0;j<n_lagrangian;j++)
391 {interpolated_dAdxi(j,
i) +=
408 double amet=0.0, Amet=0.0;
411 for(
unsigned k=0;k<n_dim;k++)
413 amet += a(0,k)*a(0,k);
414 Amet += interpolated_A(0,k)*interpolated_A(0,k);
417 double gamma = 0.5*(Amet - amet);
426 n[0] = -a(0,1)/sqrt(adet);
427 n[1] = a(0,0)/sqrt(adet);
429 N[0] = -interpolated_A(0,1)/sqrt(Adet);
430 N[1] = interpolated_A(0,0)/sqrt(Adet);
433 double sqrt_Adet=sqrt(Adet);
436 double b = n[0]*dadxi(0,0,0) + n[1]*dadxi(0,0,1);
437 double B = N[0]*interpolated_dAdxi(0,0) + N[1]*interpolated_dAdxi(0,1);
455 double HoR=HoR_0*h_ratio;
458 double normal_var[n_dim][n_dim];
466 for(
unsigned n=0;n<n_node;n++)
470 for(
unsigned k=0;k<n_position_type;k++)
476 normal_var[0][0] = interpolated_A(0,0)*interpolated_A(0,1)*
477 dpsidxi(n,k,0)/(sqrt_Adet*sqrt_Adet*sqrt_Adet);
480 (interpolated_A(0,1)*interpolated_A(0,1)/Adet-1.0)*
481 dpsidxi(n,k,0)/(sqrt_Adet);
484 (1.0-interpolated_A(0,0)*interpolated_A(0,0)/Adet)*
485 dpsidxi(n,k,0)/(sqrt_Adet);
487 normal_var[1][1] = -interpolated_A(0,0)*interpolated_A(0,1)*
488 dpsidxi(n,k,0)/(sqrt_Adet*sqrt_Adet*sqrt_Adet);
491 for (
unsigned i=0;
i<n_dim;
i++)
502 residuals[local_eqn] -=
503 h_ratio*(1.0/HoR)*f[
i]*psi(n,k)*W*sqrt(Adet);
505 residuals[local_eqn] +=
506 h_ratio*Lambda_sq*accel[
i]*psi(n,k)*W*sqrt(adet);
509 residuals[local_eqn] +=
510 h_ratio*(sigma_0+gamma)*interpolated_A(0,
i)
511 *dpsidxi(n,k,0)*W*sqrt(adet);
514 residuals[local_eqn] -=
515 h_ratio*(1.0/12.0)*HoR*HoR*kappa*
516 (N[
i]*d2psidxi(n,k,0)+
517 normal_var[
i][0]*interpolated_dAdxi(0,0)+
518 normal_var[
i][1]*interpolated_dAdxi(0,1))
548 unsigned n_dof =
ndof();
589 double &bend,
double& kin_en)
603 unsigned n_node =
nnode();
614 Shape psi(n_node,n_position_dofs);
617 DShape dpsidxi(n_node,n_position_dofs,n_lagrangian);
620 DShape d2psidxi(n_node,n_position_dofs,n_lagrangian);
634 for(
unsigned ipt=0;ipt<n_intpt;ipt++)
655 for(
unsigned i=0;
i<n_dim;
i++)
661 for(
unsigned j=0;j<n_lagrangian;j++) {interpolated_A(j,
i) = 0.0;}
663 for(
unsigned j=0;j<n_lagrangian;j++) {interpolated_dAdxi(j,
i) = 0.0;}
667 for(
unsigned l=0;l<n_node;l++)
670 for(
unsigned k=0;k<n_position_dofs;k++)
675 for(
unsigned i=0;
i<n_lagrangian;
i++)
679 for(
unsigned i=0;
i<n_dim;
i++)
687 for(
unsigned j=0;j<n_lagrangian;j++)
688 {interpolated_A(j,
i) +=
692 for(
unsigned j=0;j<n_lagrangian;j++)
693 {interpolated_dAdxi(j,
i) +=
702 for(
unsigned i=0;
i<n_dim;
i++) {veloc_sq += veloc[
i]*veloc[
i];}
714 double amet=0.0, Amet=0.0;
718 for(
unsigned k=0;k<n_dim;k++)
720 amet += a(0,k)*a(0,k);
721 Amet += interpolated_A(0,k)*interpolated_A(0,k);
725 double gamma = 0.5*(Amet - amet);
734 n[0] = -a(0,1)/sqrt(adet);
735 n[1] = a(0,0)/sqrt(adet);
737 N[0] = -interpolated_A(0,1)/sqrt(Adet);
738 N[1] = interpolated_A(0,0)/sqrt(Adet);
741 double b = n[0]*dadxi(0,0,0) + n[1]*dadxi(0,0,1);
742 double B = N[0]*interpolated_dAdxi(0,0) + N[1]*interpolated_dAdxi(0,1);
745 double kappa = b -
B;
754 double HoR=HoR_0*h_ratio;
757 stretch += h_ratio*0.5*(gamma+sigma_0)*(gamma+sigma_0)*W*sqrt(adet);
758 bend += h_ratio*0.5*(1.0/12.0)*HoR*HoR*kappa*kappa*W*sqrt(adet);
759 kin_en += h_ratio*0.5*Lambda_sq*veloc_sq*W*sqrt(adet);
768 const unsigned &n_plot)
const 771 #ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES 774 "Order of function arguments has changed between versions 0.8 and 0.85",
775 "HermiteBeamElement::output(...)",
776 OOMPH_EXCEPTION_LOCATION);
783 outfile <<
"ZONE I=" << n_plot << std::endl;
789 for(
unsigned l=0;l<n_plot;l++)
791 s[0] = -1.0 + l*2.0/(n_plot-1);
794 for (
unsigned i=0;
i<n_dim;
i++)
798 outfile << std::endl;
812 outfile <<
"ZONE I=" << n_plot << std::endl;
821 unsigned n_node =
nnode();
831 Shape psi(n_node,n_position_dofs);
834 for(
unsigned l1=0;l1<n_plot;l1++)
836 s[0] = -1.0 + l1*2.0/(n_plot-1);
842 interpolated_xi[0]=0.0;
845 for(
unsigned i=0;
i<n_dim;
i++)
855 for(
unsigned l=0;l<n_node;l++)
858 for(
unsigned k=0;k<n_position_dofs;k++)
862 for(
unsigned i=0;
i<n_lagrangian;
i++)
868 for(
unsigned i=0;
i<n_dim;
i++)
877 double scalar_accel=0.0;
878 double scalar_veloc=0.0;
879 double scalar_posn=0.0;
882 for (
unsigned i=0;
i<n_dim;
i++)
884 outfile << posn[
i] <<
" " ;
885 scalar_posn+=pow(posn[
i],2);
887 outfile << interpolated_xi[0] <<
" ";
888 for (
unsigned i=0;
i<n_dim;
i++)
890 outfile << veloc[
i] <<
" " ;
891 scalar_veloc+=pow(veloc[
i],2);
893 for (
unsigned i=0;
i<n_dim;
i++)
895 outfile << accel[
i] <<
" " ;
896 scalar_accel+=pow(accel[
i],2);
898 outfile << sqrt(scalar_posn) <<
" ";
899 outfile << sqrt(scalar_veloc) <<
" ";
900 outfile << sqrt(scalar_accel) <<
" ";
901 outfile << std::endl;
925 const unsigned &n_plot)
const 928 #ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES 931 "Order of function arguments has changed between versions 0.8 and 0.85",
932 "HermiteBeamElement::output(...)",
933 OOMPH_EXCEPTION_LOCATION);
941 fprintf(file_pt,
"ZONE I=%i \n",n_plot);
947 for(
unsigned l=0;l<n_plot;l++)
949 s[0] = -1.0 + l*2.0/(n_plot-1);
952 for (
unsigned i=0;
i<n_dim;
i++)
958 fprintf(file_pt,
"\n");
973 fprintf(file_pt,
"ZONE I=%i \n",n_plot);
982 unsigned n_node =
nnode();
992 Shape psi(n_node,n_position_dofs);
995 for(
unsigned l1=0;l1<n_plot;l1++)
997 s[0] = -1.0 + l1*2.0/(n_plot-1);
1003 interpolated_xi[0]=0.0;
1006 for(
unsigned i=0;
i<n_dim;
i++)
1016 for(
unsigned l=0;l<n_node;l++)
1019 for(
unsigned k=0;k<n_position_dofs;k++)
1023 for(
unsigned i=0;
i<n_lagrangian;
i++)
1029 for(
unsigned i=0;
i<n_dim;
i++)
1038 double scalar_accel=0.0;
1039 double scalar_veloc=0.0;
1040 double scalar_posn=0.0;
1043 for (
unsigned i=0;
i<n_dim;
i++)
1046 fprintf(file_pt,
"%g ",posn[
i]);
1047 scalar_posn+=pow(posn[i],2);
1050 fprintf(file_pt,
"%g ",interpolated_xi[0]);
1051 for (
unsigned i=0;
i<n_dim;
i++)
1054 fprintf(file_pt,
"%g ",veloc[
i]);
1055 scalar_veloc+=pow(veloc[i],2);
1057 for (
unsigned i=0;
i<n_dim;
i++)
1060 fprintf(file_pt,
"%g ",accel[
i]);
1061 scalar_accel+=pow(accel[i],2);
1064 fprintf(file_pt,
"%g ",sqrt(scalar_posn));
1066 fprintf(file_pt,
"%g ",sqrt(scalar_veloc));
1068 fprintf(file_pt,
"%g ",sqrt(scalar_accel));
1070 fprintf(file_pt,
"\n");
1101 const bool& use_coordinate_as_initial_guess)
1104 unsigned lo=0, hi=1;
1111 double epsilon = 1.0e-13;
1117 {geom_object_pt = 0;
return;}
1127 geom_object_pt =
this;
1134 s[0] = -1.0 + zeta_fraction*2.0;
1140 if (std::fabs(zeta[0]-zeta_test[0])>epsilon)
1142 std::ostringstream error_stream;
1144 <<
"The zeta coordinate " << zeta_test[0] <<
" \n" 1145 <<
"computed by interpolated_zeta() for s[0]=" << s[0] <<
" \n" 1146 <<
"differs by more than the tolerance ("<< epsilon <<
") from \n " 1147 <<
"the required value " << zeta_test[0] <<
" \n\n" 1148 <<
"You're probably using a mesh with non-uniformly \n " 1149 <<
"spaced FSIHermiteBeamElements. For such cases the root finding" 1150 <<
"in FSIHermiteBeamElement::locate_zeta() must be replaced " 1151 <<
"by a proper Newton method or some such thing...\n";
1153 "FSIHermiteBeamElement::locate_zeta()",
1154 OOMPH_EXCEPTION_LOCATION);
1162 if(s[0] > 1.0) {s[0] = 1.0;}
1163 if(s[0] < -1.0) {s[0] = -1.0;}
1180 "Undeformed_beam_pt has not been set",
1181 "FSIHermiteBeamElement::dposition_dlagrangian_at_local_coordinate()",
1182 OOMPH_EXCEPTION_LOCATION);
1191 unsigned n_node =
nnode();
1196 Shape psi(n_node,n_position_type);
1197 DShape dpsidxi(n_node,n_position_type,n_lagrangian);
1207 for(
unsigned l=0;l<n_node;l++)
1210 for(
unsigned k=0;k<n_position_type;k++)
1213 for(
unsigned i=0;
i<n_dim;
i++)
1216 for(
unsigned j=0;j<n_lagrangian;j++)
1236 std::list<std::pair<unsigned long,unsigned> >& dof_lookup_list)
const 1240 std::pair<unsigned,unsigned> dof_lookup;
1243 const unsigned n_node = this->
nnode();
1250 int local_unknown=0;
1253 for(
unsigned n=0;n<n_node;n++)
1256 for(
unsigned k=0;k<n_position_type;k++)
1259 for(
unsigned i=0;
i<nodal_dim;
i++)
1265 if (local_unknown >= 0)
1269 dof_lookup.first = this->
eqn_number(local_unknown);
1270 dof_lookup.second = 0;
1273 dof_lookup_list.push_front(dof_lookup);
1298 const int &face_index) :
1326 nadditional_data_values[0]=2;
1372 drds[0]*tangent_to_symmetry_line[0]+
1373 drds[1]*tangent_to_symmetry_line[1];
1377 residuals[j_local]+=res0;
1382 residuals[j_local]+=res1;
1397 for (
unsigned i=0;
i<n_dim;
i++)
1400 for (
unsigned k=0;k<n_type;k++)
1410 double dres0dxik=0.0;
1418 double dres1dxik=0.0;
1421 dres1dxik=tangent_to_symmetry_line[
i];
1425 residuals[j_local]+=
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...
virtual void get_residuals(Vector< double > &residuals)
Calculate the vector of residuals of the equations in the element. By default initialise the vector t...
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...
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...
void initialise(const T &val)
Initialize all values in the matrix to val.
void resize_nodes(Vector< unsigned > &nadditional_data_values)
Provide additional storage for a specified number of values at the nodes of the FaceElement. (This is needed, for instance, in free-surface elements, if the non-penetration condition is imposed by Lagrange multipliers whose values are only stored at the surface nodes but not in the interior of the bulk element). nadditional_data_values[n] specifies the number of additional values required at node n of the FaceElement. Note: Since this function is executed separately for each FaceElement, nodes that are common to multiple elements might be resized repeatedly. To avoid this, we only allow a single resize operation by comparing the number of values stored at each node to the number of values the node had when it was simply a member of the associated "bulk" element. There are cases where this will break! – e.g. if a node is common to two FaceElements which require additional storage for distinct quantities. Such cases need to be handled by "hand-crafted" face elements.
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.
virtual void output(std::ostream &outfile)
Output the element data — typically the values at the nodes in a format suitable for post-processing...
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...
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...
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)
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...
A general Finite Element class.
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...
ClampedSlidingHermiteBeamBoundaryConditionElement()
Broken empty constructor.
void fill_in_residuals_for_solid_ic(Vector< double > &residuals)
Fill in the residuals for the setup of an initial condition. The global equations are: where is the...
virtual double weight(const unsigned &i) const =0
Return weight of i-th integration point.
void get_local_coordinate_in_bulk(const Vector< double > &s, Vector< double > &s_bulk) const
Calculate the vector of local coordinate in the bulk element given the local coordinates in this Face...
Vector< double > Normal_to_symmetry_line
Normal vector to the symmetry line along which the end of the beam is sliding.
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...
const double & h() const
Return the non-dimensional wall thickness.
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 get_normal(const Vector< double > &s, Vector< double > &N)
Get normal vector on wall.
unsigned nnodal_position_type() const
Return the number of coordinate types that the element requires to interpolate the geometry between t...
unsigned ndim() const
Return (Eulerian) spatial dimension of the node.
unsigned ndof() const
Return the number of equations/dofs in the element.
unsigned nlagrangian() const
Access function to # of Lagrangian coordinates.
unsigned nodal_dimension() const
Return the required Eulerian dimension of the nodes in this element.
const double & lambda_sq() const
Return the timescale ratio (non-dimensional density)
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
static double Default_lambda_sq_value
Static default value for timescale ratio (1.0 – for natural scaling)
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). Evaluated at current time.
double raw_lagrangian_position(const unsigned &n, const unsigned &i) const
Return i-th Lagrangian coordinate at local node n without using the hanging representation.
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
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...
void interpolated_zeta(const Vector< double > &s, Vector< double > &zeta) const
Calculate the interpolated value of zeta, the intrinsic coordinate of the element when viewed as a co...
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)
unsigned long eqn_number(const unsigned &ieqn_local) const
Return the global equation number corresponding to the ieqn_local-th local equation number...
Hermite Kirchhoff Love beam. Implements KirchhoffLoveBeamEquations using 2-node Hermite elements as t...
void set_nnodal_position_type(const unsigned &nposition_type)
Set the number of types required to interpolate the coordinate.
static double Default_h_value
Static default value for non-dim wall thickness.
virtual void dshape_local(const Vector< double > &s, Shape &psi, DShape &dpsids) const
Function to compute the geometric shape functions and derivatives w.r.t. local coordinates at local c...
Vector< unsigned > Nbulk_value
A vector that will hold the number of data values at the nodes that are associated with the "bulk" el...
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
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...
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.
unsigned ndim() const
Access function to # of Eulerian coordinates.
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...
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...
bool Solve_for_consistent_newmark_accel_flag
Flag to indicate which system of equations to solve when assigning initial conditions for time-depend...
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.
virtual unsigned nweight() const =0
Return the number of integration points of the scheme.
void output(std::ostream &outfile)
Output function.
GeomObject * Undeformed_beam_pt
Pointer to the GeomObject that specifies the beam's undeformed midplane.
FiniteElement *& bulk_element_pt()
Pointer to higher-dimensional "bulk" element.
void get_energy(double &pot_en, double &kin_en)
Get potential (strain) and kinetic energy of the element.
SolidInitialCondition * Solid_ic_pt
Pointer to object that specifies the initial condition.
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...
void locate_zeta(const Vector< double > &zeta, GeomObject *&geom_object_pt, Vector< double > &s, const bool &use_coordinate_as_initial_guess=false)
Find the local coordinate s in this element that corresponds to the global "intrinsic" coordinate (h...
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Fill in the element's contribution to its residual vector.
static double Default_sigma0_value
Static default value for 2nd Piola Kirchhoff prestress.
unsigned nnode() const
Return the number of nodes.
virtual void shape(const Vector< double > &s, Shape &psi) const =0
Calculate the geometric shape functions at local coordinate s. This function must be overloaded for e...
double value(const unsigned &i) const
Return i-th value (dofs or pinned) at this node either directly or via hanging node representation...
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. Does not use the hanging node representation.
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...