OpenFAST
Wind turbine multiphysics simulator
Public Member Functions | List of all members
nwtc_num::smllrottrans Interface Reference

This routine computes the 3x3 transformation matrix, \(TransMat\), to a coordinate system \(x\) (with orthogonal axes \(x_1, x_2, x_3\)) resulting from three rotations ( \(\theta_1\), \(\theta_2\), \(\theta_3\)) about the orthogonal axes ( \(X_1, X_2, X_3\)) of coordinate system \(X\). More...

Public Member Functions

subroutine smllrottransdd (RotationType, Theta1, Theta2, Theta3, TransMat, ErrTxt, ErrStat, ErrMsg)
 This routine computes the 3x3 transformation matrix, \(TransMat\), to a coordinate system \(x\) (with orthogonal axes \(x_1, x_2, x_3\)) resulting from three rotations ( \(\theta_1\), \(\theta_2\), \(\theta_3\)) about the orthogonal axes ( \(X_1, X_2, X_3\)) of coordinate system \(X\). More...
 
subroutine smllrottransd (RotationType, Theta1, Theta2, Theta3, TransMat, ErrTxt, ErrStat, ErrMsg)
 This routine computes the 3x3 transformation matrix, \(TransMat\), to a coordinate system \(x\) (with orthogonal axes \(x_1, x_2, x_3\)) resulting from three rotations ( \(\theta_1\), \(\theta_2\), \(\theta_3\)) about the orthogonal axes ( \(X_1, X_2, X_3\)) of coordinate system \(X\). More...
 
subroutine smllrottransr (RotationType, Theta1, Theta2, Theta3, TransMat, ErrTxt, ErrStat, ErrMsg)
 This routine computes the 3x3 transformation matrix, \(TransMat\), to a coordinate system \(x\) (with orthogonal axes \(x_1, x_2, x_3\)) resulting from three rotations ( \(\theta_1\), \(\theta_2\), \(\theta_3\)) about the orthogonal axes ( \(X_1, X_2, X_3\)) of coordinate system \(X\). More...
 

Detailed Description

This routine computes the 3x3 transformation matrix, \(TransMat\), to a coordinate system \(x\) (with orthogonal axes \(x_1, x_2, x_3\)) resulting from three rotations ( \(\theta_1\), \(\theta_2\), \(\theta_3\)) about the orthogonal axes ( \(X_1, X_2, X_3\)) of coordinate system \(X\).

All angles are assummed to be small, as such, the order of rotations does not matter and Euler angles do not need to be used. This routine is used to compute the transformation matrix ( \(TransMat\)) between undeflected ( \(X\)) and deflected ( \(x\)) coordinate systems. In matrix form:

\begin{equation} \left\{ \begin{matrix} x_1 \\ x_2 \\ x_3 \end{matrix} \right\} = \left[ TransMat(\theta_1, \theta_2, \theta_3) \right] \left\{ \begin{matrix} X_1 \\ X_2 \\ X_3 \end{matrix} \right\} \end{equation}

The transformation matrix, \(TransMat\), is the closest orthonormal matrix to the nonorthonormal, but skew-symmetric, Bernoulli-Euler matrix:

\begin{equation} A = \begin{bmatrix} 1 & \theta_3 & -\theta_2 \\ -\theta_3 & 1 & \theta_1 \\ \theta_2 & -\theta_1 & 1 \end{bmatrix} \end{equation}

In the Frobenius Norm sense, the closest orthornormal matrix is: \(TransMat = U V^T\), where the columns of \(U\) contain the eigenvectors of \( AA^T\) and the columns of \(V\) contain the eigenvectors of \(A^TA\) (note that \(^T\) = transpose). This result comes directly from the Singular Value Decomposition (SVD) of \(A = USV^T\) where \(S\) is a diagonal matrix containing the singular values of \(A\), which are sqrt( eigenvalues of \(AA^T\) ) = sqrt( eigenvalues of \(A^TA\) ).

The algebraic form of the transformation matrix, as implemented below, was derived symbolically by J. Jonkman by computing \(UV^T\) by hand with verification in Mathematica.

This routine is the inverse of GetSmllRotAngs (nwtc_num::getsmllrotangs).
Use SmllRotTrans (nwtc_num::smllrottrans) instead of directly calling a specific routine in the generic interface.

Parameters
[in]theta1\(\theta_1\): the small rotation about \(X_1\), (rad).
[in]theta2\(\theta_2\): the small rotation about \(X_2\), (rad).
[in]theta3\(\theta_3\): the small rotation about \(X_3\), (rad).
[out]transmatThe resulting transformation matrix from \(X\) to \(x\), (-).
[out]errstatError status
[out]errmsgError message corresponding to ErrStat
[in]rotationtypeThe type of rotation; used to inform the user where a large rotation is occuring upon such an event.
[in]errtxtan additional message to be displayed as a warning (typically the simulation time)

Member Function/Subroutine Documentation

◆ smllrottransd()

