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
- Hyperelastic solid mechanics module for large-deformation problems.
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.