yat/utility/expression/ScaledMatrix.h

Code
Comments
Other
Rev Date Author Line
3908 13 May 20 peter 1 #ifndef _theplu_yat_utility_expression_scaled_matrix
3908 13 May 20 peter 2 #define _theplu_yat_utility_expression_scaled_matrix
3908 13 May 20 peter 3
3908 13 May 20 peter 4 // $Id$
3908 13 May 20 peter 5
3908 13 May 20 peter 6 /*
3908 13 May 20 peter 7   Copyright (C) 2020 Peter Johansson
3908 13 May 20 peter 8
3908 13 May 20 peter 9   This file is part of the yat library, http://dev.thep.lu.se/yat
3908 13 May 20 peter 10
3908 13 May 20 peter 11   The yat library is free software; you can redistribute it and/or
3908 13 May 20 peter 12   modify it under the terms of the GNU General Public License as
3908 13 May 20 peter 13   published by the Free Software Foundation; either version 3 of the
3908 13 May 20 peter 14   License, or (at your option) any later version.
3908 13 May 20 peter 15
3908 13 May 20 peter 16   The yat library is distributed in the hope that it will be useful,
3908 13 May 20 peter 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
3908 13 May 20 peter 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3908 13 May 20 peter 19   General Public License for more details.
3908 13 May 20 peter 20
3908 13 May 20 peter 21   You should have received a copy of the GNU General Public License
3908 13 May 20 peter 22   along with yat. If not, see <http://www.gnu.org/licenses/>.
3908 13 May 20 peter 23 */
3908 13 May 20 peter 24
3908 13 May 20 peter 25 #include "yat/utility/BasicMatrix.h"
3908 13 May 20 peter 26 #include "yat/utility/BLAS_utility.h"
3908 13 May 20 peter 27 #include "yat/utility/MatrixExpression.h"
3908 13 May 20 peter 28
3908 13 May 20 peter 29 #include <gsl/gsl_matrix.h>
3908 13 May 20 peter 30
3908 13 May 20 peter 31 namespace theplu {
3908 13 May 20 peter 32 namespace yat {
3908 13 May 20 peter 33 namespace utility {
3908 13 May 20 peter 34 namespace expression {
3908 13 May 20 peter 35
3908 13 May 20 peter 36   /// \cond IGNORE_DOXYGEN
3908 13 May 20 peter 37
3908 13 May 20 peter 38   template<class T>
3908 13 May 20 peter 39   class ScaledMatrix : public MatrixExpression<ScaledMatrix<T> >
3908 13 May 20 peter 40   {
3908 13 May 20 peter 41   public:
3908 13 May 20 peter 42     ScaledMatrix(double factor, const BasicMatrix<T>& A)
3908 13 May 20 peter 43       : A_(A), factor_(factor) {}
3908 13 May 20 peter 44
3908 13 May 20 peter 45     size_t rows(void) const { return A_.rows(); }
3908 13 May 20 peter 46     size_t columns(void) const { return A_.columns(); }
3908 13 May 20 peter 47
3908 13 May 20 peter 48
3908 13 May 20 peter 49     double operator()(size_t i, size_t j) const
3908 13 May 20 peter 50     {
3908 13 May 20 peter 51       return factor_ * A_(i, j);
3908 13 May 20 peter 52     }
3908 13 May 20 peter 53
3908 13 May 20 peter 54
3908 13 May 20 peter 55     const T& base(void) const
3908 13 May 20 peter 56     {
3908 13 May 20 peter 57       return static_cast<const T&>(A_);
3908 13 May 20 peter 58     }
3908 13 May 20 peter 59
3908 13 May 20 peter 60
3908 13 May 20 peter 61     void calculate_matrix(gsl_matrix*& result) const
3908 13 May 20 peter 62     {
3908 13 May 20 peter 63       detail::copy(result, A_.gsl_matrix_p());
3908 13 May 20 peter 64       gsl_matrix_scale(result, factor_);
3908 13 May 20 peter 65     }
3908 13 May 20 peter 66
3908 13 May 20 peter 67
3908 13 May 20 peter 68     double factor(void) const
3908 13 May 20 peter 69     {
3908 13 May 20 peter 70       return factor_;
3908 13 May 20 peter 71     }
3908 13 May 20 peter 72
3908 13 May 20 peter 73   private:
3908 13 May 20 peter 74     const BasicMatrix<T>& A_;
3908 13 May 20 peter 75     double factor_;
3908 13 May 20 peter 76   };
3908 13 May 20 peter 77   /// \endcond
3908 13 May 20 peter 78
3908 13 May 20 peter 79 }}}} // of namespace expression, utility, yat, and theplu
3908 13 May 20 peter 80
3908 13 May 20 peter 81 #endif