Example #1
0
void ATL_creftrmmRLCN
(
   const int                  M,
   const int                  N,
   const float                * ALPHA,
   const float                * A,
   const int                  LDA,
   float                      * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_creftrmmRLCN( ... )
 *
 * <=>
 *
 * ATL_creftrmm
 * ( AtlasRight, AtlasLower, AtlasConjTrans, AtlasNonUnit, ... )
 *
 * See ATL_creftrmm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   float                      t0_i, t0_r;
   int                        i, iajk, ibij, ibik, j, jak, jbj, jbk, k,
                              lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( k = N-1,     jak  = (N-1)*lda2, jbk  = (N-1)*ldb2;
        k >= 0; k--, jak -= lda2,       jbk -= ldb2 )
   {
      for( j = k+1,    iajk  = ((k+1)<<1)+jak, jbj  = (k+1)*ldb2;
           j < N; j++, iajk += 2,              jbj += ldb2 )
      {
         Mmul( ALPHA[0], ALPHA[1], A[iajk], -A[iajk+1], t0_r, t0_i );
         for( i = 0, ibij = jbj, ibik = jbk; i < M; i++, ibij += 2, ibik += 2 )
         { Mmla( t0_r, t0_i, B[ibik], B[ibik+1], B[ibij], B[ibij+1] ); }
      }
      Mset( ALPHA[0], ALPHA[1], t0_r, t0_i );
      i = ( k << 1 ) + jak; Msscl( A[i], -A[i+1], t0_r, t0_i );
      for( i = 0, ibik = jbk; i < M; i++, ibik += 2 )
      { Msscl( t0_r, t0_i, B[ibik], B[ibik+1] ); }
   }
/*
 * End of ATL_creftrmmRLCN
 */
}
Example #2
0
void ATL_creftrmmRUNN
(
   const int                  M,
   const int                  N,
   const float                * ALPHA,
   const float                * A,
   const int                  LDA,
   float                      * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_creftrmmRUNN( ... )
 *
 * <=>
 *
 * ATL_creftrmm
 * ( AtlasRight, AtlasUpper, AtlasNoTrans, AtlasNonUnit, ... )
 *
 * See ATL_creftrmm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   float                      t0_i, t0_r;
   int                        i, iakj, ibij, ibik, j, jaj, jbj, jbk, k,
                              lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = N-1,     jaj  = (N-1)*lda2, jbj  = (N-1)*ldb2;
        j >= 0; j--, jaj -= lda2,       jbj -= ldb2 )
   {
      Mset( ALPHA[0], ALPHA[1], t0_r, t0_i );
      i = ( j << 1 ) + jaj; Msscl( A[i], A[i+1], t0_r, t0_i );
      for( i = 0, ibij = jbj; i < M; i++, ibij += 2 )
      { Msscl( t0_r, t0_i, B[ibij], B[ibij+1] ); }
      for( k = 0, iakj = jaj, jbk = 0; k < j; k++, iakj += 2, jbk += ldb2 )
      {
         Mmul( ALPHA[0], ALPHA[1], A[iakj], A[iakj+1], t0_r, t0_i );
         for( i = 0, ibij = jbj, ibik = jbk; i < M; i++, ibij += 2, ibik += 2 )
         { Mmla( t0_r, t0_i, B[ibik], B[ibik+1], B[ibij], B[ibij+1] ); }
      }
   }
