26#ifndef OOMPH_POROELASTICITY_ELEMENTS_HEADER
27#define OOMPH_POROELASTICITY_ELEMENTS_HEADER
31#include <oomph-lib-config.h>
37#include "elasticity_tensor.h"
44 template<
unsigned DIM>
179 for (
unsigned i = 0;
i <
n;
i++)
186 (*Force_solid_fct_pt)(time, x, b);
201 for (
unsigned i = 0;
i <
n;
i++)
208 (*Force_fluid_fct_pt)(time, x, b);
225 (*Mass_source_fct_pt)(time, x, b);
236 const double E(
const unsigned&
i,
239 const unsigned&
l)
const
255 virtual unsigned u_index(
const unsigned&
n)
const = 0;
275 virtual double q_edge(
const unsigned&
n)
const = 0;
279 virtual double q_edge(
const unsigned&
t,
const unsigned&
n)
const = 0;
286 virtual double q_internal(
const unsigned&
t,
const unsigned&
n)
const = 0;
319 const unsigned&
n)
const = 0;
393 for (
unsigned i = 0;
i <
DIM;
i++)
445 for (
unsigned i = 0;
i <
DIM;
i++)
575 double du_dt(
const unsigned&
n,
const unsigned&
i)
const
605 double d2u_dt2(
const unsigned&
n,
const unsigned&
i)
const
719 const unsigned&
nplot,
725 const unsigned&
nplot,
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
void set_time_stepper(TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
Set a new timestepper by resizing the appropriate storage. If already assigned the equation numbering...
A base class that represents the fourth-rank elasticity tensor defined such that.
A general Finite Element class.
double nodal_value(const unsigned &n, const unsigned &i) const
Return the i-th value stored at local node n. Produces suitably interpolated values for hanging nodes...
virtual void shape(const Vector< double > &s, Shape &psi) const =0
Calculate the geometric shape functions at local coordinate s. This function must be overloaded for e...
unsigned dim() const
Return the spatial dimension of the element, i.e. the number of local coordinates required to paramet...
unsigned nnode() const
Return the number of nodes.
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Function pointer for function that computes vector-valued steady "exact solution" as .
virtual double local_to_eulerian_mapping(const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
Calculate the mapping from local to Eulerian coordinates, given the derivatives of the shape function...
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
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...
void(* UnsteadyExactSolutionFctPt)(const double &, const Vector< double > &, Vector< double > &)
Function pointer for function that computes Vector-valued time-dependent function as .
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...
TimeStepper *& time_stepper_pt()
Access function for pointer to time stepper: Null if object is not time-dependent.
Class implementing the generic maths of the poroelasticity equations: linear elasticity coupled with ...
double dq_internal_dt(const unsigned &n) const
dq_internal/dt for the n-th internal degree of freedom
virtual int q_edge_local_eqn(const unsigned &n) const =0
Return the equation number of the n-th edge (flux) degree of freedom.
SourceFctPt Force_fluid_fct_pt
Pointer to fluid source function.
void output_fct(std::ostream &outfile, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output FE representation of exact soln: x,y,u1,u2,div_q,p at Nplot^DIM plot points.
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
Returns the geometric basis, and the q, p and divergence basis functions and test functions at local ...
MassSourceFctPt Mass_source_fct_pt
Pointer to the mass source function.
const double & density_ratio() const
Access function for the density ratio.
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
Returns the geometric basis, and the q, p and divergence basis functions and test functions at integr...
void(* SourceFctPt)(const double &time, const Vector< double > &x, Vector< double > &f)
Source function pointer typedef.
double * Porosity_pt
Porosity.
SourceFctPt force_fluid_fct_pt() const
Access function: Pointer to fluid force function (const version)
double interpolated_u(const Vector< double > &s, const unsigned &i) const
Calculate the FE representation of the i-th component of u.
virtual void pin_q_internal_value(const unsigned &n)=0
Pin the nth internal q value.
const double & k_inv() const
Access function for the nondim inverse permeability.
static double Default_porosity_value
Static default value for the porosity.
void force_solid(const double &time, const Vector< double > &x, Vector< double > &b) const
Indirect access to the solid force function - returns 0 if no forcing function has been set.
void mass_source(const double &time, const Vector< double > &x, double &b) const
Indirect access to the mass source function - returns 0 if no mass source function has been set.
SourceFctPt Force_solid_fct_pt
Pointer to solid source function.
virtual unsigned q_edge_node_number(const unsigned &n) const =0
Return the number of the node where the nth edge unknown is stored.
const double & porosity() const
Access function for the porosity.
ElasticityTensor *& elasticity_tensor_pt()
Return the pointer to the elasticity_tensor.
MassSourceFctPt & mass_source_fct_pt()
Access function: Pointer to mass source function.
virtual unsigned u_index(const unsigned &n) const =0
Return the nodal index of the n-th solid displacement unknown.
virtual int q_internal_local_eqn(const unsigned &n) const =0
Return the equation number of the n-th internal (moment) degree of freedom.
double transform_basis(const Vector< double > &s, const Shape &q_basis_local, Shape &psi, DShape &dpsi, Shape &q_basis) const
Performs a div-conserving transformation of the vector basis functions from the reference element to ...
virtual unsigned np_basis() const =0
Return the total number of pressure basis functions.
static double Default_density_ratio_value
Static default value for the density ratio.
void get_stress(const Vector< double > &s, DenseMatrix< double > &sigma) const
Return the Cauchy stress tensor, as calculated from the elasticity tensor at specified local coordina...
virtual void fill_in_generic_residual_contribution(Vector< double > &residuals, DenseMatrix< double > &jacobian, bool flag)
Fill in residuals and, if flag==true, jacobian.
virtual unsigned q_internal_index() const =0
Return the index of the internal data where the q_internal degrees of freedom are stored.
double dq_edge_dt(const unsigned &n) const
dq_edge/dt for the n-th edge degree of freedom
void interpolated_p(const Vector< double > &s, double &p) const
Calculate the FE representation of p.
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Fill in contribution to residuals for the Darcy equations.
double d2u_dt2(const unsigned &n, const unsigned &i) const
d^2u/dt^2 at local node n
virtual void pin_p_value(const unsigned &n, const double &p)=0
Pin the nth pressure value.
double interpolated_div_q(const Vector< double > &s)
Calculate the FE representation of div q and return it.
virtual double q_edge(const unsigned &n) const =0
Return the values of the edge (flux) degrees of freedom.
void interpolated_q(const Vector< double > &s, Vector< double > &u) const
Calculate the FE representation of q.
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Fill in the Jacobian matrix for the Newton method.
SourceFctPt & force_solid_fct_pt()
Access function: Pointer to solid force function.
virtual unsigned nq_basis_edge() const =0
Return the number of edge basis functions for q.
const double & alpha() const
Access function for alpha.
void(* MassSourceFctPt)(const double &time, const Vector< double > &x, double &f)
Mass source function pointer typedef.
virtual void scale_basis(Shape &basis) const =0
Scale the edge basis to allow arbitrary edge mappings.
static double Default_lambda_sq_value
Static default value for timescale ratio (1.0 – for natural scaling)
double *& lambda_sq_pt()
Access function for pointer to timescale ratio (nondim density)
virtual double q_internal(const unsigned &n) const =0
Return the values of the internal (moment) degrees of freedom.
static double Default_alpha_value
Static default value for alpha.
virtual void edge_gauss_point_global(const unsigned &edge, const unsigned &n, Vector< double > &x) const =0
Returns the global coordinates of the nth gauss point along an edge.
virtual double q_internal(const unsigned &t, const unsigned &n) const =0
Return the values of the internal (moment) degrees of freedom at time history level t.
virtual int p_local_eqn(const unsigned &n) const =0
Return the equation number of the n-th pressure degree of freedom.
void compute_error(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm)
Compute the error between the FE solution and the exact solution using the H(div) norm for q and L^2 ...
ElasticityTensor * Elasticity_tensor_pt
Pointer to the elasticity tensor.
void set_q_internal_timestepper(TimeStepper *const time_stepper_pt)
Set the timestepper of the q internal data object.
virtual unsigned nedge_gauss_point() const =0
Returns the number of gauss points along each edge of the element.
void force_fluid(const double &time, const Vector< double > &x, Vector< double > &b) const
Indirect access to the fluid forcing function - returns 0 if no forcing function has been set.
PoroelasticityEquations()
Constructor.
void get_q_basis(const Vector< double > &s, Shape &q_basis) const
Returns the transformed basis at local coordinate s.
virtual void get_q_basis_local(const Vector< double > &s, Shape &q_basis) const =0
Returns the local form of the q basis at local coordinate s.
virtual unsigned required_nvalue(const unsigned &n) const =0
Number of values required at node n.
const double & lambda_sq() const
Access function for timescale ratio (nondim density)
MassSourceFctPt mass_source_fct_pt() const
Access function: Pointer to mass source function (const version)
virtual double p_value(unsigned &n) const =0
Return the nth pressure value.
virtual unsigned q_edge_index(const unsigned &n) const =0
Return the nodal index at which the nth edge unknown is stored.
double interpolated_p(const Vector< double > &s) const
Calculate the FE representation of p and return it.
double * Density_ratio_pt
Density ratio.
static double Default_k_inv_value
Static default value for 1/k.
double *& porosity_pt()
Access function for pointer to the porosity.
double interpolated_q(const Vector< double > &s, const unsigned i) const
Calculate the FE representation of the i-th component of q.
void interpolated_div_q(const Vector< double > &s, double &div_q) const
Calculate the FE representation of div u.
void output(std::ostream &outfile)
Output with default number of plot points.
unsigned self_test()
Self-test: Check inversion of element & do self-test for GeneralisedElement. Return 0 if OK.
double du_dt(const unsigned &n, const unsigned &i) const
du/dt at local node n
double *& k_inv_pt()
Access function for pointer to the nondim inverse permeability.
double *& density_ratio_pt()
Access function for pointer to the density ratio.
virtual void get_div_q_basis_local(const Vector< double > &s, Shape &div_q_basis_ds) const =0
Returns the local form of the q basis and dbasis/ds at local coordinate s.
const double E(const unsigned &i, const unsigned &j, const unsigned &k, const unsigned &l) const
Access function to the entries in the elasticity tensor.
void interpolated_u(const Vector< double > &s, Vector< double > &disp) const
Calculate the FE representation of u.
SourceFctPt force_solid_fct_pt() const
Access function: Pointer to solid force function (const version)
void get_strain(const Vector< double > &s, DenseMatrix< double > &strain) const
Return the strain tensor.
virtual unsigned nq_basis() const =0
Return the total number of computational basis functions for q.
virtual double q_edge(const unsigned &t, const unsigned &n) const =0
Return the values of the edge (flux) degrees of freedom at time history level t.
double transform_basis(const Vector< double > &s, const Shape &q_basis_local, Shape &psi, Shape &q_basis) const
Performs a div-conserving transformation of the vector basis functions from the reference element to ...
double * Lambda_sq_pt
Timescale ratio (non-dim. density)
double *& alpha_pt()
Access function for pointer to alpha.
virtual double edge_gauss_point(const unsigned &edge, const unsigned &n) const =0
Returns the nth gauss point along an edge.
virtual void get_p_basis(const Vector< double > &s, Shape &p_basis) const =0
Return the pressure basis.
SourceFctPt & force_fluid_fct_pt()
Access function: Pointer to fluid force function.
A Class for shape functions. In simple cases, the shape functions have only one index that can be tho...
TAdvectionDiffusionReactionElement<NREAGENT,DIM,NNODE_1D> elements are isoparametric triangular DIM-d...
Base class for time-stepping schemes. Timestepper provides an approximation of the temporal derivativ...
unsigned ntstorage() const
Return the number of doubles required to represent history (one for steady)
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
bool is_steady() const
Flag to indicate if a timestepper has been made steady (possibly temporarily to switch off time-depen...
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).