The kin2DTruss2 class creates a kinematic two-dimensional truss element with two-nodes. Each node has two degrees-of-freedom, and each degree-of-freedom represents a translation in the X-, Y-directions. Figure provides a simple representation of this element in which the local coordinates are represented by the \(\hat{\textrm{n}}_1\)-, and \(\hat{\textrm{n}}_2\)-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 kin2DTruss2 lumped and consistent mass matrix \(\textbf{M}^\textrm{e}\) in global coordinates are computed in the same manner as lin2DTruss2. 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 lin2DTruss2, and \(\textrm{N}\) is the axial force developed in the current configuration, and the vector
\[ \mathbf{z} = \begin{bmatrix} 1 & 0 & -1 & 0 \\ 0 & 1 & 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]\) is the axial vector that changes at each current configuration. Note that \(\textbf{T}_\textrm{e} \in \mathbb{R}^4\) and \(\mathbf{z} \in \mathbb{R}^{2 \times 4}\), 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} = 4\) 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 kin2DTruss2, using json format, use:
addElement(tag, name='kin2DTruss2', conn, attributes):
Example
A KIN2DTRUSS2 element can be defined using the python interface as follows:
SVL.addElement(tag=1, name='kin2DTruss2', conn=[1,2], attributes={'area': 0.5, 'material': 1})
Application
Please refer to the C08-ST_kin_2DCantilever_Elastic_Truss2.py file located at 03-Validations/01-Debugging/ to see an example on how to define a kin2DTruss2 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/kin2DTruss2.cpp file provides the class implementation. A kin2DTruss2 element is created using the built-in json parse-structure provided in the Driver.hpp. A kin2DTruss2 is defined inside the "Elements" json field indicating its "Tag" as follows,
{ "Elements": { "Tag": { "name" : "KIN2DTRUSS2", "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 KIN2DTRUSS2 element between nodes 1 and 2, made of material 1, and area 0.5 is constructed as:
{ "Elements": { "1": { "name" : "KIN2DTRUSS2", "conn" : [1,2], "attributes": { "material": 1, "area": 0.50 } } } }