diff --git a/include/Geometry/tensor.h b/include/Geometry/tensor.h index b45659548e93d5b2fd3ea275f0a541596a5497ea..21a0cad09d2cf67bc0c8865eef8fd5fb03b05e89 100644 --- a/include/Geometry/tensor.h +++ b/include/Geometry/tensor.h @@ -107,6 +107,15 @@ class Tensor */ void identity() ; + /** + * \brief Modifier: set constant values + * + * Sets all values to r + * + * \param r the constant value + */ + void setConst(const REAL& r) ; + /** * \brief Modifier: copy Tensor * diff --git a/include/Geometry/tensor.hpp b/include/Geometry/tensor.hpp index c082df83752993e3ec7bbb05065ed7bca5c5e63f..266ce1970f152dadeef84ce5c0b2c12f02186d0d 100644 --- a/include/Geometry/tensor.hpp +++ b/include/Geometry/tensor.hpp @@ -39,6 +39,9 @@ Tensor::Tensor(const Tensor& T): m_order(T.m_order) { m_data = new REAL[T.nbElem()] ; + + for (unsigned int i = 0 ; i < T.nbElem() ; ++i) + m_data[i] = T[i] ; } template @@ -65,24 +68,37 @@ void Tensor::identity() template void -Tensor::operator=(const Tensor& T) +Tensor::zero() { - m_order = T.m_order ; - m_data = new REAL[T.nbElem()] ; - for (unsigned int i = 0 ; i < T.nbElem() ; ++i) - m_data[i] = T[i] ; + for (unsigned int i = 0 ; i < (unsigned int)pow(SIZE,m_order) ; ++i) + { + m_data[i] = 0 ; + } } template void -Tensor::zero() +Tensor::setConst(const REAL& r) { - for (unsigned int i = 0 ; i < (unsigned int)pow(SIZE,m_order) ; ++i) + for (unsigned int i = 0 ; i < nbElem() ; ++i) { - m_data[i] = 0 ; + m_data[i] = r ; } } +template +void +Tensor::operator=(const Tensor& T) +{ + m_order = T.m_order ; + + delete(m_data) ; + m_data = new REAL[T.nbElem()] ; + + for (unsigned int i = 0 ; i < T.nbElem() ; ++i) + m_data[i] = T[i] ; +} + template const REAL& Tensor::operator()(std::vector p) const @@ -153,13 +169,13 @@ template bool Tensor::incremIndex(std::vector& p) { - unsigned int i = 0 ; - while (i < p.size()) + int i = p.size() - 1 ; + while (i >= 0) { p[i] = (p[i] + 1) % SIZE ; if (p[i] != 0) // if no overflow return true ; - ++i ; + --i ; } return false ; }