26 #ifndef OOMPH_AXISYM_POROELASTICITY_ELEMENTS_HEADER
27 #define OOMPH_AXISYM_POROELASTICITY_ELEMENTS_HEADER
31 #include <oomph-lib-config.h>
34 #include "../generic/elements.h"
35 #include "../generic/shape.h"
36 #include "../generic/error_estimator.h"
37 #include "../generic/projection.h"
96 const double&
nu()
const
101 std::ostringstream error_message;
102 error_message <<
"No pointer to Poisson's ratio set. Please set one!\n";
241 for (
unsigned i = 0;
i <
n;
i++)
248 (*Solid_body_force_fct_pt)(time,
x,
b);
263 for (
unsigned i = 0;
i <
n;
i++)
270 (*Fluid_body_force_fct_pt)(time,
x,
b);
287 (*Mass_source_fct_pt)(time,
x,
b);
321 virtual double q_edge(
const unsigned&
j)
const = 0;
325 virtual double q_edge(
const unsigned&
t,
const unsigned&
j)
const = 0;
329 const unsigned&
j)
const = 0;
344 virtual double q_internal(
const unsigned&
t,
const unsigned&
j)
const = 0;
356 const double&
value) = 0;
362 const double&
value) = 0;
378 Shape& q_basis)
const = 0;
383 Shape& div_q_basis_ds)
const = 0;
388 const unsigned n_node = this->
nnode();
389 Shape psi(n_node, 2);
390 const unsigned n_q_basis = this->
nq_basis();
391 Shape q_basis_local(n_q_basis, 2);
403 const unsigned& edge,
const unsigned&
j)
const = 0;
412 const double&
value) = 0;
421 virtual double p_value(
const unsigned&
j)
const = 0;
444 const Shape& q_basis_local,
447 Shape& q_basis)
const;
452 const Shape& q_basis_local,
454 Shape& q_basis)
const
456 const unsigned n_node = this->
nnode();
483 unsigned n_node =
nnode();
496 for (
unsigned i = 0;
i < 2;
i++)
499 div_dudt_components[
i] = 0.0;
503 for (
unsigned l = 0; l < n_node; l++)
505 div_dudt_components[
i] +=
du_dt(l,
i) * dpsidx(l,
i);
511 for (
unsigned l = 0; l < n_node; l++)
513 dur_dt +=
du_dt(l, 0) * psi(l);
517 div_dudt_components[0] += dur_dt /
r;
520 return div_dudt_components[0] + div_dudt_components[1];
531 unsigned n_node =
nnode();
544 for (
unsigned i = 0;
i < 2;
i++)
550 div_u_components[
i] = 0.0;
554 for (
unsigned l = 0; l < n_node; l++)
556 div_u_components[
i] +=
nodal_value(l, u_nodal_index) * dpsidx(l,
i);
562 for (
unsigned l = 0; l < n_node; l++)
568 div_u_components[0] += ur /
r;
571 return div_u_components[0] + div_u_components[1];
579 unsigned n_node =
nnode();
587 for (
unsigned i = 0;
i < 2;
i++)
596 for (
unsigned l = 0; l < n_node; l++)
607 unsigned n_node =
nnode();
622 for (
unsigned l = 0; l < n_node; l++)
635 const unsigned&
i)
const
638 unsigned n_node =
nnode();
653 for (
unsigned l = 0; l < n_node; l++)
667 unsigned n_node =
nnode();
675 for (
unsigned i = 0;
i < 2;
i++)
681 for (
unsigned l = 0; l < n_node; l++)
693 Shape q_basis(n_q_basis, 2);
695 for (
unsigned i = 0;
i < 2;
i++)
698 for (
unsigned l = 0; l < n_q_basis_edge; l++)
702 for (
unsigned l = n_q_basis_edge; l < n_q_basis; l++)
717 Shape q_basis(n_q_basis, 2);
719 for (
unsigned i = 0;
i < 2;
i++)
722 for (
unsigned l = 0; l < n_q_basis_edge; l++)
726 for (
unsigned l = n_q_basis_edge; l < n_q_basis; l++)
739 Shape q_basis(n_q_basis, 2);
743 for (
unsigned l = 0; l < n_q_basis_edge; l++)
745 q_i +=
q_edge(l) * q_basis(l,
i);
747 for (
unsigned l = n_q_basis_edge; l < n_q_basis; l++)
749 q_i +=
q_internal(l - n_q_basis_edge) * q_basis(l,
i);
759 const unsigned i)
const
764 Shape q_basis(n_q_basis, 2);
768 for (
unsigned l = 0; l < n_q_basis_edge; l++)
770 q_i +=
q_edge(
t, l) * q_basis(l,
i);
772 for (
unsigned l = n_q_basis_edge; l < n_q_basis; l++)
774 q_i +=
q_internal(
t, l - n_q_basis_edge) * q_basis(l,
i);
788 unsigned n_node =
nnode();
789 const unsigned n_q_basis =
nq_basis();
793 Shape div_q_basis_ds(n_q_basis);
813 for (
unsigned l = 0; l < n_q_basis_edge; l++)
815 div_q += 1.0 / det * div_q_basis_ds(l) *
q_edge(l);
820 for (
unsigned l = n_q_basis_edge; l < n_q_basis; l++)
822 div_q += 1.0 / det * div_q_basis_ds(l) *
q_internal(l - n_q_basis_edge);
853 Shape p_basis(n_p_basis);
862 for (
unsigned l = 0; l < n_p_basis; l++)
882 double du_dt(
const unsigned&
n,
const unsigned&
i)
const
900 for (
unsigned t = 0;
t < n_time;
t++)
912 double d2u_dt2(
const unsigned&
n,
const unsigned&
i)
const
930 for (
unsigned t = 0;
t < n_time;
t++)
959 for (
unsigned t = 0;
t < n_time;
t++)
989 for (
unsigned t = 0;
t < n_time;
t++)
1022 for (
unsigned j = 0;
j < np;
j++)
1030 for (
unsigned j = 0;
j < nq;
j++)
1037 for (
unsigned j = 0;
j < nq;
j++)
1061 const unsigned& nplot)
const
1068 for (
unsigned iplot = 0; iplot < num_plot_points; iplot++)
1098 file_out <<
du_dt[0] << std::endl;
1102 file_out <<
du_dt[1] << std::endl;
1107 std::stringstream error_stream;
1109 <<
"Axisymmetric poroelasticity elements only store 6 fields "
1126 return "radial displacement";
1130 return "axial displacement";
1134 return "radial flux";
1138 return "axial flux";
1142 return "divergence of flux";
1146 return "pore pressure";
1150 return "radial skeleton velocity";
1154 return "axial skeleton velocity";
1159 std::stringstream error_stream;
1161 <<
"AxisymmetricPoroelasticityEquations only store 8 fields "
1177 for (
unsigned i = 0;
i < 2;
i++)
1183 for (
unsigned i = 0;
i < 2;
i++)
1189 for (
unsigned i = 0;
i < 2;
i++)
1209 data.push_back(div_dudt_components[0]);
1210 data.push_back(div_dudt_components[1]);
1215 data.push_back(div_u_components[0]);
1216 data.push_back(div_u_components[1]);
1229 void output(std::ostream& outfile,
const unsigned& nplot);
1234 const unsigned& nplot,
1240 const unsigned& nplot,
1246 const unsigned& nplot,
1294 Shape& div_q_basis_ds,
1295 Shape& div_q_test_ds)
const = 0;
1300 const unsigned& ipt,
1311 Shape& div_q_basis_ds,
1312 Shape& div_q_test_ds)
const = 0;
1395 template<
class AXISYMMETRIC_POROELASTICITY_ELEMENT>
1413 std::stringstream error_stream;
1415 <<
"AxisymmetricPoroelasticity elements only store 4 fields so fld = "
1416 << fld <<
" is illegal \n";
1430 Data* dat_pt = this->p_data_pt();
1431 unsigned nvalue = dat_pt->
nvalue();
1432 for (
unsigned i = 0;
i < nvalue;
i++)
1434 data_values.push_back(std::make_pair(dat_pt,
i));
1442 unsigned n = edge_dat_pt.size();
1443 for (
unsigned j = 0;
j <
n;
j++)
1445 unsigned nvalue = this->nedge_flux_interpolation_point();
1446 for (
unsigned i = 0;
i < nvalue;
i++)
1448 data_values.push_back(
1449 std::make_pair(edge_dat_pt[
j], this->q_edge_index(
i)));
1452 if (this->nq_basis_internal() > 0)
1454 Data* int_dat_pt = this->q_internal_data_pt();
1455 unsigned nvalue = int_dat_pt->
nvalue();
1456 for (
unsigned i = 0;
i < nvalue;
i++)
1458 data_values.push_back(std::make_pair(int_dat_pt,
i));
1466 unsigned nnod = this->
nnode();
1467 for (
unsigned j = 0;
j < nnod;
j++)
1471 data_values.push_back(std::make_pair(
1472 this->
node_pt(
j), this->u_index_axisym_poroelasticity(fld)));
1494 std::stringstream error_stream;
1496 <<
"AxisymmetricPoroelasticity elements only store 4 fields so fld = "
1497 << fld <<
" is illegal\n";
1507 if (fld == 2) return_value = 1;
1514 return return_value;
1533 std::stringstream error_stream;
1535 <<
"AxisymmetricPoroelasticity elements only store 4 fields so fld = "
1536 << fld <<
" is illegal.\n";
1545 const unsigned n_dim = this->
dim();
1546 const unsigned n_node = this->
nnode();
1547 const unsigned n_q_basis = this->nq_basis();
1548 const unsigned n_p_basis = this->np_basis();
1552 Shape psi_geom(n_node), q_basis(n_q_basis, n_dim),
1553 q_test(n_q_basis, n_dim), p_basis(n_p_basis), p_test(n_p_basis),
1554 div_q_basis_ds(n_q_basis), div_q_test_ds(n_q_basis);
1555 DShape dpsidx_geom(n_node, n_dim);
1556 Shape u_basis(n_node);
1557 Shape u_test(n_node);
1558 DShape du_basis_dx(n_node, n_dim);
1559 DShape du_test_dx(n_node, n_dim);
1560 double J = this->shape_basis_test_local(
s,
1576 unsigned n = p_basis.nindex1();
1577 for (
unsigned i = 0;
i <
n;
i++)
1579 psi[
i] = p_basis[
i];
1585 unsigned n = q_basis.nindex1();
1586 unsigned m = q_basis.nindex2();
1587 for (
unsigned i = 0;
i <
n;
i++)
1589 for (
unsigned j = 0;
j <
m;
j++)
1591 psi(
i,
j) = q_basis(
i,
j);
1598 for (
unsigned j = 0;
j < n_node;
j++)
1600 psi[
j] = u_basis[
j];
1611 const unsigned& fld,
1617 std::stringstream error_stream;
1619 <<
"AxisymmetricPoroelasticity elements only store 4 fields so fld = "
1620 << fld <<
" is illegal\n";
1626 double return_value = 0.0;
1636 "Pressure in AxisymmetricPoroelasticity has no time-dep.!",
1641 this->interpolated_p(
s, return_value);
1647 "Don't call this function for AxisymmetricPoroelasticity!",
1654 return_value = this->interpolated_u(
t,
s, fld);
1656 return return_value;
1666 std::stringstream error_stream;
1668 <<
"AxisymmetricPoroelasticity elements only store 4 fields so fld = "
1669 << fld <<
" is illegal\n";
1675 unsigned return_value = 0;
1679 return_value = this->np_basis();
1684 return_value = this->nq_basis();
1689 return_value = this->
nnode();
1692 return return_value;
1702 std::stringstream error_stream;
1704 <<
"AxisymmetricPoroelasticity elements only store 4 fields so fld = "
1705 << fld <<
" is illegal\n";
1711 int return_value = 0;
1716 return_value = this->p_local_eqn(
j);
1721 unsigned nedge = this->nq_basis_edge();
1724 return_value = this->q_edge_local_eqn(
j);
1728 return_value = this->q_internal_local_eqn(
j - nedge);
1738 return return_value;
1743 void output(std::ostream& outfile,
const unsigned& nplot)
1754 const unsigned& flag)
1759 unsigned n_dim = this->
dim();
1768 const unsigned n_node = this->
nnode();
1780 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
1783 for (
unsigned i = 0;
i < n_dim;
i++)
1800 int local_eqn = 0, local_unknown = 0;
1808 if (solid_el_pt == 0)
1810 throw OomphLibError(
"Trying to project Lagrangian coordinates in "
1811 "non-SolidElement\n",
1817 Shape psi(n_node, n_position_type);
1819 this->
shape(s, psi);
1832 double interpolated_xi_bar =
1837 for (
unsigned l = 0; l < n_node; ++l)
1840 for (
unsigned k = 0;
k < n_position_type; ++
k)
1850 residuals[local_eqn] +=
1851 (interpolated_xi_proj - interpolated_xi_bar) * psi(l,
k) *
1857 for (
unsigned l2 = 0; l2 < n_node; l2++)
1860 for (
unsigned k2 = 0; k2 < n_position_type; k2++)
1864 if (local_unknown >= 0)
1866 jacobian(local_eqn, local_unknown) +=
1867 psi(l2, k2) * psi(l,
k) *
W;
1883 Shape psi(n_node, n_position_type);
1885 this->
shape(s, psi);
1894 double interpolated_x_proj = 0.0;
1896 if (solid_el_pt != 0)
1898 interpolated_x_proj =
1904 interpolated_x_proj = this->
get_field(0, fld,
s);
1912 for (
unsigned l = 0; l < n_node; ++l)
1915 for (
unsigned k = 0;
k < n_position_type; ++
k)
1918 if (solid_el_pt != 0)
1932 if (n_position_type != 1)
1935 "positions not in SolidElement\n",
1946 residuals[local_eqn] +=
1947 (interpolated_x_proj - interpolated_x_bar) * psi(l,
k) *
W;
1952 for (
unsigned l2 = 0; l2 < n_node; l2++)
1955 for (
unsigned k2 = 0; k2 < n_position_type; k2++)
1958 if (solid_el_pt != 0)
1968 if (local_unknown >= 0)
1970 jacobian(local_eqn, local_unknown) +=
1971 psi(l2, k2) * psi(l,
k) *
W;
2000 double interpolated_value_proj = this->
get_field(now, fld,
s);
2003 double interpolated_value_bar =
2007 for (
unsigned l = 0; l < n_value; l++)
2013 residuals[local_eqn] +=
2014 (interpolated_value_proj - interpolated_value_bar) *
2020 for (
unsigned l2 = 0; l2 < n_value; l2++)
2023 if (local_unknown >= 0)
2025 jacobian(local_eqn, local_unknown) +=
2026 psi[l2] * psi[l] *
W;
2037 Shape psi(n_value, n_dim);
2049 this->interpolated_q(now,
s, q_proj);
2053 cast_el_pt->interpolated_q(
2057 for (
unsigned l = 0; l < n_value; l++)
2063 for (
unsigned i = 0;
i < n_dim;
i++)
2066 residuals[local_eqn] +=
2067 (q_proj[
i] - q_bar[
i]) * psi(l,
i) *
W;
2072 for (
unsigned l2 = 0; l2 < n_value; l2++)
2075 if (local_unknown >= 0)
2077 jacobian(local_eqn, local_unknown) +=
2078 psi(l2,
i) * psi(l,
i) *
W;
2089 "Wrong field specified. This should never happen\n",
2098 throw OomphLibError(
"Wrong type specificied in Projection_type. "
2099 "This should never happen\n",
2115 template<
class ELEMENT>
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
JacobiRotation< float > J
Definition: Jacobi_makeJacobi.cpp:3
int data[]
Definition: Map_placement_new.cpp:1
RowVector3d w
Definition: Matrix_resize_int.cpp:3
float * p
Definition: Tutorial_Map_using.cpp:9
Scalar * b
Definition: benchVecAdd.cpp:17
Definition: axisym_poroelasticity_elements.h:51
static double Default_lambda_sq_value
Static default value for timescale ratio.
Definition: axisym_poroelasticity_elements.h:1365
void get_Z2_flux(const Vector< double > &s, Vector< double > &flux)
Z2 flux (use Darcy flux)
Definition: axisym_poroelasticity_elements.h:1275
void mass_source(const double &time, const Vector< double > &x, double &b) const
Definition: axisym_poroelasticity_elements.h:276
static double Default_youngs_modulus_value
Definition: axisym_poroelasticity_elements.h:1362
virtual unsigned q_internal_index() const =0
double transform_basis(const Vector< double > &s, const Shape &q_basis_local, Shape &psi, Shape &q_basis) const
Definition: axisym_poroelasticity_elements.h:451
void scalar_value_paraview(std::ofstream &file_out, const unsigned &i, const unsigned &nplot) const
Definition: axisym_poroelasticity_elements.h:1059
double * Lambda_sq_pt
Timescale ratio (non-dim. density)
Definition: axisym_poroelasticity_elements.h:1335
virtual unsigned nedge_flux_interpolation_point() const =0
double dq_internal_dt(const unsigned &n) const
dq_internal/dt for the n-th internal degree of freedom
Definition: axisym_poroelasticity_elements.h:970
void compute_error(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm)
Definition: axisym_poroelasticity_elements.cc:308
void point_output_data(const Vector< double > &s, Vector< double > &data)
Definition: axisym_poroelasticity_elements.h:1174
unsigned num_Z2_flux_terms()
Number off flux terms for Z2 error estimator (use Darcy flux)
Definition: axisym_poroelasticity_elements.h:1269
void output_with_projected_flux(std::ostream &outfile, const unsigned &nplot, const Vector< double > unit_normal)
SourceFctPt & solid_body_force_fct_pt()
Access function: Pointer to solid body force function.
Definition: axisym_poroelasticity_elements.h:195
virtual void scale_basis(Shape &basis) const =0
Scale the edge basis to allow arbitrary edge mappings.
virtual unsigned u_index_axisym_poroelasticity(const unsigned &j) const =0
Return the nodal index of the j-th solid displacement unknown.
virtual Vector< Data * > q_edge_data_pt() const =0
unsigned self_test()
Self test.
Definition: axisym_poroelasticity_elements.h:1044
unsigned nscalar_paraview() const
Definition: axisym_poroelasticity_elements.h:1052
const double & porosity() const
Access function for the porosity.
Definition: axisym_poroelasticity_elements.h:183
virtual int q_edge_local_eqn(const unsigned &j) const =0
Return the equation number of the j-th edge (flux) degree of freedom.
void interpolated_u(const Vector< double > &s, Vector< double > &disp) const
Calculate the FE representation of u.
Definition: axisym_poroelasticity_elements.h:576
const double & youngs_modulus() const
Definition: axisym_poroelasticity_elements.h:83
virtual unsigned q_edge_node_number(const unsigned &j) const =0
Return the number of the node where the jth edge unknown is stored.
virtual void set_q_edge(const unsigned &t, const unsigned &j, const double &value)=0
virtual int q_internal_local_eqn(const unsigned &j) const =0
Return the equation number of the j-th internal degree of freedom.
double *& density_ratio_pt()
Access function for pointer to the density ratio (fluid to solid)
Definition: axisym_poroelasticity_elements.h:136
double interpolated_div_q(const Vector< double > &s) const
Calculate the FE representation of div q and return it.
Definition: axisym_poroelasticity_elements.h:834
double interpolated_u(const Vector< double > &s, const unsigned &i) const
Calculate the FE representation of the i-th component of u.
Definition: axisym_poroelasticity_elements.h:604
virtual double shape_basis_test_local_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsi, Shape &u_basis, Shape &u_test, DShape &du_basis_dx, DShape &du_test_dx, Shape &q_basis, Shape &q_test, Shape &p_basis, Shape &p_test, Shape &div_q_basis_ds, Shape &div_q_test_ds) const =0
virtual void set_q_edge(const unsigned &j, const double &value)=0
Set the values of the j-th edge (flux) degree of freedom.
void interpolated_q(const Vector< double > &s, Vector< double > &q) const
Calculate the FE representation of q.
Definition: axisym_poroelasticity_elements.h:689
double interpolated_div_u(const Vector< double > &s, Vector< double > &div_u_components) const
Definition: axisym_poroelasticity_elements.h:527
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Fill in contribution to residuals for the Darcy equations.
Definition: axisym_poroelasticity_elements.h:462
const double & permeability_ratio() const
Definition: axisym_poroelasticity_elements.h:157
AxisymmetricPoroelasticityEquations()
Constructor.
Definition: axisym_poroelasticity_elements.h:64
static double Default_porosity_value
Static default value for the porosity.
Definition: axisym_poroelasticity_elements.h:1383
void(* MassSourceFctPt)(const double &time, const Vector< double > &x, double &f)
Mass source function pointer typedef.
Definition: axisym_poroelasticity_elements.h:59
double * Alpha_pt
Alpha – the biot parameter.
Definition: axisym_poroelasticity_elements.h:1348
double * Nu_pt
Pointer to Poisson's ratio.
Definition: axisym_poroelasticity_elements.h:1332
virtual void set_q_internal(const unsigned &j, const double &value)=0
Set the values of the j-th internal degree of freedom.
virtual double shape_basis_test_local(const Vector< double > &s, Shape &psi, DShape &dpsi, Shape &u_basis, Shape &u_test, DShape &du_basis_dx, DShape &du_test_dx, Shape &q_basis, Shape &q_test, Shape &p_basis, Shape &p_test, Shape &div_q_basis_ds, Shape &div_q_test_ds) const =0
double du_dt(const unsigned &n, const unsigned &i) const
du/dt at local node n
Definition: axisym_poroelasticity_elements.h:882
virtual Data * p_data_pt() const =0
Return pointer to the Data object that stores the pressure values.
double * Porosity_pt
Porosity.
Definition: axisym_poroelasticity_elements.h:1351
virtual unsigned q_edge_index(const unsigned &j) const =0
Return the nodal index at which the jth edge unknown is stored.
SourceFctPt Fluid_body_force_fct_pt
Pointer to fluid source function.
Definition: axisym_poroelasticity_elements.h:1323
virtual void face_local_coordinate_of_flux_interpolation_point(const unsigned &edge, const unsigned &n, Vector< double > &s) const =0
MassSourceFctPt mass_source_fct_pt() const
Access function: Pointer to mass source function (const version)
Definition: axisym_poroelasticity_elements.h:225
virtual unsigned face_index_of_q_edge_basis_fct(const unsigned &j) const =0
Return the face index associated with j-th edge flux degree of freedom.
double interpolated_q(const unsigned &t, const Vector< double > &s, const unsigned i) const
Definition: axisym_poroelasticity_elements.h:757
double *& permeability_pt()
Access function for pointer to the nondim permeability.
Definition: axisym_poroelasticity_elements.h:148
static double Default_permeability_value
Definition: axisym_poroelasticity_elements.h:1372
double *& permeability_ratio_pt()
Definition: axisym_poroelasticity_elements.h:165
void get_q_basis(const Vector< double > &s, Shape &q_basis) const
Compute the transformed basis at local coordinate s.
Definition: axisym_poroelasticity_elements.h:386
virtual unsigned face_index_of_edge(const unsigned &j) const =0
Return the face index associated with specified edge.
static double Default_permeability_ratio_value
Definition: axisym_poroelasticity_elements.h:1377
void(* SourceFctPt)(const double &time, const Vector< double > &x, Vector< double > &f)
Source function pointer typedef.
Definition: axisym_poroelasticity_elements.h:54
virtual void pin_q_internal_value(const unsigned &j, const double &value)=0
Pin the jth internal q value and set it to specified value.
void interpolated_q(const unsigned &t, const Vector< double > &s, Vector< double > &q) const
Definition: axisym_poroelasticity_elements.h:711
double *& nu_pt()
Access function for pointer to Poisson's ratio.
Definition: axisym_poroelasticity_elements.h:112
MassSourceFctPt Mass_source_fct_pt
Pointer to the mass source function.
Definition: axisym_poroelasticity_elements.h:1326
void interpolated_div_q(const Vector< double > &s, double &div_q) const
Calculate the FE representation of div u.
Definition: axisym_poroelasticity_elements.h:782
double transform_basis(const Vector< double > &s, const Shape &q_basis_local, Shape &psi, DShape &dpsi, Shape &q_basis) const
Definition: axisym_poroelasticity_elements.cc:80
virtual unsigned np_basis() const =0
Return the total number of pressure basis functions.
virtual unsigned nq_basis() const
Return the total number of computational basis functions for q.
Definition: axisym_poroelasticity_elements.h:365
virtual double q_edge(const unsigned &t, const unsigned &j) const =0
virtual unsigned required_nvalue(const unsigned &n) const =0
Number of values required at node n.
virtual void edge_flux_interpolation_point_global(const unsigned &edge, const unsigned &j, Vector< double > &x) const =0
const double & density_ratio() const
Access function for the density ratio (fluid to solid)
Definition: axisym_poroelasticity_elements.h:130
SourceFctPt & fluid_body_force_fct_pt()
Access function: Pointer to fluid force function.
Definition: axisym_poroelasticity_elements.h:207
double *& youngs_modulus_pt()
Definition: axisym_poroelasticity_elements.h:90
double * Permeability_pt
permeability
Definition: axisym_poroelasticity_elements.h:1341
virtual void set_p_value(const unsigned &j, const double &value)=0
Set the jth pressure value.
const double & lambda_sq() const
Access function for timescale ratio (nondim density)
Definition: axisym_poroelasticity_elements.h:118
double * Youngs_modulus_pt
Pointer to the nondim Young's modulus.
Definition: axisym_poroelasticity_elements.h:1329
void switch_off_darcy()
Switch off Darcy flow.
Definition: axisym_poroelasticity_elements.h:1015
virtual void pin_p_value(const unsigned &j, const double &p)=0
Pin the jth pressure value and set it to p.
double *& alpha_pt()
Access function for pointer to alpha, the Biot parameter.
Definition: axisym_poroelasticity_elements.h:177
virtual unsigned nq_basis_edge() const =0
Return the number of edge basis functions for q.
virtual double q_internal(const unsigned &j) const =0
Return the values of the j-th internal degree of freedom.
void interpolated_p(const Vector< double > &s, double &p) const
Calculate the FE representation of p.
Definition: axisym_poroelasticity_elements.h:847
void set_q_internal_timestepper(TimeStepper *const time_stepper_pt)
Set the timestepper of the q internal data object.
Definition: axisym_poroelasticity_elements.h:1000
void interpolated_du_dt(const Vector< double > &s, Vector< double > &du_dt) const
Calculate the FE representation of du_dt.
Definition: axisym_poroelasticity_elements.h:663
bool darcy_is_switched_off()
Is Darcy flow switched off?
Definition: axisym_poroelasticity_elements.h:1008
virtual double p_value(const unsigned &j) const =0
Return the jth pressure value.
std::string scalar_name_paraview(const unsigned &i) const
Definition: axisym_poroelasticity_elements.h:1121
double interpolated_div_du_dt(const Vector< double > &s, Vector< double > &div_dudt_components) const
Definition: axisym_poroelasticity_elements.h:479
const double & permeability() const
Access function for the nondim permeability.
Definition: axisym_poroelasticity_elements.h:142
SourceFctPt solid_body_force_fct_pt() const
Access function: Pointer to solid body force function (const version)
Definition: axisym_poroelasticity_elements.h:201
virtual void fill_in_generic_residual_contribution(Vector< double > &residuals, DenseMatrix< double > &jacobian, bool flag)
Fill in residuals and, if flag==true, jacobian.
Definition: axisym_poroelasticity_elements.cc:523
double interpolated_p(const Vector< double > &s) const
Calculate the FE representation of p and return it.
Definition: axisym_poroelasticity_elements.h:869
virtual void get_div_q_basis_local(const Vector< double > &s, Shape &div_q_basis_ds) const =0
SourceFctPt fluid_body_force_fct_pt() const
Access function: Pointer to fluid force function (const version)
Definition: axisym_poroelasticity_elements.h:213
double interpolated_q(const Vector< double > &s, const unsigned i) const
Calculate the FE representation of the i-th component of q.
Definition: axisym_poroelasticity_elements.h:734
MassSourceFctPt & mass_source_fct_pt()
Access function: Pointer to mass source function.
Definition: axisym_poroelasticity_elements.h:219
double d2u_dt2(const unsigned &n, const unsigned &i) const
d^2u/dt^2 at local node n
Definition: axisym_poroelasticity_elements.h:912
static double Default_density_ratio_value
Static default value for the density ratio.
Definition: axisym_poroelasticity_elements.h:1368
virtual double q_internal(const unsigned &t, const unsigned &j) const =0
const double & alpha() const
Access function for alpha, the Biot parameter.
Definition: axisym_poroelasticity_elements.h:171
bool Darcy_is_switched_off
Boolean to record that darcy has been switched off.
Definition: axisym_poroelasticity_elements.h:1354
virtual void pin_q_edge_value(const unsigned &j, const double &value)=0
Pin the j-th edge (flux) degree of freedom and set it to specified value.
void output_fct(std::ostream &outfile, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Definition: axisym_poroelasticity_elements.cc:205
SourceFctPt Solid_body_force_fct_pt
Pointer to solid body force function.
Definition: axisym_poroelasticity_elements.h:1320
void fluid_body_force(const double &time, const Vector< double > &x, Vector< double > &b) const
Definition: axisym_poroelasticity_elements.h:254
static double Default_alpha_value
Static default value for alpha, the biot parameter.
Definition: axisym_poroelasticity_elements.h:1380
double * Permeability_ratio_pt
Definition: axisym_poroelasticity_elements.h:1345
double interpolated_u(const unsigned &t, const Vector< double > &s, const unsigned &i) const
Definition: axisym_poroelasticity_elements.h:633
void solid_body_force(const double &time, const Vector< double > &x, Vector< double > &b) const
Definition: axisym_poroelasticity_elements.h:232
virtual Vector< double > edge_flux_interpolation_point(const unsigned &edge, const unsigned &j) const =0
virtual Data * q_internal_data_pt() const =0
Return pointer to the Data object that stores the internal flux values.
virtual double q_edge(const unsigned &j) const =0
Return the values of the j-th edge (flux) degree of freedom.
const double & nu() const
Access function for Poisson's ratio.
Definition: axisym_poroelasticity_elements.h:96
double *& lambda_sq_pt()
Access function for pointer to timescale ratio (nondim density)
Definition: axisym_poroelasticity_elements.h:124
virtual void get_p_basis(const Vector< double > &s, Shape &p_basis) const =0
Compute the pressure basis.
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Fill in the Jacobian matrix for the Newton method.
Definition: axisym_poroelasticity_elements.h:469
double dq_edge_dt(const unsigned &n) const
dq_edge/dt for the n-th edge degree of freedom
Definition: axisym_poroelasticity_elements.h:942
double * Density_ratio_pt
Density ratio.
Definition: axisym_poroelasticity_elements.h:1338
double *& porosity_pt()
Access function for pointer to the porosity.
Definition: axisym_poroelasticity_elements.h:189
virtual void set_q_internal(const unsigned &t, const unsigned &j, const double &value)=0
virtual unsigned nq_basis_internal() const =0
Return the number of internal basis functions for q.
void output(std::ostream &outfile)
Output with default number of plot points.
Definition: axisym_poroelasticity_elements.h:1221
virtual int p_local_eqn(const unsigned &j) const =0
Return the equation number of the j-th pressure degree of freedom.
virtual void get_q_basis_local(const Vector< double > &s, Shape &q_basis) const =0
Comute the local form of the q basis at local coordinate s.
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
Definition: nodes.h:238
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
Definition: nodes.h:483
unsigned ntstorage() const
Definition: nodes.cc:879
void set_time_stepper(TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
Definition: nodes.cc:406
Vector< double > & external_element_local_coord(const unsigned &interaction_index, const unsigned &ipt)
Definition: element_with_external_element.h:136
FiniteElement *& external_element_pt(const unsigned &interaction_index, const unsigned &ipt)
Definition: element_with_external_element.h:107
Definition: error_estimator.h:79
FaceGeometry()
Definition: axisym_poroelasticity_elements.h:2120
Definition: elements.h:4998
Definition: elements.h:1313
virtual unsigned nplot_points_paraview(const unsigned &nplot) const
Definition: elements.h:2862
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
Definition: elements.h:2175
double nodal_value(const unsigned &n, const unsigned &i) const
Definition: elements.h:2593
unsigned nnodal_position_type() const
Definition: elements.h:2463
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
Definition: elements.cc:3962
virtual void shape(const Vector< double > &s, Shape &psi) const =0
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Definition: elements.h:1432
unsigned dim() const
Definition: elements.h:2611
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Definition: elements.h:1759
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
Definition: elements.h:1963
virtual void get_s_plot(const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
Definition: elements.h:3148
virtual double local_to_eulerian_mapping(const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
Definition: elements.h:1508
virtual void dshape_local(const Vector< double > &s, Shape &psi, DShape &dpsids) const
Definition: elements.h:1981
void(* UnsteadyExactSolutionFctPt)(const double &, const Vector< double > &, Vector< double > &)
Definition: elements.h:1765
double dshape_eulerian(const Vector< double > &s, Shape &psi, DShape &dpsidx) const
Definition: elements.cc:3298
virtual double J_eulerian(const Vector< double > &s) const
Definition: elements.cc:4103
Data *& internal_data_pt(const unsigned &i)
Return a pointer to i-th internal data object.
Definition: elements.h:622
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227
TimeStepper *& time_stepper_pt()
Definition: geom_objects.h:192
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.
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
Definition: nodes.h:1022
Definition: oomph_definitions.h:222
Axisymmetric poro elasticity upgraded to become projectable.
Definition: axisym_poroelasticity_elements.h:1399
unsigned nhistory_values_for_coordinate_projection()
Definition: axisym_poroelasticity_elements.h:1519
int local_equation(const unsigned &fld, const unsigned &j)
Return local equation number of value j in field fld.
Definition: axisym_poroelasticity_elements.h:1697
void residual_for_projection(Vector< double > &residuals, DenseMatrix< double > &jacobian, const unsigned &flag)
Definition: axisym_poroelasticity_elements.h:1752
ProjectableAxisymmetricPoroelasticityElement()
Definition: axisym_poroelasticity_elements.h:1403
double jacobian_and_shape_of_field(const unsigned &fld, const Vector< double > &s, Shape &psi)
Definition: axisym_poroelasticity_elements.h:1526
unsigned nfields_for_projection()
Definition: axisym_poroelasticity_elements.h:1482
Vector< std::pair< Data *, unsigned > > data_values_of_field(const unsigned &fld)
Definition: axisym_poroelasticity_elements.h:1408
unsigned nvalue_of_field(const unsigned &fld)
Return number of values in field fld.
Definition: axisym_poroelasticity_elements.h:1661
double get_field(const unsigned &t, const unsigned &fld, const Vector< double > &s)
Definition: axisym_poroelasticity_elements.h:1610
void output(std::ostream &outfile, const unsigned &nplot)
Output FE representation of soln as in underlying element.
Definition: axisym_poroelasticity_elements.h:1743
unsigned nhistory_values_for_projection(const unsigned &fld)
Definition: axisym_poroelasticity_elements.h:1489
Template-free Base class for projectable elements.
Definition: projection.h:55
unsigned Projected_lagrangian
Definition: projection.h:78
Projection_Type Projection_type
Definition: projection.h:83
unsigned Time_level_for_projection
Time level we are projecting (0=current values; >0: history values)
Definition: projection.h:70
@ Value
Definition: projection.h:63
@ Lagrangian
Definition: projection.h:62
@ Coordinate
Definition: projection.h:61
unsigned Projected_field
Field that is currently being projected.
Definition: projection.h:67
unsigned Projected_coordinate
Definition: projection.h:74
virtual double get_field(const unsigned &time, const unsigned &fld, const Vector< double > &s)=0
Definition: projection.h:183
Definition: elements.h:3561
int position_local_eqn(const unsigned &n, const unsigned &k, const unsigned &j) const
Definition: elements.h:4137
Definition: timesteppers.h:231
unsigned ntstorage() const
Definition: timesteppers.h:601
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
Definition: timesteppers.h:594
bool is_steady() const
Definition: timesteppers.h:389
static int f(const TensorMap< Tensor< int, 3 > > &tensor)
Definition: cxx11_tensor_map.cpp:237
RealScalar s
Definition: level1_cplx_impl.h:130
int * m
Definition: level2_cplx_impl.h:294
char char char int int * k
Definition: level2_impl.h:374
EIGEN_DEVICE_FUNC const Scalar & q
Definition: SpecialFunctionsImpl.h:2019
squared absolute value
Definition: GlobalFunctions.h:87
void flux(const double &time, const Vector< double > &x, double &flux)
Get flux applied along boundary x=0.
Definition: pretend_melt.cc:59
int error
Definition: calibrate.py:297
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
@ W
Definition: quadtree.h:63
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
list x
Definition: plotDoE.py:28
t
Definition: plotPSD.py:36
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
void output(std::ostream &outfile, const unsigned &nplot)
Overload output function.
Definition: overloaded_element_body.h:490
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2