Ejemplo n.º 1
0
void ATL_crefherkLC
(
   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_crefherkLC( ... )
 *
 * <=>
 *
 * ATL_crefherk( AtlasLower, AtlasConjTrans, ... )
 *
 * See ATL_crefherk for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register float             t0_i, t0_r;
   int                        i, iali, ialj, icij, j, jai, jaj, jcj, l,
                              lda2 = ( LDA << 1 ), ldc2 = ( LDC << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jaj = 0, jcj = 0; j < N; j++, jaj += lda2, jcj += ldc2 )
   {
      jai   = j * lda2; icij  = ( j << 1 ) + jcj; t0_r = ATL_sZERO;

      for( l = 0, iali = jai, ialj = jaj; l < K; l++, iali += 2, ialj += 2 )
      { t0_r += A[iali] * A[ialj] + A[iali+1] * A[ialj+1]; }
      Mselscal( BETA, C[icij] );
      Mset( C[icij] + ALPHA * t0_r, ATL_sZERO, C[icij], C[icij+1] );
      icij += 2; jai += lda2;

      for( i = j+1; i < N; i++, jai += lda2, icij += 2 )
      {
         Mset( ATL_sZERO, ATL_sZERO, t0_r, t0_i );
         for( l = 0, iali = jai, ialj = jaj; l < K; l++, iali += 2, ialj += 2 )
         { Mmla( A[iali], -A[iali+1], A[ialj], A[ialj+1], t0_r, t0_i ); }
         Mselscal( BETA, C[icij  ] ); Mselscal( BETA, C[icij+1] );
         Mset( C[icij] + ALPHA * t0_r, C[icij+1] + ALPHA * t0_i,
               C[icij], C[icij+1] );
      }
   }
/*
 * End of ATL_crefherkLC
 */
}
Ejemplo n.º 2
0
void ATL_zrefhpmvL
(
    const int                  N,
    const double               * ALPHA,
    const double               * A,
    const int                  LDA,
    const double               * X,
    const int                  INCX,
    const double               * BETA,
    double                     * Y,
    const int                  INCY
)
{
    /*
     * Purpose
     * =======
     *
     * ATL_zrefhpmvL( ... )
     *
     * <=>
     *
     * ATL_zrefhpmv( AtlasLower, ... )
     *
     * See ATL_zrefhpmv for details.
     *
     * ---------------------------------------------------------------------
     */
    /*
     * .. Local Variables ..
     */
    register double            t0_i, t0_r, t1_i, t1_r;
    int                        i, iaij, ix, iy, j, jaj = 0, jx, jy,
                                                   lda2 = ( LDA << 1 ), incx2 = 2 * INCX,
                                                   incy2 = 2 * INCY;
    /* ..
     * .. Executable Statements ..
     *
     */
    Mzvscal( N, BETA, Y, INCY );

    for( j = 0, jx = 0, jy = 0; j < N; j++, jx += incx2, jy += incy2 )
    {
        Mmul( ALPHA[0], ALPHA[1], X[jx], X[jx+1], t0_r, t0_i );
        Mset( ATL_dZERO, ATL_dZERO, t1_r, t1_i );
        Mset( Y[jy] + A[jaj]*t0_r, Y[jy+1] + A[jaj]*t0_i, Y[jy], Y[jy+1] );
        for( i = j+1,    iaij  = jaj+2, ix  = jx+incx2, iy  = jy+incy2;
                i < N; i++, iaij += 2,     ix += incx2,    iy += incy2 )
        {
            Mmla( A[iaij],  A[iaij+1], t0_r, t0_i, Y[iy], Y[iy+1] );
            Mmla( A[iaij], -A[iaij+1], X[ix], X[ix+1], t1_r, t1_i );
        }
        Mmla( ALPHA[0], ALPHA[1], t1_r, t1_i, Y[jy], Y[jy+1] );
        jaj += lda2;
        lda2 -= 2;
    }
    /*
     * End of ATL_zrefhpmvL
     */
}
Ejemplo n.º 3
0
void ATL_zrefherkLN
(
   const int                  N,
   const int                  K,
   const double               ALPHA,
   const double               * A,
   const int                  LDA,
   const double               BETA,
   double                     * C,
   const int                  LDC
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zrefherkLN( ... )
 *
 * <=>
 *
 * ATL_zrefherk( AtlasLower, AtlasNoTrans, ... )
 *
 * See ATL_zrefherk for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            t0_i, t0_r;
   int                        i, iail, iaj, iajl, icij, j, jal, jcj, l,
                              lda2 = ( LDA << 1 ), ldc2 = ( LDC << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, iaj = 0, jcj  = 0; j < N; j++, iaj += 2, jcj += ldc2 )
   {
      icij       = ( j << 1 ) + jcj;
      Mdelscal( BETA, C[icij] ); C[icij+1] = ATL_dZERO;
      Mdvscal( ((N-j-1) << 1), BETA, C+icij+2, 1 );

      for( l = 0, iajl = iaj, jal = 0; l < K; l++, iajl += lda2, jal += lda2 )
      {
         Mset( ALPHA * A[iajl], -ALPHA * A[iajl+1], t0_r, t0_i );
         iail = ( j << 1 ) + jal; icij = ( j << 1 ) + jcj;
         Mset( C[icij] + t0_r * A[iail] - t0_i * A[iail+1],
               ATL_dZERO, C[icij], C[icij+1] );
         iail += 2; icij += 2;
         for( i = j+1; i < N; i++, iail += 2, icij += 2 )
         { Mmla( t0_r, t0_i, A[iail], A[iail+1], C[icij], C[icij+1] ); }
      }
   }
/*
 * End of ATL_zrefherkLN
 */
}
Ejemplo n.º 4
0
void ATL_crefherkUN
(
   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_crefherkUN( ... )
 *
 * <=>
 *
 * ATL_crefherk( AtlasUpper, AtlasNoTrans, ... )
 *
 * See ATL_crefherk for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register float             t0_i, t0_r;
   int                        i, iail, iaj, iajl, icij, j, jal, jcj, l,
                              lda2 = ( LDA << 1 ), ldc2 = ( LDC << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, iaj = 0, jcj  = 0; j < N; j++, iaj += 2, jcj += ldc2 )
   {
      Msvscal( (j << 1), BETA, C+jcj, 1 );
      icij       = ( j << 1 ) + jcj;
      Mselscal( BETA, C[icij] ); C[icij+1] = ATL_sZERO;

      for( l = 0, iajl = iaj, jal = 0; l < K; l++, iajl += lda2, jal += lda2 )
      {
         Mset( ALPHA * A[iajl], -ALPHA * A[iajl+1], t0_r, t0_i );
         for( i = 0, iail = jal, icij = jcj; i < j; i++, iail += 2, icij += 2 )
         { Mmla( t0_r, t0_i, A[iail], A[iail+1], C[icij], C[icij+1] ); }
         Mset( C[icij] + t0_r * A[iail] - t0_i * A[iail+1], ATL_sZERO,
               C[icij], C[icij+1] );
      }
   }
/*
 * End of ATL_crefherkUN
 */
}
Ejemplo n.º 5
0
void ATL_zreftbmvUTU
(
   const int                  N,
   const int                  K,
   const double               * A,
   const int                  LDA,
   double                     * X,
   const int                  INCX
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zreftbmvUTU( ... )
 *
 * <=>
 *
 * ATL_zreftbmv( AtlasUpper, AtlasTrans, AtlasUnit, ... )
 *
 * See ATL_zreftbmv for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            t0_i, t0_r;
   int                        i, i0, iaij, incx2 = 2 * INCX, ix, j, jaj,
                              jx, kx = 0, l, lda2 = ( LDA << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = N-1,     jaj  = (N-1)*lda2, jx  = kx+(N-1)*incx2;
        j >= 0; j--, jaj -= lda2,       jx -= incx2 )
   {
      Mset( ATL_dZERO, ATL_dZERO, t0_r, t0_i );
      l       = K - j;
      i0      = ( j - K > 0 ? j - K : 0 );
      for( i = i0,     iaij  = ((l+i0) << 1)+jaj, ix  = kx+i0*incx2;
           i < j; i++, iaij += 2,                 ix += incx2 )
      { Mmla( A[iaij], A[iaij+1], X[ix] , X[ix+1], t0_r, t0_i ); }
      Mset( t0_r + X[jx], t0_i + X[jx+1], t0_r, t0_i );
      Mset( t0_r, t0_i, X[jx], X[jx+1] );
   }
/*
 * End of ATL_zreftbmvUTU
 */
}
Ejemplo n.º 6
0
void ATL_zreftpsvUTN
(
    const int                  N,
    const double               * A,
    const int                  LDA,
    double                     * X,
    const int                  INCX
)
{
    /*
     * Purpose
     * =======
     *
     * ATL_zreftpsvUTN( ... )
     *
     * <=>
     *
     * ATL_zreftpsv( AtlasUpper, AtlasTrans, AtlasNonUnit, ... )
     *
     * See ATL_zreftpsv for details.
     *
     * ---------------------------------------------------------------------
     */
    /*
     * .. Local Variables ..
     */
    register double            t0_i, t0_r;
    int                        i, iaij, incx2 = 2 * INCX, ix, j, jaj, jx,
                                        lda2 = ( LDA << 1 );
    /* ..
     * .. Executable Statements ..
     *
     */
    for( j = 0, jaj = 0, jx  = 0; j < N; j++, jx += incx2 )
    {
        Mset( X[jx], X[jx+1], t0_r, t0_i );
        for( i = 0, iaij = jaj, ix = 0; i < j; i++, iaij += 2, ix += incx2 )
        {
            Mmls( A[iaij], A[iaij+1], X[ix], X[ix+1], t0_r, t0_i );
        }
        Mddiv( A[iaij], A[iaij+1], t0_r, t0_i );
        Mset( t0_r, t0_i, X[jx], X[jx+1] );
        jaj += lda2;
        lda2 += 2;
    }
    /*
     * End of ATL_zreftpsvUTN
     */
}
Ejemplo n.º 7
0
void ATL_creftbsvUTN
(
   const int                  N,
   const int                  K,
   const float                * A,
   const int                  LDA,
   float                      * X,
   const int                  INCX
)
{
/*
 * Purpose
 * =======
 *
 * ATL_creftbsvUTN( ... )
 *
 * <=>
 *
 * ATL_creftbsv( AtlasUpper, AtlasTrans, AtlasNonUnit, ... )
 *
 * See ATL_creftbsv for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register float             t0_i, t0_r;
   int                        i, i0, iaij, incx2 = 2 * INCX, ix, j, jaj,
                              jx, kx = 0, l, lda2 = ( LDA << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jaj = 0, jx = kx; j < N; j++, jaj += lda2, jx += incx2 )
   {
      Mset( X[jx], X[jx+1], t0_r, t0_i );
      l = K - j; i0 = ( j - K > 0 ? j - K : 0 );
      for( i = i0,     iaij  = ((l+i0) << 1)+jaj, ix  = kx;
           i < j; i++, iaij += 2,                 ix += incx2 )
      { Mmls( A[iaij], A[iaij+1], X[ix], X[ix+1], t0_r, t0_i ); }
      Msdiv( A[iaij], A[iaij+1], t0_r, t0_i );
      Mset( t0_r, t0_i, X[jx], X[jx+1] );
      if( j >= K ) { kx += incx2; }
   }
/*
 * End of ATL_creftbsvUTN
 */
}
Ejemplo n.º 8
0
void ATL_creftrsvLTU
(
    const int                  N,
    const float                * A,
    const int                  LDA,
    float                      * X,
    const int                  INCX
)
{
    /*
     * Purpose
     * =======
     *
     * ATL_creftrsvLTU( ... )
     *
     * <=>
     *
     * ATL_creftrsv( AtlasLower, AtlasTrans, AtlasUnit, ... )
     *
     * See ATL_creftrsv for details.
     *
     * ---------------------------------------------------------------------
     */
    /*
     * .. Local Variables ..
     */
    register float             t0_i, t0_r;
    int                        i, iaij, incx2 = 2 * INCX, ix, j, jaj, jx,
                                        ldap12 = ( ( LDA + 1 ) << 1 );
    /* ..
     * .. Executable Statements ..
     *
     */
    for( j = N-1,     jaj  = (N-1)*(ldap12), jx  = (N-1)*incx2;
            j >= 0; j--, jaj -= ldap12,         jx -= incx2 )
    {
        Mset( X[jx], X[jx+1], t0_r, t0_i );
        for( i = j+1,    iaij  = 2+jaj, ix  = jx + incx2;
                i < N; i++, iaij += 2,     ix += incx2 )
        {
            Mmls( A[iaij], A[iaij+1], X[ix], X[ix+1], t0_r, t0_i );
        }
        Mset( t0_r, t0_i, X[jx], X[jx+1] );
    }
    /*
     * End of ATL_creftrsvLTU
     */
}
Ejemplo n.º 9
0
void ATL_zreftbsvLHU
(
   const int                  N,
   const int                  K,
   const double               * A,
   const int                  LDA,
   double                     * X,
   const int                  INCX
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zreftbsvLHU( ... )
 *
 * <=>
 *
 * ATL_zreftbsv( AtlasLower, AtlasConjTrans, AtlasUnit, ... )
 *
 * See ATL_zreftbsv for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            t0_i, t0_r;
   int                        i, i1, iaij, incx2 = 2 * INCX, ix, j, jaj,
                              jx, kx = 0, lda2 = ( LDA << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = N-1,     jaj  = (N-1)*lda2, jx  = kx+(N-1)*incx2;
        j >= 0; j--, jaj -= lda2,       jx -= incx2 )
   {
      Mset( X[jx], X[jx+1], t0_r, t0_i );
      i1 = ( N - 1 > j + K ? j + K : N - 1 );
      for( i = j+1,      iaij  = 2+jaj, ix  = jx + incx2;
           i <= i1; i++, iaij += 2,     ix += incx2 )
      { Mmls( A[iaij], -A[iaij+1], X[ix], X[ix+1], t0_r, t0_i ); }
      Mset( t0_r, t0_i, X[jx], X[jx+1] );
   }
/*
 * End of ATL_zreftbsvLHU
 */
}
Ejemplo n.º 10
0
void ATL_crefhprL
(
   const int                  N,
   const float                ALPHA,
   const float                * X,
   const int                  INCX,
   float                      * A,
   const int                  LDA
)
{
/*
 * Purpose
 * =======
 *
 * ATL_crefhprL( ... )
 *
 * <=>
 *
 * ATL_crefhpr( AtlasLower, ... )
 *
 * See ATL_crefhpr for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register float             t0_i, t0_r;
   int                        i, jaj, iaij, ix, j, jx, lda2 = ( LDA << 1 ),
                              incx2 = 2 * INCX;
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jaj = 0, jx = 0; j < N; j++, jx += incx2 )
   {
      Mset( ALPHA * X[jx], -ALPHA * X[jx+1], t0_r, t0_i );
      Mset( A[jaj] + X[jx] * t0_r - X[jx+1] * t0_i, ATL_sZERO,
            A[jaj], A[jaj+1] );
      for( i = j+1, iaij = jaj+2, ix = jx+incx2; i < N;
           i++, iaij += 2, ix += incx2 )
      { Mmla( X[ix], X[ix+1], t0_r, t0_i, A[iaij], A[iaij+1] ); }
      jaj += lda2; lda2 -= 2;
   }
/*
 * End of ATL_crefhprL
 */
}
Ejemplo n.º 11
0
void ATL_zrefherL
(
   const int                  N,
   const double               ALPHA,
   const double               * X,
   const int                  INCX,
   double                     * A,
   const int                  LDA
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zrefherL( ... )
 *
 * <=>
 *
 * ATL_zrefher( AtlasLower, ... )
 *
 * See ATL_zrefher for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            t0_i, t0_r;
   int                        i, iaij, incx2 = 2 * INCX, ix, j, jaj, jx,
                              ldap12 = ( LDA + 1 ) << 1;
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jaj = 0, jx = 0; j < N; j++, jaj += ldap12, jx += incx2 )
   {
      Mset( ALPHA * X[jx], -ALPHA * X[jx+1], t0_r, t0_i );
      Mset( A[jaj] + X[jx] * t0_r - X[jx+1] * t0_i, ATL_dZERO,
            A[jaj], A[jaj+1] );
      for( i = j+1, iaij = jaj+2, ix = jx+incx2; i < N;
           i++, iaij += 2, ix += incx2 )
      { Mmla( X[ix], X[ix+1], t0_r, t0_i, A[iaij], A[iaij+1] ); }
   }
