MercuryDPM  Trunk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SmallMatrix.h File Reference
#include "GeneralDefine.h"
#include "Logger.h"
#include "SmallVector.h"
#include "SmallMatrix_impl.h"

Go to the source code of this file.

Classes

class  SmallMatrix< numberOfRows, numberOfColumns >
 Data type for small dense matrix. More...
 

Functions

template<unsigned int numberOfRows, unsigned int numberOfColumns>
std::ostream & operator<< (std::ostream &os, const SmallMatrix< numberOfRows, numberOfColumns > &A)
 Writes nicely formatted entries of the Matrix A to the stream os. More...
 
template<unsigned int numberOfRows, unsigned int numberOfColumns>
SmallMatrix< numberOfRows,
numberOfColumns > 
operator* (const Mdouble d, const SmallMatrix< numberOfRows, numberOfColumns > &mat)
 Multiplies a matrix with a Mdouble. More...
 
template<unsigned int numberOfRows, unsigned int numberOfColumns>
SmallVector< numberOfColumns > operator* (SmallVector< numberOfRows > &vec, SmallMatrix< numberOfRows, numberOfColumns > &mat)
 Multiplies a matrix with a vector. More...
 

Function Documentation

template<unsigned int numberOfRows, unsigned int numberOfColumns>
SmallMatrix<numberOfRows, numberOfColumns> operator* ( const Mdouble  d,
const SmallMatrix< numberOfRows, numberOfColumns > &  mat 
)

Multiplies a matrix with a Mdouble.

Definition at line 380 of file SmallMatrix.h.

381 {
382  return mat * d;
383 }
template<unsigned int numberOfRows, unsigned int numberOfColumns>
SmallVector<numberOfColumns> operator* ( SmallVector< numberOfRows > &  vec,
SmallMatrix< numberOfRows, numberOfColumns > &  mat 
)

Multiplies a matrix with a vector.

Definition at line 357 of file SmallMatrix_impl.h.

References SmallVector< numberOfRows >::data(), SmallMatrix< numberOfRows, numberOfColumns >::data(), DEBUG, dgemv_(), logger, SmallVector< numberOfRows >::size(), and WARN.

358 {
359  if (numberOfColumns == 0)
360  {
361  logger(WARN, "Trying to multiply a vector with a matrix without any columns.");
363  }
364  int nr = numberOfRows;
365  int nc = numberOfColumns;
366 
367  int i_one = 1;
368  double d_one = 1.0;
369  double d_zero = 0.0;
370 
372 
373  logger(DEBUG, "Matrix size: % x % \n Vector size: %", nr, nc, vec.size());
374 
375  dgemv_("T", &nr, &nc, &d_one, mat.data(), &nr, vec.data(), &i_one, &d_zero, result.data(), &i_one);
376  return result;
377 }
Mdouble * data()
Definition: SmallMatrix.h:351
LL< Log::DEBUG > DEBUG
Debug information.
Definition: Logger.cc:58
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
Implementation of a 3D vector (by Vitaliy).
Definition: SmallVector.h:61
const Mdouble * data() const
Definition: SmallVector.h:238
LL< Log::WARN > WARN
Warning log level.
Definition: Logger.cc:54
unsigned int size() const
Definition: SmallVector.h:233
void dgemv_(const char *trans, int *m, int *n, double *alpha, double *A, int *LDA, double *x, int *incx, double *beta, double *y, int *incy)
This does matrix times vector and is from blas level 2.
template<unsigned int numberOfRows, unsigned int numberOfColumns>
std::ostream& operator<< ( std::ostream &  os,
const SmallMatrix< numberOfRows, numberOfColumns > &  A 
)

Writes nicely formatted entries of the Matrix A to the stream os.

Definition at line 368 of file SmallMatrix.h.

References A, and constants::i.

369 {
370  for (unsigned int i = 0; i < numberOfRows; ++i)
371  {
372  os << A.getRow(i) << std::endl;
373  }
374  return os;
375 }
const std::complex< Mdouble > i
Definition: ExtendedMath.h:50
SmallVector< numberOfColumns > getRow(unsigned int i) const
get the i^th row
Definition: SmallMatrix.h:311