29#ifndef OOMPH_AXISYM_POROELASITICTY_FACE_ELEMENTS_HEADER
30#define OOMPH_AXISYM_POROELASITICTY_FACE_ELEMENTS_HEADER
34#include <oomph-lib-config.h>
48 namespace AxisymmetricPoroelasticityTractionElementHelper
91 template<
class ELEMENT>
122 const unsigned&
intpt,
136 const unsigned&
intpt,
163 ELEMENT*
elem_pt =
dynamic_cast<ELEMENT*
>(element_pt);
174 throw OomphLibError(
"This flux element will not work correctly "
175 "if nodes are hanging\n",
243 const unsigned&
i)
const
310 const double permeability =
bulk_pt->permeability();
326 for (
unsigned i = 0;
i < 2;
i++)
366 for (
unsigned i = 0;
i <
n_dim;
i++)
372 for (
unsigned i = 0;
i <
n_dim;
i++)
378 for (
unsigned i = 0;
i <
n_dim;
i++)
387 outfile << permeability * q[0] <<
" "
388 << permeability * q[1] <<
" ";
395 outfile << du_dt[0] + permeability * q[0] <<
" "
396 << du_dt[1] + permeability * q[1] <<
" ";
484 for (
unsigned i = 0;
i < 2;
i++)
537 const double permeability =
bulk_el_pt->permeability();
573 for (
unsigned i = 0;
i < 2;
i++)
609 double tol = 1.0e-10;
612 std::stringstream
junk;
613 junk <<
"Gap between bulk and face element coordinate\n"
614 <<
"is suspiciously large: " <<
error
615 <<
"\nBulk at: " <<
x_bulk[0] <<
" " <<
x_bulk[1] <<
"\n"
626 for (
unsigned i = 0;
i < 2;
i++)
650 template<
class ELEMENT>
676 template<
class ELEMENT>
702 template<
class ELEMENT>
716 if (n_position_type != 1)
718 throw OomphLibError(
"Poroelasticity equations are not yet implemented "
719 "for more than one position type",
730 ELEMENT*
bulk_el_pt =
dynamic_cast<ELEMENT*
>(bulk_element_pt());
761 for (
unsigned i = 0;
i <
n_dim - 1;
i++)
768 ELEMENT*
bulk_el_pt =
dynamic_cast<ELEMENT*
>(bulk_element_pt());
785 for (
unsigned i = 0;
i <
n_dim;
i++)
792 for (
unsigned j = 0;
j <
n_dim - 1;
j++)
801 for (
unsigned i = 0;
i <
n_dim - 1;
i++)
803 for (
unsigned j = 0;
j <
n_dim - 1;
j++)
809 for (
unsigned k = 0;
k <
n_dim;
k++)
828 Adet = A(0, 0) * A(1, 1) - A(0, 1) * A(1, 0);
832 "Wrong dimension in AxisymmetricPoroelasticityTractionElement",
853 for (
unsigned i = 0;
i <
n_dim;
i++)
877 for (
unsigned i = 0;
i <
n_dim;
i++)
900 template<
class POROELASTICITY_BULK_ELEMENT,
class NAVIER_STOKES_BULK_ELEMENT>
903 POROELASTICITY_BULK_ELEMENT>,
920 const double&
q()
const
935 const unsigned&
intpt,
963 for (
unsigned i = 0;
i < (
n_dim - 1);
i++)
977 double tol = 1.0e-10;
980 std::stringstream
junk;
981 junk <<
"Gap between external and face element coordinate\n"
982 <<
"is suspiciously large:" <<
error <<
" ( tol = " <<
tol
984 <<
"\nExternal/bulk at: " <<
x_bulk[0] <<
" " <<
x_bulk[1]
1007 const unsigned&
intpt,
1081 for (
unsigned i = 0;
i <
n_dim - 1;
i++)
1118 for (
unsigned i = 0;
i <
n_dim;
i++)
1124 for (
unsigned i = 0;
i <
n_dim;
i++)
1130 for (
unsigned i = 0;
i <
n_dim;
i++)
1186 template<
class POROELASTICITY_BULK_ELEMENT,
class NAVIER_STOKES_BULK_ELEMENT>
1187 double FSILinearisedAxisymPoroelasticTractionElement<
1188 POROELASTICITY_BULK_ELEMENT,
1189 NAVIER_STOKES_BULK_ELEMENT>::Default_Q_Value = 1.0;
A class for elements that allow the imposition of an applied combined traction and pore fluid pressur...
virtual void get_traction(const double &time, const unsigned &intpt, const Vector< double > &x, const Vector< double > &n, Vector< double > &traction)
Get the traction vector: Pass number of integration point (dummy), Eulerrian coordinate and normal ve...
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Return the residuals.
virtual void get_pressure(const double &time, const unsigned &intpt, const Vector< double > &x, const Vector< double > &n, double &pressure)
Get the pressure value: Pass number of integration point (dummy), Eulerrian coordinate and normal vec...
void output(FILE *file_pt)
C_style output function.
void(*&)(const double &time, const Vector< double > &x, const Vector< double > &n, Vector< double > &traction) traction_fct_pt()
Reference to the traction function pointer.
void contribution_to_total_porous_flux(double &skeleton_flux_contrib, double &seepage_flux_contrib)
Compute contributions to integrated porous flux over boundary: .
AxisymmetricPoroelasticityTractionElement()
Default constructor.
void(* Traction_fct_pt)(const double &time, const Vector< double > &x, const Vector< double > &n, Vector< double > &result)
Pointer to an imposed traction function. Arguments: Eulerian coordinate; outer unit normal; applied t...
double lagrangian_eulerian_translation_factor(const Vector< double > &s)
Ratio of lengths of line elements (or annular surface areas) in the undeformed and deformed configura...
void output(std::ostream &outfile)
Output function.
double zeta_nodal(const unsigned &n, const unsigned &k, const unsigned &i) const
Specify the value of nodal zeta from the face geometry The "global" intrinsic coordinate of the eleme...
void(* Pressure_fct_pt)(const double &time, const Vector< double > &x, const Vector< double > &n, double &result)
Pointer to an imposed pressure function. Arguments: Eulerian coordinate; outer unit normal; applied p...
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Fill in contribution from Jacobian.
void fill_in_contribution_to_residuals_axisym_poroelasticity_face(Vector< double > &residuals)
Helper function that actually calculates the residuals.
void pressure(const double &time, const Vector< double > &s, double &pressure)
Compute pressure value at specified local coordinate Should only be used for post-processing; ignores...
AxisymmetricPoroelasticityTractionElement(FiniteElement *const &element_pt, const int &face_index)
Constructor, which takes a "bulk" element and the value of the index and its limit.
void traction(const double &time, const Vector< double > &s, Vector< double > &traction)
Compute traction vector at specified local coordinate Should only be used for post-processing; ignore...
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function.
void output(std::ostream &outfile, const unsigned &n_plot)
Output function.
void(*&)(const double &time, const Vector< double > &x, const Vector< double > &n, double &pressure) pressure_fct_pt()
Reference to the pressure function pointer.
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.
This is a base class for all elements that require external sources (e.g. FSI, multi-domain problems ...
Vector< double > & external_element_local_coord(const unsigned &interaction_index, const unsigned &ipt)
Access function to get source element's local coords for specified interaction index at specified int...
void set_ninteraction(const unsigned &n_interaction)
Set the number of interactions in the element This function is usually called in the specific element...
void fill_in_jacobian_from_external_interaction_by_fd(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Calculate the contributions to the jacobian from all external interaction degrees of freedom (geometr...
FiniteElement *& external_element_pt(const unsigned &interaction_index, const unsigned &ipt)
Access function to source element for specified interaction index at specified integration point.
A class for elements that allow the imposition of an applied combined traction and pore fluid pressur...
void get_pressure(const double &time, const unsigned &intpt, const Vector< double > &x, const Vector< double > &n, double &pressure)
Get the pore fluid pressure from the neighbouring Navier-Stokes bulk element's stress.
FSILinearisedAxisymPoroelasticTractionElement(FiniteElement *const &element_pt, const int &face_index)
Constructor, which takes a "bulk" element and the value of the index and its limit.
double * Q_pt
Pointer to the ratio, , of the stress used to non-dimensionalise the fluid stresses to the stress use...
double *& q_pt()
Return a pointer the ratio of stress scales used to non-dimensionalise the fluid and poroelastic equa...
const double & q() const
Return the ratio of the stress scales used to non-dimensionalise the fluid and poroelasticity equatio...
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Fill in contribution from Jacobian.
static double Default_Q_Value
Static default value for the ratio of stress scales used in the fluid and poroelasticity equations (d...
void get_traction(const double &time, const unsigned &intpt, const Vector< double > &x, const Vector< double > &n, Vector< double > &traction)
Get the (combined) traction from the neighbouring Navier-Stokes bulk element's stress.
FSILinearisedAxisymPoroelasticTractionElement()
Default constructor.
void output(std::ostream &outfile, const unsigned &n_plot)
Output function – overloaded version – ignores n_plot since fsi elements can only evaluate traction a...
FaceElements are elements that coincide with the faces of higher-dimensional "bulk" elements....
int & face_index()
Index of the face (a number that uniquely identifies the face in the element)
void outer_unit_normal(const Vector< double > &s, Vector< double > &unit_normal) const
Compute outer unit normal at the specified local coordinate.
double zeta_nodal(const unsigned &n, const unsigned &k, const unsigned &i) const
In a FaceElement, the "global" intrinsic coordinate of the element along the boundary,...
Vector< double > local_coordinate_in_bulk(const Vector< double > &s) const
Return vector of local coordinates in bulk element, given the local coordinates in this FaceElement.
double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s. Overloaded to get information from bulk...
FiniteElement *& bulk_element_pt()
Pointer to higher-dimensional "bulk" element.
FaceGeometry class definition: This policy class is used to allow construction of face elements that ...
A general Finite Element class.
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
virtual void dshape_local_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsids) const
Return the geometric shape function and its derivative w.r.t. the local coordinates at the ipt-th int...
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 std::string tecplot_zone_string(const unsigned &nplot) const
Return string for tecplot zone header (when plotting nplot points in each "coordinate direction")
unsigned nnodal_position_type() const
Return the number of coordinate types that the element requires to interpolate the geometry between t...
double size() const
Calculate the size of the element (length, area, volume,...) in Eulerian computational coordinates....
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Return the local equation number corresponding to the i-th value at the n-th local node.
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.
virtual void get_s_plot(const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
Get cector of local coordinates of plot point i (when plotting nplot points in each "coordinate direc...
virtual unsigned nplot_points(const unsigned &nplot) const
Return total number of plot points (when plotting nplot points in each "coordinate direction")
double nodal_position(const unsigned &n, const unsigned &i) const
Return the i-th coordinate at local node n. If the node is hanging, the appropriate interpolation is ...
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...
virtual void build_face_element(const int &face_index, FaceElement *face_element_pt)
Function for building a lower dimensional FaceElement on the specified face of the FiniteElement....
unsigned nodal_dimension() const
Return the required Eulerian dimension of the nodes in this element.
virtual void write_tecplot_zone_footer(std::ostream &outfile, const unsigned &nplot) const
Add tecplot zone "footer" to output stream (when plotting nplot points in each "coordinate direction"...
bool has_hanging_nodes() const
Return boolean to indicate if any of the element's nodes are geometrically hanging.
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.
An OomphLibError object which should be thrown when an run-time error is encountered....
An OomphLibWarning object which should be created as a temporary object to issue a warning....
RefineableElements are FiniteElements that may be subdivided into children to provide a better local ...
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...
TAdvectionDiffusionReactionElement()
Constructor: Call constructors for TElement and AdvectionDiffusionReaction equations.
Time *const & time_pt() const
Access function for the pointer to time (const version)
double & time()
Return the current value of the continuous time.
bool Allow_gap_in_FSI
Public boolean to allow gap between poro-elastic and Navier Stokes element in FSI computations....
void Zero_pressure_fct(const double &time, const Vector< double > &x, const Vector< double > &N, double &load)
Default load function (zero pressure)
void Zero_traction_fct(const double &time, const Vector< double > &x, const Vector< double > &N, Vector< double > &load)
Default load function (zero traction)
const double Pi
50 digits from maple
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).