StVenantKirchhoffElastic
This page documents the St. Venant-Kirchhoff hyperelastic law. The runtime type is:
StVenantKirchhoffElastic
The St. Venant-Kirchhoff model is the simplest finite-strain extension of Hooke's law: the second Piola-Kirchhoff stress is a linear function of the Green-Lagrange strain. It captures large rotations exactly but is only valid for small to moderate strains, since the model softens unphysically under large compression.
User Guide
Strain energy function
Psi = mu*(E && E) + 0.5*lambda*(tr(E))^2
E = 0.5*(C - I), C = F.T() & F
Differentiating gives the second Piola-Kirchhoff stress that the code evaluates,
S = 2*mu*E + lambda*tr(E)*I
which is then pushed forward to the Cauchy stress,
sigma = (1/J)*F & S & F.T(), J = det(F)
The law is registered in the nonlinear-geometry table, so it works with both total-Lagrangian and updated-Lagrangian solid models. It is not available to linear-geometry solid models; use linearElastic there instead.
Because Psi is quadratic in the Green strain, the model does not penaliseJ approaching zero. Do not use it for problems with large volumetriccompression; prefer neoHookeanElastic or another of the rubber-like laws.
Model options
Elastic constants must be given as either E and nu or mu and K. Mixing the two pairs is a fatal error.
| Entry | Requirement | Description |
|---|---|---|
E | with nu | Young's modulus, [1 -1 -2 0 0 0 0] |
nu | with E | Poisson's ratio, dimensionless |
mu | with K | Shear modulus, [1 -1 -2 0 0 0 0] |
K | with mu | Bulk modulus, [1 -1 -2 0 0 0 0] |
rho | required | Density, [1 -3 0 0 0 0 0] |
The first Lame parameter is derived internally:
lambda = nu*E/((1 + nu)*(1 - 2*nu)) plane strain / 3-D
lambda = nu*E/((1 + nu)*(1 - nu)) plane stress
The plane-stress form is used when the top-level planeStress entry of constant/mechanicalProperties is yes. The bulk modulus is then recomputed as K = lambda + (2/3)*mu, so a user-supplied K is overwritten under plane stress.
The base class also accepts the optional entries solvePressureEqn (default false), pressureSmoothingScaleFactor (default 100) and regionName, but this law never calls updateSigmaHyd(), so the pressure smoothing has no effect here.
Recommended dictionary setup
Minimal example for constant/mechanicalProperties:
planeStress no;
mechanical
(
steel
{
type StVenantKirchhoffElastic;
rho rho [1 -3 0 0 0 0 0] 7800;
E E [1 -1 -2 0 0 0 0] 200e+09;
nu nu [0 0 0 0 0 0 0] 0.3;
}
);
Field glossary
F,Ff: total deformation gradient at cell centres and faces.relF,relFf: relative deformation gradient, used in the updated Lagrangian formulation.sigma: Cauchy stress tensor returned to the solid model.impK: implicit stiffness used as the Laplacian diffusivity.
Developer Notes
Class role
StVenantKirchhoffElastic inherits from mechanicalLaw and is added to the nonLinGeomMechLaw runtime selection table. It holds lambda_, mu_ and K_ as uniform dimensionedScalar values, so a single material entry is homogeneous.
Construction
The constructor resolves E and nu from whichever pair the user supplied, sets lambda_ from the plane-stress or plane-strain relation, recomputes K_ = lambda_ + (2/3)*mu_, and finally calls F().storeOldTime() and Ff().storeOldTime() so that the old-time deformation gradients exist from the first time step.
correct() walkthrough
Both the volume-field and the surface-field overloads follow the same five steps:
- call
updateF(sigma, mu_, K_); atruereturn means the solid model requested enforced linearity for stability, the base class has already written a Hooke's law stress, and the function returns; - materialise
FTinto its own field before contracting; - form
C = symm(FT & F)and the Green strainE = 0.5*(C - I); - evaluate
S = 2*mu*E + lambda*tr(E)*I; - push forward with
sigma = (1/J)*transform(F, S).
This file carries the canonical NOTE [IMPORTANT] comment that other lawsrefer to: never write F.T() & F as a single field expression. The lazytmp<> pathway can drop shear-squared contributions when the transpose is notmaterialised, which was observed with g++ 11.x. Always build FT first.
Implicit stiffness
impK() returns 2*mu + lambda, the standard segregated-solver diffusivity for an isotropic elastic material. It is a uniform field, so the same value is used everywhere within the material.
Extension points
- The constitutive relation is duplicated between the two
correct()overloads; any change must be applied to both. setRestart()setsAUTO_WRITEonFandFfso a restart reproduces the same deformation state.
Tutorials
Cases that select StVenantKirchhoffElastic:
solids/hyperelasticity/rigidRotation/rotatingBlocksolids/hyperelasticity/rigidRotation/rotatingCylindersolids/hyperelasticity/rigidRotation/rotatingSpherefluidSolidInteraction/cavityFlexibleBottom
The fluidSolidInteraction/3dTube and fluidSolidInteraction-preCICE/3dTube cases ship the law as a commented alternative to linearElastic.