16#ifndef dealii_packaged_operation_h
17#define dealii_packaged_operation_h
31template <
typename Number>
33template <
typename Range,
typename Domain,
typename Payload>
35template <
typename Range = Vector<
double>>
104template <
typename Range>
115 apply = [](Range &) {
118 "Uninitialized PackagedOperation<Range>::apply called"));
124 "Uninitialized PackagedOperation<Range>::apply_add called"));
129 ExcMessage(
"Uninitialized PackagedOperation<Range>::reinit_vector "
171 apply = [&
u](Range &v) { v =
u; };
188 operator Range()
const
252 *
this = *
this * number;
261 std::function<void(Range &v)>
apply;
293template <
typename Range>
326template <
typename Range>
362template <
typename Range>
365 typename Range::value_type number)
403template <
typename Range>
408 return comp * number;
419template <
typename Range>
434template <
typename Range>
449template <
typename Range>
466template <
typename Range>
483 namespace PackagedOperationImplementation
489 template <
typename T>
492 template <
typename C>
493 static std::false_type
496 template <
typename C>
497 static std::true_type
499 decltype(&C::operator-=),
500 decltype(&C::l2_norm));
528 typename = std::enable_if_t<internal::PackagedOperationImplementation::
529 has_vector_interface<Range>::type::value>>
573 typename = std::enable_if_t<internal::PackagedOperationImplementation::
574 has_vector_interface<Range>::type::value>>
617 typename = std::enable_if_t<internal::PackagedOperationImplementation::
618 has_vector_interface<Range>::type::value>>
642 typename = std::enable_if_t<internal::PackagedOperationImplementation::
643 has_vector_interface<Range>::type::value>>
667template <
typename Range,
typename Domain,
typename Payload>
673 return_comp.reinit_vector = op.reinit_range_vector;
680 return_comp.apply_add = [op, &
u](Range &v) { op.vmult_add(v,
u); };
702template <
typename Range,
typename Domain,
typename Payload>
708 return_comp.reinit_vector = op.reinit_domain_vector;
713 return_comp.apply = [op, &
u](Domain &v) { op.Tvmult(v,
u); };
715 return_comp.apply_add = [op, &
u](Domain &v) { op.Tvmult_add(v,
u); };
729template <
typename Range,
typename Domain,
typename Payload>
736 return_comp.reinit_vector = op.reinit_range_vector;
745 op.reinit_domain_vector(*i,
true);
755 op.reinit_range_vector(*i,
true);
773template <
typename Range,
typename Domain,
typename Payload>
780 return_comp.reinit_vector = op.reinit_domain_vector;
789 op.reinit_range_vector(*i,
true);
799 op.reinit_range_vector(*i,
true);
802 op.Tvmult_add(v, *i);
void reinit(value_type *starting_element, const std::size_t n_elements)
std::function< void(Range &v, bool omit_zeroing_entries)> reinit_vector
PackagedOperation< Range > & operator*=(typename Range::value_type number)
PackagedOperation< Range > & operator=(const Range &u)
PackagedOperation(const Range &u)
std::function< void(Range &v)> apply
PackagedOperation< Range > & operator=(const PackagedOperation< Range > &)=default
PackagedOperation< Range > & operator+=(const PackagedOperation< Range > &second_comp)
std::function< void(Range &v)> apply_add
PackagedOperation< Range > & operator-=(const Range &offset)
PackagedOperation(const PackagedOperation< Range > &)=default
PackagedOperation< Range > & operator+=(const Range &offset)
PackagedOperation< Range > & operator-=(const PackagedOperation< Range > &second_comp)
static std::true_type test(decltype(&C::operator+=), decltype(&C::operator-=), decltype(&C::l2_norm))
static std::false_type test(...)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
static ::ExceptionBase & ExcMessage(std::string arg1)
PackagedOperation< Range > operator*(const LinearOperator< Range, Domain, Payload > &op, const PackagedOperation< Domain > &comp)
PackagedOperation< Range > operator-(const PackagedOperation< Range > &comp, const Range &offset)
PackagedOperation< Domain > operator*(const PackagedOperation< Range > &comp, const LinearOperator< Range, Domain, Payload > &op)
PackagedOperation< Range > operator-(const Range &u, const Range &v)
PackagedOperation< Range > operator*(const LinearOperator< Range, Domain, Payload > &op, const Domain &u)
PackagedOperation< Domain > operator*(const Range &u, const LinearOperator< Range, Domain, Payload > &op)
PackagedOperation< Range > operator+(const Range &offset, const PackagedOperation< Range > &comp)
PackagedOperation< Range > operator*(typename Range::value_type number, const Range &u)
PackagedOperation< Range > operator-(const Range &offset, const PackagedOperation< Range > &comp)
PackagedOperation< Range > operator-(const PackagedOperation< Range > &first_comp, const PackagedOperation< Range > &second_comp)
PackagedOperation< Range > operator+(const PackagedOperation< Range > &comp, const Range &offset)
PackagedOperation< Range > operator+(const Range &u, const Range &v)
PackagedOperation< Range > operator*(const PackagedOperation< Range > &comp, typename Range::value_type number)
PackagedOperation< Range > operator*(typename Range::value_type number, const PackagedOperation< Range > &comp)
PackagedOperation< Range > operator*(const Range &u, typename Range::value_type number)
PackagedOperation< Range > operator+(const PackagedOperation< Range > &first_comp, const PackagedOperation< Range > &second_comp)