subroutine nwtc_num::smllrottrans::smllrottransd ( character(*), intent(in)  RotationType,
real(reki), intent(in)  Theta1,
real(reki), intent(in)  Theta2,
real(reki), intent(in)  Theta3,
real(dbki), dimension (3,3), intent(out)  TransMat,
character(*), intent(in), optional  ErrTxt,
integer(intki), intent(out)  ErrStat,
character(*), intent(out)  ErrMsg 
)

This routine computes the 3x3 transformation matrix, \(TransMat\), to a coordinate system \(x\) (with orthogonal axes \(x_1, x_2, x_3\)) resulting from three rotations ( \(\theta_1\), \(\theta_2\), \(\theta_3\)) about the orthogonal axes ( \(X_1, X_2, X_3\)) of coordinate system \(X\).

All angles are assummed to be small, as such, the order of rotations does not matter and Euler angles do not need to be used. This routine is used to compute the transformation matrix ( \(TransMat\)) between undeflected ( \(X\)) and deflected ( \(x\)) coordinate systems. In matrix form:

\begin{equation} \left\{ \begin{matrix} x_1 \\ x_2 \\ x_3 \end{matrix} \right\} = \left[ TransMat(\theta_1, \theta_2, \theta_3) \right] \left\{ \begin{matrix} X_1 \\ X_2 \\ X_3 \end{matrix} \right\} \end{equation}

The transformation matrix, \(TransMat\), is the closest orthonormal matrix to the nonorthonormal, but skew-symmetric, Bernoulli-Euler matrix:

\begin{equation} A = \begin{bmatrix} 1 & \theta_3 & -\theta_2 \\ -\theta_3 & 1 & \theta_1 \\ \theta_2 & -\theta_1 & 1 \end{bmatrix} \end{equation}

In the Frobenius Norm sense, the closest orthornormal matrix is: \(TransMat = U V^T\), where the columns of \(U\) contain the eigenvectors of \( AA^T\) and the columns of \(V\) contain the eigenvectors of \(A^TA\) (note that \(^T\) = transpose). This result comes directly from the Singular Value Decomposition (SVD) of \(A = USV^T\) where \(S\) is a diagonal matrix containing the singular values of \(A\), which are sqrt( eigenvalues of \(AA^T\) ) = sqrt( eigenvalues of \(A^TA\) ).

The algebraic form of the transformation matrix, as implemented below, was derived symbolically by J. Jonkman by computing \(UV^T\) by hand with verification in Mathematica.

This routine is the inverse of GetSmllRotAngs (nwtc_num::getsmllrotangs).
Use SmllRotTrans (nwtc_num::smllrottrans) instead of directly calling a specific routine in the generic interface.

Parameters
[in]theta1\(\theta_1\): the small rotation about \(X_1\), (rad).
[in]theta2\(\theta_2\): the small rotation about \(X_2\), (rad).
[in]theta3\(\theta_3\): the small rotation about \(X_3\), (rad).
[out]transmatThe resulting transformation matrix from \(X\) to \(x\), (-).
[out]errstatError status
[out]errmsgError message corresponding to ErrStat
[in]rotationtypeThe type of rotation; used to inform the user where a large rotation is occuring upon such an event.
[in]errtxtan additional message to be displayed as a warning (typically the simulation time)

◆ smllrottransdd()

subroutine nwtc_num::smllrottrans::smllrottransdd ( character(*), intent(in)  RotationType,
real(dbki), intent(in)  Theta1,
real(dbki), intent(in)  Theta2,
real(dbki), intent(in)  Theta3,
real(dbki), dimension (3,3), intent(out)  TransMat,
character(*), intent(in), optional  ErrTxt,
integer(intki), intent(out)  ErrStat,
character(*), intent(out)  ErrMsg 
)

This routine computes the 3x3 transformation matrix, \(TransMat\), to a coordinate system \(x\) (with orthogonal axes \(x_1, x_2, x_3\)) resulting from three rotations ( \(\theta_1\), \(\theta_2\), \(\theta_3\)) about the orthogonal axes ( \(X_1, X_2, X_3\)) of coordinate system \(X\).

All angles are assummed to be small, as such, the order of rotations does not matter and Euler angles do not need to be used. This routine is used to compute the transformation matrix ( \(TransMat\)) between undeflected ( \(X\)) and deflected ( \(x\)) coordinate systems. In matrix form:

\begin{equation} \left\{ \begin{matrix} x_1 \\ x_2 \\ x_3 \end{matrix} \right\} = \left[ TransMat(\theta_1, \theta_2, \theta_3) \right] \left\{ \begin{matrix} X_1 \\ X_2 \\ X_3 \end{matrix} \right\} \end{equation}

The transformation matrix, \(TransMat\), is the closest orthonormal matrix to the nonorthonormal, but skew-symmetric, Bernoulli-Euler matrix:

\begin{equation} A = \begin{bmatrix} 1 & \theta_3 & -\theta_2 \\ -\theta_3 & 1 & \theta_1 \\ \theta_2 & -\theta_1 & 1 \end{bmatrix} \end{equation}

