|
| 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. |
0 commit comments