36 template<
unsigned DIM>
47 throw OomphLibError(
"RefineablePVDEquations cannot be used with "
48 "incompressible constitutive laws.",
49 OOMPH_CURRENT_FUNCTION,
50 OOMPH_EXCEPTION_LOCATION);
57 get_residuals_for_solid_ic(residuals);
62 const unsigned n_node = nnode();
65 const unsigned n_position_type = this->nnodal_position_type();
71 double lambda_sq = this->lambda_sq();
74 double time_factor = 0.0;
77 time_factor = this->node_pt(0)->position_time_stepper_pt()->weight(2, 0);
81 Shape psi(n_node, n_position_type);
82 DShape dpsidxi(n_node, n_position_type, DIM);
85 const unsigned n_intpt = integral_pt()->nweight();
91 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
94 for (
unsigned i = 0;
i < DIM; ++
i)
96 s[
i] = integral_pt()->knot(ipt,
i);
100 double w = integral_pt()->weight(ipt);
103 double J = dshape_lagrangian_at_knot(ipt, psi, dpsidxi);
116 for (
unsigned l = 0; l < n_node; l++)
119 for (
unsigned k = 0; k < n_position_type; k++)
121 double psi_ = psi(l, k);
123 for (
unsigned i = 0;
i < DIM;
i++)
126 interpolated_xi[
i] += lagrangian_position_gen(l, k,
i) * psi_;
131 if ((lambda_sq > 0.0) && (this->Unsteady))
133 accel[
i] += dnodal_position_gen_dt(2, l, k,
i) * psi_;
137 for (
unsigned j = 0; j < DIM; j++)
139 interpolated_G(j,
i) +=
140 this->nodal_position_gen(l, k,
i) * dpsidxi(l, k, j);
148 this->get_isotropic_growth(ipt,
s, interpolated_xi, gamma);
152 this->body_force(interpolated_xi, b);
157 double diag_entry = pow(gamma, 2.0 /
double(DIM));
159 for (
unsigned i = 0;
i < DIM;
i++)
161 for (
unsigned j = 0; j < DIM; j++)
165 g(
i, j) = diag_entry;
176 double W = gamma * w * J;
182 for (
unsigned i = 0;
i < DIM;
i++)
185 for (
unsigned j =
i; j < DIM; j++)
190 for (
unsigned k = 0; k < DIM; k++)
192 G(
i, j) += interpolated_G(
i, k) * interpolated_G(j, k);
196 for (
unsigned j = 0; j <
i; j++)
204 this->get_stress(g, G, sigma);
213 n_node, n_position_type, DIM, DIM, DIM, 0.0);
223 for (
unsigned ll = 0; ll < n_node; ll++)
225 for (
unsigned kk = 0; kk < n_position_type; kk++)
227 for (
unsigned ii = 0; ii < DIM; ii++)
229 for (
unsigned aa = 0; aa < DIM; aa++)
231 for (
unsigned bb = aa; bb < DIM; bb++)
233 d_G_dX(ll, kk, ii, aa, bb) =
234 interpolated_G(aa, ii) * dpsidxi(ll, kk, bb) +
235 interpolated_G(bb, ii) * dpsidxi(ll, kk, aa);
245 this->get_d_stress_dG_upper(g, G, sigma, d_stress_dG);
250 for (
unsigned i = 0;
i < DIM;
i++)
252 for (
unsigned j = 0; j < DIM; j++)
254 sigma(
i, j) += this->prestress(
i, j, interpolated_xi);
263 unsigned n_master = 1;
264 double hang_weight = 1.0;
267 for (
unsigned l = 0; l < n_node; l++)
270 Node* local_node_pt = node_pt(l);
273 bool is_hanging = local_node_pt->
is_hanging();
292 for (
unsigned m = 0; m < n_master; m++)
297 position_local_eqn_at_node = local_position_hang_eqn(
306 for (
unsigned k = 0; k < n_position_type; k++)
309 for (
unsigned i = 0;
i < DIM;
i++)
311 position_local_eqn_at_node(k,
i) = position_local_eqn(l, k,
i);
320 for (
unsigned k = 0; k < n_position_type; k++)
323 const unsigned offset5 = dpsidxi.
offset(l, k);
326 for (
unsigned i = 0;
i < DIM;
i++)
328 local_eqn = position_local_eqn_at_node(k,
i);
337 sum += (lambda_sq * accel[
i] - b[
i]) * psi(l, k);
340 for (
unsigned a = 0; a < DIM; a++)
342 unsigned count = offset5;
343 for (
unsigned b = 0; b < DIM; b++)
346 sum += sigma(a, b) * interpolated_G(a,
i) *
351 residuals[local_eqn] +=
W * sum * hang_weight;
358 const unsigned offset1 = d_G_dX.
offset(l, k,
i);
361 unsigned nn_master = 1;
362 double hhang_weight = 1.0;
365 for (
unsigned ll = 0; ll < n_node; ll++)
368 Node* llocal_node_pt = node_pt(ll);
371 bool iis_hanging = llocal_node_pt->
is_hanging();
391 for (
unsigned mm = 0; mm < nn_master; mm++)
396 position_local_unk_at_node = local_position_hang_eqn(
406 for (
unsigned kk = 0; kk < n_position_type; kk++)
409 for (
unsigned ii = 0; ii < DIM; ii++)
411 position_local_unk_at_node(kk, ii) =
412 position_local_eqn(ll, kk, ii);
422 for (
unsigned kk = 0; kk < n_position_type; kk++)
425 for (
unsigned ii = 0; ii < DIM; ii++)
429 position_local_unk_at_node(kk, ii);
433 if (local_unknown >= 0)
436 const unsigned offset2 = d_G_dX.
offset(ll, kk, ii);
437 const unsigned offset4 = dpsidxi.
offset(ll, kk);
443 unsigned count1 = offset1;
444 for (
unsigned a = 0; a < DIM; a++)
449 for (
unsigned b = a; b < DIM; b++)
453 if (a == b) factor *= 0.5;
456 unsigned offset3 = d_stress_dG.
offset(a, b);
457 unsigned count2 = offset2;
458 unsigned count3 = offset3;
460 for (
unsigned aa = 0; aa < DIM; aa++)
469 for (
unsigned bb = aa; bb < DIM; bb++)
485 jacobian(local_eqn, local_unknown) +=
486 sum *
W * hang_weight * hhang_weight;
490 if ((
i == ii) && (local_unknown >= local_eqn))
496 sum += lambda_sq * time_factor * psi(ll, kk) *
500 unsigned count4 = offset4;
501 for (
unsigned a = 0; a < DIM; a++)
504 const double factor =
508 unsigned count5 = offset5;
509 for (
unsigned b = 0; b < DIM; b++)
512 sigma(a, b) * factor *
520 sum *
W * hang_weight * hhang_weight;
522 jacobian(local_eqn, local_unknown) += sym_entry;
524 if (local_eqn != local_unknown)
526 jacobian(local_unknown, local_eqn) += sym_entry;
550 template<
unsigned DIM>
555 mass_diag.assign(this->ndof(), 0.0);
558 unsigned n_node = this->nnode();
561 const unsigned n_position_type = this->nnodal_position_type();
564 Shape psi(n_node, n_position_type);
565 DShape dpsidxi(n_node, n_position_type, DIM);
568 unsigned n_intpt = this->integral_pt()->nweight();
574 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
577 double w = this->integral_pt()->weight(ipt);
580 double J = this->dshape_lagrangian_at_knot(ipt, psi, dpsidxi);
585 unsigned n_master = 1;
586 double hang_weight = 1.0;
589 for (
unsigned l = 0; l < n_node; l++)
592 Node* local_node_pt = node_pt(l);
595 bool is_hanging = local_node_pt->
is_hanging();
613 for (
unsigned m = 0; m < n_master; m++)
618 position_local_eqn_at_node = local_position_hang_eqn(
627 for (
unsigned k = 0; k < n_position_type; k++)
630 for (
unsigned i = 0;
i < DIM;
i++)
632 position_local_eqn_at_node(k,
i) = position_local_eqn(l, k,
i);
641 for (
unsigned k = 0; k < n_position_type; k++)
644 for (
unsigned i = 0;
i < DIM;
i++)
647 local_eqn = position_local_eqn_at_node(k,
i);
653 mass_diag[local_eqn] += pow(psi(l, k) * hang_weight, 2) *
W;
674 template<
unsigned DIM>
680 const unsigned& flag)
686 (!this->Incompressible))
688 throw OomphLibError(
"The constitutive law requires the use of the "
689 "incompressible formulation by setting the element's "
690 "member function set_incompressible()",
691 OOMPH_CURRENT_FUNCTION,
692 OOMPH_EXCEPTION_LOCATION);
698 if (Solid_ic_pt != 0)
700 get_residuals_for_solid_ic(residuals);
705 const unsigned n_node = nnode();
708 const unsigned n_position_type = this->nnodal_position_type();
711 const unsigned n_solid_pres = this->npres_solid();
714 const int solid_p_index = this->solid_p_nodal_index();
719 bool solid_pressure_dof_is_hanging[n_solid_pres];
722 if (solid_p_index >= 0)
725 for (
unsigned l = 0; l < n_solid_pres; ++l)
727 solid_pressure_dof_is_hanging[l] =
728 solid_pressure_node_pt(l)->is_hanging(solid_p_index);
735 for (
unsigned l = 0; l < n_solid_pres; ++l)
737 solid_pressure_dof_is_hanging[l] =
false;
742 int local_eqn = 0, local_unknown = 0;
745 double lambda_sq = this->lambda_sq();
749 double time_factor = 0.0;
752 time_factor = this->node_pt(0)->position_time_stepper_pt()->weight(2, 0);
757 Shape psi(n_node, n_position_type);
758 DShape dpsidxi(n_node, n_position_type, DIM);
761 Shape psisp(n_solid_pres);
764 const unsigned n_intpt = integral_pt()->nweight();
770 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
773 for (
unsigned i = 0;
i < DIM; ++
i)
775 s[
i] = integral_pt()->knot(ipt,
i);
779 double w = integral_pt()->weight(ipt);
782 double J = dshape_lagrangian_at_knot(ipt, psi, dpsidxi);
785 this->solid_pshape_at_knot(ipt, psisp);
797 for (
unsigned l = 0; l < n_node; l++)
800 for (
unsigned k = 0; k < n_position_type; k++)
802 double psi_ = psi(l, k);
804 for (
unsigned i = 0;
i < DIM;
i++)
807 interpolated_xi[
i] += lagrangian_position_gen(l, k,
i) * psi_;
812 if ((lambda_sq > 0.0) && (this->Unsteady))
814 accel[
i] += dnodal_position_gen_dt(2, l, k,
i) * psi_;
818 for (
unsigned j = 0; j < DIM; j++)
820 interpolated_G(j,
i) +=
821 nodal_position_gen(l, k,
i) * dpsidxi(l, k, j);
829 this->get_isotropic_growth(ipt,
s, interpolated_xi, gamma);
833 this->body_force(interpolated_xi, b);
838 double diag_entry = pow(gamma, 2.0 /
double(DIM));
840 for (
unsigned i = 0;
i < DIM;
i++)
842 for (
unsigned j = 0; j < DIM; j++)
846 g(
i, j) = diag_entry;
857 double W = gamma * w * J;
860 double interpolated_solid_p = 0.0;
861 for (
unsigned l = 0; l < n_solid_pres; l++)
863 interpolated_solid_p += this->solid_p(l) * psisp[l];
871 for (
unsigned i = 0;
i < DIM;
i++)
874 for (
unsigned j =
i; j < DIM; j++)
879 for (
unsigned k = 0; k < DIM; k++)
881 G(
i, j) += interpolated_G(
i, k) * interpolated_G(j, k);
885 for (
unsigned j = 0; j <
i; j++)
895 double gen_dil = 0.0;
896 double inv_kappa = 0.0;
908 n_node, n_position_type, DIM, DIM, DIM, 0.0);
911 if ((flag == 1) || (flag == 3))
918 for (
unsigned ll = 0; ll < n_node; ll++)
920 for (
unsigned kk = 0; kk < n_position_type; kk++)
922 for (
unsigned ii = 0; ii < DIM; ii++)
924 for (
unsigned aa = 0; aa < DIM; aa++)
926 for (
unsigned bb = aa; bb < DIM; bb++)
928 d_G_dX(ll, kk, ii, aa, bb) =
929 interpolated_G(aa, ii) * dpsidxi(ll, kk, bb) +
930 interpolated_G(bb, ii) * dpsidxi(ll, kk, aa);
942 if (this->Incompressible)
944 this->get_stress(g, G, sigma_dev, Gup, detG);
947 for (
unsigned a = 0; a < DIM; a++)
949 for (
unsigned b = 0; b < DIM; b++)
951 sigma(a, b) = sigma_dev(a, b) - interpolated_solid_p * Gup(a, b);
956 if ((flag == 1) || (flag == 3))
961 this->get_d_stress_dG_upper(
962 g, G, sigma, detG, interpolated_solid_p, d_stress_dG, d_detG_dG);
970 this->get_stress(g, G, sigma_dev, Gup, gen_dil, inv_kappa);
973 for (
unsigned a = 0; a < DIM; a++)
975 for (
unsigned b = 0; b < DIM; b++)
977 sigma(a, b) = sigma_dev(a, b) - interpolated_solid_p * Gup(a, b);
982 if ((flag == 1) || (flag == 3))
987 this->get_d_stress_dG_upper(g,
992 interpolated_solid_p,
999 for (
unsigned i = 0;
i < DIM;
i++)
1001 for (
unsigned j = 0; j < DIM; j++)
1003 sigma(
i, j) += this->prestress(
i, j, interpolated_xi);
1010 unsigned n_master = 1;
1011 double hang_weight = 1.0;
1014 for (
unsigned l = 0; l < n_node; l++)
1017 Node* local_node_pt = node_pt(l);
1020 bool is_hanging = local_node_pt->
is_hanging();
1039 for (
unsigned m = 0; m < n_master; m++)
1044 position_local_eqn_at_node = local_position_hang_eqn(
1053 for (
unsigned k = 0; k < n_position_type; k++)
1056 for (
unsigned i = 0;
i < DIM;
i++)
1058 position_local_eqn_at_node(k,
i) = position_local_eqn(l, k,
i);
1068 for (
unsigned k = 0; k < n_position_type; k++)
1071 const unsigned offset5 = dpsidxi.
offset(l, k);
1074 for (
unsigned i = 0;
i < DIM;
i++)
1076 local_eqn = position_local_eqn_at_node(k,
i);
1085 sum += (lambda_sq * accel[
i] - b[
i]) * psi(l, k);
1088 for (
unsigned a = 0; a < DIM; a++)
1090 unsigned count = offset5;
1091 for (
unsigned b = 0; b < DIM; b++)
1094 sum += sigma(a, b) * interpolated_G(a,
i) *
1099 residuals[local_eqn] +=
W * sum * hang_weight;
1111 unsigned nn_master = 1;
1112 double hhang_weight = 1.0;
1115 for (
unsigned ll = 0; ll < n_node; ll++)
1118 Node* llocal_node_pt = node_pt(ll);
1121 bool iis_hanging = llocal_node_pt->
is_hanging();
1141 for (
unsigned mm = 0; mm < nn_master; mm++)
1146 position_local_unk_at_node = local_position_hang_eqn(
1156 for (
unsigned kk = 0; kk < n_position_type; kk++)
1159 for (
unsigned ii = 0; ii < DIM; ii++)
1161 position_local_unk_at_node(kk, ii) =
1162 position_local_eqn(ll, kk, ii);
1172 for (
unsigned kk = 0; kk < n_position_type; kk++)
1175 int local_unknown = position_local_unk_at_node(kk,
i);
1178 if (local_unknown >= 0)
1180 mass_matrix(local_eqn, local_unknown) +=
1181 lambda_sq * psi(l, k) * psi(ll, kk) * hang_weight *
1191 if ((flag == 1) || (flag == 3))
1194 const unsigned offset1 = d_G_dX.
offset(l, k,
i);
1197 unsigned nn_master = 1;
1198 double hhang_weight = 1.0;
1201 for (
unsigned ll = 0; ll < n_node; ll++)
1204 Node* llocal_node_pt = node_pt(ll);
1207 bool iis_hanging = llocal_node_pt->
is_hanging();
1227 for (
unsigned mm = 0; mm < nn_master; mm++)
1232 position_local_unk_at_node = local_position_hang_eqn(
1242 for (
unsigned kk = 0; kk < n_position_type; kk++)
1245 for (
unsigned ii = 0; ii < DIM; ii++)
1247 position_local_unk_at_node(kk, ii) =
1248 position_local_eqn(ll, kk, ii);
1258 for (
unsigned kk = 0; kk < n_position_type; kk++)
1261 for (
unsigned ii = 0; ii < DIM; ii++)
1265 position_local_unk_at_node(kk, ii);
1268 if (local_unknown >= 0)
1271 const unsigned offset2 = d_G_dX.
offset(ll, kk, ii);
1272 const unsigned offset4 = dpsidxi.
offset(ll, kk);
1278 unsigned count1 = offset1;
1279 for (
unsigned a = 0; a < DIM; a++)
1284 for (
unsigned b = a; b < DIM; b++)
1288 if (a == b) factor *= 0.5;
1291 unsigned offset3 = d_stress_dG.
offset(a, b);
1292 unsigned count2 = offset2;
1293 unsigned count3 = offset3;
1295 for (
unsigned aa = 0; aa < DIM; aa++)
1304 for (
unsigned bb = aa; bb < DIM; bb++)
1320 jacobian(local_eqn, local_unknown) +=
1321 sum *
W * hang_weight * hhang_weight;
1325 if ((
i == ii) && (local_unknown >= local_eqn))
1331 sum += lambda_sq * time_factor * psi(ll, kk) *
1335 unsigned count4 = offset4;
1336 for (
unsigned a = 0; a < DIM; a++)
1339 const double factor =
1343 unsigned count5 = offset5;
1344 for (
unsigned b = 0; b < DIM; b++)
1347 sigma(a, b) * factor *
1355 sum *
W * hang_weight * hhang_weight;
1357 jacobian(local_eqn, local_unknown) += sym_entry;
1359 if (local_eqn != local_unknown)
1361 jacobian(local_unknown, local_eqn) += sym_entry;
1375 for (
unsigned l2 = 0; l2 < n_solid_pres; l2++)
1377 unsigned n_master2 = 1;
1378 double hang_weight2 = 1.0;
1381 bool is_hanging2 = solid_pressure_dof_is_hanging[l2];
1387 solid_pressure_node_pt(l2)->hanging_pt(solid_p_index);
1389 n_master2 = hang_info2_pt->
nmaster();
1397 for (
unsigned m2 = 0; m2 < n_master2; m2++)
1402 local_unknown = local_hang_eqn(
1410 local_unknown = this->solid_p_local_eqn(l2);
1415 if (local_unknown >= 0)
1418 for (
unsigned a = 0; a < DIM; a++)
1420 for (
unsigned b = 0; b < DIM; b++)
1422 jacobian(local_eqn, local_unknown) -=
1423 psisp[l2] * Gup(a, b) * interpolated_G(a,
i) *
1424 dpsidxi(l, k, b) *
W * hang_weight * hang_weight2;
1442 for (
unsigned l = 0; l < n_solid_pres; l++)
1444 bool is_hanging = solid_pressure_dof_is_hanging[l];
1446 unsigned n_master = 1;
1447 double hang_weight = 1.0;
1455 hang_info_pt = solid_pressure_node_pt(l)->hanging_pt(solid_p_index);
1458 n_master = hang_info_pt->
nmaster();
1468 for (
unsigned m = 0; m < n_master; m++)
1481 local_eqn = this->solid_p_local_eqn(l);
1491 if (this->Incompressible)
1493 residuals[local_eqn] +=
1494 (detG - gamma) * psisp[l] *
W * hang_weight;
1497 if ((flag == 1) || (flag == 3))
1500 unsigned nn_master = 1;
1501 double hhang_weight = 1.0;
1504 for (
unsigned ll = 0; ll < n_node; ll++)
1507 Node* llocal_node_pt = node_pt(ll);
1510 bool iis_hanging = llocal_node_pt->
is_hanging();
1529 for (
unsigned mm = 0; mm < nn_master; mm++)
1534 position_local_unk_at_node = local_position_hang_eqn(
1544 for (
unsigned kk = 0; kk < n_position_type; kk++)
1547 for (
unsigned ii = 0; ii < DIM; ii++)
1549 position_local_unk_at_node(kk, ii) =
1550 position_local_eqn(ll, kk, ii);
1560 for (
unsigned kk = 0; kk < n_position_type; kk++)
1563 for (
unsigned ii = 0; ii < DIM; ii++)
1566 int local_unknown = position_local_unk_at_node(kk, ii);
1569 if (local_unknown >= 0)
1572 const unsigned offset = d_G_dX.
offset(ll, kk, ii);
1576 unsigned count = offset;
1577 for (
unsigned aa = 0; aa < DIM; aa++)
1584 for (
unsigned bb = aa; bb < DIM; bb++)
1586 sum += d_detG_dG(aa, bb) *
1591 jacobian(local_eqn, local_unknown) +=
1592 sum *
W * hang_weight * hhang_weight;
1607 residuals[local_eqn] +=
1608 (inv_kappa * interpolated_solid_p + gen_dil) * psisp[l] *
W *
1612 if ((flag == 1) || (flag == 3))
1615 unsigned nn_master = 1;
1616 double hhang_weight = 1.0;
1619 for (
unsigned ll = 0; ll < n_node; ll++)
1622 Node* llocal_node_pt = node_pt(ll);
1625 bool iis_hanging = llocal_node_pt->
is_hanging();
1645 for (
unsigned mm = 0; mm < nn_master; mm++)
1650 position_local_unk_at_node = local_position_hang_eqn(
1660 for (
unsigned kk = 0; kk < n_position_type; kk++)
1663 for (
unsigned ii = 0; ii < DIM; ii++)
1665 position_local_unk_at_node(kk, ii) =
1666 position_local_eqn(ll, kk, ii);
1676 for (
unsigned kk = 0; kk < n_position_type; kk++)
1679 for (
unsigned ii = 0; ii < DIM; ii++)
1682 int local_unknown = position_local_unk_at_node(kk, ii);
1685 if (local_unknown >= 0)
1688 const unsigned offset = d_G_dX.
offset(ll, kk, ii);
1692 unsigned count = offset;
1693 for (
unsigned aa = 0; aa < DIM; aa++)
1700 for (
unsigned bb = aa; bb < DIM; bb++)
1702 sum += d_gen_dil_dG(aa, bb) *
1707 jacobian(local_eqn, local_unknown) +=
1708 sum *
W * hang_weight * hhang_weight;
1721 for (
unsigned l2 = 0; l2 < n_solid_pres; l2++)
1723 bool is_hanging2 = solid_pressure_dof_is_hanging[l2];
1725 unsigned n_master2 = 1;
1726 double hang_weight2 = 1.0;
1735 solid_pressure_node_pt(l2)->hanging_pt(solid_p_index);
1737 n_master2 = hang_info2_pt->
nmaster();
1745 for (
unsigned m2 = 0; m2 < n_master2; m2++)
1750 local_unknown = local_hang_eqn(
1758 local_unknown = this->solid_p_local_eqn(l2);
1763 if (local_unknown >= 0)
1765 jacobian(local_eqn, local_unknown) +=
1766 inv_kappa * psisp[l2] * psisp[l] *
W * hang_weight *
virtual bool requires_incompressibility_constraint()=0
Pure virtual function in which the user must declare if the constitutive equation requires an incompr...
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
unsigned offset(const unsigned long &i, const unsigned long &j) const
Caculate the offset in flat-packed C-style, column-major format, required for a given i,...
double & raw_direct_access(const unsigned long &i)
Direct access to internal storage of data in flat-packed C-style column-major format....
Class that contains data for hanging nodes.
double const & master_weight(const unsigned &i) const
Return weight for dofs on i-th master node.
Node *const & master_node_pt(const unsigned &i) const
Return a pointer to the i-th master node.
unsigned nmaster() const
Return the number of master nodes.
Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a gi...
HangInfo *const & hanging_pt() const
Return pointer to hanging node data (this refers to the geometric hanging node status) (const version...
bool is_hanging() const
Test whether the node is geometrically hanging.
An OomphLibError object which should be thrown when an run-time error is encountered....
/////////////////////////////////////////////////////////////// /////////////////////////////////////...
T & raw_direct_access(const unsigned long &i)
Direct access to internal storage of data in flat-packed C-style column-major format....
unsigned offset(const unsigned long &i, const unsigned long &j, const unsigned long &k) const
Caculate the offset in flat-packed Cy-style, column-major format, required for a given i,...
////////////////////////////////////////////////////////////////// //////////////////////////////////...
T & raw_direct_access(const unsigned long &i)
Direct access to internal storage of data in flat-packed C-style column-major format....
unsigned offset(const unsigned long &i, const unsigned long &j) const
Caculate the offset in flat-packed C-style, column-major format, required for a given i,...
Class for Refineable solid mechanics elements in near-incompressible/ incompressible formulation,...
void fill_in_generic_residual_contribution_pvd_with_pressure(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, const unsigned &flag)
Add element's contribution to elemental residual vector and/or Jacobian matrix flag=1: compute both f...
void get_mass_matrix_diagonal(Vector< double > &mass_diag)
Compute the diagonal of the displacement mass matrix for LSC preconditioner.
Class for Refineable PVD equations.
void fill_in_generic_contribution_to_residuals_pvd(Vector< double > &residuals, DenseMatrix< double > &jacobian, const unsigned &flag)
Call the residuals including hanging node cases.
A Class for shape functions. In simple cases, the shape functions have only one index that can be tho...
ConstitutiveLaw * Constitutive_law_pt
Create constitutive law (for smoothing by nonlinear elasticity)
//////////////////////////////////////////////////////////////////// ////////////////////////////////...