41class Operator :
public dealii::Subscriptor
44 static unsigned int const rank =
45 (n_components == 1) ? 0 : ((n_components == dim) ? 1 : dealii::numbers::invalid_unsigned_int);
49 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
50 typedef dealii::LinearAlgebra::distributed::Vector<double> VectorTypeDouble;
53 Operator(std::shared_ptr<
Grid<dim> const> grid,
54 std::shared_ptr<dealii::Mapping<dim>
const> mapping,
59 std::string
const & field,
60 MPI_Comm
const & mpi_comm);
77 setup(std::shared_ptr<dealii::MatrixFree<dim, Number>
const> matrix_free,
81 initialize_dof_vector(VectorType & src)
const;
87 prescribe_initial_conditions(VectorType & src)
const;
90 rhs(VectorType & dst,
double const time = 0.0)
const;
93 vmult(VectorType & dst, VectorType
const & src)
const;
96 evaluate(VectorType & dst, VectorType
const & src,
double const time = 0.0)
const;
99 solve(VectorType & sol, VectorType
const & rhs,
double const time)
const;
105 std::shared_ptr<dealii::MatrixFree<dim, Number>
const>
106 get_matrix_free()
const;
108 dealii::DoFHandler<dim>
const &
109 get_dof_handler()
const;
111 dealii::types::global_dof_index
112 get_number_of_dofs()
const;
118 get_average_convergence_rate()
const;
121 std::shared_ptr<ContainerInterfaceData<rank, dim, double>>
122 get_container_interface_data()
const;
124 std::shared_ptr<TimerTree>
127 std::shared_ptr<dealii::Mapping<dim>
const>
132 get_dof_index()
const;
135 get_quad_index()
const;
139 get_dof_name()
const;
142 get_dof_index_periodicity_and_hanging_node_constraints()
const;
145 get_dof_name_periodicity_and_hanging_node_constraints()
const;
148 get_quad_name()
const;
151 get_quad_gauss_lobatto_name()
const;
154 get_quad_index_gauss_lobatto()
const;
157 initialize_dof_handler_and_constraints();
160 setup_coupling_boundary_conditions();
166 setup_preconditioner_and_solver();
171 std::shared_ptr<Grid<dim>
const> grid;
176 std::shared_ptr<dealii::Mapping<dim>
const> mapping;
178 std::shared_ptr<MultigridMappings<dim, Number>>
const multigrid_mappings;
183 std::shared_ptr<BoundaryDescriptor<rank, dim>
const> boundary_descriptor;
184 std::shared_ptr<FieldFunctions<dim>
const> field_functions;
191 std::string
const field;
196 std::shared_ptr<dealii::FiniteElement<dim>> fe;
198 dealii::DoFHandler<dim> dof_handler;
206 mutable dealii::AffineConstraints<Number> affine_constraints;
212 dealii::AffineConstraints<Number> affine_constraints_periodicity_and_hanging_nodes;
214 std::string
const dof_index =
"dof";
215 std::string
const dof_index_periodicity_and_handing_node_constraints =
216 "dof_periodicity_hanging_nodes";
218 std::string
const quad_index =
"quad";
219 std::string
const quad_index_gauss_lobatto =
"quad_gauss_lobatto";
221 std::shared_ptr<dealii::MatrixFree<dim, Number>
const> matrix_free;
222 std::shared_ptr<MatrixFreeData<dim, Number>
const> matrix_free_data;
228 mutable std::shared_ptr<ContainerInterfaceData<rank, dim, double>>
229 interface_data_dirichlet_cached;
233 Laplace laplace_operator;
235 std::shared_ptr<PreconditionerBase<Number>> preconditioner;
236 std::shared_ptr<Krylov::SolverBase<VectorType>> iterative_solver;
241 MPI_Comm
const mpi_comm;
246 dealii::ConditionalOStream pcout;