Skip to content

Commit 23b5aa8

Browse files
committed
FrameLink
1 parent d0c89b9 commit 23b5aa8

File tree

4 files changed

+238
-56
lines changed

4 files changed

+238
-56
lines changed

source/user/manual/analysis/static.rst

Lines changed: 0 additions & 55 deletions
This file was deleted.
File renamed without changes.
Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
.. _element-two-node-link-section:
2+
3+
FrameLink
4+
^^^^^^^^^
5+
6+
Synopsis
7+
========
8+
9+
``TwoNodeLinkSection`` connects two nodes and enforces a **section-level** constitutive law
10+
through a single ``SectionForceDeformation`` object. The element works in 1D, 2D, and 3D,
11+
supports optional Rayleigh damping, translational lumped mass, and geometric
12+
(:math:`P\!-\!\Delta`) effects.
13+
14+
15+
Formulation
16+
===========
17+
18+
19+
Frames of reference
20+
-------------------
21+
22+
- **Global** frame with orthonormal basis :math:`\{\mathbf{E}_x,\mathbf{E}_y,\mathbf{E}_z\}`.
23+
- **Local** element triad :math:`\{\mathbf{e}_x,\mathbf{e}_y,\mathbf{e}_z\}`, where
24+
:math:`\mathbf{e}_x` is along the chord from node :math:`i` to node :math:`j`
25+
(unless overridden by the user), and :math:`\mathbf{e}_y,\mathbf{e}_z` complete
26+
a right-handed system.
27+
- **Basic (section)** coordinates, where each component is one entry of the
28+
section deformation vector used by the section law.
29+
30+
Let :math:`\mathbf{u}^i, \mathbf{u}^j` be the **local** translational DOF vectors at the two
31+
nodes, and :math:`\boldsymbol{\theta}^i, \boldsymbol{\theta}^j` the **local** rotational DOF vectors.
32+
We will use scalar components such as :math:`\mathbf{u}^i\!\cdot\!\mathbf{e}_x`
33+
and :math:`\boldsymbol{\theta}^j\!\cdot\!\mathbf{e}_z`.
34+
35+
36+
37+
The element builds a 3×3 direction-cosine matrix :math:`\mathbf{T}` with rows
38+
:math:`\mathbf{e}_x^\top,\mathbf{e}_y^\top,\mathbf{e}_z^\top`.
39+
From this it assembles:
40+
41+
- :math:`\mathbf{T}_{gl}`: global → local transformation on the element DOF.
42+
- :math:`\mathbf{T}_{lb}`: local → basic (section) transformation that extracts relative measures for the section.
43+
44+
Kinematics
45+
----------
46+
47+
For each section entry :math:`t_k`, the element forms the section strains :math:`\boldsymbol{e}` from nodal locals as follows.
48+
49+
Let :math:`L` be the current chord length and let the **shear-distance ratios**
50+
be :math:`s_y, s_z \in [0,1]`.
51+
52+
- **Axial** (:math:`t_k=\mathrm{P}`):
53+
54+
.. math::
55+
\Delta u_x \;=\; (\mathbf{u}^j-\mathbf{u}^i)\!\cdot\!\mathbf{e}_x, \qquad
56+
\varepsilon_x \;\equiv\; \frac{\Delta u_x}{L}.
57+
58+
The basic component sent to the section is :math:`u_b^{(k)}=\varepsilon_x`.
59+
60+
- Shear in :math:`\mathbf{e}_y` direction (:math:`t_k=\mathrm{VY}`; cases with rotations):
61+
62+
.. math::
63+
\gamma_y^\ast \;=\; (\mathbf{u}^j-\mathbf{u}^i)\!\cdot\!\mathbf{e}_y
64+
\;-\; s_y\,L\,(\boldsymbol{\theta}^i\!\cdot\!\mathbf{e}_z)
65+
\;-\; (1-s_y)\,L\,(\boldsymbol{\theta}^j\!\cdot\!\mathbf{e}_z),\\[2mm]
66+
\gamma_y \;\equiv\; \dfrac{\gamma_y^\ast}{L}.
67+
68+
The basic component is :math:`u_b^{(k)}=\gamma_y`.
69+
70+
- **Shear in } \mathbf{e}_z \text{ direction** (3D only, :math:`t_k=\mathrm{VZ}`):
71+
72+
.. math::
73+
\gamma_z^\ast \;=\; (\mathbf{u}^j-\mathbf{u}^i)\!\cdot\!\mathbf{e}_z
74+
\;+\; s_z\,L\,(\boldsymbol{\theta}^i\!\cdot\!\mathbf{e}_y)
75+
\;+\; (1-s_z)\,L\,(\boldsymbol{\theta}^j\!\cdot\!\mathbf{e}_y),\\[2mm]
76+
\gamma_z \;\equiv\; \dfrac{\gamma_z^\ast}{L},
77+
and :math:`u_b^{(k)}=\gamma_z`.
78+
79+
- **Torsion** (:math:`t_k=\mathrm{T}`):
80+
81+
.. math::
82+
\phi_x \;=\; (\boldsymbol{\theta}^j-\boldsymbol{\theta}^i)\!\cdot\!\mathbf{e}_x,
83+
84+
and :math:`u_b^{(k)}=\phi_x` (no :math:`1/L` normalization).
85+
86+
- **Flexure** about :math:`\mathbf{e}_y`:
87+
88+
.. math::
89+
\Delta \theta_y \;=\; (\boldsymbol{\theta}^j-\boldsymbol{\theta}^i)\!\cdot\!\mathbf{e}_y,
90+
and :math:`u_b^{(k)}=\Delta \theta_y` (no :math:`1/L` normalization). About :math:`\mathbf{e}_z`:
91+
92+
.. math::
93+
\Delta \theta_z \;=\; (\boldsymbol{\theta}^j-\boldsymbol{\theta}^i)\!\cdot\!\mathbf{e}_z,
94+
and :math:`u_b^{(k)}=\Delta \theta_z` (no :math:`1/L` normalization).
95+
96+
97+
.. admonition:: Ordering-sensitive normalization (important)
98+
:class: note
99+
100+
This implementation **divides only the first two section components** of the
101+
basic vector by :math:`L` *before* sending them to the section, i.e.,
102+
:math:`u_b^{(0)}\leftarrow u_b^{(0)}/L` and
103+
:math:`u_b^{(1)}\leftarrow u_b^{(1)}/L`.
104+
105+
Consistency therefore requires that the section’s own ordering places
106+
:math:`t_0=\mathrm{P}` and :math:`t_1=\mathrm{VY}`. If your section orders
107+
resultants differently (e.g., many 2D sections use
108+
:math:`[\mathrm{P},\mathrm{MZ},\mathrm{VY}]`), you must verify the behavior
109+
carefully; the element will still divide entries 0 and 1 regardless of their types.
110+
111+
112+
Section law, forces, and tangent
113+
--------------------------------
114+
115+
Given the strains :math:`\boldsymbol{e}` and their rate, the section provides
116+
117+
- **stress resultants** :math:`\boldsymbol{s} = \{N, V_y, V_z, T, M_y, M_z\}`,
118+
- **section tangent** :math:`\mathbf{K}_s = \left[\partial s^{(k)}/\partial e^{(\ell)}\right]`.
119+
120+
The state determination proceeds as follows.
121+
122+
1. Apply the same **index-wise normalization** to the section tangent
123+
diagonal entries:
124+
125+
.. math::
126+
(K_b)_{00} \leftarrow \frac{(K_b)_{00}}{L}, \qquad
127+
(K_b)_{11} \leftarrow \frac{(K_b)_{11}}{L}.
128+
129+
No other entries are rescaled.
130+
131+
2. Form the **local** tangent and force via the kinematic transform:
132+
133+
.. math::
134+
\mathbf{K}_l \;=\; \mathbf{T}_{lb}^\top\,\mathbf{K}_b\,\mathbf{T}_{lb}, \qquad
135+
\mathbf{q}_l \;=\; \mathbf{T}_{lb}^\top\,\boldsymbol{s}.
136+
137+
3. Add geometric (:math:`P\!-\!\Delta`) contributions in the local system
138+
(see next section).
139+
140+
4. Transforms to the **global** system:
141+
142+
.. math::
143+
\mathbf{K}_g \;=\; \mathbf{T}_{gl}^\top\,\mathbf{K}_l\,\mathbf{T}_{gl}, \qquad
144+
\mathbf{p} \;=\; \mathbf{T}_{gl}^\top\,\mathbf{q}_l.
145+
146+
Geometric (:math:`P\!-\!\Delta`) effects
147+
----------------------------------------
148+
149+
When a 4-entry vector of **moment-distribution ratios**
150+
:math:`\mathbf{r}=[r_{y1}, r_{y2}, r_{z1}, r_{z2}]` is provided, geometric
151+
forces and stiffness are added in the local system based on:
152+
153+
- the current **axial resultant** :math:`N` extracted from :math:`\boldsymbol{s}`,
154+
- the transverse relative locals
155+
:math:`\Delta u_y=(\mathbf{u}^j-\mathbf{u}^i)\!\cdot\!\mathbf{e}_y` and
156+
:math:`\Delta u_z=(\mathbf{u}^j-\mathbf{u}^i)\!\cdot\!\mathbf{e}_z`,
157+
- the chord length :math:`L`.
158+
159+
The contributions match the standard two-node link formulas:
160+
161+
- **Forces (local)**:
162+
shear pairs :math:`V_\Delta = (N/L)\,(1-r_{z1}-r_{z2})\,\Delta u_y` in the
163+
:math:`\mathbf{e}_y` direction and similarly in :math:`\mathbf{e}_z`,
164+
plus end moments split by :math:`r_{\bullet}`.
165+
166+
- **Stiffness (local)**:
167+
shear–shear terms of magnitude :math:`(N/L)\,(1-r_{\bullet 1}-r_{\bullet 2})`
168+
and shear–bending couplings proportional to :math:`\pm r_{\bullet}\,N`.
169+
170+
(Exact index placements follow the element’s DOF layout in 2D/3D; the formulas
171+
are identical to those of ``TwoNodeLink``.)
172+
173+
Parameters and constraints
174+
--------------------------
175+
176+
- **Shear-distance ratios**: :math:`s_y,s_z\in[0,1]`. Defaults are
177+
:math:`s_y=s_z=0.5` when not specified.
178+
- **Moment-distribution ratios**: :math:`r_{\bullet}\ge 0` with
179+
:math:`r_{y1}+r_{y2}\le 1` and :math:`r_{z1}+r_{z2}\le 1`.
180+
- **Mass**: translational lumped mass only; :math:`m/2` is placed on the first
181+
:math:`\text{numDIM}` translational DOF at each node in the global frame.
182+
183+
Damping and inertia
184+
-------------------
185+
186+
- **Rayleigh damping** is included if enabled for the element.
187+
- **Material (section) damping** is not assembled here; only Rayleigh
188+
contributes.
189+
- **Inertia** enters through the lumped translational mass and nodal
190+
accelerations (global frame).
191+
192+
Mapping between section resultants and local DOF
193+
------------------------------------------------
194+
195+
The element maps each section type to a *local* DOF index used in
196+
:math:`\mathbf{T}_{lb}`. This mapping depends on dimension:
197+
198+
- **2D (3 dof/node)**
199+
200+
- :math:`\mathrm{P}\rightarrow 0` (axial, :math:`\mathbf{e}_x`)
201+
- :math:`\mathrm{VY}\rightarrow 1` (shear along :math:`\mathbf{e}_y`)
202+
- :math:`\mathrm{MZ}\rightarrow 2` (bending about :math:`\mathbf{e}_z`)
203+
204+
- **3D (6 dof/node)**
205+
206+
- :math:`\mathrm{P}\rightarrow 0`, :math:`\mathrm{VY}\rightarrow 1`,
207+
:math:`\mathrm{VZ}\rightarrow 2`, :math:`\mathrm{T}\rightarrow 3`,
208+
:math:`\mathrm{MY}\rightarrow 4`, :math:`\mathrm{MZ}\rightarrow 5`
209+
210+
This mapping determines which translational difference and which end-rotation
211+
differences appear in each :math:`u_b^{(k)}` via :math:`\mathbf{T}_{lb}`.
212+
213+
Outut
214+
=====
215+
216+
- **Global forces** :math:`\mathbf{p}`.
217+
- **Local forces** :math:`\mathbf{q}_l` (including :math:`P\!-\!\Delta` if active).
218+
- **Basic (section) resultants** :math:`\boldsymbol{s}`.
219+
- **Local displacements** :math:`\mathbf{u}_l`.
220+
- **Basic (section) deformations** :math:`\boldsymbol{e}` (in the section’s own ordering).
221+
- **Concatenated** :math:`[\boldsymbol{e};\,\boldsymbol{s}]`.
222+
- **Section-level outputs**: whatever the underlying section supports.
223+
224+
Notes
225+
=====
226+
227+
- Provide a valid local orientation; :math:`\mathbf{e}_x` and
228+
:math:`\mathbf{e}_y` must not be parallel and must be nonzero.
229+
- The two nodes must have matching DOF patterns.
230+
- :math:`P\!-\!\Delta` contributions require a nonzero axial resultant and the
231+
4-entry ratio vector.
232+
- **Ordering caveat**: the element **divides entries 0 and 1** of
233+
:math:`\boldsymbol{e}` by :math:`L` and scales the **(0,0)** and **(1,1)**
234+
entries of :math:`\mathbf{K}_b` by :math:`1/L`. Ensure your section’s ordering
235+
matches the intended interpretation (typically :math:`[\mathrm{P},\mathrm{VY},\dots]`)
236+
or verify with a small test before production runs.

source/user/manual/model/elements/other/index.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ Other
2121
.. toctree::
2222
:maxdepth: 1
2323

24-
TwoNodeLink
24+
BasicLink
25+
FrameLink
2526

2627
#. Misc.
2728

0 commit comments

Comments
 (0)