Jumat, 02 Maret 2012

Nonlinear finite elements/Updated Lagrangian formulation


Nonlinear finite elements/Updated Lagrangian formulation

Contents

  [hide

Updated Lagrangian formulation[edit]

We will now derive the finite element equations for the updated Lagrangian formulation for three-dimensional problems in solid mechanics.

Updated Lagrangian governing equations[edit]

The updated Lagrangian equations are

  \begin{align}
    \rho_0(\mathbf{X}) & = J(\mathbf{X},t)~\rho(\mathbf{X},t) \\
    \rho~\dot{\mathbf{v}} &= \boldsymbol{\nabla} \cdot \boldsymbol{\sigma}^T + \rho~\mathbf{b} \\
    \boldsymbol{\sigma} & = \boldsymbol{\sigma}^T \\
    \rho~\dot{e} & = \boldsymbol{\sigma}:\boldsymbol{d} - \boldsymbol{\nabla} \cdot \mathbf{q} + \rho~s \\
    \mathcal{L}_\varphi~\boldsymbol{\sigma} &= \boldsymbol{G}(\boldsymbol{\sigma}, \boldsymbol{d}, T, \dots) \\
    \boldsymbol{d} & = \frac{1}{2}(\boldsymbol{l} + \boldsymbol{l}^T) 
  \end{align}
The boundary conditions are

  \begin{align}
    \boldsymbol{\sigma}^T\cdot\mathbf{n} & = \mathbf{t}  \qquad \text{on}~~\partial \Omega _t \\
    \mathbf{v} & = \overline{\mathbf{v}}  \qquad \text{on}~~\partial \Omega _v 
  \end{align}
The initial conditions are

  \begin{align}
    \mathbf{v}(\mathbf{X},0) & = \mathbf{v}_0(\mathbf{X}) \\
    \boldsymbol{\sigma}(\mathbf{X},0) & = \boldsymbol{\sigma}_0(\mathbf{X})  \qquad \text{or} \qquad
    \mathbf{u}(\mathbf{X},0) & = \mathbf{u}_0(\mathbf{X}) 
  \end{align}

Dependent variables[edit]

Note that the dependent variables in this case are all expressed as functions of the Lagrangian (material) coordinates, i.e.,
  1. Velocity (\mathbf{v}(\mathbf{X},t))
  2. Cauchy stress (\boldsymbol{\sigma}(\mathbf{X},t))
  3. Rate of deformation (\boldsymbol{d}(\mathbf{v},t))
Also note that instead of \boldsymbol{\sigma} and \boldsymbol{d}, we may use \boldsymbol{S} and \boldsymbol{E} in our calculations and then transform to \boldsymbol{\sigma}.

Weak form of the balance of linear momentum[edit]

Another name for the weak form is the Principle of Virtual Power (or Principle of Virtual Work if rates are not involved).
The strong form consists of the balance of linear momentum and the traction boundary conditions. That is,

  {
  \begin{align}
    \boldsymbol{\nabla} \cdot \boldsymbol{\sigma}^T + \rho~\mathbf{b} & = \rho~\mathbf{a} \qquad \text{in}~~\Omega \\
    \boldsymbol{\sigma}^T\cdot\mathbf{n} & = \mathbf{t} \qquad \text{on}~~\partial \Omega _t
  \end{align}
  }
where \mathbf{a} = \dot{\mathbf{v}} = \ddot{\mathbf{u}} is the acceleration.
The weak form of this equation can be written as

  {
  \int_{\Omega} \rho~\mathbf{a}\cdot\mathbf{w}~\text{dV} + \int_{\Omega} \boldsymbol{\sigma}:(\boldsymbol{\nabla} \mathbf{w})~\text{dV} = 
    \int_{\Omega} \rho~\mathbf{b}\cdot\mathbf{w}~\text{dV} + {\int_{\partial \Omega}}_t \mathbf{t}\cdot\mathbf{w}~\text{dA}
  }
where \mathbf{w} is a vector valued weighting function (also called a test function) that is zero at the points on the boundary where the essential boundary conditions on \mathbf{v} are applied. Therefore we can think of \mathbf{w} as a variation of \mathbf{v}.

Derivation of the weak form[edit]

We proceed in the usual manner to derive the weak form. We multiply the differential equation with the weighting function and integrate over the volume to get

  \int_{\Omega} \mathbf{w}\cdot\left(\boldsymbol{\nabla} \cdot \boldsymbol{\sigma}^T + \rho~\mathbf{b} - \rho~\mathbf{a}\right)~\text{dV} = 0
Using the identity

  \boldsymbol{\nabla} \cdot (\boldsymbol{A}^T\cdot\mathbf{b}) = \mathbf{b}\cdot(\boldsymbol{\nabla} \cdot \boldsymbol{A}) + \boldsymbol{A}:(\boldsymbol{\nabla} \mathbf{b})
and noting that \boldsymbol{\sigma} = \boldsymbol{\sigma}^T (conservation of angular momentum), we have

  \int_{\Omega} \mathbf{w}\cdot(\boldsymbol{\nabla} \cdot \boldsymbol{\sigma}^T)~\text{dV} = \int_{\Omega} \boldsymbol{\nabla} \cdot (\boldsymbol{\sigma}\cdot\mathbf{w})~\text{dV} 
    - \int_{\Omega} \boldsymbol{\sigma}:(\boldsymbol{\nabla} \mathbf{w})~\text{dV}
From the divergence theorem we have

  \int_{\Omega} \boldsymbol{\nabla} \cdot (\boldsymbol{\sigma}\cdot\mathbf{w})~\text{dV} = \int_{\partial \Omega} \mathbf{n}\cdot(\boldsymbol{\sigma}\cdot\mathbf{w})~\text{dA}
where \mathbf{n} is the outward unit normal to the boundary. So,

  \int_{\Omega} \mathbf{w}\cdot(\boldsymbol{\nabla} \cdot \boldsymbol{\sigma})~\text{dV} =  \int_{\partial \Omega} \mathbf{n}\cdot(\boldsymbol{\sigma}\cdot\mathbf{w})~\text{dA}
    - \int_{\Omega} \boldsymbol{\sigma}:(\boldsymbol{\nabla} \mathbf{w})~\text{dV}
Now, on the boundary

  \mathbf{n}\cdot(\boldsymbol{\sigma}\cdot\mathbf{w}) \equiv n_i~\sigma_{ij}~w_j = \sigma_{ji}~n_i~w_j
     \equiv (\boldsymbol{\sigma}^T\cdot\mathbf{n})\cdot\mathbf{w} = \mathbf{t}\cdot\mathbf{w}
On the part of the boundary where no tractions are applied, we have \mathbf{t} = \mathbf{0} and hence \mathbf{n}\cdot(\boldsymbol{\sigma}\cdot\mathbf{w}) = \mathbf{0}. Therefore we can write

  \int_{\Omega} \mathbf{w}\cdot(\boldsymbol{\nabla} \cdot \boldsymbol{\sigma})~\text{dV} =  {\int_{\partial \Omega}}_t \mathbf{t}\cdot\mathbf{w}~\text{dA}
    - \int_{\Omega} \boldsymbol{\sigma}:(\boldsymbol{\nabla} \mathbf{w})~\text{dV}
where \partial\Omega_t is the part of the boundary where the tractions are applied.
Plugging this expression into the weighted average form of the balance of linear momentum we get

  {\int_{\partial \Omega}}_t \mathbf{t}\cdot\mathbf{w}~\text{dA} - \int_{\Omega} \boldsymbol{\sigma}:(\boldsymbol{\nabla} \mathbf{w})~\text{dV} + 
  \int_{\Omega} \mathbf{w}\cdot\left(\rho~\mathbf{b} - \rho~\mathbf{a}\right)~\text{dV} = 0
Rearranging terms we get the required weak form

  \int_{\Omega} \rho~\mathbf{a}\cdot\mathbf{w}~\text{dV} + \int_{\Omega} \boldsymbol{\sigma}:(\boldsymbol{\nabla} \mathbf{w})~\text{dV} = 
    \int_{\Omega} \rho~\mathbf{b}\cdot\mathbf{w}~\text{dV} + {\int_{\partial \Omega}}_t \mathbf{t}\cdot\mathbf{w}~\text{dA}

Physical interpretation of terms[edit]

To provide a physical interpretation of the four terms in the weak form, we write the weighting function as a variation of the velocity, i.e., \mathbf{w} = \delta \mathbf{v}. Then we have the familiar principle of virtual power:

  \int_{\Omega} \rho~\mathbf{a}\cdot\delta \mathbf{v}~\text{dV} + \int_{\Omega} \boldsymbol{\sigma}:(\boldsymbol{\nabla} \delta \mathbf{v})~\text{dV} = 
    \int_{\Omega} \rho~\mathbf{b}\cdot\delta \mathbf{v}~\text{dV} + {\int_{\partial \Omega}}_t \mathbf{t}\cdot\delta \mathbf{v}~\text{dA}
The first term on the left can then be identified as the virtual kinetic power, the second term on the left as the virtual internal power, and the sum of the two terms on the right as the virtual external power. In other words, we have

  \begin{align}
    \delta P_{\text{kin}} & := \int_{\Omega} \rho~\mathbf{a}\cdot\delta \mathbf{v}~\text{dV} \\
    \delta P_{\text{int}} & := \int_{\Omega} \boldsymbol{\sigma}:(\boldsymbol{\nabla} \delta \mathbf{v})~\text{dV} \\
    \delta P_{\text{ext}} & := 
    \int_{\Omega} \rho~\mathbf{b}\cdot\delta \mathbf{v}~\text{dV} + {\int_{\partial \Omega}}_t \mathbf{t}\cdot\delta \mathbf{v}~\text{dA}
  \end{align}
and

    \delta P_{\text{kin}} + \delta P_{\text{int}} = \delta P_{\text{ext}}~.
We can see why the second terms is identified as the virtual internal power as follows. Note that

  \boldsymbol{\nabla} \delta \mathbf{v} = \delta \boldsymbol{l} = \delta (\boldsymbol{d} + \boldsymbol{w})
where \boldsymbol{l} is the velocity gradient, \boldsymbol{d} is symmetric rate of deformation tensor, and \boldsymbol{w} is the skew symmetric spin tensor. Therefore, since the product of a symmetric and a skew symmetric tensor is zero, we have

  \boldsymbol{\sigma}:\boldsymbol{\nabla} \delta \mathbf{v} = \boldsymbol{\sigma}:\delta \boldsymbol{d} + \boldsymbol{\sigma}:\delta \boldsymbol{w}
    = \boldsymbol{\sigma}:\delta \boldsymbol{d}
Hence,

    \delta P_{\text{int}} = \int_{\Omega} \boldsymbol{\sigma}:\delta \boldsymbol{d}~\text{dV}
This has the same form as the expression for internal power that we discussed earlier.

Finite element discretization[edit]

Let us go back to the original weak form that we derived, i.e.,

  \int_{\Omega} \rho~\mathbf{a}\cdot\mathbf{w}~\text{dV} + \int_{\Omega} \boldsymbol{\sigma}:(\boldsymbol{\nabla} \mathbf{w})~\text{dV} = 
    \int_{\Omega} \rho~\mathbf{b}\cdot\mathbf{w}~\text{dV} + {\int_{\partial \Omega}}_t \mathbf{t}\cdot\mathbf{w}~\text{dA}

Trial function[edit]

To start the discretization process we have to first choose an approximate solution \mathbf{v}_h from the space \mathcal{S}_h of admissible finite element trial functions. These functions must satisfy at least C0 continuity and the essential boundary condition \mathbf{v} = \overline{\mathbf{v}} on {\partial \Omega }_v.
More formally, we choose \mathbf{v}_h(\mathbf{X},t) \in \mathcal{S}_h where

  \mathcal{S}_h = \{ \mathbf{v}~|~ \mathbf{v} \in C^0(\mathbf{X}), ~~\mathbf{v} = \overline{\mathbf{v}}~\text{on}~
    \partial \Omega _v \}
If we discretize the body into a number of elements with n nodes, then we can write the approximate solution as

  \mathbf{v}_h(\mathbf{X},t) = \sum_{I=1}^n N_I(\mathbf{X})~\mathbf{v}_I(t)
The quantities N_I(\mathbf{X}) are the shape functions which provide the required level of continuity and are chosen so that \mathbf{v}_h \in \mathcal{S}_h.

Test function[edit]

We also have to choose appropriate weighting functions (\mathbf{w}_h) which are also known as test functions.
In Galerkin finite elements we choose these functions from the same space as the trial functions with the additional restriction that these functions go to zero at points on the boundary where essential boundary conditions are applied.
Formally, choose \mathbf{w}_h(\mathbf{X}) \in \mathcal{S}_t where

  \mathcal{S}_t = \{ \mathbf{w}~|~ \mathbf{w} \in C^0(\mathbf{X}), ~~\mathbf{w} = \mathbf{0}~\text{on}~
    \partial \Omega _v \}
For finite element analysis, these weighting functions have the same form as the trial function, i.e.,

  \mathbf{w}_h(\mathbf{X}) = \sum_{I=1}^n N_I(\mathbf{X})~\mathbf{w}_I

Motion[edit]

Instead of a trial function for the velocity, we can start with one for the motion and then take time derivatives. In this case, we choose the motion to be approximated by

  \mathbf{x}_h(\mathbf{X},t) = \sum_{I=1}^n N_I(\mathbf{X})~\mathbf{x}_I(t)
where N_I(\mathbf{X}) are the nodal shape functions (note that these are functions of \mathbf{X}) and \mathbf{x}_I(t) are the positions of nodes i in the current configuration. Therefore, nodes remain coincident with material point labels at all times.
Therefore, in the reference configuration, we have

  \mathbf{x}_h(\mathbf{X},0) = \sum_{I=1}^n N_I(\mathbf{X})~\mathbf{x}_I(0)
               = \sum_{I=1}^n N_I(\mathbf{X})~\mathbf{X}_I
The shape functions are also chosen such that

  N_I(\mathbf{X}_J) = \delta_{IJ}
Then the displacement \mathbf{u} = \mathbf{x} - \mathbf{X} can be approximated by

  \mathbf{u}_h(\mathbf{X},t) = \mathbf{x}_h(\mathbf{X},t) - \mathbf{X}_h = 
     \sum_{I=1}^n N_I(\mathbf{X})~\left[\mathbf{x}_I(t) - \mathbf{X}_I\right]
    = \sum_{I=1}^n N_I(\mathbf{X})~\mathbf{u}_I(t)
The velocity \mathbf{v} is given by the time derivative of \mathbf{u} keeping \mathbf{X} fixed. So we have

  \mathbf{v}_h(\mathbf{X},t) = \sum_{I=1}^n N_I(\mathbf{X})~\dot{\mathbf{u}}_I(t)
    = \sum_{I=1}^n N_I(\mathbf{X})~\mathbf{v}_I(t)
Note that this approximation has the same form as the trial function for the velocity that we started with.
The acceleration \mathbf{a} is given by the time derivative of \mathbf{v}. Hence

  \mathbf{a}_h(\mathbf{X},t) = \sum_{I=1}^n N_I(\mathbf{X})~\ddot{\mathbf{u}}_I(t)
    = \sum_{I=1}^n N_I(\mathbf{X})~\dot{\mathbf{v}}_I(t) = \sum_{I=1}^n N_I(\mathbf{X})~\mathbf{a}_I(t)

Velocity gradient and rate of deformation[edit]

The spatial velocity gradient \boldsymbol{l} is given by

  \boldsymbol{l}(\mathbf{x},t) = \boldsymbol{\nabla} \mathbf{v}(\mathbf{x},t)
Note that the derivatives are with respect to \mathbf{x} and not \mathbf{X}.
Therefore, the approximation that we seek has the form

  \boldsymbol{l}_h(\mathbf{x},t) = \sum_{I=1}^n \boldsymbol{\nabla} [N_I(\mathbf{X})~\mathbf{v}_I(t)]
Using the identity

  \boldsymbol{\nabla} (\varphi~\mathbf{a}) = \mathbf{a}\otimes(\boldsymbol{\nabla} \varphi) + \varphi~\boldsymbol{\nabla} \mathbf{a}
we get

  \boldsymbol{l}_h(\mathbf{x},t) = \sum_{I=1}^n \mathbf{v}_I(t)\otimes\boldsymbol{\nabla} N_I(\mathbf{X})
In index notation,

  [l_{ij}]_h = \sum_{I=1}^n v_{Ii}~\frac{\partial N_I(\mathbf{X},t)}{\partial x_j} = v_{Ii}~N_{I,j}
The rate of deformation is then given by

  \boldsymbol{d}_h(\mathbf{x},t) = \frac{1}{2}~\left(\boldsymbol{l}_h + \boldsymbol{l}_h^T\right) = 
   \sum_{I=1}^n \frac{1}{2}\left[\mathbf{v}_I(t)\otimes\boldsymbol{\nabla} N_I(\mathbf{X}) + 
                      \boldsymbol{\nabla} N_I(\mathbf{X})\otimes\mathbf{v}_I(t)\right]
In index notation,

  [d_{ij}]_h = \sum_{I=1}^n \frac{1}{2}[v_{Ii}~N_{I,j} + v_{Ij}~N_{I,i}]

Approximate weak form[edit]

We can now substitute the trial and test functions into the weak form of the momentum equation to get (using the same procedure as in one-dimension)

  {
  \int_{\Omega} \rho~N_I~\mathbf{a}_h~\text{dV} + 
  \int_{\Omega} \boldsymbol{\sigma}\cdot(\boldsymbol{\nabla} N_I)~\text{dV} = 
  \int_{\Omega} \rho~N_I~\mathbf{b}~\text{dV} + 
  {\int_{\partial \Omega}}_t N_I~\mathbf{t}~\text{dA}
  }
We can write this approximate weak form as

  \mathbf{f}_I^{\text{kin}} + \mathbf{f}_I^{\text{int}} = \mathbf{f}_I^{\text{ext}}
where the first term represents the inertial force, the second term the internal force, and the third term the external force. Thus,

  {
  \begin{align}
  \mathbf{f}_I^{\text{kin}} & := \int_{\Omega} \rho~N_I~\mathbf{a}_h~\text{dV} \\ 
  \mathbf{f}_I^{\text{int}} & := \int_{\Omega} \boldsymbol{\sigma}\cdot(\boldsymbol{\nabla} N_I)~\text{dV} \\
  \mathbf{f}_I^{\text{ext}} & := \int_{\Omega} \rho~N_I~\mathbf{b}~\text{dV} + 
                     {\int_{\partial \Omega}}_t N_I~\mathbf{t}~\text{dA}
  \end{align}
  }

The mass matrix[edit]

The term

  \mathbf{f}_I^{\text{kin}} := \int_{\Omega} \rho~N_I~\mathbf{a}_h~\text{dV}
is the inertial force term.
If we substitute

  \mathbf{a}(\mathbf{X},t) = \sum_{J=1}^n N_J(\mathbf{X})~\mathbf{a}_J(t)
into the inertial force terms, we get

  \mathbf{f}_I^{\text{kin}} = \sum_{J=1}^n \left[\int_{\Omega} \rho~N_I~N_J~\text{dV}\right]~\mathbf{a}_J
We define the mass matrix as the quantity

  {
  M_{IJ} :=  \int_{\Omega} \rho~N_I~N_J~\text{dV} = \int_{\Omega_0} \rho_0~N_I~N_J~\text{dV}_0
  }
Therefore, the inertial force can be expressed, in analogy with Newton's second law, as

  \mathbf{f}_I^{\text{kin}} = \sum_{J=1}^n M_{IJ}~\mathbf{a}_J

Semi-discrete finite element equations[edit]

We can then write the semi-discrete version of the weak form in the shape of a matrix equation as

  [\mathbf{M}][\mathbf{a}] = [\mathbf{f}^{\text{ext}}] - [\mathbf{f}^{\text{int}}]
These equations are ordinary differential equations because we still have time derivatives on the left hand side - hence the system of equations is semi-discrete.
There are a number of ways in which the discretization in time can be effected. Some common approaches are the generalized midpoint rule, the Newmark β method, or Runge-Kutta explicit integration schemes. There is a large literature on the best way of doing the discretization in time with the goal of conserving both momentum and energy as accurately as possible.

Taking derivatives and calculating integrals[edit]

At this stage we are faced with the problem of calculating derivatives and integrals with respect to \mathbf{x} of quantities that depend on \mathbf{X}. How can we proceed?
The standard way of resolving this issue is to do all our calculations with respect to a parent element and then map the results to the reference or current configurations as necessary.
To make things more concrete let us consider a single element and label the three domains as
  1. Parent element (\square).
  2. Reference element (Ω0).
  3. Current element (Ω).
Let the maps that we need be
  1. Parent \rightarrow Reference : \mathbf{X} = \mathbf{X}(\boldsymbol{\xi}) = \mathbf{x}(\boldsymbol{\xi}, 0).
  2. Parent \rightarrow Current : \mathbf{x} = \mathbf{x}(\boldsymbol{\xi}, t).
  3. Reference \rightarrow Current : \mathbf{x} = \mathbf{x}(\mathbf{X},t).
This situation is illustrated (for a two dimensional situation) in the following figure.
Maps from parent element to reference and current configurations
We define the map between the parent element and the element in the current configuration as

  \mathbf{x}(\boldsymbol{\xi}, t) = \sum_{I} N_I(\boldsymbol{\xi})~\mathbf{x}_I(t)
Then,

  \mathbf{v}(\boldsymbol{\xi}, t) = \sum_{I} N_I(\boldsymbol{\xi})~\mathbf{v}_I(t)
Let us now try to compute the spatial velocity gradient. We have

  \frac{\partial \mathbf{v}(\mathbf{x},t)}{\partial \boldsymbol{\xi}} = \frac{\partial \mathbf{v}}{\partial \mathbf{x}}\cdot\frac{\partial \mathbf{x}}{\partial \boldsymbol{\xi}}
    = \frac{\partial \mathbf{v}}{\partial \mathbf{x}}\cdot\boldsymbol{F}_{\xi}
The quantity

  \boldsymbol{F}_{\xi} := \frac{\partial \mathbf{x}}{\partial \boldsymbol{\xi}}
         = \sum_{I} \mathbf{x}_I\otimes\frac{\partial N_I}{\partial \boldsymbol{\xi}}
is called the Jacobian of the motion and is a function of time.
Inverting, we get

  {
  \frac{\partial \mathbf{v}}{\partial \mathbf{x}} = \frac{\partial \mathbf{v}}{\partial \boldsymbol{\xi}}\cdot\boldsymbol{F}_{\xi}^{-1}
  }
But the spatial velocity gradient is

  \boldsymbol{l} = \frac{\partial \mathbf{v}}{\partial \mathbf{x}}
Therefore,

  \boldsymbol{l} = \frac{\partial \mathbf{v}}{\partial \boldsymbol{\xi}}\cdot\boldsymbol{F}_{\xi}^{-1}
If we substitute the approximation

  \mathbf{v}(\boldsymbol{\xi},t) = \sum_{I} N_I(\boldsymbol{\xi})~\mathbf{v}_I(t)
we get a formula for the velocity gradient

  {
  \boldsymbol{l} = \left[\sum_{I} \mathbf{v}_I\otimes\frac{\partial N_I}{\partial \boldsymbol{\xi}}\right]
     \cdot\boldsymbol{F}_{\xi}^{-1}
   }
A similar procedure can be followed when other spatial gradients need to be calculated. The most frequently encountered situation is the calculation of the gradient of the shape functions. In that case, we have

  {
  \boldsymbol{\nabla} N_I(\mathbf{X}) = \frac{\partial N_I(\mathbf{X})}{\partial \mathbf{x}} = 
     \frac{\partial N_I}{\partial \boldsymbol{\xi}}\cdot\boldsymbol{F}_{\xi}^{-1}
  }

For computing integrals, we observe that for a function f(\mathbf{x}) on Ω we can write

  \int_{\Omega} f(\mathbf{x})~\text{dV} = \int_{\Omega_0} \hat{f}(\mathbf{X})~J~\text{dV}_0 = 
     \int_{\square} \tilde{f}(\boldsymbol{\xi})~J_{\xi}~\text{d}\square
where

  J_{\xi}  = \det\left(\frac{\partial \mathbf{x}}{\partial \boldsymbol{\xi}}\right) = \det(\boldsymbol{F}_{\xi})
Similarly for a function g(\mathbf{X}) over Ω0, we have

  \int_{\Omega_0} g(\mathbf{X})~\text{dV}_0 = \int_{\square} \tilde{g}(\boldsymbol{\xi})~J^0_{\xi}~\text{d}\square
where

  J^0_{\xi} = \det\left(\frac{\partial \mathbf{X}}{\partial \boldsymbol{\xi}}\right) = \det(\boldsymbol{F}^0_{\xi})
Recall that the internal force terms have the form

  \mathbf{f}_I^{\text{int}} = \int_{\Omega} \boldsymbol{\sigma}\cdot(\boldsymbol{\nabla} N_I)~\text{dV}
Expressed in terms of an integral over the parent element, we then have

  {
  \mathbf{f}_I^{\text{int}} = \int_{\square} \boldsymbol{\sigma}\cdot(\boldsymbol{\nabla} N_I)~J_{\xi}\text{d}\square
   }
where

  \boldsymbol{\nabla} N_I = \frac{\partial N_I}{\partial \boldsymbol{\xi}}\cdot\boldsymbol{F}_{\xi}^{-1} ~.

Finite element implementation[edit]

Recall that the finite element system of equations can be written as

  [\mathbf{M}][\mathbf{a}] = [\mathbf{f}^{\text{ext}}] - [\mathbf{f}^{\text{int}}]
where

  M_{IJ} =  \int_{\Omega_0} \rho_0~N_I~N_J~\text{dV}_0 ~;~~
  \mathbf{f}_I^{\text{int}} = \int_{\Omega} \boldsymbol{\sigma}\cdot(\boldsymbol{\nabla} N_I)~\text{dV} ~;~~\text{and}~~
  \mathbf{f}_I^{\text{ext}} = \int_{\Omega} \rho~N_I~\mathbf{b}~\text{dV} + {\int_{\partial \Omega}}_t N_I~\mathbf{t}~\text{dA}
To get a feel for the structure of the equation, let us consider a four-noded plane element. If the components of the velocity in the two coordinate directions are (u,v), the acceleration vector has the form

  \mathbf{a} = \begin{bmatrix}\mathbf{a}_1 \\ \mathbf{a}_2 \\ \mathbf{a}_3 \\ \mathbf{a}_4\end{bmatrix} 
    = \begin{bmatrix}\dot{u}_1 & \dot{v}_1 \\ \dot{u}_2 & \dot{v}_2 \\
        \dot{u}_3 & \dot{v}_3 \\ \dot{u}_4 & \dot{v}_4\end{bmatrix}
The mass matrix has the form

  \mathbf{M} = \begin{bmatrix}
         \mathbf{M}_{11} & \mathbf{M}_{12} & \mathbf{M}_{13} & \mathbf{M}_{14} \\
         \mathbf{M}_{21} & \mathbf{M}_{22} & \mathbf{M}_{23} & \mathbf{M}_{24} \\
         \mathbf{M}_{31} & \mathbf{M}_{32} & \mathbf{M}_{33} & \mathbf{M}_{34} \\
         \mathbf{M}_{41} & \mathbf{M}_{42} & \mathbf{M}_{43} & \mathbf{M}_{44} 
         \end{bmatrix}
In expanded form

  \mathbf{M} = \int_{\Omega_0} \rho_0~\begin{bmatrix}
         N_1~N_1 & N_1~N_2 & N_1~N_3 & N_1~N_4 \\ 
         N_2~N_1 & N_2~N_2 & N_2~N_3 & N_2~N_4 \\ 
         N_3~N_1 & N_3~N_2 & N_3~N_3 & N_3~N_4 \\ 
         N_4~N_1 & N_4~N_2 & N_4~N_3 & N_4~N_4 
         \end{bmatrix} ~\text{dV}
Next, we consider the internal force term. Let the components of the internal force in the two coordinate directions be (f,g). Then,

   \mathbf{f}^{\text{int}} = \begin{bmatrix} \mathbf{f}^{\text{int}}_1 \\ \mathbf{f}^{\text{int}}_2 \\ \mathbf{f}^{\text{int}}_3\\
      \mathbf{f}^{\text{int}}_4 \end{bmatrix}
    = \begin{bmatrix} f_1 & g_1 \\ f_2 & g_2 \\ f_3 & g_3 \\ f_4 & g_4 
      \end{bmatrix}
At this stage, recall that the velocity gradient is given by

  \boldsymbol{l} = \boldsymbol{\nabla} \mathbf{v} = \sum_I \mathbf{v}_I\otimes\boldsymbol{\nabla} N_I = \sum_I \mathbf{v}_I\otimes\frac{\partial N_I}{\partial \mathbf{x}}
In index notation,

  l_{ij} = \sum_I v_{Ii}~\frac{\partial N_I}{\partial x_j} ~.
We define

  B_{Ij} := \frac{\partial N_I}{\partial x_j}
Then,

  l_{ij} = \sum_I v_{Ii}~B_{Ij}
In matrix form

  \mathbf{l} = \begin{bmatrix}\mathbf{v}_1 & \mathbf{v}_2 & \mathbf{v}_3 & \mathbf{v}_4\end{bmatrix}
         \begin{bmatrix}\mathbf{B}_1 \\ \mathbf{B}_2 \\ \mathbf{B}_3 \\ \mathbf{B}_4 \end{bmatrix}
Expanded out

  \begin{bmatrix} l_{11} & l_{12} \\ l_{21} & l_{22} \end{bmatrix}
    = \begin{bmatrix} u_1 & u_2 & u_3 & u_4 \\
                      v_1 & v_2 & v_3 & v_4 \end{bmatrix}
      \begin{bmatrix} \frac{\partial N_1}{\partial x} & \frac{\partial N_1}{\partial y} \\
          \frac{\partial N_2}{\partial x} & \frac{\partial N_2}{\partial y} \\
          \frac{\partial N_3}{\partial x} & \frac{\partial N_3}{\partial y} \\
          \frac{\partial N_4}{\partial x} & \frac{\partial N_4}{\partial y} \end{bmatrix}
In more compact form, we can just write

  {
  [\mathbf{l}] = [\mathbf{v}]^T~[\mathbf{B}]
  }
Similarly, for the internal force term,

  \mathbf{f}^{\text{int}}_I = \int_{\Omega} \boldsymbol{\sigma}\cdot\boldsymbol{\nabla} N_I~\text{dV}
we have

  f^{\text{int}}_{Ii} = \int_{\Omega} \sigma_{ij}~\frac{\partial N_I}{\partial x_j}~\text{dV}
                 = \int_{\Omega} \sigma_{ij}~B_{Ij}~\text{dV}
In matrix form,

  \begin{bmatrix} \mathbf{f}^{\text{int}}_1 \\ \mathbf{f}^{\text{int}}_2 \\ \mathbf{f}^{\text{int}}_3 \\
     \mathbf{f}^{\text{int}}_4 \end{bmatrix} = 
   \int_{\Omega} \begin{bmatrix} \mathbf{B}_1 \\ \mathbf{B}_2 \\ \mathbf{B}_3 \\ \mathbf{B}_4 
      \end{bmatrix}~\boldsymbol{\sigma}^T
Expanded out,

  \begin{bmatrix} f_1 & g_1 \\ f_2 & g_2 \\ f_3 & g_3 \\ f_4 & g_4 
      \end{bmatrix} = 
   \int_{\Omega}
      \begin{bmatrix} \frac{\partial N_1}{\partial x} & \frac{\partial N_1}{\partial y} \\
          \frac{\partial N_2}{\partial x} & \frac{\partial N_2}{\partial y} \\
          \frac{\partial N_3}{\partial x} & \frac{\partial N_3}{\partial y} \\
          \frac{\partial N_4}{\partial x} & \frac{\partial N_4}{\partial y} \end{bmatrix}
      \begin{bmatrix} \sigma_{11} & \sigma_{21} \\
                      \sigma_{12} & \sigma_{22} \end{bmatrix}~\text{dV}
In compact form, we have

  {
  [\mathbf{f}^{\text{int}}] = \int_{\Omega} [\mathbf{B}][\boldsymbol{\sigma}]^T~\text{dV}
  }
We can express the external force term in a similar manner. Notice that we are not taking adavantage of the symmetry of the stress tensor in the above expressions.
A widely used alternative way of expressing the finite element system of equations is the Voigt notation. This notation can be found in discussions of introductory finite element analysis.

Algorithm for computing internal forces[edit]

The major complications and computational effort in the finite element implementation are encountered during the computation of internal forces.
The basic procedure for computing the internal force at the nodes of an element is given below.

  1. Set [\mathbf{f}^{\text{int}}] = [\mathbf{0}].
  2. For all quadrature points in the parent element (\boldsymbol{\xi}_Q)
    1. Compute the gradient of the shape functions ([\mathbf{B}_I]) for all nodes I.
    2. Compute the velocity gradient [\mathbf{l}] = [\mathbf{v}_I][\mathbf{B}].
    3. Compute the rate of deformation tensor.
    4. Compute the deformation gradient/ the Lagrangian Green tensor.
    5. Compute the Cauchy stress or the 2nd P-K stress using the constitutive equation.
    6. Update the nodal internal force ([\mathbf{f}_I^{\text{int}}]) using [\mathbf{f}_I^{\text{int}} = \mathbf{f}_I^{\text{int}} + \mathbf{B}_I][\boldsymbol{\sigma}]^T~J_\xi~W_Q where WQ are the weights for Gaussian integration.

The mass matrix and integration in time will be discussed later.