Corotational

Corotational#

The corotational coordinate transformation performs a geometric transformation from a basic system [1] to the global coordinate system. [2]

Model.geomTransf("Corotational", tag, vecxz[, offi, offj])

Define a corotational geometric transformation for frame elements.

Parameters:
  • tag (integer) – integer tag identifying transformation

  • vecxz (tuple of floats) – 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.

  • offi (tuple of floats) – 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).

  • offj (tuple of floats) – 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).

Note

The element coordinate system and joint offsets are the same as that documented for the Linear transformation.

Examples#

This example is developed in detail on the examples site. In order to cover a wide range of cases, the strong axis of the first column, element 1, 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.

../../../../_images/vecxz.png

A portal frame with \(X_3\) vertical.#

model.node(1, (    0, 0,      0))
model.node(2, (width, 0,      0))
model.node(3, (width, 0, height))
model.node(4, (    0, 0, height))

model.geomTransf("Corotational", 1, (1, 0, 0)) # Column
model.geomTransf("Corotational", 2, (0, 0, 1)) # Girder
model.geomTransf("Corotational", 3, (0,-1, 0)) # Column

Theory#

../../../../_images/directors.png

Corotational transformation of a two-node frame.#

The undeformed cross sections of a beam can be represented by a stationary field of three reference directors \(\mathbf{D}_k\) that are orthonormal everywhere in \(\mathcal{B}\). As the beam deforms, these directors are transformed into the deformed directors \(\mathbf{d}_k\)

Under a corotational transformation, an element’s state determination is performed in a transformed configuration space represented by director fields \(\left\{\bar{\mathbf{d}}_k\right\}\), and \(\left\{\bar{\mathbf{D}}_k\right\}\) with the expressions:

\[\begin{split}\left.\begin{aligned} \mathbf{d}_k &\triangleq \boldsymbol{\Lambda}\mathbf{D}_k \\ \bar{\mathbf{d}}_k &\triangleq \boldsymbol{R}\mathbf{D}_k \\ \bar{\mathbf{D}}_k &\triangleq \bar{\boldsymbol{\Lambda}}\mathbf{D}_k \\ \end{aligned}\right., \quad\text{ implying }\qquad \begin{aligned} \boldsymbol{\Lambda} &= \mathbf{d}_k\otimes\mathbf{D}_k \\ \boldsymbol{R} &= \bar{\mathbf{d}}_k\otimes\mathbf{D}_k \\ \bar{\boldsymbol{\Lambda}} &= \bar{\mathbf{D}}_k\otimes\mathbf{D}_k \\ \end{aligned}\end{split}\]

Note

It is more appropriate to think of the corotational transformation as a family of transformations.

Figure corot-directors illustrates this for an example embedding where a single representative director from each of these fields, say \(k=1\), is shown and \(\mathbf{D}_1\) is taken to be aligned with the reference configuration of an initially straight plane frame (note that the subscript 1 will be dropped for clarity). Because \(\mathbf{D}\) was taken in a straight line for this example and \(\boldsymbol{R}\) is necessarily homogeneous, it follows from @eq:directors that \(\bar{\mathbf{d}}\) traces a similar straight line. It is also useful to observe that @eq:tether implies the following alternative representation for \(\boldsymbol{R}\), and \(\bar{\boldsymbol{\Lambda}}\) which is also apparent from the figure above:

\[\begin{split}\begin{aligned} \boldsymbol{R} &= \boldsymbol{\Lambda}\bar{\boldsymbol{\Lambda}}^{\mathrm{t}} \\ &= (\mathbf{d}_k\otimes\mathbf{D}_k)(\mathbf{D}_k\otimes \bar{\mathbf{D}}_k) \\ &= \mathbf{d}_k \otimes \bar{\mathbf{D}}_k \end{aligned} \quad\text{ and }\quad \begin{aligned} \bar{\boldsymbol{\Lambda}} &= \boldsymbol{R}^{\mathrm{t}}\boldsymbol{\Lambda} \\ &=\left(\mathbf{D}_k\otimes \bar{\mathbf{d}}_k\right)\left(\mathbf{d}_\ell\otimes\mathbf{D}_\ell\right) \\ &= (\bar{\mathbf{d}}_k\cdot \mathbf{d}_\ell) \, \mathbf{D}_k \otimes \mathbf{D}_\ell \end{aligned}\end{split}\]

where we use the identities \(\left(\boldsymbol{a}\otimes\boldsymbol{b}\right)\left(\boldsymbol{c}\otimes\boldsymbol{d}\right) = \boldsymbol{b}\cdot\boldsymbol{c}\, \left(\boldsymbol{a}\otimes\boldsymbol{d}\right)\) and \((\boldsymbol{a}\otimes\boldsymbol{b})^{\mathrm{t}} = \boldsymbol{b}\otimes\boldsymbol{a}\) and summation is again implied.

If a finite element implements an ideal strain measure that is exactly objective, then such a transformation will by definition be unobservable in the analysis results. However, due to the complexity in the configuration manifold of beams, such a strain measure is almost never used, and consequenty the effect of the corotational transformation is very apparent.

\[\begin{split}\begin{aligned} \boldsymbol{\omega}_R &= \delta \bar{\mathbf{d}} \otimes \bar{\mathbf{d}} \\ \boldsymbol{\omega} &= \delta \mathbf{d} \otimes \mathbf{d} \\ \bar{\boldsymbol{\omega}} &= \delta \bar{\mathbf{D}} \otimes \bar{\mathbf{D}} \end{aligned}\end{split}\]

References#

Code Developed by: Remo Magalhaes de Souza, Claudio M. Perez