Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations

Background

The kin3DTruss2 class creates a kinematic three-dimensional truss element with two-nodes. Each node has three degrees-of-freedom, and each degree-of-freedom represents a translation in the X-, Y-, and Z-directions. Figure provides a simple representation of this element in which the local coordinates are represented by the \(\hat{\textrm{n}}_1\)-, \(\hat{\textrm{n}}_2\)-, and \(\hat{\textrm{n}}_3\)-axis. The element mass, damping and stiffness matrices, as well as internal force vector are computed in local-coordinates and then transformed into global coordinates.

kin3DTruss2.png

The kin3DTruss2 lumped and consistent mass matrix \(\textbf{M}^\textrm{e}\) in global coordinates are computed in the same manner as lin3DTruss2. On the other hand, the stiffness matrix is computed using a corrotational formulation.

In the corrotational formulation, the axial displacement \(u_\textrm{l}\) of the frame element is computed as

\[ u_\textrm{l} = \textrm{L} - \textrm{L}_\textrm{0} = \frac{\textrm{L}^2 - \textrm{L}_\textrm{0}^2}{\textrm{L} + \textrm{L}_\textrm{0}} \,, \]

where \(\textrm{L}\) is the frame length in the current configuration, and \(\textrm{L}_0\) the length in the initial configuration. Note that the last equality is to increase the condition of the subtraction.

The consistent tanget stiffness matrix is then computed as

\[ \textbf{K}^\textrm{e} = \textbf{T}_\textrm{e}^\top \frac{\textrm{EA}}{\mathrm{L}_0} \textbf{T}_\textrm{e} + \frac{\textrm{N}}{\textrm{L}} \mathbf{z}^\top \mathbf{z} \,, \]

where the first term is nothing but the material contribution obtained in lin3DTruss2, and \(\textrm{N}\) is the axial force developed in the current configuration, and the vector

\[ \mathbf{z} = \begin{bmatrix} 1 & 0 & 0 & -1 & 0 & 0 \\ 0 & 1 & 0 & 0 & -1 & 0 \\ 0 & 0 & 1 & 0 & 0 & -1 \end{bmatrix} \,, \]

is the variation of the global displacement vector, and \(\textbf{T}_\textrm{e} = [-\hat{\textrm{n}}_1^\top, \hat{\textrm{n}}_1]\). Note that \(\textbf{T}_\textrm{e} \in \mathbb{R}^6\) and \(\mathbf{z} \in \mathbb{R}^{3 \times 6}\), and \(\textbf{M}^\textrm{e}, \textbf{K}^\textrm{e} \in \mathbb{R}^{\textrm{N}_\textrm{dof}^\textrm{e} \times \textrm{N}_\textrm{dof}^\textrm{e}}\) with \(\textrm{N}_\textrm{dof}^\textrm{e} = 6\) in this case.

REFERENCE:

  • Louie L. Yaw, "3D Co-rotational Truss Formulation", E. F. Cross School of Engineering, Walla Walla University, November 28, 2011.

Pre-Analysis

The python Pre-Analysis in the 01-Pre_Process/Method/Attach.py file provides with an interface to populate the Entities dictionary. This file contains several functions to populate specific fields. For example, to create a kin3DTruss2, using json format, use:

  • addElement(tag, name='kin3DTruss2', conn, attributes):

    • tag : The identifier of this element, i.e., tag > -1
    • name : Seismo-VLAB element class name
    • conn : Connectivity array of this element
    • attributes : Specific properties for the created element, for example
      • 'material' is the hight of the line cross section.
      • 'area' is the cross section area.

    Example

    A KIN3DTRUSS2 element can be defined using the python interface as follows:
    SVL.addElement(tag=1, name='kin3DTruss2', conn=[1,2], attributes={'area': 0.5, 'material': 1})

    Application
    Please refer to the C09-ST_kin_3DCantilever_Elastic_Truss2.py file located at 03-Validations/01-Debugging/ to see an example on how to define a kin3DTruss2 element.

On the contrary, the 01-Pre_Process/Method/Remove.py file provides with an interface to depopulate the Entities dictionary. For example, to remove an already define Element, use:

  • delElement(tag):
    • tag : The identifier of the element to be removed, i.e., tag > -1

Run-Analysis

The C++ Run-Analysis in the 02-Run_Process/04-Elements/03-Truss/kin3DTruss2.cpp file provides the class implementation. A kin3DTruss2 element is created using the built-in json parse-structure provided in the Driver.hpp. A kin3DTruss2 is defined inside the "Elements" json field indicating its "Tag" as follows,

  • {
        "Elements": {
            "Tag": {
                "name" : "KIN3DTRUSS2",
                "conn" : [ ],
                "attributes": {
                    "area": double,
                    "material": int
                }
            }
        }
    }
    
    Variable Description
    Tag Unique element object identifier.
    conn The element connectivity node array.
    area Cross-sectional area of element.
    materialThe uniaxial material identifier.

    Attention
    This formulation allows large deformations.
    Material non-linearity can be used in this element.
    Example

    A KIN3DTRUSS2 element between nodes 1 and 2, made of material 1, and area 0.5 is constructed as:
    { "Elements": { "1": { "name" : "KIN3DTRUSS2", "conn" : [1,2], "attributes": { "area": 0.50, "material": 1 } } } }