12 #include <deal.II/algorithms/any_data.h> 13 #include <deal.II/base/convergence_table.h> 14 #include <deal.II/base/logstream.h> 15 #include <deal.II/base/quadrature_lib.h> 16 #include <deal.II/base/utilities.h> 17 #include <deal.II/lac/vector.h> 20 #include <amandus/adaptivity.h> 21 #include <amandus/amandus.h> 34 dealii::Algorithms::OperatorBase& solver,
35 dealii::Algorithms::OperatorBase& residual,
38 const dealii::Function<dim>* initial_vector = 0,
39 const bool boundary_projection =
false)
41 dealii::Vector<double> res;
42 dealii::Vector<double> sol;
43 dealii::BlockVector<double> errors;
45 errors.reinit(error->n_errors());
46 dealii::ConvergenceTable convergence_table;
48 for (
unsigned int s = 0; s < n_steps; ++s)
50 dealii::deallog <<
"Step " << s << std::endl;
53 solver.notify(dealii::Algorithms::Events::remesh);
58 if (initial_vector != 0)
60 if (boundary_projection)
66 dealii::QGauss<dim> quadrature(app.
dofs().get_fe().tensor_degree() + 2);
67 dealii::VectorTools::project(
73 dealii::AnyData solution_data;
74 dealii::Vector<double>* p = /
75 solution_data.add(p,
"solution");
79 dealii::Vector<double>* rhs = &res;
81 dealii::AnyData residual_data;
82 residual(data, residual_data);
83 dealii::deallog <<
"Residual " << res.l2_norm() << std::endl;
84 solver(solution_data, data);
87 app.
error(errors, solution_data, *error);
88 std::vector<double> global_errors(errors.n_blocks(), 0.);
89 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
91 if (error->error_type(i) == 0)
92 global_errors[i] = errors.block(i).linfty_norm();
93 else if (error->error_type(i) == 1)
94 for (
unsigned int k = 0; k < errors.block(i).size(); ++k)
95 global_errors[i] += errors.block(i)[k];
97 global_errors[i] = errors.block(i).lp_norm(error->error_type(i));
98 if (error->error_name(i) != std::string())
99 dealii::deallog <<
"Error(" << error->error_name(i) <<
"): " << global_errors[i]
102 dealii::deallog <<
"Error(" << i <<
"): " << global_errors[i] << std::endl;
105 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
107 std::string err_name{
"Error(" };
108 err_name += std::to_string(i);
110 if (error->error_name(i) != std::string())
111 err_name = error->error_name(i);
112 convergence_table.add_value(err_name, global_errors[i]);
113 convergence_table.evaluate_convergence_rates(err_name,
114 dealii::ConvergenceTable::reduction_rate_log2);
115 convergence_table.set_scientific(err_name, 1);
121 dealii::deallog <<
"Error::Estimate: " << app.
estimate(solution_data, *estimator)
124 dealii::AnyData out_data;
125 out_data.merge(solution_data);
127 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
129 std::string err_name{
"Error(" };
130 err_name += std::to_string(i);
132 if (error->error_name(i) != std::string())
133 err_name = error->error_name(i);
134 out_data.add(&errors.block(i), err_name);
137 std::cout << std::endl;
138 convergence_table.write_text(std::cout);
150 dealii::Algorithms::OperatorBase& solve,
153 const dealii::Function<dim>* initial_vector = 0,
154 const dealii::Function<dim>* inhom_boundary = 0,
155 const bool boundary_projection =
false)
157 dealii::Vector<double> sol;
158 dealii::BlockVector<double> errors;
160 errors.reinit(error->n_errors());
161 dealii::ConvergenceTable convergence_table;
163 for (
unsigned int s = 0; s < n_steps; ++s)
165 dealii::deallog <<
"Step " << s << std::endl;
167 solve.notify(dealii::Algorithms::Events::remesh);
171 if (initial_vector != 0)
173 dealii::QGauss<dim> quadrature(app.
dofs().get_fe().tensor_degree() + 2);
174 dealii::VectorTools::project(
178 if (inhom_boundary != 0)
181 dealii::AnyData solution_data;
182 solution_data.add(&sol,
"solution");
184 dealii::AnyData data;
185 solve(solution_data, data);
188 app.
error(errors, solution_data, *error);
189 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
191 dealii::deallog <<
"Error(" << i <<
"): " << errors.block(i).l2_norm() << std::endl;
193 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
195 std::string err_name{
"Error(" };
196 err_name += std::to_string(i);
198 convergence_table.add_value(err_name, errors.block(i).l2_norm());
199 convergence_table.evaluate_convergence_rates(err_name,
200 dealii::ConvergenceTable::reduction_rate_log2);
201 convergence_table.set_scientific(err_name, 1);
207 dealii::deallog <<
"Error::Estimate: " << app.
estimate(solution_data, *estimator)
211 dealii::AnyData out_data;
212 out_data.merge(solution_data);
214 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
216 std::string err_name{
"Error(" };
217 err_name += std::to_string(i);
219 out_data.add(&errors.block(i), err_name);
222 std::cout << std::endl;
223 convergence_table.write_text(std::cout);
236 dealii::Algorithms::OperatorBase& solve)
238 std::vector<std::complex<double>> eigenvalues(n_values);
239 bool symmetric =
false;
242 app.
param->enter_subsection(
"Arpack");
243 symmetric = app.
param->get_bool(
"Symmetric");
244 app.
param->leave_subsection();
247 unsigned int n_vectors = n_values;
249 n_vectors = 2 * n_values;
250 std::vector<dealii::Vector<double>> eigenvectors(n_vectors);
252 for (
unsigned int s = 0; s < n_steps; ++s)
254 dealii::deallog <<
"Step " << s << std::endl;
256 solve.notify(dealii::Algorithms::Events::remesh);
258 for (
unsigned int i = 0; i < eigenvectors.size(); ++i)
261 dealii::AnyData solution_data;
262 solution_data.add(&eigenvalues,
"eigenvalues");
263 solution_data.add(&eigenvectors,
"eigenvectors");
265 dealii::AnyData data;
266 solve(solution_data, data);
268 dealii::AnyData out_data;
269 for (
unsigned int i = 0; i < n_values; ++i)
271 std::ostringstream nstream;
272 nstream <<
"ev" << std::setw(3) << std::setfill(
'0') << i;
275 out_data.add(&eigenvectors[i], nstream.str());
276 dealii::deallog <<
"Eigenvalue " << i <<
'\t' << std::setprecision(15)
277 << eigenvalues[i].real() << std::endl;
281 out_data.add(&eigenvectors[i], nstream.str() + std::string(
"re"));
282 out_data.add(&eigenvectors[n_values + i], nstream.str() + std::string(
"im"));
283 dealii::deallog <<
"Eigenvalue " << i <<
'\t' << std::setprecision(15) << eigenvalues[i]
302 dealii::Algorithms::OperatorBase& solver, dealii::Algorithms::OperatorBase& residual,
304 const dealii::Function<dim>* initial_vector = 0,
const bool boundary_projection =
false)
306 dealii::Vector<double> rhs;
307 dealii::Vector<double> sol;
308 dealii::BlockVector<double> errors;
310 errors.reinit(error->n_errors());
311 dealii::ConvergenceTable convergence_table;
314 solver.notify(dealii::Algorithms::Events::initial);
317 dealii::AnyData solution_data;
318 solution_data.add(&sol,
"solution");
319 dealii::AnyData residual_data;
320 residual_data.add(&rhs,
"RHS");
321 dealii::AnyData data;
324 for (
unsigned int s = 0; s < n_steps; ++s)
326 dealii::deallog <<
"Step " << s << std::endl;
328 if (initial_vector != 0)
330 if (boundary_projection)
336 dealii::QGauss<dim> quadrature(app.
dofs().get_fe().tensor_degree() + 2);
337 dealii::VectorTools::project(
343 residual(residual_data, data);
344 solver(solution_data, residual_data);
348 app.
error(errors, solution_data, *error);
349 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
351 dealii::deallog <<
"Error(" << i <<
"): " << errors.block(i).l2_norm() << std::endl;
353 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
355 std::string err_name{
"Error(" };
356 err_name += std::to_string(i);
358 convergence_table.add_value(err_name, errors.block(i).l2_norm());
359 convergence_table.evaluate_convergence_rates(err_name,
360 dealii::ConvergenceTable::reduction_rate_log2);
361 convergence_table.set_scientific(err_name, 1);
367 dealii::deallog <<
"Error::Estimate: " << app.
estimate(solution_data, *estimator)
370 dealii::AnyData out_data;
371 out_data.merge(solution_data);
373 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
375 std::string err_name{
"Error(" };
376 err_name += std::to_string(i);
378 out_data.add(&errors.block(i), err_name);
381 std::cout << std::endl;
382 convergence_table.write_text(std::cout);
386 remesh(solution_data, data);
387 solver.notify(dealii::Algorithms::Events::remesh);
403 const dealii::Function<dim>* inhom_boundary = 0,
const bool boundary_projection =
false)
405 dealii::Vector<double> sol;
406 dealii::BlockVector<double> errors;
408 errors.reinit(error->n_errors());
409 dealii::ConvergenceTable convergence_table;
412 solve.notify(dealii::Algorithms::Events::initial);
415 dealii::AnyData solution_data;
416 solution_data.add(&sol,
"solution");
417 dealii::AnyData data;
420 for (
unsigned int s = 0; s < n_steps; ++s)
422 dealii::deallog <<
"Step " << s << std::endl;
424 if (initial_vector != 0)
426 dealii::QGauss<dim> quadrature(app.
dofs().get_fe().tensor_degree() + 2);
427 dealii::VectorTools::project(
431 if (inhom_boundary != 0)
434 solve(solution_data, data);
438 app.
error(errors, solution_data, *error);
439 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
441 dealii::deallog <<
"Error(" << i <<
"): " << errors.block(i).l2_norm() << std::endl;
443 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
445 std::string err_name{
"Error(" };
446 err_name += std::to_string(i);
448 convergence_table.add_value(err_name, errors.block(i).l2_norm());
449 convergence_table.evaluate_convergence_rates(err_name,
450 dealii::ConvergenceTable::reduction_rate_log2);
451 convergence_table.set_scientific(err_name, 1);
457 dealii::deallog <<
"Error::Estimate: " << app.
estimate(solution_data, *estimator)
461 dealii::AnyData out_data;
462 out_data.merge(solution_data);
464 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
466 std::string err_name{
"Error(" };
467 err_name += std::to_string(i);
469 out_data.add(&errors.block(i), err_name);
472 std::cout << std::endl;
473 convergence_table.write_text(std::cout);
477 remesh(solution_data, data);
478 solve.notify(dealii::Algorithms::Events::remesh);
492 dealii::Triangulation<dim>& tria,
493 dealii::Algorithms::OperatorBase& solver,
494 dealii::Algorithms::OperatorBase& right_hand_side,
498 dealii::Vector<double> rhs;
499 dealii::Vector<double> sol;
500 dealii::BlockVector<double> errors;
502 errors.reinit(error->n_errors());
503 dealii::ConvergenceTable convergence_table;
504 unsigned int step = 0;
507 solver.notify(dealii::Algorithms::Events::initial);
510 dealii::AnyData solution_data;
511 solution_data.add(&sol,
"solution");
512 dealii::AnyData data;
517 dealii::deallog <<
"Step " << step++ << std::endl;
521 dealii::AnyData rhs_data;
522 rhs_data.add(&rhs,
"RHS");
523 right_hand_side(rhs_data, data);
525 solver(solution_data, rhs_data);
528 dealii::deallog <<
"Dofs: " << app.
dofs().n_dofs() << std::endl;
529 convergence_table.add_value(
"cells", app.
dofs().get_triangulation().n_active_cells());
530 convergence_table.add_value(
"dofs", app.
dofs().n_dofs());
533 app.
error(errors, solution_data, *error);
534 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
536 dealii::deallog <<
"Error(" << i <<
"): " << errors.block(i).l2_norm() << std::endl;
538 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
540 std::string err_name{
"Error(" };
541 err_name += std::to_string(i);
543 convergence_table.add_value(err_name, errors.block(i).l2_norm());
544 convergence_table.evaluate_convergence_rates(
545 err_name,
"cells", dealii::ConvergenceTable::reduction_rate_log2, dim);
546 convergence_table.set_scientific(err_name, 1);
551 const double est = app.
estimate(solution_data, estimator);
552 dealii::deallog <<
"Estimate: " << est << std::endl;
553 convergence_table.add_value(
"estimate", est);
554 convergence_table.evaluate_convergence_rates(
555 "estimate",
"cells", dealii::ConvergenceTable::reduction_rate_log2, dim);
556 convergence_table.set_scientific(
"estimate", 1);
559 dealii::AnyData out_data;
560 out_data.merge(solution_data);
562 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
564 std::string err_name{
"Error(" };
565 err_name += std::to_string(i);
567 out_data.add(&errors.block(i), err_name);
569 dealii::Vector<double> indicators;
571 out_data.add(&indicators,
"estimator");
573 std::cout << std::endl;
574 convergence_table.write_text(std::cout);
577 if (app.
dofs().n_dofs() >= max_dofs)
581 remesh(solution_data, data);
582 solver.notify(dealii::Algorithms::Events::remesh);
598 const dealii::Function<dim>* inhom_boundary = 0,
const bool boundary_projection =
false)
600 dealii::Vector<double> sol;
601 dealii::BlockVector<double> errors;
603 errors.reinit(error->n_errors());
604 dealii::ConvergenceTable convergence_table;
605 unsigned int step = 0;
608 solver.notify(dealii::Algorithms::Events::initial);
611 dealii::AnyData solution_data;
612 solution_data.add(&sol,
"solution");
613 dealii::AnyData data;
618 dealii::deallog <<
"Step " << step++ << std::endl;
621 if (inhom_boundary != 0)
623 solver(solution_data, data);
626 dealii::deallog <<
"Dofs: " << app.
dofs().n_dofs() << std::endl;
627 convergence_table.add_value(
"cells", app.
dofs().get_triangulation().n_active_cells());
628 convergence_table.add_value(
"dofs", app.
dofs().n_dofs());
631 app.
error(errors, solution_data, *error);
632 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
634 dealii::deallog <<
"Error(" << i <<
"): " << errors.block(i).l2_norm() << std::endl;
636 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
638 std::string err_name{
"Error(" };
639 err_name += std::to_string(i);
641 convergence_table.add_value(err_name, errors.block(i).l2_norm());
642 convergence_table.evaluate_convergence_rates(
643 err_name,
"cells", dealii::ConvergenceTable::reduction_rate_log2, dim);
644 convergence_table.set_scientific(err_name, 1);
649 const double est = app.
estimate(solution_data, estimator);
650 dealii::deallog <<
"Estimate: " << est << std::endl;
651 convergence_table.add_value(
"estimate", est);
652 convergence_table.evaluate_convergence_rates(
653 "estimate",
"cells", dealii::ConvergenceTable::reduction_rate_log2, dim);
654 convergence_table.set_scientific(
"estimate", 1);
657 dealii::AnyData out_data;
658 out_data.merge(solution_data);
660 for (
unsigned int i = 0; i < errors.n_blocks(); ++i)
662 std::string err_name{
"Error(" };
663 err_name += std::to_string(i);
665 out_data.add(&errors.block(i), err_name);
667 dealii::Vector<double> indicators;
669 out_data.add(&indicators,
"estimator");
671 std::cout << std::endl;
672 convergence_table.write_text(std::cout);
675 if (app.
dofs().n_dofs() >= max_dofs)
679 remesh(solution_data, data);
680 solver.notify(dealii::Algorithms::Events::remesh);
696 dealii::Algorithms::OperatorBase& solver,
699 const double exact_eigenvalue = std::nan(NULL),
700 const unsigned int multiplicity = 1,
const unsigned int k = 0)
702 const unsigned int n_vectors = n_eigenvalue + multiplicity - 1 + k;
703 std::vector<std::complex<double>> eigenvalues(n_vectors);
704 std::vector<dealii::Vector<double>> eigenvectors(n_vectors);
705 dealii::ConvergenceTable convergence_table;
706 std::vector<std::pair<unsigned int, double>> sort_eigenvalues(n_vectors);
707 solver.notify(dealii::Algorithms::Events::initial);
708 dealii::AnyData solution_data;
709 solution_data.add(&eigenvalues,
"eigenvalues");
710 solution_data.add(&eigenvectors,
"eigenvectors");
711 unsigned int step = 0;
713 for (
unsigned int i = 0; i < multiplicity; ++i)
714 estimator.input_vector_names.push_back(std::string(
"eigenvector") + std::to_string(i));
718 dealii::deallog <<
"Step " << step++ << std::endl;
722 for (
unsigned int i = 0; i < eigenvectors.size(); ++i)
726 dealii::AnyData data;
727 solver(solution_data, data);
730 for (
unsigned int i = 0; i < n_vectors; ++i)
732 sort_eigenvalues[i].first = i;
733 sort_eigenvalues[i].second = eigenvalues[i].real();
735 sort(sort_eigenvalues.begin(),
736 sort_eigenvalues.end(),
737 [](
const std::pair<unsigned int, double>& left,
738 const std::pair<unsigned int, double>& right) {
return left.second < right.second; });
741 dealii::deallog <<
"Dofs: " << app.
dofs().n_dofs() << std::endl;
742 convergence_table.add_value(
"cells", app.
dofs().get_triangulation().n_active_cells());
743 convergence_table.add_value(
"dofs", app.
dofs().n_dofs());
744 if (std::isfinite(exact_eigenvalue))
746 for (
unsigned int i = 0; i < multiplicity; ++i)
749 std::abs(exact_eigenvalue - sort_eigenvalues[n_eigenvalue + i - 1].second);
750 dealii::deallog <<
"ev-error-" << i <<
": " << error << std::endl;
751 convergence_table.add_value(std::string(
"ev-error-") + std::to_string(i), error);
752 convergence_table.evaluate_convergence_rates(std::string(
"ev-error-") + std::to_string(i),
754 dealii::ConvergenceTable::reduction_rate_log2,
756 convergence_table.set_scientific(std::string(
"ev-error-") + std::to_string(i), 1);
761 dealii::AnyData estimator_data;
762 for (
unsigned int i = 0; i < multiplicity; ++i)
764 const unsigned int eigenvalue_idx = sort_eigenvalues[n_eigenvalue + i - 1].first;
765 estimator_data.add(&eigenvectors[eigenvalue_idx],
766 std::string(
"eigenvector") + std::to_string(i));
767 estimator_data.add(&sort_eigenvalues[n_eigenvalue + i - 1].second,
768 std::string(
"ev") + std::to_string(i));
770 const double est = std::pow(app.
estimate(estimator_data, estimator), 2);
771 dealii::deallog <<
"Estimate: " << est << std::endl;
772 convergence_table.add_value(
"estimate", est);
773 convergence_table.evaluate_convergence_rates(
774 "estimate",
"cells", dealii::ConvergenceTable::reduction_rate_log2, 1);
775 convergence_table.set_scientific(
"estimate", 1);
778 dealii::AnyData out_data;
779 for (
unsigned int i = 0; i < multiplicity; ++i)
781 const unsigned int eigenvalue_idx = sort_eigenvalues[n_eigenvalue + i - 1].first;
782 out_data.add(&eigenvectors[eigenvalue_idx], std::string(
"ev") + std::to_string(i + 1));
784 dealii::Vector<double> indicators;
786 out_data.add(&indicators,
"estimator");
787 for (
unsigned int i = 0; i < n_vectors; ++i)
788 dealii::deallog <<
"Eigenvalue " <<
'\t' << std::setprecision(15)
789 << sort_eigenvalues[i].second << std::endl;
791 std::cout << std::endl;
792 convergence_table.write_text(std::cout);
795 if (app.
dofs().n_dofs() >= max_dofs)
801 solver.notify(dealii::Algorithms::Events::remesh);
const dealii::ConstraintMatrix & hanging_nodes() const
The object describing the constraints for hanging nodes, not for the boundary.
Definition: amandus.h:592
dealii::SmartPointer< dealii::ParameterHandler > param
Definition: amandus.h:316
double estimate(const dealii::AnyData &in, AmandusIntegrator< dim > &integrator)
Definition: amandus_sparse.cc:521
const dealii::DoFHandler< dim > & dofs() const
The object describing the finite element space.
Definition: amandus.h:578
void global_refinement_linear_loop(unsigned int n_steps, AmandusApplicationSparse< dim > &app, dealii::Algorithms::OperatorBase &solver, dealii::Algorithms::OperatorBase &residual, const AmandusIntegrator< dim > *error=0, AmandusIntegrator< dim > *estimator=0, const dealii::Function< dim > *initial_vector=0, const bool boundary_projection=false)
Definition: apps.h:33
void global_refinement_nested_linear_loop(unsigned int n_steps, AmandusApplicationSparse< dim > &app, dealii::Triangulation< dim > &tria, dealii::Algorithms::OperatorBase &solver, dealii::Algorithms::OperatorBase &residual, const AmandusIntegrator< dim > *error=0, AmandusIntegrator< dim > *estimator=0, const dealii::Function< dim > *initial_vector=0, const bool boundary_projection=false)
Definition: apps.h:300
void adaptive_refinement_linear_loop(unsigned int max_dofs, AmandusApplicationSparse< dim > &app, dealii::Triangulation< dim > &tria, dealii::Algorithms::OperatorBase &solver, dealii::Algorithms::OperatorBase &right_hand_side, AmandusIntegrator< dim > &estimator, AmandusRefineStrategy< dim > &mark, const AmandusIntegrator< dim > *error=0)
Definition: apps.h:491
virtual void setup_vector(dealii::Vector< double > &v) const
Definition: amandus_sparse.cc:148
void refine_mesh(const bool global=false)
Definition: amandus_sparse.cc:598
void global_refinement_nested_nonlinear_loop(unsigned int n_steps, AmandusApplicationSparse< dim > &app, dealii::Triangulation< dim > &tria, dealii::Algorithms::OperatorBase &solve, const AmandusIntegrator< dim > *error=0, AmandusIntegrator< dim > *estimator=0, const dealii::Function< dim > *initial_vector=0, const dealii::Function< dim > *inhom_boundary=0, const bool boundary_projection=false)
Definition: apps.h:399
void output_results(unsigned int refinement_cycle, const dealii::AnyData *data=0) const
Definition: amandus_sparse.cc:697
const dealii::ConstraintMatrix & constraints() const
The object describing the constraints.
Definition: amandus.h:585
void adaptive_refinement_nonlinear_loop(unsigned int max_dofs, AmandusApplicationSparse< dim > &app, dealii::Triangulation< dim > &tria, dealii::Algorithms::OperatorBase &solver, AmandusIntegrator< dim > &estimator, AmandusRefineStrategy< dim > &mark, const AmandusIntegrator< dim > *error=0, const dealii::Function< dim > *inhom_boundary=0, const bool boundary_projection=false)
Definition: apps.h:594
Definition: amandus.h:115
virtual void setup_system()
Definition: amandus_sparse.cc:182
void global_refinement_eigenvalue_loop(unsigned int n_steps, unsigned int n_values, AmandusApplicationSparse< dim > &app, dealii::Algorithms::OperatorBase &solve)
Definition: apps.h:234
abstract base class AmandusRefineStrategy
Definition: refine_strategy.h:25
void adaptive_refinement_eigenvalue_loop(unsigned int max_dofs, unsigned int n_eigenvalue, AmandusApplicationSparse< dim > &app, dealii::Algorithms::OperatorBase &solver, AmandusIntegrator< dim > &estimator, AmandusRefineStrategy< dim > &mark, const double exact_eigenvalue=std::nan(NULL), const unsigned int multiplicity=1, const unsigned int k=0)
Definition: apps.h:694
void global_refinement_nonlinear_loop(unsigned int n_steps, AmandusApplicationSparse< dim > &app, dealii::Algorithms::OperatorBase &solve, const AmandusIntegrator< dim > *error=0, AmandusIntegrator< dim > *estimator=0, const dealii::Function< dim > *initial_vector=0, const dealii::Function< dim > *inhom_boundary=0, const bool boundary_projection=false)
Definition: apps.h:149
void error(dealii::BlockVector< double > &out, const dealii::AnyData &in, const AmandusIntegrator< dim > &integrator)
const dealii::Vector< double > & indicators() const
The error indicators.
Definition: amandus.h:599
Definition: integrator.h:29
virtual void update_vector_inhom_boundary(dealii::Vector< double > &v, const dealii::Function< dim > &inhom_boundary, bool projection=false) const
Definition: amandus_sparse.cc:155
Remesher interpolating all vectors and using an estimator integrator to calculate criterion...
Definition: adaptivity.h:244