45class ContainerInterfaceData
48 typedef dealii::Tensor<rank, dim, number_type> data_type;
51 static unsigned int const n_components = rank_to_n_components<rank, dim>();
53 using SetBoundaryIDs = std::set<dealii::types::boundary_id>;
55 using quad_index =
unsigned int;
57 using Id = std::tuple<
unsigned int ,
unsigned int ,
unsigned int >;
59 using MapVectorIndex = std::map<Id, dealii::types::global_dof_index>;
61 using ArrayQuadraturePoints = std::vector<dealii::Point<dim>>;
63 using ArraySolutionValues = std::vector<data_type>;
66 ContainerInterfaceData();
68 template<
typename Number>
70 setup(dealii::MatrixFree<dim, Number>
const & matrix_free_,
71 unsigned int const dof_index_,
72 std::vector<quad_index>
const & quad_indices_,
73 SetBoundaryIDs
const & set_bids_)
75 quad_indices = quad_indices_;
77 for(
auto q_index : quad_indices)
80 map_vector_index.emplace(q_index, MapVectorIndex());
81 map_q_points.emplace(q_index, ArrayQuadraturePoints());
82 map_solution.emplace(q_index, ArraySolutionValues());
84 MapVectorIndex & map_index = map_vector_index.find(q_index)->second;
85 ArrayQuadraturePoints & array_q_points_dst = map_q_points.find(q_index)->second;
86 ArraySolutionValues & array_solution_dst = map_solution.find(q_index)->second;
89 for(
unsigned int face = matrix_free_.n_inner_face_batches();
90 face < matrix_free_.n_inner_face_batches() + matrix_free_.n_boundary_face_batches();
94 if(set_bids_.find(matrix_free_.get_boundary_id(face)) != set_bids_.end())
96 FaceIntegrator<dim, n_components, Number> integrator(matrix_free_,
100 integrator.reinit(face);
102 for(
unsigned int q = 0; q < integrator.n_q_points; ++q)
104 dealii::Point<dim, dealii::VectorizedArray<Number>> q_points =
105 integrator.quadrature_point(q);
107 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
109 dealii::Point<dim> q_point;
110 for(
unsigned int d = 0; d < dim; ++d)
111 q_point[d] = q_points[d][v];
113 Id
id = std::make_tuple(face, q, v);
114 dealii::types::global_dof_index index = array_q_points_dst.size();
115 map_index.emplace(
id, index);
116 array_q_points_dst.push_back(q_point);
122 array_solution_dst.resize(array_q_points_dst.size(), data_type());
126 std::vector<quad_index>
const &
129 ArrayQuadraturePoints &
130 get_array_q_points(quad_index
const & q_index);
132 ArraySolutionValues &
133 get_array_solution(quad_index
const & q_index);
136 get_data(
unsigned int const q_index,
137 unsigned int const face,
138 unsigned int const q,
139 unsigned int const v)
const;
142 std::vector<quad_index> quad_indices;
144 mutable std::map<quad_index, MapVectorIndex> map_vector_index;
145 mutable std::map<quad_index, ArrayQuadraturePoints> map_q_points;
146 mutable std::map<quad_index, ArraySolutionValues> map_solution;