In the Frobenius Norm sense, the closest orthornormal matrix is: \(TransMat = U V^T\), where the columns of \(U\) contain the eigenvectors of \( AA^T\) and the columns of \(V\) contain the eigenvectors of \(A^TA\) (note that \(^T\) = transpose). This result comes directly from the Singular Value Decomposition (SVD) of \(A = USV^T\) where \(S\) is a diagonal matrix containing the singular values of \(A\), which are sqrt( eigenvalues of \(AA^T\) ) = sqrt( eigenvalues of \(A^TA\) ).

The algebraic form of the transformation matrix, as implemented below, was derived symbolically by J. Jonkman by computing \(UV^T\) by hand with verification in Mathematica.

This routine is the inverse of GetSmllRotAngs (nwtc_num::getsmllrotangs).
Use SmllRotTrans (nwtc_num::smllrottrans) instead of directly calling a specific routine in the generic interface.

Parameters
[in]theta1\(\theta_1\): the small rotation about \(X_1\), (rad).
[in]theta2\(\theta_2\): the small rotation about \(X_2\), (rad).
[in]theta3\(\theta_3\): the small rotation about \(X_3\), (rad).
[out]transmatThe resulting transformation matrix from \(X\) to \(x\), (-).
[out]errstatError status
[out]errmsgError message corresponding to ErrStat
[in]rotationtypeThe type of rotation; used to inform the user where a large rotation is occuring upon such an event.
[in]errtxtan additional message to be displayed as a warning (typically the simulation time)
[in]theta1The small rotation about X1, (rad).
[in]theta2The small rotation about X2, (rad).
[in]theta3The small rotation about X3, (rad).
[out]transmatThe resulting transformation matrix from X to x, (-).
[out]errstatError status
[out]errmsgError message corresponding to ErrStat
[in]rotationtypeThe type of rotation; used to inform the user where a large rotation is occuring upon such an event.
[in]errtxtan additional message to be displayed as a warning (typically the simulation time)

◆ smllrottransr()

subroutine nwtc_num::smllrottrans::smllrottransr ( character(*), intent(in)  RotationType,
real(reki), intent(in)  Theta1,
real(reki), intent(in)  Theta2,
real(reki), intent(in)  Theta3,
real(reki), dimension (3,3), intent(out)  TransMat,
character(*), intent(in), optional  ErrTxt,
integer(intki), intent(out)  ErrStat,
character(*), intent(out)  ErrMsg 
)

This routine computes the 3x3 transformation matrix, \(TransMat\), to a coordinate system \(x\) (with orthogonal axes \(x_1, x_2, x_3\)) resulting from three rotations ( \(\theta_1\), \(\theta_2\), \(\theta_3\)) about the orthogonal axes ( \(X_1, X_2, X_3\)) of coordinate system \(X\).

All angles are assummed to be small, as such, the order of rotations does not matter and Euler angles do not need to be used. This routine is used to compute the transformation matrix ( \(TransMat\)) between undeflected ( \(X\)) and deflected ( \(x\)) coordinate systems. In matrix form:

\begin{equation} \left\{ \begin{matrix} x_1 \\ x_2 \\ x_3 \end{matrix} \right\} = \left[ TransMat(\theta_1, \theta_2, \theta_3) \right] \left\{ \begin{matrix} X_1 \\ X_2 \\ X_3 \end{matrix} \right\} \end{equation}

The transformation matrix, \(TransMat\), is the closest orthonormal matrix to the nonorthonormal, but skew-symmetric, Bernoulli-Euler matrix:

\begin{equation} A = \begin{bmatrix} 1 & \theta_3 & -\theta_2 \\ -\theta_3 & 1 & \theta_1 \\ \theta_2 & -\theta_1 & 1 \end{bmatrix} \end{equation}

In the Frobenius Norm sense, the closest orthornormal matrix is: \(TransMat = U V^T\), where the columns of \(U\) contain the eigenvectors of \( AA^T\) and the columns of \(V\) contain the eigenvectors of \(A^TA\) (note that \(^T\) = transpose). This result comes directly from the Singular Value Decomposition (SVD) of \(A = USV^T\) where \(S\) is a diagonal matrix containing the singular values of \(A\), which are sqrt( eigenvalues of \(AA^T\) ) = sqrt( eigenvalues of \(A^TA\) ).

The algebraic form of the transformation matrix, as implemented below, was derived symbolically by J. Jonkman by computing \(UV^T\) by hand with verification in Mathematica.

This routine is the inverse of GetSmllRotAngs (nwtc_num::getsmllrotangs).
Use SmllRotTrans (nwtc_num::smllrottrans) instead of directly calling a specific routine in the generic interface.

Parameters
[in]theta1\(\theta_1\): the small rotation about \(X_1\), (rad).
[in]theta2\(\theta_2\): the small rotation about \(X_2\), (rad).
[in]theta3\(\theta_3\): the small rotation about \(X_3\), (rad).
[out]transmatThe resulting transformation matrix from \(X\) to \(x\), (-).
[out]errstatError status
[out]errmsgError message corresponding to ErrStat
[in]rotationtypeThe type of rotation; used to inform the user where a large rotation is occuring upon such an event.
[in]errtxtan additional message to be displayed as a warning (typically the simulation time)

The documentation for this interface was generated from the following file: