27 #ifndef OOMPH_AXISYMM_ELASTICITY_ELEMENTS_HEADER
28 #define OOMPH_AXISYMM_ELASTICITY_ELEMENTS_HEADER
32 #include <oomph-lib-config.h>
36 #include "../generic/Qelements.h"
37 #include "../generic/hermite_elements.h"
38 #include "../constitutive/constitutive_laws.h"
75 "Elements derived from AxisymmetricPVDEquations";
76 error_message +=
" must have a constitutive law :\n ";
78 "set one using the constitutive_law_pt() member function\n";
81 error_message, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
98 unsigned n_lagrangian = 2;
100 unsigned n_node =
nnode();
108 Shape psi(n_node, n_position_type);
109 DShape dpsidxi(n_node, n_position_type, n_lagrangian);
115 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
128 double interpolated_X[2] = {0.0, 0.0};
129 double interpolated_dXdxi[2][2];
132 for (
unsigned i = 0;
i < 2;
i++)
134 for (
unsigned j = 0; j < 2; j++)
136 interpolated_dXdxi[
i][j] = 0.0;
141 for (
unsigned l = 0; l < n_node; l++)
144 for (
unsigned k = 0; k < n_position_type; k++)
147 for (
unsigned i = 0;
i < 2;
i++)
155 for (
unsigned j = 0; j < 2; j++)
158 interpolated_dXdxi[
i][j] +=
183 W *= sqrt(g(0, 0) * g(1, 1) * g(2, 2));
188 G(0, 0) = interpolated_dXdxi[0][0] * interpolated_dXdxi[0][0] +
189 interpolated_dXdxi[1][0] * interpolated_dXdxi[1][0];
190 G(0, 1) = interpolated_dXdxi[0][0] *
191 (interpolated_dXdxi[0][1] - interpolated_X[1]) +
192 interpolated_dXdxi[1][0] *
193 (interpolated_dXdxi[1][1] + interpolated_X[0]);
197 G(1, 1) = (interpolated_dXdxi[0][1] - interpolated_X[1]) *
198 (interpolated_dXdxi[0][1] - interpolated_X[1]) +
199 (interpolated_dXdxi[1][1] + interpolated_X[0]) *
200 (interpolated_dXdxi[1][1] + interpolated_X[0]);
219 for (
unsigned l = 0; l < n_node; l++)
222 for (
unsigned k = 0; k < n_position_type; k++)
231 residuals[local_eqn] +=
232 (sigma(0, 1) * interpolated_dXdxi[1][0] +
233 sigma(1, 1) * (interpolated_dXdxi[1][1] + interpolated_X[0]) +
240 for (
unsigned j = 0; j < 2; j++)
242 residuals[local_eqn] +=
243 (sigma(j, 0) * interpolated_dXdxi[0][0] +
245 (interpolated_dXdxi[0][1] - interpolated_X[1])) *
246 dpsidxi(l, k, j) *
W;
257 residuals[local_eqn] +=
258 (-sigma(0, 1) * interpolated_dXdxi[0][0] -
259 sigma(1, 1) * (interpolated_dXdxi[0][1] - interpolated_X[1]) +
266 for (
unsigned j = 0; j < 2; j++)
268 residuals[local_eqn] +=
269 (sigma(j, 0) * interpolated_dXdxi[1][0] +
271 (interpolated_dXdxi[1][1] + interpolated_X[0])) *
272 dpsidxi(l, k, j) *
W;
286 unsigned n_node =
nnode();
287 unsigned n_position_type = 1;
290 Shape psi(n_node, n_position_type);
291 DShape dpsidxi(n_node, n_position_type, 2);
300 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
313 double interpolated_X[2] = {0.0, 0.0};
314 double interpolated_dXdxi[2][2];
317 for (
unsigned i = 0;
i < 2;
i++)
319 for (
unsigned j = 0; j < 2; j++)
321 interpolated_dXdxi[
i][j] = 0.0;
326 for (
unsigned l = 0; l < n_node; l++)
329 for (
unsigned k = 0; k < n_position_type; k++)
332 for (
unsigned i = 0;
i < 2;
i++)
340 for (
unsigned j = 0; j < 2; j++)
343 interpolated_dXdxi[
i][j] +=
353 G(0, 0) = interpolated_dXdxi[0][0] * interpolated_dXdxi[0][0] +
354 interpolated_dXdxi[1][0] * interpolated_dXdxi[1][0];
355 G(0, 1) = interpolated_dXdxi[0][0] *
356 (interpolated_dXdxi[0][1] - interpolated_X[1]) +
357 interpolated_dXdxi[1][0] *
358 (interpolated_dXdxi[1][1] + interpolated_X[0]);
362 G(1, 1) = (interpolated_dXdxi[0][1] - interpolated_X[1]) *
363 (interpolated_dXdxi[0][1] - interpolated_X[1]) +
364 (interpolated_dXdxi[1][1] + interpolated_X[0]) *
365 (interpolated_dXdxi[1][1] + interpolated_X[0]);
376 double detG = G(0, 0) * G(1, 1) * G(2, 2) - G(0, 1) * G(1, 0) * G(2, 2);
380 sum +=
W * sqrt(detG);
413 void output(std::ostream& outfile,
const unsigned& n_plot)
419 outfile <<
"ZONE I=" << n_plot <<
", J=" << n_plot << std::endl;
422 for (
unsigned l2 = 0; l2 < n_plot; l2++)
424 s[1] = -1.0 + l2 * 2.0 / (n_plot - 1);
425 for (
unsigned l1 = 0; l1 < n_plot; l1++)
427 s[0] = -1.0 + l1 * 2.0 / (n_plot - 1);
433 outfile << x_r * sin(theta) + x_theta * cos(theta) <<
" "
434 << x_r * cos(theta) - x_theta * sin(theta) <<
" ";
436 for (
unsigned i = 0;
i < 2;
i++)
438 for (
unsigned i = 0;
i < 2;
i++)
440 outfile << std::endl;
443 outfile << std::endl;
455 void output(FILE* file_pt,
const unsigned& n_plot)
461 fprintf(file_pt,
"ZONE I=%i, J=%i\n", n_plot, n_plot);
464 for (
unsigned l2 = 0; l2 < n_plot; l2++)
466 s[1] = -1.0 + l2 * 2.0 / (n_plot - 1);
467 for (
unsigned l1 = 0; l1 < n_plot; l1++)
469 s[0] = -1.0 + l1 * 2.0 / (n_plot - 1);
479 x_r * sin(theta) + x_theta * cos(theta),
480 x_r * cos(theta) - x_theta * sin(theta));
483 for (
unsigned i = 0;
i < 2;
i++)
485 for (
unsigned i = 0;
i < 2;
i++)
487 fprintf(file_pt,
"\n");
490 fprintf(file_pt,
"\n");
513 void output(std::ostream& outfile,
const unsigned& n_plot)
525 void output(FILE* file_pt,
const unsigned& n_plot)
561 void output(std::ostream& outfile,
const unsigned& n_plot)
567 outfile <<
"ZONE I=" << n_plot <<
", J=" << n_plot << std::endl;
570 for (
unsigned l2 = 0; l2 < n_plot; l2++)
572 s[1] = 0.0 + l2 * 1.0 / (n_plot - 1);
573 for (
unsigned l1 = 0; l1 < n_plot; l1++)
575 s[0] = 0.0 + l1 * 1.0 / (n_plot - 1);
581 outfile << x_r * sin(theta) + x_theta * cos(theta) <<
" "
582 << x_r * cos(theta) - x_theta * sin(theta) <<
" ";
584 for (
unsigned i = 0;
i < 2;
i++)
586 for (
unsigned i = 0;
i < 2;
i++)
588 outfile << std::endl;
591 outfile << std::endl;
603 void output(FILE* file_pt,
const unsigned& n_plot)
609 fprintf(file_pt,
"ZONE I=%i, J=%i\n", n_plot, n_plot);
612 for (
unsigned l2 = 0; l2 < n_plot; l2++)
614 s[1] = -1.0 + l2 * 2.0 / (n_plot - 1);
615 for (
unsigned l1 = 0; l1 < n_plot; l1++)
617 s[0] = -1.0 + l1 * 2.0 / (n_plot - 1);
627 x_r * sin(theta) + x_theta * cos(theta),
628 x_r * cos(theta) - x_theta * sin(theta));
631 for (
unsigned i = 0;
i < 2;
i++)
633 for (
unsigned i = 0;
i < 2;
i++)
635 fprintf(file_pt,
"\n");
638 fprintf(file_pt,
"\n");
699 double& pressure_stress,
707 "Elements derived from AxisymmetricPVDEquationsWithPressure";
708 error_message +=
" must have a constitutive law :\n ";
710 "set one using the constitutive_law_pt() member function\n";
713 error_message, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
717 g, G, sigma, Gup, pressure_stress, kappa);
733 "Elements derived from AxisymmetricPVDEquationsWithPressure";
734 error_message +=
" must have a constitutive law :\n ";
736 "set one using the constitutive_law_pt() member function\n";
739 error_message, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
743 g, G, sigma, Gup, detG);
768 virtual double solid_p(
const unsigned& l) = 0;
785 residuals, jacobian, 1);
796 unsigned n_lagrangian = 2;
798 unsigned n_node =
nnode();
805 int local_eqn = 0, local_unknown = 0;
808 Shape psi(n_node, n_position_type);
809 DShape dpsidxi(n_node, n_position_type, n_lagrangian);
812 Shape psisp(n_solid_pres);
818 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
834 double interpolated_X[2] = {0.0, 0.0};
835 double interpolated_dXdxi[2][2];
839 for (
unsigned i = 0;
i < 2;
i++)
841 for (
unsigned j = 0; j < 2; j++)
843 interpolated_dXdxi[
i][j] = 0.0;
848 for (
unsigned l = 0; l < n_node; l++)
851 for (
unsigned k = 0; k < n_position_type; k++)
854 for (
unsigned i = 0;
i < 2;
i++)
862 for (
unsigned j = 0; j < 2; j++)
865 interpolated_dXdxi[
i][j] +=
873 for (
unsigned l = 0; l < n_solid_pres; l++)
895 double detg = g(0, 0) * g(1, 1) * g(2, 2);
904 G(0, 0) = interpolated_dXdxi[0][0] * interpolated_dXdxi[0][0] +
905 interpolated_dXdxi[1][0] * interpolated_dXdxi[1][0];
906 G(0, 1) = interpolated_dXdxi[0][0] *
907 (interpolated_dXdxi[0][1] - interpolated_X[1]) +
908 interpolated_dXdxi[1][0] *
909 (interpolated_dXdxi[1][1] + interpolated_X[0]);
913 G(1, 1) = (interpolated_dXdxi[0][1] - interpolated_X[1]) *
914 (interpolated_dXdxi[0][1] - interpolated_X[1]) +
915 (interpolated_dXdxi[1][1] + interpolated_X[0]) *
916 (interpolated_dXdxi[1][1] + interpolated_X[0]);
929 double detG = 0.0, pressure_stress = 0.0, kappa = 0.0;
938 get_stress(g, G, sigma, Gup, pressure_stress, kappa);
946 for (
unsigned l = 0; l < n_node; l++)
949 for (
unsigned k = 0; k < n_position_type; k++)
958 residuals[local_eqn] +=
960 interpolated_dXdxi[1][0] +
962 (interpolated_dXdxi[1][1] + interpolated_X[0]) +
970 for (
unsigned j = 0; j < 2; j++)
972 residuals[local_eqn] +=
974 interpolated_dXdxi[0][0] +
976 (interpolated_dXdxi[0][1] - interpolated_X[1])) *
977 dpsidxi(l, k, j) *
W;
984 for (
unsigned l2 = 0; l2 < n_solid_pres; l2++)
988 if (local_unknown >= 0)
990 jacobian(local_eqn, local_unknown) +=
991 (psisp[l2] * Gup(0, 1) * interpolated_dXdxi[1][0] +
992 psisp[l2] * Gup(1, 1) *
993 (interpolated_dXdxi[1][1] + interpolated_X[0]) +
1000 for (
unsigned j = 0; j < 2; j++)
1002 jacobian(local_eqn, local_unknown) +=
1003 (psisp[l2] * Gup(j, 0) * interpolated_dXdxi[0][0] +
1004 psisp[l2] * Gup(j, 1) *
1005 (interpolated_dXdxi[0][1] - interpolated_X[1])) *
1006 dpsidxi(l, k, j) *
W;
1020 residuals[local_eqn] +=
1022 interpolated_dXdxi[0][0] -
1024 (interpolated_dXdxi[0][1] - interpolated_X[1]) +
1032 for (
unsigned j = 0; j < 2; j++)
1034 residuals[local_eqn] +=
1036 interpolated_dXdxi[1][0] +
1038 (interpolated_dXdxi[1][1] + interpolated_X[0])) *
1039 dpsidxi(l, k, j) *
W;
1046 for (
unsigned l2 = 0; l2 < n_solid_pres; l2++)
1050 if (local_unknown >= 0)
1053 jacobian(local_eqn, local_unknown) +=
1054 (-psisp[l2] * Gup(0, 1) * interpolated_dXdxi[0][0] -
1055 psisp[l2] * Gup(1, 1) *
1056 (interpolated_dXdxi[0][1] - interpolated_X[1]) +
1063 for (
unsigned j = 0; j < 2; j++)
1065 jacobian(local_eqn, local_unknown) +=
1066 (psisp[l2] * Gup(j, 0) * interpolated_dXdxi[1][0] +
1067 psisp[l2] * Gup(j, 1) *
1068 (interpolated_dXdxi[1][1] + interpolated_X[0])) *
1069 dpsidxi(l, k, j) *
W;
1083 for (
unsigned l = 0; l < n_solid_pres; l++)
1093 residuals[local_eqn] += (detG / detg - 1.0) * psisp[l] *
W;
1102 residuals[local_eqn] +=
1109 for (
unsigned l2 = 0; l2 < n_solid_pres; l2++)
1113 if (local_unknown >= 0)
1115 jacobian(local_eqn, local_unknown) +=
1116 kappa * psisp[l2] * psisp[l] *
W;
1134 unsigned n_node =
nnode();
1135 unsigned n_position_type = 1;
1138 Shape psi(n_node, n_position_type);
1139 DShape dpsidxi(n_node, n_position_type, 2);
1148 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
1161 double interpolated_X[2] = {0.0, 0.0};
1162 double interpolated_dXdxi[2][2];
1165 for (
unsigned i = 0;
i < 2;
i++)
1167 for (
unsigned j = 0; j < 2; j++)
1169 interpolated_dXdxi[
i][j] = 0.0;
1174 for (
unsigned l = 0; l < n_node; l++)
1177 for (
unsigned k = 0; k < n_position_type; k++)
1180 for (
unsigned i = 0;
i < 2;
i++)
1188 for (
unsigned j = 0; j < 2; j++)
1191 interpolated_dXdxi[
i][j] +=
1201 G(0, 0) = interpolated_dXdxi[0][0] * interpolated_dXdxi[0][0] +
1202 interpolated_dXdxi[1][0] * interpolated_dXdxi[1][0];
1203 G(0, 1) = interpolated_dXdxi[0][0] *
1204 (interpolated_dXdxi[0][1] - interpolated_X[1]) +
1205 interpolated_dXdxi[1][0] *
1206 (interpolated_dXdxi[1][1] + interpolated_X[0]);
1210 G(1, 1) = (interpolated_dXdxi[0][1] - interpolated_X[1]) *
1211 (interpolated_dXdxi[0][1] - interpolated_X[1]) +
1212 (interpolated_dXdxi[1][1] + interpolated_X[0]) *
1213 (interpolated_dXdxi[1][1] + interpolated_X[0]);
1224 double detG = G(0, 0) * G(1, 1) * G(2, 2) - G(0, 1) * G(1, 0) * G(2, 2);
1228 sum +=
W * sqrt(detG);
1241 Shape psisp(n_solid_pres);
1248 for (
unsigned l = 0; l < n_solid_pres; l++)
1263 void output(std::ostream& outfile,
const unsigned& n_plot)
1269 outfile <<
"ZONE I=" << n_plot <<
", J=" << n_plot << std::endl;
1272 for (
unsigned l2 = 0; l2 < n_plot; l2++)
1274 s[1] = -1.0 + l2 * 2.0 / (n_plot - 1);
1275 for (
unsigned l1 = 0; l1 < n_plot; l1++)
1277 s[0] = -1.0 + l1 * 2.0 / (n_plot - 1);
1283 outfile << x_r * sin(theta) + x_theta * cos(theta) <<
" "
1284 << x_r * cos(theta) - x_theta * sin(theta) <<
" ";
1287 for (
unsigned i = 0;
i < 2;
i++)
1289 for (
unsigned i = 0;
i < 2;
i++)
1291 outfile << std::endl;
1294 outfile << std::endl;
1305 void output(FILE* file_pt,
const unsigned& n_plot)
1311 fprintf(file_pt,
"ZONE I=%i, J=%i\n", n_plot, n_plot);
1314 for (
unsigned l2 = 0; l2 < n_plot; l2++)
1316 s[1] = -1.0 + l2 * 2.0 / (n_plot - 1);
1317 for (
unsigned l1 = 0; l1 < n_plot; l1++)
1319 s[0] = -1.0 + l1 * 2.0 / (n_plot - 1);
1329 x_r * sin(theta) + x_theta * cos(theta),
1330 x_r * cos(theta) - x_theta * sin(theta));
1333 for (
unsigned i = 0;
i < 2;
i++)
1335 for (
unsigned i = 0;
i < 2;
i++)
1337 fprintf(file_pt,
"\n");
1340 fprintf(file_pt,
"\n");
1408 void output(std::ostream& outfile,
const unsigned& n_plot)
1421 void output(FILE* file_pt,
const unsigned& n_plot)
An element that solved the AxisymmetricPVDEquations with (diagonal) Hermite interpolation for the pos...
void output(std::ostream &outfile)
Overload the output function.
void output(FILE *file_pt)
Overload the output function.
void output(FILE *file_pt, const unsigned &n_plot)
Output function.
AxisymDiagHermitePVDElement()
Constructor, there are no internal data points.
void output(std::ostream &outfile, const unsigned &n_plot)
Output function.
An Element that solves the Axisymmetric principle of virtual displacements with separately interpolat...
unsigned P_solid_internal_index
Internal index that indicates at which internal data value the solid pressure is stored.
void output(std::ostream &outfile)
Overload the output function.
void output(FILE *file_pt, const unsigned &n_plot)
Output function.
double solid_p(const unsigned &l)
Return the l-th pressure value.
AxisymQPVDElementWithPressure()
Constructor, there are 3 internal data items.
int solid_p_local_eqn(const unsigned &i)
Overload the access function for the solid pressure equation numbers.
void output(FILE *file_pt)
Overload the output function.
void output(std::ostream &outfile, const unsigned &n_plot)
Output function.
unsigned nsolid_pres() const
Return number of pressure values.
void solid_pshape(const Vector< double > &s, Shape &psi) const
Return the pressure shape functions.
void fix_solid_pressure(const unsigned &l, const double &pvalue)
Fix the pressure dof l to the value pvalue.
bool has_internal_solid_data()
There is internal solid data so we can't use the automatic assignment of consistent initial condition...
An element that solved the AxisymmetricPVDEquations with quadratic interpolation for the positions.
AxisymQPVDElement()
Constructor, there are no internal data points.
void output(std::ostream &outfile, const unsigned &n_plot)
Output function.
void output(FILE *file_pt)
Overload the output function.
void output(std::ostream &outfile)
Overload the output function.
void output(FILE *file_pt, const unsigned &n_plot)
Output function.
A class for elements that solve the equations of solid mechanics, based on the principle of virtual d...
void solid_pshape_at_knot(const unsigned &ipt, Shape &psi) const
Return the stored solid shape functions at the knots.
bool Incompressible
Boolean to determine whether the solid is incompressible or not.
void fill_in_generic_residual_contribution_axisym_pvd_with_pressure(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Return the residuals for the equations of solid mechanics formulated in the incompressible case!
void output(FILE *file_pt, const unsigned &n_plot)
Output function.
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Return the residuals and the jacobian.
virtual unsigned nsolid_pres() const =0
Return the number of solid pressure degrees of freedom.
void output(std::ostream &outfile, const unsigned &n_plot)
Output function.
AxisymmetricPVDEquationsWithPressure()
Constructor, by default the element is not incompressible.
void set_incompressible()
Set the material to be incompressible.
ConstitutiveLaw * Constitutive_law_pt
Pointer to constitutive law.
virtual int solid_p_local_eqn(const unsigned &i)=0
Access function that returns the local equation number for the n-th solid pressure value.
bool is_incompressible() const
Return whether the material is incompressible.
double compute_physical_size() const
Overload/implement the size function.
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Return the residuals.
virtual void solid_pshape(const Vector< double > &s, Shape &psi) const =0
Return the solid pressure shape functions.
void output(std::ostream &outfile)
Overload the output function.
void output(FILE *file_pt)
Overload the output function.
double interpolated_solid_p(const Vector< double > &s)
Return the interpolated_solid_pressure.
virtual double solid_p(const unsigned &l)=0
Return the lth solid pressures.
ConstitutiveLaw *& constitutive_law_pt()
Return the constitutive law pointer.
void get_stress(const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma, DenseMatrix< double > &Gup, double &pressure_stress, double &kappa)
Return the stress tensor, as calculated from the constitutive law in the Near-incompresible formulati...
void get_stress(const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma, DenseMatrix< double > &Gup, double &detG)
Return the stress tensor, as calculated from the constitutive law in the "true" incompresible formula...
void set_compressible()
Set the material to be compressible.
A class for elements that solve the equations of solid mechanics, based on the principle of virtual d...
void fill_in_contribution_to_residuals_axisym_pvd(Vector< double > &residuals)
Return the residuals for the equations of solid mechanics.
void output(std::ostream &outfile, const unsigned &n_plot)
Output function.
void output(FILE *file_pt)
Overload the output function.
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Fill in the residuals by calling the generic function.
ConstitutiveLaw * Constitutive_law_pt
Pointer to constitutive law.
void output(std::ostream &outfile)
Overload the output function.
void output(FILE *file_pt, const unsigned &n_plot)
Output function.
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Assign the contribution to the residual using only finite differences.
double compute_physical_size() const
Overload/implement the function to calculate the volume of the element.
AxisymmetricPVDEquations()
Constructor.
ConstitutiveLaw *& constitutive_law_pt()
Return the constitutive law pointer.
void get_stress(const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma)
Return the stress tensor, as calculated from the constitutive law.
///////////////////////////////////////////////////////////////// ///////////////////////////////////...
virtual void calculate_second_piola_kirchhoff_stress(const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma)=0
Calculate the contravariant 2nd Piola Kirchhoff stress tensor. Arguments are the covariant undeformed...
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
A class that represents a collection of data; each Data object may contain many different individual ...
void pin(const unsigned &i)
Pin the i-th stored variable.
void set_value(const unsigned &i, const double &value_)
Set the i-th stored data value to specified value. The only reason that we require an explicit set fu...
double value(const unsigned &i) const
Return i-th stored value. This function is not virtual so that it can be inlined. This means that if ...
//////////////////////////////////////////////////////////////////// ////////////////////////////////...
virtual void output(std::ostream &outfile)
Output the element data — typically the values at the nodes in a format suitable for post-processing.
unsigned nnodal_position_type() const
Return the number of coordinate types that the element requires to interpolate the geometry between t...
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
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)
unsigned add_internal_data(Data *const &data_pt, const bool &fd=true)
Add a (pointer to an) internal data object to the element and return the index required to obtain it ...
Data *& internal_data_pt(const unsigned &i)
Return a pointer to i-th internal data object.
static DenseMatrix< double > Dummy_matrix
Empty dense matrix used as a dummy argument to combined residual and jacobian functions in the case w...
int internal_local_eqn(const unsigned &i, const unsigned &j) const
Return the local equation number corresponding to the j-th value stored at the i-th internal data.
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.
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...
SolidQHermiteElements in which we assume the local and global coordinates to be aligned so that the J...
////////////////////////////////////////////////////////////////////// //////////////////////////////...
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.
bool Solve_for_consistent_newmark_accel_flag
Flag to indicate which system of equations to solve when assigning initial conditions for time-depend...
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 double dshape_lagrangian_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsidxi) const
Return the geometric shape functions and also first derivatives w.r.t. Lagrangian coordinates at ipt-...
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...
SolidQElement elements are quadrilateral elements whose derivatives also include those based upon the...
std::string string(const unsigned &i)
Return the i-th string or "" if the relevant string hasn't been defined.
const double Pi
50 digits from maple
//////////////////////////////////////////////////////////////////// ////////////////////////////////...