10#include "blas/syr2.hh"
65template <
typename TA,
typename TX,
typename TY>
70 blas::scalar_type<TA, TX, TY> alpha,
71 TX
const *x, int64_t incx,
72 TY
const *y, int64_t incy,
75 typedef blas::scalar_type<TA, TX, TY> scalar_t;
77 #define A(i_, j_) A[ (i_) + (j_)*lda ]
80 const scalar_t zero = 0;
83 blas_error_if( layout != Layout::ColMajor &&
84 layout != Layout::RowMajor );
85 blas_error_if( uplo != Uplo::Lower &&
86 uplo != Uplo::Upper );
87 blas_error_if( n < 0 );
88 blas_error_if( incx == 0 );
89 blas_error_if( incy == 0 );
90 blas_error_if( lda < n );
93 if (n == 0 || alpha == zero)
97 if (layout == Layout::RowMajor) {
98 uplo = (uplo == Uplo::Lower ? Uplo::Upper : Uplo::Lower);
101 int64_t kx = (incx > 0 ? 0 : (-n + 1)*incx);
102 int64_t ky = (incy > 0 ? 0 : (-n + 1)*incy);
103 if (uplo == Uplo::Upper) {
104 if (incx == 1 && incy == 1) {
106 for (int64_t j = 0; j < n; ++j) {
108 scalar_t tmp1 = alpha * conj( y[j] );
109 scalar_t tmp2 = conj( alpha * x[j] );
110 for (int64_t i = 0; i <= j-1; ++i) {
111 A(i, j) += x[i]*tmp1 + y[i]*tmp2;
113 A(j, j) = real( A(j, j) ) + real( x[j]*tmp1 + y[j]*tmp2 );
120 for (int64_t j = 0; j < n; ++j) {
121 scalar_t tmp1 = alpha * conj( y[jy] );
122 scalar_t tmp2 = conj( alpha * x[jx] );
125 for (int64_t i = 0; i <= j-1; ++i) {
126 A(i, j) += x[ix]*tmp1 + y[iy]*tmp2;
130 A(j, j) = real( A(j, j) ) + real( x[jx]*tmp1 + y[jy]*tmp2 );
138 if (incx == 1 && incy == 1) {
140 for (int64_t j = 0; j < n; ++j) {
141 scalar_t tmp1 = alpha * conj( y[j] );
142 scalar_t tmp2 = conj( alpha * x[j] );
143 A(j, j) = real( A(j, j) ) + real( x[j]*tmp1 + y[j]*tmp2 );
144 for (int64_t i = j+1; i < n; ++i) {
145 A(i, j) += x[i]*tmp1 + y[i]*tmp2;
153 for (int64_t j = 0; j < n; ++j) {
154 scalar_t tmp1 = alpha * conj( y[jy] );
155 scalar_t tmp2 = conj( alpha * x[jx] );
156 A(j, j) = real( A(j, j) ) + real( x[jx]*tmp1 + y[jy]*tmp2 );
159 for (int64_t i = j+1; i < n; ++i) {
162 A(i, j) += x[ix]*tmp1 + y[iy]*tmp2;
void her2(blas::Layout layout, blas::Uplo uplo, int64_t n, blas::scalar_type< TA, TX, TY > alpha, TX const *x, int64_t incx, TY const *y, int64_t incy, TA *A, int64_t lda)
Hermitian matrix rank-2 update:
Definition her2.hh:66