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.
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:
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):
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:
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. |
material | The uniaxial material identifier. |
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 } } } }