Supports in a structure are members which helps to resist external and internal loads. Supports transfers the load to the ground and provides stability to the structure. Figure shows schematically a portal frame structure whose support at Node (4) undergoes motion.
Support Motion force effects in SVL are computed in two levels:
The Support Motion conditions in SVL are prescribed as inhomogeneous linear Constraint:
\[ \textrm{U}_{n+1} = \mathbf{T}^\top \textrm{u}_{n+1} + G_{n+1} \,, \]
where \(\textrm{U} \in \mathbb{R}^{N_{\textrm{total}}}\) the displacements for the total degree-of-freedom, \(\textrm{u} \in \mathbb{R}^{N_{\textrm{free}}}\) the displacements for the free-degree-of-freedom (i.e., degree of freedom after being fixed and constrained), and \(G \in \mathbb{R}^{N_{\textrm{total}}}\) the vector of support motions, and \(n+1\) the time step.
The incremental form of the previous equation yields,
\[ \Delta \textrm{U} = \mathbf{T}^\top \Delta \textrm{u} + \Delta g \,, \]
where \(\Delta g = G_{n+1} - G_n\) is the incremental support motion, and the displacement \(\textrm{U}_{n+1} = \textrm{U}_{n} + \Delta \textrm{U} = \textrm{U}_{n} + \mathbf{T}^\top \Delta \textrm{u} + \Delta g\).
The non-linear incremental form of the equilibrium equations, i.e., StaticAnalysis and DynamicAnalysis, is written as
\[ \mathbf{K}_\textrm{eff}^{(i-1)} \Delta \textrm{U}^{(i)} = \mathbf{F}_\textrm{eff} \]
Replacing both equation, the non-linear incremental form of the equilibrium equations with support motion is:
\[ \mathbf{T}^\top \,\mathbf{K}_\textrm{eff}^{(i-1)}\, \mathbf{T} \Delta \textrm{u}^{(i)} = \mathbf{T}^\top \left( \mathbf{F}_\textrm{eff} - \mathbf{K}_\textrm{eff}^{(i-1)} \Delta g\right) \]
REFERENCE:
The python Pre-Analysis in the 01-Pre_Process/Method/Attach.py file provides with an interface to create a support motion. We use the addSupportMotion() as follows:
addSupportMotion(tag, attributes):
The file format specified at attributes['file']='Ricker.txt' must have the structure shown in the figure:
Example
A SUPPORT MOTION can be defined using the python interface as follows:
SVL.addSupportMotion(tag=708, attributes={'file': 'Ricker.txt', 'type': 'TimeSeries', 'dof': 1})
Application
Please refer to the A06-DY_Lin_1DPointMass_Elastic_ZeroLength_SupportMotion.py file located at 03-Validations/01-Debugging/ to see an example on how to define a support motion.
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 support motion, use:
The C++ Run-Analysis in the 02-Run_Process/07-Assembler/Assembler.cpp and 02-Run_Process/10-Integrators/Integrators.cpp files provides with the implementation. A Support Motion is created using the built-in json parse-structure provided in the Driver.hpp and is defined inside the "Supports" json field indicating its "Tag".
{ "Supports": { "Tag": { "type": "CONSTANT", "value": [ ], "dof": [ ] } } }
Variable | Description |
---|---|
Tag | The Node identifier to applied the support motion. |
value | The magnitude of the support motion. |
dof | The degree-of-freedom to apply the support motion. |
A static SUPPORT MOTION of 0.5 applied at node 5 along the degree-of-freedom 0 is created as:
{ "Supports": { "5": { "type" : "CONSTANT", "value": [0.5] "dof": [0] } } }
{ "Supports": { "Tag": { "type": "TIMESERIES", "file": [str], "dof": [ ] } } }
Variable | Description |
---|---|
Tag | The Node identifier to applied the support motion. |
file | The file name where the time displacement support motion are obtained. |
dof | The degree-of-freedom to apply the support motion. |
A dynamic SUPPORT MOTION applied at node 5 along the degree-of-freedom 0 is created as:
{ "Supports": { "5": { "type" : "TIMESERIES", "file": ["/path/to/folder/load.in"] "dof": [0] } } }