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 */ }
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 */ }
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 */ }
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 */ }
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 */ }
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 */ }
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 */ }
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 */ }