/*
 * End of ATL_creftrmmRUNN
 */
}
Example #3
0
void ATL_creftrmmRUCU
(
    const int                  M,
    const int                  N,
    const float                * ALPHA,
    const float                * A,
    const int                  LDA,
    float                      * B,
    const int                  LDB
)
{
    /*
     * Purpose
     * =======
     *
     * ATL_creftrmmRUCU( ... )
     *
     * <=>
     *
     * ATL_creftrmm
     * ( AtlasRight, AtlasUpper, AtlasConjTrans, AtlasUnit, ... )
     *
     * See ATL_creftrmm for details.
     *
     * ---------------------------------------------------------------------
     */
    /*
     * .. Local Variables ..
     */
    float                      t0_i, t0_r;
    int                        i, iajk, ibij, ibik, j, jak, jbj, jbk, k,
                               lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 );
    /* ..
     * .. Executable Statements ..
     *
     */
    for( k = 0, jak = 0, jbk = 0; k < N; k++, jak += lda2, jbk += ldb2 )
    {
        for( j = 0, iajk  = jak, jbj  = 0; j < k; j++, iajk += 2,   jbj += ldb2 )
        {
            Mmul( ALPHA[0], ALPHA[1], A[iajk], -A[iajk+1], t0_r, t0_i );
            for( i = 0,      ibij  = jbj, ibik  = jbk;
                    i < M; i++, ibij += 2,   ibik += 2 )
            {
                Mmla( t0_r, t0_i, B[ibik], B[ibik+1], B[ibij], B[ibij+1] );
            }
        }
        Mset( ALPHA[0], ALPHA[1], t0_r, t0_i );
        for( i = 0, ibik = jbk; i < M; i++, ibik += 2 )
        {
            Msscl( t0_r, t0_i, B[ibik], B[ibik+1] );
        }
    }
    /*
     * End of ATL_creftrmmRUCU
     */
}
Example #4
0
void ATL_creftrsmRLNN
(
   const int                  M,
   const int                  N,
   const float                * ALPHA,
   const float                * A,
   const int                  LDA,
   float                      * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_creftrsmRLNN( ... )
 *
 * <=>
 *
 * ATL_creftrsm
 * ( AtlasRight, AtlasLower, AtlasNoTrans, AtlasNonUnit, ... )
 *
 * See ATL_creftrsm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   int                        i, iakj, ibij, ibik, j, jaj, jbj, jbk, k,
                              lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = N-1,      jaj  = (N-1)*lda2, jbj  = (N-1)*ldb2;
        j >= 0;  j--, jaj -= lda2,       jbj -= ldb2 )
   {
      for( i = 0, ibij  = jbj; i < M; i++, ibij += 2 )
      { Msscl( ALPHA[0], ALPHA[1], B[ibij], B[ibij+1] ); }
      for( k = j+1,    iakj  = ((j+1) << 1)+jaj, jbk  = (j+1)*ldb2;
           k < N; k++, iakj += 2,                jbk += ldb2 )
      {
         for( i = 0, ibij = jbj, ibik = jbk; i < M; i++, ibij += 2, ibik += 2 )
         { Mmls( A[iakj], A[iakj+1], B[ibik], B[ibik+1], B[ibij], B[ibij+1] ); }
      }
      for( i = 0, ibij = jbj; i < M; i++, ibij += 2 )
      { k = ( j << 1 ) + jaj; Msdiv( A[k], A[k+1], B[ibij], B[ibij+1] ); }
   }
/*
 * End of ATL_creftrsmRLNN
 */
}
Example #5
0
void ATL_creftrsmRLTU
(
   const int                  M,
   const int                  N,
   const float                * ALPHA,
   const float                * A,
   const int                  LDA,
   float                      * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_creftrsmRLTU( ... )
 *
 * <=>
 *
 * ATL_creftrsm
 * ( AtlasRight, AtlasLower, AtlasTrans, AtlasUnit, ... )
 *
 * See ATL_creftrsm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register float             t0_i, t0_r;
   int                        i, iajk, ibij, ibik, j, jak, jbj, jbk, k,
                              lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( k = 0, jak = 0, jbk = 0; k < N; k++, jak += lda2, jbk += ldb2 )
   {
      for( j = k+1,    iajk  = ((k+1) << 1)+jak, jbj  = (k+1)*ldb2;
           j < N; j++, iajk += 2,                jbj += ldb2 )
      {
         Mset( A[iajk], A[iajk+1], t0_r, t0_i );
         for( i = 0, ibij = jbj, ibik = jbk; i < M; i++, ibij += 2, ibik += 2 )
         { Mmls( t0_r, t0_i, B[ibik], B[ibik+1], B[ibij], B[ibij+1] ); }
      }
      for( i = 0, ibik = jbk; i < M; i++, ibik += 2 )
      { Msscl( ALPHA[0], ALPHA[1], B[ibik], B[ibik+1] ); }
   }
/*
 * End of ATL_creftrsmRLTU
 */
}
void ATL_creftrsmLUNN
(
   const int                  M,
   const int                  N,
   const float                * ALPHA,
   const float                * A,
   const int                  LDA,
   float                      * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_creftrsmLUNN( ... )
 *
 * <=>
 *
 * ATL_creftrsm
 * ( AtlasLeft, AtlasUpper, AtlasNoTrans, AtlasNonUnit, ... )
 *
 * See ATL_creftrsm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   int                        i, iaik, ibij, ibkj, j, jak, jbj, k,
                              lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jbj = 0; j < N; j++, jbj += ldb2 )
   {
      for( i = 0, ibij = jbj; i < M; i++, ibij += 2 )
      { Msscl( ALPHA[0], ALPHA[1], B[ibij], B[ibij+1] ); }
      for( k = M-1,     jak  = (M-1)*lda2, ibkj  = ((M-1) << 1)+jbj;
           k >= 0; k--, jak -= lda2,       ibkj -= 2 )
      {
         i = ( k << 1 ) + jak; Msdiv( A[i], A[i+1], B[ibkj], B[ibkj+1] );
         for( i = 0,      iaik  = jak, ibij  = jbj;
              i < k; i++, iaik += 2,   ibij += 2 )
         { Mmls( A[iaik], A[iaik+1], B[ibkj], B[ibkj+1], B[ibij], B[ibij+1] ); }
      }
   }
