Commit 4bad0670 by graeser

### Merge branch 'feature/symmetric-matrix' into 'master'

Implementation of symmetric matrices

See merge request !46
parents 23b1e546 5b4326e3
Pipeline #16232 canceled with stage
 #ifndef DUNE_FUFEM_SYMMETRICMATRIX_HH #define DUNE_FUFEM_SYMMETRICMATRIX_HH #include namespace Dune { /** \brief A class implementing a symmetric matrix with compile-time size * * A \f$dim\times dim \f$ matrix is stored internally as a Dune::FieldVector * The components are assumed to be \f$[ E(1,1),\ E(2,1),\ E(2,2),\ E(3,1),\ E(3,2),\ E(3,3) ]\f$ * and analogous for other dimensions * \tparam dim number of lines/columns of the matrix */ template class SymmetricMatrix { public: /** \brief The type used for scalars */ typedef T field_type; /** \brief Default constructor, creates uninitialized matrix */ SymmetricMatrix() {} /** \brief Construct from raw memory */ template SymmetricMatrix(Iterator it) { for (size_t i=0; i& operator=(const T& s) { data_ = s; return *this; } SymmetricMatrix& operator*=(const T& s) { data_ *= s; return *this; } /** \brief Matrix style random read/write access to components * \param i line index * \param j column index * \note You need to know what you are doing: You can only access the lower * left triangular submatrix using this methods. It requires i>=j. */ T& operator() (int i, int j) { if( i >= j ) return data_[i*(i+1)/2+j]; else return data_[j*(j+1)/2+i]; } /** \brief Matrix style random read access to components * \param i line index * \param j column index * \note You need to know what you are doing: You can only access the lower * left triangular submatrix using this methods. It requires i>=j. */ const T& operator() (int i, int j) const { if( i >= j ) return data_[i*(i+1)/2+j]; else return data_[j*(j+1)/2+i]; } T energyScalarProduct (const FieldVector& v1, const FieldVector& v2) const { T result = 0; for (size_t i=0; i& other) { data_.axpy(a,other.data_); } Dune::FieldVector data() const { return data_; } Dune::FieldVector& data() { return data_; } private: Dune::FieldVector data_; }; } #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment