Esempio n. 1
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
 */
}
Esempio n. 2
0
void ATL_drefsyr2kUT
(
   const int                  N,
   const int                  K,
   const double               ALPHA,
   const double               * A,
   const int                  LDA,
   const double               * B,
   const int                  LDB,
   const double               BETA,
   double                     * C,
   const int                  LDC
)
{
/*
 * Purpose
 * =======
 *
 * ATL_drefsyr2kUT( ... )
 *
 * <=>
 *
 * ATL_drefsyr2k( AtlasUpper, AtlasTrans, ... )
 *
 * See ATL_drefsyr2k for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            t0, t1;
   int                        i, iali, ialj, ibli, iblj, icij, j, jai, jaj,
                              jbi, jbj, jcj, l;
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0,      jaj  = 0,   jbj  = 0,   jcj  = 0;
        j < N; j++, jaj += LDA, jbj += LDB, jcj += LDC )
   {
      for( i  = 0,      jai  = 0,   jbi  = 0,   icij  = jcj;
           i <= j; i++, jai += LDA, jbi += LDB, icij += 1 )
      {
         t0 = ATL_dZERO; t1 = ATL_dZERO;
         for( l = 0,      iali  = jai, ialj  = jaj, ibli  = jbi, iblj  = jbj;
              l < K; l++, iali += 1,   ialj += 1,   ibli += 1,   iblj += 1 )
         { t0 += A[iali] * B[iblj]; t1 += B[ibli] * A[ialj]; }
         Mdelscal( BETA, C[icij] ); C[icij] += ALPHA * t0 + ALPHA * t1;
      }
   }
/*
 * End of ATL_drefsyr2kUT
 */
}
Esempio n. 3
0
void ATL_drefsymmLL
(
   const int                  M,
   const int                  N,
   const double               ALPHA,
   const double               * A,
   const int                  LDA,
   const double               * B,
   const int                  LDB,
   const double               BETA,
   double                     * C,
   const int                  LDC
)
{
/*
 * Purpose
 * =======
 *
 * ATL_drefsymmLL( ... )
 *
 * <=>
 *
 * ATL_drefsymm( AtlasLeft, AtlasLower, ... )
 *
 * See ATL_drefsymm for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            t0, t1;
   int                        i, iaki, ibij, ibkj, icij, ickj, j, jai,
                              jbj, jcj, k;
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jbj = 0, jcj = 0; j < N; j++, jbj += LDB, jcj += LDC )
   {
      for( i = M-1,     jai  = (M-1)*LDA, ibij  = M-1+jbj, icij  = M-1+jcj;
           i >= 0; i--, jai -= LDA,       ibij -= 1,       icij -= 1 )
      {
         t0 = ALPHA * B[ibij]; t1 = ATL_dZERO;
         for( k = i+1, iaki  = i+1+jai, ibkj  = i+1+jbj, ickj  = i+1+jcj;
           k < M; k++, iaki += 1,       ibkj += 1,       ickj += 1 )
         { C[ickj] += t0   * A[iaki]; t1   += B[ibkj] * A[iaki]; }
         Mdelscal( BETA, C[icij] ); C[icij] += t0 * A[i+jai] + ALPHA * t1;
      }
   }
/*
 * End of ATL_drefsymmLL
 */
}
Esempio n. 4
0
void ATL_drefgpmvLT
(
   const int                  M,
   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_drefgpmvLT( ... )
 *
 * <=>
 *
 * ATL_drefgpmv( AtlasLower, AtlasTrans, ... )
 *
 * See ATL_drefgpmv for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            t0;
   int                        i, iaij, ix, j, jaj, jy, lda = LDA;
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jaj = 0, jy = 0; j < M; j++, jy += INCY )
   {
      t0 = ATL_dZERO;
      for( i = 0, iaij = jaj, ix = 0; i < N; i++, iaij += 1, ix += INCX )
      { t0 += A[iaij] * X[ix]; }
      Mdelscal( BETA, Y[jy] ); Y[jy] += ALPHA * t0;
      lda -= 1; jaj += lda;
   }
/*
 * End of ATL_drefgpmvLT
 */
}
Esempio n. 5
0
void ATL_drefgbmvT
(
   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_drefgbmvT( ... ) <=> ATL_drefgbmv( AtlasTrans, ... )
 *
 * See ATL_drefgbmv for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   register double            t0;
   int                        i, i0, i1, iaij, ix, j, jaj, jy, k, kx=0, ky=0;
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jaj = 0, jy = ky; j < M; j++, jaj += LDA, jy += INCY )
   {
      t0 = ATL_dZERO; 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+jaj, ix = kx; i <= i1;
           i++, iaij += 1, ix += INCX ) { t0 += A[iaij] * X[ix]; }
      Mdelscal( BETA, Y[jy] ); Y[jy] += ALPHA * t0;
      if( j >= KU ) kx += INCX;
   }
/*
 * End of ATL_drefgbmvT
 */
}
Esempio n. 6
0
void ATL_drefgemmTN
(
   const int                  M,
   const int                  N,
   const int                  K,
   const double               ALPHA,
   const double               * A,
   const int                  LDA,
   const double               * B,
   const int                  LDB,
   const double               BETA,
   double                     * C,
   const int                  LDC
)
{
/*
 * .. Local Variables ..
 */
   register double            t0;
   int                        i, iai, iail, iblj, icij, j, jbj, jcj, l;
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0, jbj = 0, jcj = 0; j < N; j++, jbj += LDB, jcj += LDC )
   {
      for( i = 0, icij = jcj, iai = 0; i < M; i++, icij += 1, iai += LDA )
      {
         t0 = ATL_dZERO;
         for( l = 0, iail = iai, iblj = jbj; l < K; l++, iail += 1, iblj += 1 )
         { t0 += A[iail] * B[iblj]; }
         Mdelscal( BETA, C[icij] ); C[icij] += ALPHA * t0;
      }
   }
/*
 * End of ATL_drefgemmTN
 */
}
Esempio n. 7
0
void ATL_zrefher2kLN
(
   const int                  N,
   const int                  K,
   const double               * ALPHA,
   const double               * A,
   const int                  LDA,
   const double               * B,
   const int                  LDB,
   const double               BETA,
   double                     * C,
   const int                  LDC
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zrefher2kLN( ... )
 *
 * <=>
 *
 * ATL_zrefher2k( AtlasLower, AtlasNoTrans, ... )
 *
 * See ATL_zrefher2k for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   double                     t0_i, t0_r, t1_i, t1_r;
   int                        i, iail, iaj, iajl, ibil, ibj, ibjl, icij,
                              j, jal, jbl, jcj, l, lda2 = ( LDA << 1 ),
                              ldb2 = ( LDB << 1 ), ldc2 = ( LDC << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0,      iaj  = 0, ibj  = 0, jcj  = 0;
        j < N; j++, iaj += 2, ibj += 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,  ibjl  = ibj,  jal   = 0,    jbl  = 0;
           l < K; l++, iajl += lda2, ibjl += ldb2, jal  += lda2, jbl  += ldb2 )
      {
         Mmul( ALPHA[0],  ALPHA[1], B[ibjl], -B[ibjl+1], t0_r, t0_i );
         Mmul( ALPHA[0], -ALPHA[1], A[iajl], -A[iajl+1], t1_r, t1_i );
         iail = ( j << 1 ) + jal; ibil = ( j << 1 ) + jbl,
         icij = ( j << 1 ) + jcj;
         Mset( C[icij] + A[iail] * t0_r - A[iail+1] * t0_i +
                         B[ibil] * t1_r - B[ibil+1] * t1_i,
               ATL_dZERO, C[icij], C[icij+1] );
         iail += 2; ibil += 2; icij += 2;
         for( i = j+1; i < N; i++, iail += 2, ibil += 2, icij += 2 )
         {
            Mmla( A[iail], A[iail+1], t0_r, t0_i, C[icij], C[icij+1] );
            Mmla( B[ibil], B[ibil+1], t1_r, t1_i, C[icij], C[icij+1] );
         }
      }
   }
/*
 * End of ATL_zrefher2kLN
 */
}
Esempio n. 8
0
void ATL_zrefher2kLC
(
   const int                  N,
   const int                  K,
   const double               * ALPHA,
   const double               * A,
   const int                  LDA,
   const double               * B,
   const int                  LDB,
   const double               BETA,
   double                     * C,
   const int                  LDC
)
{
/*
 * Purpose
 * =======
 *
 * ATL_zrefher2kLC( ... )
 *
 * <=>
 *
 * ATL_zrefher2k( AtlasLower, AtlasConjTrans, ... )
 *
 * See ATL_zrefher2k for details.
 *
 * ---------------------------------------------------------------------
 */
/*
 * .. Local Variables ..
 */
   double                     t0_i, t0_r, t1_i, t1_r;
   int                        i, iali, ialj, ibli, iblj, icij, j, jai, jaj,
                              jbi, jbj, jcj, l, lda2 = ( LDA << 1 ),
                              ldb2 = ( LDB << 1 ), ldc2 = ( LDC << 1 );
/* ..
 * .. Executable Statements ..
 *
 */
   for( j = 0,      jaj  = 0,    jbj  = 0,    jcj  = 0;
        j < N; j++, jaj += lda2, jbj += ldb2, jcj += ldc2 )
   {
      for( i = j,      jai  = j*lda2, jbi  = j*ldb2, icij  = (j << 1)+jcj;
           i < N; i++, jai += lda2,   jbi += ldb2,   icij += 2 )
      {
         Mset( ATL_dZERO, ATL_dZERO, t0_r, t0_i );
         Mset( ATL_dZERO, ATL_dZERO, t1_r, t1_i );
         for( l = 0,   iali  = jai, ialj  = jaj, ibli  = jbi, iblj  = jbj;
              l < K; l++, iali += 2,   ialj += 2,   ibli += 2,   iblj += 2 )
         {
            Mmla( A[iali], -A[iali+1], B[iblj], B[iblj+1], t0_r, t0_i );
            Mmla( B[ibli], -B[ibli+1], A[ialj], A[ialj+1], t1_r, t1_i );
         }
         if( i == j )
         {
            Mdelscal( BETA, C[icij] );
            Mset( C[icij] + ALPHA[0] * t0_r - ALPHA[1] * t0_i +
                            ALPHA[0] * t1_r + ALPHA[1] * t1_i,
                  ATL_dZERO, C[icij], C[icij+1] );
         }
         else
         {
            Mdelscal( BETA, C[icij  ] ); Mdelscal( BETA, C[icij+1] );
            Mmla( ALPHA[0],  ALPHA[1], t0_r, t0_i, C[icij], C[icij+1] );
            Mmla( ALPHA[0], -ALPHA[1], t1_r, t1_i, C[icij], C[icij+1] );
         }
      }
   }
/*
 * End of ATL_zrefher2kLC
 */
}