56 unsigned n_dim = load.size();
57 for (
unsigned i = 0;
i < n_dim;
i++)
84 std::ostringstream error_message;
85 error_message <<
"Normal vector should have dimension 2, not" <<
N.size()
89 error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
93 std::ostringstream error_message;
94 error_message <<
"Position vector should have dimension 2, not"
95 << r.size() << std::endl;
98 error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
103 std::ostringstream error_message;
104 error_message <<
"Local coordinate should have dimension 1, not"
105 <<
s.size() << std::endl;
108 error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
119 unsigned n_node =
nnode();
127 Shape psi(n_node, n_position_type);
130 DShape dpsidxi(n_node, n_position_type, n_lagrangian);
141 for (
unsigned i = 0;
i < n_dim;
i++)
145 for (
unsigned j = 0; j < n_lagrangian; j++)
147 interpolated_A(j,
i) = 0.0;
152 for (
unsigned i = 0;
i < n_dim;
i++)
155 for (
unsigned l = 0; l < n_node; l++)
158 for (
unsigned k = 0; k < n_position_type; k++)
163 for (
unsigned j = 0; j < n_lagrangian; j++)
165 interpolated_A(j,
i) +=
173 double length = pow(interpolated_A(0, 0), 2) + pow(interpolated_A(0, 1), 2);
176 N[0] = -interpolated_A(0, 1) / sqrt(length);
177 N[1] = interpolated_A(0, 0) / sqrt(length);
189 if (drds.size() != 2)
191 std::ostringstream error_message;
192 error_message <<
"Tangent vector should have dimension 2, not"
193 << drds.size() << std::endl;
196 error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
200 std::ostringstream error_message;
201 error_message <<
"Position vector should have dimension 2, not"
202 << r.size() << std::endl;
205 error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
210 std::ostringstream error_message;
211 error_message <<
"Local coordinate should have dimension 1, not"
212 <<
s.size() << std::endl;
215 error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
226 unsigned n_node =
nnode();
234 Shape psi(n_node, n_position_type);
237 DShape dpsids(n_node, n_position_type, n_lagrangian);
245 for (
unsigned i = 0;
i < n_dim;
i++)
252 for (
unsigned i = 0;
i < n_dim;
i++)
255 for (
unsigned l = 0; l < n_node; l++)
258 for (
unsigned k = 0; k < n_position_type; k++)
292 const unsigned n_node =
nnode();
306 Shape psi(n_node, n_position_type);
309 DShape dpsidxi(n_node, n_position_type, n_lagrangian);
312 DShape d2psidxi(n_node, n_position_type, n_lagrangian);
320 const double HoR_0 =
h();
321 const double sigma_0 =
sigma0();
325 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
345 for (
unsigned i = 0;
i < n_dim;
i++)
350 for (
unsigned j = 0; j < n_lagrangian; j++)
352 interpolated_A(j,
i) = 0.0;
355 for (
unsigned j = 0; j < n_lagrangian; j++)
357 interpolated_dAdxi(j,
i) = 0.0;
362 for (
unsigned l = 0; l < n_node; l++)
365 for (
unsigned k = 0; k < n_position_type; k++)
369 for (
unsigned i = 0;
i < n_lagrangian;
i++)
376 for (
unsigned i = 0;
i < n_dim;
i++)
383 for (
unsigned j = 0; j < n_lagrangian; j++)
385 interpolated_A(j,
i) +=
390 for (
unsigned j = 0; j < n_lagrangian; j++)
392 interpolated_dAdxi(j,
i) +=
409 double amet = 0.0, Amet = 0.0;
412 for (
unsigned k = 0; k < n_dim; k++)
414 amet += a(0, k) * a(0, k);
415 Amet += interpolated_A(0, k) * interpolated_A(0, k);
418 double gamma = 0.5 * (Amet - amet);
427 n[0] = -a(0, 1) / sqrt(adet);
428 n[1] = a(0, 0) / sqrt(adet);
430 N[0] = -interpolated_A(0, 1) / sqrt(Adet);
431 N[1] = interpolated_A(0, 0) / sqrt(Adet);
434 double sqrt_Adet = sqrt(Adet);
437 double b = n[0] * dadxi(0, 0, 0) + n[1] * dadxi(0, 0, 1);
439 N[0] * interpolated_dAdxi(0, 0) +
N[1] * interpolated_dAdxi(0, 1);
442 double kappa = b -
B;
457 double HoR = HoR_0 * h_ratio;
460 double normal_var[n_dim][n_dim];
468 for (
unsigned n = 0; n < n_node; n++)
471 for (
unsigned k = 0; k < n_position_type; k++)
476 normal_var[0][0] = interpolated_A(0, 0) * interpolated_A(0, 1) *
478 (sqrt_Adet * sqrt_Adet * sqrt_Adet);
481 (interpolated_A(0, 1) * interpolated_A(0, 1) / Adet - 1.0) *
482 dpsidxi(n, k, 0) / (sqrt_Adet);
485 (1.0 - interpolated_A(0, 0) * interpolated_A(0, 0) / Adet) *
486 dpsidxi(n, k, 0) / (sqrt_Adet);
488 normal_var[1][1] = -interpolated_A(0, 0) * interpolated_A(0, 1) *
490 (sqrt_Adet * sqrt_Adet * sqrt_Adet);
493 for (
unsigned i = 0;
i < n_dim;
i++)
504 residuals[local_eqn] -=
505 h_ratio * (1.0 / HoR) * f[
i] * psi(n, k) *
W * sqrt(Adet);
507 residuals[local_eqn] +=
508 h_ratio * Lambda_sq * accel[
i] * psi(n, k) *
W * sqrt(adet);
511 residuals[local_eqn] += h_ratio * (sigma_0 + gamma) *
512 interpolated_A(0,
i) * dpsidxi(n, k, 0) *
516 residuals[local_eqn] -=
517 h_ratio * (1.0 / 12.0) * HoR * HoR * kappa *
518 (
N[
i] * d2psidxi(n, k, 0) +
519 normal_var[
i][0] * interpolated_dAdxi(0, 0) +
520 normal_var[
i][1] * interpolated_dAdxi(0, 1)) *
548 unsigned n_dof =
ndof();
556 full_residuals, jacobian);
571 double stretch = 0.0;
579 pot_en = stretch + bend;
604 unsigned n_node =
nnode();
615 Shape psi(n_node, n_position_dofs);
618 DShape dpsidxi(n_node, n_position_dofs, n_lagrangian);
621 DShape d2psidxi(n_node, n_position_dofs, n_lagrangian);
630 double sigma_0 =
sigma0();
635 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
657 for (
unsigned i = 0;
i < n_dim;
i++)
663 for (
unsigned j = 0; j < n_lagrangian; j++)
665 interpolated_A(j,
i) = 0.0;
668 for (
unsigned j = 0; j < n_lagrangian; j++)
670 interpolated_dAdxi(j,
i) = 0.0;
675 for (
unsigned l = 0; l < n_node; l++)
678 for (
unsigned k = 0; k < n_position_dofs; k++)
682 for (
unsigned i = 0;
i < n_lagrangian;
i++)
689 for (
unsigned i = 0;
i < n_dim;
i++)
697 for (
unsigned j = 0; j < n_lagrangian; j++)
699 interpolated_A(j,
i) +=
704 for (
unsigned j = 0; j < n_lagrangian; j++)
706 interpolated_dAdxi(j,
i) +=
715 for (
unsigned i = 0;
i < n_dim;
i++)
717 veloc_sq += veloc[
i] * veloc[
i];
730 double amet = 0.0, Amet = 0.0;
734 for (
unsigned k = 0; k < n_dim; k++)
736 amet += a(0, k) * a(0, k);
737 Amet += interpolated_A(0, k) * interpolated_A(0, k);
741 double gamma = 0.5 * (Amet - amet);
750 n[0] = -a(0, 1) / sqrt(adet);
751 n[1] = a(0, 0) / sqrt(adet);
753 N[0] = -interpolated_A(0, 1) / sqrt(Adet);
754 N[1] = interpolated_A(0, 0) / sqrt(Adet);
757 double b = n[0] * dadxi(0, 0, 0) + n[1] * dadxi(0, 0, 1);
759 N[0] * interpolated_dAdxi(0, 0) +
N[1] * interpolated_dAdxi(0, 1);
762 double kappa = b -
B;
771 double HoR = HoR_0 * h_ratio;
775 h_ratio * 0.5 * (gamma + sigma_0) * (gamma + sigma_0) *
W * sqrt(adet);
776 bend += h_ratio * 0.5 * (1.0 / 12.0) * HoR * HoR * kappa * kappa *
W *
778 kin_en += h_ratio * 0.5 * Lambda_sq * veloc_sq *
W * sqrt(adet);
787 std::ostream& outfile,
788 const unsigned& n_plot)
const
790 #ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES
793 "Order of function arguments has changed between versions 0.8 and 0.85",
794 "HermiteBeamElement::output(...)",
795 OOMPH_EXCEPTION_LOCATION);
802 outfile <<
"ZONE I=" << n_plot << std::endl;
808 for (
unsigned l = 0; l < n_plot; l++)
810 s[0] = -1.0 + l * 2.0 / (n_plot - 1);
813 for (
unsigned i = 0;
i < n_dim;
i++)
817 outfile << std::endl;
831 outfile <<
"ZONE I=" << n_plot << std::endl;
840 unsigned n_node =
nnode();
850 Shape psi(n_node, n_position_dofs);
853 for (
unsigned l1 = 0; l1 < n_plot; l1++)
855 s[0] = -1.0 + l1 * 2.0 / (n_plot - 1);
864 for (
unsigned i = 0;
i < n_dim;
i++)
874 for (
unsigned l = 0; l < n_node; l++)
877 for (
unsigned k = 0; k < n_position_dofs; k++)
881 for (
unsigned i = 0;
i < n_lagrangian;
i++)
888 for (
unsigned i = 0;
i < n_dim;
i++)
897 double scalar_accel = 0.0;
898 double scalar_veloc = 0.0;
899 double scalar_posn = 0.0;
902 for (
unsigned i = 0;
i < n_dim;
i++)
904 outfile << posn[
i] <<
" ";
905 scalar_posn += pow(posn[
i], 2);
908 for (
unsigned i = 0;
i < n_dim;
i++)
910 outfile << veloc[
i] <<
" ";
911 scalar_veloc += pow(veloc[
i], 2);
913 for (
unsigned i = 0;
i < n_dim;
i++)
915 outfile << accel[
i] <<
" ";
916 scalar_accel += pow(accel[
i], 2);
918 outfile << sqrt(scalar_posn) <<
" ";
919 outfile << sqrt(scalar_veloc) <<
" ";
920 outfile << sqrt(scalar_accel) <<
" ";
921 outfile << std::endl;
942 const unsigned& n_plot)
const
944 #ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES
947 "Order of function arguments has changed between versions 0.8 and 0.85",
948 "HermiteBeamElement::output(...)",
949 OOMPH_EXCEPTION_LOCATION);
957 fprintf(file_pt,
"ZONE I=%i \n", n_plot);
963 for (
unsigned l = 0; l < n_plot; l++)
965 s[0] = -1.0 + l * 2.0 / (n_plot - 1);
968 for (
unsigned i = 0;
i < n_dim;
i++)
974 fprintf(file_pt,
"\n");
989 fprintf(file_pt,
"ZONE I=%i \n", n_plot);
998 unsigned n_node =
nnode();
1008 Shape psi(n_node, n_position_dofs);
1011 for (
unsigned l1 = 0; l1 < n_plot; l1++)
1013 s[0] = -1.0 + l1 * 2.0 / (n_plot - 1);
1022 for (
unsigned i = 0;
i < n_dim;
i++)
1032 for (
unsigned l = 0; l < n_node; l++)
1035 for (
unsigned k = 0; k < n_position_dofs; k++)
1039 for (
unsigned i = 0;
i < n_lagrangian;
i++)
1046 for (
unsigned i = 0;
i < n_dim;
i++)
1055 double scalar_accel = 0.0;
1056 double scalar_veloc = 0.0;
1057 double scalar_posn = 0.0;
1060 for (
unsigned i = 0;
i < n_dim;
i++)
1063 fprintf(file_pt,
"%g ", posn[
i]);
1064 scalar_posn += pow(posn[
i], 2);
1068 for (
unsigned i = 0;
i < n_dim;
i++)
1071 fprintf(file_pt,
"%g ", veloc[
i]);
1072 scalar_veloc += pow(veloc[
i], 2);
1074 for (
unsigned i = 0;
i < n_dim;
i++)
1077 fprintf(file_pt,
"%g ", accel[
i]);
1078 scalar_accel += pow(accel[
i], 2);
1081 fprintf(file_pt,
"%g ", sqrt(scalar_posn));
1083 fprintf(file_pt,
"%g ", sqrt(scalar_veloc));
1085 fprintf(file_pt,
"%g ", sqrt(scalar_accel));
1087 fprintf(file_pt,
"\n");
1097 unsigned n_plot = 5;
1118 const bool& use_coordinate_as_initial_guess)
1121 unsigned lo = 0, hi = 1;
1131 double epsilon = 1.0e-13;
1150 geom_object_pt =
this;
1154 double zeta_fraction =
1158 s[0] = -1.0 + zeta_fraction * 2.0;
1164 if (std::fabs(zeta[0] - zeta_test[0]) > epsilon)
1166 std::ostringstream error_stream;
1168 <<
"The zeta coordinate " << zeta_test[0] <<
" \n"
1169 <<
"computed by interpolated_zeta() for s[0]=" <<
s[0] <<
" \n"
1170 <<
"differs by more than the tolerance (" << epsilon <<
") from \n "
1171 <<
"the required value " << zeta_test[0] <<
" \n\n"
1172 <<
"You're probably using a mesh with non-uniformly \n "
1173 <<
"spaced FSIHermiteBeamElements. For such cases the root finding"
1174 <<
"in FSIHermiteBeamElement::locate_zeta() must be replaced "
1175 <<
"by a proper Newton method or some such thing...\n";
1177 "FSIHermiteBeamElement::locate_zeta()",
1178 OOMPH_EXCEPTION_LOCATION);
1206 "Undeformed_beam_pt has not been set",
1207 "FSIHermiteBeamElement::dposition_dlagrangian_at_local_coordinate()",
1208 OOMPH_EXCEPTION_LOCATION);
1217 unsigned n_node =
nnode();
1222 Shape psi(n_node, n_position_type);
1223 DShape dpsidxi(n_node, n_position_type, n_lagrangian);
1233 for (
unsigned l = 0; l < n_node; l++)
1236 for (
unsigned k = 0; k < n_position_type; k++)
1239 for (
unsigned i = 0;
i < n_dim;
i++)
1242 for (
unsigned j = 0; j < n_lagrangian; j++)
1262 std::list<std::pair<unsigned long, unsigned>>& dof_lookup_list)
const
1265 std::pair<unsigned, unsigned> dof_lookup;
1268 const unsigned n_node = this->
nnode();
1275 int local_unknown = 0;
1278 for (
unsigned n = 0; n < n_node; n++)
1281 for (
unsigned k = 0; k < n_position_type; k++)
1284 for (
unsigned i = 0;
i < nodal_dim;
i++)
1290 if (local_unknown >= 0)
1294 dof_lookup.first = this->
eqn_number(local_unknown);
1295 dof_lookup.second = 0;
1298 dof_lookup_list.push_front(dof_lookup);
1348 nadditional_data_values[0] = 2;
1390 double res1 = drds[0] * tangent_to_symmetry_line[0] +
1391 drds[1] * tangent_to_symmetry_line[1];
1395 residuals[j_local] += res0;
1400 residuals[j_local] += res1;
1415 for (
unsigned i = 0;
i < n_dim;
i++)
1418 for (
unsigned k = 0; k < n_type; k++)
1428 double dres0dxik = 0.0;
1436 double dres1dxik = 0.0;
1439 dres1dxik = tangent_to_symmetry_line[
i];
1443 residuals[j_local] += lambda0 * dres0dxik + lambda1 * dres1dxik;
Vector< double > Vector_to_symmetry_line
Vector to some point on the symmetry line along which the end of the beam is sliding.
Vector< double > Normal_to_symmetry_line
Normal vector to the symmetry line along which the end of the beam is sliding.
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Fill in the element's contribution to its residual vector.
ClampedSlidingHermiteBeamBoundaryConditionElement()
Broken empty constructor.
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
void initialise(const T &val)
Initialize all values in the matrix to val.
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...
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 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...
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)
FiniteElement *& bulk_element_pt()
Pointer to higher-dimensional "bulk" element.
Vector< unsigned > Nbulk_value
A vector that will hold the number of data values at the nodes that are associated with the "bulk" el...
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...
void resize_nodes(Vector< unsigned > &nadditional_data_values)
Provide additional storage for a specified number of values at the nodes of the FaceElement....
//////////////////////////////////////////////////////////////////// ////////////////////////////////...
A general Finite Element class.
void set_nnodal_position_type(const unsigned &nposition_type)
Set the number of types required to interpolate the coordinate.
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
unsigned nnodal_position_type() const
Return the number of coordinate types that the element requires to interpolate the geometry between t...
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...
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.
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
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...
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.
Hermite Kirchhoff Love beam. Implements KirchhoffLoveBeamEquations using 2-node Hermite elements as t...
void output(std::ostream &outfile)
Output function.
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.
static double Default_sigma0_value
Static default value for 2nd Piola Kirchhoff prestress.
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)
GeomObject * Undeformed_beam_pt
Pointer to the GeomObject that specifies the beam's undeformed midplane.
static void Unit_profile_fct(const Vector< double > &xi, const Vector< double > &x, double &h_ratio)
Default profile function (constant thickness 'h_0')
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...
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.
static double Default_h_value
Static default value for non-dim wall thickness.
const double & lambda_sq() const
Return the timescale ratio (non-dimensional density)
void get_normal(const Vector< double > &s, Vector< double > &N)
Get normal vector on wall.
static double Default_lambda_sq_value
Static default value for timescale ratio (1.0 – for natural scaling)
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...
const double & sigma0() const
Return the axial prestress.
void get_energy(double &pot_en, double &kin_en)
Get potential (strain) and kinetic energy of the element.
const double & h() const
Return the non-dimensional wall thickness.
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...
virtual void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Get FE jacobian and residuals (Jacobian done by finite differences)
unsigned ndim() const
Return (Eulerian) spatial dimension of the node.
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....
An OomphLibWarning object which should be created as a temporary object to issue a warning....
void shape(const Vector< double > &s, Shape &psi) const
Function to calculate the geometric shape functions at local coordinate s.
////////////////////////////////////////////////////////////////// //////////////////////////////////...
A Class for shape functions. In simple cases, the shape functions have only one index that can be tho...
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....
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.
bool Solve_for_consistent_newmark_accel_flag
Flag to indicate which system of equations to solve when assigning initial conditions for time-depend...
SolidInitialCondition * Solid_ic_pt
Pointer to object that specifies the initial condition.
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:
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....
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...
//////////////////////////////////////////////////////////////////// ////////////////////////////////...