40 template <
int dim,
int spacedim>
50 template <
int dim,
int spacedim>
62 for (
typename std::vector<DataVector>::const_iterator i =
dof_data.begin();
66 for (
typename std::vector<DataVector>::const_iterator i =
cell_data.begin();
73 template <
int dim,
int spacedim>
82 template <
int dim,
int spacedim>
87 std::vector<std::string> names;
88 names.push_back(name);
93 template <
int dim,
int spacedim>
96 const std::vector<std::string> &names,
108 for (
const auto &name : names)
110 for (
const auto &data_set :
dof_data)
111 for (
const auto &data_set_name : data_set.names)
115 for (
const auto &data_set_name : data_set.names)
135 template <
int dim,
int spacedim>
136 template <
typename number>
139 const std::string & name)
141 const unsigned int n_components =
dof_handler->get_fe(0).n_components();
143 std::vector<std::string> names;
147 if ((n_components == 1) ||
150 names.resize(1, name);
156 names.resize(n_components);
157 for (
unsigned int i = 0; i < n_components; ++i)
159 std::ostringstream namebuf;
161 names[i] = name + namebuf.str();
169 template <
int dim,
int spacedim>
170 template <
typename number>
174 const std::vector<std::string> &names)
181 (names.size() == 1)) ||
183 (names.size() ==
dof_handler->get_fe(0).n_components())),
185 names.size(),
dof_handler->get_fe(0).n_components()));
186 for (
const auto &name : names)
189 Assert(name.find_first_not_of(
"abcdefghijklmnopqrstuvwxyz"
190 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
191 "0123456789_<>()") == std::string::npos,
194 name.find_first_not_of(
"abcdefghijklmnopqrstuvwxyz"
195 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
196 "0123456789_<>()")));
201 typename std::vector<DataVector>::iterator data_vector =
dof_data.begin();
202 for (; data_vector !=
dof_data.end(); ++data_vector)
203 if (data_vector->names == names)
205 data_vector->data.reinit(vec.
size());
223 dof_handler->get_triangulation().n_active_cells()))
225 typename std::vector<DataVector>::iterator data_vector =
227 for (; data_vector !=
cell_data.end(); ++data_vector)
228 if (data_vector->names == names)
230 data_vector->data.reinit(vec.
size());
244 template <
int dim,
int spacedim>
250 unsigned int n_subdivisions =
253 Assert(n_subdivisions >= 1,
261 const unsigned int n_components =
dof_handler->get_fe(0).n_components();
262 const unsigned int n_datasets =
268 unsigned int n_patches = 0;
299 const unsigned int n_q_points = patch_points.
size();
300 std::vector<double> patch_values(n_q_points);
301 std::vector<Vector<double>> patch_values_system(n_q_points,
311 default_patch.
reference_cell = ReferenceCells::get_hypercube<dim + 1>();
312 default_patch.
data.reinit(n_datasets, n_q_points * (n_subdivisions + 1));
317 typename std::vector<
320 unsigned int cell_number = 0;
324 ++cell, ++patch, ++cell_number)
386 x_fe_patch_values.
reinit(cell);
391 for (
unsigned int dataset = 0; dataset <
dof_data.size(); ++dataset)
393 if (n_components == 1)
397 for (
unsigned int i = 0; i < n_subdivisions + 1; ++i)
398 for (
unsigned int q = 0; q < n_q_points; ++q)
399 patch->data(dataset, q + n_q_points * i) =
406 patch_values_system);
407 for (
unsigned int component = 0; component < n_components;
409 for (
unsigned int i = 0; i < n_subdivisions + 1; ++i)
410 for (
unsigned int q = 0; q < n_q_points; ++q)
411 patch->data(dataset * n_components + component,
412 q + n_q_points * i) =
413 patch_values_system[q](component);
418 for (
unsigned int dataset = 0; dataset <
cell_data.size(); ++dataset)
420 const double value =
cell_data[dataset].data(cell_number);
421 for (
unsigned int q = 0; q < n_q_points; ++q)
422 for (
unsigned int i = 0; i < n_subdivisions + 1; ++i)
423 patch->data(dataset +
dof_data.size() * n_components,
424 q * (n_subdivisions + 1) + i) = value;
431 template <
int dim,
int spacedim>
437 for (
typename std::vector<DataVector>::iterator i =
dof_data.begin();
442 for (
typename std::vector<DataVector>::iterator i =
cell_data.begin();
450 template <
int dim,
int spacedim>
465 template <
int dim,
int spacedim>
476 template <
int dim,
int spacedim>
477 std::vector<std::string>
480 std::vector<std::string> names;
481 for (
typename std::vector<DataVector>::const_iterator dataset =
485 names.insert(names.end(), dataset->names.begin(), dataset->names.end());
486 for (
typename std::vector<DataVector>::const_iterator dataset =
490 names.insert(names.end(), dataset->names.begin(), dataset->names.end());
498 #include "data_out_stack.inst"
unsigned int default_subdivisions
void validate_dataset_names() const
std::size_t memory_consumption() const
void declare_data_vector(const std::string &name, const VectorType vector_type)
virtual std::vector< std::string > get_dataset_names() const override
std::vector< DataVector > cell_data
void new_parameter_value(const double parameter_value, const double parameter_step)
std::vector< DataVector > dof_data
SmartPointer< const DoFHandler< dim, spacedim >, DataOutStack< dim, spacedim > > dof_handler
void finish_parameter_value()
void attach_dof_handler(const DoFHandler< dim, spacedim > &dof_handler)
void build_patches(const unsigned int n_subdivisions=0)
std::vector<::DataOutBase::Patch< patch_dim, patch_spacedim > > patches
virtual const std::vector< ::DataOutBase::Patch< DataOutStack< dim, spacedim >::patch_dim, DataOutStack< dim, spacedim >::patch_spacedim > > & get_patches() const override
void add_data_vector(const Vector< number > &vec, const std::string &name)
void get_function_values(const InputVector &fe_function, std::vector< typename InputVector::value_type > &values) const
unsigned int size() const
const FEValuesType & get_present_fe_values() const
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, lda >> &cell, const unsigned int q_index=numbers::invalid_unsigned_int, const unsigned int mapping_index=numbers::invalid_unsigned_int, const unsigned int fe_index=numbers::invalid_unsigned_int)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcNoDoFHandlerSelected()
static ::ExceptionBase & ExcInvalidNumberOfSubdivisions(int arg1)
static ::ExceptionBase & ExcInvalidCharacter(std::string arg1, size_t arg2)
#define Assert(cond, exc)
static ::ExceptionBase & ExcNotImplemented()
static ::ExceptionBase & ExcNameAlreadyUsed(std::string arg1)
static ::ExceptionBase & ExcVectorNotDeclared(std::string arg1)
static ::ExceptionBase & ExcInvalidNumberOfNames(int arg1, int arg2)
static ::ExceptionBase & ExcDataAlreadyAdded()
static ::ExceptionBase & ExcDataNotCleared()
@ update_values
Shape function values.
std::enable_if_t< std::is_fundamental< T >::value, std::size_t > memory_consumption(const T &t)
void copy(const T *begin, const T *end, U *dest)
ReferenceCell reference_cell
unsigned int n_subdivisions
std::size_t memory_consumption() const
std::vector< std::string > names