/*
 * End of ATL_zrefherL
 */
}
Ejemplo n.º 12
0
void ATL_creftpsvLHN
(
   const int                  N,
   const float                * A,
   const int                  LDA,
   float                      * X,
   const int                  INCX
)
{
/*
 * Purpose
 * =======
 *
 * ATL_creftpsvLHN( ... )
 *
 * <=>
 *
 * ATL_creftpsv( AtlasLower, AtlasConjTrans, AtlasNonUnit, ... )
 *
 * See ATL_creftpsv 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 );
      for( i = j+1,    iaij  = jaj+2, ix  = jx + incx2;
           i < N; i++, iaij += 2,     ix += incx2 )
      { Mmls( A[iaij], -A[iaij+1], X[ix], X[ix+1], t0_r, t0_i ); }
      Msdiv( A[jaj], -A[jaj+1], t0_r, t0_i );
      Mset( t0_r, t0_i, X[jx], X[jx+1] ); lda2 += 2; jaj -= lda2;
   }
/*
 * End of ATL_creftpsvLHN
 */
}
Ejemplo n.º 13
0
void ATL_creftbmvLTU
(
   const int                  N,
   const int                  K,
   const float                * A,
   const int                  LDA,
   float                      * X,
   const int                  INCX
)
{
/*
 * Purpose
 * =======
 *
 * ATL_creftbmvLTU( ... )
 *
 * <=>
 *
 * ATL_creftbmv( AtlasLower, AtlasTrans, AtlasUnit, ... )
 *
 * See ATL_creftbmv for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register float             t0_i, t0_r;
   int                        i, i1, iaij, incx2 = 2 * INCX, ix, j, jaj,
                              jx, kx = 0, lda2 = ( LDA << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jaj = 0, jx = kx; j < N; j++, jaj += lda2, jx += incx2 )
   {
      Mset( X[jx], X[jx+1], t0_r, t0_i );
      i1 = ( N - 1 > j + K ? j + K : N - 1 );
      for( i = j+1,      iaij  = 2+jaj, ix  = jx + incx2;
           i <= i1; i++, iaij += 2,     ix += incx2 )
      { Mmla( A[iaij], A[iaij+1], X[ix] , X[ix+1], t0_r, t0_i ); }
      Mset( t0_r, t0_i, X[jx], X[jx+1] );
   }
/*
 * End of ATL_creftbmvLTU
 */
}
Ejemplo n.º 14
0
void ATL_zreftrmvUHN
(
   const int                  N,
   const double               * A,
   const int                  LDA,
   double                     * X,
   const int                  INCX
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zreftrmvUHN( ... )
 *
 * <=>
 *
 * ATL_zreftrmv( AtlasUpper, AtlasConjTrans, AtlasNonUnit, ... )
 *
 * See ATL_zreftrmv for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            t0_i, t0_r;
   int                        i, iaij, incx2 = 2 * INCX, ix, j, jaj, jx,
                              lda2 = ( LDA << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = N-1,     jaj  = (N-1)*lda2, jx  = (N-1)*incx2;
        j >= 0; j--, jaj -= lda2,       jx -= incx2 )
   {
      Mset( ATL_dZERO, ATL_dZERO, t0_r, t0_i );
      for( i = 0, iaij = jaj, ix = 0; i < j; i++, iaij += 2, ix += incx2 )
      { Mmla( A[iaij], -A[iaij+1], X[ix] , X[ix+1], t0_r, t0_i ); }
      Mmla( A[iaij], -A[iaij+1], X[jx] , X[jx+1], t0_r, t0_i );
      Mset( t0_r, t0_i, X[jx], X[jx+1] );
   }
/*
 * End of ATL_zreftrmvUHN
 */
}
Ejemplo n.º 15
0
void ATL_creftpmvUHU
(
   const int                  N,
   const float                * A,
   const int                  LDA,
   float                      * X,
   const int                  INCX
)
{
/*
 * Purpose
 * =======
 *
 * ATL_creftpmvUHU( ... )
 *
 * <=>
 *
 * ATL_creftpmv( AtlasUpper, AtlasConjTrans, AtlasUnit, ... )
 *
 * 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 = (N-1)*(2*LDA+N-2), jx  = (N-1)*incx2;
        j >= 0; j--,                      jx -= incx2 )
   {
      Mset( ATL_sZERO, ATL_sZERO, t0_r, t0_i );
      for( i = 0, iaij = jaj, ix  = 0; i < j; i++, iaij += 2, ix += incx2 )
      { Mmla( A[iaij], -A[iaij+1], X[ix] , X[ix+1], t0_r, t0_i ); }
      Mset( t0_r + X[jx], t0_i + X[jx+1], t0_r, t0_i );
      Mset( t0_r, t0_i, X[jx], X[jx+1] ); lda2 -= 2; jaj -= lda2;
   }
/*
 * End of ATL_creftpmvUHU
 */
}
Ejemplo n.º 16
0
void ATL_zreftrmvLHU
(
   const int                  N,
   const double               * A,
   const int                  LDA,
   double                     * X,
   const int                  INCX
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zreftrmvLHU( ... )
 *
 * <=>
 *
 * ATL_zreftrmv( AtlasLower, AtlasConjTrans, AtlasUnit, ... )
 *
 * See ATL_zreftrmv for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            t0_i, t0_r;
   int                        i, iaij, incx2 = 2 * INCX, ix, j, jaj, jx,
                              ldap12 = ( ( LDA + 1 ) << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jaj = 0, jx = 0; j < N; j++, jaj += ldap12, jx += incx2 )
   {
      Mset( X[jx], X[jx+1], t0_r, t0_i );
      for( i = j+1,    iaij  = jaj+2, ix  = jx+incx2;
           i < N; i++, iaij += 2,     ix += incx2 )
      { Mmla( A[iaij], -A[iaij+1], X[ix] , X[ix+1], t0_r, t0_i ); }
      Mset( t0_r, t0_i, X[jx], X[jx+1] );
   }
/*
 * End of ATL_zreftrmvLHU
 */
}
Ejemplo n.º 17
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
     */
}
Ejemplo n.º 18
0
void ATL_zreftrmmRLTN
(
   const int                  M,
   const int                  N,
   const double               * ALPHA,
   const double               * A,
   const int                  LDA,
   double                     * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zreftrmmRLTN( ... )
 *
 * <=>
 *
 * ATL_zreftrmm
 * ( AtlasRight, AtlasLower, AtlasTrans, AtlasNonUnit, ... )
 *
 * See ATL_zreftrmm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   double                     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; Mdscl( A[i], A[i+1], t0_r, t0_i );
      for( i = 0, ibik = jbk; i < M; i++, ibik += 2 )
      { Mdscl( t0_r, t0_i, B[ibik], B[ibik+1] ); }
   }
