100 const unsigned int face_number = cell_and_face->second;
112 for (
const unsigned int vertex : cell->face(face_number)->vertex_indices())
114 const Point<dim> vertex_reference_coordinates =
115 cell->reference_cell().vertex(
116 cell->reference_cell().face_to_cell_vertices(
117 face_number, vertex, cell->combined_face_orientation(face_number)));
120 data.mapping_collection[0].transform_unit_to_real_cell(
121 cell, vertex_reference_coordinates);
123 patch.
vertices[vertex] = vertex_real_coordinates;
127 if (
data.n_datasets > 0)
129 data.reinit_all_fe_values(this->dof_data, cell, face_number);
136 const std::vector<Point<dim>> &q_points =
140 patch.
data.reinit(
data.n_datasets + dim, q_points.size());
145 for (
unsigned int i = 0; i < dim; ++i)
146 for (
unsigned int q = 0; q < n_q_points; ++q)
147 patch.
data(patch.
data.size(0) - dim + i, q) = q_points[q][i];
150 unsigned int offset = 0;
153 for (
unsigned int dataset = 0; dataset < this->dof_data.size(); ++dataset)
156 data.get_present_fe_values(dataset);
157 const unsigned int n_components =
160 this->dof_data[dataset]->postprocessor;
161 if (postprocessor !=
nullptr)
168 if (n_components == 1)
173 this->dof_data[dataset]->get_function_values(
174 this_fe_patch_values,
177 data.patch_values_scalar.solution_values);
179 this->dof_data[dataset]->get_function_gradients(
180 this_fe_patch_values,
183 data.patch_values_scalar.solution_gradients);
185 this->dof_data[dataset]->get_function_hessians(
186 this_fe_patch_values,
189 data.patch_values_scalar.solution_hessians);
192 data.patch_values_scalar.evaluation_points =
196 data.patch_values_scalar.normals =
200 dh_cell(&cell->get_triangulation(),
203 this->dof_data[dataset]->dof_handler);
204 data.patch_values_scalar.template set_cell_and_face<dim>(
205 dh_cell, face_number);
208 data.patch_values_scalar,
209 data.postprocessed_values[dataset]);
215 data.resize_system_vectors(n_components);
217 this->dof_data[dataset]->get_function_values(
218 this_fe_patch_values,
221 data.patch_values_system.solution_values);
223 this->dof_data[dataset]->get_function_gradients(
224 this_fe_patch_values,
227 data.patch_values_system.solution_gradients);
229 this->dof_data[dataset]->get_function_hessians(
230 this_fe_patch_values,
233 data.patch_values_system.solution_hessians);
236 data.patch_values_system.evaluation_points =
240 data.patch_values_system.normals =
244 dh_cell(&cell->get_triangulation(),
247 this->dof_data[dataset]->dof_handler);
248 data.patch_values_system.template set_cell_and_face<dim>(
249 dh_cell, face_number);
252 data.patch_values_system,
253 data.postprocessed_values[dataset]);
256 for (
unsigned int q = 0; q < n_q_points; ++q)
257 for (
unsigned int component = 0;
258 component < this->dof_data[dataset]->n_output_variables;
260 patch.
data(offset + component, q) =
261 data.postprocessed_values[dataset][q](component);
267 if (n_components == 1)
269 this->dof_data[dataset]->get_function_values(
270 this_fe_patch_values,
273 data.patch_values_scalar.solution_values);
274 for (
unsigned int q = 0; q < n_q_points; ++q)
275 patch.
data(offset, q) =
276 data.patch_values_scalar.solution_values[q];
280 data.resize_system_vectors(n_components);
281 this->dof_data[dataset]->get_function_values(
282 this_fe_patch_values,
285 data.patch_values_system.solution_values);
286 for (
unsigned int component = 0; component < n_components;
288 for (
unsigned int q = 0; q < n_q_points; ++q)
289 patch.
data(offset + component, q) =
290 data.patch_values_system.solution_values[q](component);
293 offset += this->dof_data[dataset]->n_output_variables;
297 for (
unsigned int dataset = 0; dataset < this->cell_data.size();
306 "The current function is trying to generate cell-data output "
307 "for a face that does not belong to an active cell. This is "
309 const unsigned int cell_number = std::distance(
310 this->triangulation->begin_active(),
313 const double value = this->cell_data[dataset]->get_cell_data_value(
316 for (
unsigned int q = 0; q < n_q_points; ++q)
317 patch.
data(dataset + offset, q) = value;
345 const unsigned int n_subdivisions_)
347 const unsigned int n_subdivisions =
348 (n_subdivisions_ != 0) ? n_subdivisions_ : this->default_subdivisions;
350 Assert(n_subdivisions >= 1,
354 Assert(this->triangulation !=
nullptr,
357 this->validate_dataset_names();
359 unsigned int n_datasets = this->cell_data.size();
360 for (
unsigned int i = 0; i < this->dof_data.size(); ++i)
361 n_datasets += this->dof_data[i]->n_output_variables;
367 std::vector<FaceDescriptor> all_faces;
369 ((face.first != this->triangulation->end()) &&
371 face = next_face(face))
372 all_faces.push_back(face);
375 this->patches.clear();
376 this->patches.reserve(all_faces.size());
380 std::vector<unsigned int> n_postprocessor_outputs(this->dof_data.size());
381 for (
unsigned int dataset = 0; dataset < this->dof_data.size(); ++dataset)
382 if (this->dof_data[dataset]->postprocessor)
383 n_postprocessor_outputs[dataset] =
384 this->dof_data[dataset]->n_output_variables;
386 n_postprocessor_outputs[dataset] = 0;
389 for (
unsigned int i = 0; i < this->dof_data.size(); ++i)
390 if (this->dof_data[i]->postprocessor)
392 this->dof_data[i]->postprocessor->get_needed_update_flags();
398 n_postprocessor_outputs,
408 all_faces.data() + all_faces.size(),
413 this->build_one_patch(cell_and_face, data, patch);
416 internal::DataOutFacesImplementation::append_patch_to_list<dim, spacedim>(
417 patch, this->patches);
virtual UpdateFlags get_needed_update_flags() const =0
virtual void evaluate_vector_field(const DataPostprocessorInputs::Vector< dim > &input_data, std::vector< Vector< double > > &computed_quantities) const
virtual void evaluate_scalar_field(const DataPostprocessorInputs::Scalar< dim > &input_data, std::vector< Vector< double > > &computed_quantities) const