16 #ifndef dealii__filtered_matrix_h 17 #define dealii__filtered_matrix_h 21 #include <deal.II/base/config.h> 22 #include <deal.II/base/smartpointer.h> 23 #include <deal.II/base/thread_management.h> 24 #include <deal.II/base/memory_consumption.h> 25 #include <deal.II/lac/pointer_matrix.h> 26 #include <deal.II/lac/vector_memory.h> 30 DEAL_II_NAMESPACE_OPEN
32 template <
typename number>
class Vector;
33 template <
class VectorType>
class FilteredMatrixBlock;
193 template <
typename VectorType>
214 const size_type
index);
220 size_type
row()
const;
230 double value()
const;
264 const size_type
index);
284 const Accessor *operator-> ()
const;
344 template <
typename MatrixType>
362 template <
typename MatrixType>
396 template <
class Constra
intList>
427 void vmult (VectorType &dst,
428 const VectorType &src)
const;
435 void Tvmult (VectorType &dst,
436 const VectorType &src)
const;
446 const VectorType &src)
const;
456 const VectorType &src)
const;
510 bool operator () (
const IndexValuePair &i1,
511 const IndexValuePair &i2)
const;
517 std_cxx11::shared_ptr<PointerMatrixBase<VectorType> >
matrix;
537 VectorType &out)
const;
543 friend class FilteredMatrixBlock<VectorType>;
552 template<
typename VectorType>
562 ExcIndexRange(index, 0, matrix->
constraints.size()));
567 template<
typename VectorType>
577 template<
typename VectorType>
587 template<
typename VectorType>
597 template<
typename VectorType>
609 template<
typename VectorType>
615 accessor(matrix, index)
620 template<
typename VectorType>
630 template <
typename number>
639 template <
typename number>
648 template <
typename number>
659 template <
typename number>
665 return ! (*
this == other);
672 template <
typename number>
681 template <
typename number>
690 template <
typename VectorType>
697 return (i1.first < i2.first);
702 template <
typename VectorType>
703 template <
typename MatrixType>
708 matrix.reset (new_pointer_matrix_base(m, VectorType()));
715 template <
typename VectorType>
722 template <
typename VectorType>
734 template <
typename VectorType>
735 template <
typename MatrixType>
745 template <
typename VectorType>
758 template <
typename VectorType>
769 template <
typename VectorType>
770 template <
class Constra
intList>
777 constraints.reserve (old_size + new_constraints.size());
779 new_constraints.begin(),
780 new_constraints.end());
791 template <
typename VectorType>
797 std::vector<IndexValuePair> empty;
803 template <
typename VectorType>
814 template <
typename VectorType>
825 template <
typename VectorType>
832 tmp_vector->reinit(v);
838 (*tmp_vector)(i->first) = -i->second;
850 v(i->first) = i->second;
855 template <
typename VectorType>
870 template <
typename VectorType>
874 VectorType &out)
const 883 out(i->first) = in(i->first);
889 template <
typename VectorType>
897 VectorType *tmp_vector = mem.
alloc();
900 tmp_vector->reinit(src,
true);
904 matrix->
vmult (dst, *tmp_vector);
905 mem.
free(tmp_vector);
909 matrix->
vmult (dst, src);
918 template <
typename VectorType>
926 VectorType *tmp_vector = mem.
alloc();
929 tmp_vector->reinit(src,
true);
933 matrix->
Tvmult (dst, *tmp_vector);
934 mem.
free(tmp_vector);
938 matrix->
Tvmult (dst, src);
947 template <
typename VectorType>
955 VectorType *tmp_vector = mem.
alloc();
958 tmp_vector->reinit(src,
true);
963 mem.
free(tmp_vector);
976 template <
typename VectorType>
984 VectorType *tmp_vector = mem.
alloc();
987 tmp_vector->reinit(src,
true);
992 mem.
free(tmp_vector);
1005 template <
typename VectorType>
1016 DEAL_II_NAMESPACE_CLOSE
const FilteredMatrix< VectorType > * matrix
const Accessor * operator->() const
const_iterator begin() const
std_cxx11::shared_ptr< PointerMatrixBase< VectorType > > matrix
types::global_dof_index size_type
void vmult_add(VectorType &dst, const VectorType &src) const
const_iterator & operator++()
void pre_filter(VectorType &v) const
std::vector< IndexValuePair >::const_iterator const_index_value_iterator
void post_filter(const VectorType &in, VectorType &out) const
std::vector< IndexValuePair > constraints
FilteredMatrix & operator=(const FilteredMatrix &fm)
Accessor(const FilteredMatrix< VectorType > *matrix, const size_type index)
void initialize(const MatrixType &m, bool expect_constrained_source=false)
void add_constraint(const size_type i, const double v)
#define DEAL_II_DEPRECATED
const Accessor & operator*() const
void vmult(VectorType &dst, const VectorType &src) const
unsigned int global_dof_index
void Tvmult(VectorType &dst, const VectorType &src) const
virtual VectorType * alloc()
#define Assert(cond, exc)
bool expect_constrained_source
bool operator()(const IndexValuePair &i1, const IndexValuePair &i2) const
bool operator!=(const const_iterator &) const
virtual void free(const VectorType *const)
bool operator==(const const_iterator &) const
void Tvmult_add(VectorType &dst, const VectorType &src) const
void add_constraints(const ConstraintList &new_constraints)
std_cxx11::enable_if< std_cxx11::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)
std::pair< size_type, double > IndexValuePair
const_iterator(const FilteredMatrix< VectorType > *matrix, const size_type index)
void apply_constraints(VectorType &v, const bool matrix_is_symmetric) const DEAL_II_DEPRECATED
#define AssertIsFinite(number)
std::size_t memory_consumption() const
const_iterator end() const