/*
 * End of ATL_zreftrmmRLTN
 */
}
Ejemplo n.º 19
0
void ATL_zrefhpr2U
(
    const int                  N,
    const double               * ALPHA,
    const double               * X,
    const int                  INCX,
    const double               * Y,
    const int                  INCY,
    double                     * A,
    const int                  LDA
)
{
    /*
     * Purpose
     * =======
     *
     * ATL_zrefhpr2U( ... )
     *
     * <=>
     *
     * ATL_zrefhpr2( AtlasUpper, ... )
     *
     * See ATL_zrefhpr2 for details.
     *
     * ---------------------------------------------------------------------
     */
    /*
     * .. Local Variables ..
     */
    register double            t0_i, t0_r, t1_i, t1_r;
    int                        i, iaij, incx2 = 2 * INCX, incy2 = 2 * INCY,
                                        ix, iy, j, jaj, jx, jy, lda2 = ( LDA << 1 );
    /* ..
     * .. Executable Statements ..
     *
     */
    for( j = 0, jaj = 0, jx = 0, jy = 0; j < N; j++, jx += incx2, jy += incy2 )
    {
        Mmul( ALPHA[0],  ALPHA[1], Y[jy], -Y[jy+1], t0_r, t0_i );
        Mmul( ALPHA[0], -ALPHA[1], X[jx], -X[jx+1], t1_r, t1_i );
        for( i = 0,      iaij  = jaj, ix  = 0,     iy  = 0;
                i < j; i++, iaij += 2,   ix += incx2, iy += incy2 )
        {
            Mmla( X[ix], X[ix+1], t0_r, t0_i, A[iaij], A[iaij+1] );
            Mmla( Y[iy], Y[iy+1], t1_r, t1_i, A[iaij], A[iaij+1] );
        }
        Mset( A[iaij] + X[jx] * t0_r - X[jx+1] * t0_i +
              Y[jy] * t1_r - Y[jy+1] * t1_i, ATL_dZERO,
              A[iaij], A[iaij+1] );
        jaj += lda2;
        lda2 += 2;
    }
    /*
     * End of ATL_zrefhpr2U
     */
}
Ejemplo n.º 20
0
void ATL_crefhpr2L
(
   const int                  N,
   const float                * ALPHA,
   const float                * X,
   const int                  INCX,
   const float                * Y,
   const int                  INCY,
   float                      * A,
   const int                  LDA
)
{
/*
 * Purpose
 * =======
 *
 * ATL_crefhpr2L( ... )
 *
 * <=>
 *
 * ATL_crefhpr2( AtlasLower, ... )
 *
 * See ATL_crefhpr2 for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register float             t0_i, t0_r, t1_i, t1_r;
   int                        i, iaij, incx2 = 2 * INCX, incy2 = 2 * INCY,
                              ix, iy, j, jaj, jx, jy, lda2 = ( LDA << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jaj = 0, jx = 0, jy = 0; j < N; j++, jx += incx2, jy += incy2 )
   {
      Mmul( ALPHA[0],  ALPHA[1], Y[jy], -Y[jy+1], t0_r, t0_i );
      Mmul( ALPHA[0], -ALPHA[1], X[jx], -X[jx+1], t1_r, t1_i );
      Mset( A[jaj] + X[jx] * t0_r - X[jx+1] * t0_i +
                     Y[jy] * t1_r - Y[jy+1] * t1_i, ATL_sZERO,
            A[jaj], A[jaj+1] );
      for( i = j+1,    iaij  = jaj+2, ix  = jx + incx2, iy  = jy + incy2;
           i < N; i++, iaij += 2,     ix += incx2,      iy += incy2 )
      {
         Mmla( X[ix], X[ix+1], t0_r, t0_i, A[iaij], A[iaij+1] );
         Mmla( Y[iy], Y[iy+1], t1_r, t1_i, A[iaij], A[iaij+1] );
      }
      jaj += lda2; lda2 -= 2;
   }
/*
 * End of ATL_crefhpr2L
 */
}
Ejemplo n.º 21
0
void ATL_zreftrsmRLCN
(
   const int                  M,
   const int                  N,
   const double               * ALPHA,
   const double               * A,
   const int                  LDA,
   double                     * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zreftrsmRLCN( ... )
 *
 * <=>
 *
 * ATL_zreftrsm
 * ( AtlasRight, AtlasLower, AtlasConjTrans, AtlasNonUnit, ... )
 *
 * See ATL_zreftrsm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            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( i = 0, ibik = jbk; i < M; i++, ibik += 2 )
      { j = ( k << 1 ) + jak; Mddiv( A[j], -A[j+1], B[ibik], B[ibik+1] ); }
      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 )
      { Mdscl( ALPHA[0], ALPHA[1], B[ibik], B[ibik+1] ); }
   }
