FollowerPressure.h file
Follower (deformation-dependent) pressure load with consistent tangent, for total-Lagrangian hyperelastic formulations.
A pressure acting on the CURRENT configuration of a boundary surface contributes the external virtual work
where is the deformed surface and the cross product carries BOTH the outward normal direction and the current area element (Nanson). In residual convention (R = internal - external), the load term and its EXACT linearization are
(cf. Bonet & Wood, Nonlinear Continuum Mechanics for Finite Element Analysis, ch. 8). Only SURFACE-parametric derivatives appear: the operators are assembled face-locally, with no volume trace required. The load-stiffness is generally NONSYMMETRIC; use a direct solver or a nonsymmetric Krylov method.
At the residual reduces EXACTLY to the dead load (the classic BoundaryIntegral(p * Dot(w, N)) term), which both fixes the sign convention (positive p pushes AGAINST the outward normal of the solid, as a pressure must; for a lumen pressure on an inner wall, whose outward normal points INTO the lumen, this pushes the wall outward) and gives a built-in verification limit.
Both integrators support the standard .over(attribute) restriction. Supported spaces: vector P1 (the local basis is evaluated analytically with the framework's layout). Supported dimensions: 3D (triangular faces) and 2D (segment faces, where the "cross product" is the +90-degree rotation of the tangent).
Usage (static prestress with FULL Newton convergence):
Real p = 0.0; // ramped externally Solid::FollowerPressureForce load(p, w, dState); // residual, "+" Solid::FollowerPressureTangent loadK(p, d, w, dState); // tangent, "+" problem = tangent + internal + loadK + load // note: both PLUS, matching internal/tangent + DirichletBC(...);
The pressure is captured BY REFERENCE (the integrators are copied into the Problem, and all copies read the same variable), so ramping the original variable between solves updates the load with no reassembly bookkeeping.
Namespaces
- namespace Rodin
- The Rodin library for finite element methods and shape optimization.
- namespace Rodin::Solid
- Constitutive laws, kinematics, and solid-mechanics integration.
Classes
-
template<class StateFES, class State>struct Rodin::Solid::Internal::FaceKinematics
-
template<class TestFunctionType, class DisplacementType>class Rodin::Solid::FollowerPressureForce
- Linear-form integrator: follower pressure residual . Add it with "+" to the Problem (it already carries the residual-convention sign of a pressure pushing along the outward normal).
-
template<class TrialFunctionType, class TestFunctionType, class DisplacementType>class Rodin::Solid::FollowerPressureTangent
- Bilinear-form integrator: the EXACT load stiffness of the follower pressure, . Add it with "+" alongside the material tangent. NONSYMMETRIC.
Functions
-
auto p1FaceBasis(size_t a,
const Math::
SpatialVector<Real>& rc, size_t faceDim) -> Real - auto p1FaceBasisGrad(size_t a, size_t j, size_t faceDim) -> Real
-
void surfaceCross(Math::
SpatialVector<Real>& out, const Math:: SpatialVector<Real>& t1, const Math:: SpatialVector<Real>& t2, size_t sdim)
Function documentation
Real p1FaceBasis(size_t a,
const Math:: SpatialVector<Real>& rc,
size_t faceDim)
| Parameters | |
|---|---|
| a | Basis or lattice index in the reference element. |
| rc | Coordinates in the reference element. |
| faceDim | Dimension of the reference face. |
| Returns | Value of the selected linear reference-face basis function. |
Scalar P1 basis on the reference segment/triangle.
Real p1FaceBasisGrad(size_t a, size_t j, size_t faceDim)
| Parameters | |
|---|---|
| a | Basis or lattice index in the reference element. |
| j | Index of the second coordinate. |
| faceDim | Dimension of the reference face. |
| Returns | Reference-coordinate derivative of the selected linear face basis function. |
Constant reference gradient component d(phi_a)/d(xi_j).
void surfaceCross(Math:: SpatialVector<Real>& out,
const Math:: SpatialVector<Real>& t1,
const Math:: SpatialVector<Real>& t2,
size_t sdim)
| Parameters | |
|---|---|
| out | Storage for the computed result. |
| t1 | First tangent vector. |
| t2 | Second tangent vector. |
| sdim | Dimension of the embedding space. |
"Cross product" carrying normal direction and area element: 3D: t1 x t2; 2D: +90-degree rotation of t1 (t2 ignored).