/*
 * End of ATL_creftrsmLUNN
 */
}
void ATL_creftrmmLUCN
(
   const int                  M,
   const int                  N,
   const float                * ALPHA,
   const float                * A,
   const int                  LDA,
   float                      * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_creftrmmLUCN( ... )
 *
 * <=>
 *
 * ATL_creftrmm
 * ( AtlasLeft, AtlasUpper, AtlasConjTrans, AtlasNonUnit, ... )
 *
 * See ATL_creftrmm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   float                      t0_i, t0_r;
   int                        i, iaki, ibij, ibkj, j, jai, jbj, k,
                              lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jbj = 0; j < N; j++, jbj += ldb2 )
   {
      for( i = M-1,     jai  = (M-1)*lda2, ibij  = ((M-1)<<1)+jbj;
           i >= 0; i--, jai -= lda2,       ibij -= 2 )
      {
         Mset( B[ibij], B[ibij+1], t0_r, t0_i );
         k = ( i << 1 ) + jai; Msscl( A[k], -A[k+1], t0_r, t0_i );
         for( k = 0, iaki = jai, ibkj = jbj; k < i; k++, iaki += 2, ibkj += 2 )
         { Mmla( A[iaki], -A[iaki+1], B[ibkj], B[ibkj+1], t0_r, t0_i ); }
         Mmul( ALPHA[0], ALPHA[1], t0_r, t0_i, B[ibij], B[ibij+1] );
      }
   }
/*
 * End of ATL_creftrmmLUCN
 */
}
Example #8
0
void ATL_creftrsmRUNU
(
   const int                  M,
   const int                  N,
   const float                * ALPHA,
   const float                * A,
   const int                  LDA,
   float                      * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_creftrsmRUNU( ... )
 *
 * <=>
 *
 * ATL_creftrsm
 * ( AtlasRight, AtlasUpper, AtlasNoTrans, AtlasUnit, ... )
 *
 * See ATL_creftrsm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   int                        i, iakj, ibij, ibik, j, jaj, jbj, jbk, k,
                              lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jaj = 0, jbj = 0; j < N; j++, jaj += lda2, jbj += ldb2 )
   {
      for( i = 0, ibij = jbj; i < M; i++, ibij += 2 )
      { Msscl( ALPHA[0], ALPHA[1], B[ibij], B[ibij+1] ); }
      for( k = 0, iakj = jaj, jbk = 0; k < j; k++, iakj += 2, jbk += ldb2 )
      {
         for( i = 0, ibij = jbj, ibik = jbk; i < M; i++, ibij += 2, ibik += 2 )
         { Mmls( A[iakj], A[iakj+1], B[ibik], B[ibik+1], B[ibij], B[ibij+1] ); }
      }
   }
