|
| 1 | +.. _CorotTR: |
| 2 | + |
| 3 | +Corotational02 |
| 4 | +^^^^^^^^^^^^^^ |
| 5 | + |
| 6 | +The corotational coordinate transformation allows small-strain frame elements to be employed in a large deformation analysis. [1]_ [2]_ |
| 7 | +*Corotational02* superceeds the original :ref:`Corotational <CorotTR>` transformation, which is now deprecated. |
| 8 | + |
| 9 | +.. tabs:: |
| 10 | + |
| 11 | + .. tab:: Python |
| 12 | + |
| 13 | + .. py:method:: Model.geomTransf("Corotational02", tag, vecxz, [offi, offj]) |
| 14 | + :no-index: |
| 15 | + |
| 16 | + Define a corotational geometric transformation for frame elements. |
| 17 | + |
| 18 | + :param integer tag: integer tag identifying transformation |
| 19 | + :type tag: |integer| |
| 20 | + :param vecxz: X, Y, and Z components of vecxz, the vector used to define the local x-z plane of the local-coordinate system, **required in 3D**. The local y-axis is defined by taking the cross product of the vecxz vector and the x-axis. |
| 21 | + :type vecxz: tuple of floats |
| 22 | + :param offi: joint offset values -- offsets specified with respect to the global coordinate system for element-end node i (optional, the number of arguments depends on the dimensions of the current model). |
| 23 | + :type offi: tuple of floats |
| 24 | + :param offj: joint offset values -- offsets specified with respect to the global coordinate system for element-end node j (optional, the number of arguments depends on the dimensions of the current model). |
| 25 | + :type offj: tuple of floats |
| 26 | + |
| 27 | + .. tab:: Tcl |
| 28 | + |
| 29 | + .. function:: geomTransf Corotational02 $tag < $vecxzX $vecxzY $vecxzZ > <-jntOffset $dXi $dYi $dZi $dXj $dYj $dZj> |
| 30 | + |
| 31 | + .. csv-table:: |
| 32 | + :header: "Argument", "Type", "Description" |
| 33 | + :widths: 10, 10, 40 |
| 34 | + |
| 35 | + $tag, |integer|, integer tag identifying transformation |
| 36 | + $vecxzX $vecxzY $vecxzZ, |float|, "X, Y, and Z components of vecxz, the vector used to define the local x-z plane of the local-coordinate system. The local y-axis is defined by taking the cross product of the vecxz vector and the x-axis. |
| 37 | + |
| 38 | + These components are specified in the global-coordinate system X,Y,Z and define a vector that is in a plane parallel to the x-z plane of the local-coordinate system. |
| 39 | + |
| 40 | + These items need to be specified for the three-dimensional problem." |
| 41 | + $dXi $dYi $dZi, |float|, "joint offset values -- offsets specified with respect to the global coordinate system for element-end node i (optional, the number of arguments depends on the dimensions of the current model)." |
| 42 | + $dXj $dYj $dZj, |float|, "joint offset values -- offsets specified with respect to the global coordinate system for element-end node j (optional, the number of arguments depends on the dimensions of the current model)." |
| 43 | + |
| 44 | + |
| 45 | +.. note:: |
| 46 | + |
| 47 | + The element coordinate system and joint offsets are the same as that documented for the :ref:`Linear <linearTR>` transformation. |
| 48 | + |
| 49 | + |
| 50 | +Examples |
| 51 | +-------- |
| 52 | + |
| 53 | +This example is developed in detail on the examples `site <https://gallery.stairlab.io/examples/framevecxz/>`__. |
| 54 | +In order to cover a wide range of cases, the strong axis of the first column, element `1`, |
| 55 | +is oriented so as to resist bending *outside* the plane of the portal, but the strong axis of the second column, element `3`, will resist bending *inside* the portal plane. |
| 56 | + |
| 57 | + |
| 58 | +.. figure:: figures/vecxz.png |
| 59 | + :align: center |
| 60 | + :width: 50% |
| 61 | + |
| 62 | + A portal frame with :math:`X_3` vertical. |
| 63 | + |
| 64 | + |
| 65 | +.. code-block:: Python |
| 66 | +
|
| 67 | + model.node(1, ( 0, 0, 0)) |
| 68 | + model.node(2, (width, 0, 0)) |
| 69 | + model.node(3, (width, 0, height)) |
| 70 | + model.node(4, ( 0, 0, height)) |
| 71 | +
|
| 72 | + model.geomTransf("Corotational", 1, (1, 0, 0)) # Column |
| 73 | + model.geomTransf("Corotational", 2, (0, 0, 1)) # Girder |
| 74 | + model.geomTransf("Corotational", 3, (0,-1, 0)) # Column |
| 75 | +
|
| 76 | +
|
| 77 | +
|
| 78 | +Theory |
| 79 | +------ |
| 80 | + |
| 81 | +.. _corot-directors: |
| 82 | + |
| 83 | +.. figure:: figures/directors.png |
| 84 | + :align: center |
| 85 | + :figclass: align-center |
| 86 | + |
| 87 | + Corotational transformation of a two-node frame element. |
| 88 | + |
| 89 | +Under a corotational transformation, an element's *state determination* is performed |
| 90 | +in a transformed configuration space represented by director fields |
| 91 | +:math:`\left\{\bar{\mathbf{d}}_k\right\}`, and |
| 92 | +:math:`\left\{\bar{\mathbf{D}}_k\right\}` with the expressions: |
| 93 | + |
| 94 | +.. math:: |
| 95 | +
|
| 96 | + \left.\begin{aligned} |
| 97 | + \mathbf{d}_k &\triangleq \boldsymbol{\Lambda}\mathbf{D}_k \\ |
| 98 | + \bar{\mathbf{d}}_k &\triangleq \boldsymbol{R}\mathbf{D}_k \\ |
| 99 | + \bar{\mathbf{D}}_k &\triangleq \bar{\boldsymbol{\Lambda}}\mathbf{D}_k \\ |
| 100 | + \end{aligned}\right., |
| 101 | + \quad\text{ implying }\qquad |
| 102 | + \begin{aligned} |
| 103 | + \boldsymbol{\Lambda} &= \mathbf{d}_k\otimes\mathbf{D}_k \\ |
| 104 | + \boldsymbol{R} &= \bar{\mathbf{d}}_k\otimes\mathbf{D}_k \\ |
| 105 | + \bar{\boldsymbol{\Lambda}} &= \bar{\mathbf{D}}_k\otimes\mathbf{D}_k \\ |
| 106 | + \end{aligned} |
| 107 | +
|
| 108 | +.. note:: |
| 109 | + |
| 110 | + It is more appropriate to think of the corotational transformation as a *family* of transformations. |
| 111 | + |
| 112 | + |
| 113 | +References |
| 114 | +---------- |
| 115 | + |
| 116 | +.. [1] Perez, Claudio M., and Filip C. Filippou. “On Nonlinear Geometric Transformations of Finite Elements.” International Journal for Numerical Methods in Engineering 125, no. 17 (September 15, 2024): e7506. https://doi.org/10.1002/nme.7506. |
| 117 | +
|
| 118 | +.. [2] De Souza, R. M. "Force-based finite element for large displacement inelastic analysis of frames" University of California, Berkeley (2000) |
| 119 | +
|
| 120 | +Code Developed by: |rms|, |cmp| |
| 121 | + |
0 commit comments