# Classical truss element explained

## Learn how to derive the truss element stiffness matrix from kinematic assumptions. And discover how it compares to Abaqus T3D2 element.

When talking about structural finite elements, the truss element is one of the first elements discussed. As long as the assumptions underlying its usage are met, it is an efficient element allowing convenient interpretation of results. I will discuss here theses assumptions as well as the truss element use cases. Then I will showcase the element formulation, leading to the expression for the stiffness matrix, as it is implemented in SesamX. Finally, I will discuss the SesamX data cards that are used to define the truss element and compare the results with the Abaqus T3D2 element on a simple model.

## Quick remark on notations

Before starting, let’s define some notations that are used through this article:

• vectors are denoted with an underline $\underline{u}$ ,

• matrices are represented with brackets $\lbrack \ \rbrack$ ,

• Einstein summation convention is used on repeated indices,

• partial derivatives are denoted with the comma notation $u_{,x}$ ,

• infinitesimal strain and stress tensors are represented in column matrix notation $\lbrack \epsilon \rbrack = \begin{bmatrix} \epsilon_{11} \\ \epsilon_{22} \\ \epsilon_{33} \\ \epsilon_{12} \\ \epsilon_{23} \\ \epsilon_{13} \end{bmatrix}$ and $\lbrack \sigma \rbrack = \begin{bmatrix} \sigma_{11} \\ \sigma_{22} \\ \sigma_{33} \\ \sigma_{12} \\ \sigma_{23} \\ \sigma_{13} \end{bmatrix}$ , where $\lbrack \epsilon \rbrack$ represents the engineering strains.

## Introduction

This element is relevant to use when we aim at analysing a slender structure which only undergoes axial loading.

For such a structure, the axial stress assumption is commonly used:

$$\sigma_{22} = \sigma_{33} = \sigma_{12} = \sigma_{23} = \sigma_{13} = 0 \tag{1}$$

$$u_{i,y} = u_{i,z} = 0 \tag{2}$$

(1) is also called the stress assumption and (2) the kinematic assumption. These assumptions are considered valid for cross-section typical dimension less than 110 of the truss length.

Stresses that are orthogonal to the truss axis are considered null as well as the dependence of the displacement on $y$ and $z$ . Thus, knowing the displacement on the truss axis is enough to describe the displacement over the whole structure: the truss element is a 1-dimensional element.

As it will appear during the stiffness matrix derivation, the relevant geometric parameters of the truss are:

• the length of the truss $L$ ,

• and the area of the truss section $A$ .

In its more simple formulation (presented here), it consists of 2 nodes connected together through a segment, yielding a linear displacement interpolation inside the element.

Assembling trusses is useful to modelize bars connected to each other by mean of pin joints, like in a crane or a bridge.

## Truss element derivation

As mentioned previously, we can represent the truss element as shown in the following figure, along with its local basis vectors.

The element local axis system is defined by the axis $x, y, z$ whose basis vectors are respectively denoted as $\underline{e_{1}}, \underline{e_{2}}, \underline{e_{3}}$ .

Only the translational degrees of freedom are required on each node of the element. Hence, the displacement on node $I$ will be denoted $\underline{u^I} = {u_j}^I \underline{e_{j}}$ , where $I$ takes the values 1 or 2.

### Strain tensor

Using assumption (2) the displacement inside the element can be written:

$$\underline{u} = \begin{cases} u_1(x) \\ u_2(x) \\ u_3(x) \end{cases}$$

However, the only known information is at the node. To get the displacement inside the element we interpolate linearly the nodes displacements as follows:

$${u_j}(x_1) = N^I(x) {u_j}^I \tag{3}$$

Where the $N^I$ represent the shape functions of the element:

$$\begin{cases} N^1(x) = 1 - \cfrac{x}{L} \\ N^2(x) = \cfrac{x}{L} \end{cases}$$

Next, we simply compute the strains by differentiation:

$$\lbrack \epsilon \rbrack = \begin{bmatrix} \epsilon_{11} \\ \epsilon_{22} \\ \epsilon_{33} \\ \epsilon_{12} \\ \epsilon_{23} \\ \epsilon_{13} \end{bmatrix} = \begin{bmatrix} u_{1,x} \\ 0 \\ 0 \\ u_{2,x} \\ 0 \\ u_{3,x} \end{bmatrix}$$

However, we want the truss element to be sensitive only to axial strain. We can simply enforce other strains to be 0. Physically this means that even if there are some $u_2$ and $u_3$ displacements in the element, they do not contribute to the strain state of the element. Hence, we have:

$$\lbrack \epsilon \rbrack = \begin{bmatrix} \epsilon_{11} \\ \epsilon_{22} \\ \epsilon_{33} \\ \epsilon_{12} \\ \epsilon_{23} \\ \epsilon_{13} \end{bmatrix} = \begin{bmatrix} u_{1,x} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \end{bmatrix}$$

Finally, using (3) we get the strains in the element from the displacements at
the nodes:

$$\lbrack \epsilon \rbrack = \begin{bmatrix} N^I_{,x} {u_1}^I \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \end{bmatrix} \tag{4}$$

### Stress tensor

To relate the stresses to the strains we need to apply Hooke’s law for linear elastic material.

