9 #ifndef amandus_amandus_h 10 #define amandus_amandus_h 12 #include <deal.II/lac/arpack_solver.h> 13 #include <deal.II/lac/block_vector.h> 14 #include <deal.II/lac/dynamic_sparsity_pattern.h> 15 #include <deal.II/lac/precondition.h> 16 #include <deal.II/lac/precondition_block.h> 17 #include <deal.II/lac/relaxation_block.h> 18 #include <deal.II/lac/solver_cg.h> 19 #include <deal.II/lac/solver_control.h> 20 #include <deal.II/lac/solver_gmres.h> 21 #include <deal.II/lac/solver_richardson.h> 22 #include <deal.II/lac/sparse_direct.h> 23 #include <deal.II/lac/sparse_matrix.h> 25 #include <deal.II/grid/grid_generator.h> 26 #include <deal.II/grid/grid_out.h> 27 #include <deal.II/grid/grid_refinement.h> 29 #include <deal.II/dofs/dof_tools.h> 31 #include <deal.II/meshworker/dof_info.h> 32 #include <deal.II/meshworker/integration_info.h> 33 #include <deal.II/meshworker/loop.h> 34 #include <deal.II/meshworker/output.h> 35 #include <deal.II/meshworker/simple.h> 37 #include <deal.II/multigrid/mg_coarse.h> 38 #include <deal.II/multigrid/mg_matrix.h> 39 #include <deal.II/multigrid/mg_smoother.h> 40 #include <deal.II/multigrid/mg_tools.h> 41 #include <deal.II/multigrid/mg_transfer.h> 42 #include <deal.II/multigrid/multigrid.h> 44 #include <deal.II/algorithms/operator.h> 45 #include <deal.II/base/flow_function.h> 46 #include <deal.II/base/function_lib.h> 47 #include <deal.II/base/parameter_handler.h> 48 #include <deal.II/base/quadrature_lib.h> 49 #include <deal.II/numerics/data_out.h> 50 #include <deal.II/numerics/vector_tools.h> 52 #include <amandus/integrator.h> 62 "To use this functionality, deal.II must be configured with Arpack.");
81 void read(
int argc,
const char** argv);
118 typedef dealii::MeshWorker::IntegrationInfo<dim>
CellInfo;
132 const dealii::FiniteElement<dim>& fe,
bool use_umfpack =
false);
137 virtual void parse_parameters(dealii::ParameterHandler& param);
144 void set_number_of_matrices(
unsigned int n);
162 void set_boundary(dealii::types::boundary_id index,
163 dealii::ComponentMask mask = dealii::ComponentMask());
171 void set_meanvalue(dealii::ComponentMask mask = dealii::ComponentMask());
177 virtual void setup_vector(dealii::Vector<double>& v)
const;
184 virtual void update_vector_inhom_boundary(dealii::Vector<double>& v,
185 const dealii::Function<dim>& inhom_boundary,
186 bool projection =
false)
const;
195 virtual void setup_system();
202 void assemble_right_hand_side(dealii::AnyData& out,
const dealii::AnyData& in,
209 void refine_mesh(
const bool global =
false);
214 const dealii::DoFHandler<dim>& dofs()
const;
219 const dealii::ConstraintMatrix& constraints()
const;
225 const dealii::ConstraintMatrix& hanging_nodes()
const;
232 virtual void setup_constraints();
240 virtual void assemble_mg_matrix(
const dealii::AnyData& in,
246 const dealii::Vector<double>& indicators()
const;
266 void error(dealii::BlockVector<double>& out,
const dealii::AnyData& in,
276 void error(dealii::BlockVector<double>& out,
const dealii::AnyData& in,
283 unsigned int num_errs);
288 virtual void solve(dealii::Vector<double>& sol,
const dealii::Vector<double>& rhs);
295 virtual void arpack_solve(std::vector<std::complex<double>>& eigenvalues,
296 std::vector<dealii::Vector<double>>& eigenvectors);
298 void output_results(
unsigned int refinement_cycle,
const dealii::AnyData* data = 0)
const;
316 dealii::SmartPointer<dealii::ParameterHandler>
param;
318 typename dealii::Triangulation<dim>::Signals&
signals;
348 std::vector<dealii::SparseMatrix<double>>
matrix;
354 std::vector<dealii::DataComponentInterpretation::DataComponentInterpretation>
output_data_types;
387 template <
int dim,
typename RELAXATION = dealii::RelaxationBlockSSOR<dealii::SparseMatrix<
double>>>
391 typedef dealii::MeshWorker::IntegrationInfo<dim>
CellInfo;
400 const dealii::FiniteElement<dim>& fe);
402 virtual void parse_parameters(dealii::ParameterHandler& param);
410 void set_advection_directions(std::vector<dealii::Tensor<1, dim>>& adv_dir);
421 void setup_constraints();
434 void solve(dealii::Vector<double>& sol,
const dealii::Vector<double>& rhs);
441 virtual void arpack_solve(std::vector<std::complex<double>>& eigenvalues,
442 std::vector<dealii::Vector<double>>& eigenvectors);
448 bool vertex_patches =
true;
456 bool boundary_patches =
false;
463 dealii::MGLevelObject<dealii::SparseMatrix<double>>
mg_matrix;
473 dealii::MGCoarseGridSVD<double, dealii::Vector<double>>
mg_coarse;
476 dealii::mg::SmootherRelaxation<RELAXATION, dealii::Vector<double>>
mg_smoother;
483 bool log_smoother_statistics =
false;
485 bool right_preconditioning =
true;
487 bool use_default_residual =
true;
489 double smoother_relaxation = 1.0;
502 AmandusUMFPACK(dealii::Triangulation<dim>& triangulation,
const dealii::FiniteElement<dim>& fe);
533 virtual void operator()(dealii::AnyData& out,
const dealii::AnyData& in);
560 virtual void operator()(dealii::AnyData& out,
const dealii::AnyData& in);
577 inline const dealii::DoFHandler<dim>&
584 inline const dealii::ConstraintMatrix&
587 return constraint_matrix;
591 inline const dealii::ConstraintMatrix&
594 return hanging_node_constraints;
598 inline const dealii::Vector<double>&
601 return estimates.block(0);
604 template <
int dim,
typename RELAXATION>
606 std::vector<dealii::Tensor<1, dim>>& adv_dir)
608 advection_directions = adv_dir;
const dealii::ConstraintMatrix & hanging_nodes() const
The object describing the constraints for hanging nodes, not for the boundary.
Definition: amandus.h:592
dealii::ConstraintMatrix constraint_matrix
The object holding the constraints for the active mesh.
Definition: amandus.h:342
dealii::SmartPointer< dealii::ParameterHandler > param
Definition: amandus.h:316
dealii::MGLevelObject< dealii::SparseMatrix< double > > mg_matrix_flux_down
Definition: amandus.h:467
Definition: amandus.h:499
Definition: integrator.h:137
dealii::SmartPointer< AmandusIntegrator< dim >, AmandusResidual< dim > > integrator
Pointer to the local integrator defining the model.
Definition: amandus.h:539
Definition: amandus.h:548
dealii::SmartPointer< AmandusApplicationSparse< dim >, AmandusSolve< dim > > application
The pointer to the application object.
Definition: amandus.h:564
dealii::MGLevelObject< dealii::SparseMatrix< double > > mg_matrix_up
Definition: amandus.h:466
const dealii::DoFHandler< dim > & dofs() const
The object describing the finite element space.
Definition: amandus.h:578
const bool use_umfpack
Definition: amandus.h:349
dealii::mg::SmootherRelaxation< RELAXATION, dealii::Vector< double > > mg_smoother
Definition: amandus.h:476
dealii::MGLevelObject< dealii::SparseMatrix< double > > mg_matrix
Definition: amandus.h:463
dealii::MGLevelObject< dealii::SparsityPattern > mg_sparsity_fluxes
Definition: amandus.h:462
dealii::MGConstrainedDoFs mg_constraints
Definition: amandus.h:459
void verify_residual(unsigned int n_refinements, AmandusApplicationSparse< dim > &app, AmandusIntegrator< dim > &matrix_integrator, AmandusIntegrator< dim > &residual_integrator)
Definition: tests.h:305
dealii::SmartPointer< const AmandusApplicationSparse< dim >, AmandusResidual< dim > > application
Pointer to the application computing the residual.
Definition: amandus.h:537
dealii::ReductionControl control
Definition: amandus.h:311
dealii::MeshWorker::IntegrationInfo< dim > CellInfo
Definition: amandus.h:391
dealii::SparseDirectUMFPACK inverse
Definition: amandus.h:350
dealii::FullMatrix< double > coarse_matrix
Definition: amandus.h:472
dealii::DoFHandler< dim > dof_handler
The object handling the degrees of freedom.
Definition: amandus.h:331
DeclExceptionMsg(ExcNeedArpack,"To use this functionality, deal.II must be configured with Arpack.")
dealii::SmartPointer< AmandusIntegrator< dim >, AmandusSolve< dim > > integrator
The pointer to the local integrator for assembling matrices.
Definition: amandus.h:566
void set_number_of_matrices(unsigned int n)
Definition: amandus.h:571
dealii::SmartPointer< dealii::Triangulation< dim >, AmandusApplicationSparse< dim > > triangulation
The mesh.
Definition: amandus.h:322
dealii::MGTransferPrebuilt< dealii::Vector< double > > mg_transfer
Definition: amandus.h:470
dealii::SmartPointer< const dealii::FiniteElement< dim >, AmandusApplicationSparse< dim > > fe
The finite element constructed from the string.
Definition: amandus.h:328
dealii::SparsityPattern sparsity
Definition: amandus.h:347
dealii::Triangulation< dim >::Signals & signals
Definition: amandus.h:318
std::vector< dealii::DataComponentInterpretation::DataComponentInterpretation > output_data_types
Definition: amandus.h:354
dealii::MGLevelObject< typename RELAXATION::AdditionalData > smoother_data
Definition: amandus.h:475
std::vector< dealii::Tensor< 1, dim > > advection_directions
Definition: amandus.h:480
dealii::MeshWorker::IntegrationInfo< dim > CellInfo
Definition: amandus.h:118
void set_advection_directions(std::vector< dealii::Tensor< 1, dim >> &adv_dir)
Definition: amandus.h:605
dealii::MGLevelObject< dealii::SparseMatrix< double > > mg_matrix_down
Definition: amandus.h:465
std::map< dealii::types::boundary_id, dealii::ComponentMask > boundary_masks
The masks used to set boundary conditions, indexed by the boundary indicator.
Definition: amandus.h:337
const dealii::ConstraintMatrix & constraints() const
The object describing the constraints.
Definition: amandus.h:585
void read(int argc, const char **argv)
Definition: amandus_parameters.cc:61
Definition: amandus.h:388
Definition: amandus.h:115
dealii::ConstraintMatrix hanging_node_constraints
The object holding the hanging node constraints for the active mesh.
Definition: amandus.h:345
dealii::MGCoarseGridSVD< double, dealii::Vector< double > > mg_coarse
Definition: amandus.h:473
dealii::BlockVector< double > estimates
Definition: amandus.h:352
const dealii::MappingQ1< dim > mapping
The default mapping.
Definition: amandus.h:325
dealii::MGLevelObject< dealii::SparseMatrix< double > > mg_matrix_flux_up
Definition: amandus.h:468
const dealii::Vector< double > & indicators() const
The error indicators.
Definition: amandus.h:599
AmandusParameters()
Definition: amandus_parameters.cc:17
dealii::MGLevelObject< dealii::SparsityPattern > mg_sparsity
Definition: amandus.h:461
Definition: amandus.h:513
std::vector< dealii::SparseMatrix< double > > matrix
Definition: amandus.h:348
dealii::ComponentMask meanvalue_mask
Definition: amandus.h:339
Definition: integrator.h:29