33#ifndef __H__LIB_ALGEBRA__OPERATOR__INTERFACE__CONSTRAINED_LINEAR_ITERATOR__
34#define __H__LIB_ALGEBRA__OPERATOR__INTERFACE__CONSTRAINED_LINEAR_ITERATOR__
62template <
typename TDomain,
typename TAlgebra,
typename TLinIt,
typename =
void>
94 virtual const char*
name()
const
96 return base_type::name();
101 return base_type::init(J, u);
106 return base_type::init(L);
112 if (!base_type::apply(c, d))
return false;
116 UG_THROW(
"Domain discretization passed to ConstrainedLinearIterator is not valid.\n"
117 "Cannot apply any constraints.")
120 if (gf && gf->dof_distribution().valid())
125 for (
size_t i = 0; i < nConstr; i++)
130 for (
size_t i = 0; i < nConstr; i++)
135 for (
size_t i = 0; i < nConstr; i++)
140 for (
size_t i = 0; i < nConstr; i++)
144 else UG_THROW(
"Vector is not a grid function. This is not supported.")
156 template <
typename S,
typename =
void>
177 if (!
cli.base_type::apply_update_defect(c, d))
return false;
181 UG_THROW(
"Domain discretization passed to ConstrainedLinearIterator is not valid.\n"
182 "Cannot apply any constraints.")
185 if (gf && gf->dof_distribution().valid())
191 for (
size_t i = 0; i < nConstr; i++)
196 for (
size_t i = 0; i < nConstr; i++)
201 for (
size_t i = 0; i < nConstr; i++)
206 for (
size_t i = 0; i < nConstr; i++)
212 for (
size_t i = 0; i < nConstr; i++)
217 for (
size_t i = 0; i < nConstr; i++)
222 for (
size_t i = 0; i < nConstr; i++)
227 else UG_THROW(
"Vector is not a grid function. This is not supported.")
235 template <
typename S>
237 typename
std::enable_if<std::is_base_of<IPreconditioner<TAlgebra>, S>::value>::type>
250 cli.m_spDefectOperator->apply_sub(d, c);
256 friend struct apply_update_defect_impl<TLinIt>;
263 return base_type::supports_parallel();
Definition smart_pointer.h:107
Definition constrained_linear_iterator.h:64
virtual const char * name() const
returns the name of iterator
Definition constrained_linear_iterator.h:94
virtual bool init(SmartPtr< ILinearOperator< vector_type, vector_type > > J, const vector_type &u)
Definition constrained_linear_iterator.h:99
ConstrainedLinearIterator(const ConstrainedLinearIterator< TDomain, TAlgebra, TLinIt > &parent)
clone constructor
Definition constrained_linear_iterator.h:79
GridFunction< TDomain, TAlgebra > gf_type
Definition constrained_linear_iterator.h:66
virtual bool supports_parallel() const
returns if parallel solving is supported
Definition constrained_linear_iterator.h:261
virtual bool init(SmartPtr< ILinearOperator< vector_type, vector_type > > L)
Definition constrained_linear_iterator.h:104
SmartPtr< ILinearIterator< vector_type > > m_spLinIt
Definition constrained_linear_iterator.h:273
virtual SmartPtr< ILinearIterator< vector_type > > clone()
clone
Definition constrained_linear_iterator.h:84
TLinIt base_type
Definition constrained_linear_iterator.h:68
virtual bool apply(vector_type &c, const vector_type &d)
Definition constrained_linear_iterator.h:109
virtual ~ConstrainedLinearIterator()
destructor
Definition constrained_linear_iterator.h:90
TAlgebra::vector_type vector_type
Definition constrained_linear_iterator.h:67
number m_time
Definition constrained_linear_iterator.h:275
SmartPtr< IDomainDiscretization< TAlgebra > > m_spDomDisc
Definition constrained_linear_iterator.h:274
virtual bool apply_update_defect(vector_type &c, vector_type &d)
Definition constrained_linear_iterator.h:149
void set_time(number time)
setter for time
Definition constrained_linear_iterator.h:267
ConstrainedLinearIterator(SmartPtr< IDomainDiscretization< TAlgebra > > domDisc)
constructor
Definition constrained_linear_iterator.h:74
represents numerical solutions on a grid using an algebraic vector
Definition grid_function.h:121
Interface for domain discretization.
Definition domain_disc_interface.h:136
describes a linear mapping X->Y
Definition linear_operator.h:80
#define UG_THROW(msg)
Definition error.h:57
double number
Definition types.h:124
Definition smart_pointer.h:817
@ CT_DIRICHLET
Definition ass_tuner.h:59
@ CT_HANGING
Definition ass_tuner.h:57
@ CT_CONSTRAINTS
Definition ass_tuner.h:58
SmartPtr< T, FreePolicy > make_sp(T *inst)
returns a SmartPtr for the passed raw pointer
Definition smart_pointer.h:839
ConstrainedLinearIterator & cli
Definition constrained_linear_iterator.h:239
bool operator()(vector_type &c, vector_type &d)
Definition constrained_linear_iterator.h:244
apply_update_defect_impl(ConstrainedLinearIterator &_cli)
Definition constrained_linear_iterator.h:241
Definition constrained_linear_iterator.h:158
ConstrainedLinearIterator & cli
Definition constrained_linear_iterator.h:159
apply_update_defect_impl(ConstrainedLinearIterator &_cli)
Definition constrained_linear_iterator.h:161
bool operator()(vector_type &c, vector_type &d)
Definition constrained_linear_iterator.h:164