deal.II version GIT relicensing-6809-ge913b9bb34 2026-09-25 17:20:01+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
data_out_dof_data.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 1999 - 2025 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13#ifndef dealii_data_out_dof_data_h
14#define dealii_data_out_dof_data_h
15
16
17
18#include <deal.II/base/config.h>
19
23
25
26#include <deal.II/fe/mapping.h>
27
28#include <deal.II/grid/tria.h>
29
34
37
38#include <memory>
39
41
42namespace Exceptions
43{
48 namespace DataOutImplementation
49 {
54 int,
55 << "The number of subdivisions per patch, " << arg1
56 << ", is not valid. It needs to be greater or equal to "
57 "one, or zero if you want it to be determined "
58 "automatically.");
59
64 "For the operation you are attempting, you first need to "
65 "tell the DataOut or related object which DoFHandler or "
66 "triangulation you would like to work on. This is "
67 "generally done using the 'attach_dof_handler()' or "
68 "'attach_triangulation()' member functions.");
69
74 "For the operation you are attempting, you first need to "
75 "tell the DataOut or related object which DoFHandler "
76 "you would like to work on. This is "
77 "generally done using the 'attach_dof_handler()' "
78 "member function.");
79
84 int,
85 int,
86 int,
87 << "The vector has size " << arg1
88 << " but the DoFHandler object says that there are " << arg2
89 << " degrees of freedom and there are " << arg3
90 << " active cells. The size of your vector needs to be"
91 << " either equal to the number of degrees of freedom (when"
92 << " the data is of type type_dof_data), or equal to the"
93 << " number of active cells (when the data is of type "
94 << " type_cell_data).");
100 std::string,
101 std::size_t,
102 << "Please use only the characters [a-zA-Z0-9_<>()] for" << std::endl
103 << "description strings since some graphics formats will only accept these."
104 << std::endl
105 << "The string you gave was <" << arg1
106 << ">, within which the invalid character is <" << arg1[arg2] << ">."
107 << std::endl);
113 "When attaching a triangulation or DoFHandler object, it is "
114 "not allowed if old data vectors are still referenced. If "
115 "you want to reuse an object of the current type, you first "
116 "need to call the 'clear_data_vector()' function.");
121 int,
122 int,
123 << "You have to give one name per component in your "
124 << "data vector. The number you gave was " << arg1
125 << ", but the number of components is " << arg2 << '.');
130 "While merging sets of patches, the two sets to be merged "
131 "need to refer to data that agrees on the names of the "
132 "various variables represented. In other words, you "
133 "cannot merge sets of patches that originate from "
134 "entirely unrelated simulations.");
139 "While merging sets of patches, the two sets to be merged "
140 "need to refer to data that agrees on the number of "
141 "subdivisions and other properties. In other words, you "
142 "cannot merge sets of patches that originate from "
143 "entirely unrelated simulations.");
144
146 int,
147 std::string,
148 << "When declaring that a number of components in a data "
149 << "set to be output logically form a vector instead of "
150 << "simply a set of scalar fields, you need to specify "
151 << "this for all relevant components. Furthermore, "
152 << "vectors must always consist of exactly <dim> "
153 << "components. However, the vector component at "
154 << "position " << arg1 << " with name <" << arg2
155 << "> does not satisfy these conditions.");
156
158 int,
159 std::string,
160 << "When declaring that a number of components in a data "
161 << "set to be output logically form a tensor instead of "
162 << "simply a set of scalar fields, you need to specify "
163 << "this for all relevant components. Furthermore, "
164 << "tensors must always consist of exactly <dim*dim> "
165 << "components. However, the tensor component at "
166 << "position " << arg1 << " with name <" << arg2
167 << "> does not satisfy these conditions.");
168
169 } // namespace DataOutImplementation
170} // namespace Exceptions
171
172
173namespace internal
174{
175 namespace DataOutImplementation
176 {
201 {
202 real_part,
204 };
205
206
222 template <int dim, int spacedim>
224 {
225 public:
232 const std::vector<std::string> &names,
233 const std::vector<
236
243 const DataPostprocessor<spacedim> *data_postprocessor);
244
248 virtual ~DataEntryBase() = default;
249
254 virtual double
255 get_cell_data_value(const unsigned int cell_number,
256 const ComponentExtractor extract_component) const = 0;
257
262 virtual void
264 const ComponentExtractor extract_component,
265 std::vector<double> &patch_values) const = 0;
266
272 virtual void
274 const FEValuesBase<dim, spacedim> &fe_patch_values,
275 const ComponentExtractor extract_component,
276 std::vector<::Vector<double>> &patch_values_system) const = 0;
277
282 virtual void
284 const FEValuesBase<dim, spacedim> &fe_patch_values,
285 const ComponentExtractor extract_component,
286 std::vector<Tensor<1, spacedim>> &patch_gradients) const = 0;
287
293 virtual void
295 const ComponentExtractor extract_component,
296 std::vector<std::vector<Tensor<1, spacedim>>>
297 &patch_gradients_system) const = 0;
298
303 virtual void
305 const FEValuesBase<dim, spacedim> &fe_patch_values,
306 const ComponentExtractor extract_component,
307 std::vector<Tensor<2, spacedim>> &patch_hessians) const = 0;
308
314 virtual void
316 const ComponentExtractor extract_component,
317 std::vector<std::vector<Tensor<2, spacedim>>>
318 &patch_hessians_system) const = 0;
319
324 virtual bool
325 is_complex_valued() const = 0;
326
330 virtual void
331 clear() = 0;
332
337 virtual std::size_t
339
344
348 const std::vector<std::string> names;
349
355 const std::vector<
358
364
371 unsigned int n_output_variables;
372 };
373
374
391 template <int dim, int spacedim>
393 {
395 const unsigned int n_datasets,
396 const unsigned int n_subdivisions,
397 const std::vector<unsigned int> &n_postprocessor_outputs,
398 const Mapping<dim, spacedim> &mapping,
399 const std::vector<
400 std::shared_ptr<::hp::FECollection<dim, spacedim>>>
403 const bool use_face_values);
404
406 const unsigned int n_datasets,
407 const unsigned int n_subdivisions,
408 const std::vector<unsigned int> &n_postprocessor_outputs,
409 const ::hp::MappingCollection<dim, spacedim> &mapping,
410 const std::vector<
411 std::shared_ptr<::hp::FECollection<dim, spacedim>>>
414 const bool use_face_values);
415
417
418 void
420 std::vector<std::shared_ptr<DataEntryBase<dim, spacedim>>> &dof_data,
421 const typename ::Triangulation<dim, spacedim>::cell_iterator
422 &cell,
423 const unsigned int face = numbers::invalid_unsigned_int);
424
426 get_present_fe_values(const unsigned int dataset) const;
427
428 void
429 resize_system_vectors(const unsigned int n_components);
430
431 const unsigned int n_datasets;
432 const unsigned int n_subdivisions;
433
436 std::vector<std::vector<::Vector<double>>> postprocessed_values;
437
438 const ::hp::MappingCollection<dim, spacedim> mapping_collection;
439 const std::vector<
440 std::shared_ptr<::hp::FECollection<dim, spacedim>>>
443
444 std::vector<std::shared_ptr<::hp::FEValues<dim, spacedim>>>
446 std::vector<std::shared_ptr<::hp::FEFaceValues<dim, spacedim>>>
448 };
449 } // namespace DataOutImplementation
450} // namespace internal
451
452
453// TODO: Most of the documentation of DataOut_DoFData applies to DataOut.
454
590template <int dim,
591 int patch_dim,
592 int spacedim = dim,
593 int patch_spacedim = patch_dim>
594class DataOut_DoFData : public DataOutInterface<patch_dim, patch_spacedim>
595{
596public:
602
603public:
629
634
638 virtual ~DataOut_DoFData() override;
639
648 void
650
660 void
662
726 template <typename VectorType>
727 void
729 const VectorType &data,
730 const std::vector<std::string> &names,
731 const DataVectorType type = type_automatic,
732 const std::vector<DataComponentInterpretation::DataComponentInterpretation>
733 &data_component_interpretation = {});
734
751 template <typename VectorType>
752 void
754 const VectorType &data,
755 const std::string &name,
756 const DataVectorType type = type_automatic,
757 const std::vector<DataComponentInterpretation::DataComponentInterpretation>
758 &data_component_interpretation = {});
759
775 template <typename VectorType>
776 void
778 const DoFHandler<dim, spacedim> &dof_handler,
779 const VectorType &data,
780 const std::vector<std::string> &names,
781 const std::vector<DataComponentInterpretation::DataComponentInterpretation>
782 &data_component_interpretation = {});
783
784
789 template <typename VectorType>
790 void
792 const DoFHandler<dim, spacedim> &dof_handler,
793 const VectorType &data,
794 const std::string &name,
795 const std::vector<DataComponentInterpretation::DataComponentInterpretation>
796 &data_component_interpretation = {});
797
824 template <typename VectorType>
825 void
826 add_data_vector(const VectorType &data,
827 const DataPostprocessor<spacedim> &data_postprocessor);
828
835 template <typename VectorType>
836 void
838 const VectorType &data,
839 const DataPostprocessor<spacedim> &data_postprocessor);
840
858 template <typename VectorType>
859 void
861 const DoFHandler<dim, spacedim> &dof_handler,
863 const std::vector<std::string> &names,
864 const std::vector<DataComponentInterpretation::DataComponentInterpretation>
865 &data_component_interpretation = std::vector<
867
871 template <typename VectorType>
872 void
875 const std::string &name);
876
883 void
885
896 void
898
922 template <int dim2, int spacedim2>
923 void
927
934 virtual void
936
941 std::size_t
943
944protected:
949
954
959
963 std::vector<std::shared_ptr<
966
970 std::vector<std::shared_ptr<
973
979 std::vector<Patch> patches;
980
985public:
986 virtual const std::vector<Patch> &
987 get_patches() const override;
988
989protected:
994 virtual std::vector<std::string>
995 get_dataset_names() const override;
996
1001 virtual std::vector<
1002 std::tuple<unsigned int,
1003 unsigned int,
1004 std::string,
1007
1008protected:
1013 std::vector<std::shared_ptr<::hp::FECollection<dim, spacedim>>>
1014 get_fes() const;
1015
1016 // Make all template siblings friends. Needed for the merge_patches()
1017 // function.
1018 template <int, int, int, int>
1019 friend class DataOut_DoFData;
1020
1023 template <int, class>
1024 friend class MGDataOut;
1025
1026private:
1030 template <typename VectorType>
1031 void
1033 const DoFHandler<dim, spacedim> *dof_handler,
1034 const VectorType &data,
1035 const std::vector<std::string> &names,
1036 const DataVectorType type,
1037 const std::vector<DataComponentInterpretation::DataComponentInterpretation>
1038 &data_component_interpretation,
1039 const bool deduce_output_names);
1040};
1041
1042
1043
1044// -------------------- template and inline functions ------------------------
1045template <int dim, int patch_dim, int spacedim, int patch_spacedim>
1046template <typename VectorType>
1047void
1049 const VectorType &vec,
1050 const std::string &name,
1051 const DataVectorType type,
1052 const std::vector<DataComponentInterpretation::DataComponentInterpretation>
1053 &data_component_interpretation)
1054{
1055 Assert(triangulation != nullptr,
1057 std::vector<std::string> names(1, name);
1058 add_data_vector_internal(
1059 dofs, vec, names, type, data_component_interpretation, true);
1060}
1061
1062
1063
1064template <int dim, int patch_dim, int spacedim, int patch_spacedim>
1065template <typename VectorType>
1066void
1068 const VectorType &vec,
1069 const std::vector<std::string> &names,
1070 const DataVectorType type,
1071 const std::vector<DataComponentInterpretation::DataComponentInterpretation>
1072 &data_component_interpretation)
1073{
1074 Assert(triangulation != nullptr,
1076 add_data_vector_internal(
1077 dofs, vec, names, type, data_component_interpretation, false);
1078}
1079
1080
1081
1082template <int dim, int patch_dim, int spacedim, int patch_spacedim>
1083template <typename VectorType>
1084void
1086 const DoFHandler<dim, spacedim> &dof_handler,
1087 const VectorType &data,
1088 const std::string &name,
1089 const std::vector<DataComponentInterpretation::DataComponentInterpretation>
1090 &data_component_interpretation)
1091{
1092 std::vector<std::string> names(1, name);
1093 add_data_vector_internal(&dof_handler,
1094 data,
1095 names,
1096 type_dof_data,
1097 data_component_interpretation,
1098 true);
1099}
1100
1101
1102
1103template <int dim, int patch_dim, int spacedim, int patch_spacedim>
1104template <typename VectorType>
1105void
1107 const DoFHandler<dim, spacedim> &dof_handler,
1108 const VectorType &data,
1109 const std::vector<std::string> &names,
1110 const std::vector<DataComponentInterpretation::DataComponentInterpretation>
1111 &data_component_interpretation)
1112{
1113 add_data_vector_internal(&dof_handler,
1114 data,
1115 names,
1116 type_dof_data,
1117 data_component_interpretation,
1118 false);
1119}
1120
1121
1122
1123template <int dim, int patch_dim, int spacedim, int patch_spacedim>
1124template <typename VectorType>
1125void
1127 const VectorType &vec,
1128 const DataPostprocessor<spacedim> &data_postprocessor)
1129{
1130 Assert(dofs != nullptr,
1132 add_data_vector(*dofs, vec, data_postprocessor);
1133}
1134
1135
1136
1137template <int dim, int patch_dim, int spacedim, int patch_spacedim>
1138template <int dim2, int spacedim2>
1139void
1142 const Point<patch_spacedim> &shift)
1143{
1144 const std::vector<Patch> &source_patches = source.get_patches();
1145 Assert((patches.size() != 0) && (source_patches.size() != 0),
1146 ExcMessage("When calling this function, both the current "
1147 "object and the one being merged need to have a "
1148 "nonzero number of patches associated with it. "
1149 "Either you called this function on objects that "
1150 "are empty, or you may have forgotten to call "
1151 "the 'build_patches()' function."));
1152 // Check equality of component names
1153 Assert(get_dataset_names() == source.get_dataset_names(),
1155
1156 // Make sure patches are compatible. Ideally, we would check that all input
1157 // patches from both collections are all compatible, but we'll be content
1158 // with checking that just the first ones from both sources are.
1159 //
1160 // We check compatibility by testing that both sets of patches result
1161 // from the same number of subdivisions, and that they have the same
1162 // number of source vectors (they really should, since we already checked
1163 // that there are the same number of source components above, but you
1164 // never know). This implies that the data should have the same number of
1165 // columns. They should really have the same number of rows as well,
1166 // but depending on whether a patch has points included or not, the
1167 // number of rows may or may not include coordinates for the points,
1168 // and the comparison has to account for that because in each source
1169 // stream, the patches may include some that have points included.
1170 Assert(patches[0].n_subdivisions == source_patches[0].n_subdivisions,
1172 Assert(patches[0].data.n_cols() == source_patches[0].data.n_cols(),
1174 Assert((patches[0].data.n_rows() +
1175 (patches[0].points_are_available ? 0 : patch_spacedim)) ==
1176 (source_patches[0].data.n_rows() +
1177 (source_patches[0].points_are_available ? 0 : patch_spacedim)),
1179
1180 // check equality of the vector data
1181 // specifications
1182 Assert(get_nonscalar_data_ranges().size() ==
1183 source.get_nonscalar_data_ranges().size(),
1184 ExcMessage("Both sources need to declare the same components "
1185 "as vectors."));
1186 for (unsigned int i = 0; i < get_nonscalar_data_ranges().size(); ++i)
1187 {
1188 Assert(std::get<0>(get_nonscalar_data_ranges()[i]) ==
1189 std::get<0>(source.get_nonscalar_data_ranges()[i]),
1190 ExcMessage("Both sources need to declare the same components "
1191 "as vectors."));
1192 Assert(std::get<1>(get_nonscalar_data_ranges()[i]) ==
1193 std::get<1>(source.get_nonscalar_data_ranges()[i]),
1194 ExcMessage("Both sources need to declare the same components "
1195 "as vectors."));
1196 Assert(std::get<2>(get_nonscalar_data_ranges()[i]) ==
1197 std::get<2>(source.get_nonscalar_data_ranges()[i]),
1198 ExcMessage("Both sources need to declare the same components "
1199 "as vectors."));
1200 }
1201
1202 // merge patches. store old number
1203 // of elements, since we need to
1204 // adjust patch numbers, etc
1205 // afterwards
1206 const unsigned int old_n_patches = patches.size();
1207 patches.insert(patches.end(), source_patches.begin(), source_patches.end());
1208
1209 // perform shift, if so desired
1210 if (shift != Point<patch_spacedim>())
1211 for (unsigned int i = old_n_patches; i < patches.size(); ++i)
1212 for (const unsigned int v : GeometryInfo<patch_dim>::vertex_indices())
1213 patches[i].vertices[v] += shift;
1214
1215 // adjust patch numbers
1216 for (unsigned int i = old_n_patches; i < patches.size(); ++i)
1217 patches[i].patch_index += old_n_patches;
1218
1219 // adjust patch neighbors
1220 for (unsigned int i = old_n_patches; i < patches.size(); ++i)
1221 for (const unsigned int n : GeometryInfo<patch_dim>::face_indices())
1222 if (patches[i].neighbors[n] != Patch::no_neighbor)
1223 patches[i].neighbors[n] += old_n_patches;
1224}
1225
1226
1228
1229#endif
void add_data_vector(const VectorType &data, const std::string &name, const DataVectorType type=type_automatic, const std::vector< DataComponentInterpretation::DataComponentInterpretation > &data_component_interpretation={})
std::vector< std::shared_ptr<::hp::FECollection< dim, spacedim > > > get_fes() const
virtual std::vector< std::string > get_dataset_names() const override
void clear_data_vectors()
void add_data_vector(const DoFHandler< dim, spacedim > &dof_handler, const VectorType &data, const std::string &name, const std::vector< DataComponentInterpretation::DataComponentInterpretation > &data_component_interpretation={})
std::vector< std::shared_ptr< internal::DataOutImplementation::DataEntryBase< dim, spacedim > > > cell_data
std::vector< Patch > patches
void add_data_vector(const DoFHandler< dim, spacedim > &dof_handler, const VectorType &data, const DataPostprocessor< spacedim > &data_postprocessor)
void merge_patches(const DataOut_DoFData< dim2, patch_dim, spacedim2, patch_spacedim > &source, const Point< patch_spacedim > &shift=Point< patch_spacedim >())
void add_data_vector_internal(const DoFHandler< dim, spacedim > *dof_handler, const VectorType &data, const std::vector< std::string > &names, const DataVectorType type, const std::vector< DataComponentInterpretation::DataComponentInterpretation > &data_component_interpretation, const bool deduce_output_names)
void add_data_vector(const VectorType &data, const DataPostprocessor< spacedim > &data_postprocessor)
std::vector< std::shared_ptr< internal::DataOutImplementation::DataEntryBase< dim, spacedim > > > dof_data
virtual void clear()
virtual std::vector< std::tuple< unsigned int, unsigned int, std::string, DataComponentInterpretation::DataComponentInterpretation > > get_nonscalar_data_ranges() const override
virtual const std::vector< Patch > & get_patches() const override
void attach_dof_handler(const DoFHandler< dim, spacedim > &)
ObserverPointer< const Triangulation< dim, spacedim > > triangulation
void add_data_vector(const DoFHandler< dim, spacedim > &dof_handler, const VectorType &data, const std::vector< std::string > &names, const std::vector< DataComponentInterpretation::DataComponentInterpretation > &data_component_interpretation={})
std::size_t memory_consumption() const
void add_mg_data_vector(const DoFHandler< dim, spacedim > &dof_handler, const MGLevelObject< VectorType > &data, const std::vector< std::string > &names, const std::vector< DataComponentInterpretation::DataComponentInterpretation > &data_component_interpretation=std::vector< DataComponentInterpretation::DataComponentInterpretation >())
void clear_input_data_references()
typename Triangulation< dim, spacedim >::cell_iterator cell_iterator
void add_mg_data_vector(const DoFHandler< dim, spacedim > &dof_handler, const MGLevelObject< VectorType > &data, const std::string &name)
ObserverPointer< const DoFHandler< dim, spacedim > > dofs
void attach_triangulation(const Triangulation< dim, spacedim > &)
virtual ~DataOut_DoFData() override
void add_data_vector(const VectorType &data, const std::vector< std::string > &names, const DataVectorType type=type_automatic, const std::vector< DataComponentInterpretation::DataComponentInterpretation > &data_component_interpretation={})
Abstract base class for mapping classes.
Definition mapping.h:318
Definition point.h:111
const std::vector< DataComponentInterpretation::DataComponentInterpretation > data_component_interpretation
ObserverPointer< const DoFHandler< dim, spacedim > > dof_handler
virtual void get_function_gradients(const FEValuesBase< dim, spacedim > &fe_patch_values, const ComponentExtractor extract_component, std::vector< std::vector< Tensor< 1, spacedim > > > &patch_gradients_system) const =0
virtual void get_function_gradients(const FEValuesBase< dim, spacedim > &fe_patch_values, const ComponentExtractor extract_component, std::vector< Tensor< 1, spacedim > > &patch_gradients) const =0
virtual void get_function_values(const FEValuesBase< dim, spacedim > &fe_patch_values, const ComponentExtractor extract_component, std::vector< double > &patch_values) const =0
virtual double get_cell_data_value(const unsigned int cell_number, const ComponentExtractor extract_component) const =0
virtual void get_function_hessians(const FEValuesBase< dim, spacedim > &fe_patch_values, const ComponentExtractor extract_component, std::vector< Tensor< 2, spacedim > > &patch_hessians) const =0
virtual std::size_t memory_consumption() const =0
virtual void get_function_hessians(const FEValuesBase< dim, spacedim > &fe_patch_values, const ComponentExtractor extract_component, std::vector< std::vector< Tensor< 2, spacedim > > > &patch_hessians_system) const =0
DataEntryBase(const DoFHandler< dim, spacedim > *dofs, const std::vector< std::string > &names, const std::vector< DataComponentInterpretation::DataComponentInterpretation > &data_component_interpretation)
virtual void get_function_values(const FEValuesBase< dim, spacedim > &fe_patch_values, const ComponentExtractor extract_component, std::vector<::Vector< double > > &patch_values_system) const =0
DataEntryBase(const DoFHandler< dim, spacedim > *dofs, const DataPostprocessor< spacedim > *data_postprocessor)
ObserverPointer< const ::DataPostprocessor< spacedim > > postprocessor
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
static ::ExceptionBase & ExcIncompatiblePatchLists()
static ::ExceptionBase & ExcInvalidNumberOfSubdivisions(int arg1)
static ::ExceptionBase & ExcInvalidCharacter(std::string arg1, std::size_t arg2)
static ::ExceptionBase & ExcInvalidNumberOfNames(int arg1, int arg2)
static ::ExceptionBase & ExcIncompatibleDatasetNames()
#define Assert(cond, exc)
static ::ExceptionBase & ExcNoDoFHandlerSelected()
static ::ExceptionBase & ExcOldDataStillPresent()
static ::ExceptionBase & ExcInvalidTensorDeclaration(int arg1, std::string arg2)
#define DeclException2(Exception2, type1, type2, outsequence)
#define DeclExceptionMsg(Exception, defaulttext)
static ::ExceptionBase & ExcInvalidVectorDeclaration(int arg1, std::string arg2)
#define DeclException3(Exception3, type1, type2, type3, outsequence)
static ::ExceptionBase & ExcNoTriangulationSelected()
#define DeclException1(Exception1, type1, outsequence)
static ::ExceptionBase & ExcInvalidVectorSize(int arg1, int arg2, int arg3)
static ::ExceptionBase & ExcMessage(std::string arg1)
UpdateFlags
std::vector< index_type > data
Definition mpi.cc:734
std::size_t size
Definition mpi.cc:733
constexpr unsigned int invalid_unsigned_int
Definition types.h:228
static std_cxx20::ranges::iota_view< unsigned int, unsigned int > face_indices()
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
std::vector< std::shared_ptr<::hp::FEFaceValues< dim, spacedim > > > x_fe_face_values
ParallelDataBase(const unsigned int n_datasets, const unsigned int n_subdivisions, const std::vector< unsigned int > &n_postprocessor_outputs, const ::hp::MappingCollection< dim, spacedim > &mapping, const std::vector< std::shared_ptr<::hp::FECollection< dim, spacedim > > > &finite_elements, const UpdateFlags update_flags, const bool use_face_values)
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 std::vector< std::shared_ptr<::hp::FECollection< dim, spacedim > > > finite_elements
std::vector< std::vector<::Vector< double > > > postprocessed_values
const ::hp::MappingCollection< dim, spacedim > mapping_collection
std::vector< std::shared_ptr<::hp::FEValues< dim, spacedim > > > x_fe_values
DataPostprocessorInputs::Vector< spacedim > patch_values_system
ParallelDataBase(const ParallelDataBase &data)
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)
void resize_system_vectors(const unsigned int n_components)