OpenFAST
Wind turbine multiphysics simulator
|
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... | |
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.
[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] | transmat | The resulting transformation matrix from \(X\) to \(x\), (-). |
[out] | errstat | Error status |
[out] | errmsg | Error message corresponding to ErrStat |
[in] | rotationtype | The type of rotation; used to inform the user where a large rotation is occuring upon such an event. |
[in] | errtxt | an additional message to be displayed as a warning (typically the simulation time) |
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.
[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] | transmat | The resulting transformation matrix from \(X\) to \(x\), (-). |
[out] | errstat | Error status |
[out] | errmsg | Error message corresponding to ErrStat |
[in] | rotationtype | The type of rotation; used to inform the user where a large rotation is occuring upon such an event. |
[in] | errtxt | an additional message to be displayed as a warning (typically the simulation time) |
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.
[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] | transmat | The resulting transformation matrix from \(X\) to \(x\), (-). |
[out] | errstat | Error status |
[out] | errmsg | Error message corresponding to ErrStat |
[in] | rotationtype | The type of rotation; used to inform the user where a large rotation is occuring upon such an event. |
[in] | errtxt | an additional message to be displayed as a warning (typically the simulation time) |
[in] | theta1 | The small rotation about X1, (rad). |
[in] | theta2 | The small rotation about X2, (rad). |
[in] | theta3 | The small rotation about X3, (rad). |
[out] | transmat | The resulting transformation matrix from X to x, (-). |
[out] | errstat | Error status |
[out] | errmsg | Error message corresponding to ErrStat |
[in] | rotationtype | The type of rotation; used to inform the user where a large rotation is occuring upon such an event. |
[in] | errtxt | an additional message to be displayed as a warning (typically the simulation time) |
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.
[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] | transmat | The resulting transformation matrix from \(X\) to \(x\), (-). |
[out] | errstat | Error status |
[out] | errmsg | Error message corresponding to ErrStat |
[in] | rotationtype | The type of rotation; used to inform the user where a large rotation is occuring upon such an event. |
[in] | errtxt | an additional message to be displayed as a warning (typically the simulation time) |