1 #ifndef amandus_adaptivity_h 2 #define amandus_adaptivity_h 12 #include <amandus/amandus.h> 13 #include <amandus/integrator.h> 14 #include <amandus/refine_strategy.h> 15 #include <deal.II/algorithms/operator.h> 16 #include <deal.II/base/smartpointer.h> 17 #include <deal.II/grid/grid_refinement.h> 18 #include <deal.II/numerics/solution_transfer.h> 25 template <
class VECTOR,
int dim>
26 class Remesher :
public dealii::Algorithms::OperatorBase
45 template <
class VECTOR,
int dim>
51 , transfer(app.dofs())
53 this->connect_transfer();
60 this->transfer.prepare_for_coarsening_and_refinement(this->to_transfer);
76 this->
app->setup_system();
77 unsigned int n_dofs = this->
app->dofs().n_dofs();
79 this->transferred.resize(this->to_transfer.size());
80 for (
typename std::vector<VECTOR>::iterator result = this->transferred.begin();
81 result != this->transferred.end();
84 result->reinit(n_dofs);
86 this->transfer.interpolate(this->to_transfer, this->transferred);
87 this->transfer.clear();
88 for (
typename std::vector<VECTOR>::iterator result = this->transferred.begin();
89 result != this->transferred.end();
92 this->
app->hanging_nodes().distribute(*result);
100 this->
tria->signals.pre_refinement.connect(
102 this->
tria->signals.post_refinement.connect(
118 template <
class VECTOR,
int dim>
127 virtual void operator()(dealii::AnyData& out,
const dealii::AnyData& in)
129 this->extract_vectors(out);
130 this->remesh(out, in);
136 this->to_transfer.resize(0);
137 this->extracted.resize(0);
138 for (
unsigned int i = 0; i < to_extract.size(); ++i)
140 if (to_extract.is_type<VECTOR*>(i))
142 this->extracted.push_back(to_extract.entry<VECTOR*>(i));
143 this->to_transfer.push_back(*(to_extract.entry<VECTOR*>(i)));
152 for (
unsigned int i = 0; i < this->extracted.size(); ++i)
154 dealii::deallog <<
"Writing back result of size " << this->transferred[i].size() << std::endl;
155 *(this->extracted[i]) = this->transferred[i];
159 virtual void remesh(
const dealii::AnyData& out,
const dealii::AnyData& in) = 0;
171 template <
class VECTOR,
int dim>
181 remesh(
const dealii::AnyData& ,
const dealii::AnyData& )
183 this->
tria->set_all_refine_flags();
184 this->
tria->execute_coarsening_and_refinement();
199 template <
class VECTOR,
int dim>
206 , error_integrator(&error_integrator)
213 std::function<
void(dealii::Triangulation<dim>&,
const dealii::BlockVector<double>&)> callback)
215 this->callback = callback;
219 remesh(
const dealii::AnyData& out,
const dealii::AnyData& )
221 this->
app->error(indicator, out, *(this->error_integrator));
222 this->callback(*(this->
tria), indicator);
223 this->
tria->execute_coarsening_and_refinement();
234 std::function<void(dealii::Triangulation<dim>&,
const dealii::BlockVector<double>&)> callback;
243 template <
class VECTOR,
int dim>
250 , estimate_integrator(&estimate_integrator)
256 remesh(
const dealii::AnyData& out,
const dealii::AnyData& )
258 this->
app->estimate(out, *(this->estimate_integrator));
259 const dealii::Vector<double> indicators = this->
app->indicators();
260 this->mark(indicators);
261 this->
tria->execute_coarsening_and_refinement();
virtual void extract_vectors(const dealii::AnyData &to_extract)
Definition: adaptivity.h:134
dealii::SmartPointer< dealii::Triangulation< dim >, Remesher< VECTOR, dim > > tria
Definition: adaptivity.h:37
Definition: integrator.h:137
ErrorIntegrator< dim > * error_integrator
Definition: adaptivity.h:232
virtual void finalize_transfer()
Definition: adaptivity.h:74
virtual void remesh(const dealii::AnyData &out, const dealii::AnyData &)
Definition: adaptivity.h:219
std::vector< VECTOR * > extracted
Definition: adaptivity.h:162
void connect_transfer()
Definition: adaptivity.h:98
Remesher(AmandusApplicationSparse< dim > &app, dealii::Triangulation< dim > &tria)
Definition: adaptivity.h:29
virtual void operator()(dealii::AnyData &out, const dealii::AnyData &in)
Definition: adaptivity.h:127
dealii::SmartPointer< AmandusApplicationSparse< dim >, Remesher< VECTOR, dim > > app
Definition: adaptivity.h:36
AmandusIntegrator< dim > * estimate_integrator
Definition: adaptivity.h:265
void flag_callback(std::function< void(dealii::Triangulation< dim > &, const dealii::BlockVector< double > &)> callback)
Set callback for flagging.
Definition: adaptivity.h:212
EstimateRemesher(AmandusApplicationSparse< dim > &app, dealii::Triangulation< dim > &tria, AmandusRefineStrategy< dim > &mark, AmandusIntegrator< dim > &estimate_integrator)
Definition: adaptivity.h:247
Definition: amandus.h:115
Remesher that interpolates stored vectors upon refinement.
Definition: adaptivity.h:46
dealii::BlockVector< double > indicator
Definition: adaptivity.h:233
abstract base class AmandusRefineStrategy
Definition: refine_strategy.h:25
dealii::SolutionTransfer< dim, VECTOR > transfer
Definition: adaptivity.h:106
std::vector< VECTOR > to_transfer
Vectors to be transferred to new grid.
Definition: adaptivity.h:108
Remesher interpolating all vectors and using an ErrorIntegrator to calculate criterion.
Definition: adaptivity.h:200
Base class for remeshing operators.
Definition: adaptivity.h:26
AmandusRefineStrategy< dim > & mark
Definition: adaptivity.h:266
InterpolatingRemesher(AmandusApplicationSparse< dim > &app, dealii::Triangulation< dim > &tria)
Definition: adaptivity.h:49
std::vector< VECTOR > transferred
Interpolated vectors on new grid.
Definition: adaptivity.h:110
virtual void finalize_transfer()
Definition: adaptivity.h:149
AllInterpolatingRemesher(AmandusApplicationSparse< dim > &app, dealii::Triangulation< dim > &tria)
Definition: adaptivity.h:122
ErrorRemesher(AmandusApplicationSparse< dim > &app, dealii::Triangulation< dim > &tria, ErrorIntegrator< dim > &error_integrator)
Definition: adaptivity.h:203
virtual void remesh(const dealii::AnyData &out, const dealii::AnyData &)
Definition: adaptivity.h:256
Definition: integrator.h:29
Interpolating remesher which interpolates all vectors.
Definition: adaptivity.h:119
Remesher interpolating all vectors and using an estimator integrator to calculate criterion...
Definition: adaptivity.h:244
virtual void prepare_transfer()
called at pre_refinement signal of triangulation
Definition: adaptivity.h:58