17 #ifndef __deal2__lapack_full_matrix_h
18 #define __deal2__lapack_full_matrix_h
21 #include <deal.II/base/config.h>
22 #include <deal.II/base/smartpointer.h>
23 #include <deal.II/base/table.h>
24 #include <deal.II/lac/lapack_support.h>
25 #include <deal.II/lac/vector_memory.h>
27 #include <deal.II/base/std_cxx1x/shared_ptr.h>
31 DEAL_II_NAMESPACE_OPEN
34 template<
typename number>
class Vector;
53 template <
typename number>
120 template <
typename number2>
144 template <
class MATRIX>
169 template<
class MATRIX>
175 const number factor = 1.,
176 const bool transpose =
false);
225 template <
class VECTOR>
226 void vmult(VECTOR &dst,
const VECTOR &src,
const bool adding =
false)
const;
235 template <
class VECTOR>
236 void vmult_add (VECTOR &w,
const VECTOR &v)
const;
257 template <
class VECTOR>
258 void Tvmult (VECTOR &w,
const VECTOR &v,
259 const bool adding=
false)
const;
270 template <
class VECTOR>
271 void Tvmult_add (VECTOR &w,
const VECTOR &v)
const;
275 const bool adding=
false)
const;
280 const bool adding=
false)
const;
308 const bool transposed)
const;
347 const bool left_eigenvectors =
false);
382 const number lower_bound,
383 const number upper_bound,
384 const number abs_accuracy,
431 const number lower_bound,
432 const number upper_bound,
433 const number abs_accuracy,
436 const int itype = 1);
477 const int itype = 1);
592 const unsigned int presicion=3,
593 const bool scientific =
true,
594 const unsigned int width = 0,
595 const char *zero_string =
" ",
596 const double denominator = 1.,
597 const double threshold = 0.)
const;
620 mutable std::vector<number>
work;
646 std::vector<number>
wr;
653 std::vector<number>
wi;
659 std::vector<number>
vl;
665 std::vector<number>
vr;
672 std_cxx1x::shared_ptr<LAPACKFullMatrix<number> >
svd_u;
679 std_cxx1x::shared_ptr<LAPACKFullMatrix<number> >
svd_vt;
690 template <
typename number>
712 template <
typename number>
713 template <
class MATRIX>
717 this->reinit (M.m(), M.n());
722 for (
size_type row = 0; row < M.m(); ++row)
724 const typename MATRIX::const_iterator end_row = M.end(row);
725 for (
typename MATRIX::const_iterator entry = M.begin(row);
726 entry != end_row; ++entry)
727 this->el(row, entry->column()) = entry->value();
730 state = LAPACKSupport::matrix;
735 template <
typename number>
736 template <
class MATRIX>
749 for (
size_type row = src_offset_i; row < M.m(); ++row)
751 const typename MATRIX::const_iterator end_row = M.end(row);
752 for (
typename MATRIX::const_iterator entry = M.begin(row);
753 entry != end_row; ++entry)
755 const size_type i = transpose ? entry->column() : row;
756 const size_type j = transpose ? row : entry->column();
758 const size_type dst_i=dst_offset_i+i-src_offset_i;
759 const size_type dst_j=dst_offset_j+j-src_offset_j;
760 if (dst_i<this->n_rows() && dst_j<this->n_cols())
761 (*this)(dst_i, dst_j) = factor * entry->value();
765 state = LAPACKSupport::matrix;
769 template <
typename number>
770 template <
class VECTOR>
778 template <
typename number>
779 template <
class VECTOR>
787 template <
typename number>
788 template <
class VECTOR>
796 template <
typename number>
797 template <
class VECTOR>
805 template <
typename number>
806 inline std::complex<number>
814 return std::complex<number>(wr[i], wi[i]);
818 template <
typename number>
822 Assert (state == LAPACKSupport::svd || state == LAPACKSupport::inverse_svd, LAPACKSupport::ExcState(state));
830 DEAL_II_NAMESPACE_CLOSE
std::vector< number > work
number singular_value(const size_type i) const
void Tvmult_add(VECTOR &w, const VECTOR &v) const
std_cxx1x::shared_ptr< LAPACKFullMatrix< number > > svd_u
LAPACKSupport::State state
#define AssertIndexRange(index, range)
LAPACKFullMatrix(const size_type n=0)
LAPACKSupport::Properties properties
std_cxx1x::shared_ptr< LAPACKFullMatrix< number > > svd_vt
void compute_eigenvalues_symmetric(const number lower_bound, const number upper_bound, const number abs_accuracy, Vector< number > &eigenvalues, FullMatrix< number > &eigenvectors)
void apply_lu_factorization(Vector< number > &v, const bool transposed) const
::ExceptionBase & ExcInvalidState()
types::global_dof_index size_type
void vmult_add(VECTOR &w, const VECTOR &v) const
unsigned int global_dof_index
#define Assert(cond, exc)
void print_formatted(std::ostream &out, const unsigned int presicion=3, const bool scientific=true, const unsigned int width=0, const char *zero_string=" ", const double denominator=1., const double threshold=0.) const
LAPACKFullMatrix< number > & operator=(const LAPACKFullMatrix< number > &)
SymmetricTensor< rank, dim, Number > transpose(const SymmetricTensor< rank, dim, Number > &t)
void vmult(VECTOR &dst, const VECTOR &src, const bool adding=false) const
std::vector< number > inv_work
void fill(const MATRIX &src, const size_type dst_offset_i=0, const size_type dst_offset_j=0, const size_type src_offset_i=0, const size_type src_offset_j=0, const number factor=1., const bool transpose=false)
::ExceptionBase & ExcIndexRange(int arg1, int arg2, int arg3)
void compute_lu_factorization()
void compute_generalized_eigenvalues_symmetric(LAPACKFullMatrix< number > &B, const number lower_bound, const number upper_bound, const number abs_accuracy, Vector< number > &eigenvalues, std::vector< Vector< number > > &eigenvectors, const int itype=1)
void copy_from(const MATRIX &)
void compute_inverse_svd(const double threshold=0.)
void compute_eigenvalues(const bool right_eigenvectors=false, const bool left_eigenvectors=false)
::ExceptionBase & ExcNotImplemented()
std::complex< number > eigenvalue(const size_type i) const
void Tvmult(VECTOR &w, const VECTOR &v, const bool adding=false) const
::ExceptionBase & ExcInternalError()