$$\begin{bmatrix} \epsilon_{11} \\ \epsilon_{22} \\ \epsilon_{33} \\ \epsilon_{12} \\ \epsilon_{23} \\ \epsilon_{13} \end{bmatrix} = \frac{1}{E} \begin{bmatrix} 1 && -\nu && -\nu && 0 && 0 && 0 \\ -\nu && 1 && -\nu && 0 && 0 && 0 \\ -\nu && -\nu && 1 && 0 && 0 && 0 \\ 0 && 0 && 0 && 2+2\nu && 0 && 0 \\ 0 && 0 && 0 && 0 && 2+2\nu && 0 \\ 0 && 0 && 0 && 0 && 0 && 2+2\nu \end{bmatrix} \begin{bmatrix} \sigma_{11} \\ \sigma_{22} \\ \sigma_{33} \\ \sigma_{12} \\ \sigma_{23} \\ \sigma_{13} \end{bmatrix} \\$$

Using assumption (1) on the right hand side, as well as the result we got in (4) on the left hand side, leads to a peculiar relation:

$$\underbrace{ \begin{bmatrix} u_{1,x} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \end{bmatrix} }_{\text{kinematic assumption}} = \underbrace{ \frac{1}{E} \begin{bmatrix} \sigma_{11} \\ -\nu\sigma_{11} \\ -\nu\sigma_{11} \\ 0 \\ 0 \\ 0 \end{bmatrix} }_{\text{stress assumption}}$$

Which obviously cannot hold. However this inconsistency is not that dramatic: when making the kinematic assumption we were interested in the macroscopic behavior of the truss. Whereas the stress assumption relates more to a microscopic behavior. It turns out that even if $\epsilon_{22}$ and $\epsilon_{33}$ are not 0 (microscopic scale) their effect on the displacement (macroscopic scale) is negligible compare to what comes from the $\epsilon_{11}$ term. Of course, this explanation becomes questionable as the slenderness of the truss degrades.

We can then simplify this relation and write:

$$\begin{bmatrix} u_{1,x} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \end{bmatrix} = \frac{1}{E} \begin{bmatrix} \sigma_{11} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \end{bmatrix}$$

Finally, using (4) we have the stress from the displacement at the nodes:

$$\sigma_{11} = E N^I_{,x} {u_1}^I$$

## Element stiffness derivation

The element stiffness matrix is obtained through the expression of the virtual work. Denoting the virtual strains as $\lbrack \overline{\epsilon} \rbrack$ we have for the virtual work over the element volume:

$$\overline{W} = \iiint_V \lbrack \overline{\epsilon} \rbrack^T \lbrack \sigma \rbrack dV = \iiint_V (N^I_{,x} \overline{{u_1}^I}) (E N^J_{,x} {u_1}^J) dV$$

The integrand depends only on $x$ , thus we can integrate along $y$ and $z$ to get:

$$\overline{W} = EA \int_L \overline{{u_1}^I} N^I_{,x} N^J_{,x} {u_1}^J dx$$

Using the previous definition of the shape functions, the stiffness matrix is therefore:

$$\boxed{ \lbrack K \rbrack = \frac{EA}{L} \begin{bmatrix} 1 & -1 \\ -1 & 1 \end{bmatrix} }$$

## SesamX input cards

To define a truss element in SesamX the first step is to create a mesh. This is done with the CREATE-SUBMESH function:

CREATE-SUBMESH
MODEL: TRUSS_SIMPLE
NODES
- ID: 1  POINT: 0.,0.,0.
- ID: 2  POINT: 10.,0.,0.
- ID: 3  POINT: 20.,0.,0.
ELEMENTS
SHAPE: LN2
-ID: 1  NODES: 1,2
-ID: 1  NODES: 2,3

Here we define 3 nodes and we create 2 line elements to connect the nodes. The next step is to apply the truss property on these 2 elements.

CREATE-PROPERTIES
MODEL: TRUSS_SIMPLE
TRUSS-STANDARD
BEHAVIOR: LINEAR
NAME: PROP1
AREA: 40.0
MATERIAL: STEEL
ON-ELEMENTS-FROM: SELE_ALL

Here we apply a TRUSS-STANDARD property on the elements from ALL_TRUSS providing a material name STEEL (that we defined previously, not shown here) and an area. BEHAVIOR: LINEAR indicates that we apply a linear elastic material. This keyword may seem unnecessary at the moment, but it is a provision for future material implementations (such as hyper-elastic materials).

## Comparison with Abaqus T3D2 element

Eventually, the last part of this article focuses on the comparison of SesamX linear truss element against Abaqus equivalent T3D2 element. A truss assembly clamped on one end is subjected to a load on the second end. The displacements at the nodes, obtained from a linear static resolution, are compared between SesamX and Abaqus.

### Model

The model studied for this comparison is made of a the following truss assembly.

As you can see on the picture, nodes are located at trusses intersections. Each truss is $1 m$ long and has an area of $40 mm^2$ . A linear elastic material is applied with $E = 200 GPa$ and $\nu = 0.33$ . The far left nodes are clamped while a downward load of $1000 N$ is applied on the bottom right node.

This case is then solved with a linear static resolution.

### Results

The following figure gives an overview of the expected displacement of the model, as well as the node numbers.

And the table below gives the comparison of the nodal displacements between Abaqus and SesamX.

The relative error on the magnitude is quite small, SesamX linear truss element implementation is very close to Abaqus implementation.

Following these links you have access to the SesamX input cards as well as the Abaqus input cards that I used for this comparison. I imported the Abaqus mesh and selections in SesamX (to make sure I have the same model description) and then I defined the properties, loads and boundary conditions.