47 data.tasks_parallel_scheme = dealii::MatrixFree<dim, Number>::AdditionalData::none;
54 template<
typename Operator>
56 append(std::shared_ptr<Operator> pde_operator)
58 pde_operator->fill_matrix_free_data(*
this);
61 std::vector<dealii::DoFHandler<dim>
const *>
const &
62 get_dof_handler_vector()
const
64 return dof_handler_vec;
67 std::vector<dealii::AffineConstraints<Number>
const *>
const &
68 get_constraint_vector()
const
70 return constraint_vec;
73 std::vector<dealii::Quadrature<dim>>
const &
74 get_quadrature_vector()
const
76 return quadrature_vec;
79 dealii::DoFHandler<dim>
const &
80 get_dof_handler(std::string
const & name)
const
82 return *dof_handler_vec.at(get_dof_index(name));
86 append_mapping_flags(MappingFlags
const & flags_other)
90 flags.cells = this->data.mapping_update_flags;
91 flags.inner_faces = this->data.mapping_update_flags_inner_faces;
92 flags.boundary_faces = this->data.mapping_update_flags_boundary_faces;
95 flags = flags || flags_other;
97 this->data.mapping_update_flags = flags.cells;
98 this->data.mapping_update_flags_inner_faces = flags.inner_faces;
99 this->data.mapping_update_flags_boundary_faces = flags.boundary_faces;
103 insert_dof_handler(dealii::DoFHandler<dim>
const * dof_handler, std::string
const & name)
105 insert_element(dof_handler_vec, dof_index_map, dof_handler, name);
109 insert_constraint(dealii::AffineConstraints<Number>
const * constraint, std::string
const & name)
111 insert_element(constraint_vec, constraint_index_map, constraint, name);
114 template<
int dim_quad>
116 insert_quadrature(dealii::Quadrature<dim_quad>
const & quadrature, std::string
const & name)
118 insert_element(quadrature_vec, quad_index_map, dealii::Quadrature<dim>(quadrature), name);
122 get_dof_index(std::string
const & name)
const
124 return get_index(dof_index_map, name);
128 get_constraint_index(std::string
const & name)
const
130 return get_index(constraint_index_map, name);
134 get_quad_index(std::string
const & name)
const
136 return get_index(quad_index_map, name);
140 typename dealii::MatrixFree<dim, Number>::AdditionalData data;
145 insert_element(std::vector<T> & vector,
146 std::map<std::string, unsigned int> & map,
148 std::string
const & name)
150 unsigned int index = vector.size();
152 auto it = map.find(name);
157 map.insert(std::pair<std::string, unsigned int>(name, index));
161 AssertThrow(it == map.end(), dealii::ExcMessage(
"Element already exists. Aborting."));
164 vector.resize(index + 1);
165 vector.at(index) = element;
169 get_index(std::map<std::string, unsigned int>
const & map, std::string
const & name)
const
171 auto it = map.find(name);
173 unsigned int index = dealii::numbers::invalid_unsigned_int;
181 AssertThrow(it != map.end(), dealii::ExcMessage(
"Could not find element. Aborting."));
188 std::map<std::string, unsigned int> dof_index_map;
189 std::map<std::string, unsigned int> constraint_index_map;
190 std::map<std::string, unsigned int> quad_index_map;
193 std::vector<dealii::DoFHandler<dim>
const *> dof_handler_vec;
194 std::vector<dealii::AffineConstraints<Number>
const *> constraint_vec;
195 std::vector<dealii::Quadrature<dim>> quadrature_vec;