(S|D)ROTM

Single and double ROTM.

Description

Applies a modified plane rotation to a series of points.

The exact form of the rotation matrix will depend on FLAG which is the first element of the PARAM input array.

\fvar{PARAM} =
\left[
    \begin{array}{c}
        \fvar{FLAG} \\
        \fvar{H11} \\
        \fvar{H21} \\
        \fvar{H12} \\
        \fvar{H22}
    \end{array}
\right]

If \fvar{FLAG}=-1:

\left[
    \begin{array}{c}
        x_{i} \\
        y_{i}
    \end{array}
\right]
\assign
\left[
    \begin{array}{ll}
        \fvar{H11} & \fvar{H12} \\
        \fvar{H21} & \fvar{H22} \\
    \end{array}
\right]
* \left[
    \begin{array}{c}
        x_{i} \\
        y_{i}
    \end{array}
\right]

If \fvar{FLAG}=0:

\left[
    \begin{array}{c}
        x_{i} \\
        y_{i}
    \end{array}
\right]
\assign
\left[
    \begin{array}{ll}
        1 & \fvar{H12} \\
        \fvar{H21} & 1 \\
    \end{array}
\right]
* \left[
    \begin{array}{c}
        x_{i} \\
        y_{i}
    \end{array}
\right]

If \fvar{FLAG}=1:

\left[
    \begin{array}{c}
        x_{i} \\
        y_{i}
    \end{array}
\right]
\assign
\left[
    \begin{array}{ll}
        \fvar{H11} & 1 \\
        -1 & \fvar{H22} \\
    \end{array}
\right]
* \left[
    \begin{array}{c}
        x_{i} \\
        y_{i}
    \end{array}
\right]

If \fvar{FLAG}=-2:

\left[
    \begin{array}{c}
        x_{i} \\
        y_{i}
    \end{array}
\right]
\assign
\left[
    \begin{array}{ll}
        1 & 0 \\
        0 & 1 \\
    \end{array}
\right]
* \left[
    \begin{array}{c}
        x_{i} \\
        y_{i}
    \end{array}
\right]

BLAS Interface

void srotm(const qml_long *N, float *X, const qml_long *INCX, float *Y,
           const qml_long *INCY, const float *PARAM);

void drotm(const qml_long *N, double *X, const qml_long *INCX, double *Y,
           const qml_long *INCY, const double *PARAM);

CBLAS Interface

void cblas_srotm(const qml_long N, float *X, const qml_long INCX, float *Y,
                 const qml_long INCY, const float *PARAM);

void cblas_drotm(const qml_long N, double *X, const qml_long INCX, double *Y,
                 const qml_long INCY, const double *PARAM);

Arguments

N The number of elements in X and Y
X The X coordinates for the series of points, must be at least: (\fvar{N}-1)\mult\abs{\fvar{INCX}} + 1
INCX Distance between individual elements in X
Y The Y coordinates for the series of points, must be at least: (\fvar{N}-1)\mult\abs{\fvar{INCY}} + 1
INCY Distance between individual elements in Y
PARAM Rotation parameter array of length 5