RVector RMatrix :: operator * (const RVector& v) { integer incx = 1; integer m = attr_numberOfRows; integer n = attr_numberOfColumns; integer lda = attr_numberOfRows; RVector result (attr_numberOfRows); // dgemv ( correctChar(), &m, &n, (LongReal*) &(Complex::complexUnit), (LongReal*) (&_pelm[0]), // &lda, (LongReal*) &v(0), &incx, (LongReal*) &(Complex::complexNull), // (LongReal*)&result(0), &incx // ); TensorCalculus::Blas<double>::gemv ( *correctChar(), m, n, 1.0, (&_pelm[0]), lda, &v(0), incx, 0.0, &result(0), incx); clearTranspose(); return result; }
bool RMatrix::operator () (const LongInt& i, RVector& w, const LongInt& j, const RVector& v) { bool value = true; integer incx = 1; integer m = numberOfRows(); integer n = numberOfColumns(); integer lda = m; // dgemv ( correctChar(), &m, &n, (LongReal*) &(Complex::complexUnit), (LongReal*) (&_pelm[0]), // &lda, (LongReal*) &v(j), &incx, (LongReal*) &(Complex::complexUnit), // (LongReal*) &w(i), &incx // ); TensorCalculus::Blas<double>::gemv(*correctChar(), m, n, 1.0, &_pelm[0], lda, &v(j), incx, 1.0, &w(i), incx); clearTranspose(); return value; }
RMatrix& RMatrix::update(const LongReal& a, RMatrix& A, RMatrix& B, const LongReal& b, const LongInt& rowOffset, const LongInt& colOffset) { integer l = A.numberOfRows(); integer n = B.numberOfColumns(); integer m = A.numberOfColumns(); integer lda = l; integer ldb = m; if(A.isTranspose() || A.isTranspose()) { l = A.numberOfColumns(); m = A.numberOfRows(); lda = m; ldb = m; } if(B.isTranspose() || B.isTranspose()) { m = B.numberOfColumns(); n = B.numberOfRows(); ldb = n; } integer ldc = l; (*this).setDimension(l, n); // dgemm (A.correctChar(), B.correctChar(), &l, &n, &m, // (LongReal*) &a, (LongReal*) &A._pelm[rowOffset], &lda, // (LongReal*) &B._pelm[colOffset], &ldb, (LongReal*) &b, // (LongReal*) (&this->_pelm[0]), &ldc); TensorCalculus::Blas<double>::gemm (*A.correctChar(), *B.correctChar(), l, n, m, a, &A._pelm[rowOffset], lda, &B._pelm[colOffset], ldb, b, (&this->_pelm[0]), ldc); clearTranspose(); A.clearTranspose(); B.clearTranspose(); return (*this); }
void FloatMatrix4::clear() { clearElementCount(); clearTranspose(); clearValue(); }