16#ifndef HYPERDEAL_NDIM_MATRIXFREE
17#define HYPERDEAL_NDIM_MATRIXFREE
19#include <hyper.deal/base/config.h>
21#include <deal.II/lac/la_parallel_vector.h>
23#include <deal.II/matrix_free/matrix_free.h>
25#include <hyper.deal/base/memory_consumption.h>
26#include <hyper.deal/base/timers.h>
27#include <hyper.deal/matrix_free/dof_info.h>
28#include <hyper.deal/matrix_free/face_info.h>
29#include <hyper.deal/matrix_free/id.h>
30#include <hyper.deal/matrix_free/shape_info.h>
31#include <hyper.deal/matrix_free/vector_partitioner.h>
38 template <
int dim_x,
int dim_v,
typename Number,
typename VectorizedArrayType>
44 using VectorizedArrayTypeX = VectorizedArrayType;
45 using VectorizedArrayTypeV = dealii::VectorizedArray<Number, 1>;
109 const MPI_Comm comm_sm,
110 const dealii::MatrixFree<dim_x, Number, VectorizedArrayTypeX>
112 const dealii::MatrixFree<dim_v, Number, VectorizedArrayTypeV>
124 template <
typename OutVector,
typename InVector>
128 void(
const MatrixFree &, OutVector &,
const InVector &,
const ID)>
131 const InVector &src)
const;
136 template <
typename CLASS,
typename OutVector,
typename InVector>
142 CLASS * owning_class,
144 const InVector &src)
const;
150 template <
typename OutVector,
typename InVector>
154 void(
const MatrixFree &, OutVector &,
const InVector &,
const ID)>
157 const InVector & src,
159 DataAccessOnFaces::unspecified,
160 Timers *timers =
nullptr)
const;
165 template <
typename CLASS,
typename OutVector,
typename InVector>
171 CLASS * owning_class,
173 const InVector & src,
175 DataAccessOnFaces::unspecified,
176 Timers *timers =
nullptr)
const;
183 template <
typename OutVector,
typename InVector>
185 loop(
const std::function<
186 void(
const MatrixFree &, OutVector &,
const InVector &,
const ID)>
189 void(
const MatrixFree &, OutVector &,
const InVector &,
const ID)>
192 void(
const MatrixFree &, OutVector &,
const InVector &,
const ID)>
193 & boundary_operation,
195 const InVector & src,
197 DataAccessOnFaces::unspecified,
199 DataAccessOnFaces::unspecified,
200 Timers *timers =
nullptr)
const;
207 template <
typename CLASS,
typename OutVector,
typename InVector>
213 void (CLASS::*face_operation)(
const MatrixFree &,
217 void (CLASS::*boundary_operation)(
const MatrixFree &,
221 CLASS * owning_class,
223 const InVector & src,
225 DataAccessOnFaces::unspecified,
227 DataAccessOnFaces::unspecified,
228 Timers *timers =
nullptr)
const;
245 dealii::LinearAlgebra::distributed::Vector<Number> &vec,
246 const unsigned int dof_handler_index = 0,
247 const bool do_ghosts =
true,
248 const bool zero_out_values =
true)
const;
253 dealii::types::boundary_id
263 dealii::types::boundary_id
265 const unsigned int face_number)
const;
282 const dealii::MatrixFree<dim_x, Number, VectorizedArrayTypeX> &
288 const dealii::MatrixFree<dim_v, Number, VectorizedArrayTypeV> &
318 const std::shared_ptr<
319 const dealii::internal::MatrixFreeFunctions::VectorDataExchange::Base> &
332 const MPI_Comm comm_sm;
337 const dealii::MatrixFree<dim_x, Number, VectorizedArrayTypeX>
343 const dealii::MatrixFree<dim_v, Number, VectorizedArrayTypeV>
365 const dealii::internal::MatrixFreeFunctions::VectorDataExchange::Base>
388 std::array<std::vector<ID>, 3> partitions;
393#include <hyper.deal/matrix_free/matrix_free.templates.h>
Definition matrix_free.h:40
const MPI_Comm & get_communicator() const
Definition matrix_free.templates.h:1752
const dealii::MatrixFree< dim_v, Number, VectorizedArrayTypeV > & get_matrix_free_v() const
Definition matrix_free.templates.h:1862
void cell_loop(const std::function< void(const MatrixFree &, OutVector &, const InVector &, const ID)> &cell_operation, OutVector &dst, const InVector &src) const
Definition matrix_free.templates.h:1420
MemoryConsumption memory_consumption() const
Definition matrix_free.templates.h:1899
MatrixFree(const MPI_Comm comm, const MPI_Comm comm_sm, const dealii::MatrixFree< dim_x, Number, VectorizedArrayTypeX > &matrix_free_x, const dealii::MatrixFree< dim_v, Number, VectorizedArrayTypeV > &matrix_free_v)
Definition matrix_free.templates.h:847
DataAccessOnFaces
Definition matrix_free.h:53
bool is_ecl_supported() const
Definition matrix_free.templates.h:1824
const internal::MatrixFreeFunctions::DoFInfo & get_dof_info() const
Definition matrix_free.templates.h:1872
dealii::types::boundary_id get_boundary_id(const ID macro_face) const
Definition matrix_free.templates.h:1762
dealii::types::boundary_id get_faces_by_cells_boundary_id(const TensorID ¯o_cell, const unsigned int face_number) const
Definition matrix_free.templates.h:1781
void loop_cell_centric(const std::function< void(const MatrixFree &, OutVector &, const InVector &, const ID)> &cell_operation, OutVector &dst, const InVector &src, const DataAccessOnFaces src_vector_face_access=DataAccessOnFaces::unspecified, Timers *timers=nullptr) const
Definition matrix_free.templates.h:1497
void loop(const std::function< void(const MatrixFree &, OutVector &, const InVector &, const ID)> &cell_operation, const std::function< void(const MatrixFree &, OutVector &, const InVector &, const ID)> &face_operation, const std::function< void(const MatrixFree &, OutVector &, const InVector &, const ID)> &boundary_operation, OutVector &dst, const InVector &src, const DataAccessOnFaces dst_vector_face_access=DataAccessOnFaces::unspecified, const DataAccessOnFaces src_vector_face_access=DataAccessOnFaces::unspecified, Timers *timers=nullptr) const
Definition matrix_free.templates.h:1637
const dealii::MatrixFree< dim_x, Number, VectorizedArrayTypeX > & get_matrix_free_x() const
Definition matrix_free.templates.h:1848
bool are_ghost_faces_supported() const
Definition matrix_free.templates.h:1835
const std::shared_ptr< const dealii::internal::MatrixFreeFunctions::VectorDataExchange::Base > & get_vector_partitioner() const
Definition matrix_free.templates.h:1917
void initialize_dof_vector(dealii::LinearAlgebra::distributed::Vector< Number > &vec, const unsigned int dof_handler_index=0, const bool do_ghosts=true, const bool zero_out_values=true) const
Definition matrix_free.templates.h:1369
const internal::MatrixFreeFunctions::FaceInfo & get_face_info() const
Definition matrix_free.templates.h:1881
const internal::MatrixFreeFunctions::ShapeInfo< Number > & get_shape_info() const
Definition matrix_free.templates.h:1890
void reinit(const AdditionalData &ad=AdditionalData())
Definition matrix_free.templates.h:862
Definition memory_consumption.h:349
Definition matrix_free.h:64
bool use_ecl
Definition matrix_free.h:96
bool do_ghost_faces
Definition matrix_free.h:80
bool do_buffering
Definition matrix_free.h:88
AdditionalData()
Definition matrix_free.h:68
unsigned int overlapping_level
Definition matrix_free.h:101
Definition face_info.h:17
Definition shape_info.h:19