75 vtkSmartPointer<vtkUnstructuredGrid>
77 const bool cleanup =
true,
78 const double relative_tolerance = 0.0);
102 vtkSmartPointer<vtkUnstructuredGrid>
104 const vtkSmartPointer<vtkDataObject> &data_object);
129 write_vtk(
const std::string &vtk_filename,
130 const vtkSmartPointer<vtkDataObject> &data_object);
141 inline vtkSmartPointer<vtkDoubleArray>
169 template <
int dim,
int spacedim>
172 const vtkUnstructuredGrid &unstructured_grid,
174 const std::string &material_id_field =
"",
175 const std::string &boundary_id_field =
"",
176 const std::string &manifold_id_field =
"");
201 template <
int dim,
int spacedim>
202 vtkSmartPointer<vtkUnstructuredGrid>
205 const std::string &material_id_field =
"",
206 const std::string &boundary_id_field =
"",
207 const std::string &manifold_id_field =
"");
229 template <
int dim,
int spacedim>
231 write_vtk(
const std::string &vtk_filename,
233 const std::string &material_id_field =
"",
234 const std::string &boundary_id_field =
"",
235 const std::string &manifold_id_field =
"");
263 template <
int dim,
int spacedim>
265 read_tria(
const std::string &vtk_filename,
267 const bool cleanup =
true,
268 const double relative_tolerance = 0.0,
269 const std::string &material_id_field =
"",
270 const std::string &boundary_id_field =
"",
271 const std::string &manifold_id_field =
"");
292 const std::string &cell_data_name,
294 const bool cleanup =
true,
295 const double relative_tolerance = 0.0);
316 const std::string &vertex_data_name,
318 const bool cleanup =
true,
319 const double relative_tolerance = 0.0);
349 const bool cleanup =
true,
350 const double relative_tolerance = 0.0);
378 template <
int dim,
int spacedim>
379 std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
380 std::vector<std::string>>
439 template <
int dim,
int spacedim,
typename VectorType>
444 VectorType &output_vector);
476 template <
int dim,
int spacedim>
478 read_vtk(
const std::string &vtk_filename,
481 std::vector<std::string> &data_names,
482 const bool cleanup =
true,
483 const double relative_tolerance = 0.0,
484 const std::string &material_id_field =
"",
485 const std::string &boundary_id_field =
"",
486 const std::string &manifold_id_field =
"");
492 inline vtkSmartPointer<vtkDoubleArray>
495 vtkSmartPointer<vtkDoubleArray> p_vtk =
496 vtkSmartPointer<vtkDoubleArray>::New();
498 p_vtk->SetNumberOfComponents(dim);
499 p_vtk->SetNumberOfTuples(1);
501 for (
int d = 0; d < dim; ++d)
502 p_vtk->FillComponent(d, p[d]);
509 template <
int dim,
int spacedim,
typename VectorType>
514 VectorType &output_vector)
517 const auto &fe = dh.
get_fe();
519 const auto dist_to_serial_vertices =
526 unsigned int vertex_comp_offset = 0;
527 unsigned int cell_comp_offset = 0;
528 for (
unsigned int field = 0; field < fe.n_blocks(); ++field)
530 const auto &field_fe = fe.base_element(field);
531 const unsigned int n_comps = field_fe.n_components();
532 if (field_fe.n_dofs_per_vertex() > 0)
537 for (
const auto &cell : dh.active_cell_iterators())
538 if (cell->is_locally_owned())
542 dist_to_serial_vertices[cell->vertex_index(v)];
544 for (
unsigned int c = 0; c < n_comps; ++c)
547 cell->vertex_dof_index(v, vertex_comp_offset + c);
548 Assert(locally_owned_dofs.is_element(dof_index),
550 output_vector[dof_index] =
551 data[dofs_offset + n_comps * serial_vertex_index +
555 dofs_offset += n_local_dofs;
556 vertex_comp_offset += n_comps;
558 else if (field_fe.template n_dofs_per_object<dim>() > 0)
568 for (; parallel_cell != dh.
end(); ++parallel_cell)
569 if (parallel_cell->is_locally_owned())
573 while (serial_cell->id() < parallel_cell->id())
575 const auto serial_cell_index =
576 serial_cell->global_active_cell_index();
577 for (
unsigned int c = 0; c < n_comps; ++c)
580 parallel_cell->dof_index(cell_comp_offset + c);
581 Assert(locally_owned_dofs.is_element(dof_index),
583 output_vector[dof_index] =
584 data[dofs_offset + n_comps * serial_cell_index + c];
587 dofs_offset += n_local_dofs;
588 cell_comp_offset += n_comps;
void read_vtk(const std::string &vtk_filename, DoFHandler< dim, spacedim > &dof_handler, Vector< double > &output_vector, std::vector< std::string > &data_names, const bool cleanup=true, const double relative_tolerance=0.0, const std::string &material_id_field="", const std::string &boundary_id_field="", const std::string &manifold_id_field="")