/*
 * End of ATL_creftrsmRUNU
 */
}
Example #9
0
void ATL_creftpmvLNN
(
   const int                  N,
   const float                * A,
   const int                  LDA,
   float                      * X,
   const int                  INCX
)
{
/*
 * Purpose
 * =======
 *
 * ATL_creftpmvLNN( ... )
 *
 * <=>
 *
 * ATL_creftpmv( AtlasLower, AtlasNoTrans, AtlasNonUnit, ... )
 *
 * See ATL_creftpmv for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register float             t0_i, t0_r;
   int                        i, iaij, incx2 = 2 * INCX, ix, j, jaj,
                              jx, lda2 = ( ( LDA - N + 1 ) << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = N-1,     jaj = (((LDA+1)*(N-1)) << 1) - (N-1)*N, jx = (N-1)*incx2;
        j >= 0; j--,                                         jx -= incx2 )
   {
      Mset( X[jx], X[jx+1], t0_r, t0_i );
      Msscl( A[jaj], A[jaj+1], X[jx], X[jx+1] );
      for( i = j+1, iaij = jaj+2, ix = jx+incx2; i < N;
           i++, iaij += 2, ix += incx2 )
      { Mmla( A[iaij], A[iaij+1], t0_r, t0_i, X[ix] , X[ix+1] ); }
      lda2 += 2; jaj -= lda2;
   }
/*
 * End of ATL_creftpmvLNN
 */
}
Example #10
0
void ATL_crefsyrk
(
   const enum ATLAS_UPLO      UPLO,
   const enum ATLAS_TRANS     TRANS,
   const int                  N,
   const int                  K,
   const float                * ALPHA,
   const float                * A,
   const int                  LDA,
   const float                * BETA,
   float                      * C,
   const int                  LDC
)
{
/*
 * Purpose
 * =======
 *
 * ATL_crefsyrk  performs one of the symmetric rank k operations
 *
 *    C := alpha * A * A' + beta * C,
 *
 * or
 *
 *    C := alpha * A' * A + beta * C,
 *
 * where alpha and beta are scalars, C is an n by n symmetric matrix and
 * A is an  n by k  matrix in the first case and a  k by n matrix in the
 * second case.
 *
 * Arguments
 * =========
 *
 * UPLO    (input)                       const enum ATLAS_UPLO
 *         On entry, UPLO  specifies whether the upper or lower triangu-
 *         lar part of the array C is to be referenced as follows:
 *
 *             UPLO = AtlasUpper   Only the upper triangular part of C
 *                                 is to be referenced.
 *
 *             UPLO = AtlasLower   Only the lower triangular part of C
 *                                 is to be referenced.
 *
 *         Unchanged on exit.
 *
 * TRANS   (input)                       const enum ATLAS_TRANS
 *         On entry,  TRANS  specifies the  operation to be performed as
 *         follows:
 *
 *            TRANS = AtlasNoTrans    C := alpha * A * A' + beta * C,
 *
 *            TRANS = AtlasTrans      C := alpha * A' * A + beta * C.
 *
 *         Unchanged on exit.
 *
 * N       (input)                       const int
 *         On entry, N specifies the order of the matrix C. N must be at
 *         least zero. Unchanged on exit.
 *
 * K       (input)                       const int
 *         On entry, with TRANS = AtlasNoTrans,  K  specifies the number
 *         of columns of the matrix  A,  and otherwise,  K specifies the
 *         number of rows of the  matrix A. K must be at least zero. Un-
 *         changed on exit.
 *
 * ALPHA   (input)                       const float *
 *         On entry, ALPHA specifies the scalar alpha.   When  ALPHA  is
 *         supplied as zero  then  the  entries of the matrix A need not
 *         be set on input. Unchanged on exit.
 *
 * A       (input)                       const float *
 *         On entry,  A  points  to an array of size equal to or greater
 *         than   LDA * ka * sizeof( float [2] ),   where  ka  is k when
 *         TRANS = AtlasNoTrans, and is  n otherwise. Before entry  with
 *         TRANS = AtlasNoTrans, the  leading n by k part of the array A
 *         must contain the matrix A,  otherwise the leading k by n part
 *         of the array A must contain the matrix A. Unchanged  on exit.
 *
 * LDA     (input)                       const int
 *         On entry, LDA  specifies the leading dimension of A as decla-
 *         red  in  the  calling  (sub) program.  LDA  must be  at least
 *         MAX( 1, n ) when TRANS = AtlasNoTrans, and MAX( 1, k ) other-
 *         wise. Unchanged on exit.
 *
 * BETA    (input)                       const float *
 *         On entry,  BETA  specifies the scalar  beta.   When  BETA  is
 *         supplied as zero  then  the  entries of the matrix C need not
 *         be set on input. Unchanged on exit.
 *
 * C       (input/output)                float *
 *         On entry,  C  points  to an array of size equal to or greater
 *         than   LDC * n * sizeof( float [2] ),   Before   entry   with
 *         UPLO = AtlasUpper,  the  leading n by n upper triangular part
 *         of the array C must contain the upper  triangular part of the
 *         symmetric matrix  and the strictly lower triangular part of C
 *         is not referenced.  On exit, the upper triangular part of the
 *         array  C  is  overwritten by the upper triangular part of the
 *         updated  matrix.  Before  entry  with UPLO = AtlasLower,  the
 *         leading n by n lower triangular part of the array C must con-
 *         tain the lower  triangular  part  of the symmetric matrix and
 *         the strictly upper triangular part of C is not referenced. On
 *         exit, the lower triangular part of the array C is overwritten
 *         by the lower triangular part of the updated matrix.
 *
 * LDC     (input)                       const int
 *         On entry, LDC  specifies the leading dimension of A as decla-
 *         red  in  the  calling  (sub) program.  LDC  must be  at least
 *         MAX( 1, n ). Unchanged on exit.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   int                        i, icij, j, jcj, ldc2 = ( LDC << 1 ),
                              ldcp12 = ( ( LDC + 1 ) << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   if( ( N == 0 ) ||
       ( ( Mszero( ALPHA[0], ALPHA[1] ) || ( K == 0 ) ) &&
         Msone( BETA[0], BETA[1] ) ) ) return;

   if( Mszero( ALPHA[0], ALPHA[1] ) )
   {
      if( UPLO == AtlasUpper )
      {
         if( Mszero( BETA[0], BETA[1] ) )
         {
            for( j = 0, jcj = 0; j < N; j++, jcj += ldc2 )
            {
               for( i = 0, icij = jcj; i <= j; i++, icij += 2 )
               { Mset( ATL_sZERO, ATL_sZERO, C[icij], C[icij+1] ); }
            }
         }
         else if( !Msone( BETA[0], BETA[1] ) )
         {
            for( j = 0, jcj = 0; j < N; j++, jcj += ldc2 )
            {
               for( i = 0, icij = jcj; i <= j; i++, icij += 2 )
               { Msscl( BETA[0], BETA[1], C[icij], C[icij+1] ); }
            }
         }
      }
      else
      {
         if( Mszero( BETA[0], BETA[1] ) )
         {
            for( j = 0, jcj = 0; j < N; j++, jcj += ldcp12 )
            {
               for( i = j, icij = jcj; i < N; i++, icij += 2 )
               { Mset( ATL_sZERO, ATL_sZERO, C[icij], C[icij+1] ); }
            }
         }
         else if( !Msone( BETA[0], BETA[1] ) )
         {
            for( j = 0, jcj = 0; j < N; j++, jcj += ldcp12 )
            {
               for( i = j, icij = jcj; i < N; i++, icij += 2 )
               { Msscl( BETA[0], BETA[1], C[icij], C[icij+1] ); }
            }
         }
      }
      return;
   }

   if( UPLO == AtlasUpper )
   {
      if( TRANS == AtlasNoTrans )
      { ATL_crefsyrkUN( N, K, ALPHA, A, LDA, BETA, C, LDC ); }
      else
      { ATL_crefsyrkUT( N, K, ALPHA, A, LDA, BETA, C, LDC ); }
   }
   else
   {
      if( TRANS == AtlasNoTrans )
      { ATL_crefsyrkLN( N, K, ALPHA, A, LDA, BETA, C, LDC ); }
      else
      { ATL_crefsyrkLT( N, K, ALPHA, A, LDA, BETA, C, LDC ); }
   }
/*
 * End of ATL_crefsyrk
 */
}
Example #11
0
void ATL_creftrsmRUTN
(
    const int                  M,
    const int                  N,
    const float                * ALPHA,
    const float                * A,
    const int                  LDA,
    float                      * B,
    const int                  LDB
)
{
    /*
     * Purpose
     * =======
     *
     * ATL_creftrsmRUTN( ... )
     *
     * <=>
     *
     * ATL_creftrsm
     * ( AtlasRight, AtlasUpper, AtlasTrans, AtlasNonUnit, ... )
     *
     * See ATL_creftrsm for details.
     *
     * ---------------------------------------------------------------------
     */
    /*
     * .. Local Variables ..
     */
    register float             t0_i, t0_r;
    int                        i, iajk, ibij, ibik, j, jak, jbj, jbk, k,
                               lda2 = ( LDA << 1 ), ldb2 = ( LDB << 1 );
    /* ..
     * .. Executable Statements ..
     *
     */
    for( k = N-1,     jak  = (N-1)*lda2, jbk  = (N-1)*ldb2;
            k >= 0; k--, jak -= lda2,       jbk -= ldb2 )
    {
        for( i = 0, ibik = jbk; i < M; i++, ibik += 2 )
        {
            j = ( k << 1 ) + jak;
            Msdiv( A[j], A[j+1], B[ibik], B[ibik+1] );
        }
        for( j = 0, iajk = jak, jbj = 0; j < k; j++, iajk += 2, jbj += ldb2 )
        {
            Mset( A[iajk], A[iajk+1], t0_r, t0_i );
            for( i = 0, ibij = jbj, ibik = jbk; i < M; i++, ibij += 2, ibik += 2 )
            {
                Mmls( t0_r, t0_i, B[ibik], B[ibik+1], B[ibij], B[ibij+1] );
            }
        }
        for( i = 0, ibik = jbk; i < M; i++, ibik += 2 )
        {
            Msscl( ALPHA[0], ALPHA[1], B[ibik], B[ibik+1] );
        }
    }
    /*
     * End of ATL_creftrsmRUTN
     */
}