53 template <
int dim,
int spacedim>
58 const std::vector<unsigned int> &n_postprocessor_outputs,
67 n_postprocessor_outputs,
81 template <
int dim,
int spacedim>
93 for (
unsigned int i = 0; i < new_patches.size(); ++i)
95 patches.push_back(new_patches[i]);
96 patches.back().patch_index = patches.size() - 1;
104template <
int dim,
int spacedim>
130 std::vector<Point<dim + 1>> angle_directions(n_patches_per_circle + 1);
131 for (
unsigned int i = 0; i <= n_patches_per_circle; ++i)
133 angle_directions[i][dim - 1] =
135 angle_directions[i][dim] =
139 for (
unsigned int angle = 0; angle < n_patches_per_circle; ++angle)
148 const double r1 = (*cell)->vertex(0)[0],
149 r2 = (*cell)->vertex(1)[0];
153 my_patches[angle].vertices[0] = r1 * angle_directions[angle];
154 my_patches[angle].vertices[1] = r2 * angle_directions[angle];
155 my_patches[angle].vertices[2] = r1 * angle_directions[angle + 1];
156 my_patches[angle].vertices[3] = r2 * angle_directions[angle + 1];
163 for (
const unsigned int vertex :
172 my_patches[angle].vertices[vertex] =
173 v[0] * angle_directions[angle];
174 my_patches[angle].vertices[vertex][0] = v[1];
178 v[0] * angle_directions[angle + 1];
194 unsigned int offset = 0;
198 for (
unsigned int dataset = 0; dataset < this->
dof_data.size();
203 const unsigned int n_components =
206 this->
dof_data[dataset]->postprocessor;
207 if (postprocessor !=
nullptr)
212 const UpdateFlags update_flags =
215 if (n_components == 1)
221 this->
dof_data[dataset]->get_function_values(
227 this->
dof_data[dataset]->get_function_gradients(
233 this->
dof_data[dataset]->get_function_hessians(
244 spacedim>::active_cell_iterator
245 dh_cell(&(*cell)->get_triangulation(),
248 this->dof_data[dataset]->dof_handler);
262 this->
dof_data[dataset]->get_function_values(
268 this->
dof_data[dataset]->get_function_gradients(
274 this->
dof_data[dataset]->get_function_hessians(
285 spacedim>::active_cell_iterator
286 dh_cell(&(*cell)->get_triangulation(),
289 this->dof_data[dataset]->dof_handler);
297 for (
unsigned int component = 0;
298 component < this->
dof_data[dataset]->n_output_variables;
304 for (
unsigned int x = 0; x < n_points; ++x)
305 for (
unsigned int y = 0; y < n_points; ++y)
306 my_patches[angle].data(offset + component,
313 for (
unsigned int x = 0; x < n_points; ++x)
314 for (
unsigned int y = 0; y < n_points; ++y)
315 for (
unsigned int z = 0; z < n_points; ++z)
316 my_patches[angle].data(offset + component,
330 else if (n_components == 1)
332 this->
dof_data[dataset]->get_function_values(
341 for (
unsigned int x = 0; x < n_points; ++x)
342 for (
unsigned int y = 0; y < n_points; ++y)
343 my_patches[angle].data(offset, x * n_points + y) =
348 for (
unsigned int x = 0; x < n_points; ++x)
349 for (
unsigned int y = 0; y < n_points; ++y)
350 for (
unsigned int z = 0; z < n_points; ++z)
351 my_patches[angle].data(offset,
352 x * n_points * n_points +
355 .solution_values[x * n_points + z];
366 this->
dof_data[dataset]->get_function_values(
372 for (
unsigned int component = 0; component < n_components;
378 for (
unsigned int x = 0; x < n_points; ++x)
379 for (
unsigned int y = 0; y < n_points; ++y)
380 my_patches[angle].data(offset + component,
387 for (
unsigned int x = 0; x < n_points; ++x)
388 for (
unsigned int y = 0; y < n_points; ++y)
389 for (
unsigned int z = 0; z < n_points; ++z)
390 my_patches[angle].data(offset + component,
395 .solution_values[x * n_points + z](
404 offset += this->
dof_data[dataset]->n_output_variables;
408 for (
unsigned int dataset = 0; dataset < this->
cell_data.size();
414 Assert((*cell)->is_active(),
415 ExcMessage(
"Cell must be active for cell data"));
416 const unsigned int cell_number = std::distance(
421 this->
cell_data[dataset]->get_cell_data_value(
428 for (
unsigned int x = 0; x < n_points; ++x)
429 for (
unsigned int y = 0; y < n_points; ++y)
430 my_patches[angle].data(dataset + offset,
431 x * n_points + y) =
value;
435 for (
unsigned int x = 0; x < n_points; ++x)
436 for (
unsigned int y = 0; y < n_points; ++y)
437 for (
unsigned int z = 0; z < n_points; ++z)
438 my_patches[angle].data(dataset + offset,
439 x * n_points * n_points +
440 y * n_points + z) =
value;
453template <
int dim,
int spacedim>
456 const unsigned int n_patches_per_circle,
457 const unsigned int nnnn_subdivisions)
462 const unsigned int n_subdivisions =
464 Assert(n_subdivisions >= 1,
470 unsigned int n_datasets = this->
cell_data.size();
471 for (
unsigned int i = 0; i < this->
dof_data.size(); ++i)
472 n_datasets += this->
dof_data[i]->n_output_variables;
475 for (
unsigned int i = 0; i < this->
dof_data.size(); ++i)
476 if (this->
dof_data[i]->postprocessor)
478 this->
dof_data[i]->postprocessor->get_needed_update_flags();
483 ExcMessage(
"The update of normal vectors may not be requested for "
484 "evaluation of data on cells via DataPostprocessor."));
489 std::vector<cell_iterator> all_cells;
492 all_cells.push_back(cell);
500 this->
patches.reserve(all_cells.size() * n_patches_per_circle);
503 std::vector<unsigned int> n_postprocessor_outputs(this->
dof_data.size());
504 for (
unsigned int dataset = 0; dataset < this->
dof_data.size(); ++dataset)
505 if (this->
dof_data[dataset]->postprocessor)
506 n_postprocessor_outputs[dataset] =
507 this->
dof_data[dataset]->n_output_variables;
509 n_postprocessor_outputs[dataset] = 0;
512 const auto reference_cell = this->
triangulation->get_reference_cells()[0];
514 thread_data(n_datasets,
516 n_patches_per_circle,
517 n_postprocessor_outputs,
521 std::vector<DataOutBase::Patch<patch_dim, patch_spacedim>> new_patches(
522 n_patches_per_circle);
523 for (
unsigned int i = 0; i < new_patches.size(); ++i)
525 new_patches[i].n_subdivisions = n_subdivisions;
528 new_patches[i].data.reinit(
535 all_cells.data() + all_cells.size(),
541 this->build_one_patch(cell, data, my_patches);
545 internal::DataOutRotationImplementation::append_patch_to_list<dim,
547 new_patches, this->patches);
555template <
int dim,
int spacedim>
563template <
int dim,
int spacedim>
579#include "numerics/data_out_rotation.inst"
unsigned int default_subdivisions
void validate_dataset_names() const
virtual void build_patches(const unsigned int n_patches_per_circle, const unsigned int n_subdivisions=0)
typename DataOut_DoFData< dim, patch_dim, spacedim, patch_spacedim >:: cell_iterator cell_iterator
static constexpr int patch_dim
void build_one_patch(const cell_iterator *cell, internal::DataOutRotationImplementation::ParallelData< dim, spacedim > &data, std::vector< DataOutBase::Patch< patch_dim, patch_spacedim > > &my_patches)
virtual cell_iterator next_cell(const cell_iterator &cell)
static constexpr int patch_spacedim
virtual cell_iterator first_cell()
std::vector< std::shared_ptr< internal::DataOutImplementation::DataEntryBase< dim, spacedim > > > cell_data
std::vector< Patch > patches
std::vector< std::shared_ptr< internal::DataOutImplementation::DataEntryBase< dim, spacedim > > > dof_data
ObserverPointer< const Triangulation< dim, spacedim > > triangulation
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
const std::vector< Point< spacedim > > & get_quadrature_points() const
const FiniteElement< dim, spacedim > & get_fe() const
unsigned int n_components() const
Abstract base class for mapping classes.
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_NOT_IMPLEMENTED()
static ::ExceptionBase & ExcInvalidNumberOfSubdivisions(int arg1)
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
static ::ExceptionBase & ExcRadialVariableHasNegativeValues(double arg1)
static ::ExceptionBase & ExcNoTriangulationSelected()
static ::ExceptionBase & ExcMessage(std::string arg1)
TriaActiveIterator< CellAccessor< dim, spacedim > > active_cell_iterator
const bool IsBlockVector< VectorType >::value
@ update_hessians
Second derivatives of shape functions.
@ update_values
Shape function values.
@ update_normal_vectors
Normal vectors.
@ update_gradients
Shape function gradients.
@ update_quadrature_points
Transformed quadrature points.
const Mapping< dim, spacedim > & get_default_linear_mapping(const Triangulation< dim, spacedim > &triangulation)
MappingQ< dim, spacedim > StaticMappingQ1< dim, spacedim >::mapping
constexpr const ReferenceCell< dim > & get_hypercube()
constexpr T fixed_power(const T t)
void run(const std::vector< std::vector< Iterator > > &colored_iterators, Worker worker, Copier copier, const ScratchData &sample_scratch_data, const CopyData &sample_copy_data, const unsigned int queue_length=2 *MultithreadInfo::n_threads(), const unsigned int chunk_size=8)
void append_patch_to_list(const std::vector< DataOutBase::Patch< DataOutRotation< dim, spacedim >::patch_dim, DataOutRotation< dim, spacedim >::patch_spacedim > > &new_patches, std::vector< DataOutBase::Patch< DataOutRotation< dim, spacedim >::patch_dim, DataOutRotation< dim, spacedim >::patch_spacedim > > &patches)
::VectorizedArray< Number, width > cos(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > sin(const ::VectorizedArray< Number, width > &)
static constexpr unsigned int vertices_per_cell
static std_cxx20::ranges::iota_view< unsigned int, unsigned int > vertex_indices()
const FEValuesBase< dim, spacedim > & get_present_fe_values(const unsigned int dataset) const
const unsigned int n_datasets
DataPostprocessorInputs::Scalar< spacedim > patch_values_scalar
ParallelDataBase(const unsigned int n_datasets, const unsigned int n_subdivisions, const std::vector< unsigned int > &n_postprocessor_outputs, const Mapping< dim, spacedim > &mapping, const std::vector< std::shared_ptr<::hp::FECollection< dim, spacedim > > > &finite_elements, const UpdateFlags update_flags, const bool use_face_values)
const unsigned int n_subdivisions
const std::vector< std::shared_ptr<::hp::FECollection< dim, spacedim > > > finite_elements
std::vector< std::vector<::Vector< double > > > postprocessed_values
DataPostprocessorInputs::Vector< spacedim > patch_values_system
void reinit_all_fe_values(std::vector< std::shared_ptr< DataEntryBase< dim, spacedim > > > &dof_data, const typename ::Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face=numbers::invalid_unsigned_int)
const UpdateFlags update_flags
void resize_system_vectors(const unsigned int n_components)
const unsigned int n_patches_per_circle
ParallelData(const unsigned int n_datasets, const unsigned int n_subdivisions, const unsigned int n_patches_per_circle, const std::vector< unsigned int > &n_postprocessor_outputs, const Mapping< dim, spacedim > &mapping, const std::vector< std::shared_ptr<::hp::FECollection< dim, spacedim > > > &finite_elements, const UpdateFlags update_flags)