/*
 * End of ATL_zreftrsmRLCN
 */
}
Ejemplo n.º 22
0
void ATL_creftrsmLLTU
(
    const int                  M,
    const int                  N,
    const float                * ALPHA,
    const float                * A,
    const int                  LDA,
    float                      * B,
    const int                  LDB
)
{
    /*
     * Purpose
     * =======
     *
     * ATL_creftrsmLLTU( ... )
     *
     * <=>
     *
     * ATL_creftrsm
     * ( AtlasLeft, AtlasLower, AtlasTrans, AtlasUnit, ... )
     *
     * See ATL_creftrsm for details.
     *
     * ---------------------------------------------------------------------
     */
    /*
     * .. Local Variables ..
     */
    register 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 )
        {
            Mmul( ALPHA[0], ALPHA[1], B[ibij], B[ibij+1], t0_r, t0_i );
            for( k = i+1, iaki  = ((i+1) << 1)+jai, ibkj  = ((i+1) << 1)+jbj;
                    k < M; k++, iaki += 2, ibkj += 2 )
            {
                Mmls( A[iaki], A[iaki+1], B[ibkj], B[ibkj+1], t0_r, t0_i );
            }
            Mset( t0_r, t0_i, B[ibij], B[ibij+1] );
        }
    }
    /*
     * End of ATL_creftrsmLLTU
     */
}
Ejemplo n.º 23
0
void ATL_zreftrmmRUNN
(
   const int                  M,
   const int                  N,
   const double               * ALPHA,
   const double               * A,
   const int                  LDA,
   double                     * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zreftrmmRUNN( ... )
 *
 * <=>
 *
 * ATL_zreftrmm
 * ( AtlasRight, AtlasUpper, AtlasNoTrans, AtlasNonUnit, ... )
 *
 * See ATL_zreftrmm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   double                     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; Mdscl( A[i], A[i+1], t0_r, t0_i );
      for( i = 0, ibij = jbj; i < M; i++, ibij += 2 )
      { Mdscl( 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_zreftrmmRUNN
 */
}
Ejemplo n.º 24
0
void ATL_creftrmmRLNN
(
   const int                  M,
   const int                  N,
   const float                * ALPHA,
   const float                * A,
   const int                  LDA,
   float                      * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_creftrmmRLNN( ... )
 *
 * <=>
 *
 * ATL_creftrmm
 * ( AtlasRight, AtlasLower, 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 = 0, jaj  = 0, jbj  = 0; j < N; 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 = j+1,    iakj  = ((j+1)<<1)+jaj, jbk  = (j+1)*ldb2;
           k < N; 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_creftrmmRLNN
 */
}
Ejemplo n.º 25
0
void ATL_zrefgbmvT
(
   const int                  M,
   const int                  N,
   const int                  KL,
   const int                  KU,
   const double               * ALPHA,
   const double               * A,
   const int                  LDA,
   const double               * X,
   const int                  INCX,
   const double               * BETA,
   double                     * Y,
   const int                  INCY
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zrefgbmvT( ... ) <=> ATL_zrefgbmv( AtlasTrans, ... )
 *
 * See ATL_zrefgbmv for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            t0_i, t0_r;
   int                        i, i0, i1, iaij, ix, j, jaj, jy, k, kx=0, ky=0;
   int                        incx2 = 2 * INCX, incy2 = 2 * INCY,
                              lda2 = ( LDA << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jaj = 0, jy = ky; j < M; j++, jaj += lda2, jy += incy2 )
   {
      Mset( ATL_dZERO, ATL_dZERO, t0_r, t0_i );
      k = KU - j; i0 = ( j - KU > 0 ? j - KU : 0 );
      i1 = ( N - 1 > j + KL ? j + KL : N - 1 );

      for( i  = i0,      iaij  = ((k+i0) << 1)+jaj, ix  = kx;
           i <= i1; i++, iaij += 2,                 ix += incx2 )
      { Mmla( A[iaij],  A[iaij+1], X[ix], X[ix+1], t0_r, t0_i ); }
      Mzelscal( BETA[0], BETA[1], Y[jy], Y[jy+1] );
      Mmla( ALPHA[0], ALPHA[1], t0_r, t0_i, Y[jy], Y[jy+1] );
      if( j >= KU ) kx += incx2;
   }
/*
 * End of ATL_zrefgbmvT
 */
}
Ejemplo n.º 26
0
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
 */
}
Ejemplo n.º 27
0
void ATL_zrefsyrkLT
(
   const int                  N,
   const int                  K,
   const double               * ALPHA,
   const double               * A,
   const int                  LDA,
   const double               * BETA,
   double                     * C,
   const int                  LDC
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zrefsyrkLT( ... )
 *
 * <=>
 *
 * ATL_zrefsyrk( AtlasLower, AtlasTrans, ... )
 *
 * See ATL_zrefsyrk for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            t0_i, t0_r;
   int                        i, iali, ialj, icij, j, jai, jaj, jcj, l,
                              lda2 = ( LDA << 1 ), ldc2 = ( LDC << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jaj = 0, jcj = 0; j < N; j++, jaj += lda2, jcj += ldc2 )
   {
      for( i = j,      jai  = j*lda2, icij  = (j << 1)+jcj;
           i < N; i++, jai += lda2,   icij += 2 )
      {
         Mset( ATL_dZERO, ATL_dZERO, t0_r, t0_i );
         for( l = 0, iali = jai, ialj = jaj; l < K; l++, iali += 2, ialj += 2 )
         { Mmla( A[iali], A[iali+1], A[ialj], A[ialj+1], t0_r, t0_i ); }
         Mzelscal( BETA[0], BETA[1], C[icij], C[icij+1] );
         Mmla( ALPHA[0], ALPHA[1], t0_r, t0_i, C[icij], C[icij+1] );
      }
   }
/*
 * End of ATL_zrefsyrkLT
 */
}
Ejemplo n.º 28
0
void ATL_zreftrmmLLNU
(
   const int                  M,
   const int                  N,
   const double               * ALPHA,
   const double               * A,
   const int                  LDA,
   double                     * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zreftrmmLLNU( ... )
 *
 * <=>
 *
 * ATL_zreftrmm
 * ( AtlasLeft, AtlasLower, AtlasNoTrans, AtlasUnit, ... )
 *
 * See ATL_zreftrmm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   double                     t0_i, t0_r;
   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( k = M-1,     jak  = (M-1)*lda2, ibkj  = ((M-1)<<1)+jbj;
           k >= 0; k--, jak -= lda2,       ibkj -= 2 )
      {
         Mmul( ALPHA[0], ALPHA[1], B[ibkj], B[ibkj+1], t0_r, t0_i );
         Mset( t0_r, t0_i, B[ibkj], B[ibkj+1] );
         for( i = k+1, iaik  = ((k+1)<<1)+jak, ibij = ((k+1)<<1)+jbj;
           i < M; i++, iaik += 2,              ibij += 2 )
         { Mmla( t0_r, t0_i, A[iaik], A[iaik+1], B[ibij], B[ibij+1] ); }
      }
   }
/*
 * End of ATL_zreftrmmLLNU
 */
}
Ejemplo n.º 29
0
void ATL_zreftrsmRUTU
(
   const int                  M,
   const int                  N,
   const double               * ALPHA,
   const double               * A,
   const int                  LDA,
   double                     * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zreftrsmRUTU( ... )
 *
 * <=>
 *
 * ATL_zreftrsm
 * ( AtlasRight, AtlasUpper, AtlasTrans, AtlasUnit, ... )
 *
 * See ATL_zreftrsm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            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 = 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 )
      { Mdscl( ALPHA[0], ALPHA[1], B[ibik], B[ibik+1] ); }
   }
/*
 * End of ATL_zreftrsmRUTU
 */
}
Ejemplo n.º 30
0
void ATL_zreftrmmLLCU
(
   const int                  M,
   const int                  N,
   const double               * ALPHA,
   const double               * A,
   const int                  LDA,
   double                     * B,
   const int                  LDB
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zreftrmmLLCU( ... )
 *
 * <=>
 *
 * ATL_zreftrmm
 * ( AtlasLeft, AtlasLower, AtlasConjTrans, AtlasUnit, ... )
 *
 * See ATL_zreftrmm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   double                     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 = 0, jai = 0, ibij = jbj; i < M; i++, jai += lda2, ibij += 2 )
      {
         Mset( B[ibij], B[ibij+1], t0_r, t0_i );
         for( k = i+1, iaki  = ((i+1)<<1)+jai, ibkj  = ((i+1)<<1)+jbj;
           k < M; 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_zreftrmmLLCU
 */
}