44class ContainerInterfaceData
47 typedef dealii::Tensor<rank, dim, number_type> data_type;
50 static unsigned int const n_components = rank_to_n_components<rank, dim>();
52 using SetBoundaryIDs = std::set<dealii::types::boundary_id>;
54 using quad_index =
unsigned int;
56 using Id = std::tuple<
unsigned int ,
unsigned int ,
unsigned int >;
58 using MapVectorIndex = std::map<Id, dealii::types::global_dof_index>;
60 using ArrayQuadraturePoints = std::vector<dealii::Point<dim>>;
62 using ArraySolutionValues = std::vector<data_type>;
65 ContainerInterfaceData();
67 template<
typename Number>
69 setup(dealii::MatrixFree<dim, Number>
const & matrix_free_,
70 unsigned int const dof_index_,
71 std::vector<quad_index>
const & quad_indices_,
72 SetBoundaryIDs
const & set_bids_)
74 quad_indices = quad_indices_;
76 for(
auto q_index : quad_indices)
79 map_vector_index.emplace(q_index, MapVectorIndex());
80 map_q_points.emplace(q_index, ArrayQuadraturePoints());
81 map_solution.emplace(q_index, ArraySolutionValues());
83 MapVectorIndex & map_index = map_vector_index.find(q_index)->second;
84 ArrayQuadraturePoints & array_q_points_dst = map_q_points.find(q_index)->second;
85 ArraySolutionValues & array_solution_dst = map_solution.find(q_index)->second;
88 for(
unsigned int face = matrix_free_.n_inner_face_batches();
89 face < matrix_free_.n_inner_face_batches() + matrix_free_.n_boundary_face_batches();
93 if(set_bids_.find(matrix_free_.get_boundary_id(face)) != set_bids_.end())
95 FaceIntegrator<dim, n_components, Number> integrator(matrix_free_,
99 integrator.reinit(face);
101 for(
unsigned int q = 0; q < integrator.n_q_points; ++q)
103 dealii::Point<dim, dealii::VectorizedArray<Number>> q_points =
104 integrator.quadrature_point(q);
106 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
108 dealii::Point<dim> q_point;
109 for(
unsigned int d = 0; d < dim; ++d)
110 q_point[d] = q_points[d][v];
112 Id
id = std::make_tuple(face, q, v);
113 dealii::types::global_dof_index index = array_q_points_dst.size();
114 map_index.emplace(
id, index);
115 array_q_points_dst.push_back(q_point);
121 array_solution_dst.resize(array_q_points_dst.size(), data_type());
125 std::vector<quad_index>
const &
128 ArrayQuadraturePoints &
129 get_array_q_points(quad_index
const & q_index);
131 ArraySolutionValues &
132 get_array_solution(quad_index
const & q_index);
135 get_data(
unsigned int const q_index,
136 unsigned int const face,
137 unsigned int const q,
138 unsigned int const v)
const;
141 std::vector<quad_index> quad_indices;
143 mutable std::map<quad_index, MapVectorIndex> map_vector_index;
144 mutable std::map<quad_index, ArrayQuadraturePoints> map_q_points;
145 mutable std::map<quad_index, ArraySolutionValues> map_solution;