where M has a time-independent mass density ρM∈Ωn(M) and
W has a time-independent metric ♭W∈Γ(T∗W⊙T∗W).
It is a covariant symmetric 2-tensor, with 2 open covector slots.
Physically, it is just the dot product.
The elastic potential energy for a map ϕ takes the form:
U(ϕ)=∫MU(ϕ∗♭W)
for some fiber-wise (nonlinear) mapping (depending on material)
Up:Tp∗M⊙Tp∗Mnonlinear⋀nTp∗M
i.e. the potential is only a function of the induced metric encoding its notion of distances in the world. (Frame-indifference)
Terminology
The deformation gradient is defined by the pushforwardF:
F:=ϕ∗=dϕ∈Γ(T∗M⊗TϕW)
In index notation, it is Fαi=∂αϕi. If U∈TxM (a material tangent vector) then F(U)=∑αFαiUα. We can think of i as a row index and α as a column index, such that F pushes it forward via matrix multiplication.
Idea
F is a linear map (since it lives in the bundle over a tensor algebra) that “eats” a material vector and spits out a world vector.
Since we want a measurement tool for material space M (to measure deformation without having to constantly reference the world space W), we need to pullback. Indeed, the adjointF∗ is the pullback.
The induced metric ϕ∗♭W can be understood by:
source code
The induced metric C:=F∗♭WF∈Γ(T∗M⊙T∗M) is called the (right)-Cauchy-Green tensor.
Understanding the Diagram: How to Measure Deformed Length
The diagram illustrates how the Cauchy-Green tensor C operates by composing three separate maps:
F (Deformation Gradient): We start with a small undeformed vector in the material tangent space TpM. F pushes this vector forward into the physical world W, telling us what the deformed vector looks like in the spatial tangent space Tϕ(p)W.
♭W (World Metric): Once in the physical world, you use the standard metric ♭W to measure its length (or compute the dot product with another vector). This mathematically “lowers the index”, mapping the spatial vector to a spatial covector in Tϕ(p)∗W.
F∗ (Pullback): Finally, the adjoint F∗ pulls that measurement result back to the material covector space Tp∗M.
By taking the direct dashed path C=F∗♭WF, we skip the intermediate steps. C acts as an “induced metric” living entirely in the undeformed material space. If we feed C two undeformed material vectors, it instantly outputs what their dot product will be after they are stretched and twisted into the physical world.
Another Perspective
Another way to think about this is, suppose we had X,Y∈TpM, two infinitesimal material vectors. We want to build a machine (tesnor) that lives entirely in M, but want to measure the dot product of X,Y after deformation in world space W.
Let us call this machine C, where C(X,Y)=deformed dot product. The dot product, represents the distance/length/angle of the two material vectors.
First, we simulate deformation. Then we measure them.
♭W=I because it takes the inner product (dot product) of the basis vectors. Since the basis vectors in R3 are orthogonal to each other, it forms the identity matrix.
Deriving Elastic Force
Back to our potential energy, given some pointwise nonlinear elastic model U:
The elastic force is the negative gradient of the potential energy: f=−dUϕ. The assumption of elasticity is that the total potential energy is only a function of the Cauchy-Green tesnor in the above form.
In particular, Up at each p∈M is a n-form-valued (measures energy density) function of a metric.
Up:Tp∗M⊙Tp∗Mnonlinear⋀nTp∗M
To compute this derivative, we can view the energy functional as a sequence of mappings and apply the chain rule. In the context of fields, this is essentially continuous backpropagation.
1. The Global Sequence of Maps
First, we can express the entire energy functional U(ϕ) as a sequence of macroscopic maps from the space of all possible flow maps C∞(M;W) to the final scalar energy:
d∇W: Takes the velocity field and computes its spatial gradient (giving the perturbation to the deformation gradient F).
dG∣F: Maps the change in F to the change in the Cauchy-Green tensor C (where G(F)=F∗♭WF).
dU∣C: Maps the change in the metric/strain to a change in the local energy density (an n-form).
∫M: Integrates the energy density to get the total change in scalar energy δU∈R.
3. The Backward Pass (Forces and Stresses)
To find the force, we need the derivative dUϕ. We start from the scalar energy output (the number 1∈R∗) and pull it backward through the adjoint/dual of each linear map:
As we pull back the scalar "1", it transforms into different physical stress quantities at each intermediate space.
Actual Model
Let (♭M)αβ be a fixed reference metric. This is the geometry of the material in its undeformed, relaxed state (the rest length). Let C^ be the deformation tensor. In particular,
C^βα=(♯M)αγCγβ=[(♭M)−1C]βα
Recall that C is the current deformed lengths of the material vectors. The ♯M operator “divides by the resting length”. So, C^=id⟺no deformation.
Write U(C)=Ψ(E)ρM, where we separate the energy density into a function of the strain and the mass density. Ψ(E) represents the energy per unit mass, or the specific internal energy.
By defining names for the intermediate states of the pullback, we recover the classic stress tensors of continuum mechanics!
2nd Piola-Kirchhoff Stress
When the pullback reaches the space dual to the Cauchy-Green tensor C, we get the
2nd Piola-Kirchhoff stress:
S:=2∂C∂U∈Γ(TM⊙TM⊗⋀nT∗M)
Physical Meaning: This stress lives entirely in the undeformed material space (M). It is the energetic conjugate to the metric C. If you change the deformed lengths of the material (change C), S tells you how much work is done.
1st Piola-Kirchhoff Stress Tensor
Pulling back one step further to the space dual to the deformation gradient F, we get the 1st Piola-Kirchhoff stress:
P:=dG∣F∗S=∂F∂U∈Γ(⋀n−1T∗M⊗Tϕ∗W)
Physical Meaning: This is a two-point tensor. It eats a material (n−1)-form (an area element in the undeformed state) and outputs the actual physical force vector in the world space W. This is the mathematical formalization of “Force per unit undeformed area”.
Notice its type: Ωn−1(M;Tϕ∗W). It’s an (n−1)-form valued in world covectors!
Finally, pulling back P through the spatial divergence (d∇)∗ yields the actual elastic force density dUϕ.
Force Evaluation
The formal derivation of all the above physics is quite long. We distill the math into the following pipeline for simulation:
The input is ϕ, or a map of the current node positions.
Evaluate Fαi=∂αϕi
The spatial derivative of the current node positions relative to the original rest positions.
C=F⊤F, the right Cauchy-Green stress tensor.
E=21[♯MC−I], the St Venant Strain. Since ♭W=I in our orthonormal frame, then ♯M=♭W−1=I−1=I.
f=∇⋅P, the force output that accelerates the nodes in the next step.
Finite Element Simulation
We can discretize the deformable body by triangle mesh (2D) or tetrahedral mesh (3D), where n=dim(M). Each vertex i stores a fixed rest positionXi (material coordinate) and a variable world positionxi (representing value of flow map, ϕ(Xi)=xi).
source code
The data on the vertices can be linearly interpolated into a piecewise linear deformation map
Consider some point Y inside an undeformed triangle/tetrahedron. We can express Y as a linear combination (weighted sum) of the triangle’s vertices Xi. These are called the barycentric coordinates of Y. Two rules must be true:
Y=w0X0+w1X1+⋯+wnXn, such that the point is the weighted sum.
The weights must sum to 1: w0+w1+⋯+wn=1. This ensures that the point is inside the triangle/tetrahedron.
w0w1⋮wn=[X01X11⋯⋯Xn1]−1[Y1]
The interior points must also not change the weights during deformation, i.e they must stay at the same position relative to the other world space particles. Thus,
[y1]=[x01x11⋯⋯xn1]w0w1⋮wn
By substitution, we get the above equation.
Deformation Gradient
The deformation gradient is a piecewise constant matrix
To compute the force on a vertex i, we take the adjoint of the gradient. The differential of F with respect to xi is
F˚c=−nVc1v≺c∑∣x˚v∣[−Ac,vnc,v⊤−]
where v≺c are all the vertices of cell c. We get a tiny perturbation of a vertex as x˚v. The resulting change is the change in the deformation gradient F˚c. The adjoint of this gradient accumulates the traction force to the vertices:
where n is the dimension of the cell (3 for tetrahedra, 2 for triangles).
We also can calculate the total mass of each vertex by approximating the mass of each cell and distributing it to the vertices:
mv=n1c≻v∑n+11Vc
or the lumped mass.
Time Integration
For external forces
mvx¨v=fv+fvext
We can use RK4 or symplectic Euler method. We just need to evaluate the force (fv)v given current positions (xv)v at each time step. The step size is Δt=O(edge length).